summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--PKGLIST1488
-rw-r--r--README.5_20.08 (renamed from README.5_20.01)277
-rw-r--r--README.elogind24
-rw-r--r--deps/OpenAL/.deps1
-rw-r--r--deps/OpenAL/.url2
-rwxr-xr-xdeps/OpenAL/OpenAL.SlackBuild135
-rw-r--r--deps/OpenAL/slack-desc19
-rw-r--r--deps/PyQt/.url1
-rwxr-xr-xdeps/PyQt/PyQt.SlackBuild140
-rw-r--r--deps/PyQt/PyQt.phonon.diff11
-rw-r--r--deps/PyQt/slack-desc19
-rw-r--r--deps/PyQt5/.deps3
-rw-r--r--deps/PyQt5/.url2
-rwxr-xr-xdeps/PyQt5/PyQt5.SlackBuild151
-rw-r--r--deps/PyQt5/patches/pyqt-qt5.11.patch17
-rw-r--r--deps/PyQt5/patches/pyqt-support-new-qt.patch12
-rw-r--r--deps/PyQt5/patches/pyqt5-cura-crash.patch559
-rw-r--r--deps/PyQt5/patches/pyqt5-python2-crash.patch13
-rw-r--r--deps/QScintilla/.url1
-rwxr-xr-xdeps/QScintilla/QScintilla.SlackBuild219
-rw-r--r--deps/QScintilla/patches/QScintilla_qsciscintillabase_qurl.diff11
-rw-r--r--deps/QScintilla/slack-desc19
-rw-r--r--deps/SDL_sound/.url1
-rwxr-xr-xdeps/SDL_sound/SDL_sound.SlackBuild114
-rw-r--r--deps/SDL_sound/slack-desc19
-rw-r--r--deps/accountsservice/.url2
-rwxr-xr-xdeps/accountsservice/accountsservice.SlackBuild41
-rwxr-xr-xdeps/alldeps.SlackBuild27
-rwxr-xr-xdeps/autoconf-archive/autoconf-archive.SlackBuild70
-rw-r--r--deps/autoconf-archive/autoconf-archive.info10
-rw-r--r--deps/autoconf-archive/slack-desc19
-rw-r--r--deps/brotli/.url1
-rwxr-xr-xdeps/brotli/brotli.SlackBuild132
-rw-r--r--deps/brotli/slack-desc19
-rw-r--r--deps/cracklib/.url2
-rw-r--r--deps/cracklib/cracklib-words-2.9.7.bz2bin6951761 -> 0 bytes
-rwxr-xr-xdeps/cracklib/cracklib.SlackBuild135
-rw-r--r--deps/cracklib/patches/cracklib-2.9.6-cve-2016-6318.patch108
-rw-r--r--deps/cracklib/slack-desc20
-rwxr-xr-xdeps/cryfs/cryfs.SlackBuild4
-rw-r--r--deps/dbus/dbus-1.12.x-allow_root_globally.diff18
-rw-r--r--deps/dbus/dbus-enable-elogind.patch73
-rwxr-xr-xdeps/dbus/dbus.SlackBuild (renamed from deps/gpgme/gpgme.SlackBuild)109
-rw-r--r--deps/dbus/dbus.url1
-rw-r--r--deps/dbus/doinst.sh.gzbin0 -> 394 bytes
-rw-r--r--deps/dbus/rc.messagebus.gzbin0 -> 816 bytes
-rw-r--r--deps/dbus/slack-desc18
-rwxr-xr-xdeps/dvdauthor/dvdauthor.SlackBuild4
-rw-r--r--deps/elogind/.url3
-rwxr-xr-xdeps/elogind/doinst.sh27
-rwxr-xr-xdeps/elogind/elogind.SlackBuild180
-rw-r--r--deps/elogind/rc.elogind59
-rw-r--r--deps/espeak-ng/.deps1
-rw-r--r--deps/espeak-ng/.url1
-rwxr-xr-xdeps/espeak-ng/espeak-ng.SlackBuild118
-rw-r--r--deps/espeak-ng/slack-desc19
-rw-r--r--deps/flite/.url1
-rwxr-xr-xdeps/flite/flite.SlackBuild117
-rw-r--r--deps/flite/slack-desc19
-rw-r--r--deps/gpgme/.url1
-rw-r--r--deps/gpgme/patches/gpgme-1.8.0_libsuffix.patch30
-rw-r--r--deps/gpgme/slack-desc19
-rwxr-xr-xdeps/grantlee-qt4/grantlee-qt4.SlackBuild26
-rw-r--r--deps/grantlee/.url2
-rwxr-xr-xdeps/grantlee/grantlee.SlackBuild14
-rw-r--r--deps/hack-font-ttf/.url4
-rw-r--r--deps/hack-font-ttf/CHANGELOG.md743
-rw-r--r--deps/hack-font-ttf/LICENSE.md64
-rwxr-xr-xdeps/hack-font-ttf/hack-font-ttf.SlackBuild86
-rw-r--r--deps/hack-font-ttf/slack-desc19
-rw-r--r--deps/hyphen/.url1
-rw-r--r--deps/hyphen/slack-desc19
-rw-r--r--deps/kdsoap/.url1
-rwxr-xr-xdeps/kdsoap/kdsoap.SlackBuild (renamed from deps/hyphen/hyphen.SlackBuild)53
-rw-r--r--deps/kdsoap/slack-desc19
-rwxr-xr-xdeps/libburn/libburn.SlackBuild2
-rwxr-xr-xdeps/libdbusmenu-qt5/libdbusmenu-qt5.SlackBuild42
-rw-r--r--deps/libpwquality/.url1
-rw-r--r--deps/libpwquality/slack-desc20
-rw-r--r--deps/libqalculate/.url1
-rwxr-xr-xdeps/libqalculate/libqalculate.SlackBuild (renamed from deps/pcaudiolib/pcaudiolib.SlackBuild)27
-rw-r--r--deps/libqalculate/slack-desc19
-rwxr-xr-xdeps/libsass/libsass.SlackBuild5
-rw-r--r--deps/libxkbcommon/.url2
-rwxr-xr-xdeps/libxkbcommon/libxkbcommon.SlackBuild125
-rw-r--r--deps/libxkbcommon/slack-desc19
-rw-r--r--deps/mlt/.url2
-rwxr-xr-xdeps/mlt/mlt.SlackBuild10
-rw-r--r--deps/mlt/patches/mlt_qt515.patch49
-rw-r--r--deps/noto-cjk-font-ttf/.url1
-rw-r--r--deps/noto-cjk-font-ttf/70-noto-cjk.conf147
-rw-r--r--deps/noto-cjk-font-ttf/HISTORY321
-rw-r--r--deps/noto-cjk-font-ttf/LICENSE92
-rw-r--r--deps/noto-cjk-font-ttf/NEWS40
-rwxr-xr-xdeps/noto-cjk-font-ttf/noto-cjk-font-ttf.SlackBuild83
-rw-r--r--deps/noto-cjk-font-ttf/slack-desc19
-rw-r--r--deps/noto-font-ttf/.url1
-rwxr-xr-xdeps/noto-font-ttf/noto-font-ttf.SlackBuild98
-rw-r--r--deps/noto-font-ttf/slack-desc19
-rwxr-xr-xdeps/opencv/opencv.SlackBuild2
-rw-r--r--deps/pcaudiolib/.url1
-rw-r--r--deps/pcaudiolib/slack-desc19
-rw-r--r--deps/pipewire/.url1
-rw-r--r--deps/pipewire/doinst.sh15
-rwxr-xr-xdeps/pipewire/pipewire.SlackBuild (renamed from deps/libpwquality/libpwquality.SlackBuild)116
-rw-r--r--deps/pipewire/slack-desc20
-rwxr-xr-xdeps/polkit-qt5-1/polkit-qt5-1.SlackBuild12
-rw-r--r--deps/polkit/0001-configure-fix-elogind-support.patch.gzbin0 -> 610 bytes
-rw-r--r--deps/polkit/10-org.freedesktop.NetworkManager.rules7
-rw-r--r--deps/polkit/20-plugdev-group-mount-override.rules16
-rw-r--r--deps/polkit/doinst.sh.gzbin0 -> 547 bytes
-rw-r--r--deps/polkit/dont-set-wheel-group-as-admin.diff.gzbin0 -> 292 bytes
-rwxr-xr-xdeps/polkit/polkit.SlackBuild190
-rw-r--r--deps/polkit/slack-desc19
-rwxr-xr-xdeps/poppler/poppler.SlackBuild2
-rw-r--r--deps/python-enum34/.url1
-rwxr-xr-xdeps/python-enum34/python-enum34.SlackBuild96
-rw-r--r--deps/python-enum34/slack-desc19
-rw-r--r--deps/qca-qt5/.url4
-rw-r--r--deps/qca-qt5/patches/qca_openssl11.patch2036
-rwxr-xr-xdeps/qca-qt5/qca-qt5.SlackBuild32
-rw-r--r--deps/qt5-webkit/.deps3
-rw-r--r--deps/qt5-webkit/.url1
-rw-r--r--deps/qt5-webkit/patches/qt5-webkit.gcc7.patch34
-rw-r--r--deps/qt5-webkit/patches/qt5-webkit.icu59.patch80
-rw-r--r--deps/qt5-webkit/patches/qt5-webkit.icu65.patch47
-rw-r--r--deps/qt5-webkit/patches/qt5-webkit.pthread.patch32
-rwxr-xr-xdeps/qt5-webkit/qt5-webkit.SlackBuild143
-rw-r--r--deps/qt5-webkit/slack-desc19
-rw-r--r--deps/qt5/.deps2
-rw-r--r--deps/qt5/.url1
-rw-r--r--deps/qt5/doinst.sh9
-rw-r--r--deps/qt5/patches/platformplugin-install-path-fix.patch15
-rw-r--r--deps/qt5/patches/qt5.alsa.patch11
-rw-r--r--deps/qt5/patches/qt5.cr206850.patch43
-rw-r--r--deps/qt5/patches/qt5.cve-2020-0569.patch29
-rw-r--r--deps/qt5/patches/qt5.cve-2020-0570.patch48
-rw-r--r--deps/qt5/patches/qt5.delayed_highlight.patch72
-rw-r--r--deps/qt5/patches/qt5.glibc224.patch33
-rw-r--r--deps/qt5/patches/qt5.mysql.h.diff11
-rw-r--r--deps/qt5/patches/qt5.private-includes.patch53
-rw-r--r--deps/qt5/patches/qt5.pulseaudio.diff12
-rw-r--r--deps/qt5/patches/qt5.qlockfile-deadlock.patch116
-rw-r--r--deps/qt5/patches/qt5.qt5uitoolsconfig.patch17
-rw-r--r--deps/qt5/patches/qt5.qtbase_cmake_isystem_includes.patch14
-rw-r--r--deps/qt5/patches/qt5.qtbug-49061.patch80
-rw-r--r--deps/qt5/patches/qt5.qtbug-49452.patch58
-rw-r--r--deps/qt5/patches/qt5.qtbug-51621.patch39
-rw-r--r--deps/qt5/patches/qt5.qtbug-51648.patch88
-rw-r--r--deps/qt5/patches/qt5.qtbug-51649.patch159
-rw-r--r--deps/qt5/patches/qt5.qtbug-51676.patch126
-rw-r--r--deps/qt5/patches/qt5.qtbug-51890.patch82
-rw-r--r--deps/qt5/patches/qt5.qtbug-51927.patch185
-rw-r--r--deps/qt5/patches/qt5.qtbug-53237.patch90
-rw-r--r--deps/qt5/patches/qt5.qtbug-55583.patch41
-rw-r--r--deps/qt5/patches/qt5.qtbug-60558.patch32
-rw-r--r--deps/qt5/patches/qt5.qtbug-61140.patch101
-rw-r--r--deps/qt5/patches/qt5.qtbug-66103.patch172
-rw-r--r--deps/qt5/patches/qt5.qtbug-69310.patch37
-rw-r--r--deps/qt5/patches/qt5.qtbug-76255.patch35
-rw-r--r--deps/qt5/patches/qt5.qtbug-77037.patch89
-rw-r--r--deps/qt5/patches/qt5.qtbug-77364.patch13
-rw-r--r--deps/qt5/patches/qt5.webengine_gcc8.patch26
-rw-r--r--deps/qt5/patches/qt5.whandle.patch24
-rw-r--r--deps/qt5/patches/qtbase-qxcbwindow.patch97
-rw-r--r--deps/qt5/patches/qtbase-zlib-compression.patch41
-rw-r--r--deps/qt5/profile.d/qt5.csh17
-rw-r--r--deps/qt5/profile.d/qt5.sh17
-rwxr-xr-xdeps/qt5/qt5.SlackBuild380
-rw-r--r--deps/qt5/slack-desc19
-rwxr-xr-xdeps/sassc/sassc.SlackBuild2
-rw-r--r--deps/sip/.url2
-rw-r--r--deps/sip/patches/PyQt4_sip_regression.patch71
-rwxr-xr-xdeps/sip/sip.SlackBuild189
-rw-r--r--deps/sip/slack-desc19
-rwxr-xr-xdeps/speech-dispatcher/speech-dispatcher.SlackBuild25
-rwxr-xr-xdeps/updates.SlackBuild112
-rw-r--r--deps/util-linux/adjtimex_1.29-2.2.diff6564
-rw-r--r--deps/util-linux/bsdstrings-util-linux_overflow.diff20
-rw-r--r--deps/util-linux/ddate.1115
-rw-r--r--deps/util-linux/ddate.c399
-rw-r--r--deps/util-linux/doinst.sh33
-rw-r--r--deps/util-linux/pam.d-su/su11
-rw-r--r--deps/util-linux/pam.d-su/su-l6
-rw-r--r--deps/util-linux/pam.d/chfn6
-rw-r--r--deps/util-linux/pam.d/chsh6
-rw-r--r--deps/util-linux/pam.d/login15
-rw-r--r--deps/util-linux/pam.d/runuser5
-rw-r--r--deps/util-linux/pam.d/runuser-l4
-rw-r--r--deps/util-linux/rc.setterm13
-rw-r--r--deps/util-linux/scsi_ioctl.h48
-rw-r--r--deps/util-linux/setserial-rc.serial.diff49
-rw-r--r--deps/util-linux/setserial-undef_TIOCGHAYESESP.diff13
-rw-r--r--deps/util-linux/slack-desc19
-rw-r--r--deps/util-linux/su.default3
-rwxr-xr-xdeps/util-linux/util-linux.SlackBuild381
-rw-r--r--deps/util-linux/util-linux.do.not.list.ram.devices.diff13
-rw-r--r--deps/util-linux/util-linux.fdisk-no-solaris.diff12
-rw-r--r--deps/util-linux/ziptool-fix_build.patch24
-rw-r--r--deps/woff2/.deps1
-rw-r--r--deps/woff2/.url16
-rw-r--r--deps/woff2/slack-desc19
-rwxr-xr-xdeps/woff2/woff2.SlackBuild122
-rw-r--r--deps/xorg-server/patches/0001-Always-install-vbe-and-int10-sdk-headers.patch37
-rw-r--r--deps/xorg-server/patches/0001-autobind-GPUs-to-the-screen.patch293
-rw-r--r--deps/xorg-server/patches/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch47
-rw-r--r--deps/xorg-server/patches/fix-nouveau-segfault.diff12
-rwxr-xr-xdeps/xorg-server/xorg-server.SlackBuild37
-rw-r--r--kde/build/alkimia (renamed from kde/build/digikam)0
-rw-r--r--kde/build/calligra1
-rw-r--r--kde/build/kile1
-rw-r--r--kde/build/kjots2
-rw-r--r--kde/build/krita1
-rw-r--r--kde/build/sddm-qt51
-rw-r--r--kde/cmake/alkimia26
-rw-r--r--kde/cmake/applications2
-rw-r--r--kde/cmake/k3b2
-rw-r--r--kde/cmake/kid322
-rw-r--r--kde/cmake/kscreenlocker10
-rw-r--r--kde/cmake/kwallet-pam21
-rw-r--r--kde/cmake/sddm-qt523
-rw-r--r--kde/cmake/xdg-desktop-portal-kde24
-rw-r--r--kde/doinst.sh/powerdevil7
-rw-r--r--kde/doinst.sh/sddm-qt57
-rwxr-xr-xkde/kde.SlackBuild1
-rw-r--r--kde/kde.options15
-rw-r--r--kde/modules/applications4
-rw-r--r--kde/modules/applications-extra2
-rw-r--r--kde/modules/frameworks3
-rw-r--r--kde/modules/kdepim1
-rw-r--r--kde/modules/plasma5
-rw-r--r--kde/modules/plasma-extra4
-rw-r--r--kde/patch/akonadi.patch12
-rw-r--r--kde/patch/akonadi/akonadi_mariadb_qtsql.patch91
-rw-r--r--kde/patch/akonadi/akonadi_rename-header.patch77
-rw-r--r--kde/patch/akonadi/akonadi_revert-abs-path.patch70
-rw-r--r--kde/patch/akonadi4.patch1
-rw-r--r--kde/patch/amarok.patch1
-rw-r--r--kde/patch/ark.patch8
-rw-r--r--kde/patch/ark/ark_cve-2020-16116.patch47
-rw-r--r--kde/patch/ark/ark_kdebug357057.patch37
-rw-r--r--kde/patch/baloo5.patch5
-rw-r--r--kde/patch/baloo5/baloo-4.96.0_kaboutdata.diff69
-rw-r--r--kde/patch/baloo5/baloo_def_indexing_disabled.patch12
-rw-r--r--kde/patch/calligra.patch15
-rw-r--r--kde/patch/calligra/calligra3_poppler-0.71.patch131
-rw-r--r--kde/patch/calligra/calligra3_poppler-0.72.patch29
-rw-r--r--kde/patch/calligra/calligra3_poppler-0.73.patch32
-rw-r--r--kde/patch/calligra/calligra3_qt511.patch135
-rw-r--r--kde/patch/calligra/calligra3_qt513.patch22
-rw-r--r--kde/patch/calligraplan.patch13
-rw-r--r--kde/patch/calligraplan/calligraplan.kcalcore.1.patch47
-rw-r--r--kde/patch/calligraplan/calligraplan.kcalcore.2.patch85
-rw-r--r--kde/patch/calligraplan/calligraplan.kcalendarcore.patch34
-rw-r--r--kde/patch/calligraplan/calligraplan.missingheader.patch25
-rw-r--r--kde/patch/calligraplan/calligraplan.qt-5.15.patch10
-rw-r--r--kde/patch/calligraplan/calligraplan.qt-511.patch125
-rw-r--r--kde/patch/cantor.patch4
-rw-r--r--kde/patch/cantor/cantor_julia.patch193
-rw-r--r--kde/patch/cantor/cantor_python.patch31
-rw-r--r--kde/patch/digikam.patch12
-rw-r--r--kde/patch/digikam/digikam_clang_fix.patch38
-rw-r--r--kde/patch/digikam/digikam_databasemodel.patch13337
-rw-r--r--kde/patch/digikam/digikam_imagemagick7.patch40
-rw-r--r--kde/patch/dolphin.patch1
-rw-r--r--kde/patch/falkon.patch2
-rw-r--r--kde/patch/falkon/falkon.qt-5.15.diff20
-rw-r--r--kde/patch/gwenview.patch4
-rw-r--r--kde/patch/gwenview/gwenview-17.04.1_dataloss.patch131
-rw-r--r--kde/patch/kaccounts-integration.patch4
-rw-r--r--kde/patch/kaccounts-integration/kaccounts-integration-15.08.3_service.patch28
-rw-r--r--kde/patch/kalgebra.patch1
-rw-r--r--kde/patch/kalzium.patch3
-rw-r--r--kde/patch/kalzium/kalzium_kf_5.31.patch156
-rw-r--r--kde/patch/kate.patch5
-rw-r--r--kde/patch/kate/kate-15.12.0.patch31
-rw-r--r--kde/patch/kcalc.patch5
-rw-r--r--kde/patch/kcalc/kcalc-kdebug_360105.patch15
-rw-r--r--kde/patch/kcalcore.patch4
-rw-r--r--kde/patch/kcalcore/kcalcore_libical3.patch109
-rw-r--r--kde/patch/kcoreaddons.patch5
-rw-r--r--kde/patch/kcoreaddons/kcoreaddons.kdebug_362161.patch27
-rw-r--r--kde/patch/kde-baseapps.patch5
-rw-r--r--kde/patch/kde-baseapps/dolphin_kdebug_327224.patch57
-rw-r--r--kde/patch/kde-cli-tools.patch6
-rw-r--r--kde/patch/kde-cli-tools/kde-cli-tools_ecm.patch11
-rw-r--r--kde/patch/kde-cli-tools/kde-cli-tools_kaboutdata.diff59
-rw-r--r--kde/patch/kde-dev-utils.patch3
-rw-r--r--kde/patch/kde-dev-utils/build_with_kf548.patch156
-rw-r--r--kde/patch/kde-gtk-config.patch4
-rw-r--r--kde/patch/kde-gtk-config/kde-gtk-config_loadcurrentsettings.patch622
-rw-r--r--kde/patch/kde-runtime.patch8
-rw-r--r--kde/patch/kde-runtime/kde-runtime.kdebug324470.diff49
-rw-r--r--kde/patch/kde-runtime/kde-runtime_gpgme.patch133
-rw-r--r--kde/patch/kde-workspace.patch4
-rw-r--r--kde/patch/kde-workspace/kde-workspace.desktopnames.diff34
-rw-r--r--kde/patch/kdeconnect-framework.patch5
-rw-r--r--kde/patch/kdeconnect-framework/kdeconnect-kde_qca.diff72
-rw-r--r--kde/patch/kdeconnect-kde.patch2
-rw-r--r--kde/patch/kdeconnect-kde/kdeconnect-kde_openssh-8.2.diff12
-rw-r--r--kde/patch/kdelibs.patch3
-rw-r--r--kde/patch/kdelibs/fixbic-4.14.6.patch47
-rw-r--r--kde/patch/kdelibs/kdelibs.grantlee-qt4.include.path.patch11
-rw-r--r--kde/patch/kdelibs4support.patch4
-rw-r--r--kde/patch/kdelibs4support/update-FindGettext.patch36
-rw-r--r--kde/patch/kdenlive.patch4
-rw-r--r--kde/patch/kdenlive/kdenlive_gcc7.patch32
-rw-r--r--kde/patch/kdepim.patch4
-rw-r--r--kde/patch/kdepim/kdepim-install_kleopatra_headers.patch129
-rw-r--r--kde/patch/kdepimlibs.patch3
-rw-r--r--kde/patch/kdepimlibs/kdepimlibs_kmail_crash.patch59
-rw-r--r--kde/patch/kdepimlibs4.patch3
-rw-r--r--kde/patch/kdepimlibs4/kdepimlibs.libical3.diff184
-rw-r--r--kde/patch/kdeplasma-addons.patch4
-rw-r--r--kde/patch/kdeplasma-addons/random_generator_cve-2013-2120.patch76
-rw-r--r--kde/patch/kdesdk-kioslaves.patch3
-rw-r--r--kde/patch/kdesdk-kioslaves/svn19.patch87
-rw-r--r--kde/patch/kdev-python.patch4
-rw-r--r--kde/patch/kdev-python/kdev-python-5.4.4_python38.patch560
-rw-r--r--kde/patch/kdewebdev.patch6
-rw-r--r--kde/patch/kdewebdev/include-tidy.patch13
-rw-r--r--kde/patch/kholidays.patch8
-rw-r--r--kde/patch/kholidays/kholidays_depfreeze_revert.patch61
-rw-r--r--kde/patch/kholidays/kholidays_isnan.patch30
-rw-r--r--kde/patch/kinfocenter.patch1
-rw-r--r--kde/patch/kio.patch18
-rw-r--r--kde/patch/kio/kio_KDEBUG_399709.patch44
-rw-r--r--kde/patch/kio/kio_dolphin_servicemenus.patch126
-rw-r--r--kde/patch/kio/kio_fix_url_setpath.patch65
-rw-r--r--kde/patch/kio/kio_kdelibs4_docpatch.patch22
-rw-r--r--kde/patch/kirigami2.patch4
-rw-r--r--kde/patch/kirigami2/kirigami_iconview_crash.patch143
-rw-r--r--kde/patch/kmail.patch4
-rw-r--r--kde/patch/kmail/kmail_kontact_kdebug_404881.patch75
-rw-r--r--kde/patch/kmplot.patch3
-rw-r--r--kde/patch/kmplot/kmplot_isnan.patch42
-rw-r--r--kde/patch/konsole.patch9
-rw-r--r--kde/patch/konsole/konsole.cursor.antialias.patch83
-rw-r--r--kde/patch/konsole/konsole.term.is.konsole.patch24
-rw-r--r--kde/patch/kopete.patch9
-rw-r--r--kde/patch/kopete/kopete_kdebug376348.patch127
-rw-r--r--kde/patch/kopete/kopete_kdebug393372.patch30
-rw-r--r--kde/patch/korundum.patch5
-rw-r--r--kde/patch/korundum/korundum_ruby19.patch31
-rw-r--r--kde/patch/kpat.patch6
-rw-r--r--kde/patch/kpat/kpat_no_freecell_solver_dep.patch1475
-rw-r--r--kde/patch/krita.patch7
-rw-r--r--kde/patch/krita/krita_qt512.patch117
-rw-r--r--kde/patch/krita/krita_qt59.patch26
-rw-r--r--kde/patch/krita/krita_qtabletevents.patch67
-rw-r--r--kde/patch/krunner.patch4
-rw-r--r--kde/patch/krunner/krunner_KDEBUG_423003.patch54
-rw-r--r--kde/patch/kscreenlocker.patch13
-rw-r--r--kde/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch36
-rw-r--r--kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch112
-rw-r--r--kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch49
-rw-r--r--kde/patch/kstars.patch3
-rw-r--r--kde/patch/kstars/kstars_isnan.patch46
-rw-r--r--kde/patch/ksudoku.patch4
-rw-r--r--kde/patch/ksudoku/ksudoku_qwindowtitle.patch15
-rw-r--r--kde/patch/ktexteditor.patch3
-rw-r--r--kde/patch/ktexteditor/ktexteditor_fix_indentation.patch32
-rw-r--r--kde/patch/ktorrent.patch7
-rw-r--r--kde/patch/ktorrent/ktorrent_systray.patch24
-rw-r--r--kde/patch/ktorrent/ktorrent_taglib_linking.patch248
-rw-r--r--kde/patch/ktp-accounts-kcm.patch4
-rw-r--r--kde/patch/ktp-accounts-kcm/ktp-accounts-kcm_kdebug_351785.patch32
-rw-r--r--kde/patch/kwin.patch11
-rw-r--r--kde/patch/kwin/kwin_cmake310.patch52
-rw-r--r--kde/patch/kwin/kwin_qt59_rootwindow_events.patch63
-rw-r--r--kde/patch/kwin/kwin_replace_logind_with_ck2.patch85
-rw-r--r--kde/patch/libkdcraw.patch3
-rw-r--r--kde/patch/libkdcraw/libkdcraw_cmake_minver.patch7
-rw-r--r--kde/patch/libkexiv2.patch3
-rw-r--r--kde/patch/libkexiv2/libkexiv2_cmake_minver.patch7
-rw-r--r--kde/patch/libkface.patch1
-rw-r--r--kde/patch/libkleo.patch4
-rw-r--r--kde/patch/libkleo/libkleo_gcc7.patch27
-rw-r--r--kde/patch/libksysguard.patch4
-rw-r--r--kde/patch/libksysguard/libksysguard_isnan.patch176
-rw-r--r--kde/patch/marble.patch4
-rw-r--r--kde/patch/marble/marble_qt4.patch47
-rw-r--r--kde/patch/messagelib.patch4
-rw-r--r--kde/patch/messagelib/messagelib_CVE-2018-19516.patch20
-rw-r--r--kde/patch/oxygen-gtk2.patch1
-rw-r--r--kde/patch/oxygen-gtk3.patch3
-rw-r--r--kde/patch/oxygen-gtk3/oxygen-gtk3-1.3.1_gtk3.8.patch29
-rw-r--r--kde/patch/perlqt.patch1
-rw-r--r--kde/patch/plasma-browser-integration.patch1
-rw-r--r--kde/patch/plasma-desktop.patch12
-rwxr-xr-xkde/patch/plasma-desktop/plasma-desktop-4.99.0_kfontinst_po.diff60
-rw-r--r--kde/patch/plasma-desktop/plasma-desktop_kdebug_401508.patch39
-rw-r--r--kde/patch/plasma-desktop/plasma-desktop_kdelibs4support.diff88
-rw-r--r--kde/patch/plasma-desktop/plasma-desktop_kickoff_kdebug_356398.patch24
-rw-r--r--kde/patch/plasma-framework.patch11
-rw-r--r--kde/patch/plasma-framework/plasma-framework_KDEBUG_357895.patch24
-rw-r--r--kde/patch/plasma-framework/plasma-framework_KDEBUG_359388.patch31
-rw-r--r--kde/patch/plasma-framework/plasma-framework_KDEBUG_423093.patch29
-rw-r--r--kde/patch/plasma-nm.patch10
-rw-r--r--kde/patch/plasma-nm/plasma-nm-fixes.patch322
-rw-r--r--kde/patch/plasma-nm/plasma-nm_modemmanager-qt_api.patch73
-rw-r--r--kde/patch/plasma-nm/plasma-nm_networkmanager.patch17
-rw-r--r--kde/patch/plasma-pa.patch5
-rw-r--r--kde/patch/plasma-pa/plasma-pa_enable_gsettings.patch583
-rw-r--r--kde/patch/plasma-wayland-protocols.patch2
-rw-r--r--kde/patch/plasma-wayland-protocols/plasma-wayland-protocols_add.missing.since.13.patch60
-rw-r--r--kde/patch/plasma-workspace.patch17
-rw-r--r--kde/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch152
-rw-r--r--kde/patch/plasma-workspace/plasma-workspace_apply_767aa57.patch23
-rw-r--r--kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch189
-rw-r--r--kde/patch/plasma-workspace/plasma-workspace_kdebug389815.patch32
-rw-r--r--kde/patch/powerdevil.patch4
-rw-r--r--kde/patch/powerdevil/powerdevil-5.12.4_firstrun.patch42
-rw-r--r--kde/patch/pykde4.patch1
-rw-r--r--kde/patch/sddm-qt5.patch27
-rw-r--r--kde/patch/sddm-qt5/sddm_honor-PAM-supplemental-groups-v2.patch183
-rw-r--r--kde/patch/sddm-qt5/sddm_revert-honor-PAM-supplemental-groups.patch88
-rw-r--r--kde/patch/sddm-theme-breeze.patch2
-rw-r--r--kde/patch/sddm-theme-breeze/sddm-theme-breeze_path.diff10
-rw-r--r--kde/patch/spectacle.patch7
-rw-r--r--kde/patch/spectacle/spectacle_hidpi.patch28
-rw-r--r--kde/patch/spectacle/spectacle_rect_capture.patch52
-rw-r--r--kde/patch/strigi-multimedia.patch1
-rw-r--r--kde/patch/umbrello.patch10
-rw-r--r--kde/patch/umbrello/umbrello-4.11.4_listitem.patch13
-rw-r--r--kde/patch/umbrello/umbrello_qt510_kaboutdata_h.patch33
-rw-r--r--kde/pkgsrc/kdeconnect-framework1
-rw-r--r--kde/pkgsrc/polkit-kde-kcmodules-framework2
-rw-r--r--kde/post-install/kscreenlocker.post-install7
-rw-r--r--kde/post-install/plasma-workspace.post-install31
-rw-r--r--kde/post-install/plasma-workspace/pam.d/kde10
-rw-r--r--kde/post-install/plasma-workspace/scripts/startkwayland2
-rw-r--r--kde/post-install/plasma-workspace/xsession/plasma-safe.desktop2
-rw-r--r--kde/post-install/powerdevil.post-install37
-rw-r--r--kde/post-install/powerdevil/10-enable-ck2-power.rules12
-rw-r--r--kde/post-install/powerdevil/10-enable-elogind-power.rules12
-rw-r--r--kde/post-install/powerdevil/10-enable-powerdevil-discrete-gpu.rules9
-rw-r--r--kde/post-install/powerdevil/10-enable-suspend.rules10
-rw-r--r--kde/post-install/powerdevil/10-enable-upower-suspend.rules9
-rw-r--r--kde/post-install/powerdevil/30-org.freedesktop.upower.pkla9
-rw-r--r--kde/post-install/powerdevil/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla8
-rw-r--r--kde/post-install/powerdevil/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla7
-rw-r--r--kde/post-install/sddm-qt5.post-install31
-rw-r--r--kde/post-install/sddm-qt5/pam.d/sddm26
-rw-r--r--kde/post-install/sddm-qt5/pam.d/sddm-autologin25
-rw-r--r--kde/post-install/sddm-qt5/pam.d/sddm-greeter19
-rw-r--r--kde/pre-install/alkimia.pre-install2
-rw-r--r--kde/slack-desc/akonadi2
-rw-r--r--kde/slack-desc/akonadi-calendar2
-rw-r--r--kde/slack-desc/akonadi-calendar-tools2
-rw-r--r--kde/slack-desc/akonadi-contacts6
-rw-r--r--kde/slack-desc/akonadi-import-wizard4
-rw-r--r--kde/slack-desc/akonadi-mime6
-rw-r--r--kde/slack-desc/akonadi-notes6
-rw-r--r--kde/slack-desc/akonadi-search6
-rw-r--r--kde/slack-desc/akonadiconsole2
-rw-r--r--kde/slack-desc/akregator2
-rw-r--r--kde/slack-desc/alkimia4
-rw-r--r--kde/slack-desc/analitza2
-rw-r--r--kde/slack-desc/ark2
-rw-r--r--kde/slack-desc/artikulate8
-rw-r--r--kde/slack-desc/attica-framework2
-rw-r--r--kde/slack-desc/audiocd-kio2
-rw-r--r--kde/slack-desc/baloo512
-rw-r--r--kde/slack-desc/baloo5-widgets4
-rw-r--r--kde/slack-desc/blinken2
-rw-r--r--kde/slack-desc/bluez-qt10
-rw-r--r--kde/slack-desc/bomber10
-rw-r--r--kde/slack-desc/bovo6
-rw-r--r--kde/slack-desc/breeze6
-rw-r--r--kde/slack-desc/breeze-grub2
-rw-r--r--kde/slack-desc/breeze-gtk4
-rw-r--r--kde/slack-desc/breeze-icons4
-rw-r--r--kde/slack-desc/calendarsupport2
-rw-r--r--kde/slack-desc/calligra10
-rw-r--r--kde/slack-desc/calligraplan8
-rw-r--r--kde/slack-desc/cantor10
-rw-r--r--kde/slack-desc/cervisia2
-rw-r--r--kde/slack-desc/digikam14
-rw-r--r--kde/slack-desc/discover4
-rw-r--r--kde/slack-desc/dolphin8
-rw-r--r--kde/slack-desc/dolphin-plugins2
-rw-r--r--kde/slack-desc/dragon4
-rw-r--r--kde/slack-desc/drkonqi2
-rw-r--r--kde/slack-desc/elisa6
-rw-r--r--kde/slack-desc/eventviews2
-rw-r--r--kde/slack-desc/extra-cmake-modules6
-rw-r--r--kde/slack-desc/falkon4
-rw-r--r--kde/slack-desc/ffmpegthumbs8
-rw-r--r--kde/slack-desc/filelight2
-rw-r--r--kde/slack-desc/frameworkintegration4
-rw-r--r--kde/slack-desc/granatier6
-rw-r--r--kde/slack-desc/grantlee-editor2
-rw-r--r--kde/slack-desc/grantleetheme4
-rw-r--r--kde/slack-desc/gwenview4
-rw-r--r--kde/slack-desc/incidenceeditor2
-rw-r--r--kde/slack-desc/juk8
-rw-r--r--kde/slack-desc/k3b2
-rw-r--r--kde/slack-desc/kaccounts-integration8
-rw-r--r--kde/slack-desc/kaccounts-providers8
-rw-r--r--kde/slack-desc/kactivities6
-rw-r--r--kde/slack-desc/kactivities-framework6
-rw-r--r--kde/slack-desc/kactivities-stats8
-rw-r--r--kde/slack-desc/kactivitymanagerd10
-rw-r--r--kde/slack-desc/kaddressbook2
-rw-r--r--kde/slack-desc/kajongg12
-rw-r--r--kde/slack-desc/kalarm2
-rw-r--r--kde/slack-desc/kalarmcal2
-rw-r--r--kde/slack-desc/kalgebra6
-rw-r--r--kde/slack-desc/kalzium2
-rw-r--r--kde/slack-desc/kamera4
-rw-r--r--kde/slack-desc/kamoso4
-rw-r--r--kde/slack-desc/kanagram12
-rw-r--r--kde/slack-desc/kapidox6
-rw-r--r--kde/slack-desc/kapman14
-rw-r--r--kde/slack-desc/kapptemplate6
-rw-r--r--kde/slack-desc/karchive10
-rw-r--r--kde/slack-desc/kate14
-rw-r--r--kde/slack-desc/katomic8
-rw-r--r--kde/slack-desc/kaudiocreator6
-rw-r--r--kde/slack-desc/kauth8
-rw-r--r--kde/slack-desc/kbackup8
-rw-r--r--kde/slack-desc/kblackbox6
-rw-r--r--kde/slack-desc/kblocks2
-rw-r--r--kde/slack-desc/kblog10
-rw-r--r--kde/slack-desc/kbookmarks14
-rw-r--r--kde/slack-desc/kbounce6
-rw-r--r--kde/slack-desc/kbreakout2
-rw-r--r--kde/slack-desc/kbruch2
-rw-r--r--kde/slack-desc/kcachegrind6
-rw-r--r--kde/slack-desc/kcalc2
-rw-r--r--kde/slack-desc/kcalcore8
-rw-r--r--kde/slack-desc/kcalendarcore8
-rw-r--r--kde/slack-desc/kcalutils4
-rw-r--r--kde/slack-desc/kcharselect6
-rw-r--r--kde/slack-desc/kcmutils6
-rw-r--r--kde/slack-desc/kcodecs12
-rw-r--r--kde/slack-desc/kcolorchooser2
-rw-r--r--kde/slack-desc/kcompletion16
-rw-r--r--kde/slack-desc/kconfig14
-rw-r--r--kde/slack-desc/kconfigwidgets8
-rw-r--r--kde/slack-desc/kcontacts4
-rw-r--r--kde/slack-desc/kcoreaddons12
-rw-r--r--kde/slack-desc/kcrash6
-rw-r--r--kde/slack-desc/kcron2
-rw-r--r--kde/slack-desc/kdav10
-rw-r--r--kde/slack-desc/kdbusaddons6
-rw-r--r--kde/slack-desc/kde-cli-tools8
-rw-r--r--kde/slack-desc/kde-dev-scripts2
-rw-r--r--kde/slack-desc/kde-dev-utils2
-rw-r--r--kde/slack-desc/kde-gtk-config6
-rw-r--r--kde/slack-desc/kde-wallpapers2
-rw-r--r--kde/slack-desc/kdeaccessibility1
-rw-r--r--kde/slack-desc/kdeadmin2
-rw-r--r--kde/slack-desc/kdebugsettings2
-rw-r--r--kde/slack-desc/kdeclarative12
-rw-r--r--kde/slack-desc/kdeconnect-framework19
-rw-r--r--kde/slack-desc/kdeconnect-kde19
-rw-r--r--kde/slack-desc/kdecoration8
-rw-r--r--kde/slack-desc/kded10
-rw-r--r--kde/slack-desc/kdeedu-data2
-rw-r--r--kde/slack-desc/kdegraphics-mobipocket2
-rw-r--r--kde/slack-desc/kdegraphics-thumbnailers8
-rw-r--r--kde/slack-desc/kdelibs4support10
-rw-r--r--kde/slack-desc/kdenetwork-filesharing6
-rw-r--r--kde/slack-desc/kdenlive2
-rw-r--r--kde/slack-desc/kdepim2
-rw-r--r--kde/slack-desc/kdepim-addons2
-rw-r--r--kde/slack-desc/kdepim-apps-libs6
-rw-r--r--kde/slack-desc/kdepim-runtime2
-rw-r--r--kde/slack-desc/kdesdk6
-rw-r--r--kde/slack-desc/kdesdk-kioslaves2
-rw-r--r--kde/slack-desc/kdesdk-thumbnailers6
-rw-r--r--kde/slack-desc/kdesignerplugin8
-rw-r--r--kde/slack-desc/kdesu8
-rw-r--r--kde/slack-desc/kdeutils2
-rw-r--r--kde/slack-desc/kdewebdev6
-rw-r--r--kde/slack-desc/kdewebkit14
-rw-r--r--kde/slack-desc/kdf2
-rw-r--r--kde/slack-desc/kdiagram2
-rw-r--r--kde/slack-desc/kdialog4
-rw-r--r--kde/slack-desc/kdiamond6
-rw-r--r--kde/slack-desc/kdnssd2
-rw-r--r--kde/slack-desc/kdoctools6
-rw-r--r--kde/slack-desc/keditbookmarks2
-rw-r--r--kde/slack-desc/kemoticons8
-rw-r--r--kde/slack-desc/kfilemetadata58
-rw-r--r--kde/slack-desc/kfind10
-rw-r--r--kde/slack-desc/kfloppy2
-rw-r--r--kde/slack-desc/kfourinline8
-rw-r--r--kde/slack-desc/kgamma52
-rw-r--r--kde/slack-desc/kgeography14
-rw-r--r--kde/slack-desc/kget2
-rw-r--r--kde/slack-desc/kglobalaccel8
-rw-r--r--kde/slack-desc/kgoldrunner8
-rw-r--r--kde/slack-desc/kgpg2
-rw-r--r--kde/slack-desc/kguiaddons6
-rw-r--r--kde/slack-desc/khangman6
-rw-r--r--kde/slack-desc/khelpcenter10
-rw-r--r--kde/slack-desc/kholidays8
-rw-r--r--kde/slack-desc/khotkeys12
-rw-r--r--kde/slack-desc/khtml6
-rw-r--r--kde/slack-desc/ki18n14
-rw-r--r--kde/slack-desc/kiconthemes6
-rw-r--r--kde/slack-desc/kid319
-rw-r--r--kde/slack-desc/kidentitymanagement4
-rw-r--r--kde/slack-desc/kidletime10
-rw-r--r--kde/slack-desc/kig2
-rw-r--r--kde/slack-desc/kigo14
-rw-r--r--kde/slack-desc/kile6
-rw-r--r--kde/slack-desc/killbots2
-rw-r--r--kde/slack-desc/kimageformats10
-rw-r--r--kde/slack-desc/kimagemapeditor4
-rw-r--r--kde/slack-desc/kimap2
-rw-r--r--kde/slack-desc/kinfocenter8
-rw-r--r--kde/slack-desc/kinit12
-rw-r--r--kde/slack-desc/kio16
-rw-r--r--kde/slack-desc/kio-extras4
-rw-r--r--kde/slack-desc/kipi-plugins6
-rw-r--r--kde/slack-desc/kirigami-gallery6
-rw-r--r--kde/slack-desc/kirigami28
-rw-r--r--kde/slack-desc/kiriki4
-rw-r--r--kde/slack-desc/kitemmodels6
-rw-r--r--kde/slack-desc/kitemviews8
-rw-r--r--kde/slack-desc/kiten12
-rw-r--r--kde/slack-desc/kitinerary4
-rw-r--r--kde/slack-desc/kjobwidgets6
-rw-r--r--kde/slack-desc/kjots8
-rw-r--r--kde/slack-desc/kjs8
-rw-r--r--kde/slack-desc/kjsembed6
-rw-r--r--kde/slack-desc/kjumpingcube10
-rw-r--r--kde/slack-desc/kldap2
-rw-r--r--kde/slack-desc/kleopatra2
-rw-r--r--kde/slack-desc/klettres8
-rw-r--r--kde/slack-desc/klickety8
-rw-r--r--kde/slack-desc/klines6
-rw-r--r--kde/slack-desc/kmag8
-rw-r--r--kde/slack-desc/kmahjongg6
-rw-r--r--kde/slack-desc/kmail14
-rw-r--r--kde/slack-desc/kmail-account-wizard4
-rw-r--r--kde/slack-desc/kmailtransport4
-rw-r--r--kde/slack-desc/kmbox2
-rw-r--r--kde/slack-desc/kmediaplayer6
-rw-r--r--kde/slack-desc/kmenuedit6
-rw-r--r--kde/slack-desc/kmime2
-rw-r--r--kde/slack-desc/kmines4
-rw-r--r--kde/slack-desc/kmix8
-rw-r--r--kde/slack-desc/kmousetool2
-rw-r--r--kde/slack-desc/kmouth4
-rw-r--r--kde/slack-desc/kmplot10
-rw-r--r--kde/slack-desc/kmymoney4
-rw-r--r--kde/slack-desc/knavalbattle10
-rw-r--r--kde/slack-desc/knetwalk2
-rw-r--r--kde/slack-desc/knewstuff8
-rw-r--r--kde/slack-desc/knights8
-rw-r--r--kde/slack-desc/knotes2
-rw-r--r--kde/slack-desc/knotifications6
-rw-r--r--kde/slack-desc/knotifyconfig6
-rw-r--r--kde/slack-desc/kolf4
-rw-r--r--kde/slack-desc/kollision2
-rw-r--r--kde/slack-desc/kolourpaint2
-rw-r--r--kde/slack-desc/kompare2
-rw-r--r--kde/slack-desc/konqueror10
-rw-r--r--kde/slack-desc/konquest8
-rw-r--r--kde/slack-desc/konsole6
-rw-r--r--kde/slack-desc/kontact2
-rw-r--r--kde/slack-desc/kontactinterface6
-rw-r--r--kde/slack-desc/kopete2
-rw-r--r--kde/slack-desc/korganizer2
-rw-r--r--kde/slack-desc/kpackage6
-rw-r--r--kde/slack-desc/kparts8
-rw-r--r--kde/slack-desc/kpat4
-rw-r--r--kde/slack-desc/kpeople8
-rw-r--r--kde/slack-desc/kpeoplevcard2
-rw-r--r--kde/slack-desc/kpimtextedit8
-rw-r--r--kde/slack-desc/kpkpass2
-rw-r--r--kde/slack-desc/kplotting18
-rw-r--r--kde/slack-desc/kpmcore12
-rw-r--r--kde/slack-desc/kpty8
-rw-r--r--kde/slack-desc/kqtquickcharts6
-rw-r--r--kde/slack-desc/kquickcharts12
-rw-r--r--kde/slack-desc/krdc2
-rw-r--r--kde/slack-desc/krename14
-rw-r--r--kde/slack-desc/kreversi10
-rw-r--r--kde/slack-desc/krfb2
-rw-r--r--kde/slack-desc/krita8
-rw-r--r--kde/slack-desc/kross10
-rw-r--r--kde/slack-desc/kross-interpreters2
-rw-r--r--kde/slack-desc/kruler2
-rw-r--r--kde/slack-desc/krunner10
-rw-r--r--kde/slack-desc/krusader12
-rw-r--r--kde/slack-desc/kscreen210
-rw-r--r--kde/slack-desc/kscreenlocker2
-rw-r--r--kde/slack-desc/kservice8
-rw-r--r--kde/slack-desc/kshisen4
-rw-r--r--kde/slack-desc/ksirk8
-rw-r--r--kde/slack-desc/ksmtp6
-rw-r--r--kde/slack-desc/ksnakeduel12
-rw-r--r--kde/slack-desc/kspaceduel6
-rw-r--r--kde/slack-desc/ksquares8
-rw-r--r--kde/slack-desc/ksshaskpass2
-rw-r--r--kde/slack-desc/kstars16
-rw-r--r--kde/slack-desc/ksudoku10
-rw-r--r--kde/slack-desc/ksysguard10
-rw-r--r--kde/slack-desc/ksystemlog14
-rw-r--r--kde/slack-desc/kteatime8
-rw-r--r--kde/slack-desc/ktexteditor14
-rw-r--r--kde/slack-desc/ktextwidgets6
-rw-r--r--kde/slack-desc/ktimer2
-rw-r--r--kde/slack-desc/ktimetracker6
-rw-r--r--kde/slack-desc/ktnef10
-rw-r--r--kde/slack-desc/ktorrent10
-rw-r--r--kde/slack-desc/ktouch8
-rw-r--r--kde/slack-desc/ktp-accounts-kcm4
-rw-r--r--kde/slack-desc/ktp-approver4
-rw-r--r--kde/slack-desc/ktp-auth-handler4
-rw-r--r--kde/slack-desc/ktp-call-ui4
-rw-r--r--kde/slack-desc/ktp-common-internals4
-rw-r--r--kde/slack-desc/ktp-contact-list4
-rw-r--r--kde/slack-desc/ktp-contact-runner4
-rw-r--r--kde/slack-desc/ktp-desktop-applets8
-rw-r--r--kde/slack-desc/ktp-filetransfer-handler8
-rw-r--r--kde/slack-desc/ktp-kded-module8
-rw-r--r--kde/slack-desc/ktp-send-file4
-rw-r--r--kde/slack-desc/ktp-text-ui4
-rw-r--r--kde/slack-desc/ktuberling8
-rw-r--r--kde/slack-desc/kturtle18
-rw-r--r--kde/slack-desc/kubrick12
-rw-r--r--kde/slack-desc/kunitconversion10
-rw-r--r--kde/slack-desc/kuser2
-rw-r--r--kde/slack-desc/kwallet4
-rw-r--r--kde/slack-desc/kwallet-pam (renamed from deps/PyQt5/slack-desc)24
-rw-r--r--kde/slack-desc/kwalletmanager4
-rw-r--r--kde/slack-desc/kwave12
-rw-r--r--kde/slack-desc/kwayland2
-rw-r--r--kde/slack-desc/kwayland-integration6
-rw-r--r--kde/slack-desc/kwayland-server19
-rw-r--r--kde/slack-desc/kwebkitpart4
-rw-r--r--kde/slack-desc/kwidgetsaddons14
-rw-r--r--kde/slack-desc/kwin10
-rw-r--r--kde/slack-desc/kwindowsystem12
-rw-r--r--kde/slack-desc/kwordquiz8
-rw-r--r--kde/slack-desc/kwrited6
-rw-r--r--kde/slack-desc/kxmlgui10
-rw-r--r--kde/slack-desc/kxmlrpcclient2
-rw-r--r--kde/slack-desc/labplot19
-rw-r--r--kde/slack-desc/latte-dock12
-rw-r--r--kde/slack-desc/libgravatar4
-rw-r--r--kde/slack-desc/libkcddb2
-rw-r--r--kde/slack-desc/libkcompactdisc6
-rw-r--r--kde/slack-desc/libkdcraw6
-rw-r--r--kde/slack-desc/libkdegames4
-rw-r--r--kde/slack-desc/libkdepim4
-rw-r--r--kde/slack-desc/libkeduvocdocument10
-rw-r--r--kde/slack-desc/libkexiv26
-rw-r--r--kde/slack-desc/libkgapi8
-rw-r--r--kde/slack-desc/libkgeomap10
-rw-r--r--kde/slack-desc/libkipi8
-rw-r--r--kde/slack-desc/libkleo6
-rw-r--r--kde/slack-desc/libkmahjongg8
-rw-r--r--kde/slack-desc/libkomparediff210
-rw-r--r--kde/slack-desc/libksane4
-rw-r--r--kde/slack-desc/libkscreen212
-rw-r--r--kde/slack-desc/libksieve4
-rw-r--r--kde/slack-desc/libksysguard6
-rw-r--r--kde/slack-desc/libktorrent10
-rw-r--r--kde/slack-desc/lokalize2
-rw-r--r--kde/slack-desc/lskat4
-rw-r--r--kde/slack-desc/mailcommon4
-rw-r--r--kde/slack-desc/mailimporter2
-rw-r--r--kde/slack-desc/marble15
-rw-r--r--kde/slack-desc/mbox-importer2
-rw-r--r--kde/slack-desc/messagelib2
-rw-r--r--kde/slack-desc/milou6
-rw-r--r--kde/slack-desc/minuet8
-rw-r--r--kde/slack-desc/modemmanager-qt6
-rw-r--r--kde/slack-desc/networkmanager-qt4
-rw-r--r--kde/slack-desc/okteta2
-rw-r--r--kde/slack-desc/okular10
-rw-r--r--kde/slack-desc/oxygen4
-rw-r--r--kde/slack-desc/oxygen-fonts6
-rw-r--r--kde/slack-desc/oxygen-gtk214
-rw-r--r--kde/slack-desc/oxygen-icons54
-rw-r--r--kde/slack-desc/palapeli12
-rw-r--r--kde/slack-desc/parley2
-rw-r--r--kde/slack-desc/partitionmanager10
-rw-r--r--kde/slack-desc/picmi8
-rw-r--r--kde/slack-desc/pim-data-exporter4
-rw-r--r--kde/slack-desc/pim-sieve-editor6
-rw-r--r--kde/slack-desc/pimcommon2
-rw-r--r--kde/slack-desc/plasma-browser-integration8
-rw-r--r--kde/slack-desc/plasma-desktop16
-rw-r--r--kde/slack-desc/plasma-framework8
-rw-r--r--kde/slack-desc/plasma-integration6
-rw-r--r--kde/slack-desc/plasma-pa4
-rw-r--r--kde/slack-desc/plasma-sdk2
-rw-r--r--kde/slack-desc/plasma-vault12
-rw-r--r--kde/slack-desc/plasma-wayland-protocols19
-rw-r--r--kde/slack-desc/plasma-workspace6
-rw-r--r--kde/slack-desc/plasma-workspace-wallpapers6
-rw-r--r--kde/slack-desc/plasma5-nm6
-rw-r--r--kde/slack-desc/polkit-kde-framework6
-rw-r--r--kde/slack-desc/polkit-kde-kcmodules-framework3
-rw-r--r--kde/slack-desc/powerdevil8
-rw-r--r--kde/slack-desc/poxml10
-rw-r--r--kde/slack-desc/print-manager10
-rw-r--r--kde/slack-desc/prison8
-rw-r--r--kde/slack-desc/pulseaudio-qt8
-rw-r--r--kde/slack-desc/purpose18
-rw-r--r--kde/slack-desc/qqc2-desktop-style14
-rw-r--r--kde/slack-desc/rocs12
-rw-r--r--kde/slack-desc/sddm-kcm8
-rw-r--r--kde/slack-desc/sddm-qt512
-rw-r--r--kde/slack-desc/signon-kwallet-extension6
-rw-r--r--kde/slack-desc/skanlite4
-rw-r--r--kde/slack-desc/solid12
-rw-r--r--kde/slack-desc/sonnet10
-rw-r--r--kde/slack-desc/spectacle4
-rw-r--r--kde/slack-desc/step12
-rw-r--r--kde/slack-desc/svgpart2
-rw-r--r--kde/slack-desc/sweeper2
-rw-r--r--kde/slack-desc/syndication8
-rw-r--r--kde/slack-desc/syntax-highlighting2
-rw-r--r--kde/slack-desc/systemsettings2
-rw-r--r--kde/slack-desc/threadweaver12
-rw-r--r--kde/slack-desc/umbrello2
-rw-r--r--kde/slack-desc/user-manager6
-rw-r--r--kde/slack-desc/wacomtablet8
-rw-r--r--kde/slack-desc/xdg-desktop-portal-kde2
-rw-r--r--kde/slack-desc/yakuake12
-rw-r--r--kde/slack-desc/zeroconf-ioslave2
-rwxr-xr-xkde/src/applications-extra/fetch-krita.sh52
-rwxr-xr-xkde/src/plasma-extra/fetch-wacomtablet.sh52
833 files changed, 12765 insertions, 35532 deletions
diff --git a/PKGLIST b/PKGLIST
index b6be7f4..b507fd8 100644
--- a/PKGLIST
+++ b/PKGLIST
@@ -1,44 +1,33 @@
current/5/x86/deps/LibRaw-0.19.5-i586-1alien.txz
-current/5/x86/deps/OpenAL-1.19.1-i586-2alien.txz
-current/5/x86/deps/PyQt5-5.13.2-i586-2alien.txz
-current/5/x86/deps/QScintilla-2.11.4-i586-2alien.txz
-current/5/x86/deps/SDL_sound-1.0.3-i586-1alien.txz
-current/5/x86/deps/accountsservice-0.6.45-i486-1alien.txz
-current/5/x86/deps/brotli-1.0.7-i586-2alien.txz
+current/5/x86/deps/accountsservice-0.6.55-i486-2alien.txz
+current/5/x86/deps/autoconf-archive-2019.01.06-noarch-1alien.txz
current/5/x86/deps/cfitsio-3.420-i586-1alien.txz
-current/5/x86/deps/cracklib-2.9.7-i586-1alien.txz
-current/5/x86/deps/cryfs-0.10.2-i586-2alien.txz
+current/5/x86/deps/cryfs-0.10.2-i586-3alien.txz
current/5/x86/deps/cryptopp-8.2.0-i586-1alien.txz
+current/5/x86/deps/dbus-1.12.20-i586-1alien.txz
current/5/x86/deps/ddcutil-0.8.5-i586-2alien.txz
current/5/x86/deps/dotconf-1.3-i586-1alien.txz
current/5/x86/deps/drumstick-1.1.2-i586-1alien.txz
-current/5/x86/deps/dvdauthor-0.7.2-i586-5alien.txz
-current/5/x86/deps/espeak-ng-1.49.2-i586-1alien.txz
+current/5/x86/deps/dvdauthor-0.7.2-i586-6alien.txz
+current/5/x86/deps/elogind-243.7-i486-1alien.txz
current/5/x86/deps/exiv2-0.27.2-i586-1alien.txz
-current/5/x86/deps/flite-2.1-i586-1alien.txz
current/5/x86/deps/freecell-solver-5.0.0-i586-1alien.txz
current/5/x86/deps/frei0r-plugins-1.6.1-i586-2alien.txz
-current/5/x86/deps/gpgme-1.13.1-i586-2alien.txz
-current/5/x86/deps/grantlee-5.1.0-i586-3alien.txz
-current/5/x86/deps/grantlee-qt4-0.5.1-i486-1alien.txz
-current/5/x86/deps/hack-font-ttf-2.020-noarch-1alien.txz
-current/5/x86/deps/hyphen-2.8.8-i586-1alien.txz
+current/5/x86/deps/grantlee-5.2.0-i586-1alien.txz
+current/5/x86/deps/grantlee-qt4-0.5.1-i586-2alien.txz
+current/5/x86/deps/kdsoap-1.9.0-i586-1alien.txz
current/5/x86/deps/lensfun-0.3.95-i586-2alien.txz
current/5/x86/deps/libappindicator-12.10.0-i486-2alien.txz
current/5/x86/deps/libburn-1.4.8-i586-1alien.txz
current/5/x86/deps/libdbusmenu-gtk-16.04.0-i586-1alien.txz
-current/5/x86/deps/libdbusmenu-qt5-0.9.3+16.04.20160218-i586-1alien.txz
+current/5/x86/deps/libdbusmenu-qt5-0.9.3+16.04.20160218-i586-2alien.txz
current/5/x86/deps/libdmtx-0.7.4-i486-2alien.txz
current/5/x86/deps/libindicator-12.10.1-i486-2alien.txz
-current/5/x86/deps/libpwquality-1.4.0-i586-1alien.txz
+current/5/x86/deps/libqalculate-3.10.0-i586-1alien.txz
current/5/x86/deps/libsass-3.5.5-i586-1alien.txz
-current/5/x86/deps/libxkbcommon-0.8.4-i586-1alien.txz
current/5/x86/deps/md4c-0.4.2-i586-1alien.txz
-current/5/x86/deps/mlt-6.18.0-i586-2alien.txz
-current/5/x86/deps/noto-cjk-font-ttf-2.001-noarch-1alien.txz
-current/5/x86/deps/noto-font-ttf-2015_09_29-noarch-2alien.txz
+current/5/x86/deps/mlt-6.20.0-i586-2alien.txz
current/5/x86/deps/opencv-4.1.1-i586-1alien.txz
-current/5/x86/deps/pcaudiolib-1.1-i586-1alien.txz
current/5/x86/deps/perl-path-tiny-0.108-i586-1alien.txz
current/5/x86/deps/perl-template-toolkit-2.28-i586-1alien.txz
current/5/x86/deps/phonon-4.11.1-i586-1alien.txz
@@ -46,424 +35,412 @@ current/5/x86/deps/phonon-gstreamer-4.10.0-i586-1alien.txz
current/5/x86/deps/phonon-qt4-4.10.2-i586-1alien.txz
current/5/x86/deps/phonon-qt4-gstreamer-4.9.0-i586-1alien.txz
current/5/x86/deps/phonon-vlc-0.11.1-i586-1alien.txz
-current/5/x86/deps/polkit-qt5-1-0.113.0-i586-1alien.txz
+current/5/x86/deps/pipewire-0.3.8-i586-1alien.txz
+current/5/x86/deps/polkit-0.116-i586-4alien.txz
+current/5/x86/deps/polkit-qt5-1-0.113.0-i586-2alien.txz
current/5/x86/deps/poppler-0.68.0-i586-1alien.txz
-current/5/x86/deps/python-enum34-1.1.6-i586-1alien.txz
current/5/x86/deps/python3-random2-1.0.1-i586-3alien.txz
-current/5/x86/deps/qca-qt5-2.2.1-i586-1alien.txz
+current/5/x86/deps/qca-qt5-2.3.1-i586-1alien.txz
current/5/x86/deps/qrencode-4.0.2-i586-1alien.txz
-current/5/x86/deps/qt5-5.13.2-i586-2alien.txz
-current/5/x86/deps/qt5-webkit-5.212.0_alpha3-i586-2alien.txz
current/5/x86/deps/qtav-1.13.0-i586-1alien.txz
current/5/x86/deps/quazip-0.8.1-i586-1alien.txz
current/5/x86/deps/rttr-0.9.6-i586-2alien.txz
current/5/x86/deps/sassc-3.5.0-i586-1alien.txz
-current/5/x86/deps/sip-4.19.20-i586-2alien.txz
current/5/x86/deps/sni-qt-0.2.6-i486-4alien.txz
-current/5/x86/deps/speech-dispatcher-0.8.8-i586-3alien.txz
+current/5/x86/deps/speech-dispatcher-0.8.8-i586-5alien.txz
current/5/x86/deps/vid.stab-97c6ae2_20150529git-i486-1alien.txz
-current/5/x86/deps/wayland-1.17.0-i586-1alien.txz
-current/5/x86/deps/wayland-protocols-1.18-i586-1alien.txz
-current/5/x86/deps/woff2-a0d0ed7_20190630-i586-1alien.txz
-current/5/x86/kde/applications-extra/alkimia-8.0.3-i586-1alien.txz
-current/5/x86/kde/applications-extra/calligra-3.1.0-i586-10alien.txz
+current/5/x86/kde/applications-extra/alkimia-8.0.3-i586-2alien.txz
+current/5/x86/kde/applications-extra/calligra-3.2.1-i586-1alien.txz
current/5/x86/kde/applications-extra/calligraplan-3.2.2-i586-1alien.txz
-current/5/x86/kde/applications-extra/digikam-6.4.0-i586-2alien.txz
+current/5/x86/kde/applications-extra/digikam-7.0.0-i586-1alien.txz
current/5/x86/kde/applications-extra/falkon-3.1.0-i586-1alien.txz
current/5/x86/kde/applications-extra/kaudiocreator-e64e16a_20171004git-i486-1alien.txz
-current/5/x86/kde/applications-extra/kdev-php-5.4.6-i586-1alien.txz
-current/5/x86/kde/applications-extra/kdev-python-5.4.6-i586-1alien.txz
-current/5/x86/kde/applications-extra/kdevelop-5.4.6-i586-1alien.txz
-current/5/x86/kde/applications-extra/kdevelop-pg-qt-2.2.0-i586-1alien.txz
-current/5/x86/kde/applications-extra/kdiagram-2.6.1-i586-1alien.txz
+current/5/x86/kde/applications-extra/kdev-php-5.5.1-i586-1alien.txz
+current/5/x86/kde/applications-extra/kdev-python-5.5.1-i586-1alien.txz
+current/5/x86/kde/applications-extra/kdevelop-5.5.1-i586-1alien.txz
+current/5/x86/kde/applications-extra/kdevelop-pg-qt-2.2.1-i586-1alien.txz
+current/5/x86/kde/applications-extra/kdiagram-2.7.0-i586-1alien.txz
+current/5/x86/kde/applications-extra/kid3-3.8.3-i586-1alien.txz
current/5/x86/kde/applications-extra/kile-2.9.93-i586-3alien.txz
-current/5/x86/kde/applications-extra/kjots-5.0.2-i586-3alien.txz
-current/5/x86/kde/applications-extra/kmymoney-5.0.8-i586-1alien.txz
-current/5/x86/kde/applications-extra/kpmcore-4.0.1-i586-1alien.txz
+current/5/x86/kde/applications-extra/kjots-5.0.2-i586-4alien.txz
+current/5/x86/kde/applications-extra/kmymoney-5.1.0-i586-1alien.txz
+current/5/x86/kde/applications-extra/kpmcore-4.1.0-i586-1alien.txz
current/5/x86/kde/applications-extra/krename-5.0.0-i586-2alien.txz
-current/5/x86/kde/applications-extra/krita-4.2.8.2-i586-2alien.txz
+current/5/x86/kde/applications-extra/krita-4.3.0-i586-1alien.txz
current/5/x86/kde/applications-extra/krusader-2.7.2-i586-1alien.txz
-current/5/x86/kde/applications-extra/kstars-3.3.9-i586-1alien.txz
+current/5/x86/kde/applications-extra/kstars-3.4.2-i586-1alien.txz
current/5/x86/kde/applications-extra/ktimetracker-5.0.1-i586-1alien.txz
-current/5/x86/kde/applications-extra/ktorrent-5.1.2-i586-1alien.txz
+current/5/x86/kde/applications-extra/ktorrent-5.2.0-i586-1alien.txz
current/5/x86/kde/applications-extra/kwebkitpart-cca571d_20171117git-i486-1alien.txz
-current/5/x86/kde/applications-extra/libktorrent-2.1.1-i586-1alien.txz
-current/5/x86/kde/applications-extra/okteta-0.26.2-i586-1alien.txz
+current/5/x86/kde/applications-extra/labplot-2.7.0-i586-1alien.txz
+current/5/x86/kde/applications-extra/libktorrent-2.2.0-i586-1alien.txz
+current/5/x86/kde/applications-extra/okteta-0.26.3-i586-1alien.txz
current/5/x86/kde/applications-extra/oxygen-gtk2-1.4.6.1-i486-1alien.txz
-current/5/x86/kde/applications-extra/partitionmanager-4.0.0-i586-1alien.txz
-current/5/x86/kde/applications-extra/skanlite-2.1.0.1-i586-1alien.txz
-current/5/x86/kde/applications/analitza-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ark-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/artikulate-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/audiocd-kio-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/baloo5-widgets-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/blinken-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/bomber-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/bovo-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/cantor-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/cervisia-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/dolphin-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/dolphin-plugins-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/dragon-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/elisa-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ffmpegthumbs-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/filelight-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/granatier-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/gwenview-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/juk-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/k3b-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kalgebra-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kalzium-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kamera-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kamoso-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kanagram-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kapman-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kapptemplate-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kate-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/katomic-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kbackup-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kblackbox-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kblocks-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kbounce-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kbreakout-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kbruch-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kcachegrind-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kcalc-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kcharselect-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kcolorchooser-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kcron-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kde-dev-scripts-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kde-dev-utils-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdebugsettings-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdeedu-data-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdegraphics-mobipocket-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdegraphics-thumbnailers-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdenetwork-filesharing-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdenlive-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdesdk-kioslaves-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdesdk-thumbnailers-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdf-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdialog-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kdiamond-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/keditbookmarks-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kfind-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kfloppy-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kfourinline-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kgeography-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kget-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kgoldrunner-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kgpg-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/khangman-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/khelpcenter-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kig-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kigo-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/killbots-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kimagemapeditor-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kio-extras-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kipi-plugins-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kirigami-gallery-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kiriki-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kiten-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kjumpingcube-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/klettres-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/klickety-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/klines-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmag-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmahjongg-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmines-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmix-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmousetool-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmouth-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kmplot-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/knavalbattle-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/knetwalk-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/knights-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kolf-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kollision-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kolourpaint-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kompare-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/konqueror-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/konquest-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/konsole-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kopete-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kpat-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kqtquickcharts-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/krdc-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kreversi-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/krfb-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kross-interpreters-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kruler-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kshisen-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ksirk-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ksnakeduel-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kspaceduel-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ksquares-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ksudoku-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ksystemlog-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kteatime-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ktimer-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ktouch-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/ktuberling-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kturtle-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kubrick-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kwalletmanager-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kwave-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/kwordquiz-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkcddb-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkcompactdisc-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkdcraw-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkdegames-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkeduvocdocument-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkexiv2-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkgeomap-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkipi-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkmahjongg-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libkomparediff2-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/libksane-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/lokalize-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/lskat-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/marble-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/minuet-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/okular-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/palapeli-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/parley-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/picmi-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/poxml-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/print-manager-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/rocs-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/spectacle-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/step-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/svgpart-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/sweeper-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/umbrello-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/yakuake-19.12.1-i586-1alien.txz
-current/5/x86/kde/applications/zeroconf-ioslave-19.12.1-i586-1alien.txz
-current/5/x86/kde/frameworks/attica-framework-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/baloo5-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/bluez-qt-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/breeze-icons-5.66.0-noarch-1alien.txz
-current/5/x86/kde/frameworks/extra-cmake-modules-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/frameworkintegration-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kactivities-framework-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kactivities-stats-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kapidox-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/karchive-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kauth-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kbookmarks-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcalendarcore-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcmutils-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcodecs-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcompletion-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kconfig-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kconfigwidgets-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcontacts-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcoreaddons-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kcrash-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdbusaddons-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdeclarative-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kded-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdelibs4support-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdesignerplugin-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdesu-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdewebkit-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdnssd-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kdoctools-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kemoticons-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kfilemetadata5-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kglobalaccel-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kguiaddons-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kholidays-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/khtml-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/ki18n-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kiconthemes-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kidletime-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kimageformats-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kinit-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kio-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kirigami2-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kitemmodels-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kitemviews-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kjobwidgets-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kjs-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kjsembed-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kmediaplayer-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/knewstuff-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/knotifications-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/knotifyconfig-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kpackage-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kparts-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kpeople-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kplotting-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kpty-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kquickcharts-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kross-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/krunner-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kservice-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/ktexteditor-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/ktextwidgets-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kunitconversion-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kwallet-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kwayland-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kwidgetsaddons-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kwindowsystem-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kxmlgui-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/kxmlrpcclient-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/modemmanager-qt-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/networkmanager-qt-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/oxygen-icons5-5.66.0-noarch-1alien.txz
-current/5/x86/kde/frameworks/plasma-framework-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/prison-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/purpose-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/qqc2-desktop-style-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/solid-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/sonnet-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/syndication-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/syntax-highlighting-5.66.0-i586-1alien.txz
-current/5/x86/kde/frameworks/threadweaver-5.66.0-i586-1alien.txz
+current/5/x86/kde/applications-extra/partitionmanager-4.1.0-i586-1alien.txz
+current/5/x86/kde/applications-extra/skanlite-2.2.0-i586-1alien.txz
+current/5/x86/kde/applications/analitza-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ark-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/artikulate-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/audiocd-kio-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/baloo5-widgets-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/blinken-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/bomber-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/bovo-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/cantor-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/cervisia-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/dolphin-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/dolphin-plugins-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/dragon-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/elisa-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ffmpegthumbs-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/filelight-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/granatier-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/gwenview-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/juk-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/k3b-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kalgebra-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kalzium-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kamera-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kamoso-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kanagram-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kapman-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kapptemplate-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kate-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/katomic-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kbackup-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kblackbox-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kblocks-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kbounce-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kbreakout-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kbruch-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kcachegrind-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kcalc-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kcharselect-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kcolorchooser-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kcron-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kde-dev-scripts-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kde-dev-utils-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdebugsettings-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdeconnect-kde-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdeedu-data-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdegraphics-mobipocket-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdegraphics-thumbnailers-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdenetwork-filesharing-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdenlive-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdesdk-kioslaves-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdesdk-thumbnailers-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdf-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdialog-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kdiamond-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/keditbookmarks-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kfind-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kfloppy-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kfourinline-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kgeography-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kget-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kgoldrunner-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kgpg-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/khangman-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/khelpcenter-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kig-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kigo-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/killbots-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kimagemapeditor-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kio-extras-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kipi-plugins-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kirigami-gallery-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kiriki-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kiten-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kjumpingcube-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/klettres-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/klickety-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/klines-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmag-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmahjongg-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmines-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmix-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmousetool-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmouth-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kmplot-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/knavalbattle-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/knetwalk-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/knights-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kolf-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kollision-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kolourpaint-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kompare-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/konqueror-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/konquest-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/konsole-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kopete-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kpat-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kqtquickcharts-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/krdc-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kreversi-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/krfb-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kross-interpreters-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kruler-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kshisen-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ksirk-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ksnakeduel-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kspaceduel-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ksquares-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ksudoku-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ksystemlog-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kteatime-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ktimer-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ktouch-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/ktuberling-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kturtle-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kubrick-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kwalletmanager-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kwave-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/kwordquiz-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkcddb-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkcompactdisc-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkdcraw-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkdegames-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkeduvocdocument-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkexiv2-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkgeomap-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkipi-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkmahjongg-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libkomparediff2-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/libksane-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/lokalize-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/lskat-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/marble-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/minuet-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/okular-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/palapeli-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/parley-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/picmi-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/poxml-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/print-manager-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/rocs-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/spectacle-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/step-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/svgpart-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/sweeper-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/umbrello-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/yakuake-20.04.3-i586-1alien.txz
+current/5/x86/kde/applications/zeroconf-ioslave-20.04.3-i586-1alien.txz
+current/5/x86/kde/frameworks/attica-framework-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/baloo5-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/bluez-qt-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/breeze-icons-5.72.0-noarch-1alien.txz
+current/5/x86/kde/frameworks/extra-cmake-modules-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/frameworkintegration-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kactivities-framework-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kactivities-stats-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kapidox-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/karchive-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kauth-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kbookmarks-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcalendarcore-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcmutils-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcodecs-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcompletion-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kconfig-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kconfigwidgets-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcontacts-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcoreaddons-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kcrash-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdbusaddons-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdeclarative-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kded-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdelibs4support-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdesignerplugin-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdesu-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdewebkit-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdnssd-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kdoctools-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kemoticons-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kfilemetadata5-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kglobalaccel-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kguiaddons-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kholidays-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/khtml-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/ki18n-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kiconthemes-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kidletime-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kimageformats-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kinit-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kio-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kirigami2-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kitemmodels-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kitemviews-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kjobwidgets-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kjs-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kjsembed-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kmediaplayer-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/knewstuff-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/knotifications-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/knotifyconfig-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kpackage-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kparts-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kpeople-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kplotting-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kpty-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kquickcharts-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kross-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/krunner-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kservice-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/ktexteditor-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/ktextwidgets-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kunitconversion-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kwallet-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kwayland-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kwidgetsaddons-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kwindowsystem-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kxmlgui-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/kxmlrpcclient-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/modemmanager-qt-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/networkmanager-qt-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/oxygen-icons5-5.72.0-noarch-1alien.txz
+current/5/x86/kde/frameworks/plasma-framework-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/prison-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/purpose-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/qqc2-desktop-style-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/solid-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/sonnet-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/syndication-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/syntax-highlighting-5.72.0-i586-1alien.txz
+current/5/x86/kde/frameworks/threadweaver-5.72.0-i586-1alien.txz
current/5/x86/kde/kde4/kdelibs-4.14.38-i586-3alien.txz
-current/5/x86/kde/kdepim/akonadi-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-calendar-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-calendar-tools-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-contacts-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-import-wizard-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-mime-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-notes-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadi-search-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akonadiconsole-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/akregator-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/calendarsupport-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/eventviews-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/grantlee-editor-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/grantleetheme-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/incidenceeditor-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kaddressbook-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kalarm-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kalarmcal-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kblog-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kcalutils-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kdav-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kdepim-addons-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kdepim-apps-libs-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kdepim-runtime-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kidentitymanagement-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kimap-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kitinerary-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kldap-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kleopatra-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kmail-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kmail-account-wizard-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kmailtransport-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kmbox-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kmime-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/knotes-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kontact-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kontactinterface-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/korganizer-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kpimtextedit-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/kpkpass-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/ksmtp-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/ktnef-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/libgravatar-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/libkdepim-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/libkgapi-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/libkleo-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/libksieve-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/mailcommon-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/mailimporter-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/mbox-importer-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/messagelib-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/pim-data-exporter-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/pim-sieve-editor-19.12.1-i586-1alien.txz
-current/5/x86/kde/kdepim/pimcommon-19.12.1-i586-1alien.txz
-current/5/x86/kde/plasma-extra/kdeconnect-framework-1.4-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-calendar-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-calendar-tools-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-contacts-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-import-wizard-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-mime-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-notes-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadi-search-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akonadiconsole-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/akregator-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/calendarsupport-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/eventviews-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/grantlee-editor-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/grantleetheme-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/incidenceeditor-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kaddressbook-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kalarm-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kalarmcal-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kblog-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kcalutils-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kdav-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kdepim-addons-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kdepim-apps-libs-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kdepim-runtime-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kidentitymanagement-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kimap-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kitinerary-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kldap-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kleopatra-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kmail-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kmail-account-wizard-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kmailtransport-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kmbox-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kmime-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/knotes-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kontact-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kontactinterface-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/korganizer-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kpimtextedit-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/kpkpass-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/ksmtp-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/ktnef-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/libgravatar-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/libkdepim-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/libkgapi-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/libkleo-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/libksieve-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/mailcommon-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/mailimporter-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/mbox-importer-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/messagelib-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/pim-data-exporter-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/pim-sieve-editor-20.04.3-i586-1alien.txz
+current/5/x86/kde/kdepim/pimcommon-20.04.3-i586-1alien.txz
current/5/x86/kde/plasma-extra/kpeoplevcard-0.1-i586-1alien.txz
-current/5/x86/kde/plasma-extra/latte-dock-0.9.5-i586-1alien.txz
+current/5/x86/kde/plasma-extra/latte-dock-0.9.11-i586-1alien.txz
current/5/x86/kde/plasma-extra/oxygen-fonts-5.4.3-i486-1alien.txz
-current/5/x86/kde/plasma-extra/polkit-kde-kcmodules-framework-c2e67c6_20150121git-i486-3alien.txz
+current/5/x86/kde/plasma-extra/plasma-wayland-protocols-1.1.0-i586-1alien.txz
current/5/x86/kde/plasma-extra/pulseaudio-qt-1.2-i586-1alien.txz
-current/5/x86/kde/plasma-extra/sddm-qt5-0.18.1-i586-1alien.txz
-current/5/x86/kde/plasma-extra/wacomtablet-3.2.0-i586-1alien.txz
-current/5/x86/kde/plasma/bluedevil-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/breeze-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/breeze-grub-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/breeze-gtk-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/drkonqi-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kactivitymanagerd-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kde-cli-tools-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kde-gtk-config-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kdecoration-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kdeplasma-addons-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kgamma5-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/khotkeys-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kinfocenter-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kmenuedit-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kscreen2-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kscreenlocker-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/ksshaskpass-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/ksysguard-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kwayland-integration-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kwin-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/kwrited-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/libkscreen2-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/libksysguard-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/milou-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/oxygen-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-browser-integration-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-desktop-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-integration-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-pa-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-sdk-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-vault-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-workspace-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma-workspace-wallpapers-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/plasma5-nm-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/polkit-kde-framework-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/powerdevil-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/sddm-kcm-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/systemsettings-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/user-manager-5.17.5-i586-1alien.txz
-current/5/x86/kde/plasma/xdg-desktop-portal-kde-5.17.5-i586-1alien.txz
+current/5/x86/kde/plasma-extra/sddm-qt5-0.18.1-i586-6alien.txz
+current/5/x86/kde/plasma-extra/wacomtablet-20200712_a573687-i586-1alien.txz
+current/5/x86/kde/plasma/bluedevil-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/breeze-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/breeze-grub-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/breeze-gtk-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/drkonqi-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kactivitymanagerd-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kde-cli-tools-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kde-gtk-config-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kdecoration-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kdeplasma-addons-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kgamma5-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/khotkeys-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kinfocenter-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kmenuedit-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kscreen2-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kscreenlocker-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/ksshaskpass-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/ksysguard-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kwallet-pam-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kwayland-integration-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kwayland-server-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kwin-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/kwrited-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/libkscreen2-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/libksysguard-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/milou-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/oxygen-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-browser-integration-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-desktop-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-integration-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-pa-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-sdk-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-vault-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-workspace-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma-workspace-wallpapers-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/plasma5-nm-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/polkit-kde-framework-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/powerdevil-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/sddm-kcm-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/systemsettings-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/user-manager-5.19.4-i586-1alien.txz
+current/5/x86/kde/plasma/xdg-desktop-portal-kde-5.19.4-i586-1alien.txz
current/5/x86_64/deps/LibRaw-0.19.5-x86_64-1alien.txz
-current/5/x86_64/deps/OpenAL-1.19.1-x86_64-2alien.txz
-current/5/x86_64/deps/PyQt5-5.13.2-x86_64-2alien.txz
-current/5/x86_64/deps/QScintilla-2.11.4-x86_64-2alien.txz
-current/5/x86_64/deps/SDL_sound-1.0.3-x86_64-1alien.txz
-current/5/x86_64/deps/accountsservice-0.6.45-x86_64-1alien.txz
-current/5/x86_64/deps/brotli-1.0.7-x86_64-2alien.txz
+current/5/x86_64/deps/accountsservice-0.6.55-x86_64-2alien.txz
+current/5/x86_64/deps/autoconf-archive-2019.01.06-noarch-1alien.txz
current/5/x86_64/deps/cfitsio-3.420-x86_64-1alien.txz
-current/5/x86_64/deps/cracklib-2.9.7-x86_64-1alien.txz
-current/5/x86_64/deps/cryfs-0.10.2-x86_64-2alien.txz
+current/5/x86_64/deps/cryfs-0.10.2-x86_64-3alien.txz
current/5/x86_64/deps/cryptopp-8.2.0-x86_64-1alien.txz
+current/5/x86_64/deps/dbus-1.12.20-x86_64-1alien.txz
current/5/x86_64/deps/ddcutil-0.8.5-x86_64-2alien.txz
current/5/x86_64/deps/dotconf-1.3-x86_64-1alien.txz
current/5/x86_64/deps/drumstick-1.1.2-x86_64-1alien.txz
-current/5/x86_64/deps/dvdauthor-0.7.2-x86_64-5alien.txz
-current/5/x86_64/deps/espeak-ng-1.49.2-x86_64-1alien.txz
+current/5/x86_64/deps/dvdauthor-0.7.2-x86_64-6alien.txz
+current/5/x86_64/deps/elogind-243.7-x86_64-1alien.txz
current/5/x86_64/deps/exiv2-0.27.2-x86_64-1alien.txz
-current/5/x86_64/deps/flite-2.1-x86_64-1alien.txz
current/5/x86_64/deps/freecell-solver-5.0.0-x86_64-1alien.txz
current/5/x86_64/deps/frei0r-plugins-1.6.1-x86_64-2alien.txz
-current/5/x86_64/deps/gpgme-1.13.1-x86_64-2alien.txz
-current/5/x86_64/deps/grantlee-5.1.0-x86_64-3alien.txz
-current/5/x86_64/deps/grantlee-qt4-0.5.1-x86_64-1alien.txz
-current/5/x86_64/deps/hack-font-ttf-2.020-noarch-1alien.txz
-current/5/x86_64/deps/hyphen-2.8.8-x86_64-1alien.txz
+current/5/x86_64/deps/grantlee-5.2.0-x86_64-1alien.txz
+current/5/x86_64/deps/grantlee-qt4-0.5.1-x86_64-2alien.txz
+current/5/x86_64/deps/kdsoap-1.9.0-x86_64-1alien.txz
current/5/x86_64/deps/lensfun-0.3.95-x86_64-2alien.txz
current/5/x86_64/deps/libappindicator-12.10.0-x86_64-2alien.txz
current/5/x86_64/deps/libburn-1.4.8-x86_64-1alien.txz
current/5/x86_64/deps/libdbusmenu-gtk-16.04.0-x86_64-1alien.txz
-current/5/x86_64/deps/libdbusmenu-qt5-0.9.3+16.04.20160218-x86_64-1alien.txz
+current/5/x86_64/deps/libdbusmenu-qt5-0.9.3+16.04.20160218-x86_64-2alien.txz
current/5/x86_64/deps/libdmtx-0.7.4-x86_64-2alien.txz
current/5/x86_64/deps/libindicator-12.10.1-x86_64-2alien.txz
-current/5/x86_64/deps/libpwquality-1.4.0-x86_64-1alien.txz
+current/5/x86_64/deps/libqalculate-3.10.0-x86_64-1alien.txz
current/5/x86_64/deps/libsass-3.5.5-x86_64-1alien.txz
-current/5/x86_64/deps/libxkbcommon-0.8.4-x86_64-1alien.txz
current/5/x86_64/deps/md4c-0.4.2-x86_64-1alien.txz
-current/5/x86_64/deps/mlt-6.18.0-x86_64-2alien.txz
-current/5/x86_64/deps/noto-cjk-font-ttf-2.001-noarch-1alien.txz
-current/5/x86_64/deps/noto-font-ttf-2015_09_29-noarch-2alien.txz
+current/5/x86_64/deps/mlt-6.20.0-x86_64-2alien.txz
current/5/x86_64/deps/opencv-4.1.1-x86_64-1alien.txz
-current/5/x86_64/deps/pcaudiolib-1.1-x86_64-1alien.txz
current/5/x86_64/deps/perl-path-tiny-0.108-x86_64-1alien.txz
current/5/x86_64/deps/perl-template-toolkit-2.28-x86_64-1alien.txz
current/5/x86_64/deps/phonon-4.11.1-x86_64-1alien.txz
@@ -471,380 +448,379 @@ current/5/x86_64/deps/phonon-gstreamer-4.10.0-x86_64-1alien.txz
current/5/x86_64/deps/phonon-qt4-4.10.2-x86_64-1alien.txz
current/5/x86_64/deps/phonon-qt4-gstreamer-4.9.0-x86_64-1alien.txz
current/5/x86_64/deps/phonon-vlc-0.11.1-x86_64-1alien.txz
-current/5/x86_64/deps/polkit-qt5-1-0.113.0-x86_64-1alien.txz
+current/5/x86_64/deps/pipewire-0.3.8-x86_64-1alien.txz
+current/5/x86_64/deps/polkit-0.116-x86_64-4alien.txz
+current/5/x86_64/deps/polkit-qt5-1-0.113.0-x86_64-2alien.txz
current/5/x86_64/deps/poppler-0.68.0-x86_64-1alien.txz
-current/5/x86_64/deps/python-enum34-1.1.6-x86_64-1alien.txz
current/5/x86_64/deps/python3-random2-1.0.1-x86_64-3alien.txz
-current/5/x86_64/deps/qca-qt5-2.2.1-x86_64-1alien.txz
+current/5/x86_64/deps/qca-qt5-2.3.1-x86_64-1alien.txz
current/5/x86_64/deps/qrencode-4.0.2-x86_64-1alien.txz
-current/5/x86_64/deps/qt5-5.13.2-x86_64-2alien.txz
-current/5/x86_64/deps/qt5-webkit-5.212.0_alpha3-x86_64-2alien.txz
current/5/x86_64/deps/qtav-1.13.0-x86_64-1alien.txz
current/5/x86_64/deps/quazip-0.8.1-x86_64-1alien.txz
current/5/x86_64/deps/rttr-0.9.6-x86_64-2alien.txz
current/5/x86_64/deps/sassc-3.5.0-x86_64-1alien.txz
-current/5/x86_64/deps/sip-4.19.20-x86_64-2alien.txz
current/5/x86_64/deps/sni-qt-0.2.6-x86_64-4alien.txz
-current/5/x86_64/deps/speech-dispatcher-0.8.8-x86_64-3alien.txz
+current/5/x86_64/deps/speech-dispatcher-0.8.8-x86_64-5alien.txz
current/5/x86_64/deps/vid.stab-97c6ae2_20150529git-x86_64-1alien.txz
-current/5/x86_64/deps/wayland-1.17.0-x86_64-1alien.txz
-current/5/x86_64/deps/wayland-protocols-1.18-x86_64-1alien.txz
-current/5/x86_64/deps/woff2-a0d0ed7_20190630-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/alkimia-8.0.3-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/calligra-3.1.0-x86_64-10alien.txz
+current/5/x86_64/kde/applications-extra/alkimia-8.0.3-x86_64-2alien.txz
+current/5/x86_64/kde/applications-extra/calligra-3.2.1-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/calligraplan-3.2.2-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/digikam-6.4.0-x86_64-2alien.txz
+current/5/x86_64/kde/applications-extra/digikam-7.0.0-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/falkon-3.1.0-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/kaudiocreator-e64e16a_20171004git-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kdev-php-5.4.6-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kdev-python-5.4.6-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kdevelop-5.4.6-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kdevelop-pg-qt-2.2.0-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kdiagram-2.6.1-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kdev-php-5.5.1-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kdev-python-5.5.1-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kdevelop-5.5.1-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kdevelop-pg-qt-2.2.1-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kdiagram-2.7.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kid3-3.8.3-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/kile-2.9.93-x86_64-3alien.txz
-current/5/x86_64/kde/applications-extra/kjots-5.0.2-x86_64-3alien.txz
-current/5/x86_64/kde/applications-extra/kmymoney-5.0.8-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kpmcore-4.0.1-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kjots-5.0.2-x86_64-4alien.txz
+current/5/x86_64/kde/applications-extra/kmymoney-5.1.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kpmcore-4.1.0-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/krename-5.0.0-x86_64-2alien.txz
-current/5/x86_64/kde/applications-extra/krita-4.2.8.2-x86_64-2alien.txz
+current/5/x86_64/kde/applications-extra/krita-4.3.0-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/krusader-2.7.2-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/kstars-3.3.9-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/kstars-3.4.2-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/ktimetracker-5.0.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/ktorrent-5.1.2-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/ktorrent-5.2.0-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/kwebkitpart-cca571d_20171117git-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/libktorrent-2.1.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/okteta-0.26.2-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/labplot-2.7.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/libktorrent-2.2.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/okteta-0.26.3-x86_64-1alien.txz
current/5/x86_64/kde/applications-extra/oxygen-gtk2-1.4.6.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/partitionmanager-4.0.0-x86_64-1alien.txz
-current/5/x86_64/kde/applications-extra/skanlite-2.1.0.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/analitza-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ark-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/artikulate-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/audiocd-kio-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/baloo5-widgets-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/blinken-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/bomber-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/bovo-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/cantor-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/cervisia-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/dolphin-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/dolphin-plugins-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/dragon-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/elisa-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ffmpegthumbs-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/filelight-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/granatier-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/gwenview-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/juk-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/k3b-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kalgebra-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kalzium-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kamera-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kamoso-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kanagram-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kapman-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kapptemplate-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kate-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/katomic-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kbackup-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kblackbox-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kblocks-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kbounce-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kbreakout-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kbruch-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kcachegrind-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kcalc-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kcharselect-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kcolorchooser-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kcron-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kde-dev-scripts-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kde-dev-utils-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdebugsettings-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdeedu-data-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdegraphics-mobipocket-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdegraphics-thumbnailers-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdenetwork-filesharing-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdenlive-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdesdk-kioslaves-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdesdk-thumbnailers-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdf-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdialog-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kdiamond-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/keditbookmarks-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kfind-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kfloppy-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kfourinline-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kgeography-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kget-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kgoldrunner-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kgpg-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/khangman-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/khelpcenter-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kig-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kigo-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/killbots-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kimagemapeditor-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kio-extras-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kipi-plugins-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kirigami-gallery-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kiriki-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kiten-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kjumpingcube-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/klettres-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/klickety-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/klines-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmag-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmahjongg-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmines-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmix-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmousetool-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmouth-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kmplot-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/knavalbattle-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/knetwalk-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/knights-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kolf-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kollision-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kolourpaint-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kompare-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/konqueror-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/konquest-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/konsole-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kopete-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kpat-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kqtquickcharts-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/krdc-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kreversi-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/krfb-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kross-interpreters-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kruler-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kshisen-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ksirk-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ksnakeduel-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kspaceduel-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ksquares-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ksudoku-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ksystemlog-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kteatime-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ktimer-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ktouch-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/ktuberling-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kturtle-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kubrick-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kwalletmanager-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kwave-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/kwordquiz-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkcddb-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkcompactdisc-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkdcraw-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkdegames-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkeduvocdocument-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkexiv2-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkgeomap-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkipi-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkmahjongg-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libkomparediff2-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/libksane-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/lokalize-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/lskat-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/marble-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/minuet-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/okular-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/palapeli-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/parley-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/picmi-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/poxml-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/print-manager-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/rocs-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/spectacle-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/step-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/svgpart-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/sweeper-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/umbrello-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/yakuake-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/applications/zeroconf-ioslave-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/attica-framework-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/baloo5-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/bluez-qt-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/breeze-icons-5.66.0-noarch-1alien.txz
-current/5/x86_64/kde/frameworks/extra-cmake-modules-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/frameworkintegration-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kactivities-framework-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kactivities-stats-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kapidox-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/karchive-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kauth-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kbookmarks-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcalendarcore-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcmutils-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcodecs-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcompletion-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kconfig-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kconfigwidgets-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcontacts-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcoreaddons-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kcrash-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdbusaddons-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdeclarative-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kded-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdelibs4support-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdesignerplugin-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdesu-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdewebkit-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdnssd-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kdoctools-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kemoticons-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kfilemetadata5-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kglobalaccel-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kguiaddons-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kholidays-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/khtml-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/ki18n-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kiconthemes-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kidletime-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kimageformats-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kinit-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kio-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kirigami2-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kitemmodels-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kitemviews-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kjobwidgets-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kjs-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kjsembed-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kmediaplayer-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/knewstuff-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/knotifications-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/knotifyconfig-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kpackage-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kparts-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kpeople-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kplotting-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kpty-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kquickcharts-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kross-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/krunner-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kservice-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/ktexteditor-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/ktextwidgets-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kunitconversion-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kwallet-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kwayland-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kwidgetsaddons-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kwindowsystem-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kxmlgui-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/kxmlrpcclient-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/modemmanager-qt-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/networkmanager-qt-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/oxygen-icons5-5.66.0-noarch-1alien.txz
-current/5/x86_64/kde/frameworks/plasma-framework-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/prison-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/purpose-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/qqc2-desktop-style-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/solid-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/sonnet-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/syndication-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/syntax-highlighting-5.66.0-x86_64-1alien.txz
-current/5/x86_64/kde/frameworks/threadweaver-5.66.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/partitionmanager-4.1.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications-extra/skanlite-2.2.0-x86_64-1alien.txz
+current/5/x86_64/kde/applications/analitza-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ark-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/artikulate-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/audiocd-kio-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/baloo5-widgets-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/blinken-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/bomber-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/bovo-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/cantor-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/cervisia-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/dolphin-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/dolphin-plugins-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/dragon-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/elisa-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ffmpegthumbs-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/filelight-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/granatier-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/gwenview-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/juk-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/k3b-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kalgebra-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kalzium-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kamera-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kamoso-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kanagram-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kapman-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kapptemplate-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kate-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/katomic-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kbackup-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kblackbox-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kblocks-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kbounce-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kbreakout-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kbruch-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kcachegrind-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kcalc-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kcharselect-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kcolorchooser-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kcron-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kde-dev-scripts-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kde-dev-utils-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdebugsettings-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdeconnect-kde-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdeedu-data-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdegraphics-mobipocket-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdegraphics-thumbnailers-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdenetwork-filesharing-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdenlive-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdesdk-kioslaves-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdesdk-thumbnailers-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdf-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdialog-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kdiamond-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/keditbookmarks-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kfind-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kfloppy-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kfourinline-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kgeography-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kget-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kgoldrunner-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kgpg-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/khangman-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/khelpcenter-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kig-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kigo-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/killbots-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kimagemapeditor-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kio-extras-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kipi-plugins-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kirigami-gallery-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kiriki-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kiten-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kjumpingcube-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/klettres-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/klickety-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/klines-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmag-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmahjongg-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmines-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmix-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmousetool-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmouth-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kmplot-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/knavalbattle-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/knetwalk-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/knights-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kolf-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kollision-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kolourpaint-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kompare-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/konqueror-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/konquest-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/konsole-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kopete-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kpat-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kqtquickcharts-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/krdc-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kreversi-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/krfb-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kross-interpreters-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kruler-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kshisen-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ksirk-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ksnakeduel-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kspaceduel-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ksquares-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ksudoku-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ksystemlog-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kteatime-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ktimer-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ktouch-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/ktuberling-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kturtle-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kubrick-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kwalletmanager-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kwave-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/kwordquiz-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkcddb-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkcompactdisc-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkdcraw-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkdegames-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkeduvocdocument-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkexiv2-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkgeomap-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkipi-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkmahjongg-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libkomparediff2-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/libksane-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/lokalize-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/lskat-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/marble-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/minuet-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/okular-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/palapeli-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/parley-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/picmi-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/poxml-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/print-manager-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/rocs-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/spectacle-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/step-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/svgpart-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/sweeper-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/umbrello-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/yakuake-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/applications/zeroconf-ioslave-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/attica-framework-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/baloo5-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/bluez-qt-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/breeze-icons-5.72.0-noarch-1alien.txz
+current/5/x86_64/kde/frameworks/extra-cmake-modules-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/frameworkintegration-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kactivities-framework-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kactivities-stats-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kapidox-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/karchive-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kauth-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kbookmarks-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcalendarcore-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcmutils-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcodecs-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcompletion-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kconfig-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kconfigwidgets-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcontacts-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcoreaddons-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kcrash-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdbusaddons-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdeclarative-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kded-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdelibs4support-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdesignerplugin-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdesu-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdewebkit-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdnssd-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kdoctools-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kemoticons-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kfilemetadata5-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kglobalaccel-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kguiaddons-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kholidays-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/khtml-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/ki18n-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kiconthemes-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kidletime-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kimageformats-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kinit-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kio-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kirigami2-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kitemmodels-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kitemviews-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kjobwidgets-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kjs-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kjsembed-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kmediaplayer-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/knewstuff-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/knotifications-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/knotifyconfig-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kpackage-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kparts-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kpeople-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kplotting-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kpty-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kquickcharts-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kross-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/krunner-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kservice-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/ktexteditor-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/ktextwidgets-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kunitconversion-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kwallet-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kwayland-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kwidgetsaddons-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kwindowsystem-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kxmlgui-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/kxmlrpcclient-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/modemmanager-qt-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/networkmanager-qt-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/oxygen-icons5-5.72.0-noarch-1alien.txz
+current/5/x86_64/kde/frameworks/plasma-framework-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/prison-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/purpose-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/qqc2-desktop-style-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/solid-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/sonnet-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/syndication-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/syntax-highlighting-5.72.0-x86_64-1alien.txz
+current/5/x86_64/kde/frameworks/threadweaver-5.72.0-x86_64-1alien.txz
current/5/x86_64/kde/kde4/kdelibs-4.14.38-x86_64-3alien.txz
-current/5/x86_64/kde/kdepim/akonadi-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-calendar-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-calendar-tools-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-contacts-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-import-wizard-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-mime-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-notes-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadi-search-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akonadiconsole-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/akregator-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/calendarsupport-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/eventviews-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/grantlee-editor-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/grantleetheme-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/incidenceeditor-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kaddressbook-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kalarm-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kalarmcal-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kblog-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kcalutils-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kdav-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kdepim-addons-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kdepim-apps-libs-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kdepim-runtime-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kidentitymanagement-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kimap-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kitinerary-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kldap-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kleopatra-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kmail-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kmail-account-wizard-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kmailtransport-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kmbox-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kmime-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/knotes-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kontact-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kontactinterface-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/korganizer-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kpimtextedit-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/kpkpass-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/ksmtp-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/ktnef-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/libgravatar-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/libkdepim-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/libkgapi-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/libkleo-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/libksieve-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/mailcommon-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/mailimporter-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/mbox-importer-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/messagelib-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/pim-data-exporter-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/pim-sieve-editor-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/kdepim/pimcommon-19.12.1-x86_64-1alien.txz
-current/5/x86_64/kde/plasma-extra/kdeconnect-framework-1.4-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-calendar-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-calendar-tools-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-contacts-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-import-wizard-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-mime-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-notes-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadi-search-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akonadiconsole-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/akregator-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/calendarsupport-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/eventviews-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/grantlee-editor-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/grantleetheme-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/incidenceeditor-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kaddressbook-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kalarm-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kalarmcal-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kblog-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kcalutils-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kdav-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kdepim-addons-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kdepim-apps-libs-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kdepim-runtime-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kidentitymanagement-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kimap-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kitinerary-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kldap-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kleopatra-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kmail-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kmail-account-wizard-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kmailtransport-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kmbox-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kmime-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/knotes-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kontact-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kontactinterface-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/korganizer-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kpimtextedit-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/kpkpass-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/ksmtp-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/ktnef-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/libgravatar-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/libkdepim-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/libkgapi-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/libkleo-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/libksieve-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/mailcommon-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/mailimporter-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/mbox-importer-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/messagelib-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/pim-data-exporter-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/pim-sieve-editor-20.04.3-x86_64-1alien.txz
+current/5/x86_64/kde/kdepim/pimcommon-20.04.3-x86_64-1alien.txz
current/5/x86_64/kde/plasma-extra/kpeoplevcard-0.1-x86_64-1alien.txz
-current/5/x86_64/kde/plasma-extra/latte-dock-0.9.5-x86_64-1alien.txz
+current/5/x86_64/kde/plasma-extra/latte-dock-0.9.11-x86_64-1alien.txz
current/5/x86_64/kde/plasma-extra/oxygen-fonts-5.4.3-x86_64-1alien.txz
-current/5/x86_64/kde/plasma-extra/polkit-kde-kcmodules-framework-c2e67c6_20150121git-x86_64-3alien.txz
+current/5/x86_64/kde/plasma-extra/plasma-wayland-protocols-1.1.0-x86_64-1alien.txz
current/5/x86_64/kde/plasma-extra/pulseaudio-qt-1.2-x86_64-1alien.txz
-current/5/x86_64/kde/plasma-extra/sddm-qt5-0.18.1-x86_64-1alien.txz
-current/5/x86_64/kde/plasma-extra/wacomtablet-3.2.0-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/bluedevil-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/breeze-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/breeze-grub-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/breeze-gtk-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/drkonqi-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kactivitymanagerd-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kde-cli-tools-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kde-gtk-config-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kdecoration-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kdeplasma-addons-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kgamma5-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/khotkeys-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kinfocenter-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kmenuedit-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kscreen2-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kscreenlocker-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/ksshaskpass-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/ksysguard-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kwayland-integration-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kwin-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/kwrited-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/libkscreen2-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/libksysguard-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/milou-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/oxygen-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-browser-integration-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-desktop-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-integration-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-pa-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-sdk-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-vault-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-workspace-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma-workspace-wallpapers-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/plasma5-nm-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/polkit-kde-framework-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/powerdevil-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/sddm-kcm-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/systemsettings-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/user-manager-5.17.5-x86_64-1alien.txz
-current/5/x86_64/kde/plasma/xdg-desktop-portal-kde-5.17.5-x86_64-1alien.txz
+current/5/x86_64/kde/plasma-extra/sddm-qt5-0.18.1-x86_64-6alien.txz
+current/5/x86_64/kde/plasma-extra/wacomtablet-20200712_a573687-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/bluedevil-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/breeze-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/breeze-grub-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/breeze-gtk-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/drkonqi-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kactivitymanagerd-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kde-cli-tools-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kde-gtk-config-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kdecoration-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kdeplasma-addons-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kgamma5-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/khotkeys-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kinfocenter-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kmenuedit-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kscreen2-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kscreenlocker-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/ksshaskpass-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/ksysguard-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kwallet-pam-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kwayland-integration-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kwayland-server-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kwin-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/kwrited-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/libkscreen2-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/libksysguard-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/milou-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/oxygen-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-browser-integration-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-desktop-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-integration-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-pa-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-sdk-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-vault-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-workspace-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma-workspace-wallpapers-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/plasma5-nm-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/polkit-kde-framework-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/powerdevil-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/sddm-kcm-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/systemsettings-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/user-manager-5.19.4-x86_64-1alien.txz
+current/5/x86_64/kde/plasma/xdg-desktop-portal-kde-5.19.4-x86_64-1alien.txz
diff --git a/README.5_20.01 b/README.5_20.08
index 3601beb..a680e61 100644
--- a/README.5_20.01
+++ b/README.5_20.08
@@ -1,39 +1,68 @@
KDE5
====
-Welcome to 2020! Still going strong outside of Slackware core.
-Here is KDE 5_20.01 for Slackware, consisting of the KDE
-Frameworks 5.66.0, Plasma 5.17.5 and Applications 19.12.1 on top of Qt 5.13.2.
-
-Upgrading from the previous 5_19.12 is relatively straight-forward.
-
-KDE-5_20.01 is meant to be installed on top of Slackware -current.
+# ------------------------------------------------------------------------- #
+# BIG FAT NOTICE: #
+# Alien's ktown is changing your Slackware-current system and replaces #
+# ConsoleKit2 with elogind. Read the instructions carefully! In short: #
+# - UPGRADE TO THE LATEST slackware-current first. #
+# - Then, REMOVE the ConsoleKit2 package (if it is still installed). #
+# - Finally, install or upgrade the KDE5 package set. #
+# - Ensure you put any *.new files into their correct locations #
+# (a 'slackpkg new-config' will help). #
+# - Reboot. #
+# ------------------------------------------------------------------------- #
+
+This is KDE 5_20.08 for Slackware, consisting of:
+KDE Frameworks 5.72.0, Plasma 5.19.4 and Applications 20.04.3;
+on top of Slackware's Qt 5.15.0.
+
+Upgrading from the previous 5_20.06 should be done with care, but since you
+should already have migrated to elogind, I do not expect anything will break.
+
+KDE-5_20.08 is meant to be installed on top of Slackware -current.
It will *replace* any version of KDE 4 you might have installed!
The Plasma 5 Desktop has gotten rid of its Qt4 legacy. Since the release of
Applications 17.12 there's nothing left which is based on kdelibs4.
+Slackware-current has begun its slow adoptation of the Plasma5 dependencies.
+Most importantly, QT5 and its dependencies are already part of Slackware.
What is the NEWS in this batch of updates:
-- This month's updates to the 'deps': I patched the Qt5 package to address
- two security issues. And I updated the noto-cjk-font-ttf package to fix
- a file permission issue and to add a Serif font as well.
-- Frameworks 5.66.0 is an incremental stability release, see also:
- https://www.kde.org/announcements/kde-frameworks-5.66.0.php
-- Plasma 5.17.5 is a an incremental bug-fix release and the last in the
- 5.17 cycle of the KDE desktop environment. Next release (5.18) will get
- Long Term Support (aka LTS release).
- See https://www.kde.org/announcements/plasma-5.17.5.php
-- In plasma-extra I updated sddm-qt5.
-- Applications 19.12.1 is a bug-fix increment in the 19.12 cycle of the
- KDE Application Releases.
- See https://kde.org/announcements/releases/19.12.1/
-- In applications-extra I updated alkimia, kmymoney, kstars, kdevelop,
- kdev-php and kdev-python. I also added one new package: ktimetracker
- which was finally ported to KF5.
+- In May we had the first release on Plasma5 on a PAM-ified Slackware, and
+ in June I went along and replaced ConsoleKit2 with elogind - a requirement
+ to make a KDE Plasma Wayland graphical session work.
+ * *
+ * Note that only one of the two (ConsoleKit2 or elogind) must be installed! *
+ * If you install ktown KDE-5_20.08 you need to remove ConsoleKit2! *
+ * *
+- The 'deps' section got a bit smaller again this month:
+ * pcaudiolib, espeak-ng, hack-fonts-ttf, noto-fonts-ttf, and
+ noto-cjk-fonts-ttf were moved into the actual Slackware distro;
+ * flite has been removed since Pat decided we will go with just espeak-ng;
+ * a new package 'pipewire' was added as a dependency for krfb and
+ xdg-desktop-portal-kde.
+ * The elogind-aware dbus package was upgraded to match the Slackware version.
+ * Finally, qca-qt5 was upgraded and I recompiled mlt (to fix the broken
+ kdenlive) and speech-dispatcher.
+- Frameworks 5.72.0 is an incremental stability release, see also:
+ https://kde.org/announcements/kde-frameworks-5.72.0
+ A new 'kdav' source tarball got added but that is actually the same package
+ you'll find in KDEPIM. Next batch, the actual kdav package will be built
+ from Frameworks sources.
+- Plasma 5.19.4 is an increment of the 5.19 cycle to add stability & fix bugs.
+ See https://kde.org/announcements/plasma-5.19.4 and if you want to
+ read more about the goals for 5.19 you should check out:
+ https://kde.org/announcements/plasma-5.19.0
+- In plasma-extra I rebuilt sddm-qt5 to install man pages correctly, and
+ upgraded plasma-wayland-protocols and wacomtablet.
+- Applications 20.04.3 is an incremental bug fix release, see also
+ https://kde.org/announcements/releases/2020-07-apps-update/
+- For applications-extra I updated digikam, krita, libktorrent and ktorrent,
+ and skanlite. Note that the size of the digikam source tarball 'blew up'
+ due to the addition of new neural network facial recognition data files,
+ but the actual package 'only' grew from 97 to 108 MB.
Further points of interest:
-- If you have a KDE4-based application that needs library support on this
- Plasma 5 desktop, let me know which of the removed packages needs to return
- in 'kde/kde4'!
- There are a couple of *runtime* dependencies that I did not add to the
ktown repository, but you may want to consider installing them yourself:
* vlc - will give phonon another backend to select from.
@@ -46,20 +75,19 @@ Further points of interest:
you'll find many Qt5 related packages. Also, in order for Qt4 and GTK based
applications to dock into the Plasma 5 system tray, more dependencies were
needed. Apart from updates to regular Slackware packages the new ones are:
- OpenAL, PyQt5, SDL_sound, QScintilla, accountsservice, brotli, cfitsio,
- cracklib, cryptopp, cryfs, ddcutil, dotconf, drumstick, dvdauthor,
- espeak-ng, flite, freecell-solver, frei0r-plugins, grantlee-qt4,
- hack-font-ttf, hyphen, id3lib, lensfun, libappindicator, libburn,
- libdbusmenu-gtk, libdbusmenu-qt5, libdmtx, libindicator,
- libpwquality, libsass, libxkbcommon, md4c, mlt, noto-font-ttf,
- noto-cjk-font-ttf, opencv, pcaudiolib, perl-path-tiny, perl-template-toolkit,
- polkit-qt5-1, python-enum34, python3-random2, quazip, qca-qt5, qrencode,
- qt5, qt5-webkit, qtav, rttr, sassc, sni-qt, speech-dispatcher,
- vid.stab, wayland and woff2.
+ accountsservice, autoconf-archive, cfitsio, cryptopp, cryfs, ddcutil,
+ dotconf, drumstick, dvdauthor, elogind , freecell-solver, frei0r-plugins,
+ grantlee-qt4, lensfun, libappindicator, libburn, libdbusmenu-gtk,
+ libdbusmenu-qt5, libdmtx, libindicator, libsass, md4c, mlt, opencv,
+ perl-path-tiny, perl-template-toolkit, polkit-qt5-1, python3-random2,
+ quazip, qca-qt5, qrencode, qtav, rttr, sassc, sni-qt, speech-dispatcher,
+ and vid.stab .
The phonon and poppler packages were extended so that they now support
Qt5 as well as Qt4. The gpgme package picked up Qt5 support.
Note that the SBo version of 'frei0r-plugins' package is called 'frei0r'.
If you have that SBo package installed, remove it.
+ Several 'deps' packages which used to be listed here, have already been
+ absorbed into Slackware. Let's hope the rest takes the same road soon.
- KDEI is gone. The localizations are now embedded in each package and
no longer available as separate 'kdei' packages. This is a by design.
You will get all languages installed by default.
@@ -69,6 +97,12 @@ Also explained in more detail below, upgrading to this KDE 5 is non-trivial.
You will have to remove old KDE 4 packages manually.
NOTE:
+If this time you removed ConsoleKit2 and installed elogind, be sure to
+reboot your computer before attempting to login. Also be very sure that
+you moved all the *.new files into place before you reboot (the command
+'slackpkg new-config' can help you do that).
+
+NOTE:
If you had installed KDE 4 as your default desktop previously, the removal
of KDE 4 packages will break the symbolic link '/etc/X11/xinit/xinitrc'.
An attempt to run 'startx' in a console will fail with a black screen.
@@ -85,6 +119,28 @@ of these packages. Then install both 'libdbusmenu-qt-compat32' and
'sni-qt-compat32'. Those two are mandatory addons for displaying
system tray icons of 32bit binaries in 64bit multilib Plasma5.
+NOTE:
+You can start a Plasma Wayland session via SDDM (runlevel 4) by selecting it
+in the session drop-down menu.
+You can start a Plasma Wayland session at the console (runlevel 3) by
+executing the "startkwayland" command.
+
+NOTE:
+Running a Wayland session using the proprietary NVIDIA driver is possible,
+see https://community.kde.org/Plasma/Wayland/Nvidia .
+There are still some quirks & glitches but no showstoppers.
+* Qt5 >= 5.15 is a requirement, luckily we already have that in Slackware.
+* You need to enable modesetting:
+ The output of "cat /sys/module/nvidia_drm/parameters/modeset" should be "Y".
+ If you get a "N", then you need to add the string "nvidia-drm.modeset=1"
+ to the kernel's boot commandline e.g. via the 'append' parameter in
+ (e)lilo.conf or syslinux.cfg, or via the 'linux' parameter of grub.cfg.
+* KWin needs to use EGLStreams for accelerated graphics support:
+ Create a profile script (e.g. /etc/profile.d/kwin.sh), make that script
+ executable and let it contain the single line:
+ export KWIN_DRM_USE_EGL_STREAMS=1
+ (or set this environment variable through any other means that you prefer).
+
-------------------------------------------------------------------------------
Install pre-compiled packages:
@@ -126,97 +182,61 @@ If you have Slackware 14.2 or -current's default KDE 4.14.3 installed:
Alternatively, in case you are already using an older release of my KDE 5
packages, you need to look up that particular release in the list right below
-(for instance: KDE 5_19.07) and then apply the actions shown for that KDE 5
+(for instance: KDE 5_20.02) and then apply the actions shown for that KDE 5
release *and* all more recent releases, i.e. work your way back up to this
paragraph. Note that some of the old KDE package names were obsoleted along
the way, they were split up, renamed or integrated and that is the reason
for some of the 'removepkg' lines you'll see below.
Here we go:
+If you have my 'ktown' set of KDE 5_20.06 installed:
+- Upgrade to KDE 5_20.08
+ Remove the packages that no longer exist in KDE 5_20.08:
+ # removepkg flite
+ If you do need flite, consider building it from slackbuilds.org.
+
+If you have my 'ktown' set of KDE 5_20.05 installed:
+- UPGRADE TO THE LATEST slackware-current first.
+- Then, REMOVE ConsoleKit2:
+ # removepkg consoleKit2
+- Upgrade to KDE 5_20.06
+- Move the new X session files into place which SDDM uses to start your
+ login-session, but first check that you won't accidentally overwrite
+ any of your customizations:
+ # mv /usr/share/sddm/scripts/Xsession.new /usr/share/sddm/scripts/Xsession
+ # mv /usr/share/sddm/scripts/Xsetup.new /usr/share/sddm/scripts/Xsetup
+
+If you have my 'ktown' set of KDE 5_20.04 installed:
+- Upgrade to KDE 5_20.05
+ Remove the packages that no longer exist in KDE 5_20.05:
+ # removepkg python-enum34
+
+If you have my 'ktown' set of KDE 5_20.03 installed:
+- Upgrade to KDE 5_20.04
+ Remove the packages that no longer exist in KDE 5_20.04:
+ # removepkg kdeconnect-framework
+
+If you have my 'ktown' set of KDE 5_20.02 installed:
+- Upgrade to KDE 5_20.03
+ Remove the packages that no longer exist in KDE 5_20.03:
+ # removepkg OpenAL
+ # removepkg SDL_sound
+
+If you have my 'ktown' set of KDE 5_20.01 installed:
+- Upgrade to KDE 5_20.02
+ Remove the packages that no longer exist in KDE 5_20.02:
+ # removepkg polkit-kde-kcmodules-framework
+
If you have my 'ktown' set of KDE 5_19.12 installed:
-- No further actions are needed.
-
-If you have my 'ktown' set of KDE 5_19.11 installed:
-- Upgrade to KDE 5_19.12
- Remove the packages that no longer exist in KDE 5_19.12:
- # removepkg qt-gstreamer
-
-If you have my 'ktown' set of KDE 5_19.10 installed:
-- Upgrade to KDE 5_19.11
- Remove the packages that no longer exist in KDE 5_19.11:
- # removepkg qt5-speech
-
-If you have my 'ktown' set of KDE 5_19.09 installed:
-- Upgrade to KDE 5_19.10
- Remove the packages that no longer exist in KDE 5_19.10:
- # removepkg kcalcore
- # removepkg farstream \
- libaccounts-glib \
- libaccounts-qt5 \
- libnice \
- libotr \
- libsignon-glib \
- signon \
- signon-plugin-oauth2 \
- signon-ui \
- telegram-qt \
- telepathy-accounts-signon \
- telepathy-farstream \
- telepathy-gabble \
- telepathy-glib \
- telepathy-haze \
- telepathy-logger \
- telepathy-logger-qt5 \
- telepathy-mission-control \
- telepathy-morse \
- telepathy-qt5
- # removepkg kaccounts-integration \
- kaccounts-providers \
- ktp-accounts-kcm \
- ktp-approver \
- ktp-auth-handler \
- ktp-call-ui \
- ktp-common-internals \
- ktp-contact-list \
- ktp-contact-runner \
- ktp-desktop-applets \
- ktp-filetransfer-handler \
- ktp-kded-module \
- ktp-send-file \
- ktp-text-ui \
- signon-kwallet-extension
-
-If you have my 'ktown' set of KDE 5_19.07 installed:
-- No further actions are needed.
-
-If you have my 'ktown' set of KDE 5_19.06 installed:
-- No further actions are needed.
-
-If you have my 'ktown' set of KDE 5_19.05 installed:
-- No further actions are needed.
-
-If you have my 'ktown' set of KDE 5_19.02 installed:
-- No further actions are needed.
-
-If you have my 'ktown' set of KDE 5_19.01 installed:
-- No further actions are needed.
-
-If you have my 'ktown' set of KDE 5_18.12 installed:
-- Really?
-
-Then proceed with installing/upgrading KDE 5 as outlined below.
+- Really? A full re-install may be wiser.
-NOTE:
-The example commands below are for Slackware -current but you can use
-these commands for Slackware 14.2 as well; by replacing the /current/
-string with /14.2/ (provided there is a suitable 'ktown' release available
-for Slackware 14.2 of course).
+Proceed with installing/upgrading KDE 5 as outlined below.
NOTE:
Instead of using the mirror host http://slackware.nl/alien-kde/ (its rsync URI
is rsync://slackware.nl/mirrors/alien-kde/), you could choose the alternative
mirror http://slackware.uk/people/alien-kde/ (its rsync URI is
-rsync://slackware.uk/people/alien-kde/)
+rsync://slackware.uk/people/alien-kde/) which is faster for some people.
NOTE:
If you use 'slackpkg' to automate your upgrades, be sure to blacklist my
@@ -284,10 +304,12 @@ A graphical (ncurses) tool for processing these "*.new" files is slackpkg:
# slackpkg new-config
Then reboot your system.
-IF this is the first time you run Plasma5, be aware that Baloo will
-tax your CPU fairly heavily for a while as it indexes the content of
-the files on your hard disk. After this initial indexing operation finishes,
-Ballo will get out of your way and stay there.
+If this is the first time you run Plasma5, and you enable Baloo file indexing,
+be aware that Baloo will tax your CPU fairly heavily for a while as it indexes
+the content of the files on your hard disk.
+After this initial indexing operation finishes (could take several hours),
+Baloo will get out of your way and stay there.
+This is why indexing is disabled by default.
If all you want is to install the packages I created, then you can skip the
remainder of the README which details how to (re)compile the packages from
@@ -301,22 +323,21 @@ Sources and scripts are separated from the packages in my 'ktown' repository.
If you want the sources for KDE 5, run the following command to download them
(downloading from a mirror will usually be much faster):
- # rsync -Hav rsync://slackware.nl/mirrors/alien-kde/source/latest/ latest/
+ # rsync -Hav rsync://slackware.nl/mirrors/alien-kde/source/latest/ sources/
There are a lot of 'dependencies' for KDE 5 which you'll have to compile and
install before attempting to compile KDE 5. Compiling and installing these
-dependencies on Slackware-current is hopefully (have not tested the scripts
-'updates.SlackBuild' and 'alldeps.SlackBuild' in a long time) as easy as this:
- # cd latest/deps
- # ./updates.SlackBuild
+dependencies on Slackware-current is hopefully (have not tested the script
+'alldeps.SlackBuild' in a long time) as easy as this:
+ # cd sources/deps
+ # ./alldeps.SlackBuild
# cd -
-Be prepared to wait a *long* time since this will compile a new Qt5 package
-among others. The finished packages will be stored in /tmp and will already
-have been installed/upgraded automatically.
+The finished packages will be stored in /tmp and will already have been
+installed/upgraded automatically.
Then if you want to compile the KDE packages on your computer, run:
- # cd latest/kde
+ # cd sources/kde
# ./kde.SlackBuild
Wait a long time, and you will find the new packages in /tmp/kde_build .
@@ -325,4 +346,4 @@ Reboot your computer and login to a Plasma session.
==============================================================================
- Eric Hameleers / alien at slackware dot com / 21-jan-2020
+ Eric Hameleers / alien at slackware dot com / 01-aug-2020
diff --git a/README.elogind b/README.elogind
new file mode 100644
index 0000000..6baf135
--- /dev/null
+++ b/README.elogind
@@ -0,0 +1,24 @@
+Replacing ConsoleKit2 with elogind
+----------------------------------
+
+# Sources are updates to check for existence of libelogind. If this is not
+# present, the scripts assume ConsoleKit2 is used instead.
+
+# Remove:
+ConsoleKit2
+
+# Compile:
+deps:elogind
+
+# Recompile Slackware packages:
+util-linux (with PAM files that mention elogind instead of pam_ck_connector)
+dbus (enable elogind support). Depends on autoconf-archive to compile!
+polkit (enable elogind support)
+
+# Recompile:
+deps:accountsservice
+plasma:plasma-workspace,powerdevil
+plasma-extra:sddm-qt5
+
+
+
diff --git a/deps/OpenAL/.deps b/deps/OpenAL/.deps
deleted file mode 100644
index b787fd1..0000000
--- a/deps/OpenAL/.deps
+++ /dev/null
@@ -1 +0,0 @@
-SDL_sound
diff --git a/deps/OpenAL/.url b/deps/OpenAL/.url
deleted file mode 100644
index 51a72d9..0000000
--- a/deps/OpenAL/.url
+++ /dev/null
@@ -1,2 +0,0 @@
-http://kcat.strangesoft.net/openal-releases/openal-soft-1.19.1.tar.bz2
-
diff --git a/deps/OpenAL/OpenAL.SlackBuild b/deps/OpenAL/OpenAL.SlackBuild
deleted file mode 100755
index 0397a82..0000000
--- a/deps/OpenAL/OpenAL.SlackBuild
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/bin/sh
-# Copyright 2014 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2012, 2013, 2014, 2015, 2017, 2018, 2019 Eric Hameleers, Eindhoven, NL
-# All rights reserved.
-#
-# Permission to use, copy, modify, and distribute this software for
-# any purpose with or without fee is hereby granted, provided that
-# the above copyright notice and this permission notice appear in all
-# copies.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
-# CONTRIBUTORS 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.
-# -----------------------------------------------------------------------------
-
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=OpenAL
-SRCNAM=openal-soft
-VERSION=${VERSION:-1.19.1}
-BUILD=${BUILD:-2}
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "${PKGNAM}-${VERSION}-${ARCH}-${BUILD}.txz"
- exit 0
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $SRCNAM-$VERSION
-tar xvf $CWD/$SRCNAM-$VERSION.tar.?z* || exit 1
-cd $SRCNAM-$VERSION || exit 1
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-mkdir -p build
-cd build
- cmake \
- -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
- -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DMAN_INSTALL_DIR=/usr/man \
- -DSYSCONF_INSTALL_DIR=/etc \
- -DLIB_SUFFIX=${LIBDIRSUFFIX} \
- -G Ninja \
- ..
- ninja || exit 1
- DESTDIR=$PKG ninja install || exit 1
-cd -
-
-# Add an example configuration file:
-mkdir -p $PKG/etc/openal
-install -m0644 alsoftrc.sample $PKG/etc/openal/alsoft.conf.sample
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- COPYING ChangeLog README XCompile.txt docs/*.txt \
- $PKG/usr/doc/$PKGNAM-$VERSION || true
-chown -R root:root $PKG/usr/doc/$PKGNAM-$VERSION
-find $PKG/usr/doc -type f -exec chmod 644 {} \;
-
-# Strip binaries (if any):
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg --linkadd y --chown n $TMP/${PKGNAM}-${VERSION}-${ARCH}-${BUILD}.txz
-
diff --git a/deps/OpenAL/slack-desc b/deps/OpenAL/slack-desc
deleted file mode 100644
index 9519678..0000000
--- a/deps/OpenAL/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-OpenAL: OpenAL (implementation of the OpenAL 3D audio API)
-OpenAL:
-OpenAL: OpenAL Soft is an LGPL-licensed, cross-platform, implementation
-OpenAL: of the OpenAL 3D audio API. OpenAL provides capabilities for
-OpenAL: playing audio in a virtual 3D environment. It also facilitates
-OpenAL: streaming audio, multi-channel buffers, and audio capture.
-OpenAL:
-OpenAL:
-OpenAL: OpenAL by Creative Labs: http://www.OpenAL.org/
-OpenAL: OpenAL Soft home: http://openal-soft.org/
-OpenAL:
diff --git a/deps/PyQt/.url b/deps/PyQt/.url
deleted file mode 100644
index 8e479e7..0000000
--- a/deps/PyQt/.url
+++ /dev/null
@@ -1 +0,0 @@
-http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz
diff --git a/deps/PyQt/PyQt.SlackBuild b/deps/PyQt/PyQt.SlackBuild
deleted file mode 100755
index 957a94e..0000000
--- a/deps/PyQt/PyQt.SlackBuild
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/bin/sh
-
-# Slackware build script for PyQt
-
-# Copyright 2008 Aleksandar Samardzic <asamardzic@gmail.com>
-# Copyright 2008, 2009, 2010, 2011, 2017, 2018 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# Modified by Robby Workman <rworkman@slackware.com>
-# Modified by Eric Hameleers <alien@slackware.com>
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=PyQt
-VERSION=${VERSION:-4.12.3}
-BUILD=${BUILD:-1}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
-elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
-else
- SLKCFLAGS="-O2"
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-PYTHON2LIB=$( python2 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' 2>/dev/null )
-PYTHON3LIB=$( python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' 2>/dev/null )
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-
-rm -rf ${PKGNAM}4_gpl_x11-$VERSION
-tar xvf $CWD/${PKGNAM}4_gpl_x11-$VERSION.tar.?z || exit 1
-cd ${PKGNAM}4_gpl_x11-$VERSION || exit 1
-
-# Fix phonon detection:
-cat $CWD/$PKGNAM.phonon.diff | patch -p1 --verbose || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# This avoids compiling a version number into KDE's .la files:
-export QTDIR=/usr/lib${LIBDIRSUFFIX}/qt
-export QT4DIR=/usr/lib${LIBDIRSUFFIX}/qt
-
-export CFLAGS="$SLKCFLAGS"
-export CXXFLAGS="$SLKCFLAGS"
-
-python3 configure.py \
- --confirm-license \
- --qsci-api \
- --verbose
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
-make clean
-
-mv $PKG/usr/bin/pyuic4 $PKG/usr/bin/pyuic4-py3
-rm -rf $PKG/$PYTHON3LIB/${PKGNAM}4/uic/port_v2/
-
-python2 configure.py \
- --confirm-license \
- --qsci-api \
- --verbose
-
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
-
-rm -rf $PKG/$PYTHON2LIB/${PKGNAM}4/uic/port_v3/
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" \
- | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-# Remove rpaths:
-for file in $(find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : 2> /dev/null) ; do
- if [ ! "$(patchelf --print-rpath $file 2> /dev/null)" = "" ]; then
- patchelf --remove-rpath $file
- fi
-done
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- GPL_EXCEPTION*.TXT LICENSE.* NEWS OPENSOURCE-NOTICE.TXT README THANKS doc/* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz
-
diff --git a/deps/PyQt/PyQt.phonon.diff b/deps/PyQt/PyQt.phonon.diff
deleted file mode 100644
index feda650..0000000
--- a/deps/PyQt/PyQt.phonon.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- PyQt-x11-gpl-4.6.2/configure.py.orig 2010-01-08 23:39:46.000000000 +0100
-+++ PyQt-x11-gpl-4.6.2/configure.py 2010-01-08 23:45:18.000000000 +0100
-@@ -451,7 +451,7 @@
- generate_code("QtXmlPatterns")
-
- if "phonon" in pyqt_modules:
-- generate_code("phonon")
-+ generate_code("phonon", extra_include_dirs=["/usr/include/phonon"])
-
- if "QtAssistant" in pyqt_modules:
- generate_code("QtAssistant")
diff --git a/deps/PyQt/slack-desc b/deps/PyQt/slack-desc
deleted file mode 100644
index e8cf45a..0000000
--- a/deps/PyQt/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-PyQt: PyQt (Python bindings for Qt)
-PyQt:
-PyQt: PyQt is a set of Python bindings for the Qt application framework and
-PyQt: runs on all platforms supported by Qt.
-PyQt:
-PyQt: Homepage: http://www.riverbankcomputing.co.uk/software/pyqt/
-PyQt:
-PyQt:
-PyQt:
-PyQt:
-PyQt:
diff --git a/deps/PyQt5/.deps b/deps/PyQt5/.deps
deleted file mode 100644
index 64526d1..0000000
--- a/deps/PyQt5/.deps
+++ /dev/null
@@ -1,3 +0,0 @@
-python-enum34
-qt5
-sip
diff --git a/deps/PyQt5/.url b/deps/PyQt5/.url
deleted file mode 100644
index eac8894..0000000
--- a/deps/PyQt5/.url
+++ /dev/null
@@ -1,2 +0,0 @@
-https://www.riverbankcomputing.com/static/Downloads/PyQt5/5.13.2/PyQt5-5.13.2.tar.gz
-
diff --git a/deps/PyQt5/PyQt5.SlackBuild b/deps/PyQt5/PyQt5.SlackBuild
deleted file mode 100755
index 8552e19..0000000
--- a/deps/PyQt5/PyQt5.SlackBuild
+++ /dev/null
@@ -1,151 +0,0 @@
-#!/bin/sh
-
-# Slackware build script for PyQt
-
-# Copyright 2008 Aleksandar Samardzic <asamardzic@gmail.com>
-# Copyright 2008, 2009, 2010, 2011, 2015, 2016, 2017 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# Modified by Robby Workman <rworkman@slackware.com>
-# Modified by Eric Hameleers <alien@slackware.com>
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=PyQt5
-VERSION=${VERSION:-5.13.2}
-BUILD=${BUILD:-2}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
-elif [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
-elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
-else
- SLKCFLAGS="-O2"
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-PYTHON2LIB=$( python2 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' 2>/dev/null )
-PYTHON3LIB=$( python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' 2>/dev/null )
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf ${PKGNAM}-$VERSION
-tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z* || exit 1
-cd ${PKGNAM}-$VERSION || exit 1
-
-# Remove code that is unneeded if Qt is not bundled and crashes on python2
-# https://www.riverbankcomputing.com/pipermail/pyqt/2019-July/041896.html
-cat $CWD/patches/pyqt5-python2-crash.patch | patch -p1 --verbose || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# This avoids compiling a version number into KDE's .la files:
-export QTDIR=/usr/lib${LIBDIRSUFFIX}/qt5
-export QT5DIR=/usr/lib${LIBDIRSUFFIX}/qt5
-
-export CFLAGS="$SLKCFLAGS"
-export CXXFLAGS="$SLKCFLAGS"
-
-python2 configure.py \
- --confirm-license \
- --verbose \
- --qsci-api \
- -q /usr/bin/qmake-qt5 \
- || exit 1
-
-make $NUMJOBS || make || exit 1
-# INSTALL_ROOT is needed for QtDesigner, the other Makefiles use DESTDIR
-make -j1 install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
-
-mv $PKG/usr/bin/pyrcc5 $PKG/usr/bin/pyrcc5-py2
-mv $PKG/usr/bin/pyuic5 $PKG/usr/bin/pyuic5-py2
-mv $PKG/usr/bin/pylupdate5 $PKG/usr/bin/pylupdate5-py2
-rm -rf $PKG/$PYTHON2LIB/${PKGNAM}/uic/port_v3/
-
-python3 configure.py \
- --confirm-license \
- --verbose \
- --qsci-api \
- -q /usr/bin/qmake-qt5 \
- || exit 1
-
-make $NUMJOBS || make || exit 1
-# INSTALL_ROOT is needed for QtDesigner, the other Makefiles use DESTDIR
-make -j1 install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
-make clean
-
-rm -rf $PKG/$PYTHON3LIB/${PKGNAM}/uic/port_v2/
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" \
- | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-# Remove rpaths:
-for file in $(find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : 2> /dev/null) ; do
- if [ ! "$(patchelf --print-rpath $file 2> /dev/null)" = "" ]; then
- patchelf --remove-rpath $file
- fi
-done
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- ChangeLog LICENSE* NEWS README doc/* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz
-
diff --git a/deps/PyQt5/patches/pyqt-qt5.11.patch b/deps/PyQt5/patches/pyqt-qt5.11.patch
deleted file mode 100644
index 96c8a51..0000000
--- a/deps/PyQt5/patches/pyqt-qt5.11.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-From: Fabian Vogt <fabian@ritter-vogt.de>
-Subject: QTest::waitForEvents() is internal only
-
-Must not be used, got removed with Qt 5.11.
-
-Index: PyQt5_gpl-5.10.1/sip/QtTest/qtestmouse.sip
-===================================================================
---- PyQt5_gpl-5.10.1.orig/sip/QtTest/qtestmouse.sip
-+++ PyQt5_gpl-5.10.1/sip/QtTest/qtestmouse.sip
-@@ -41,7 +41,6 @@ namespace QTest
- void mousePress(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
- void mouseRelease(QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier = 0, QPoint pos = QPoint(), int delay = -1);
- void mouseEvent(QTest::MouseAction action, QWidget *widget, Qt::MouseButton button, Qt::KeyboardModifiers modifier, QPoint pos, int delay = -1);
-- void waitForEvents() /ReleaseGIL/;
- void mouseEvent(QTest::MouseAction action, QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier, QPoint pos, int delay = -1);
- void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1);
- void mouseRelease(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers modifier = Qt::KeyboardModifiers(), QPoint pos = QPoint(), int delay = -1);
diff --git a/deps/PyQt5/patches/pyqt-support-new-qt.patch b/deps/PyQt5/patches/pyqt-support-new-qt.patch
deleted file mode 100644
index 1464384..0000000
--- a/deps/PyQt5/patches/pyqt-support-new-qt.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff -ru a/sip/QtCore/QtCoremod.sip b/sip/QtCore/QtCoremod.sip
---- a/sip/QtCore/QtCoremod.sip 2016-12-25 18:56:11.000000000 +0100
-+++ b/sip/QtCore/QtCoremod.sip 2017-01-24 12:03:50.707514377 +0100
-@@ -22,7 +22,7 @@
-
- %Module(name=PyQt5.QtCore, call_super_init=True, default_VirtualErrorHandler=PyQt5, keyword_arguments="Optional", use_limited_api=True)
-
--%Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1 Qt_5_3_2 Qt_5_4_0 Qt_5_4_1 Qt_5_4_2 Qt_5_5_0 Qt_5_5_1 Qt_5_6_0 Qt_5_6_1 Qt_5_6_2 Qt_5_6_3 Qt_5_6_4 Qt_5_6_5 Qt_5_6_6 Qt_5_6_7 Qt_5_6_8 Qt_5_6_9 Qt_5_7_0 Qt_5_7_1 Qt_5_8_0 Qt_5_8_1 Qt_5_9_0 Qt_5_9_1 Qt_5_9_2 Qt_5_9_3 Qt_5_9_99 Qt_5_10_0 Qt_5_10_1}
-+%Timeline {Qt_5_0_0 Qt_5_0_1 Qt_5_0_2 Qt_5_1_0 Qt_5_1_1 Qt_5_2_0 Qt_5_2_1 Qt_5_3_0 Qt_5_3_1 Qt_5_3_2 Qt_5_4_0 Qt_5_4_1 Qt_5_4_2 Qt_5_5_0 Qt_5_5_1 Qt_5_6_0 Qt_5_6_1 Qt_5_6_2 Qt_5_6_3 Qt_5_6_4 Qt_5_6_5 Qt_5_6_6 Qt_5_6_7 Qt_5_6_8 Qt_5_6_9 Qt_5_7_0 Qt_5_7_1 Qt_5_8_0 Qt_5_8_1 Qt_5_9_0 Qt_5_9_1 Qt_5_9_2 Qt_5_9_3 Qt_5_9_99 Qt_5_10_0 Qt_5_10_1 Qt_5_11_0}
-
- %Platforms {WS_X11 WS_WIN WS_MACX}
-
diff --git a/deps/PyQt5/patches/pyqt5-cura-crash.patch b/deps/PyQt5/patches/pyqt5-cura-crash.patch
deleted file mode 100644
index 9b79407..0000000
--- a/deps/PyQt5/patches/pyqt5-cura-crash.patch
+++ /dev/null
@@ -1,559 +0,0 @@
-diff -ur --new-file PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquick_register_type.cpp PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquick_register_type.cpp
---- PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquick_register_type.cpp 2018-02-27 11:43:52.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquick_register_type.cpp 2018-03-29 03:32:17.000000000 +0200
-@@ -22,6 +22,8 @@
- #include "qpyquickframebufferobject.h"
- #include "qpyquickitem.h"
- #include "qpyquickpainteditem.h"
-+#include "qpyquickview.h"
-+#include "qpyquickwindow.h"
-
- #include "sipAPIQtQuick.h"
-
-@@ -30,6 +32,9 @@
- const QMetaObject *mo, const QByteArray &ptr_name,
- const QByteArray &list_name, QQmlPrivate::RegisterType **rtp)
- {
-+ // Make sure the types are tested in the right order (ie. more specific
-+ // types first).
-+
- #if QT_VERSION >= 0x050200
- if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickFramebufferObject)))
- return ((*rtp = QPyQuickFramebufferObject::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
-@@ -41,6 +46,12 @@
- if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickItem)))
- return ((*rtp = QPyQuickItem::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
-
-+ if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickView)))
-+ return ((*rtp = QPyQuickView::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
-+
-+ if (PyType_IsSubtype(py_type, sipTypeAsPyTypeObject(sipType_QQuickWindow)))
-+ return ((*rtp = QPyQuickWindow::addType(py_type, mo, ptr_name, list_name)) ? sipErrorNone : sipErrorFail);
-+
- // We don't recognise the type.
- return sipErrorContinue;
- }
-diff -ur --new-file PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickview.cpp PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickview.cpp
---- PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickview.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickview.cpp 2018-03-29 03:32:17.000000000 +0200
-@@ -0,0 +1,155 @@
-+// This is the implementation of the QPyQuickWindow classes.
-+//
-+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
-+//
-+// This file is part of PyQt5.
-+//
-+// This file may be used under the terms of the GNU General Public License
-+// version 3.0 as published by the Free Software Foundation and appearing in
-+// the file LICENSE included in the packaging of this file. Please review the
-+// following information to ensure the GNU General Public License version 3.0
-+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
-+//
-+// If you do not wish to use this file under the terms of the GPL version 3.0
-+// then you may purchase a commercial license. For more information contact
-+// info@riverbankcomputing.com.
-+//
-+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-+
-+
-+#include <Python.h>
-+
-+#include <QQmlListProperty>
-+
-+#include "qpyquickview.h"
-+
-+#include "sipAPIQtQuick.h"
-+
-+
-+// The maximum number of Python QQuickView types.
-+const int NrOfQuickViewTypes = 20;
-+
-+// The list of registered Python types.
-+static QList<PyTypeObject *> pyqt_types;
-+
-+// The registration data for the canned types.
-+static QQmlPrivate::RegisterType canned_types[NrOfQuickViewTypes];
-+
-+
-+#define QPYQUICKVIEW_INIT(n) \
-+ case n##U: \
-+ QPyQuickView##n::staticMetaObject = *mo; \
-+ rt->typeId = qRegisterNormalizedMetaType<QPyQuickView##n *>(ptr_name); \
-+ rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQuickView##n> >(list_name); \
-+ rt->objectSize = sizeof(QPyQuickView##n); \
-+ rt->create = QQmlPrivate::createInto<QPyQuickView##n>; \
-+ rt->metaObject = mo; \
-+ rt->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc<QPyQuickView##n>(); \
-+ rt->attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject<QPyQuickView##n>(); \
-+ rt->parserStatusCast = QQmlPrivate::StaticCastSelector<QPyQuickView##n,QQmlParserStatus>::cast(); \
-+ rt->valueSourceCast = QQmlPrivate::StaticCastSelector<QPyQuickView##n,QQmlPropertyValueSource>::cast(); \
-+ rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQuickView##n,QQmlPropertyValueInterceptor>::cast(); \
-+ break
-+
-+
-+// The ctor.
-+QPyQuickView::QPyQuickView(QWindow *parent) : sipQQuickView(parent)
-+{
-+}
-+
-+
-+// Add a new Python type and return its number.
-+QQmlPrivate::RegisterType *QPyQuickView::addType(PyTypeObject *type,
-+ const QMetaObject *mo, const QByteArray &ptr_name,
-+ const QByteArray &list_name)
-+{
-+ int type_nr = pyqt_types.size();
-+
-+ // Check we have a spare canned type.
-+ if (type_nr >= NrOfQuickViewTypes)
-+ {
-+ PyErr_Format(PyExc_TypeError,
-+ "a maximum of %d QQuickView types may be registered with QML",
-+ NrOfQuickViewTypes);
-+ return 0;
-+ }
-+
-+ pyqt_types.append(type);
-+
-+ QQmlPrivate::RegisterType *rt = &canned_types[type_nr];
-+
-+ // Initialise those members that depend on the C++ type.
-+ switch (type_nr)
-+ {
-+ QPYQUICKVIEW_INIT(0);
-+ QPYQUICKVIEW_INIT(1);
-+ QPYQUICKVIEW_INIT(2);
-+ QPYQUICKVIEW_INIT(3);
-+ QPYQUICKVIEW_INIT(4);
-+ QPYQUICKVIEW_INIT(5);
-+ QPYQUICKVIEW_INIT(6);
-+ QPYQUICKVIEW_INIT(7);
-+ QPYQUICKVIEW_INIT(8);
-+ QPYQUICKVIEW_INIT(9);
-+ QPYQUICKVIEW_INIT(10);
-+ QPYQUICKVIEW_INIT(11);
-+ QPYQUICKVIEW_INIT(12);
-+ QPYQUICKVIEW_INIT(13);
-+ QPYQUICKVIEW_INIT(14);
-+ QPYQUICKVIEW_INIT(15);
-+ QPYQUICKVIEW_INIT(16);
-+ QPYQUICKVIEW_INIT(17);
-+ QPYQUICKVIEW_INIT(18);
-+ QPYQUICKVIEW_INIT(19);
-+ }
-+
-+ return rt;
-+}
-+
-+
-+// Create the Python instance.
-+void QPyQuickView::createPyObject(QWindow *parent)
-+{
-+ SIP_BLOCK_THREADS
-+
-+ // Assume C++ owns everything.
-+ PyObject *obj = sipConvertFromNewPyType(this, pyqt_types.at(typeNr()),
-+ NULL, &sipPySelf, "D", parent, sipType_QWindow, NULL);
-+
-+ if (!obj)
-+ pyqt5_qtquick_err_print();
-+
-+ SIP_UNBLOCK_THREADS
-+}
-+
-+
-+// The canned type implementations.
-+#define QPYQUICKVIEW_IMPL(n) \
-+QPyQuickView##n::QPyQuickView##n(QWindow *parent) : QPyQuickView(parent) \
-+{ \
-+ createPyObject(parent); \
-+} \
-+QMetaObject QPyQuickView##n::staticMetaObject
-+
-+
-+QPYQUICKVIEW_IMPL(0);
-+QPYQUICKVIEW_IMPL(1);
-+QPYQUICKVIEW_IMPL(2);
-+QPYQUICKVIEW_IMPL(3);
-+QPYQUICKVIEW_IMPL(4);
-+QPYQUICKVIEW_IMPL(5);
-+QPYQUICKVIEW_IMPL(6);
-+QPYQUICKVIEW_IMPL(7);
-+QPYQUICKVIEW_IMPL(8);
-+QPYQUICKVIEW_IMPL(9);
-+QPYQUICKVIEW_IMPL(10);
-+QPYQUICKVIEW_IMPL(11);
-+QPYQUICKVIEW_IMPL(12);
-+QPYQUICKVIEW_IMPL(13);
-+QPYQUICKVIEW_IMPL(14);
-+QPYQUICKVIEW_IMPL(15);
-+QPYQUICKVIEW_IMPL(16);
-+QPYQUICKVIEW_IMPL(17);
-+QPYQUICKVIEW_IMPL(18);
-+QPYQUICKVIEW_IMPL(19);
-diff -ur --new-file PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickview.h PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickview.h
---- PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickview.h 1970-01-01 01:00:00.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickview.h 2018-03-29 03:32:17.000000000 +0200
-@@ -0,0 +1,87 @@
-+// This is the definition of the QPyQuickView classes.
-+//
-+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
-+//
-+// This file is part of PyQt5.
-+//
-+// This file may be used under the terms of the GNU General Public License
-+// version 3.0 as published by the Free Software Foundation and appearing in
-+// the file LICENSE included in the packaging of this file. Please review the
-+// following information to ensure the GNU General Public License version 3.0
-+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
-+//
-+// If you do not wish to use this file under the terms of the GPL version 3.0
-+// then you may purchase a commercial license. For more information contact
-+// info@riverbankcomputing.com.
-+//
-+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-+
-+
-+#ifndef _QPYQUICKVIEW_H
-+#define _QPYQUICKVIEW_H
-+
-+
-+#include <Python.h>
-+
-+#include <qqmlprivate.h>
-+#include <QByteArray>
-+#include <QMetaObject>
-+#include <QQuickView>
-+
-+#include "sipAPIQtQuick.h"
-+
-+
-+class QPyQuickView : public sipQQuickView
-+{
-+public:
-+ QPyQuickView(QWindow *parent = 0);
-+
-+ virtual int typeNr() const = 0;
-+
-+ static QQmlPrivate::RegisterType *addType(PyTypeObject *type,
-+ const QMetaObject *mo, const QByteArray &ptr_name,
-+ const QByteArray &list_name);
-+ void createPyObject(QWindow *parent);
-+
-+private:
-+ QPyQuickView(const QPyQuickView &);
-+};
-+
-+
-+// The canned type declarations.
-+#define QPYQUICKVIEW_DECL(n) \
-+class QPyQuickView##n : public QPyQuickView \
-+{ \
-+public: \
-+ QPyQuickView##n(QWindow *parent = 0); \
-+ static QMetaObject staticMetaObject; \
-+ virtual int typeNr() const {return n##U;} \
-+private: \
-+ QPyQuickView##n(const QPyQuickView##n &); \
-+}
-+
-+
-+QPYQUICKVIEW_DECL(0);
-+QPYQUICKVIEW_DECL(1);
-+QPYQUICKVIEW_DECL(2);
-+QPYQUICKVIEW_DECL(3);
-+QPYQUICKVIEW_DECL(4);
-+QPYQUICKVIEW_DECL(5);
-+QPYQUICKVIEW_DECL(6);
-+QPYQUICKVIEW_DECL(7);
-+QPYQUICKVIEW_DECL(8);
-+QPYQUICKVIEW_DECL(9);
-+QPYQUICKVIEW_DECL(10);
-+QPYQUICKVIEW_DECL(11);
-+QPYQUICKVIEW_DECL(12);
-+QPYQUICKVIEW_DECL(13);
-+QPYQUICKVIEW_DECL(14);
-+QPYQUICKVIEW_DECL(15);
-+QPYQUICKVIEW_DECL(16);
-+QPYQUICKVIEW_DECL(17);
-+QPYQUICKVIEW_DECL(18);
-+QPYQUICKVIEW_DECL(19);
-+
-+
-+#endif
-diff -ur --new-file PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickwindow.cpp PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickwindow.cpp
---- PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickwindow.cpp 1970-01-01 01:00:00.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickwindow.cpp 2018-03-29 03:32:17.000000000 +0200
-@@ -0,0 +1,155 @@
-+// This is the implementation of the QPyQuickWindow classes.
-+//
-+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
-+//
-+// This file is part of PyQt5.
-+//
-+// This file may be used under the terms of the GNU General Public License
-+// version 3.0 as published by the Free Software Foundation and appearing in
-+// the file LICENSE included in the packaging of this file. Please review the
-+// following information to ensure the GNU General Public License version 3.0
-+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
-+//
-+// If you do not wish to use this file under the terms of the GPL version 3.0
-+// then you may purchase a commercial license. For more information contact
-+// info@riverbankcomputing.com.
-+//
-+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-+
-+
-+#include <Python.h>
-+
-+#include <QQmlListProperty>
-+
-+#include "qpyquickwindow.h"
-+
-+#include "sipAPIQtQuick.h"
-+
-+
-+// The maximum number of Python QQuickWindow types.
-+const int NrOfQuickWindowTypes = 20;
-+
-+// The list of registered Python types.
-+static QList<PyTypeObject *> pyqt_types;
-+
-+// The registration data for the canned types.
-+static QQmlPrivate::RegisterType canned_types[NrOfQuickWindowTypes];
-+
-+
-+#define QPYQUICKWINDOW_INIT(n) \
-+ case n##U: \
-+ QPyQuickWindow##n::staticMetaObject = *mo; \
-+ rt->typeId = qRegisterNormalizedMetaType<QPyQuickWindow##n *>(ptr_name); \
-+ rt->listId = qRegisterNormalizedMetaType<QQmlListProperty<QPyQuickWindow##n> >(list_name); \
-+ rt->objectSize = sizeof(QPyQuickWindow##n); \
-+ rt->create = QQmlPrivate::createInto<QPyQuickWindow##n>; \
-+ rt->metaObject = mo; \
-+ rt->attachedPropertiesFunction = QQmlPrivate::attachedPropertiesFunc<QPyQuickWindow##n>(); \
-+ rt->attachedPropertiesMetaObject = QQmlPrivate::attachedPropertiesMetaObject<QPyQuickWindow##n>(); \
-+ rt->parserStatusCast = QQmlPrivate::StaticCastSelector<QPyQuickWindow##n,QQmlParserStatus>::cast(); \
-+ rt->valueSourceCast = QQmlPrivate::StaticCastSelector<QPyQuickWindow##n,QQmlPropertyValueSource>::cast(); \
-+ rt->valueInterceptorCast = QQmlPrivate::StaticCastSelector<QPyQuickWindow##n,QQmlPropertyValueInterceptor>::cast(); \
-+ break
-+
-+
-+// The ctor.
-+QPyQuickWindow::QPyQuickWindow(QWindow *parent) : sipQQuickWindow(parent)
-+{
-+}
-+
-+
-+// Add a new Python type and return its number.
-+QQmlPrivate::RegisterType *QPyQuickWindow::addType(PyTypeObject *type,
-+ const QMetaObject *mo, const QByteArray &ptr_name,
-+ const QByteArray &list_name)
-+{
-+ int type_nr = pyqt_types.size();
-+
-+ // Check we have a spare canned type.
-+ if (type_nr >= NrOfQuickWindowTypes)
-+ {
-+ PyErr_Format(PyExc_TypeError,
-+ "a maximum of %d QQuickWindow types may be registered with QML",
-+ NrOfQuickWindowTypes);
-+ return 0;
-+ }
-+
-+ pyqt_types.append(type);
-+
-+ QQmlPrivate::RegisterType *rt = &canned_types[type_nr];
-+
-+ // Initialise those members that depend on the C++ type.
-+ switch (type_nr)
-+ {
-+ QPYQUICKWINDOW_INIT(0);
-+ QPYQUICKWINDOW_INIT(1);
-+ QPYQUICKWINDOW_INIT(2);
-+ QPYQUICKWINDOW_INIT(3);
-+ QPYQUICKWINDOW_INIT(4);
-+ QPYQUICKWINDOW_INIT(5);
-+ QPYQUICKWINDOW_INIT(6);
-+ QPYQUICKWINDOW_INIT(7);
-+ QPYQUICKWINDOW_INIT(8);
-+ QPYQUICKWINDOW_INIT(9);
-+ QPYQUICKWINDOW_INIT(10);
-+ QPYQUICKWINDOW_INIT(11);
-+ QPYQUICKWINDOW_INIT(12);
-+ QPYQUICKWINDOW_INIT(13);
-+ QPYQUICKWINDOW_INIT(14);
-+ QPYQUICKWINDOW_INIT(15);
-+ QPYQUICKWINDOW_INIT(16);
-+ QPYQUICKWINDOW_INIT(17);
-+ QPYQUICKWINDOW_INIT(18);
-+ QPYQUICKWINDOW_INIT(19);
-+ }
-+
-+ return rt;
-+}
-+
-+
-+// Create the Python instance.
-+void QPyQuickWindow::createPyObject(QWindow *parent)
-+{
-+ SIP_BLOCK_THREADS
-+
-+ // Assume C++ owns everything.
-+ PyObject *obj = sipConvertFromNewPyType(this, pyqt_types.at(typeNr()),
-+ NULL, &sipPySelf, "D", parent, sipType_QWindow, NULL);
-+
-+ if (!obj)
-+ pyqt5_qtquick_err_print();
-+
-+ SIP_UNBLOCK_THREADS
-+}
-+
-+
-+// The canned type implementations.
-+#define QPYQUICKWINDOW_IMPL(n) \
-+QPyQuickWindow##n::QPyQuickWindow##n(QWindow *parent) : QPyQuickWindow(parent) \
-+{ \
-+ createPyObject(parent); \
-+} \
-+QMetaObject QPyQuickWindow##n::staticMetaObject
-+
-+
-+QPYQUICKWINDOW_IMPL(0);
-+QPYQUICKWINDOW_IMPL(1);
-+QPYQUICKWINDOW_IMPL(2);
-+QPYQUICKWINDOW_IMPL(3);
-+QPYQUICKWINDOW_IMPL(4);
-+QPYQUICKWINDOW_IMPL(5);
-+QPYQUICKWINDOW_IMPL(6);
-+QPYQUICKWINDOW_IMPL(7);
-+QPYQUICKWINDOW_IMPL(8);
-+QPYQUICKWINDOW_IMPL(9);
-+QPYQUICKWINDOW_IMPL(10);
-+QPYQUICKWINDOW_IMPL(11);
-+QPYQUICKWINDOW_IMPL(12);
-+QPYQUICKWINDOW_IMPL(13);
-+QPYQUICKWINDOW_IMPL(14);
-+QPYQUICKWINDOW_IMPL(15);
-+QPYQUICKWINDOW_IMPL(16);
-+QPYQUICKWINDOW_IMPL(17);
-+QPYQUICKWINDOW_IMPL(18);
-+QPYQUICKWINDOW_IMPL(19);
-diff -ur --new-file PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickwindow.h PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickwindow.h
---- PyQt5_gpl-5.10.1/qpy/QtQuick/qpyquickwindow.h 1970-01-01 01:00:00.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/qpy/QtQuick/qpyquickwindow.h 2018-03-29 03:32:17.000000000 +0200
-@@ -0,0 +1,87 @@
-+// This is the definition of the QPyQuickWindow classes.
-+//
-+// Copyright (c) 2018 Riverbank Computing Limited <info@riverbankcomputing.com>
-+//
-+// This file is part of PyQt5.
-+//
-+// This file may be used under the terms of the GNU General Public License
-+// version 3.0 as published by the Free Software Foundation and appearing in
-+// the file LICENSE included in the packaging of this file. Please review the
-+// following information to ensure the GNU General Public License version 3.0
-+// requirements will be met: http://www.gnu.org/copyleft/gpl.html.
-+//
-+// If you do not wish to use this file under the terms of the GPL version 3.0
-+// then you may purchase a commercial license. For more information contact
-+// info@riverbankcomputing.com.
-+//
-+// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
-+// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-+
-+
-+#ifndef _QPYQUICKWINDOW_H
-+#define _QPYQUICKWINDOW_H
-+
-+
-+#include <Python.h>
-+
-+#include <qqmlprivate.h>
-+#include <QByteArray>
-+#include <QMetaObject>
-+#include <QQuickWindow>
-+
-+#include "sipAPIQtQuick.h"
-+
-+
-+class QPyQuickWindow : public sipQQuickWindow
-+{
-+public:
-+ QPyQuickWindow(QWindow *parent = 0);
-+
-+ virtual int typeNr() const = 0;
-+
-+ static QQmlPrivate::RegisterType *addType(PyTypeObject *type,
-+ const QMetaObject *mo, const QByteArray &ptr_name,
-+ const QByteArray &list_name);
-+ void createPyObject(QWindow *parent);
-+
-+private:
-+ QPyQuickWindow(const QPyQuickWindow &);
-+};
-+
-+
-+// The canned type declarations.
-+#define QPYQUICKWINDOW_DECL(n) \
-+class QPyQuickWindow##n : public QPyQuickWindow \
-+{ \
-+public: \
-+ QPyQuickWindow##n(QWindow *parent = 0); \
-+ static QMetaObject staticMetaObject; \
-+ virtual int typeNr() const {return n##U;} \
-+private: \
-+ QPyQuickWindow##n(const QPyQuickWindow##n &); \
-+}
-+
-+
-+QPYQUICKWINDOW_DECL(0);
-+QPYQUICKWINDOW_DECL(1);
-+QPYQUICKWINDOW_DECL(2);
-+QPYQUICKWINDOW_DECL(3);
-+QPYQUICKWINDOW_DECL(4);
-+QPYQUICKWINDOW_DECL(5);
-+QPYQUICKWINDOW_DECL(6);
-+QPYQUICKWINDOW_DECL(7);
-+QPYQUICKWINDOW_DECL(8);
-+QPYQUICKWINDOW_DECL(9);
-+QPYQUICKWINDOW_DECL(10);
-+QPYQUICKWINDOW_DECL(11);
-+QPYQUICKWINDOW_DECL(12);
-+QPYQUICKWINDOW_DECL(13);
-+QPYQUICKWINDOW_DECL(14);
-+QPYQUICKWINDOW_DECL(15);
-+QPYQUICKWINDOW_DECL(16);
-+QPYQUICKWINDOW_DECL(17);
-+QPYQUICKWINDOW_DECL(18);
-+QPYQUICKWINDOW_DECL(19);
-+
-+
-+#endif
-diff -ur --new-file PyQt5_gpl-5.10.1/sip/QtQuick/qquickview.sip PyQt5_gpl-5.10.2.dev1803281228/sip/QtQuick/qquickview.sip
---- PyQt5_gpl-5.10.1/sip/QtQuick/qquickview.sip 2018-02-27 11:43:53.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/sip/QtQuick/qquickview.sip 2018-03-29 03:32:18.000000000 +0200
-@@ -20,7 +20,7 @@
- // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-
--class QQuickView : QQuickWindow
-+class QQuickView : QQuickWindow /ExportDerived/
- {
- %TypeHeaderCode
- #include <qquickview.h>
-diff -ur --new-file PyQt5_gpl-5.10.1/sip/QtQuick/qquickwindow.sip PyQt5_gpl-5.10.2.dev1803281228/sip/QtQuick/qquickwindow.sip
---- PyQt5_gpl-5.10.1/sip/QtQuick/qquickwindow.sip 2018-02-27 11:43:53.000000000 +0100
-+++ PyQt5_gpl-5.10.2.dev1803281228/sip/QtQuick/qquickwindow.sip 2018-03-29 03:32:18.000000000 +0200
-@@ -20,7 +20,7 @@
- // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-
--class QQuickWindow : QWindow
-+class QQuickWindow : QWindow /ExportDerived/
- {
- %TypeHeaderCode
- #include <qquickwindow.h>
diff --git a/deps/PyQt5/patches/pyqt5-python2-crash.patch b/deps/PyQt5/patches/pyqt5-python2-crash.patch
deleted file mode 100644
index 14462f7..0000000
--- a/deps/PyQt5/patches/pyqt5-python2-crash.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff -ur PyQt5_gpl-5.12.3/qpy/QtCore/qpycore_post_init.cpp.in PyQt5_gpl-5.12.3b/qpy/QtCore/qpycore_post_init.cpp.in
---- PyQt5_gpl-5.12.3/qpy/QtCore/qpycore_post_init.cpp.in 2019-06-25 14:41:02.000000000 +0200
-+++ PyQt5_gpl-5.12.3b/qpy/QtCore/qpycore_post_init.cpp.in 2019-07-01 17:06:34.882644535 +0200
-@@ -151,8 +151,4 @@
- // initialised first (at least for Windows) and this is the only way to
- // guarantee things are done in the right order.
- PyQtSlotProxy::mutex = new QMutex(QMutex::Recursive);
--
-- // Load the embedded qt.conf file if there is a bundled copy of Qt.
-- if (!qpycore_qt_conf())
-- Py_FatalError("PyQt5.QtCore: Unable to embed qt.conf");
- }
-
diff --git a/deps/QScintilla/.url b/deps/QScintilla/.url
deleted file mode 100644
index e0ef390..0000000
--- a/deps/QScintilla/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://www.riverbankcomputing.com/static/Downloads/QScintilla/2.11.4/QScintilla-2.11.4.tar.gz
diff --git a/deps/QScintilla/QScintilla.SlackBuild b/deps/QScintilla/QScintilla.SlackBuild
deleted file mode 100755
index 62f0e60..0000000
--- a/deps/QScintilla/QScintilla.SlackBuild
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/bin/sh
-
-# Slackware build script for QScintilla
-
-# Copyright 2008 Robby Workman <rworkman@slackware.com> Northport, AL, USA
-# Copyright 2008, 2009, 2010, 2011, 2012, 2018, 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# Modified 2018, 2019 by Eric Hameleers <alien@slackware.com> (add Qt5 support)
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=QScintilla
-VERSION=${VERSION:-2.11.4}
-BUILD=${BUILD:-2}
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf ${PKGNAM}-$VERSION
-tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z || exit 1
-cd ${PKGNAM}-$VERSION || exit 1
-
-# Fix compilation:
-cat $CWD/patches/QScintilla_qsciscintillabase_qurl.diff | patch -p1 --verbose || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# Define QMAKEFEATURES to that we can re-use already built libs
-# without spamming the harddisk:
-export QMAKEFEATURES=${PWD}/Qt4Qt5/features/
-
-# Conditional build of Qt5 support:
-if qtpaths-qt5 --qt-version 1>/dev/null 2>/dev/null ; then
- echo "-- Compiling Qt5 support --"
- # QT5 support first:
- cd Qt4Qt5
- echo "-- >> Qt4Qt5 --"
- qmake-qt5 \
- -o Makefile \
- QMAKE_CFLAGS+="$SLKCFLAGS" \
- QMAKE_CXXFLAGS+="$SLKCFLAGS -std=c++11" \
- qscintilla.pro || exit 1
- make $NUMJOBS || exit 1
- make install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
- cd -
-
- cd designer-Qt4Qt5
- echo "-- >> designer-Qt4Qt5 --"
- qmake-qt5 \
- -o Makefile \
- INCLUDEPATH+=../Qt4Qt5 QMAKE_LIBDIR+=../Qt4Qt5 \
- QMAKE_CFLAGS+="$SLKCFLAGS" \
- QMAKE_CXXFLAGS+="$SLKCFLAGS -std=c++11" \
- designer.pro || exit 1
- make $NUMJOBS || exit 1
- make install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
- cd -
-
- cd Python
- echo "-- >> Python --"
- python3 configure.py \
- --verbose \
- --qmake /usr/bin/qmake-qt5 \
- --pyqt=PyQt5 \
- -n ../Qt4Qt5/ -o ../Qt4Qt5/ -c \
- || exit 1
- make || exit 1
- make -j1 install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
-
- make clean || exit 1
-
- python2 configure.py \
- --verbose \
- --qmake /usr/bin/qmake-qt5 \
- --pyqt=PyQt5 \
- -n ../Qt4Qt5/ -o ../Qt4Qt5/ -c \
- || exit 1
- make || exit 1
- make -j1 install DESTDIR=$PKG INSTALL_ROOT=$PKG || exit 1
- cd -
-
- # In order to compile Qt4 support next, clean up first:
- make clean -C Qt4Qt5 || exit 1
- make clean -C designer-Qt4Qt5 || exit 1
- make clean -C Python || exit 1
-fi
-
-# QT4 support:
-echo "-- Compiling Qt4 support --"
-cd Qt4Qt5
- echo "-- >> Qt4Qt5 --"
- qmake \
- -o Makefile \
- QMAKE_CFLAGS+="$SLKCFLAGS" \
- QMAKE_CXXFLAGS+="$SLKCFLAGS -std=c++11" \
- qscintilla.pro || exit 1
- make $NUMJOBS || exit 1
- make install INSTALL_ROOT=$PKG || exit 1
-cd -
-
-cd designer-Qt4Qt5
- echo "-- >> designer-Qt4Qt5 --"
- qmake \
- -o Makefile \
- INCLUDEPATH+=../Qt4Qt5 QMAKE_LIBDIR+=../Qt4Qt5 \
- QMAKE_CFLAGS+="$SLKCFLAGS" \
- QMAKE_CXXFLAGS+="$SLKCFLAGS -std=c++11" \
- designer.pro || exit 1
- make $NUMJOBS || exit 1
- make install INSTALL_ROOT=$PKG || exit 1
-cd -
-
-cd Python
- echo "-- >> Python --"
- python3 configure.py \
- --verbose \
- --qmake /usr/bin/qmake \
- -n ../Qt4Qt5/ -o ../Qt4Qt5/ -c \
- || exit 1
- make -j1 || exit 1
- make -j1 install INSTALL_ROOT=$PKG || exit 1
-
- make clean || exit 1
-
- python2 configure.py \
- --verbose \
- --qmake /usr/bin/qmake \
- -n ../Qt4Qt5/ -o ../Qt4Qt5/ -c \
- || exit 1
- make -j1 || exit 1
- make -j1 install INSTALL_ROOT=$PKG || exit 1
-cd -
-
-# Link the shared qt4 libraries into /usr/lib${LIBDIRSUFFIX}:
-( cd $PKG/usr/lib${LIBDIRSUFFIX}
- for file in $(ls -1 qt/lib/*.so* 2>/dev/null) ; do
- ln -sf $file .
- done
-)
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" \
- | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- LICENSE NEWS README* \
- doc/html-Qt4Qt5 doc/Scintilla \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/QScintilla/patches/QScintilla_qsciscintillabase_qurl.diff b/deps/QScintilla/patches/QScintilla_qsciscintillabase_qurl.diff
deleted file mode 100644
index 9720a4b..0000000
--- a/deps/QScintilla/patches/QScintilla_qsciscintillabase_qurl.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- QScintilla_gpl-2.11.1/Qt4Qt5/qsciscintillabase.cpp.orig
-+++ QScintilla_gpl-2.11.1/Qt4Qt5/qsciscintillabase.cpp
-@@ -37,6 +37,7 @@
- #include <QScrollBar>
- #include <QStyle>
- #include <QTextCodec>
-+#include <QUrl>
-
- #include "SciAccessibility.h"
- #include "ScintillaQt.h"
-
diff --git a/deps/QScintilla/slack-desc b/deps/QScintilla/slack-desc
deleted file mode 100644
index cb3fdd3..0000000
--- a/deps/QScintilla/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler--------------------------------------------------|
-QScintilla: QScintilla (Qt port of the Scintilla C++ editor control)
-QScintilla:
-QScintilla: QScintilla includes features especially useful when editing and
-QScintilla: debugging source code. These include support for syntax styling,
-QScintilla: error indicators, code completion, and call tips. The selection
-QScintilla: margin can contain markers like those used in debuggers to
-QScintilla: indicate breakpoints and the current line. Styling choices are
-QScintilla: more open than with many editors, allowing the use of
-QScintilla: proportional fonts, bold and italics, multiple foreground and
-QScintilla: background colours, and multiple fonts.
-QScintilla:
diff --git a/deps/SDL_sound/.url b/deps/SDL_sound/.url
deleted file mode 100644
index 70b1017..0000000
--- a/deps/SDL_sound/.url
+++ /dev/null
@@ -1 +0,0 @@
-http://icculus.org/SDL_sound/downloads/SDL_sound-1.0.3.tar.gz
diff --git a/deps/SDL_sound/SDL_sound.SlackBuild b/deps/SDL_sound/SDL_sound.SlackBuild
deleted file mode 100755
index 99dfd4d..0000000
--- a/deps/SDL_sound/SDL_sound.SlackBuild
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/sh
-
-# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=SDL_sound
-VERSION=${VERSION:-1.0.3}
-BUILD=${BUILD:-1}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "${PKGNAM}-${VERSION}-${ARCH}-${BUILD}.txz"
- exit 0
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.gz || exit 1
-cd $PKGNAM-$VERSION || exit 1
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --sysconfdir=/etc \
- --disable-static \
- --build=$TARGET || exit 1
-
-make || exit 1
-make install-strip DESTDIR=$PKG || exit 1
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a CHANGELOG COPYING CREDITS INSTALL README TODO \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-# Strip binaries (if any):
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/SDL_sound/slack-desc b/deps/SDL_sound/slack-desc
deleted file mode 100644
index 961108c..0000000
--- a/deps/SDL_sound/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-SDL_sound: SDL_sound (a sound library add-on for SDL)
-SDL_sound:
-SDL_sound: SDL_sound is a library to decode sseveral popular sound file formats,
-SDL_sound: such as .WAV and .MP3.
-SDL_sound:
-SDL_sound:
-SDL_sound:
-SDL_sound:
-SDL_sound:
-SDL_sound: Homepage: https://icculus.org/SDL_sound/
-SDL_sound:
diff --git a/deps/accountsservice/.url b/deps/accountsservice/.url
index f11ad9a..f006aab 100644
--- a/deps/accountsservice/.url
+++ b/deps/accountsservice/.url
@@ -1 +1 @@
-https://www.freedesktop.org/software/accountsservice/accountsservice-0.6.45.tar.xz
+https://www.freedesktop.org/software/accountsservice/accountsservice-0.6.55.tar.xz
diff --git a/deps/accountsservice/accountsservice.SlackBuild b/deps/accountsservice/accountsservice.SlackBuild
index fa52966..8ad729a 100755
--- a/deps/accountsservice/accountsservice.SlackBuild
+++ b/deps/accountsservice/accountsservice.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2017 Eric Hameleers, Eindhoven, NL
+# Copyright 2017, 2020 Eric Hameleers, Eindhoven, NL
# Copyright 2017 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
@@ -25,7 +25,7 @@
PKGNAM=accountsservice
-VERSION=${VERSION:-0.6.45}
+VERSION=${VERSION:-0.6.55}
BUILD=${BUILD:-2}
CWD=$(pwd)
@@ -72,6 +72,7 @@ cd $TMP
rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
cd $PKGNAM-$VERSION || exit 1
+
chown -R root:root .
find -L . \
\( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
@@ -79,33 +80,39 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
-[ ! -x configure ] && autoreconf -vif
+# Choose correct options depending on whether elogind is installed:
+if [ -L /lib${LIBDIRSUFFIX}/libelogind.so.? ]; then
+ DO_ELOGIND=true
+else
+ DO_ELOGIND=false
+fi
-LDFLAGS="$SLKLDFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-CFLAGS="$SLKCFLAGS" \
-./configure \
+export LDFLAGS="$SLKLDFLAGS"
+export CXXFLAGS="$SLKCFLAGS"
+export CFLAGS="$SLKCFLAGS"
+meson build \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
- --docdir=/usr/doc/$PKGNAM-$VERSION \
--localstatedir=/var \
--sysconfdir=/etc \
- --disable-gtk-doc \
- --disable-systemd \
- --enable-admin-group=wheel \
- --program-prefix= \
- --program-suffix= \
- --build=$TARGET
+ -D admin_group=wheel \
+ -D docbook=false \
+ -D gtk_doc=true \
+ -D elogind=${DO_ELOGIND} \
+ -D systemd=false \
+ -D systemdsystemunitdir=no \
+ -D user_heuristics=false \
+ || exit 1
# Build and install:
-make || exit 1
-make DESTDIR=$PKG install || exit 1
+"${NINJA:=ninja}" $NUMJOBS -C build || exit 1
+DESTDIR=$PKG meson install -C build || exit 1
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
- AUTHORS COPYING NEWS README TODO \
+ AUTHORS COPYING NEWS README* TODO \
$PKG/usr/doc/$PKGNAM-$VERSION
# Compress the man page(s):
diff --git a/deps/alldeps.SlackBuild b/deps/alldeps.SlackBuild
index f9f078d..6fdb0c4 100755
--- a/deps/alldeps.SlackBuild
+++ b/deps/alldeps.SlackBuild
@@ -15,17 +15,9 @@ QTDIR=/usr/lib${LIBDIRSUFFIX}/qt ; export QTDIR
ALLDEPS=" \
extra-cmake-modules \
+ elogind \
md4c \
sni-qt \
- libxkbcommon \
- wayland \
- hyphen \
- brotli \
- woff2 \
- qt5 \
- qt5-webkit \
- SDL_sound \
- OpenAL \
qjson \
phonon \
phonon-gstreamer \
@@ -33,15 +25,8 @@ ALLDEPS=" \
phonon-qt4-gstreamer \
python-enum34 \
pyxdg \
- pcaudiolib \
- espeak-ng \
dotconf \
- flite \
speech-dispatcher \
- sip \
- PyQt \
- PyQt5 \
- QScintilla \
qca-qt5 \
libdbusmenu-qt5 \
polkit-qt-1 \
@@ -55,10 +40,6 @@ ALLDEPS=" \
cfitsio \
libdmtx \
qrencode \
- hack-font-ttf \
- noto-font-ttf \
- noto-cjk-font-ttf \
- gpgme \
lensfun \
opencv \
dvdauthor \
@@ -83,9 +64,11 @@ ALLDEPS=" \
sassc \
rttr \
quazip \
+ kdsoap \
+ libqalculate \
+ exiv2 \
+ pipewire \
"
- # Only needed when adding support for Wayland:
- #elogind \
# Allow for specification of individual packages to be built:
if [ -z "$1" ]; then
diff --git a/deps/autoconf-archive/autoconf-archive.SlackBuild b/deps/autoconf-archive/autoconf-archive.SlackBuild
new file mode 100755
index 0000000..2a93c07
--- /dev/null
+++ b/deps/autoconf-archive/autoconf-archive.SlackBuild
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# Slackware build script for autoconf-archive
+
+# Copyright 2018-2019 Hunter Sezen California, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 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.
+
+PKGNAM=autoconf-archive
+VERSION=${VERSION:-2019.01.06}
+BUILD=${BUILD:-1}
+
+ARCH=noarch
+
+CWD=$(pwd)
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+cd $TMP
+rm -rf $PKGNAM-$VERSION
+tar xvf $CWD/$PKGNAM-$VERSION.tar.xz
+cd $PKGNAM-$VERSION
+chown -R root:root .
+find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+[ ! -x configure ] && autoreconf -vif
+
+./configure \
+ --prefix=/usr \
+ --infodir=/usr/info \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --build=$ARCH-slackware-linux
+
+make
+make install DESTDIR=$PKG
+
+rm -f $PKG/usr/info/dir
+gzip -9 $PKG/usr/info/*.info*
+
+mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
+cp -a ChangeLog INSTALL NEWS TODO $PKG/usr/doc/$PKGNAM-$VERSION
+cat $CWD/$PKGNAM.SlackBuild > $PKG/usr/doc/$PKGNAM-$VERSION/$PKGNAM.SlackBuild
+
+mkdir -p $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
diff --git a/deps/autoconf-archive/autoconf-archive.info b/deps/autoconf-archive/autoconf-archive.info
new file mode 100644
index 0000000..cfda18c
--- /dev/null
+++ b/deps/autoconf-archive/autoconf-archive.info
@@ -0,0 +1,10 @@
+PRGNAM="autoconf-archive"
+VERSION="2019.01.06"
+HOMEPAGE="https://www.gnu.org/software/autoconf-archive/"
+DOWNLOAD="https://ftpmirror.gnu.org/autoconf-archive/autoconf-archive-2019.01.06.tar.xz"
+MD5SUM="d46413c8b00a125b1529bae385bbec55"
+DOWNLOAD_x86_64=""
+MD5SUM_x86_64=""
+REQUIRES=""
+MAINTAINER="Hunter Sezen"
+EMAIL="orbea@riseup.net"
diff --git a/deps/autoconf-archive/slack-desc b/deps/autoconf-archive/slack-desc
new file mode 100644
index 0000000..5264c36
--- /dev/null
+++ b/deps/autoconf-archive/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+autoconf-archive: autoconf-archive (GNU Autoconf macros)
+autoconf-archive:
+autoconf-archive: The GNU Autoconf Archive is a collection of more than 500 macros for
+autoconf-archive: GNU Autoconf that have been contributed as free software by friendly
+autoconf-archive: supporters of the cause from all over the Internet.
+autoconf-archive:
+autoconf-archive: Homepage: https://www.gnu.org/software/autoconf-archive/
+autoconf-archive:
+autoconf-archive:
+autoconf-archive:
+autoconf-archive:
diff --git a/deps/brotli/.url b/deps/brotli/.url
deleted file mode 100644
index 7b45d51..0000000
--- a/deps/brotli/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/google/brotli/archive/v1.0.7.tar.gz
diff --git a/deps/brotli/brotli.SlackBuild b/deps/brotli/brotli.SlackBuild
deleted file mode 100755
index 1256fff..0000000
--- a/deps/brotli/brotli.SlackBuild
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/bin/sh
-
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
-# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=brotli
-VERSION=${VERSION:-1.0.7}
-BUILD=${BUILD:-2}
-
-NUMJOBS=${NUMJOBS:-" -j$(nproc) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- SLKLDFLAGS=""; LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
- SLKLDFLAGS=""; LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
- SLKLDFLAGS=""; LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- SLKLDFLAGS=""; LIBDIRSUFFIX=""
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xf $CWD/$PKGNAM-$VERSION.tar.gz || exit 1
-cd $PKGNAM-$VERSION || exit 1
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# First, python2 libraries:
-python2 setup.py install --root=$PKG
-
-# Next, python3 libraries:
-python3 setup.py install --root=$PKG
-
-# Finally, brotli itself:
-mkdir -p build-${PKGNAM}
-cd build-${PKGNAM}
- cmake \
- -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
- -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
- -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
- -DCMAKE_BUILD_TYPE=Release \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DCMAKE_INSTALL_LIBDIR=/usr/lib${LIBDIRSUFFIX} \
- -DMAN_INSTALL_DIR=/usr/man \
- -DSYSCONF_INSTALL_DIR=/etc \
- -DLIB_SUFFIX=${LIBDIRSUFFIX} \
- -DBUILD_TESTING=NO \
- ..
- make $NUMJOBS || make || exit 1
- make DESTDIR=$PKG install || exit 1
-cd -
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" \
- | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- BUILD CONTRIBUTING.md LICENSE README* WORKSPACE \
- $PKG/usr/doc/$PKGNAM-$VERSION
-chown -R root:root $PKG/usr/doc
-
-# If there's a ChangeLog, installing at least part of the recent history
-# is useful, but don't let it get totally out of control:
-if [ -r ChangeLog ]; then
- DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION)
- cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
- touch -r ChangeLog $DOCSDIR/ChangeLog
-fi
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz
-
diff --git a/deps/brotli/slack-desc b/deps/brotli/slack-desc
deleted file mode 100644
index 4d8a22f..0000000
--- a/deps/brotli/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-brotli: brotli (Brotli compression format)
-brotli:
-brotli: Brotli is a generic-purpose lossless compression algorithm that
-brotli: compresses data using a combination of a modern variant of the LZ77
-brotli: algorithm, Huffman coding and 2nd order context modeling, with
-brotli: a compression ratio comparable to the best currently available
-brotli: general-purpose compression methods.
-brotli: It is similar in speed with deflate but offers more dense compression.
-brotli:
-brotli: Homepage: https://github.com/google/brotli/
-brotli:
diff --git a/deps/cracklib/.url b/deps/cracklib/.url
deleted file mode 100644
index 257cdea..0000000
--- a/deps/cracklib/.url
+++ /dev/null
@@ -1,2 +0,0 @@
-https://github.com/cracklib/cracklib/releases/download/v2.9.7/cracklib-2.9.7.tar.bz2
-https://github.com/cracklib/cracklib/releases/download/v2.9.7/cracklib-words-2.9.7.bz2
diff --git a/deps/cracklib/cracklib-words-2.9.7.bz2 b/deps/cracklib/cracklib-words-2.9.7.bz2
deleted file mode 100644
index b29dbf1..0000000
--- a/deps/cracklib/cracklib-words-2.9.7.bz2
+++ /dev/null
Binary files differ
diff --git a/deps/cracklib/cracklib.SlackBuild b/deps/cracklib/cracklib.SlackBuild
deleted file mode 100755
index f1825a7..0000000
--- a/deps/cracklib/cracklib.SlackBuild
+++ /dev/null
@@ -1,135 +0,0 @@
-#!/bin/sh
-
-# Copyright 2010,2011 Vincent Batts, Vienna, VA, USA
-# Copyright 2010, 2018 Patrick J. Volkerding, Sebeka, Minnesota, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=cracklib
-VERSION=${VERSION:-2.9.7}
-BUILD=${BUILD:-1}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$( uname -m )" in
- i?86) export ARCH=i586 ;;
- arm*) export ARCH=arm ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$( uname -m ) ;;
- esac
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xf $CWD/$PKGNAM-$VERSION.tar.bz2 || exit 1
-cd $PKGNAM-$VERSION || exit 1
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \+ -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \+
-
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --sbindir=/sbin \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --mandir=/usr/man \
- --docdir=/usr/doc/$PKGNAM-$VERSION \
- --disable-static \
- --build=$ARCH-slackware-linux || exit 1
-
-make $NUMJOBS || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Don't ship .la files:
-rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
-
-mkdir -p $PKG/usr/share/cracklib
-
-# If there's a large word list in the source directory, use it.
-# Otherwise go with the bundled list.
-if [ -r $CWD/cracklib-words-$VERSION.bz2 ]; then
- bzcat $CWD/cracklib-words-$VERSION.bz2 | gzip -c > words.gz
- PATH=$(pwd)/util:$PATH \
- ./util/create-cracklib-dict \
- -o $PKG/usr/share/cracklib/pw_dict \
- dicts/cracklib-small words.gz
-else
- PATH=$(pwd)/util:$PATH \
- ./util/create-cracklib-dict \
- -o $PKG/usr/share/cracklib/pw_dict \
- dicts/cracklib-small
-fi
-
-mkdir -p $PKG/var/cache/cracklib
-( cd $PKG/var/cache/cracklib
-ln -s /usr/share/cracklib/pw_dict.pwd cracklib_dict.pwd
-ln -s /usr/share/cracklib/pw_dict.pwi cracklib_dict.pwi
-)
-
-find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- AUTHORS COPYING.LIB ChangeLog INSTALL NEWS README* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/cracklib/patches/cracklib-2.9.6-cve-2016-6318.patch b/deps/cracklib/patches/cracklib-2.9.6-cve-2016-6318.patch
deleted file mode 100644
index bc47734..0000000
--- a/deps/cracklib/patches/cracklib-2.9.6-cve-2016-6318.patch
+++ /dev/null
@@ -1,108 +0,0 @@
-From 47e5dec521ab6243c9b249dd65b93d232d90d6b1 Mon Sep 17 00:00:00 2001
-From: Jan Dittberner <jan@dittberner.info>
-Date: Thu, 25 Aug 2016 17:13:49 +0200
-Subject: [PATCH] Apply patch to fix CVE-2016-6318
-
-This patch fixes an issue with a stack-based buffer overflow whne
-parsing large GECOS field. See
-https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6318 and
-https://security-tracker.debian.org/tracker/CVE-2016-6318 for more
-information.
----
- src/NEWS | 1 +
- src/lib/fascist.c | 57 ++++++++++++++++++++++++++++++++-----------------------
- 2 files changed, 34 insertions(+), 24 deletions(-)
-
-diff --git a/src/NEWS b/src/NEWS
-index 26abeee..361a207 100644
---- a/src/NEWS
-+++ b/src/NEWS
-@@ -1,3 +1,4 @@
-+v2.9.x apply patch to fix CVE-2016-6318 Stack-based buffer overflow when parsing large GECOS field
- v2.9.6 updates to cracklib-words to add a bunch of other dictionary lists
- migration to github
- patch to add some particularly bad cases to the cracklib small dictionary (Matthew Miller)
-diff --git a/src/lib/fascist.c b/src/lib/fascist.c
-index a996509..d4deb15 100644
---- a/src/lib/fascist.c
-+++ b/src/lib/fascist.c
-@@ -502,7 +502,7 @@ FascistGecosUser(char *password, const char *user, const char *gecos)
- char gbuffer[STRINGSIZE];
- char tbuffer[STRINGSIZE];
- char *uwords[STRINGSIZE];
-- char longbuffer[STRINGSIZE * 2];
-+ char longbuffer[STRINGSIZE];
-
- if (gecos == NULL)
- gecos = "";
-@@ -583,38 +583,47 @@ FascistGecosUser(char *password, const char *user, const char *gecos)
- {
- for (i = 0; i < j; i++)
- {
-- strcpy(longbuffer, uwords[i]);
-- strcat(longbuffer, uwords[j]);
--
-- if (GTry(longbuffer, password))
-+ if (strlen(uwords[i]) + strlen(uwords[j]) < STRINGSIZE)
- {
-- return _("it is derived from your password entry");
-- }
-+ strcpy(longbuffer, uwords[i]);
-+ strcat(longbuffer, uwords[j]);
-
-- strcpy(longbuffer, uwords[j]);
-- strcat(longbuffer, uwords[i]);
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it is derived from your password entry");
-+ }
-
-- if (GTry(longbuffer, password))
-- {
-- return _("it's derived from your password entry");
-- }
-+ strcpy(longbuffer, uwords[j]);
-+ strcat(longbuffer, uwords[i]);
-
-- longbuffer[0] = uwords[i][0];
-- longbuffer[1] = '\0';
-- strcat(longbuffer, uwords[j]);
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it's derived from your password entry");
-+ }
-+ }
-
-- if (GTry(longbuffer, password))
-+ if (strlen(uwords[j]) < STRINGSIZE - 1)
- {
-- return _("it is derivable from your password entry");
-+ longbuffer[0] = uwords[i][0];
-+ longbuffer[1] = '\0';
-+ strcat(longbuffer, uwords[j]);
-+
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it is derivable from your password entry");
-+ }
- }
-
-- longbuffer[0] = uwords[j][0];
-- longbuffer[1] = '\0';
-- strcat(longbuffer, uwords[i]);
--
-- if (GTry(longbuffer, password))
-+ if (strlen(uwords[i]) < STRINGSIZE - 1)
- {
-- return _("it's derivable from your password entry");
-+ longbuffer[0] = uwords[j][0];
-+ longbuffer[1] = '\0';
-+ strcat(longbuffer, uwords[i]);
-+
-+ if (GTry(longbuffer, password))
-+ {
-+ return _("it's derivable from your password entry");
-+ }
- }
- }
- }
diff --git a/deps/cracklib/slack-desc b/deps/cracklib/slack-desc
deleted file mode 100644
index 0f475fb..0000000
--- a/deps/cracklib/slack-desc
+++ /dev/null
@@ -1,20 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-cracklib: cracklib (password crack library)
-cracklib:
-cracklib: CrackLib is a library allowing a "passwd"-like program to filter out
-cracklib: passwords that are considered easy to crack by brute-force.
-cracklib: Cracklib uses dictionary lists of easy to guess passwords.
-cracklib:
-cracklib:
-cracklib:
-cracklib:
-cracklib: See also: https://github.com/cracklib/cracklib
-cracklib:
-
diff --git a/deps/cryfs/cryfs.SlackBuild b/deps/cryfs/cryfs.SlackBuild
index cfe9f78..a7a2463 100755
--- a/deps/cryfs/cryfs.SlackBuild
+++ b/deps/cryfs/cryfs.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2018, 2019 Eric Hameleers, Eindhoven, NL
+# Copyright 2018, 2019, 2020 Eric Hameleers, Eindhoven, NL
# Copyright 2018 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
@@ -28,7 +28,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=cryfs
VERSION=${VERSION:-0.10.2}
-BUILD=${BUILD:-2}
+BUILD=${BUILD:-3}
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
diff --git a/deps/dbus/dbus-1.12.x-allow_root_globally.diff b/deps/dbus/dbus-1.12.x-allow_root_globally.diff
new file mode 100644
index 0000000..2ff5a53
--- /dev/null
+++ b/deps/dbus/dbus-1.12.x-allow_root_globally.diff
@@ -0,0 +1,18 @@
+diff -Nur dbus-1.12.0.orig/bus/system.conf.in dbus-1.12.0/bus/system.conf.in
+--- dbus-1.12.0.orig/bus/system.conf.in 2017-10-30 07:26:18.000000000 -0500
++++ dbus-1.12.0/bus/system.conf.in 2017-10-31 00:17:34.989634085 -0500
+@@ -125,6 +125,14 @@
+ <!-- <limit name="max_match_rules_per_connection">512</limit> -->
+ <!-- <limit name="max_replies_per_connection">128</limit> -->
+
++ <!-- Allow root to do anything over the messagebus.
++ Don't whine about "security" - anyone with root privileges
++ can edit this file anyway, so -ENOHOLE here. -->
++ <policy user="root">
++ <allow send_destination="*"/>
++ <allow send_interface="*"/>
++ </policy>
++
+ <!-- Config files are placed here that among other things, punch
+ holes in the above policy for specific services. -->
+ <includedir>system.d</includedir>
diff --git a/deps/dbus/dbus-enable-elogind.patch b/deps/dbus/dbus-enable-elogind.patch
new file mode 100644
index 0000000..5cb5d64
--- /dev/null
+++ b/deps/dbus/dbus-enable-elogind.patch
@@ -0,0 +1,73 @@
+--- a/dbus/dbus-userdb-util.c 2015-09-30 16:48:40.000000000 +0200
++++ b/dbus/dbus-userdb-util.c 2016-11-03 11:09:42.550520587 +0100
+@@ -32,6 +32,9 @@
+ #if HAVE_SYSTEMD
+ #include <systemd/sd-login.h>
+ #endif
++#if HAVE_ELOGIND
++#include <elogind/sd-login.h>
++#endif
+
+ /**
+ * @addtogroup DBusInternalsUtils
+@@ -54,7 +57,7 @@
+ const DBusUserInfo *info;
+ dbus_bool_t result = FALSE;
+
+-#ifdef HAVE_SYSTEMD
++#if defined(HAVE_SYSTEMD) || defined(HAVE_ELOGIND)
+ /* check if we have logind */
+ if (access ("/run/systemd/seats/", F_OK) >= 0)
+ {
+--- a/configure.ac 2016-11-03 11:13:58.286528265 +0100
++++ b/configure.ac 2016-11-03 11:22:11.210543063 +0100
+@@ -185,6 +185,7 @@
+ AC_ARG_ENABLE(kqueue, AS_HELP_STRING([--enable-kqueue],[build with kqueue support]),enable_kqueue=$enableval,enable_kqueue=auto)
+ AC_ARG_ENABLE(console-owner-file, AS_HELP_STRING([--enable-console-owner-file],[enable console owner file]),enable_console_owner_file=$enableval,enable_console_owner_file=auto)
+ AC_ARG_ENABLE(launchd, AS_HELP_STRING([--enable-launchd],[build with launchd auto-launch support]),enable_launchd=$enableval,enable_launchd=auto)
++AC_ARG_ENABLE(elogind, AS_HELP_STRING([--enable-elogind],[build with elogind user seat support]),enable_elogind=$enableval,enable_elogind=auto)
+ AC_ARG_ENABLE(systemd, AS_HELP_STRING([--enable-systemd],[build with systemd at_console support]),enable_systemd=$enableval,enable_systemd=auto)
+
+ AC_ARG_WITH(init-scripts, AS_HELP_STRING([--with-init-scripts=[redhat]],[Style of init scripts to install]))
+@@ -1184,6 +1185,24 @@
+
+ AM_CONDITIONAL(HAVE_CONSOLE_OWNER_FILE, test x$have_console_owner_file = xyes)
+
++dnl elogind detection
++if test x$enable_elogind = xno ; then
++ have_elogind=no;
++else
++ PKG_CHECK_MODULES([ELOGIND],
++ [libelogind >= 209],
++ [have_elogind=yes],
++ [have_elogind=no])
++fi
++
++if test x$have_elogind = xyes; then
++ AC_DEFINE(HAVE_ELOGIND,1,[Have elogind])
++fi
++
++if test x$enable_elogind = xyes -a x$have_elogind != xyes ; then
++ AC_MSG_ERROR([Explicitly requested elogind support, but libelogind not found])
++fi
++
+ dnl systemd detection
+ if test x$enable_systemd = xno ; then
+ have_systemd=no;
+@@ -1290,7 +1309,7 @@
+ fi
+
+ #### Set up final flags
+-LIBDBUS_LIBS="$THREAD_LIBS $NETWORK_libs $SYSTEMD_LIBS"
++LIBDBUS_LIBS="$THREAD_LIBS $NETWORK_libs $SYSTEMD_LIBS $ELOGIND_LIBS"
+ AC_SUBST([LIBDBUS_LIBS])
+
+ ### X11 detection
+@@ -1949,6 +1968,7 @@
+ Building AppArmor support: ${have_apparmor}
+ Building inotify support: ${have_inotify}
+ Building kqueue support: ${have_kqueue}
++ Building elogind support: ${have_elogind}
+ Building systemd support: ${have_systemd}
+ Building X11 code: ${have_x11}
+ Building Doxygen docs: ${enable_doxygen_docs}
diff --git a/deps/gpgme/gpgme.SlackBuild b/deps/dbus/dbus.SlackBuild
index 4d72555..eb6364e 100755
--- a/deps/gpgme/gpgme.SlackBuild
+++ b/deps/dbus/dbus.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/bash
-# Copyright 2006-2009 Robby Workman, Northport, AL, USA
-# Copyright 2007, 2008, 2009, 2010, 2016, 2017, 2018, 2019 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2007-2010 Robby Workman, Northport, Alabama, USA
+# Copyright 2007-2018 Patrick Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -12,7 +12,7 @@
#
# 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
+# 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;
@@ -21,28 +21,25 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-# Modified 2017, 2018, 2019 by Eric Hameleers <alien@slackware.com>
+# Modified 2020 by Eric Hameleers to add support for elogind.
-cd $(dirname $0) ; CWD=$(pwd)
-PKGNAM=gpgme
-VERSION=${VERSION:-1.13.1}
-BUILD=${BUILD:-2}
+cd $(dirname $0) ; CWD=$(pwd)
-NUMJOBS=${NUMJOBS:-"-j$(nproc)"}
+PKGNAM=dbus
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | cut -d - -f 2 | rev | cut -f 3- -d . | rev)}
+BUILD=${BUILD:-1}
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
+NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
+ case "$( uname -m )" in
+ i?86) export ARCH=i586 ;;
+ arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
+ *) export ARCH=$( uname -m ) ;;
esac
- export ARCH
fi
# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
@@ -52,6 +49,10 @@ if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
exit 0
fi
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
@@ -66,39 +67,48 @@ else
LIBDIRSUFFIX=""
fi
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-rm -rf $PKG
+rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1
+tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
cd $PKGNAM-$VERSION || exit 1
-
chown -R root:root .
find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \+ -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \+
+
+cat $CWD/dbus-1.12.x-allow_root_globally.diff | patch -p1 --verbose || exit 1
+cat $CWD/dbus-enable-elogind.patch | patch -p1 --verbose || exit 1
+NOCONFIGURE=1 ./autogen.sh || exit 1
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
+ --localstatedir=/var \
+ --mandir=/usr/man \
--infodir=/usr/info \
- --docdir=/usr/doc/gpgme-$VERSION \
- --disable-gpgsm-test \
- --build=$TARGET \
- --host=$TARGET \
- || exit 1
- # Leave this out, then it will enable all bindings (also python 2 and 3):
- #--enable-languages="cl cpp $MYPY qt" \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --disable-doxygen-docs \
+ --disable-apparmor \
+ --disable-selinux \
+ --enable-shared=yes \
+ --enable-static=no \
+ --enable-inotify \
+ --enable-user-session \
+ --enable-x11-autolaunch \
+ --enable-elogind \
+ --disable-systemd \
+ --without-systemdsystemunitdir \
+ --with-system-pid-file=/var/run/dbus/dbus.pid \
+ --with-system-socket=/var/run/dbus/system_bus_socket \
+ --with-console-auth-dir=/var/run/console \
+ --build=$ARCH-slackware-linux || exit 1
make $NUMJOBS || make || exit 1
make install DESTDIR=$PKG || exit 1
@@ -109,13 +119,35 @@ rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-rm $PKG/usr/info/dir
-gzip -9 $PKG/usr/info/*
+# Compress and link manpages, if any:
+if [ -d $PKG/usr/man ]; then
+ ( cd $PKG/usr/man
+ for manpagedir in $(find . -type d -name "man*") ; do
+ ( cd $manpagedir
+ for eachpage in $( find . -type l -maxdepth 1) ; do
+ ln -s $( readlink $eachpage ).gz $eachpage.gz
+ rm $eachpage
+ done
+ gzip -9 *.?
+ )
+ done
+ )
+fi
+
+# Install a custom init script for dbus - the included one is not good for us
+mkdir -p $PKG/etc/rc.d
+zcat $CWD/rc.messagebus.gz > $PKG/etc/rc.d/rc.messagebus.new
+chmod 0755 $PKG/etc/rc.d/rc.messagebus.new
+
+# Fix some directory ownership
+chown messagebus $PKG/var/lib/dbus
+# Add documentation
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
- AUTHORS COPYING* INSTALL NEWS README* THANKS TODO VERSION \
+ AUTHORS COPYING* HACKING INSTALL NEWS README* doc/*.{txt,html,dtd} \
$PKG/usr/doc/$PKGNAM-$VERSION
+find $PKG/usr/doc/$PKGNAM-$VERSION -type f -exec chmod 0644 {} \+
# If there's a ChangeLog, installing at least part of the recent history
# is useful, but don't let it get totally out of control:
@@ -127,6 +159,7 @@ fi
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
+zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
diff --git a/deps/dbus/dbus.url b/deps/dbus/dbus.url
new file mode 100644
index 0000000..ab5a193
--- /dev/null
+++ b/deps/dbus/dbus.url
@@ -0,0 +1 @@
+http://dbus.freedesktop.org/releases/dbus/
diff --git a/deps/dbus/doinst.sh.gz b/deps/dbus/doinst.sh.gz
new file mode 100644
index 0000000..c116f02
--- /dev/null
+++ b/deps/dbus/doinst.sh.gz
Binary files differ
diff --git a/deps/dbus/rc.messagebus.gz b/deps/dbus/rc.messagebus.gz
new file mode 100644
index 0000000..6c002bb
--- /dev/null
+++ b/deps/dbus/rc.messagebus.gz
Binary files differ
diff --git a/deps/dbus/slack-desc b/deps/dbus/slack-desc
new file mode 100644
index 0000000..524723d
--- /dev/null
+++ b/deps/dbus/slack-desc
@@ -0,0 +1,18 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+ |-----handy-ruler------------------------------------------------------|
+dbus: dbus (D-Bus message bus system)
+dbus:
+dbus: D-Bus supplies both a system daemon (for events such as "new hardware
+dbus: device added" or "printer queue changed") and a per user login
+dbus: session daemon (for general IPC needs among user applications).
+dbus: Also, the message bus is built on top of a general one-to-one message
+dbus: passing framework, which can be used by any two apps to communicate
+dbus: directly (without going through the message bus daemon).
+dbus:
+dbus: Homepage: https://dbus.freedesktop.org/
+dbus:
diff --git a/deps/dvdauthor/dvdauthor.SlackBuild b/deps/dvdauthor/dvdauthor.SlackBuild
index e8c8e04..07b7f32 100755
--- a/deps/dvdauthor/dvdauthor.SlackBuild
+++ b/deps/dvdauthor/dvdauthor.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2017, 2018, 2019 Eric Hameleers, Eindhoven, NL
+# Copyright 2017, 2018, 2019, 2020 Eric Hameleers, Eindhoven, NL
# Copyright 2017 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
@@ -26,7 +26,7 @@
PKGNAM=dvdauthor
VERSION=${VERSION:-0.7.2}
-BUILD=${BUILD:-5}
+BUILD=${BUILD:-6}
NUMJOBS=${NUMJOBS:-"-j$(nproc)"}
CWD=$(pwd)
diff --git a/deps/elogind/.url b/deps/elogind/.url
index 444f958..2fd0c45 100644
--- a/deps/elogind/.url
+++ b/deps/elogind/.url
@@ -1,2 +1 @@
-https://github.com/wingo/elogind/archive/v219.12.tar.gz
-https://github.com/wingo/elogind/archive/master.zip
+https://github.com/elogind/elogind/archive/v243.7.tar.gz
diff --git a/deps/elogind/doinst.sh b/deps/elogind/doinst.sh
index 75adb23..dc85465 100755
--- a/deps/elogind/doinst.sh
+++ b/deps/elogind/doinst.sh
@@ -26,16 +26,23 @@ preserve_perms() {
#
# Preserve permissions while moving into place:
+config etc/elogind/logind.conf.new
preserve_perms etc/rc.d/rc.elogind.new
-#
-# Update rc.local so that elogind will be functional after boot:
-if ! grep "rc.elogind" etc/rc.d/rc.local 1>/dev/null 2>/dev/null ; then
- cat <<_EOM_ >> etc/rc.d/rc.local
-
-if [ -x /etc/rc.d/rc.elogind ]; then
- # Create runtime for elogind (standalone logind extracted from systemd):
- /etc/rc.d/rc.elogind
-fi
-_EOM_
+if pgrep -f elogind-daemon | grep -q 'elogind-daemon'; then
+ echo "Reloading elogind-daemon..."
+ pkill -HUP -f elogind-daemon
fi
+
+## Now taken care of in Slackware's /etc/rc.d/rc.M:
+##
+## Update rc.local so that elogind will be functional after boot:
+#if ! grep "rc.elogind" etc/rc.d/rc.local 1>/dev/null 2>/dev/null ; then
+# cat <<_EOM_ >> etc/rc.d/rc.local
+#
+#if [ -x /etc/rc.d/rc.elogind ]; then
+# # Create runtime for elogind (standalone logind extracted from systemd):
+# /etc/rc.d/rc.elogind start
+#fi
+#_EOM_
+#fi
diff --git a/deps/elogind/elogind.SlackBuild b/deps/elogind/elogind.SlackBuild
index b9d2d70..0160852 100755
--- a/deps/elogind/elogind.SlackBuild
+++ b/deps/elogind/elogind.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
# Copyright 2016 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2016, 2017 Eric Hameleers, Eindhoven, NL
+# Copyright 2016, 2017, 2020 Eric Hameleers, Eindhoven, NL
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for
@@ -22,54 +22,52 @@
# SUCH DAMAGE.
# -----------------------------------------------------------------------------
+# Thanks to Widya Walesa for script improvements.
-PKGNAM=elogind
-VERSION=${VERSION:-219.14}
-BUILD=${BUILD:-2}
+cd $(dirname $0) ; CWD=$(pwd)
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
+PKGNAM=elogind
+VERSION=${VERSION:-243.7}
+BUILD=${BUILD:-1}
+
+# Automatically determine the architecture we're building on:
+MARCH=$( uname -m )
+if [ -z "$ARCH" ]; then
+ case "$MARCH" in
+ i?86) export ARCH=i486 ;;
+ arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) export ARCH=$MARCH ;;
+ esac
+fi
-# We do not use PAM by default:
-USE_PAM=${USE_PAM:-"NO"}
-[ "$USE_PAM" = "NO" -o "$USE_PAM" = "no" ] && DO_PAM="dis" || DO_PAM="en"
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
-if [ -e $CWD/machine.conf ]; then
- . $CWD/machine.conf ]
-elif [ -e /etc/slackbuild/machine.conf ]; then
- . /etc/slackbuild/machine.conf ]
+# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
+if [ "$ARCH" = "i486" ]; then
+ SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+elif [ "$ARCH" = "armv7hl" ]; then
+ SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "arm" ]; then
+ SLKCFLAGS="-O2 -march=armv5te"
+ LIBDIRSUFFIX=""
else
- # Automatically determine the architecture we're building on:
- MARCH=$( uname -m )
- if [ -z "$ARCH" ]; then
- case "$MARCH" in
- i?86) export ARCH=i486 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$MARCH ;;
- esac
- fi
- # Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
- if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
- LIBDIRSUFFIX=""
- elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
- elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
- elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O3 -march=armv7-a -mfpu=vfpv3-d16"
- LIBDIRSUFFIX=""
- elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
- else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
- fi
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
fi
case "$ARCH" in
@@ -77,6 +75,9 @@ case "$ARCH" in
*) TARGET=$ARCH-slackware-linux ;;
esac
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
@@ -84,16 +85,14 @@ rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.gz || exit 1
cd $PKGNAM-$VERSION || exit 1
+# Our nobody user has UIDNumber 99, not 65534:
+sed -e "s/65534/99/g" -i $(grep -lr 65534 .)
+
# Launch elogind when called via DBus and make sure its rundir exists
# (in Slackware, /run is mounted as a tmpfs):
-sed -i src/login/org.freedesktop.login1.service \
- -e "s,/bin/false,/bin/bash -c \"[[ ! -d /run/systemd ]] \&\& mkdir /run/systemd;/usr/libexec/elogind/elogind\","
-
-# Apply Gentoo patches:
-#cat $CWD/patches/elogind-219.12-session.patch | patch -p1 --verbose || exit 1
-cat $CWD/patches/elogind-219.12-runtime.patch | patch -p1 --verbose || exit 1
-cat $CWD/patches/elogind-lrt.patch | patch -p1 --verbose || exit 1
-cat $CWD/patches/elogind-docs.patch | patch -p1 --verbose || exit 1
+sed -i src/login/org.freedesktop.login1.service.in \
+ -e "s,/bin/false,/lib${LIBDIRSUFFIX}/elogind,"
+
# Merge a pull request for an upstream fix:
cat $CWD/patches/elogind-polkit.patch | patch -p1 --verbose || exit 1
@@ -105,31 +104,54 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
+# Thanks to Widya Walesa:
+# Slackware still using cgroup v1 or legacy mode. Check the outcome of:
+# [ $(stat -fc %T /sys/fs/cgroup/) = "cgroup2fs" ] && echo "unified" \
+# || ( [ -e /sys/fs/cgroup/unified/ ] && echo "hybrid" || echo "legacy")
+
# Configure:
-autoreconf -vif
-intltoolize
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --libexecdir=/usr/libexec \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --mandir=/usr/man \
- --docdir=/usr/doc/$PKGNAM-$VERSION \
- --disable-seccomp \
- --disable-selinux \
- --disable-apparmor \
- --${DO_PAM}able-pam \
- --disable-smack \
- --disable-tests \
- --enable-split-usr \
- --build=$TARGET
+export CFLAGS="$SLKCFLAGS"
+export CXXFLAGS="$SLKCFLAGS"
+meson \
+ --buildtype release \
+ --prefix /usr \
+ --libdir /usr/lib${LIBDIRSUFFIX} \
+ -Drootlibdir="/lib${LIBDIRSUFFIX}" \
+ -Drootlibexecdir="/lib${LIBDIRSUFFIX}/elogind" \
+ -Dudevrulesdir="/etc/udev/rules.d" \
+ -Ddocdir="/usr/doc/$PKGNAM-$VERSION" \
+ -Dhtmldir="/usr/doc/$PKGNAM-$VERSION/html" \
+ -Dmandir="/usr/man" \
+ -Dman=true \
+ -Dhtml=false \
+ -Dbashcompletiondir="/usr/share/bash-completion/completions" \
+ -Dnobody-group=nogroup \
+ -Dpam=true \
+ -Dpamlibdir="/lib${LIBDIRSUFFIX}/security" \
+ -Dpamconfdir="/etc/pam.d" \
+ -Dacl=true \
+ -Dsmack=false \
+ -Dutmp=true \
+ -Ddefault-hierarchy=legacy \
+ -Dcgroup-controller=elogind \
+ -Dhalt-path=/sbin/halt \
+ -Dpoweroff-path=/sbin/poweroff \
+ -Dreboot-path=/sbin/reboot \
+ -Ddefault-kill-user-processes=false \
+ build_elogind \
+ || exit 1
# Build and install:
-make || exit 1
-make install DESTDIR=$PKG || exit 1
+ninja -C build_elogind || exit 1
+DESTDIR=$PKG ninja install -C build_elogind || exit 1
+
+# Create symlinks for elogind binaries to /usr/bin/:
+mkdir -p $PKG/usr/bin
+ln -sf /bin/elogind-inhibit $PKG/usr/bin/elogind-inhibit
+ln -sf /bin/loginctl $PKG/usr/bin/loginctl
+
+# Make sure we do not overwrite the user's customizations:
+mv -i $PKG/etc/elogind/logind.conf{,.new}
# Strip binaries:
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | \
@@ -150,14 +172,18 @@ if [ -d $PKG/usr/man ]; then
)
fi
-# Add a rc script; Slackware does not support this out of the box:
+# Add a rc script; Slackware does not yet support this out of the box.
+# Preferably the rc code will get added right before starting rc.messagebus:
mkdir -p $PKG/etc/rc.d
-install -m 0755 $CWD/rc.elogind $PKG/etc/rc.d/rc.elogind.new
+cat $CWD/rc.elogind \
+ | sed -e "s/@LIBDIRSUFFIX@/${LIBDIRSUFFIX}/g" \
+ > $PKG/etc/rc.d/rc.elogind.new
+chmod 755 $PKG/etc/rc.d/rc.elogind.new
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
- CODING_STYLE LICENSE* NEWS README TODO \
+ LICENSE* README* TODO \
$PKG/usr/doc/$PKGNAM-$VERSION
# Add a description and post-install script:
diff --git a/deps/elogind/rc.elogind b/deps/elogind/rc.elogind
index b1adcaa..e5e7324 100644
--- a/deps/elogind/rc.elogind
+++ b/deps/elogind/rc.elogind
@@ -1,9 +1,12 @@
#
# /etc/rc.d/rc.elogind
# Initializes the elogind service on Slackware.
+# There is no need to explicitly start a daemon; this will be taken
+# care of automatically by dbus when that starts.
#
# Author:
# Eric Hameleers <alien@slackware.com> 2016
+# Widya Walesa 2020
#
# Description:
# We use elogind (standalone subset extracted from systemd) instead of
@@ -13,17 +16,51 @@
# Slackware has a tmpfs mounted on /run (see rc.S).
#
-# The systemd/elogind state directory:
-mkdir -p /run/systemd
-chmod 0755 /run/systemd
+start_elogind() {
+ if [ -x /lib@LIBDIRSUFFIX@/elogind/elogind ]; then
+ if [ ! -d /run/user ]; then
+ mkdir -p /run/user
+ fi
+ if [ ! -d /run/systemd ]; then
+ mkdir -p /run/elogind /sys/fs/cgroup/elogind
+ ( cd /run; rm -rf systemd; ln -sf elogind systemd; )
+ ( cd /sys/fs/cgroup; rm -rf systemd; ln -sf elogind systemd; )
+ fi
+ if pgrep -l -F /run/elogind.pid 2>/dev/null | grep -q elogind; then
+ echo "Elogind is already running"
+ else
+ echo -n "Starting elogind: "
+ rm -f /run/elogind.pid
+ /lib@LIBDIRSUFFIX@/elogind/elogind --daemon
+ echo "/lib@LIBDIRSUFFIX@/elogind/elogind --daemon"
+ fi
+ fi
+}
-# Toplevel directory for runtime user session data:
-mkdir -p /run/user
-chmod 1777 /run/user
+stop_elogind() {
+ if pgrep -l -F /run/elogind.pid 2>/dev/null | grep -q elogind; then
+ echo -n "Stopping elogind: "
+ pkill -F /run/elogind.pid 2>/dev/null
+ echo "DONE"
+ else
+ echo "Elogind is not running"
+ fi
+}
+
+case "$1" in
+ start)
+ start_elogind
+ ;;
+ stop)
+ stop_elogind
+ ;;
+ restart)
+ stop_elogind
+ sleep 1
+ start_elogind
+ ;;
+ *)
+ echo "Usage: $0 start|stop|restart"
+esac
-# Elogind uses cgroups to organize processes like mapping PIDs to sessions.
-# Elogind's cgroup hierarchy isn't associated with any resource controller
-# ("subsystem") so we must create it manually:
-mkdir -p /sys/fs/cgroup/elogind
-mount -t cgroup -o none,name=elogind elogind /sys/fs/cgroup/elogind
diff --git a/deps/espeak-ng/.deps b/deps/espeak-ng/.deps
deleted file mode 100644
index 60c2f98..0000000
--- a/deps/espeak-ng/.deps
+++ /dev/null
@@ -1 +0,0 @@
-pcaudiolib
diff --git a/deps/espeak-ng/.url b/deps/espeak-ng/.url
deleted file mode 100644
index a1127ef..0000000
--- a/deps/espeak-ng/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/espeak-ng/espeak-ng/releases/download/1.49.2/espeak-ng-1.49.2.tar.gz
diff --git a/deps/espeak-ng/espeak-ng.SlackBuild b/deps/espeak-ng/espeak-ng.SlackBuild
deleted file mode 100755
index 5a530da..0000000
--- a/deps/espeak-ng/espeak-ng.SlackBuild
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/bin/sh
-
-# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=espeak-ng
-VERSION=${VERSION:-1.49.2}
-BUILD=${BUILD:-1}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "${PKGNAM}-${VERSION}-${ARCH}-${BUILD}.txz"
- exit 0
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.gz || exit 1
-cd $PKGNAM-$VERSION || exit 1
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-[ ! -x configure ] && ./autogen.sh
-
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --sysconfdir=/etc \
- --disable-static \
- --build=$TARGET || exit 1
-
-make src/espeak-ng src/speak-ng || exit 1
-make -j1 || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- AUTHORS CHANGELOG.md COPYING* ChangeLog README.md \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-# Strip binaries (if any):
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/espeak-ng/slack-desc b/deps/espeak-ng/slack-desc
deleted file mode 100644
index a4308ab..0000000
--- a/deps/espeak-ng/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-espeak-ng: espeak-ng (multi-lingual software speech synthesizer)
-espeak-ng:
-espeak-ng: espeak-ng is a multi-lingual software speech synthesizer.
-espeak-ng: It is a fork of the unmaintained espeak code.
-espeak-ng:
-espeak-ng:
-espeak-ng:
-espeak-ng:
-espeak-ng:
-espeak-ng: Homepage: https://github.com/espeak-ng/espeak-ng
-espeak-ng:
diff --git a/deps/flite/.url b/deps/flite/.url
deleted file mode 100644
index bf3e1c8..0000000
--- a/deps/flite/.url
+++ /dev/null
@@ -1 +0,0 @@
-http://festvox.org/flite/packed/flite-2.1/flite-2.1-release.tar.bz2
diff --git a/deps/flite/flite.SlackBuild b/deps/flite/flite.SlackBuild
deleted file mode 100755
index aba913e..0000000
--- a/deps/flite/flite.SlackBuild
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/bin/sh
-
-# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=flite
-VERSION=${VERSION:-2.1}
-BUILD=${BUILD:-1}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "${PKGNAM}-${VERSION}-${ARCH}-${BUILD}.txz"
- exit 0
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $PKGNAM-$VERSION-release
-tar xvf $CWD/$PKGNAM-$VERSION-release.tar.?z* || exit 1
-cd $PKGNAM-$VERSION-release || exit 1
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
- -o -perm 511 \) -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
- -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-
-[ ! -x configure ] && ./autogen.sh
-
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --sysconfdir=/etc \
- --with-audio=alsa \
- --build=$TARGET || exit 1
-
-make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- ACKNOWLEDGEMENTS COPYING README* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-# Strip binaries (if any):
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/flite/slack-desc b/deps/flite/slack-desc
deleted file mode 100644
index e2990b7..0000000
--- a/deps/flite/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-flite: flite (lightweight speech synthesis engine)
-flite:
-flite: Flite (or Festival Lite) is a small and fast run-time synthesis engine
-flite: designed for embedded systems and servers.
-flite: Flite is able to load extra voice files at runtime, in its own
-flite: .flitevox format and installed in /usr/share/flite/,
-flite:
-flite:
-flite:
-flite: Homepage: https://www.festvox.org/flite/
-flite:
diff --git a/deps/gpgme/.url b/deps/gpgme/.url
deleted file mode 100644
index 9497cc0..0000000
--- a/deps/gpgme/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://www.gnupg.org/ftp/gcrypt/gpgme/gpgme-1.13.1.tar.bz2
diff --git a/deps/gpgme/patches/gpgme-1.8.0_libsuffix.patch b/deps/gpgme/patches/gpgme-1.8.0_libsuffix.patch
deleted file mode 100644
index a62cc55..0000000
--- a/deps/gpgme/patches/gpgme-1.8.0_libsuffix.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Heiko Becker <heirecka@exherbo.org>
-Date: Wed, 16 Nov 2016 22:09:45 +0000 (+0100)
-Subject: Remove a forgotten instance of @libsuffix@
-X-Git-Url: http://git.gnupg.org/cgi-bin/gitweb.cgi?p=gpgme.git;a=commitdiff_plain;h=572c1aac107125ce62230251713349348373db5a
-
-Remove a forgotten instance of @libsuffix@
-
-* lang/cpp/src/GpgmeppConfig.cmake.in.in: Remove a forgotten
-instance of @libsuffix@.
---
-
-b2c07bd47bd608afa5cc819b60a7b5bb8c9dd96a removed @libsuffix@ from
-cmake config files, but missed one instance.
-
-Signed-off-by: Heiko Becker <heirecka@exherbo.org>
----
-
-diff --git a/lang/cpp/src/GpgmeppConfig.cmake.in.in b/lang/cpp/src/GpgmeppConfig.cmake.in.in
-index 928d19f..cbe9713 100644
---- a/lang/cpp/src/GpgmeppConfig.cmake.in.in
-+++ b/lang/cpp/src/GpgmeppConfig.cmake.in.in
-@@ -63,7 +63,7 @@ add_library(Gpgmepp SHARED IMPORTED)
-
- set_target_properties(Gpgmepp PROPERTIES
- INTERFACE_INCLUDE_DIRECTORIES "@resolved_includedir@/gpgme++;@resolved_includedir@"
-- INTERFACE_LINK_LIBRARIES "pthread;@resolved_libdir@/libgpgme@libsuffix@;@LIBASSUAN_LIBS@"
-+ INTERFACE_LINK_LIBRARIES "pthread;@resolved_libdir@/libgpgme.so;@LIBASSUAN_LIBS@"
- IMPORTED_LOCATION "@resolved_libdir@/libgpgmepp.so"
- )
-
diff --git a/deps/gpgme/slack-desc b/deps/gpgme/slack-desc
deleted file mode 100644
index 3436b08..0000000
--- a/deps/gpgme/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-gpgme: gpgme (GnuPG Made Easy)
-gpgme:
-gpgme: GPGME (GnuPG Made Easy) is a C language library that allows to add
-gpgme: support for cryptography to a program. It is designed to make access
-gpgme: to public key crypto engines like GnuPG or GpgSM easier for
-gpgme: applications. GPGME provides a high-level crypto API for encryption,
-gpgme: decryption, signing, signature verification and key management.
-gpgme:
-gpgme: GPGME uses GnuPG and GpgSM as its backends to support OpenPGP and the
-gpgme: Cryptographic Message Syntax (CMS).
-gpgme:
diff --git a/deps/grantlee-qt4/grantlee-qt4.SlackBuild b/deps/grantlee-qt4/grantlee-qt4.SlackBuild
index e8107c8..33ac441 100755
--- a/deps/grantlee-qt4/grantlee-qt4.SlackBuild
+++ b/deps/grantlee-qt4/grantlee-qt4.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
# Copyright 2010, 2011, 2015 Eric Hameleers, Eindhoven, NL
-# Copyright 2010, 2011, 2015 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2010, 2011, 2015, 2018 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -22,18 +22,20 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+cd $(dirname $0) ; CWD=$(pwd)
+
PKGNAM=grantlee-qt4
SRCNAM=grantlee
VERSION=${VERSION:-0.5.1}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
-NUMJOBS=${NUMJOBS:--j7}
+NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
if [ -z "$ARCH" ]; then
case "$MARCH" in
- i?86) export ARCH=i486 ;;
+ i?86) export ARCH=i586 ;;
armv7hl) export ARCH=$MARCH ;;
arm*) export ARCH=arm ;;
# Unless $ARCH is already set, use uname -m for all other archs:
@@ -41,8 +43,16 @@ if [ -z "$ARCH" ]; then
esac
fi
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "s390" ]; then
SLKCFLAGS="-O2"
@@ -71,9 +81,9 @@ cd $SRCNAM-$VERSION || exit 1
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
+ -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
+ -exec chmod 644 {} \+
# Make sure this package does not clash with Qt5 based grantlee:
sed -i CMakeLists.txt \
diff --git a/deps/grantlee/.url b/deps/grantlee/.url
index 09d105e..43a9f6f 100644
--- a/deps/grantlee/.url
+++ b/deps/grantlee/.url
@@ -1,2 +1,2 @@
-http://downloads.grantlee.org/grantlee-5.1.0.tar.gz
+http://downloads.grantlee.org/grantlee-5.2.0.tar.gz
diff --git a/deps/grantlee/grantlee.SlackBuild b/deps/grantlee/grantlee.SlackBuild
index a9e437e..e4afb09 100755
--- a/deps/grantlee/grantlee.SlackBuild
+++ b/deps/grantlee/grantlee.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2015, 2016, 2017 Eric Hameleers, Eindhoven, NL
+# Copyright 2015, 2016, 2017, 2020 Eric Hameleers, Eindhoven, NL
# Copyright 2015 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
@@ -25,10 +25,10 @@
# Used to be called 'grantlee-qt5'
PKGNAM=grantlee
SRCNAM=grantlee
-VERSION=${VERSION:-5.1.0}
-BUILD=${BUILD:-3}
+VERSION=${VERSION:-5.2.0}
+BUILD=${BUILD:-1}
-NUMJOBS=${NUMJOBS:--j7}
+NUMJOBS=${NUMJOBS:-$(nproc)}
# Automatically determine the architecture we're building on:
MARCH=$( uname -m )
@@ -79,10 +79,6 @@ find . \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
-## Don't make it clash with grantlee 0.x:
-#sed -i CMakeLists.txt \
-# -e 's|INCLUDE_INSTALL_DIR include|INCLUDE_INSTALL_DIR include/grantlee-qt5|'
-
mkdir -p build
cd build
QTDIR=/usr/lib${LIBDIRSUFFIX}/qt5 \
@@ -102,7 +98,7 @@ find $PKG | xargs file | grep -e "executable" -e "shared object" \
| grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a AUTHORS CHANGELOG COPYING* GOALS README \
+cp -a AUTHORS CHANGELOG COPYING* README* \
$PKG/usr/doc/$PKGNAM-$VERSION
mkdir -p $PKG/install
diff --git a/deps/hack-font-ttf/.url b/deps/hack-font-ttf/.url
deleted file mode 100644
index 0a9120a..0000000
--- a/deps/hack-font-ttf/.url
+++ /dev/null
@@ -1,4 +0,0 @@
-https://github.com/chrissimpkins/Hack/releases/download/v2.020/Hack-v2_020-ttf.tar.xz
-https://raw.githubusercontent.com/chrissimpkins/Hack/master/CHANGELOG.md
-https://raw.githubusercontent.com/chrissimpkins/Hack/master/LICENSE.md
-https://raw.githubusercontent.com/chrissimpkins/Hack/master/README.md
diff --git a/deps/hack-font-ttf/CHANGELOG.md b/deps/hack-font-ttf/CHANGELOG.md
deleted file mode 100644
index db91f4b..0000000
--- a/deps/hack-font-ttf/CHANGELOG.md
+++ /dev/null
@@ -1,743 +0,0 @@
-# Version 2.020
-
-- divided the vertical stroke in the pipe glyph (U+007C), italic and bold italic sets
-- modified U+007C hints in TrueType builds at 6, 7, 10, 11, 12, 13, 14 ppem italic set
-- modified U+007C hints in TrueType builds at 6, 7, 10, 14 ppem bold italic set
-- modified slant angle and stroke length (U+005C), italic and bold italic sets
-- centered U+007C and U+005C, all sets
-- modified zero (U+0030) oval fill hints in regular set
-- added Powerline glyphs to the bold, italic, and bold italic sets
-- U+2502 upper terminal to 1950, lower terminal to -530, all sets
-- U+2503 upper terminal to 1950, lower terminal to -530, all sets
-- U+250C lower terminal to -530, all sets
-- U+250D lower terminal to -530, all sets
-- U+250E lower terminal to -530, all sets
-- U+250F lower terminal to -530, all sets
-- U+2510 lower terminal to -530, all sets
-- U+2511 lower terminal to -530, all sets
-- U+2512 lower terminal to -530, all sets
-- U+2513 lower terminal to -530, all sets
-- U+2514 upper terminal to 1950, all sets
-- U+2515 upper terminal to 1950, all sets
-- U+2516 upper terminal to 1950, all sets
-- U+2517 upper terminal to 1950, all sets
-- U+2518 upper terminal to 1950, all sets
-- U+2519 upper terminal to 1950, all sets
-- U+251A upper terminal to 1950, all sets
-- U+251B upper terminal to 1950, all sets
-- U+251C upper terminal to 1950, lower terminal to -530, all sets
-- U+251D upper terminal to 1950, lower terminal to -530, all sets
-- U+251E upper terminal to 1950, lower terminal to -530, all sets
-- U+251F upper terminal to 1950, lower terminal to -530, all sets
-- U+2520 upper terminal to 1950, lower terminal to -530, all sets
-- U+2521 upper terminal to 1950, lower terminal to -530, all sets
-- U+2522 upper terminal to 1950, lower terminal to -530, all sets
-- U+2523 upper terminal to 1950, lower terminal to -530, all sets
-- U+2524 upper terminal to 1950, lower terminal to -530, all sets
-- U+2525 upper terminal to 1950, lower terminal to -530, all sets
-- U+2526 upper terminal to 1950, lower terminal to -530, all sets
-- U+2527 upper terminal to 1950, lower terminal to -530, all sets
-- U+2528 upper terminal to 1950, lower terminal to -530, all sets
-- U+2529 upper terminal to 1950, lower terminal to -530, all sets
-- U+252A upper terminal to 1950, lower terminal to -530, all sets
-- U+252B upper terminal to 1950, lower terminal to -530, all sets
-- U+252C lower terminal to -530, all sets
-- U+252D lower terminal to -530, all sets
-- U+252E lower terminal to -530, all sets
-- U+252F lower terminal to -530, all sets
-- U+2530 lower terminal to -530, all sets
-- U+2531 lower terminal to -530, all sets
-- U+2532 lower terminal to -530, all sets
-- U+2533 lower terminal to -530, all sets
-- U+2534 upper terminal to 1950, all sets
-- U+2535 upper terminal to 1950, all sets
-- U+2536 upper terminal to 1950, all sets
-- U+2537 upper terminal to 1950, all sets
-- U+2538 upper terminal to 1950, all sets
-- U+2539 upper terminal to 1950, all sets
-- U+253A upper terminal to 1950, all sets
-- U+253B upper terminal to 1950, all sets
-- U+252C upper terminal to 1950, lower terminal to -530, all sets
-- U+252D upper terminal to 1950, lower terminal to -530, all sets
-- U+253E upper terminal to 1950, lower terminal to -530, all sets
-- U+253F upper terminal to 1950, lower terminal to -530, all sets
-- U+2540 upper terminal to 1950, lower terminal to -530, all sets
-- U+2541 upper terminal to 1950, lower terminal to -530, all sets
-- U+2542 upper terminal to 1950, lower terminal to -530, all sets
-- U+2543 upper terminal to 1950, lower terminal to -530, all sets
-- U+2544 upper terminal to 1950, lower terminal to -530, all sets
-- U+2545 upper terminal to 1950, lower terminal to -530, all sets
-- U+2546 upper terminal to 1950, lower terminal to -530, all sets
-- U+2547 upper terminal to 1950, lower terminal to -530, all sets
-- U+2548 upper terminal to 1950, lower terminal to -530, all sets
-- U+2549 upper terminal to 1950, lower terminal to -530, all sets
-- U+254A upper terminal to 1950, lower terminal to -530, all sets
-- U+254B upper terminal to 1950, lower terminal to -530, all sets
-- U+2551 upper terminal to 1950, lower terminal to -530, all sets
-- U+2552 lower terminal to -530, all sets
-- U+2553 lower terminals to -530, all sets
-- U+2554 lower terminals to -530, all sets
-- U+2555 lower terminal to -530, all sets
-- U+2556 lower terminals to -530, all sets
-- U+2557 lower terminals to -530, all sets
-- U+2558 upper terminal to 1950, all sets
-- U+2558 upper terminals to 1950, all sets
-- U+2559 upper terminals to 1950, all sets
-- U+255A upper terminals to 1950, all sets
-- U+255B upper terminal to 1950, all sets
-- U+255C upper terminals to 1950, all sets
-- U+255D upper terminals to 1950, all sets
-- U+255E upper terminal to 1950, lower terminal to -530, all sets
-- U+255F upper terminals to 1950, lower terminals to -530, all sets
-- U+2560 upper terminals to 1950, lower terminals to -530, all sets
-- U+2561 upper terminal to 1950, lower terminal to -530, all sets
-- U+2562 upper terminals to 1950, lower terminals to -530, all sets
-- U+2563 upper terminals to 1950, lower terminals to -530, all sets
-- U+2564 lower terminal to -530, all sets
-- U+2565 lower terminals to -530, all sets
-- U+2566 lower terminals to -530, all sets
-- U+2567 upper terminal to 1950, all sets
-- U+2568 upper terminals to 1950, all sets
-- U+2569 upper terminals to 1950, all sets
-- U+256A upper terminal to 1950, lower terminal to -530, all sets
-- U+256B upper terminals to 1950, lower terminals to -530, all sets
-- U+256C upper terminals to 1950, lower terminals to -530, all sets
-- U+256D lower terminal to -530, all sets
-- U+256E lower terminal to -530, all sets
-- U+256F upper terminal to 1950, all sets
-- U+2570 upper terminal to 1950, all sets
-- U+2571 adjusted horizontal position and length of strokes
-- U+2572 adjusted horizontal position and length of strokes
-- U+2573 adjusted horizontal position and length of strokes
-- U+2575 upper terminal to 1950, all sets
-- U+2577 lower terminal to -530, all sets
-- U+2578 horizontal alignment of superior margin of the stroke (1 unit adjustment)
-- U+2579 upper terminal to 1950, all sets
-- U+257B lower terminal to -530, all sets
-- U+257D upper terminal to 1950, lower terminal to -530, all sets
-- U+257F upper terminal to 1950, lower terminal to -530, all sets
-- updated OpenType name table field 1 0 0
-- updated OpenType name table field 3 1 1033
-- new [Windows installer](https://github.com/source-foundry/Hack-windows-installer)
-- added line spacing adjustment shell scripts
-- added font-tables.py OpenType table reporting script
-- updated dev-versioner.py OpenType table versioning script to support UTF16 big endian encoding of nameID=5, platformID=3 name table
-
-
-# Version 2.019 (release build)
-
-ttf, otf, webfont builds
-
-- removed SVG from webfont releases
-- Corrected U+2588 glyph shape in regular set (had inappropriately small width and height)
-- decreased width U+2580 all sets
-- decreased width U+2581 all sets
-- decreased width U+2582 all sets
-- decreased width U+2583 all sets
-- decreased width U+2584 all sets
-- decreased width U+2585 all sets
-- decreased width U+2586 all sets
-- decreased width U+2857 all sets
-- adjusted left sidebearing U+2589 all sets
-- adjusted left sidebearing U+258A all sets
-- adjusted left sidebearing U+258B all sets
-- adjusted left sidebearing U+258C all sets
-- adjusted left sidebearing U+258D all sets
-- adjusted left sidebearing U+258E all sets
-- adjusted left sidebearing U+258F all sets
-- adjusted right sidebearing U+2590 all sets
-- decreased width of U+2594 all sets
-- adjusted right sidebearing U+2595 all sets
-- adjusted left sidebearing U+2596 all sets
-- adjusted right sidebearing U+2597 all sets
-- adjusted left sidebearing U+2598 all sets
-- decreased width of U+2599 all sets
-- decreased width of U+259A all sets
-- decreased width of U+259B all sets
-- decreased width of U+259C all sets
-- adjusted right sidebearing U+259D all sets
-- decreased width of U+259E all sets
-- decreased width of U+259F all sets
-- increased upper terminal position to 1950 units U+2580 all sets
-- increased upper terminal position to 1950 units U+2588 all sets
-- increased upper terminal position to 1950 units U+2589 all sets
-- increased upper terminal position to 1950 units U+258A all sets
-- increased upper terminal position to 1950 units U+258B all sets
-- increased upper terminal position to 1950 units U+258C all sets
-- increased upper terminal position to 1950 units U+258D all sets
-- increased upper terminal position to 1950 units U+258E all sets
-- increased upper terminal position to 1950 units U+258F all sets
-- increased upper terminal position to 1950 units U+2590 all sets
-- increased upper terminal position to 1950 units U+2594 all sets
-- increased upper terminal position to 1950 units U+2595 all sets
-- increased upper terminal position to 1950 units U+2598 all sets
-- increased upper terminal position to 1950 units U+2599 all sets
-- increased upper terminal position to 1950 units U+259A all sets
-- increased upper terminal position to 1950 units U+259B all sets
-- increased upper terminal position to 1950 units U+259C all sets
-- increased upper terminal position to 1950 units U+259D all sets
-- increased upper terminal position to 1950 units U+259E all sets
-- increased upper terminal position to 1950 units U+259F all sets
-- reverted Cyrillic lower case es glyph (U+0441) to Latin lower case c shape
-- reverted Cyrillic upper case es glyph (U+0421) to Latin upper case C shape
-
-
-# Version 2.018 (release build)
-
-ttf, otf, webfont builds
-
-Patch for missing glyphs in regular set:
-
-- added U+016C (upper case U breve), regular set - Issue #21
-- added U+016D (lower case u breve), regular set - Issue #21
-
-
-# Version 2.017 (release build)
-
-ttf, otf, webfont builds
-
-Changes vs. release v2.015:
-
-- increased vertical position of the tilde (U+007E) to improve alignment with other glyphs - Issue #23
-- increased width of the vertical stroke on the dollar symbol (U+0024) - Issue #92
-- modified Cyrillic upper case C (U+0421) to differentiate from Latin C - Issues #22 & #29
-- modified Cyrillic lower case c (U+0441) to differentiate from Latin c - Issues #22 & #29
-- modified upper case theta (U+0398) to differentiate from lower case theta - Issue #36
-- added U+0132 (IJ) glyph - Issue #52
-- added U+0133 (ij) glyph - Issue #52
-- added U+013F (upper case L dot) glyph - Issue #52
-- added U+0140 (lower case l dot) glyph - Issue #52
-- added U+0162 (upper case T cedilla) glyph - Issue #52
-- added U+0163 (lower case t cedilla) glyph - Issue #52
-- added U+0138 (kgreenlandic) glyph - Issue #52
-- added U+266A (musical note) glyph - Issue #52
-- added U+0149 (lower case n apostrophe) - Issue #52
-- added U+1EF9 (lower case y tilde) glyph - Issue #102
-- added U+1EF8 (upper case Y tilde) glyph - Issue #102
-- added U+1EBD (lower case e tilde) glyph - Issue #102
-- added U+1EBC (upper case E tilde) glyph - Issue #102
-- added U+2116 (numero) glyph - Issues #22 & #114
-- added U+01A4 (p hook) glyph - Issue #105
-- added U+0108 (upper case C circumflex) - Issue #21
-- added U+0109 (lower case c circumflex) - Issue #21
-- added U+011C (upper case G circumflex) - Issue #21
-- added U+011D (lower case g circumflex) - Issue #21
-- added U+0124 (upper case H circumflex) - Issue #21
-- added U+0125 (lower case h circumflex) - Issue #21
-- added U+0134 (upper case J circumflex) - Issue #21
-- added U+0135 (lower case j circumflex) - Issue #21
-- added U+015C (upper case S circumflex) - Issue #21
-- added U+015D (lower case s circumflex) - Issue #21
-- added U+016C (upper case U breve) - Issue #21
-- added U+016D (lower case u breve) - Issue #21
-- added U+20B7 (spesmilo) - Issue #21
-- fixed missing null glyph (U+0000) in regular, italic, bolditalic sets
-- removed duplicate CR glyph (U+000D) in all sets - Issue #149
-- updated ttfautohint to version 1.4.1 for TrueType (.ttf) build instruction sets
-
-# Version 2.016 (testing build)
-
-- increased vertical position of the tilde (U+007E) to improve alignment with other glyphs - Issue #23
-- increased width of the vertical stroke on the dollar symbol (U+0024) - Issue #92
-- modified Cyrillic upper case C (U+0421) to differentiate from Latin C - Issues #22 & #29
-- modified Cyrillic lower case c (U+0441) to differentiate from Latin c - Issues #22 & #29
-- modified upper case theta (U+0398) to differentiate from lower case theta - Issue #36
-- added U+1EF9 (lower case y tilde) glyph - Issue #102
-- added U+1EF8 (upper case Y tilde) glyph - Issue #102
-- added U+1EBD (lower case e tilde) glyph - Issue #102
-- added U+1EBC (upper case E tilde) glyph - Issue #102
-- added U+2116 (numero) glyph - Issues #22 & #114
-- added U+01A4 (p hook) glyph - Issue #105
-- added U+0108 (upper case C circumflex) - Issue #21
-- added U+0109 (lower case c circumflex) - Issue #21
-- added U+011C (upper case G circumflex) - Issue #21
-- added U+011D (lower case g circumflex) - Issue #21
-- added U+0124 (upper case H circumflex) - Issue #21
-- added U+0125 (lower case h circumflex) - Issue #21
-- added U+0134 (upper case J circumflex) - Issue #21
-- added U+0135 (lower case j circumflex) - Issue #21
-- added U+015C (upper case S circumflex) - Issue #21
-- added U+015D (lower case s circumflex) - Issue #21
-- added U+016C (upper case U breve) - Issue #21
-- added U+016D (lower case u breve) - Issue #21
-- added U+20B7 (spesmilo) - Issue #21
-- updated ttfautohint to version 1.4 for TrueType (.ttf) build instruction sets
-
-
-# Version 2.015 (release build)
-
-ttf, otf, webfont builds
-
-Changes vs. release v2.013:
-
-- new vertical metrics = decreased line spacing height - Issues #28, #32, #39, #41, #95, #103
-- adjusted vertical position of the colon to a higher position, improves alignment with other punctuation glyphs (U+003A) - Issue #66
-- changed vertical position of the dash (U+002D) so that regular and oblique, bold and bold oblique are properly aligned - Issue #107
-- updated hinting algorithm for bold set (improved point position over stem of lowercase j/i for some text sizes) - Issue #84
-- underscore (U+005F) centered, increased width, increased height & aligned vertical position closer to baseline - Issues #97, #98, #100, 103,
-- increased vertical position of dieresis mark on lowercase u dieresis (U+00FC) - Issue #61
-- increased vertical position of dieresis mark on lowercase i dieresis (U+00EF)
-- increased vertical position of dieresis mark on lowercase e dieresis (U+00EB)
-- decreased vertical position of the asterisk (U+002A) - Issue #34
-- new design for ascii tilde - broader curves, taller glyph with goal to improve appearance at small text sizes where it tended to render like a dash (U+007E) - Issue #37
-- new ttf build autohinting script (./postbuild_processing/tt-hinting/autohint.sh)
-- new ttf build autohinting Control Instructions File - bold set (./postbuild_processing/tt-hinting/Hack-Bold-TA.txt)
-- new ttf build release script (./postbuild_processing/tt-hinting/release.sh)
-- new web font release script (./postbuild_processing/webfonts/releasewebfonts.sh)
-- new vfb to UFO source file conversion script (./tools/makeufo.sh)
-- new UFO source file types - includes separate source files for TrueType (`*-TT.ufo`) and PostScript (`*-PS.ufo`) releases
-- source file path changes: now includes separate `ufo` and `vfb` directories under the `./source` repository directory
-- Hack Open Font license updated to version 2.0. The license changes better define the Hack project as a derivative project of the Bitstream Vera Sans Mono typeface project and are intended to make the license more consistent with the Bitstream Vera libre, open source license under which Hack is co-licensed. There are no new restrictions on use of the fonts with these license changes. Embedding permissions are made explicit in this version of the Hack Open Font license.
-
-
-# Version 2.014 (testing build)
-
-- ttf only build for testing
-- updated hinting algorithm for bold set (corrected incorrect point position of lowercase j/i at some sizes) - Issue #84
-- adjusted vertical metrics - Issues #28, #32, #39, #41, #95, #103
-- centered, increased width, & adjusted vertical position of underscore - Issues #97, #98, #100, 103,
-- increased vertical position of dieresis mark on lowercase u dieresis (U+00FC) - Issue #61
-- increased vertical position of dieresis mark on lowercase i dieresis (U+00EF)
-- increased vertical position of dieresis mark on lowercase e dieresis (U+00EB)
-- decreased vertical position of the asterisk (U+002A) - Issue #34
-- new design for ascii tilde (U+007E) - Issue #37
-
-
-# Version 2.013 (release build)
-
-ttf, otf, webfont builds
-
-Changes vs. release v2.010
-
-- Fixed missing middle dot glyph (U+00B7), adjusted width of U+00B7 em box to address spacing issues in editors that highlight empty spaces (Issues #27 & 46)
-- Powerline glyph alignment and size adjustments (Issue #33)
-- Fixed name tables to address:
- - incorrect oblique rendering with Java type renderers on OS X (Issue #26)
- - incorrect italic + bold + bold oblique rendering in some syntax highlighters (Issues #42, #50, #60)
- - backslash character took inappropriate vertical alignment because of incorrect slant angle in some editors (Issue #67)
-- Changed oblique and bold oblique font names to "Hack Italic" and "Hack Bold Italic" to address Windows listings
-- Changed oblique and bold oblique webfont names to "hack-italic-webfont.[xxx]" and "hack-bolditalic-webfont.[xxx]"
-- Changed oblique and bold oblique basic Latin + Latin-1 webfont subsets to the names "hack-italic-latin-webfont.[xxx]" and "hack-bolditalic-latin-webfont.[xxx]"
-- Changed license name from "Modified SIL Open Font License" to "Hack Open Font License" to comply with SIL regulations for SIL Open Font License modifications
-- Removed all license references to SIL to comply with SIL regulations for modifications of the SIL Open Font License
-- Removed SIL Open Font License preamble from the Hack Open Font License to comply with SIL regulations for modifications of the SIL Open Font License
-- Removed the following statement from Hack Open Font License condition #3: "This restriction only applies to the primary font name as presented to the users." to address a reserved font name conflict with the Bitstream Vera license
-- Modified the build directory structure for the Hack web fonts
-- Added Hack webfont CSS files to the build directory
-
-# Version 2.012 (testing build)
-
-- ttf only build for testing
-- Powerline glyph alignment and size adjustments (Issue #33)
-- Fixed name tables to address:
- - incorrect oblique rendering with Java type renderers on OS X (Issue #26)
- - incorrect italic + bold + bold oblique rendering in some syntax highlighters (Issues #42, #50, #60)
- - backslash character took inappropriate vertical alignment because of incorrect slant angle in some editors (Issue #67)
-
-# Version 2.011 (testing build)
-
-- ttf only build for testing
-- fixed missing middle dot glyph (U+00B7), adjusted width of U+00B7 em box to address spacing issues in editors that highlight empty spaces (Issues 27 & 46)
-
-
-# Version 2.010
-
-### New Glyphs
-
-- New glyphs for Revised Western European (ISO-8859-15, Latin-9) character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Central European (ISO-8859-2, Latin-2) character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for South European (ISO-8859-3, Latin-3) character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Vietnamese character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Pan African Latin character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Cyrillic (ISO-8859-5) character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Greek (ISO-8859-7) character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Armenian character set (shapes from DejaVu Sans Mono typeface)
-- New glyphs for Georgian character set (shapes from DejaVu Sans Mono typeface)
-- New punctuation glyphs
-- New Powerline glyphs
-- New number glyphs
-- New scientific inferior numerals
-- New superscript numerals
-- New subscript numerals
-- New symbol glyphs
-- New **dotlessi**
-- New **iacute**
-- New **icircumflex**
-- New **idieresis**
-- New **igrave**
-- New **imacron**
-- New **iogonek**
-- New **itilde**
-- New **uppercase upsilon**
-- New **uppercase upsilon tonos**
-- New uni0069
-- New uni0457
-- New uni0458
-
-
-### Modified Glyphs
-
-##### Latin Character Set
-
-- Modified **uppercase Q** - added flared tail and modified tail angle
-- Modified **uppercase F** - central arm lowered to fill open gap at the base
-- Modified **lowercase a** - added curved tail/spur
-- Modified **lowercase b** - decreased width of terminal, opened angle
-- Modified **lowercase d** - decreased width of terminal, opened angle
-- Modified **lowercase g** - decreased width of terminal, opened angle
-- Modified **lowercase i** - rounded corners of the dot, oriented dot position left of center relative to vertical stem, adjusted vertical position of the horizontal stem to x-height, lengthened the vertical stem to slightly overshoot baseline with the curved tail, decreased width of horizontal stem
-- Modified **lowercase j** - rounded corners of the dot, oriented dot position left of center relative to vertical stem
-- Modified **lowercase l** - lengthened the vertical stem to overshoot the baseline with the curved tail
-- Modified **lowercase m** - decreased width of terminal, opened angle
-- Modified **lowercase n** - decreased width of terminal, opened angle
-- Modified **lowercase p** - decreased width of terminal, opened angle
-- Modified **lowercase q** - decreased width of terminal, opened angle
-- Modified **lowercase r** - decreased width of terminal, opened angle
-- Modified **lowercase t** - added angle to the upper terminal, increased length of the vertical stem to allow the curved tail to slightly overshoot the baseline
-- Modified **lowercase y** - modified curves
-- Modified **0** - modified width and length of central oval fill, improved symmetry of the oval fill in all sets
-- Modified **2** - rounded the upper left corner of the base, decreased width of the spine of the hook
-- Modified **Abreve** - modified curves
-- Modified **Aogonek** - modified curve, decreased the width of the tail to meet typeface metrics
-- Modified **Eogonek** - modified tail curve
-- Modified **Iogonek** - modified tail curve
-- Modified **Itilde** - modified tilde curve
-- Modified **Ohorn** - modified horn curve
-- Modified **Oslash** - modified curves
-- Modified **Oslashacute** - modified curves
-- Modified **Otilde** - modified tilde curve
-- Modified **Racute** - modified bowl and leg curves
-- Modified **Rcaron** - modiifed bowl and leg curves
-- Modified **Rcommaaccent** - modified bowl and leg curves
-- Modified **Scommaaccent** - modified curves
-- Modified **Tcommaaccent** - modified comma accent curves
-- Modified **Ucircumflex** - modified curves
-- Modified **Udieresis** - modified curves
-- Modified **Ugrave** - modified curves
-- Modified **Uhorn** - modified curves
-- Modified **Uhungarumlaut** - modified curves
-- Modified **Umacron** - modified curves
-- Modified **Uogonek** - modified curves
-- Modified **Uring** - modified curves
-- Modified **Utilde** - modified curves
-- Modified **agrave** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **aacute** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **abreve** - decreased width of upper terminal to create an angled stem
-- Modified **acircumflex** - decreased width of terminal, opened angle
-- Modified **atilde** - decreased width of terminal, opened angle
-- Modified **adieresis** - decreased width of terminal, opened angle
-- Modified **amacron** - decreased width of upper terminal to create an angled stem
-- Modified **aring** - decreased width of terminal, opened angle
-- Modified **dcroat** - decreased width of terminal, opened angle
-- Modified **dcaron** - decreased width of lower terminal to create angled stem
-- Modified **ecaron** - modified curves
-- Modified **ecircumflex** - modified curves
-- Modified **edieresis** - modified curves
-- Modified **egrave** - modified curves
-- Modified **emacron** - modified curves
-- Modified **eogonek** - modified curves
-- Modified **gbreve** - modified curves of bowl and tail
-- Modified **gcaron** - modified curves of bowl and tail, decreased width of upper terminal to create angled stem
-- Modified **gcommaaccent** - modified curves of bowl and tail, decreased width of upper terminal to create angled stem
-- Modified **gdotaccent** - modified curves of bowl and tail, decreased width of upper terminal to create angled stem
-- Modified **hbar** - adjusted curves
-- Modified **dotlessi** - decreased width of horizontal stem
-- Modified **iacute** - decreased width of horizontal stem
-- Modified **icircumflex** - decreased width of horizontal stem
-- Modified **idieresis** - decreased width of horizontal stem
-- Modified **igrave** - decreased width of horizontal stem
-- Modified **imacron** - decreased width of horizontal stem
-- Modified **iogonek** - decreased width of horizontal stem
-- Modified **itilde** -decreased width of horizontal stem
-- Modified **nacute** - adjusted curves
-- Modified **ncaron** - adjusted curves
-- Modified **ncommaaccent** - adjusted curves
-- Modified **eng** - adjusted curves, decreased the upper terminal width to create an angled stem
-- Modified **nacute** - decreased width of upper terminal to create angled stem
-- Modified **ncaron** - decreased width of upper terminal to create angled stem
-- Modified **ncommaaccent** - decreased width of upper terminal to create angled stem
-- Modified **ntilde** - adjusted curves
-- Modified **ohorn** - adjusted curves
-- Modified **ohungarumlaut** - adjusted curves
-- Modified **omacron** - adjusted curves
-- Modified **oslash** - adjusted curves
-- Modified **oslashacute** - adjusted curves
-- Modified **otilde** - adjusted curves
-- Modified **racute** - adjusted curves, decreased width of upper terminal to create angled stem
-- Modified **rcaron** - adjusted curves, decreased width of upper terminal to create angled stem
-- Modified **rcommaaccent** - adjusted curves, decreased width of upper terminal to create angled stem
-- Modified **sacute** - adjusted curves
-- Modified **scedila** - adjusted curves
-- Modified **scommaaccent** - adjusted curves
-- Modified **lowercase t** - decreased length of the left terminal to angle the horizontal stem
-- Modified **tbar** - decreased length of the left terminal to angle the horizontal stem
-- Modified **tcaron** - decreased length of the left terminal to angle the horizontal stem
-- Modified **tcommaaccent** - adjusted curves, decreased length of the left terminal to angle the horizontal stem
-- Modified **uhorn** - adjusted curves, decreased width of lower terminal to create angled stem
-- Modified **uhungarumlaut** - adjusted curves, decreased width of lower terminal to create angled stem
-- Modified **umacron** - adjusted curves, decreased width of lower terminal to create angled stem
-- Modified **uogonek** - adjusted curves, decreased width of lower terminal to create angled stem
-- Modified **uring** - adjusted curves, decreased width of lower terminal to create angled stem
-- Modified **utilde** - adjusted curves, decreased width of lower terminal to create angled stem
-- Modified **yacute** - adjusted curves
-- Modified **ycircumflex** - adjusted curves
-- Modified **ydieresis** - adjusted curves
-- Modified **ygrave** - adjusted curves
-- Modified **zdotaccent** - rounded corners of dot
-- Modified **gbreve** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **ntilde** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **ugrave** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **uacute** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **ucircumflex** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **udieresis** - decreased width of terminal, opened angle in regular and bold sets
-- Modified **exclamdown** - rounded corners of the dot
-- Modified **dieresis** - rounded corners
-- Modified **questionmarkdown** - rounded corners of the dot
-- Modified **ordfeminine** - decreased width of lower terminal on the a character to create angled stem
-- Modified **Adieresis** - rounded corners of dieresis component of glyph
-- Modified **Edieresis** - rounded corners of dieresis component of glyph
-- Modified **Idieresis** - rounded corners of dieresis component of glyph
-- Modified **Odieresis** - rounded corners of dieresis component of glyph
-- Modified **Udieresis** - rounded corners of dieresis component of glyph
-- Modified **Ydieresis** - rounded corners of dieresis component of glyph
-- Modified **adieresis** - rounded corners of dieresis component of glyph
-- Modified **edieresis** - rounded corners of dieresis component of glyph
-- Modified **idieresis** - rounded corners of dieresis component of glyph
-- Modified **odieresis** - rounded corners of dieresis component of glyph
-- Modified **udieresis** - rounded corners of dieresis component of glyph
-- Modified **ydieresis** - rounded corners of dieresis component of glyph
-- Modified **Idotaccent** - rounded corners of the dot
-- Modified **dotaccent** - rounded corners of the dot
-- Modified **ellipsis** - rounded corners of the dots
-- Modified **periodcentered** - rounded corners of the dot
-
-
-##### Greek Character Set
-
-- Modified **upsilondieresistonos** - adjusted vertical position to properly position on the baseline
-- Modified **iotadieresistonos** - adjusted vertical position to properly position on the baseline
-- Modified **eth** - altered curve of the neck
-- Modified **uppercase eta** - modified the curves
-- Modified **uppercase theta** - modified the curves
-- Modified **uppercase omicron** - modified the curves
-- Modified **uppercase rho** - modified the curves
-- Modified **uppercase psi** - modified the curves
-- Modified **uppercase upsilon** - new glyph style (change from Latin Y shape)
-- Modified **uppercase omega** - modified the curves
-- Modified **uppercase alphatonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase epsilontonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase etatonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase iotatonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase omicrontonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase upsilontonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase omegatonos** - adjusted right and left sidebearings, corrected position of the tonos symbol
-- Modified **uppercase iotadieresis** - rounded the dieresis points
-- Modified **uppercase upsilondieresis** - new upsilon shape, rounded the dieresis points
-- Modified **lowercase alpha** - adjusted curves
-- Modified **lowercase beta** - adjusted curves
-- Modified **lowercase gamma** - adjusted curves
-- Modified **lowercase delta** - adjusted curves
-- Modified **lowercase epsilon** - adjusted curves
-- Modified **lowercase zeta** - adjusted curves
-- Modified **lowercase eta** - decreased width of the top terminal to create angled stem, adjusted curves
-- Modified **lowercase theta** - adjusted curves
-- Modified **lowercase iota** - adjusted curves
-- Modified **lowercase lambda** - adjusted curves
-- Modified **lowercase mu** - adjusted curves
-- Modified **lowercase nu** - adjusted curves
-- Modified **lowercase xi** - adjusted curves
-- Modified **lowercase omicron** - adjusted curves
-- Modified **lowercase pi** - adjusted curves
-- Modified **lowercase rho** - adjusted curves
-- Modified **lowercase sigmafinal** - adjusted curves
-- Modified **lowercase sigma** - adjusted curves
-- Modified **lowercase tau** - adjusted curves
-- Modified **lowercase upsilon** - adjusted curves
-- Modified **lowercase phi** - adjusted curves
-- Modified **lowercase chi** - adjusted curves
-- Modified **lowercase psi** - adjusted curves
-- Modified **lowercase omega** - adjusted curves
-- Modified **lowercase iotatonos** - adjusted curves
-- Modified **lowercase iotadieresis** - rounded points of the dieresis, adjusted curves
-- Modified **iotadieresistonos** - rounded corners of points of dieresis mark, appropriately positioned tonos mark, adjusted curves
-- Modified **lowercase upsilontonos** - adjusted curves
-- Modified **lowercase upsilondieresis** - rounded points of dieresis mark, adjusted curves
-- Modified **upsilondieresistonos** - rounded corners of points of dieresis mark, appropriately positioned tonos mark, adjusted curves
-- Modified **lowercase omicrontonos** - adjusted curves
-- Modified **lowercase omegatonos** - adjusted curves
-- Modified **lowercase alphatonos** - adjusted curves
-- Modified **lowercase epsilontonos** - adjusted curves
-- Modified **lowercase etatonos** - decreased width of top terminal to create angled stem, adjusted curves
-
-
-##### Cyrillic Character Set
-
-- Modified curves in uni0411, uni0412, uni0401, uni0417, uni041B, uni041E, uni0420, uni0421, uni0423, uni040E, uni0424, uni0427, uni042F, uni042C, uni042A, uni042B, uni0409, uni040A, uni0405, uni0404, uni042D, uni0408, uni040B, uni042E, uni0402, uni0462, uni0472, uni0494, uni0498, uni04AA, uni04BA, uni04CB, uni04D0, uni04D2, uni04D6, uni04D8, uni04DA, uni04DC, uni04DE, uni04E0, uni04E4, uni04E6, uni04E8, uni04EA, uni04EC, uni04EE, uni04F0, uni04F2, uni04F4, uni04F8, uni0510, uni051A, uni0430, uni0431, uni0432, uni0434, uni0435, uni0450, uni0451, uni0437, uni0439, uni043B, uni043E, uni0440, uni0441, uni0443, uni045E, uni0444, uni0447, uni044F, uni044C, uni044A, uni044B, uni0459, uni045A, uni0455, uni0454, uni044D, uni0456, uni0457, uni0458, uni045B, uni044E, uni0452, uni0463, uni0473, uni0499, uni04AB, uni04BB, uni04CC, uni04D1, uni04D3, uni04D7, uni04D9, uni04DB, uni04DD, uni04DF, uni04E1, uni04E5, uni04E7, uni04E9, uni04EB, uni04ED, uni04EF, uni04F1, uni04F3, uni04F5, uni04F9, uni0511, uni051B, uni04D5
-- Rounded corners of points of dieresis marks in uni0401, uni0407, uni04D2, uni04DA, uni04DC, uni04DE, uni04E4, uni04E6, uni04EA, uni04EC, uni04F0, uni04F4, uni04F8, uni0451, uni0457, uni04D3, uni04DB, uni04DD, uni04DF, uni04E5, uni04E7, uni04EB, uni04ED, uni04F1, uni04F5, uni04F9
-- Rounded corners of dots in uni0456, uni0458
-- Modified **lowercase i** glyphs (uni0456, uni0457) so that they are consistent with the shape of the Hack Latin lowercase i
-- Modified **uni0430** - decreased width of lower terminal to create angle
-- Modified **uni0440** - decreased width of upper terminal to create angle
-- Modified **uni04D1** - decreased width of lower terminal to create angle
-- Modified **uni04D3** - decreased width of lower terminal to create angle
-- Modified **uni051B** - decreased width of upper terminal to create angle
-- Numerous metrics changes to better align the Cyrillic glyphs in a fixed width format
-
-##### Armenian Character Set
-
-- Modified curves in uni0531, uni0532, uni0533, uni0534, uni0535, uni0536, uni0538, uni0539, uni053A, uni053B, uni053D, uni053E, uni053F, uni0540, uni0541, uni0542, uni0543, uni0544, uni0545, uni0546, uni0547, uni0548, uni0549, uni054A, uni054B, uni054C, uni054D, uni054E, uni054F, uni0550, uni0551, uni0553, uni0554, uni0555, uni0556, uni0561, uni0562, uni0563, uni0564, uni0565, uni0566, uni0568, uni0569, uni056A, uni056B, uni056D, uni056E, uni056F, uni0570, uni0571, uni0572, uni0573, uni0574, uni0575, uni0576, uni0577, uni0578, uni0579, uni057A, uni057B, uni057C, uni057D, uni057E, uni057F, uni0580, uni0581, uni0583, uni0584, uni0585, uni0586, uni0587
-- Modified **uni0563** - decreased width of the upper terminal to create angle
-- Modified **uni0564** - decreased width of the upper terminal to create angle
-- Modified **uni0566** - decreased width of the upper terminal to create angle
-- Modified **uni0568** - decreased width of the upper terminal to create angle
-- Modified **uni0569** - decreased width of the upper terminal to create angle
-- Modified **uni0572** - decreased width of the upper terminal to create angle
-- Modified **uni0573** - decreased width of the upper terminal to create angle
-- Modified **uni0574** - decreased width of the upper terminal to create angle
-- Modified **uni0576** - decreased width of the upper terminal to create angle
-- Modified **uni0578** - decreased width of the upper terminal to create angle
-- Modified **uni057C** - decreased width of the upper terminal to create angle
-- Modified **uni057D** - decreased width of the upper terminal to create angle
-- Modified **uni0580** - decreased width of the upper terminal to create angle
-- Modified **uni0581** - decreased width of the upper terminal to create angle
-- Modified **uni0584** - decreased width of the upper terminal to create angle
-
-
-##### Georgian Character Set
-
-- Modified curves in uni10D0, uni10D1, uni10D2, uni10D3, uni10D4, uni10D5, uni10D6, uni10D7, uni10D8, uni10D9, uni10DA, uni10DB, uni10DC, uni10DD, uni10DE, uni10DF, uni10E0, uni10E1, uni10E2, uni10E3, uni10E4, uni10E5, uni10E6, uni10E7, uni10E8, uni10E9, uni10EA, uni10EB, uni10EC, uni10ED, uni10EE, uni10EF, uni10F0, uni10F1, uni10F2, uni10F3, uni10F4, uni10F5, uni10F6, uni10F7, uni10F8, uni10F9, uni10FA, uni10FC, uni055C, uni055E
-- Rounded corners of points in uni10FB, uni0589
-
-
-##### Punctuation Character Set
-
-- Modified curves in uni2047, questiondown, uni203D, uni203F, uni2048, uni2049, uni204B, uni2E18, uni2E1F, uni2E2E, uni2E18.case, questiondown.case, uni208E, uni207E, uni2768, uni2769, uni276B, uni27C5, uni27C6, uni2987, uni2988, uni055C, uni055E, uni061F, H18533, circle, uni25EF, uni25D0, uni25D1, uni25D2, uni25D3, uni25D6, uni25D7, uni25D4, uni25D5, uni25F4, uni25F5, uni25F6, uni25F7, uni25CD, uni25C9, uni25CE, openbullet, invbullet, invcircle, uni25DA, uni25DB, uni25E0, uni25E1, uni25DC, uni25DD, uni25DE, uni25DF, ampersand, copyright, registered, section, degree
-- Modified **dong** - decreased width of the lower terminal to create an angled stem
-- Modified **uni20A5** - decreased width of the upper terminal to create an angled stem
-- Modified **uni225D** - decreased width of the lower terminal on the d character to create an angled stem
-- Modified **uni225E** - decreased width of the upper terminal to create an angled stem
-
-
-##### Symbol Character Set
-
-- Modified curves in cent, colonmonetary, dong, euro, florin, lira, peseta, sterling, uni0E3F, uni20A0, uni20A2, uni20A5, uni20A8, uni20AA, uni20AF, uni20B0, uni20B1, uni20B2, uni20B4, uni20B5, uni20B9, approxequal, asciitilde, circlemultiply, circleplus, congruent, element, emptyset, infinity, integral, integralbt, integraltp, intersection, notelement, notsubset, partialdiff, percent, perthousand, propersubset, propersuperset, proportional, reflexsubset, reflexsuperset, similar, suchthat, therefore, uni2031, uni2126, uni2201, uni220A, uni220C, uni220D, uni2218, uni221B, uni222C, uni222D, uni2235, uni2236, uni2237, uni2238, uni2239, uni223A, uni223B, uni223D, uni2241, uni2242, uni2243, uni2244, uni2246, uni2247, uni2249, uni224A, uni224B, uni224C, uni224E, uni224F, uni2250, uni2251, uni2252, uni2253, uni2254, uni2255, uni2256, uni2257, uni2258, uni225D, uni225E, uni225F, uni2272, uni2273, uni2274, uni2275, uni227C, uni227D, uni227E, uni227F, uni2285, uni2288, uni2289, uni228B, uni228D, uni2296, uni2298, uni2299, uni229A, uni229B, uni229C, uni229D, uni22B8, uni22CD, uni22D0, uni22D1, uni22DE, uni22DF, uni22E0, uni22E1, uni22E6, uni22E7, uni22E8, uni22E9, uni22EF, uni23A8, uni23AC, uni27DC, uni2A00, uni2A6A, uni2A6B, union, uni219C, uni219D, uni21AD, uni21A9, uni21AA, uni21AB, uni21AC, uni21B6, uni21B7, uni21BA, uni21BB, uni21F4, H18533, circle, uni25EF, uni25D0, uni25D1, uni25D2, uni25D3, uni25D6, uni25D7, uni25D4, uni25D5, uni25F4, uni25F5, uni25F6, uni25F7, uni25CD, uni25C9, uni25CE, openbullet, invbullet, invcircle, uni25DA, uni25DB, uni25E0, uni25E1, uni25DC, uni25DD, uni25DE, uni25DF, at, ampersand, copyright, registered, section, degree, uni0606, uni03F6
-
-### Metrics Changes
-
-- Changed line gap / typo line gap to 275 units
-- Modified **uppercase P** - increased right sidebearing to equal sidebearing of uppercase O glyph
-- Modified **uppercase Z** - changed to right = left sidebearing (shifts orientation to left) for regular, bold, oblique sets
-- Modified **uppercase Z** - reduced left sidebearing for bold oblique set, not necessary to make this equal as with above sets
-- Modified **lowercase a** - reduced left sidebearing
-- Modified **lowercase c** - reduced left sidebearing
-- Modified **lowercase e** - increased left sidebearing
-- Modified **lowercase g** - increased left sidebearing
-- Modified **lowercase i** - increased left sidebearing
-- Modified **lowercase j** - increased left sidebearing
-- Modified **lowercase k** - reduced left sidebearing
-- Modified **lowercase r** - reduced left sidebearing
-- Modified **3** - increased left sidebearing
-- Modified **Zacute** - centered glyph (reduced left sidebearing, increased right sidebearing)
-- Modified **Zcaron** - centered glyph (reduced left sidebearing, increased right sidebearing)
-- Modified **Zdotaccent** - centered glyph (reduced left sidebearing, increased right sidebearing)
-- Modified **aacute** - increased left sidebearing
-- Modified **abreve** - increased left sidebearing
-- Modified **acircumflex** - increased left sidebearing
-- Modified **adieresis** - increased left sidebearing
-- Modified **agrave** - increased left sidebearing
-- Modified **amacron** - increased left sidebearing
-- Modified **aogonek** - increased left sidebearing
-- Modified **aring** - increased left sidebearing
-- Modified **atilde** - increased left sidebearing
-- Modified **kcommaaccent** - decreased left sidebearing
-- Modified **racute** - decreased left sidebearing
-- Modified **rcaron** - decreased left sidebearing
-- Modified **rcommaaccent** - decreased left sidebearing
-- Mofified **Mu** - increased left sidebearing
-- Modified **Zeta** - reduced left sidebearing to center the glyph
-- Modified **Rho** - reduced left sidebearing
-- Modified **Phi** - increased left sidebearing
-- Modified **left guillemet** - increased right sidebearing
-- Modified **right guillemet** - increased left sidebearing
-- Modified **left brace** - increased right sidebearing
-- Modified **right brace** - increased left sidebearing
-- Modified **left bracket** - increased right sidebearing
-- Modified **right bracket** - increased left sidebearing
-- Modified **left parenthesis** - increased right sidebearing
-- Modified **right parenthesis** - increased left sidebearing
-- Adjusted spacing on all diacritic marks in the regular, bold, oblique, and bold oblique set
-
-### True Type Instructions / PostScript Hinting
-
-- New TrueType instructions / PostScript hinting across the entire glyph set
-
-### Removed
-
-- Removed **fi** and **fl** ligatures. Spacing issues that require these ligatures are not present in this monospaced typeface
-
-
-# Version 1.3
-
-### Modified Glyphs
-
-- Curve adjustments & curve smoothing across all glyphs in the font collection
-- hinting improvements
-
-### Build Files
-
-- New binary build system - should result in improved cross-platform compatibility for font binaries
-
-
-# Version 1.2
-
-### Modified Glyphs
-
-- Modified **lowercase i** glyph. Removed serif and added curved tail
-- Modified **hyphen** glyph. Widened
-- Modified **zero** glyph. Adjusted alignment and shape of the oval fill
-- Modified **left parenthesis** glyph. Increased right sidebearing length
-- Modified **right parenthesis** glyph. Increased left sidebearing length
-
-### Source
-
-- Converted to UFO formatted source
-
-
-# Version 1.0.1
-
-- Modified the SIL license to permit dual licensing with the Bitstream Vera license. This modification removed the stipulation that multiple licenses are not possible (preamble and section #5) and was intended to create the new Reserved Font Name Hack for this typeface modification and preserve the right (for myself and others) to define Reserved Font Names for all future fonts derived from this typeface. There are no other modifications to either license under which this font is released.
-- This release did not introduce changes to the glyphs included in the typeface
-
-
-# Version 1.0.0
-- Branched Bitstream Vera Sans Mono 1.10 release
-
-## Changes
-
-### New Glyphs
-
-- New **exclamation point** glyph. Circular full stop point, tapered line, increased weight relative to other characters.
-- New **asterisk** glyph. Glyph shape from Source Code Pro. Modified vertical position of the glyph to orient closer to the ascender.
-- New **period** glyph. Circular full stop point, modified from square glyph.
-- New **comma** glyph. Rounded comma shape from Source Code Pro, modified from square glyph.
-- New **colon** glyph. Circular colon points, modified from square points.
-- New **semicolon** glyph. Circular point and rounded comma shape from Source Code Pro, increased vertical spacing between the shapes
-
-
-### Modified Glyphs
-- Modified **percent** glyph. Increased line length and added vertical line ends.
-- Modified **zero** glyph. Changed circular fill to oval fill.
-- Modified **left square bracket** glyph. Increased height of the glyph.
-- Modified **right square bracket** glyph. Increased height of the glyph.
-- Modified **left curly bracket** glyph. Modified vertical position, increased length of the horizontal stem, decreased left sidebearing
-- Modified **right curly bracket** glyph. Modified vertical position, increased length of the horizontal stem, decreased right sidebearing
-- Modified **question mark** glyph. Changed square full stop point to circular full stop point.
-- Modified **hyphen** glyph. Raised vertical alignment to center `->` character combinations.
-
-### Font Styles
-- **Regular** - includes all changes indicated above
-- **Regular Oblique** - includes all changes indicated above
-- **Bold** - includes all changes indicated above
-- **Bold Oblique** - includes all changes indicated above
-
-
diff --git a/deps/hack-font-ttf/LICENSE.md b/deps/hack-font-ttf/LICENSE.md
deleted file mode 100644
index e9fc8a1..0000000
--- a/deps/hack-font-ttf/LICENSE.md
+++ /dev/null
@@ -1,64 +0,0 @@
-## License
-
-Hack Copyright 2015, Christopher Simpkins with Reserved Font Name "Hack".
-
-Bitstream Vera Sans Mono Copyright 2003 Bitstream Inc. and licensed under the Bitstream Vera License with Reserved Font Names "Bitstream" and "Vera"
-
-DejaVu modifications of the original Bitstream Vera Sans Mono typeface have been committed to the public domain.
-
-
-
-This Font Software is licensed under the Hack Open Font License v2.0 and the Bitstream Vera License.
-
-These licenses are copied below.
-
-
-### Hack Open Font License v2.0
-
-(Version 1.0 - 06 September 2015)
-
-(Version 2.0 - 27 September 2015)
-
-Copyright 2015 by Christopher Simpkins. All Rights Reserved.
-
-DEFINITIONS
-
-"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software.
-
-PERMISSION AND CONDITIONS
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated source code, documentation, and binary files (the "Font Software"), to reproduce and distribute the modifications to the Bitstream Vera Font Software, including without limitation the rights to use, study, copy, merge, embed, modify, redistribute, and/or sell modified or unmodified copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
-
-(1) The above copyright notice and this permission notice shall be included in all modified and unmodified copies of the Font Software typefaces. These notices can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user.
-
-(2) The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing the word "Hack".
-
-(3) Neither the Font Software nor any of its individual components, in original or modified versions, may be sold by itself.
-
-TERMINATION
-
-This license becomes null and void if any of the above conditions are not met.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the names of Christopher Simpkins and the Author(s) of the Font Software shall not be used to promote, endorse or advertise any modified version, except to acknowledge the contribution(s) of Christopher Simpkins and the Author(s) or with their explicit written permission. For further information, contact: chris at sourcefoundry dot org.
-
-
-
-### BITSTREAM VERA LICENSE
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:
-
-The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.
-
-The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".
-
-This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.
-
-The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org.
diff --git a/deps/hack-font-ttf/hack-font-ttf.SlackBuild b/deps/hack-font-ttf/hack-font-ttf.SlackBuild
deleted file mode 100755
index ab48b87..0000000
--- a/deps/hack-font-ttf/hack-font-ttf.SlackBuild
+++ /dev/null
@@ -1,86 +0,0 @@
-#!/bin/sh
-
-# Copyright 2016 Eric Hameleers, Eindhoven, NL
-# Copyright 2016 Patrick J. Volkerding, Sebeka, MN USA
-# All rights reserved.
-#
-# Permission to use, copy, modify, and distribute this software for
-# any purpose with or without fee is hereby granted, provided that
-# the above copyright notice and this permission notice appear in all
-# copies.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
-# CONTRIBUTORS 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.
-# -----------------------------------------------------------------------------
-
-
-PRGNAM=hack-font-ttf
-SRCNAM=Hack
-VERSION=${VERSION:-"2.020"}
-SRCVER=$(echo $VERSION |tr . _)
-ARCH=noarch
-BUILD=${BUILD:-1}
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PRGNAM
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-
-# Font directory location depends on the X build prefix:
-# Determine what X we're running (the modular X returns the prefix
-# in the next command, while older versions stay silent):
-XPREF=$(pkg-config --variable=prefix x11)
-if [ "$XPREF" = "" ]; then
- XPREF='/usr/X11R6'
- FONTDIR="$XPREF/lib/X11/fonts/TTF"
-else
- FONTDIR="/usr/share/fonts/TTF"
-fi
-mkdir -p $PKG$FONTDIR
-
-# Install the TTF fonts:
-cd $PKG$FONTDIR/
-tar xvf $CWD/${SRCNAM}-v${SRCVER}-ttf.tar.xz || exit 1
-chown -R root:root .
-chmod 644 $PKG$FONTDIR/*
-
-# Post-install script:
-mkdir -p $PKG/install
-cat << EOT > $PKG/install/doinst.sh
-# Update X font indexes and the font cache:
-if [ -x .$XPREF/bin/mkfontdir ]; then
- chroot . $XPREF/bin/mkfontscale $FONTDIR
- chroot . $XPREF/bin/mkfontdir $FONTDIR
-fi
-if [ -x .$XPREF/bin/fc-cache ]; then
- chroot . $XPREF/bin/fc-cache $FONTDIR
-fi
-EOT
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a \
- $CWD/CHANGELOG.md $CWD/LICENSE.md $CWD/README.md \
- $PKG/usr/doc/$PRGNAM-$VERSION
-find $PKG/usr/doc -type f -exec chmod 644 {} \;
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txz
-
diff --git a/deps/hack-font-ttf/slack-desc b/deps/hack-font-ttf/slack-desc
deleted file mode 100644
index 03c97d1..0000000
--- a/deps/hack-font-ttf/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-hack-font-ttf: hack-font-ttf (TrueType font based on Bitstream Vera Mono)
-hack-font-ttf:
-hack-font-ttf: Hack is a typeface designed for writing source code.
-hack-font-ttf: It expands upon the contributions of the Bitstream Vera
-hack-font-ttf: & DejaVu projects.
-hack-font-ttf: Hack includes monospaced regular, bold, oblique, and bold oblique
-hack-font-ttf: sets to cover all of your syntax highlighting needs.
-hack-font-ttf:
-hack-font-ttf:
-hack-font-ttf: hack-font-ttf home: http://sourcefoundry.org/hack/
-hack-font-ttf:
diff --git a/deps/hyphen/.url b/deps/hyphen/.url
deleted file mode 100644
index 33c4c38..0000000
--- a/deps/hyphen/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://sourceforge.net/projects/hunspell/files/Hyphen/2.8/hyphen-2.8.8.tar.gz
diff --git a/deps/hyphen/slack-desc b/deps/hyphen/slack-desc
deleted file mode 100644
index f9afa89..0000000
--- a/deps/hyphen/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-hyphen: hyphen (library for high quality hyphenation and justification)
-hyphen:
-hyphen: Hyphen is a library to use converted TeX hyphenation patterns.
-hyphen:
-hyphen:
-hyphen:
-hyphen:
-hyphen:
-hyphen:
-hyphen: Homepage: https://hunspell.github.io/
-hyphen:
diff --git a/deps/kdsoap/.url b/deps/kdsoap/.url
new file mode 100644
index 0000000..1cb547f
--- /dev/null
+++ b/deps/kdsoap/.url
@@ -0,0 +1 @@
+https://github.com/KDAB/KDSoap/releases/download/kdsoap-1.9.0/kdsoap-1.9.0.tar.gz
diff --git a/deps/hyphen/hyphen.SlackBuild b/deps/kdsoap/kdsoap.SlackBuild
index f04be49..e407a3b 100755
--- a/deps/hyphen/hyphen.SlackBuild
+++ b/deps/kdsoap/kdsoap.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
-# Copyright 2018 Eric Hameleers, Eindhoven, NL
-# Copyright 2018 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2020 Eric Hameleers, Eindhoven, NL
+# Copyright 2020 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for
@@ -24,12 +24,11 @@
# -----------------------------------------------------------------------------
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=hyphen
-VERSION=${VERSION:-2.8.8}
+PKGNAM=kdsoap
+VERSION=${VERSION:-1.9.0}
BUILD=${BUILD:-1}
+CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
@@ -44,14 +43,6 @@ if [ -z "$ARCH" ]; then
export ARCH
fi
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
- exit 0
-fi
-
if [ "$ARCH" = "i586" ]; then
SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
SLKLDFLAGS=""
@@ -78,9 +69,9 @@ esac
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1
-cd $PKGNAM-$VERSION || exit 1
+rm -rf ${PKGNAM}-$VERSION
+tar xvf $CWD/${PKGNAM}-$VERSION.tar.?z || exit 1
+cd ${PKGNAM}-$VERSION || exit 1
# Fix bogus permissions:
chown -R root:root .
@@ -91,20 +82,28 @@ find . \
-exec chmod 644 {} \;
# Configure and compile:
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --disable-static \
- --build=$TARGET
-make $NUMJOBS || exit 1
-make install DESTDIR=$PKG || exit 1
+mkdir -p build
+cd build
+ cmake \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_MANDIR=/usr/man \
+ -DCMAKE_INSTALL_DOCDIR=/usr/doc/$PKGNAM-$VERSION \
+ -DLIB_SUFFIX=${LIBDIRSUFFIX} \
+ -DBUILD_TESTS=OFF \
+ ..
+ make VERBOSE=1
+ make install DESTDIR=$PKG
+cd ..
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
- AUTHORS COPYIN* ChangeLog INSTALL NEWS READM* THANKS TODO \
+ LICENSE* README.txt \
$PKG/usr/doc/$PKGNAM-$VERSION
# Strip binaries:
diff --git a/deps/kdsoap/slack-desc b/deps/kdsoap/slack-desc
new file mode 100644
index 0000000..091c73c
--- /dev/null
+++ b/deps/kdsoap/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+kdsoap: kdsoap (Qt-based client/server SOAP component)
+kdsoap:
+kdsoap: KD SOAP is a tool for creating client applications for web services.
+kdsoap: KD SOAP also provides the means to create web services without
+kdsoap: the need for any further component such as a dedicated web server.
+kdsoap: It makes it possible to interact with applications which have APIs
+kdsoap: that can be exported as SOAP objects. The web service then provides
+kdsoap: a machine-accessible interface to its functionality via HTTP.
+kdsoap:
+kdsoap: See also: https://www.kdab.com/development-resources/qt-tools/kd-soap/
+kdsoap:
diff --git a/deps/libburn/libburn.SlackBuild b/deps/libburn/libburn.SlackBuild
index 5b82850..2bfad39 100755
--- a/deps/libburn/libburn.SlackBuild
+++ b/deps/libburn/libburn.SlackBuild
@@ -88,7 +88,7 @@ CXXFLAGS="$SLKCFLAGS" \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--mandir=/usr/man \
- --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
--disable-static \
--build=$TARGET
diff --git a/deps/libdbusmenu-qt5/libdbusmenu-qt5.SlackBuild b/deps/libdbusmenu-qt5/libdbusmenu-qt5.SlackBuild
index 103e251..a16f439 100755
--- a/deps/libdbusmenu-qt5/libdbusmenu-qt5.SlackBuild
+++ b/deps/libdbusmenu-qt5/libdbusmenu-qt5.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2010, 2011, 2012, 2014, 2015, 2017 Eric Hameleers, Eindhoven, The Netherlands
+# Copyright 2010, 2011, 2012, 2014, 2015, 2017, 2020 Eric Hameleers, Eindhoven, The Netherlands
# Copyright 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
@@ -29,25 +29,37 @@
# Get version number from
# grep dbusmenu_qt_VERSION dbusmenu-qt/CMakeLists.txt
+cd $(dirname $0) ; CWD=$(pwd)
+
PKGNAM=libdbusmenu-qt5
SRCNAM=libdbusmenu-qt
VERSION=${VERSION:-0.9.3+16.04.20160218}
-BUILD=${BUILD:-1}
-
-NUMJOBS=${NUMJOBS:--j7}
+BUILD=${BUILD:-2}
# Automatically determine the architecture we're building on:
-MARCH=$( uname -m )
if [ -z "$ARCH" ]; then
- case "$MARCH" in
- i?86) export ARCH=i586 ;;
- armv7hl) export ARCH=$MARCH ;;
- arm*) export ARCH=arm ;;
+ case "$(uname -m)" in
+ i?86) ARCH=i586 ;;
+ arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
# Unless $ARCH is already set, use uname -m for all other archs:
- *) export ARCH=$MARCH ;;
+ *) ARCH=$(uname -m) ;;
esac
+ export ARCH
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
fi
+NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
@@ -65,10 +77,6 @@ else
LIBDIRSUFFIX=""
fi
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
@@ -79,11 +87,9 @@ cd $SRCNAM-$VERSION || exit 1
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
+ -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# Switch the two booleans USE_QT4 and USE_QT5 to build a Qt4 version instead.
+ -exec chmod 644 {} \+
mkdir -p build
cd build
diff --git a/deps/libpwquality/.url b/deps/libpwquality/.url
deleted file mode 100644
index 24e1977..0000000
--- a/deps/libpwquality/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/libpwquality/libpwquality/releases/download/libpwquality-1.4.0/libpwquality-1.4.0.tar.bz2
diff --git a/deps/libpwquality/slack-desc b/deps/libpwquality/slack-desc
deleted file mode 100644
index 740055f..0000000
--- a/deps/libpwquality/slack-desc
+++ /dev/null
@@ -1,20 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-libpwquality: libpwquality (password quality checking library)
-libpwquality:
-libpwquality: The libpwquality library purpose is to provide common functions
-libpwquality: for password quality checking and also scoring them based on their
-libpwquality: apparent randomness.
-libpwquality: The library also provides a function for generating random
-libpwquality: passwords with good pronounceability.
-libpwquality:
-libpwquality:
-libpwquality: See also: https://github.com/libpwquality/libpwquality
-libpwquality:
-
diff --git a/deps/libqalculate/.url b/deps/libqalculate/.url
new file mode 100644
index 0000000..5bb56c9
--- /dev/null
+++ b/deps/libqalculate/.url
@@ -0,0 +1 @@
+https://github.com/Qalculate/libqalculate/releases/download/v3.10.0/libqalculate-3.10.0.tar.gz
diff --git a/deps/pcaudiolib/pcaudiolib.SlackBuild b/deps/libqalculate/libqalculate.SlackBuild
index 272e58c..60e7855 100755
--- a/deps/pcaudiolib/pcaudiolib.SlackBuild
+++ b/deps/libqalculate/libqalculate.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
-# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
+# Copyright 2020 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2020 Eric Hameleers, Eindhoven, NL
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -24,8 +24,8 @@
cd $(dirname $0) ; CWD=$(pwd)
-PKGNAM=pcaudiolib
-VERSION=${VERSION:-1.1}
+PKGNAM=libqalculate
+VERSION=${VERSION:-3.10.0}
BUILD=${BUILD:-1}
TMP=${TMP:-/tmp}
@@ -74,7 +74,7 @@ rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.gz || exit 1
+tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1
cd $PKGNAM-$VERSION || exit 1
chown -R root:root .
find -L . \
@@ -83,7 +83,7 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
-[ ! -x configure ] && ./autogen.sh
+[ ! -x configure ] && autoreconf -vif
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
@@ -91,22 +91,33 @@ CXXFLAGS="$SLKCFLAGS" \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
- --disable-static \
+ --mandir=/usr/man \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --with-libcurl \
+ --with-icu \
--build=$TARGET || exit 1
make || exit 1
make install DESTDIR=$PKG || exit 1
+# Don't ship .la files:
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
+
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
- AUTHORS CHANGELOG.md COPYING README.md \
+ AUTHORS ChangeLog COPYING NEWS README* TODO \
$PKG/usr/doc/$PKGNAM-$VERSION
# Strip binaries (if any):
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+# Compress man page(s):
+if [ -d $PKG/usr/man ]; then
+ gzip -9 $PKG/usr/man/man?/*
+fi
+
# Add a package description:
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
diff --git a/deps/libqalculate/slack-desc b/deps/libqalculate/slack-desc
new file mode 100644
index 0000000..2359d9c
--- /dev/null
+++ b/deps/libqalculate/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+libqalculate: libqalculate (desktop caculator library)
+libqalculate:
+libqalculate: Qalculate! is a multi-purpose desktop calculator.
+libqalculate: It is small and simple to use but with much power and versatility
+libqalculate: underneath. Features include customizable functions, units,
+libqalculate: arbitrary precision, plotting, command-line interface and
+libqalculate: optionally a user-friendly GTK+ interface.
+libqalculate:
+libqalculate:
+libqalculate: See also: http://qalculate.github.io/
+libqalculate:
diff --git a/deps/libsass/libsass.SlackBuild b/deps/libsass/libsass.SlackBuild
index 254f216..ed0642d 100755
--- a/deps/libsass/libsass.SlackBuild
+++ b/deps/libsass/libsass.SlackBuild
@@ -92,12 +92,15 @@ CXXFLAGS="$SLKCFLAGS" \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--mandir=/usr/man \
- --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
--build=$TARGET || exit 1
make || exit 1
make install DESTDIR=$PKG || exit 1
+# Don't ship .la files:
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
+
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
diff --git a/deps/libxkbcommon/.url b/deps/libxkbcommon/.url
deleted file mode 100644
index 9c97562..0000000
--- a/deps/libxkbcommon/.url
+++ /dev/null
@@ -1,2 +0,0 @@
-https://xkbcommon.org/download/libxkbcommon-0.8.4.tar.xz
-
diff --git a/deps/libxkbcommon/libxkbcommon.SlackBuild b/deps/libxkbcommon/libxkbcommon.SlackBuild
deleted file mode 100755
index e44da4f..0000000
--- a/deps/libxkbcommon/libxkbcommon.SlackBuild
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/bin/sh
-
-# Copyright 2015 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2015, 2017, 2018, 2019 Eric Hameleers, Eindhoven, NL
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=libxkbcommon
-VERSION=${VERSION:-0.8.4}
-BUILD=${BUILD:-1}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1
-cd $PKGNAM-$VERSION || exit 1
-chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-CFLAGS="$SLKCFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --mandir=/usr/man \
- --docdir=/usr/doc/$PKGNAM-$VERSION \
- --disable-static \
- --build=$TARGET
-
-# Build and install:
-make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Don't ship .la files:
-rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- LICENSE NEWS PACKAGING README* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-# Strip binaries (if any):
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/libxkbcommon/slack-desc b/deps/libxkbcommon/slack-desc
deleted file mode 100644
index 6e5e0ea..0000000
--- a/deps/libxkbcommon/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-libxkbcommon: libxkbcommon (library to handle keyboard descriptions)
-libxkbcommon:
-libxkbcommon: xkbcommon is a library to handle keyboard descriptions, including
-libxkbcommon: loading them from disk, parsing them and handling their state.
-libxkbcommon: It's mainly meant for client toolkits, window systems, and other
-libxkbcommon: system applications; currently that includes Wayland, kmscon,
-libxkbcommon: GTK+, Qt, Clutter, and more. It is also used by some XCB
-libxkbcommon: applications for proper keyboard support.
-libxkbcommon:
-libxkbcommon:
-libxkbcommon: Home page: http://xkbcommon.org/
diff --git a/deps/mlt/.url b/deps/mlt/.url
index 9a2e287..c2c715f 100644
--- a/deps/mlt/.url
+++ b/deps/mlt/.url
@@ -1,2 +1,2 @@
-https://github.com/mltframework/mlt/archive/v6.18.0.tar.gz
+https://github.com/mltframework/mlt/archive/v6.20.0.tar.gz
diff --git a/deps/mlt/mlt.SlackBuild b/deps/mlt/mlt.SlackBuild
index 8bf05be..e6139cb 100755
--- a/deps/mlt/mlt.SlackBuild
+++ b/deps/mlt/mlt.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
# $Id$
-# Copyright 2017, 2018, 2019 Eric Hameleers, Eindhoven, NL
+# Copyright 2017, 2018, 2019, 2020 Eric Hameleers, Eindhoven, NL
# Copyright 2017 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
@@ -27,10 +27,10 @@
cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=mlt
-VERSION=${VERSION:-6.18.0}
+VERSION=${VERSION:-6.20.0}
BUILD=${BUILD:-2}
-PYTHONSITEPKG=$(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")
+PYTHONSITEPKG=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
@@ -84,6 +84,10 @@ rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.?z* || exit 1
cd $PKGNAM-$VERSION || exit 1
+# Apply patches:
+# Make mlt compile against Qt 5.15:
+cat $CWD/patches/mlt_qt515.patch | patch -p1 --verbose || exit 1
+
# Fix bogus permissions:
chown -R root:root .
find . \
diff --git a/deps/mlt/patches/mlt_qt515.patch b/deps/mlt/patches/mlt_qt515.patch
new file mode 100644
index 0000000..edc1837
--- /dev/null
+++ b/deps/mlt/patches/mlt_qt515.patch
@@ -0,0 +1,49 @@
+From f58b44d73442986eeffec7431e59b7d19d214c1b Mon Sep 17 00:00:00 2001
+From: Heiko Becker <heirecka@exherbo.org>
+Date: Tue, 24 Mar 2020 21:17:05 +0100
+Subject: [PATCH] Fix build with Qt 5.15.0
+
+QPainterPath is no longer included via qtransform.h (since
+5.15.0-beta2, 50d2acdc93b4de2ba56eb67787e2bdcb21dd4bea in qtbase.git).
+---
+ src/modules/qt/filter_qtext.cpp | 1 +
+ src/modules/qt/graph.cpp | 1 +
+ src/modules/qt/producer_qtext.cpp | 1 +
+ 3 files changed, 3 insertions(+)
+
+diff --git a/src/modules/qt/filter_qtext.cpp b/src/modules/qt/filter_qtext.cpp
+index c3de1fadc..c3e10f1a3 100644
+--- a/src/modules/qt/filter_qtext.cpp
++++ b/src/modules/qt/filter_qtext.cpp
+@@ -21,6 +21,7 @@
+ #include <framework/mlt.h>
+ #include <framework/mlt_log.h>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QString>
+
+ static QRectF get_text_path( QPainterPath* qpath, mlt_properties filter_properties, const char* text, double scale )
+diff --git a/src/modules/qt/graph.cpp b/src/modules/qt/graph.cpp
+index 6d4d669ca..7e91bb12f 100644
+--- a/src/modules/qt/graph.cpp
++++ b/src/modules/qt/graph.cpp
+@@ -18,6 +18,7 @@
+ */
+
+ #include "graph.h"
++#include <QPainterPath>
+ #include <QVector>
+ #include <math.h>
+
+diff --git a/src/modules/qt/producer_qtext.cpp b/src/modules/qt/producer_qtext.cpp
+index 603c2b780..ff95a8e26 100644
+--- a/src/modules/qt/producer_qtext.cpp
++++ b/src/modules/qt/producer_qtext.cpp
+@@ -26,6 +26,7 @@
+ #include <QImage>
+ #include <QColor>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QFont>
+ #include <QString>
+ #include <QTextCodec>
diff --git a/deps/noto-cjk-font-ttf/.url b/deps/noto-cjk-font-ttf/.url
deleted file mode 100644
index 3314f59..0000000
--- a/deps/noto-cjk-font-ttf/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/googlefonts/noto-cjk/archive/NotoSansV2.001.tar.gz
diff --git a/deps/noto-cjk-font-ttf/70-noto-cjk.conf b/deps/noto-cjk-font-ttf/70-noto-cjk.conf
deleted file mode 100644
index c1052bb..0000000
--- a/deps/noto-cjk-font-ttf/70-noto-cjk.conf
+++ /dev/null
@@ -1,147 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-<fontconfig>
- <match target="pattern">
- <test name="lang">
- <string>ja</string>
- </test>
- <test name="family">
- <string>serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Serif CJK JP</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>ko</string>
- </test>
- <test name="family">
- <string>serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Serif CJK KR</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>zh-cn</string>
- </test>
- <test name="family">
- <string>serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Serif CJK SC</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>zh-tw</string>
- </test>
- <test name="family">
- <string>serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Serif CJK TC</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>ja</string>
- </test>
- <test name="family">
- <string>sans-serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans CJK JP</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>ko</string>
- </test>
- <test name="family">
- <string>sans-serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans CJK KR</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>zh-cn</string>
- </test>
- <test name="family">
- <string>sans-serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans CJK SC</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>zh-tw</string>
- </test>
- <test name="family">
- <string>sans-serif</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans CJK TC</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>ja</string>
- </test>
- <test name="family">
- <string>monospace</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans Mono CJK JP</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>ko</string>
- </test>
- <test name="family">
- <string>monospace</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans Mono CJK KR</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>zh-cn</string>
- </test>
- <test name="family">
- <string>monospace</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans Mono CJK SC</string>
- </edit>
- </match>
-
- <match target="pattern">
- <test name="lang">
- <string>zh-tw</string>
- </test>
- <test name="family">
- <string>monospace</string>
- </test>
- <edit name="family" mode="prepend">
- <string>Noto Sans Mono CJK TC</string>
- </edit>
- </match>
-</fontconfig>
diff --git a/deps/noto-cjk-font-ttf/HISTORY b/deps/noto-cjk-font-ttf/HISTORY
deleted file mode 100644
index 6149710..0000000
--- a/deps/noto-cjk-font-ttf/HISTORY
+++ /dev/null
@@ -1,321 +0,0 @@
--------------------
-Prior Release Notes
--------------------
-
-Noto Sans CJK 2.000 Release Notes
-==================================
-
-19 November 2018
-
-This is an update to Noto Sans CJK.
-
-Changes
-Version 2.000
-Build Date: November 2, 2018. Built By: Dr. Ken Lunde (å°æž—åŠó „). Release Date: November 19, 2018.
-Compared to the previous release—Version 1.004 that was released on 2015-06-16—a large number of chang- es were made, far too many to list here. Listed below are some of the more significant changes that were made in this release:
-• A second flavor of Traditional Chinese, for Hong Kong and supporting the HKSCS-2016 standard, was add- ed, which increased the total number of font resources by 16, from 72 to 88.
-• 155 new mappings have been added to the CMap resources. 66 are from BMP code points, 22 are from Plane 1 code points, and the remaining 67 are from Plane 2 code points. Among the 67 new Plane 2 code points, 57 are from Extension B, two are from Extension C, three are from Extension E, and the remaining five are from Extension F.
-• As a result of removing approximately 1,750 glyphs in order to make room for approximately 1,750 new glyphs, the CID assignments of the glyphs necessarily—and drastically—changed. The CID assignments of exactly 200 glyphs are unchanged from Version 1.004: 0–107, 2570–2633, 47223–47232, 47262–47272, 47281–47286, and 65484.
-• The Traditional Chinese form of the Radical #162 辶 component was improved.
-• The URO is complete up through U+9FEF (Unicode Version 11.0).
-• The glyphs for some of the kana were tweaked.
-• The glyphs and support for bopomofo, along with their tone marks, were improved. This involved adding the 'GDEF' (Glyph Definition) table, the 'mark' (Mark Positioning) GPOS feature, and the 'ruby' (Ruby Nota- tion Forms) GSUB feature.
-• The language and script declarations in the 'locl' and 'vert' GSUB features were improved.
-• The 13-page glyph synopsis PDFs for the 500 pre-composed high-frequency hangul syllables have been incorporated into the Unicode-base glyph synopsis PDFs, and are bookmarked under the “Korean†book- mark.
-• Placeholder glyphs for U+32FF, uni32FF (CID+2184) and uni32FF-V (CID+65359), are included. This character has been reserved for the two-ideograph square ligature that represents the name of Japan’s forthcoming new era which starts on 2019-05-01, and will be the only character added in Unicode Version 12.1.
-• Like Source Han Serif, the CIDFont and CMap resources do not include XUID arrays.
-• Like Source Han Serif, there are no mappings for the range U+0000 through U+001F.
-• Like Source Han Serif, the code points that correspond to Halfwidth Jamo variants map to glyphs that cor- respond to code points in the Hangul Compatibility Jamo block. In other words, the glyphs for half-width jamo have been removed.
-• Like Source Han Serif, the 'name' table does not includes any Macintosh (PlatformID=1) strings.
-• Like Source Han Serif, the Regular weight is now style-linked to the Bold weight. This means that the Bold weight may not appear in the font menu, particularly when using applications that support style-linking as a way to make text bold.
-• Like Source Han Serif, the 'vert' GPOS feature is included.
-• Like Source Han Serif, the deprecated 'hngl' (Hangul) GSUB feature is not included in the Korean fonts and font instances.
-
-
-Known Issues
-Please report all issues in the GitHub repository so that they can be properly tracked and addressed, and for greater visibility among the user community. The Wiki also conveys some useful information about upcoming releases. Also, be sure to thoroughly check the closed issues prior to submitting a new issue, being sure to exercise the search feature.
-Because these fonts exercise several architectural limits, particularly the ones that include 65,535 glyphs, some environments may have difficulties using them properly, sometimes due to implementation limits or poor assumptions. If this is the case, please report such issues so that they can be recorded and tracked. You are also strongly encouraged to contact the developer of such environments to report the same.
-
-General
-• While not an issue per se, all of the fonts include placeholder (aka blank) glyphs for U+32FF, uni32FF (CID+2184) and uni32FF-V (CID+65359), which is the code point that has been reserved for the two-ideo- graph square ligature form of the name of Japan’s forthcoming new era that takes effect on 2019-05-01. U+32FF is expected to be included in Unicode Version 12.1. The purpose of including the placeholder glyphs is to facilitate a dot-release shortly after the official announcement of the era name is made.
-• The glyphs for the four CJK Unified Ideographs Extension G ideographs, which are made accessible via the 'ccmp' GSUB feature using their IDSes, will be mapped from the appropriate Plane 3 code points as soon as their code points have been deemed stable enough to implement.
-
-
-Noto Serif CJK 1.001 Release Notes
-==================================
-
-May 8, 2017
-
-This is an update to Noto Serif CJK 1.000. It was built by Dr. Ken Lunde (å°æž—åŠó „)
-on May 1, 2017 and released on May 8, 2017.
-
-
-General Notes
-
-• The OS/2.usWeightClass value for ExtraLight was changed from 250 to 200.
-See https://github.com/googlei18n/noto-cjk/issues/86/ .
-
-• Mappings for U+3164 and U+2D544 (Extension F) were added to all CMap resources,
-and the Adobe-Japan1 IVS <U+2D544,U+E0100> was added to the Japanese IVS definition
-file, SourceHanSerif_JP_sequences.txt.
-See https://github.com/adobe-fonts/source-han-serif/issues/37/ .
-
-• The glyphs for U+2EC1 â», U+2EEA ⻪, U+2F2C å±®, and U+4EBD 亽 now map to
-uni864EuE0101-JP, uni9EFE-CN, uni5C6E-CN, and uni4EBD-CN, respectively, in
-all CMap resources.
-See https://github.com/adobe-fonts/source-han-serif/issues/37/ .
-
-• The glyphs for the 52 half-width jamo—U+FFA0 through U+FFBE, U+FFC2 through U+FFC7,
-U+FFCA through U+FFCF, U+FFD2 through U+FFD7, and U+FFDA through U+FFDC—now map to
-the glyphs for compatibility jamo (U+3131 through U+3164).
-
-• The alternate proportional digits and punctuation, along with the alternate
-half-width punctuation, were added to the scope of the ‘fwid’, ‘hwid’, and ‘pwid’ GSUB features.
-
-Simplified Chinese
-
-• CN glyphs for U+35EB ã—«, U+385C ã¡œ, U+5015 倕, U+57F5 埵, U+618F æ†, U+63EF æ¯, U+6456 æ‘–, U+6660 æ™ ,
-U+66A9 暩, U+68B1 梱, U+6F08 漈, U+76E4 盤, U+7808 砈, U+78DC 磜, U+7A07 稇, U+7A44 穄, U+7BA0 箠,
-U+83D9 è™, U+92EE é‹®, U+9318 錘, U+969B éš›, U+9BCE 鯎, and U+9C36 é°¶ were added.
-See https://github.com/adobe-fonts/source-han-serif/issues/40/.
-
-• The glyphs for U+2F22 夊, U+2F58 爻, U+4F8D ä¾, U+62FF æ‹¿, U+6301 æŒ, U+6641 æ™, U+6C35 æ°µ, U+6DE6 æ·¦,
-U+6DFC 淼, U+6EB4 溴, and U+81EC 臬 now map to uni590A-CN, uni723B-CN, uni4F8D-JP, uni62FF-JP,
-uni6301-JP, uni6641-JP, uni6C35-JP, uni6DE6-JP, uni6DFC-JP, uni6EB4-JP, and uni81EC-JP, respectively.
-See https://github.com/adobe-fonts/source-han-serif/issues/37/.
-
-• The CN glyphs uni3E76-CN, uni414D-CN, uni4A60-CN, uni4BD5-CN, uni4C53-CN, uni4F5B-CN, uni4FB9-CN,
-uni596E-CN, uni5957-CN, uni5A17-CN, uni5EAD-CN, uni5EF7-CN, uni5F73-CN, uni602B-CN, uni62C2-CN,
-uni633A-CN, uni6883-CN, uni6C11-CN, uni6C1F-CN, uni6CB8-CN, uni6D8F-CN, uni6E88-CN, uni70F6-CN,
-uni73FD-CN, uni7829-CN, uni7D8E-CN, uni7ECB-CN, uni8121-CN, uni8247-CN, uni8713-CN, uni8A94-CN,
-uni8B04-CN, uni92CC-CN, uni94E4-CN, uni95AE-CN, uni9F2E-CN, uniFF1B-CN, uniFE14-CN, and u2CD9F-CN
-were tweaked or corrected.
-See https://github.com/adobe-fonts/source-han-serif/issues/36/ and
-https://github.com/adobe-fonts/source-han-serif/issues/39/.
-
-Traditional Chinese—TW
-
-• TW glyphs for U+4FB9 ä¾¹, U+5EAD 庭, U+5EF7 å»·, U+633A 挺, U+6883 梃, U+6D8F æ¶, U+6DEB æ·«, U+73FD ç½,
-U+7D8E 綎, U+7F54 罔, U+8713 蜓, U+8DA3 趣, U+92CC 鋌, U+95AE 閮, and U+9832 頲 were added.
-See https://github.com/adobe-fonts/source-han-serif/issues/40/.
-
-• The glyphs for U+2F61 瓦, U+2FCC 黽, U+504F å, U+5553 å•“, U+555F å•Ÿ, U+58F3 壳, U+58FE 壾, U+591A 多,
-U+61DC 懜, U+627F 承, U+6902 椂, U+6903 椃, U+6947 楇, U+7171 煱, U+76EC 盬, U+77A2 瞢, U+77D2 矒,
-U+8019 耙, U+803B 耻, U+8B04 謄, and U+9BF1 鯱 now map to uni74E6-JP, uni9EFD-JP, uni504FuE0101-JP,
-uni5553uE0101-JP, uni555F-JP, uni58F3-JP, uni58FE-JP, uni591A-JP, uni61DC-JP, uni627F-JP, uni6902-JP,
-uni6903-JP, uni6947-JP, uni7171-JP, uni76EC-CN, uni77A2uE0101-JP, uni77D2-JP, uni8019-JP, uni803B-JP,
-uni8B04-CN, and uni9BF1-JP, respectively.
-See https://github.com/adobe-fonts/source-han-serif/issues/37/.
-
-• The glyphs uni511A-TW, uni5922-TW, uni5A6C-TW, uni5FB5-TW, uni61F5-TW, uni750B-TW, uni750D-TW,
-uni7AC5-TW, uni7D73-TW, uni83E1-TW, uni858E-TW, uni85A8-TW, uni8609-TW, uni9138-TW, uni91C5-TW, and
-uniFF0C-TW were tweaked or corrected.
-See https://github.com/adobe-fonts/source-han-serif/issues/36/ and
-https://github.com/adobe-fonts/source-han-serif/issues/39/.
-
-Japanese
-
-• The JP glyphs uni3CDA-JP, uni3D93-JP, uni507D-JP, uni5316uE0101-JP, uni595C-JP, uni6C2B-JP, uni70BA-JP,
-uni7669-JP, uni81F7-JP, uni8285-JP, uni82B1uE0101-JP, and uni9B58-JP were tweaked or corrected.
-See https://github.com/adobe-fonts/source-han-serif/issues/36/ and
-https://github.com/adobe-fonts/source-han-serif/issues/39/.
-
-• The glyphs for a small number of kana, to include annotated versions thereof, were tweaked in very minor
-ways.
-
-Korean
-
-• The glyphs for U+5173 关 and U+5BE7 寧 now map to uni5173-CN and uni5BE7uE0100-JP, respectively.
-See https://github.com/adobe-fonts/source-han-serif/issues/37/.
-
-• The glyphs uniC625, uniC73D, uni1178, uni118C.vjmo01, uni1190.vjmo01, uni1192.vjmo01, uni11ED,
-uni11ED.tjmo01, uni11ED.tjmo02, uni11ED.tjmo03, uni11ED.tjmo04, uniD7B5, uniD7B5.vjmo01,
-uniD7F5, uniD7F5.tjmo01, uniD7F5.tjmo02, uniD7F5.tjmo03, uniD7F5.tjmo04, uniD7F6, uniD7F6.tjmo01,
-uniD7F6.tjmo02, uniD7F6.tjmo03, uniD7F6.tjmo04, uni1112uni119Euni11D9, uni1140uni1175uni11D9, and
-uni114Cuni116Funi11D9 were corrected.
-See https://github.com/adobe-fonts/source-han-serif/issues/39/.
-
-• The no-op uni115F to uni115F substitutions were removed from the six “ljmo_0n†lookups, referenc-
-es to uni115F were removed from the six “ljmo_xxxxxx†lookups, and glyph classes are now used for the
-“ljmo_xxxxxx,†“vjmo_xxxxxx,†and “tjmo_xxxxxx†lookups.
-
-Noto Serif CJK 1.000 Release Notes
-==================================
-
-April 4, 2017 (addendum)
-
-Please note that due to GitHub restrictions the all-in-one Serif .ttc is not
-available via this repo as it exceeds the 100MB GitHub limit. Please use the
-links under "Super OpenType/CFF Collection (Super OTC)" on this page instead:
-http://www.google.com/get/noto/help/cjk
-
-
-April 3, 2017
-
-Introducing Noto Serif CJK 1.000
-
-This introduces a serif-style companion to Noto Sans CJK. These fonts are again
-offered in seven weights, though they are slightly different-- ExtraLight,
-Light, Regular, Medium, SemiBold, Bold, and Black. Unlike the Sans there are no
-monospace (ASCII-only) versions of these fonts.
-
-The packaging options are the same as for the Sans: you can choose from an
-all-in-one CJK TTC, seven weight-specific CJK TTCs, twenty-eight CJK OTF files
-(four languages x seven weights) that default to one of the four supported
-languages, and twenty-eight region-specific OTF files (four regions x seven
-weights) that support a region-specific subset of the full character repertoire.
-
-The character repertoire is shared among all the Serif CJK fonts but there are
-slight differences between them and the Sans CJK. About 50 characters, mostly
-new in Unicode 8.0 and 9.0, have been added, and about 1700 Plane 2 characters
-(mostly CJK Unified Ideographs Extension B) have been temporarily removed (Hong
-Kong support will be added in Version 2.000). The Serif CJK fonts support
-approximately 43,000 characters with 65535 glyphs, the maximum number of glyphs
-possible in a single font. Most of the additional glyphs are regional variants,
-there are also specific japanese variants, ideographic variation sequences,
-vertical variants, precomposed Korean Jamo, and others.
-
-As with Sans CJK, Noto Serif CJK was developed under an open source license by
-Adobe Systems, Inc. and is almost identical to their Source Han Serif. Please
-see the detailed Adobe release notes for more information.
-
-Noto Serif CJK is licensed under the SIL Open Font License, Version 1.1.
-
-
-Noto Sans CJK 1.004 Release Notes
-=================================
-
-June 15, 2015
-
-- Restore correct vertical Japanese Kana forms
-
-The vertical kana glyphs that are made accessible via the 'vert' GSUB feature were
-inadvertently reverted to their Version 1.000 forms (except for those that were added in
-Version 1.002, meaning CIDs 65496 through 65505) in Version 1.002, which affected CIDs
-65166 through 65251, 65256 through 65258, 65260 through 65352, 65354 through 65369, and
-65471 through 65484. The correct forms, which were present in Version 1.001, are now
-included.
-
-
-Noto Sans CJK 1.003 Release Notes
-=================================
-
-June 8, 2015
-
-- Regularized the vertical metrics across all weights by setting the O/2.uWinAscent and
- O/2.uWinDescent values to 1160 and 320 respectively and using those sames values in the
- horizontal header (hhea) table.
-- The ‘locl’ GSUB feature was reconfigured to be usable in a broader range of contexts.
-
-
-Noto Sans CJK 1.002 Release Notes
-=================================
-
-April 20, 2015
-
-This release includes a license change, the addition of several new font instances, and a
-number of bug fixes.
-
-----------------------
-License Change
-----------------------
-The open source license is changed from Apache License, Version 2.0 to SIL Open Font
-License, Version 1.1.
-
----------------------------
-New Font Instances
----------------------------
-In total eight (4 languages x 2 weights) monospaced half-width OTF fonts were added, in
-regular and bold weights.
-
- - Noto Sans Mono CJK SC Regular and Bold
- - Noto Sans Mono CJK JP Regular and Bold
- - Noto Sans Mono CJK KR Regular and Bold
- - Noto Sans Mono CJK TC Regular and Bold
-
-The monospace fonts differ from the existing ones only in that the default (encoded)
-glyphs for ASCII (U+0020 to U+007E), U+00A0 ( ), U+00A5 (¥), U+2011 (‑), and U+20A9 (₩)
-are half-width instead of proportional.
-
-The new monospace fonts can be found in:
- - All-in-one CJK super OTC font (now includes 36 font instances)
- - CJK OTF fonts with different default language (two additional font instances for each
- language)
- - NotoSansCJK-Regular.ttc and NotoSansCJK-Bold.ttc (four additional font instances in
- each)
-
-Although eight new font instances were added, the footprint of the super OTC only
-increased by 1M or so, mainly due to the four additional 'cmap' tables. Two of the seven
-OTC now contain eight font instances.
-
---------------
-Bug Fixes
---------------
-The Noto issues that have been fixed include:
-
- - https://code.google.com/p/noto/issues/detail?id=74
- - https://code.google.com/p/noto/issues/detail?id=126
- - https://code.google.com/p/noto/issues/detail?id=136
- - https://code.google.com/p/noto/issues/detail?id=151
- - https://code.google.com/p/noto/issues/detail?id=182
- - https://code.google.com/p/noto/issues/detail?id=193
- - https://code.google.com/p/noto/issues/detail?id=266
-
-In addition to the issues tracked at code.google.com/p/noto/issues, there are also a
-number of fixes to issues tracked at https://github.com/adobe-fonts/source-han-sans.
-Please find the details in the release notes for Source Han Sans.
-
-
-Noto Sans CJK 1.001 Release Notes
-=================================
-
-September 12, 2014
-
-With this release there have been a number of bug fixes and some
-reorganization of the packages. The package reorganization carries with it
-a small name change that affects the name of the file, menu name, and the
-internal PostScript name of the original OTF format font. This is a one
-time name change only and names will be stable going forward.
-
-Bug Fixes
----------
-There have been a number of fixes but the two most obvious ones are the fix
-in the alignment of the traditional Chinese punctuation and adjustment of
-the designs used for traditional Chinese to align better for usage in Hong
-Kong.
-
-https://code.google.com/p/noto/issues/detail?id=38
-https://code.google.com/p/noto/issues/detail?id=54
-
-Package Reorganization
-----------------------
-With this release there was an expansion in the number of file formats and
-combinations in which the fonts are being made available.
-
-There are now four major groups of font files by package in this release.
-These are:
-
-* Super OpenType Collection (Super OTC)
- - This is a new format this release that bundles all 7 weights for all 4
- languages into one large font resource. It is smaller overall than
- the combination of the 28 fonts that would be used otherwise because
- of resource sharing and it is much easier to install.
-
-* OpenType Collection (OTC)
- - Each OTC fully supports each of the four languages. There are 7 of these
- with one for each weight.
-
-* Language Specific OTF
- - Each font file supports each of the four languages by using the OpenType
- ‘locl’ feature. However, by default, when the ‘locl’ feature is not
- used, each font file supports a specific language. That means that
- there are 28 font files - 4 languages x 7 weights.
- - This format of 4 language specific variants is new with this release and
- replaces the previous single language variant that required the use of
- the ‘locl’ feature. This is where the name change occurred as we now
- tag the various versions with the name of the default language.
-
-* Region Specific OTF subsets
- - Each font file supports a region specific subset of the full fonts.
- These contain only the glyphs needed for the specific region. There
- are 28 of these font files - 4 languages x 7 weights.
diff --git a/deps/noto-cjk-font-ttf/LICENSE b/deps/noto-cjk-font-ttf/LICENSE
deleted file mode 100644
index d952d62..0000000
--- a/deps/noto-cjk-font-ttf/LICENSE
+++ /dev/null
@@ -1,92 +0,0 @@
-This Font Software is licensed under the SIL Open Font License,
-Version 1.1.
-
-This license is copied below, and is also available with a FAQ at:
-http://scripts.sil.org/OFL
-
------------------------------------------------------------
-SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
------------------------------------------------------------
-
-PREAMBLE
-The goals of the Open Font License (OFL) are to stimulate worldwide
-development of collaborative font projects, to support the font
-creation efforts of academic and linguistic communities, and to
-provide a free and open framework in which fonts may be shared and
-improved in partnership with others.
-
-The OFL allows the licensed fonts to be used, studied, modified and
-redistributed freely as long as they are not sold by themselves. The
-fonts, including any derivative works, can be bundled, embedded,
-redistributed and/or sold with any software provided that any reserved
-names are not used by derivative works. The fonts and derivatives,
-however, cannot be released under any other type of license. The
-requirement for fonts to remain under this license does not apply to
-any document created using the fonts or their derivatives.
-
-DEFINITIONS
-"Font Software" refers to the set of files released by the Copyright
-Holder(s) under this license and clearly marked as such. This may
-include source files, build scripts and documentation.
-
-"Reserved Font Name" refers to any names specified as such after the
-copyright statement(s).
-
-"Original Version" refers to the collection of Font Software
-components as distributed by the Copyright Holder(s).
-
-"Modified Version" refers to any derivative made by adding to,
-deleting, or substituting -- in part or in whole -- any of the
-components of the Original Version, by changing formats or by porting
-the Font Software to a new environment.
-
-"Author" refers to any designer, engineer, programmer, technical
-writer or other person who contributed to the Font Software.
-
-PERMISSION & CONDITIONS
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the Font Software, to use, study, copy, merge, embed,
-modify, redistribute, and sell modified and unmodified copies of the
-Font Software, subject to the following conditions:
-
-1) Neither the Font Software nor any of its individual components, in
-Original or Modified Versions, may be sold by itself.
-
-2) Original or Modified Versions of the Font Software may be bundled,
-redistributed and/or sold with any software, provided that each copy
-contains the above copyright notice and this license. These can be
-included either as stand-alone text files, human-readable headers or
-in the appropriate machine-readable metadata fields within text or
-binary files as long as those fields can be easily viewed by the user.
-
-3) No Modified Version of the Font Software may use the Reserved Font
-Name(s) unless explicit written permission is granted by the
-corresponding Copyright Holder. This restriction only applies to the
-primary font name as presented to the users.
-
-4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
-Software shall not be used to promote, endorse or advertise any
-Modified Version, except to acknowledge the contribution(s) of the
-Copyright Holder(s) and the Author(s) or with their explicit written
-permission.
-
-5) The Font Software, modified or unmodified, in part or in whole,
-must be distributed entirely under this license, and must not be
-distributed under any other license. The requirement for fonts to
-remain under this license does not apply to any document created using
-the Font Software.
-
-TERMINATION
-This license becomes null and void if any of the above conditions are
-not met.
-
-DISCLAIMER
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
-COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/deps/noto-cjk-font-ttf/NEWS b/deps/noto-cjk-font-ttf/NEWS
deleted file mode 100644
index cf9449a..0000000
--- a/deps/noto-cjk-font-ttf/NEWS
+++ /dev/null
@@ -1,40 +0,0 @@
-Noto Sans CJK 2.001 Release Notes
-==================================
-
-April 9, 2019
-
-This is an update to Noto Sans CJK.
-
-Changes
-Version 2.001
-Build Date: April 4, 2019. Built By: Dr. Ken Lunde (å°æž—åŠó „). Release Date: April 9, 2019.
-
-Listed below are the changes that were made in this release:
-• The copyright year was changed from “2014, 2015, 2018†to the range “2014–2019.â€
-• The placeholder (aka blank) glyphs for U+32FF ㋿, uni32FF-JP (CID+2184) and uni32FF-JP-V (CID+65359),
-which is the code point that represents the two-ideograph square ligature form of the name of Japan’s
-forthcoming new era, 令和 (reiwa), that takes effect on 2019-05-01, are now the actual glyphs. U+32FF will
-be included in Unicode Version 12.1 (2019-05-07).
-• All of the mapping changes that were made to the fonts in this release are provided in the table at the beginning of Issue #202 <https://github.com/adobe-fonts/source-han-sans/issues/202>.
-• All of the glyph corrections that were made to the fonts in this release are provided in the table at the beginning of Issue #204.
-• All of the glyphs that were redesigned in this release are provided in the table at the beginning of Issue #205 <https://github.com/adobe-fonts/source-han-sans/issues/205>.
-• The 45 glyphs that were added in this release, which replaced 45 of the 50 reserved glyphs, are provided in
-the table at the beginning of Issue #206. The glyphs are at CIDs 65485 through 65529. Two of the new glyphs
-are mapped from code points that are now supported.
-• Miscellaneous changes that were made in this release are provided in the table at the beginning of Issue #207 <https://github.com/adobe-fonts/source-han-sans/issues/207>.
-• The following 33 glyphs for ideographs are no longer used, and are expected to be removed in Version 3.000
-(currently unplanned and unscheduled): uni58A6-TW (CID+13852), uni5B0F-TW (CID+15204), uni5B38-TW
-(CID+15300), uni5D45-TW (CID+16313), uni5D93-TW (CID+16476), uni5E61-TW (CID+16819), uni61BE-TW
-(CID+18366), uni64BC-TW (CID+19658), uni6937-TW (CID+21605), uni69F9-CN (CID+21965), uni7158-TW
-(CID+25284), uni71D4-TW (CID+25554), uni720B-JP (CID+25667), uni756A-TW (CID+27154), uni7690-CN
-(CID+27719), uni78FB-TW (CID+28713), uni7BB4-TW (CID+30074), uni7C53-TW (CID+30421), uni7DD8-TW
-(CID+31252), uni7E59-TW (CID+31534), uni7FB3-TW (CID+32075), uni81B0-TW (CID+33147), uni8543-TW
-(CID+35181), uni85E9-TW (CID+35584), uni87E0-TW (CID+36504), uni8B52-TW (CID+38257), uni8B85-TW
-(CID+38372), uni8E6F-TW (CID+39481), uni8F53-TW (CID+39883), uni8F57-TW (CID+39895), uni9407-TW
-(CID+42337), uni9C55-TW (CID+45975), and u24A01-KR (CID+60576).
-• The seven per-weight glyph synopsis PDFs now include 2,090 pages, with the first 132 pages showing all
-65,535 glyphs indexed by CID.
-
-Noto Sans CJK is licensed under the SIL Open Font License, Version 1.1.
-
-See HISTORY for prior release notes.
diff --git a/deps/noto-cjk-font-ttf/noto-cjk-font-ttf.SlackBuild b/deps/noto-cjk-font-ttf/noto-cjk-font-ttf.SlackBuild
deleted file mode 100755
index 75f65e9..0000000
--- a/deps/noto-cjk-font-ttf/noto-cjk-font-ttf.SlackBuild
+++ /dev/null
@@ -1,83 +0,0 @@
-#!/bin/sh
-
-# Copyright 2015, 2018, 2020 Eric Hameleers, Eindhoven, NL
-# Copyright 2015, 2018, 2020 Patrick J. Volkerding, Sebeka, MN USA
-# All rights reserved.
-#
-# Permission to use, copy, modify, and distribute this software for
-# any purpose with or without fee is hereby granted, provided that
-# the above copyright notice and this permission notice appear in all
-# copies.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
-# CONTRIBUTORS 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.
-# -----------------------------------------------------------------------------
-
-
-PRGNAM=noto-cjk-font-ttf
-SANS=NotoSansCJK
-SERIF=NotoSerifCJK-Regular
-VERSION=${VERSION:-"2.001"}
-ARCH=noarch
-BUILD=${BUILD:-1}
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PRGNAM
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-
-FONTDIR="/usr/share/fonts/TTF"
-mkdir -p $PKG$FONTDIR
-
-# Unzip the ZIP file with the Super OTC font:
-unzip $CWD/${SANS}.ttc.zip -d $PKG$FONTDIR || exit 1
-rm -rf $PKG$FONTDIR/__MACOSX || exit 1
-# Copy the Serif font:
-install -m0644 $CWD/${SERIF}.ttc $PKG$FONTDIR/${SERIF}.ttc || exit 1
-chown -R root:root $PKG$FONTDIR
-chmod -R u+w,go+r-w,a+rX-st $PKG$FONTDIR
-
-# Add a font configuration file (taken from Arch repository):
-install -Dm644 $CWD/70-noto-cjk.conf -t $PKG/etc/fonts/conf.avail
-
-# Post-install script:
-mkdir -p $PKG/install
-cat << EOT > $PKG/install/doinst.sh
-# Update X font indexes and the font cache:
-if [ -x usr/bin/mkfontdir ]; then
- chroot . /usr/bin/mkfontscale $FONTDIR
- chroot . /usr/bin/mkfontdir $FONTDIR
-fi
-if [ -x usr/bin/fc-cache ]; then
- chroot . /usr/bin/fc-cache $FONTDIR
-fi
-EOT
-
-# Add documentation:
-# Files downloaded from https://github.com/googlei18n/noto-cjk
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a \
- $CWD/HISTORY $CWD/LICENSE $CWD/NEWS $CWD/README* \
- $PKG/usr/doc/$PRGNAM-$VERSION
-find $PKG/usr/doc -type f -exec chmod 644 {} \;
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txz
-
diff --git a/deps/noto-cjk-font-ttf/slack-desc b/deps/noto-cjk-font-ttf/slack-desc
deleted file mode 100644
index 92f61a8..0000000
--- a/deps/noto-cjk-font-ttf/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-noto-cjk-font-ttf: noto-cjk-font-ttf (Google's Noto CJK TrueType fonts)
-noto-cjk-font-ttf:
-noto-cjk-font-ttf: Noto CJK 'Super OTC' font: This packaging form carries the fonts for
-noto-cjk-font-ttf: each of Simplified Chinese, Traditional Chinese, Japanese, and
-noto-cjk-font-ttf: Korean multiplied by all 7 weights for each in one single font file.
-noto-cjk-font-ttf: In addition, each language provides monospace versions in Regular
-noto-cjk-font-ttf: and Bold weights. Once installed it will appear in font menus
-noto-cjk-font-ttf: as 36 separate fonts. This format is the easiest to install of all
-noto-cjk-font-ttf: the formats and takes the least space due to sharing between
-noto-cjk-font-ttf: the 36 pieces.
-noto-cjk-font-ttf: noto-cjk-font-ttf home: https://github.com/googlei18n/noto-cjk
diff --git a/deps/noto-font-ttf/.url b/deps/noto-font-ttf/.url
deleted file mode 100644
index d44d13e..0000000
--- a/deps/noto-font-ttf/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/googlei18n/noto-fonts/archive/v2015-09-29-license-adobe.tar.gz
diff --git a/deps/noto-font-ttf/noto-font-ttf.SlackBuild b/deps/noto-font-ttf/noto-font-ttf.SlackBuild
deleted file mode 100755
index e9807a2..0000000
--- a/deps/noto-font-ttf/noto-font-ttf.SlackBuild
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/bin/sh
-
-# Copyright 2015, 2016 Eric Hameleers, Eindhoven, NL
-# Copyright 2015 Patrick J. Volkerding, Sebeka, MN USA
-# All rights reserved.
-#
-# Permission to use, copy, modify, and distribute this software for
-# any purpose with or without fee is hereby granted, provided that
-# the above copyright notice and this permission notice appear in all
-# copies.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
-# CONTRIBUTORS 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.
-# -----------------------------------------------------------------------------
-
-
-PRGNAM=noto-font-ttf
-SRCNAM=noto-fonts
-SRCVER=${SRCVER:-"2015-09-29"}
-VERSION=$(echo $SRCVER | tr - _)
-ARCH=noarch
-BUILD=${BUILD:-2}
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PRGNAM
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-
-# Font directory location depends on the X build prefix:
-# Determine what X we're running (the modular X returns the prefix
-# in the next command, while older versions stay silent):
-XPREF=$(pkg-config --variable=prefix x11)
-if [ "$XPREF" = "" ]; then
- XPREF='/usr/X11R6'
- FONTDIR="$XPREF/lib/X11/fonts/TTF"
-else
- FONTDIR="/usr/share/fonts/TTF"
-fi
-mkdir -p $PKG$FONTDIR
-
-cd $TMP
-rm -rf ${PRGNAM}-${SRCVER}
-mkdir ${PRGNAM}-${SRCVER}
-cd ${PRGNAM}-${SRCVER}
-tar xvf $CWD/${SRCNAM}-${SRCVER}-license-adobe.tar.gz || exit 1
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-cd ${SRCNAM}-${SRCVER}-license-adobe
-
-# Install just the hinted fonts - unhinted fonts for Android and Mac;
-# Android and Mac ignore hinting information embedded in fonts:
-cp -a hinted/*.{ttf,ttc} $PKG$FONTDIR/
-chmod 644 $PKG$FONTDIR/*
-
-# Post-install script:
-mkdir -p $PKG/install
-cat << EOT > $PKG/install/doinst.sh
-# Update X font indexes and the font cache:
-if [ -x .$XPREF/bin/mkfontdir ]; then
- chroot . $XPREF/bin/mkfontscale $FONTDIR
- chroot . $XPREF/bin/mkfontdir $FONTDIR
-fi
-if [ -x .$XPREF/bin/fc-cache ]; then
- chroot . $XPREF/bin/fc-cache $FONTDIR
-fi
-EOT
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
-cp -a \
- FAQ.md LICENSE README.md \
- $PKG/usr/doc/$PRGNAM-$VERSION
-find $PKG/usr/doc -type f -exec chmod 644 {} \;
-
-# Add a package description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Build the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/${PRGNAM}-${VERSION}-${ARCH}-${BUILD}.txz
-
diff --git a/deps/noto-font-ttf/slack-desc b/deps/noto-font-ttf/slack-desc
deleted file mode 100644
index 47b1faf..0000000
--- a/deps/noto-font-ttf/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-noto-font-ttf: noto-font-ttf (Google's Noto TrueType fonts)
-noto-font-ttf:
-noto-font-ttf: Noto's goal is to provide a beautiful reading experience for all
-noto-font-ttf: languages. Currently, Noto covers all major languages of the world
-noto-font-ttf: and many others, including European, African, Middle Eastern, Indic,
-noto-font-ttf: South and Southeast Asian, Central Asian, American, and East Asian
-noto-font-ttf: languages. Support for Simplified Chinese, Traditional Chinese,
-noto-font-ttf: Japanese, and Korean was first added in July 2014.
-noto-font-ttf: All Noto fonts are included, except CJK and Emoji.
-noto-font-ttf:
-noto-font-ttf: noto-font-ttf home: https://github.com/googlei18n/noto-fonts
diff --git a/deps/opencv/opencv.SlackBuild b/deps/opencv/opencv.SlackBuild
index dc473ed..8b0202b 100755
--- a/deps/opencv/opencv.SlackBuild
+++ b/deps/opencv/opencv.SlackBuild
@@ -99,7 +99,7 @@ cd build
-DCMAKE_BUILD_TYPE="Release" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DINSTALL_MAN_DIR=man \
- -DINSTALL_DOC_DIR=doc/$PRGNAM-$VERSION \
+ -DINSTALL_DOC_DIR=doc/$PKGNAM-$VERSION \
-DSYSCONF_INSTALL_DIR=/etc \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
-DLIB_INSTALL_DIR=/usr/lib${LIBDIRSUFFIX} \
diff --git a/deps/pcaudiolib/.url b/deps/pcaudiolib/.url
deleted file mode 100644
index 0244645..0000000
--- a/deps/pcaudiolib/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/espeak-ng/pcaudiolib/archive/1.1.tar.gz
diff --git a/deps/pcaudiolib/slack-desc b/deps/pcaudiolib/slack-desc
deleted file mode 100644
index 91f2646..0000000
--- a/deps/pcaudiolib/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-pcaudiolib: pcaudiolib (Portable C Audio Library)
-pcaudiolib:
-pcaudiolib: pcaudiolib is a portable C Audio Library.
-pcaudiolib:
-pcaudiolib:
-pcaudiolib:
-pcaudiolib:
-pcaudiolib:
-pcaudiolib:
-pcaudiolib: Homepage: https://github.com/espeak-ng/pcaudiolib
-pcaudiolib:
diff --git a/deps/pipewire/.url b/deps/pipewire/.url
new file mode 100644
index 0000000..c4ce81d
--- /dev/null
+++ b/deps/pipewire/.url
@@ -0,0 +1 @@
+https://gitlab.freedesktop.org/pipewire/pipewire/-/archive/0.3.8/pipewire-0.3.8.tar.bz2
diff --git a/deps/pipewire/doinst.sh b/deps/pipewire/doinst.sh
new file mode 100644
index 0000000..5076597
--- /dev/null
+++ b/deps/pipewire/doinst.sh
@@ -0,0 +1,15 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+config etc/pipewire/pipewire.conf.new
+
diff --git a/deps/libpwquality/libpwquality.SlackBuild b/deps/pipewire/pipewire.SlackBuild
index bbfbd18..87cdc60 100755
--- a/deps/libpwquality/libpwquality.SlackBuild
+++ b/deps/pipewire/pipewire.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
-# Copyright 2017 Eric Hameleers, Eindhoven, NL
-# Copyright 2017 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2020 Eric Hameleers, Eindhoven, NL
+# Copyright 2020 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for
@@ -24,13 +24,11 @@
# -----------------------------------------------------------------------------
-PKGNAM=libpwquality
-VERSION=${VERSION:-1.4.0}
-BUILD=${BUILD:-1}
+cd $(dirname $0) ; CWD=$(pwd)
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
+PKGNAM=pipewire
+VERSION=${VERSION:-0.3.8}
+BUILD=${BUILD:-1}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -43,17 +41,22 @@ if [ -z "$ARCH" ]; then
export ARCH
fi
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
case "$ARCH" in
- i?86) SLKCFLAGS="-O2 -march=$ARCH -mtune=i686"
+ i?86) SLKCFLAGS="-O2 -march=${ARCH} -mtune=i686"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
x86_64) SLKCFLAGS="-O2 -fPIC"
SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
;;
- armv7hl) SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
- SLKLDFLAGS=""; LIBDIRSUFFIX=""
- ;;
- armv6hl) SLKCFLAGS="-O2 -march=armv6 -mfpu=vfp -mfloat-abi=hard"
+ arm*) SLKCFLAGS="-O2"
SLKLDFLAGS=""; LIBDIRSUFFIX=""
;;
*) SLKCFLAGS=${SLKCFLAGS:-"O2"}
@@ -66,48 +69,56 @@ case "$ARCH" in
*) TARGET=$ARCH-slackware-linux ;;
esac
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
rm -rf $PKG
mkdir -p $TMP $PKG
+
cd $TMP
rm -rf $PKGNAM-$VERSION
tar xvf $CWD/$PKGNAM-$VERSION.tar.bz2 || exit 1
cd $PKGNAM-$VERSION || exit 1
+
chown -R root:root .
-find -L . \
- \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-[ ! -x configure ] && ./autogen.sh
-
-LDFLAGS="$SLKLDFLAGS" \
-CXXFLAGS="$SLKCFLAGS" \
-CFLAGS="$SLKCFLAGS" \
-./configure \
- --prefix=/usr \
- --libdir=/usr/lib${LIBDIRSUFFIX} \
- --mandir=/usr/man \
- --docdir=/usr/doc/$PKGNAM-$VERSION \
- --localstatedir=/var \
- --sysconfdir=/etc \
- --enable-static=no \
- --program-prefix= \
- --program-suffix= \
- --build=$TARGET
-
-# Build and install:
-make || exit 1
-make DESTDIR=$PKG install || exit 1
-
-# Directory for additional configuration files:
-mkdir -p $PKG/etc/security/pwquality.conf.d
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \+ -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \+
+
+export LDFLAGS="$SLKLDFLAGS"
+export CXXFLAGS="$SLKCFLAGS"
+export CFLAGS="$SLKCFLAGS"
+mkdir meson-build
+cd meson-build
+ meson setup \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --mandir=/usr/man \
+ --localstatedir=/var \
+ --sysconfdir=/etc \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --buildtype=release \
+ -Djack=false \
+ -Dpipewire-jack=false \
+ .. || exit 1
+
+ # Build and install:
+ "${NINJA:=ninja}" $NUMJOBS || exit 1
+ DESTDIR=$PKG $NINJA install || exit 1
+cd ..
+
+# Do not clobber custom configurations:
+mv $PKG/etc/pipewire/pipewire.conf{,.new}
+
+# Don't ship .la files:
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- AUTHORS ChangeLog COPYING NEWS README \
- $PKG/usr/doc/$PKGNAM-$VERSION
+# Strip binaries (if any):
+find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
# Compress the man page(s):
if [ -d $PKG/usr/man ]; then
@@ -115,12 +126,15 @@ if [ -d $PKG/usr/man ]; then
for i in $(find $PKG/usr/man -type l -name "*.?") ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
fi
-# Strip binaries (if any):
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+# Add documentation:
+mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
+cp -a \
+ CODE_OF_CONDUCT.md COPYING INSTALL.md LICENSE NEWS PROTOCOL README.md \
+ $PKG/usr/doc/$PKGNAM-$VERSION
-# Add a package description:
+# Add a package description and the post-install script:
mkdir -p $PKG/install
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
cat $CWD/slack-desc > $PKG/install/slack-desc
# Build the package:
diff --git a/deps/pipewire/slack-desc b/deps/pipewire/slack-desc
new file mode 100644
index 0000000..bdd8586
--- /dev/null
+++ b/deps/pipewire/slack-desc
@@ -0,0 +1,20 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description.
+# Line up the first '|' above the ':' following the base package name, and
+# the '|' on the right side marks the last column you can put a character in.
+# You must make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':' except on otherwise blank lines.
+
+ |-----handy-ruler------------------------------------------------------|
+pipewire: pipewire (multimedia processing)
+pipewire:
+pipewire: PipeWire is a project that aims to greatly improve handling of
+pipewire: audio and video under Linux. It provides a low-latency, graph based
+pipewire: processing engine on top of audio and video devices that can be
+pipewire: used to support the use cases currently handled by both pulseaudio
+pipewire: and JACK.
+pipewire: PipeWire was designed with a powerful security model particularly
+pipewire: suited for containerized applications.
+pipewire:
+pipewire: See also: https://pipewire.org/
+
diff --git a/deps/polkit-qt5-1/polkit-qt5-1.SlackBuild b/deps/polkit-qt5-1/polkit-qt5-1.SlackBuild
index 951071e..e7afa3f 100755
--- a/deps/polkit-qt5-1/polkit-qt5-1.SlackBuild
+++ b/deps/polkit-qt5-1/polkit-qt5-1.SlackBuild
@@ -20,7 +20,7 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-# Modified 2014, 2015, 2016, 2017, 2019 by Eric Hameleers <alien@slackware.com>
+# Modified 2014, 2015, 2016, 2017, 2019, 2020 by Eric Hameleers <alien@slackware.com>
cd $(dirname $0) ; CWD=$(pwd)
@@ -28,7 +28,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=polkit-qt5-1
SRCNAM=polkit-qt-1
VERSION=${VERSION:-0.113.0}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
NUMJOBS=${NUMJOBS:-"-j$(nproc)"}
@@ -86,9 +86,9 @@ cd $SRCNAM-$VERSION || exit 1
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
+ -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
+ -exec chmod 644 {} \+
# Support for Qt4 was removed in 0.113.0:
mkdir -p build
@@ -101,8 +101,8 @@ cd build
-DMAN_INSTALL_DIR=/usr/man \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
..
- make $NUMJOBS || make || exit 1
- make install DESTDIR=$PKG || exit 1
+ make $NUMJOBS || make || exit 1
+ make install DESTDIR=$PKG || exit 1
cd -
if [ -d $PKG/usr/man ]; then
diff --git a/deps/polkit/0001-configure-fix-elogind-support.patch.gz b/deps/polkit/0001-configure-fix-elogind-support.patch.gz
new file mode 100644
index 0000000..79547c3
--- /dev/null
+++ b/deps/polkit/0001-configure-fix-elogind-support.patch.gz
Binary files differ
diff --git a/deps/polkit/10-org.freedesktop.NetworkManager.rules b/deps/polkit/10-org.freedesktop.NetworkManager.rules
new file mode 100644
index 0000000..9d6557b
--- /dev/null
+++ b/deps/polkit/10-org.freedesktop.NetworkManager.rules
@@ -0,0 +1,7 @@
+polkit.addRule(function(action, subject) {
+ if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0 &&
+ subject.isInGroup("netdev")) {
+ return polkit.Result.YES;
+ }
+});
+
diff --git a/deps/polkit/20-plugdev-group-mount-override.rules b/deps/polkit/20-plugdev-group-mount-override.rules
new file mode 100644
index 0000000..c47a66c
--- /dev/null
+++ b/deps/polkit/20-plugdev-group-mount-override.rules
@@ -0,0 +1,16 @@
+/* http://udisks.freedesktop.org/docs/latest/udisks-polkit-actions.html */
+
+polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.udisks2.filesystem-mount" &&
+ subject.isInGroup("plugdev")) {
+ return polkit.Result.YES;
+ }
+});
+
+polkit.addRule(function(action, subject) {
+ if (action.id == "org.freedesktop.udisks2.eject-media" &&
+ subject.isInGroup("plugdev")) {
+ return polkit.Result.YES;
+ }
+});
+
diff --git a/deps/polkit/doinst.sh.gz b/deps/polkit/doinst.sh.gz
new file mode 100644
index 0000000..f43cdf8
--- /dev/null
+++ b/deps/polkit/doinst.sh.gz
Binary files differ
diff --git a/deps/polkit/dont-set-wheel-group-as-admin.diff.gz b/deps/polkit/dont-set-wheel-group-as-admin.diff.gz
new file mode 100644
index 0000000..3b17f45
--- /dev/null
+++ b/deps/polkit/dont-set-wheel-group-as-admin.diff.gz
Binary files differ
diff --git a/deps/polkit/polkit.SlackBuild b/deps/polkit/polkit.SlackBuild
new file mode 100755
index 0000000..15a0a0f
--- /dev/null
+++ b/deps/polkit/polkit.SlackBuild
@@ -0,0 +1,190 @@
+#!/bin/bash
+
+# Copyright 2009, 2011, 2015 Robby Workman, Northport, Alabama, USA
+# Copyright 2010 Eric Hameleers, Eindhoven, NL
+# Copyright 2009, 2010, 2011, 2012, 2013, 2018 Patrick J. Volkerding, Sebeka, MN, USA
+# All rights reserved.
+
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 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.
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PKGNAM=polkit
+VERSION=${VERSION:-$(echo $PKGNAM-*.tar.?z | rev | cut -f 3- -d . | cut -f 1 -d - | rev)}
+BUILD=${BUILD:-4}
+
+# Automatically determine the architecture we're building on:
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) export ARCH=i586 ;;
+ arm*) export ARCH=arm ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) export ARCH=$( uname -m ) ;;
+ esac
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+cd $TMP
+rm -rf $PKGNAM-$VERSION
+tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
+cd $PKGNAM-$VERSION || exit 1
+
+# Make sure ownerships and permissions are sane:
+chown -R root:root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \+ -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \+
+
+zcat $CWD/dont-set-wheel-group-as-admin.diff.gz | patch -p1 || exit 1
+
+# https://gitlab.freedesktop.org/polkit/polkit/-/issues/29
+zcat $CWD/0001-configure-fix-elogind-support.patch.gz | patch -p1 || exit 1
+
+# If we get here and don't have a polkitd user/group, add one.
+# Otherwise a few directories in the package will have wrong permissions.
+if ! grep -q "^polkitd:" /etc/passwd ; then
+ groupadd -fg 87 polkitd
+ useradd -c "PolicyKit daemon owner" -d /var/lib/polkit -u 87 -g polkitd -s /bin/false polkitd
+fi
+
+# Choose correct options depending on whether PAM is installed:
+if [ -L /lib${LIBDIRSUFFIX}/libpam.so.? ]; then
+ PAM_OPTIONS="--with-authfw=pam --with-pam-module-dir=/lib${LIBDIRSUFFIX}/security"
+ unset SHADOW_OPTIONS
+else
+ unset PAM_OPTIONS
+ SHADOW_OPTIONS="--with-authfw=shadow"
+fi
+
+autoreconf -vif || exit 1
+
+LIBELOGIND_CFLAGS="$(pkg-config --cflags libelogind)" \
+LIBELOGIND_LIBS="$(pkg-config --libs libelogind)" \
+CFLAGS="$SLKCFLAGS" \
+CXXFLAGS="$SLKCFLAGS" \
+./configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
+ --enable-man-pages \
+ --enable-gtk-doc \
+ --mandir=/usr/man \
+ --disable-static \
+ --disable-examples \
+ --enable-introspection \
+ --enable-libsystemd-login=no \
+ --enable-libelogind=yes \
+ $PAM_OPTIONS \
+ $SHADOW_OPTIONS \
+ --enable-verbose-mode \
+ --with-os-type=Slackware \
+ --build=$ARCH-slackware-linux || exit 1
+
+# Build and install:
+make $NUMJOBS || make || exit 1
+make install DESTDIR=$PKG || exit 1
+
+# Don't ship .la files:
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
+
+# Create homedir for polkit. This is mentioned in /etc/passwd, but isn't
+# actually used for anything later. Perms don't matter.
+mkdir -p $PKG/var/lib/polkit
+
+# Add default policy files for udisks2 and NetworkManager events:
+cat $CWD/10-org.freedesktop.NetworkManager.rules > $PKG/etc/polkit-1/rules.d/10-org.freedesktop.NetworkManager.rules.new
+cat $CWD/20-plugdev-group-mount-override.rules > $PKG/etc/polkit-1/rules.d/20-plugdev-group-mount-override.rules.new
+
+if [ ! -z "$PAM_OPTIONS" ]; then
+ # Make the PAM file .new:
+ mv $PKG/etc/pam.d/polkit-1 $PKG/etc/pam.d/polkit-1.new
+fi
+
+# Strip binaries:
+find $PKG | xargs file | grep -e "executable" -e "shared object" \
+ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+
+# Compress and link manpages, if any:
+if [ -d $PKG/usr/man ]; then
+ ( cd $PKG/usr/man
+ for manpagedir in $(find . -type d -name "man*") ; do
+ ( cd $manpagedir
+ for eachpage in $( find . -type l -maxdepth 1) ; do
+ ln -s $( readlink $eachpage ).gz $eachpage.gz
+ rm $eachpage
+ done
+ gzip -9 *.*
+ )
+ done
+ )
+fi
+
+# Add a documentation directory:
+mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
+cp -a \
+ AUTHORS COPYING HACKING INSTALL NEWS README \
+ $PKG/usr/doc/$PKGNAM-$VERSION
+( cd $PKG/usr/doc/$PKGNAM-$VERSION; ln -s ../../share/gtk-doc/html/polkit-1 html )
+
+# If there's a ChangeLog, installing at least part of the recent history
+# is useful, but don't let it get totally out of control:
+if [ -r ChangeLog ]; then
+ DOCSDIR=$(echo $PKG/usr/doc/*-$VERSION)
+ cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
+ touch -r ChangeLog $DOCSDIR/ChangeLog
+fi
+
+mkdir -p $PKG/install
+zcat $CWD/doinst.sh > $PKG/install/doinst.sh
+cat $CWD/slack-desc > $PKG/install/slack-desc
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
+
diff --git a/deps/polkit/slack-desc b/deps/polkit/slack-desc
new file mode 100644
index 0000000..5eb518d
--- /dev/null
+++ b/deps/polkit/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler-----------------------------------------------------|
+polkit: polkit (authentication framework)
+polkit:
+polkit: PolicyKit is an application-level toolkit for defining and handling
+polkit: the policy that allows unprivileged processes to speak to privileged
+polkit: processes. PolicyKit is specifically targeting applications in rich
+polkit: desktop environments on multi-user UNIX-like operating systems.
+polkit:
+polkit: Homepage: http://www.freedesktop.org/wiki/Software/polkit
+polkit:
+polkit:
+polkit:
diff --git a/deps/poppler/poppler.SlackBuild b/deps/poppler/poppler.SlackBuild
index d3a96c1..7804693 100755
--- a/deps/poppler/poppler.SlackBuild
+++ b/deps/poppler/poppler.SlackBuild
@@ -21,7 +21,7 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-# Modified 2016, 2017, 2018 by Eric Hameleers <alien@slackware.com>
+# Modified 2016, 2017, 2018, 2020 by Eric Hameleers <alien@slackware.com>
cd $(dirname $0) ; CWD=$(pwd)
diff --git a/deps/python-enum34/.url b/deps/python-enum34/.url
deleted file mode 100644
index 9e07b2f..0000000
--- a/deps/python-enum34/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz
diff --git a/deps/python-enum34/python-enum34.SlackBuild b/deps/python-enum34/python-enum34.SlackBuild
deleted file mode 100755
index 1d731dd..0000000
--- a/deps/python-enum34/python-enum34.SlackBuild
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/bin/sh
-
-# Copyright 2018 Eric Hameleers, Eindhoven, NL
-# Copyright 2018 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-
-PKGNAM=python-enum34
-SRCNAM=enum34
-VERSION=${VERSION:-1.1.6}
-BUILD=${BUILD:-1}
-
-NUMJOBS=${NUMJOBS:-"-j$(nproc)"}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
-elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
-else
- SLKCFLAGS="-O2"
-fi
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf $SRCNAM-$VERSION
-tar xvf $CWD/$SRCNAM-$VERSION.tar.?z* || exit 1
-cd $SRCNAM-$VERSION || exit 1
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-python setup.py install --root=$PKG
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" \
- | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- PKG-INFO enum/LICENSE enum/README enum/doc/* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-chown -R root:root $PKG/usr/doc
-
-# If there's a ChangeLog, installing at least part of the recent history
-# is useful, but don't let it get totally out of control:
-if [ -r ChangeLog ]; then
- DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION)
- cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
- touch -r ChangeLog $DOCSDIR/ChangeLog
-fi
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz
-
diff --git a/deps/python-enum34/slack-desc b/deps/python-enum34/slack-desc
deleted file mode 100644
index b06f6ad..0000000
--- a/deps/python-enum34/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-python-enum34: python-enum34 (Python 3.4 Enum backported to Python 2)
-python-enum34:
-python-enum34: An enumeration is a set of symbolic names (members) bound to
-python-enum34: unique, constant values.
-python-enum34: Within an enumeration, the members can be compared by identity,
-python-enum34: and the enumeration itself can be iterated over.
-python-enum34:
-python-enum34:
-python-enum34:
-python-enum34: Homepage: https://pypi.python.org/pypi/enum34
-python-enum34:
diff --git a/deps/qca-qt5/.url b/deps/qca-qt5/.url
index 7087fa2..0d4c99c 100644
--- a/deps/qca-qt5/.url
+++ b/deps/qca-qt5/.url
@@ -1,2 +1,2 @@
-https://download.kde.org/stable/qca/2.2.1/qca-2.2.1.tar.xz
-
+https://download.kde.org/stable/qca/2.3.1/qca-2.3.1.tar.xz
+https://download.kde.org/stable/qca/2.3.1/qca-2.3.1.tar.xz.sig
diff --git a/deps/qca-qt5/patches/qca_openssl11.patch b/deps/qca-qt5/patches/qca_openssl11.patch
deleted file mode 100644
index fa6e8ab..0000000
--- a/deps/qca-qt5/patches/qca_openssl11.patch
+++ /dev/null
@@ -1,2036 +0,0 @@
-diff --git a/plugins/qca-ossl/CMakeLists.txt b/plugins/qca-ossl/CMakeLists.txt
-index cdeaeca..f7c5c1b 100644
---- a/plugins/qca-ossl/CMakeLists.txt
-+++ b/plugins/qca-ossl/CMakeLists.txt
-@@ -32,7 +32,7 @@ if(OPENSSL_FOUND)
- message(WARNING "qca-ossl will be compiled without SHA-0 digest algorithm support")
- endif(HAVE_OPENSSL_SHA0)
-
-- set(QCA_OSSL_SOURCES qca-ossl.cpp)
-+ set(QCA_OSSL_SOURCES libcrypto-compat.c qca-ossl.cpp)
-
- my_automoc( QCA_OSSL_SOURCES )
-
-diff --git a/plugins/qca-ossl/libcrypto-compat.c b/plugins/qca-ossl/libcrypto-compat.c
-index e69de29..b587845 100644
---- a/plugins/qca-ossl/libcrypto-compat.c
-+++ b/plugins/qca-ossl/libcrypto-compat.c
-@@ -0,0 +1,410 @@
-+/*
-+ * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
-+ *
-+ * Licensed under the OpenSSL license (the "License"). You may not use
-+ * this file except in compliance with the License. You can obtain a copy
-+ * in the file LICENSE in the source distribution or at
-+ * https://www.openssl.org/source/license.html
-+ */
-+
-+#include <openssl/evp.h>
-+
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L
-+
-+#include <string.h>
-+#include <openssl/engine.h>
-+
-+static void *OPENSSL_zalloc(size_t num)
-+{
-+ void *ret = OPENSSL_malloc(num);
-+
-+ if (ret != NULL)
-+ memset(ret, 0, num);
-+ return ret;
-+}
-+
-+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d)
-+{
-+ /* If the fields n and e in r are NULL, the corresponding input
-+ * parameters MUST be non-NULL for n and e. d may be
-+ * left NULL (in case only the public key is used).
-+ */
-+ if ((r->n == NULL && n == NULL)
-+ || (r->e == NULL && e == NULL))
-+ return 0;
-+
-+ if (n != NULL) {
-+ BN_free(r->n);
-+ r->n = n;
-+ }
-+ if (e != NULL) {
-+ BN_free(r->e);
-+ r->e = e;
-+ }
-+ if (d != NULL) {
-+ BN_free(r->d);
-+ r->d = d;
-+ }
-+
-+ return 1;
-+}
-+
-+int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q)
-+{
-+ /* If the fields p and q in r are NULL, the corresponding input
-+ * parameters MUST be non-NULL.
-+ */
-+ if ((r->p == NULL && p == NULL)
-+ || (r->q == NULL && q == NULL))
-+ return 0;
-+
-+ if (p != NULL) {
-+ BN_free(r->p);
-+ r->p = p;
-+ }
-+ if (q != NULL) {
-+ BN_free(r->q);
-+ r->q = q;
-+ }
-+
-+ return 1;
-+}
-+
-+int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp)
-+{
-+ /* If the fields dmp1, dmq1 and iqmp in r are NULL, the corresponding input
-+ * parameters MUST be non-NULL.
-+ */
-+ if ((r->dmp1 == NULL && dmp1 == NULL)
-+ || (r->dmq1 == NULL && dmq1 == NULL)
-+ || (r->iqmp == NULL && iqmp == NULL))
-+ return 0;
-+
-+ if (dmp1 != NULL) {
-+ BN_free(r->dmp1);
-+ r->dmp1 = dmp1;
-+ }
-+ if (dmq1 != NULL) {
-+ BN_free(r->dmq1);
-+ r->dmq1 = dmq1;
-+ }
-+ if (iqmp != NULL) {
-+ BN_free(r->iqmp);
-+ r->iqmp = iqmp;
-+ }
-+
-+ return 1;
-+}
-+
-+void RSA_get0_key(const RSA *r,
-+ const BIGNUM **n, const BIGNUM **e, const BIGNUM **d)
-+{
-+ if (n != NULL)
-+ *n = r->n;
-+ if (e != NULL)
-+ *e = r->e;
-+ if (d != NULL)
-+ *d = r->d;
-+}
-+
-+void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q)
-+{
-+ if (p != NULL)
-+ *p = r->p;
-+ if (q != NULL)
-+ *q = r->q;
-+}
-+
-+void RSA_get0_crt_params(const RSA *r,
-+ const BIGNUM **dmp1, const BIGNUM **dmq1,
-+ const BIGNUM **iqmp)
-+{
-+ if (dmp1 != NULL)
-+ *dmp1 = r->dmp1;
-+ if (dmq1 != NULL)
-+ *dmq1 = r->dmq1;
-+ if (iqmp != NULL)
-+ *iqmp = r->iqmp;
-+}
-+
-+void DSA_get0_pqg(const DSA *d,
-+ const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
-+{
-+ if (p != NULL)
-+ *p = d->p;
-+ if (q != NULL)
-+ *q = d->q;
-+ if (g != NULL)
-+ *g = d->g;
-+}
-+
-+int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g)
-+{
-+ /* If the fields p, q and g in d are NULL, the corresponding input
-+ * parameters MUST be non-NULL.
-+ */
-+ if ((d->p == NULL && p == NULL)
-+ || (d->q == NULL && q == NULL)
-+ || (d->g == NULL && g == NULL))
-+ return 0;
-+
-+ if (p != NULL) {
-+ BN_free(d->p);
-+ d->p = p;
-+ }
-+ if (q != NULL) {
-+ BN_free(d->q);
-+ d->q = q;
-+ }
-+ if (g != NULL) {
-+ BN_free(d->g);
-+ d->g = g;
-+ }
-+
-+ return 1;
-+}
-+
-+void DSA_get0_key(const DSA *d,
-+ const BIGNUM **pub_key, const BIGNUM **priv_key)
-+{
-+ if (pub_key != NULL)
-+ *pub_key = d->pub_key;
-+ if (priv_key != NULL)
-+ *priv_key = d->priv_key;
-+}
-+
-+int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key)
-+{
-+ /* If the field pub_key in d is NULL, the corresponding input
-+ * parameters MUST be non-NULL. The priv_key field may
-+ * be left NULL.
-+ */
-+ if (d->pub_key == NULL && pub_key == NULL)
-+ return 0;
-+
-+ if (pub_key != NULL) {
-+ BN_free(d->pub_key);
-+ d->pub_key = pub_key;
-+ }
-+ if (priv_key != NULL) {
-+ BN_free(d->priv_key);
-+ d->priv_key = priv_key;
-+ }
-+
-+ return 1;
-+}
-+
-+void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
-+{
-+ if (pr != NULL)
-+ *pr = sig->r;
-+ if (ps != NULL)
-+ *ps = sig->s;
-+}
-+
-+int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
-+{
-+ if (r == NULL || s == NULL)
-+ return 0;
-+ BN_clear_free(sig->r);
-+ BN_clear_free(sig->s);
-+ sig->r = r;
-+ sig->s = s;
-+ return 1;
-+}
-+
-+void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
-+{
-+ if (pr != NULL)
-+ *pr = sig->r;
-+ if (ps != NULL)
-+ *ps = sig->s;
-+}
-+
-+int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
-+{
-+ if (r == NULL || s == NULL)
-+ return 0;
-+ BN_clear_free(sig->r);
-+ BN_clear_free(sig->s);
-+ sig->r = r;
-+ sig->s = s;
-+ return 1;
-+}
-+
-+void DH_get0_pqg(const DH *dh,
-+ const BIGNUM **p, const BIGNUM **q, const BIGNUM **g)
-+{
-+ if (p != NULL)
-+ *p = dh->p;
-+ if (q != NULL)
-+ *q = dh->q;
-+ if (g != NULL)
-+ *g = dh->g;
-+}
-+
-+int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g)
-+{
-+ /* If the fields p and g in d are NULL, the corresponding input
-+ * parameters MUST be non-NULL. q may remain NULL.
-+ */
-+ if ((dh->p == NULL && p == NULL)
-+ || (dh->g == NULL && g == NULL))
-+ return 0;
-+
-+ if (p != NULL) {
-+ BN_free(dh->p);
-+ dh->p = p;
-+ }
-+ if (q != NULL) {
-+ BN_free(dh->q);
-+ dh->q = q;
-+ }
-+ if (g != NULL) {
-+ BN_free(dh->g);
-+ dh->g = g;
-+ }
-+
-+ if (q != NULL) {
-+ dh->length = BN_num_bits(q);
-+ }
-+
-+ return 1;
-+}
-+
-+void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key)
-+{
-+ if (pub_key != NULL)
-+ *pub_key = dh->pub_key;
-+ if (priv_key != NULL)
-+ *priv_key = dh->priv_key;
-+}
-+
-+int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key)
-+{
-+ /* If the field pub_key in dh is NULL, the corresponding input
-+ * parameters MUST be non-NULL. The priv_key field may
-+ * be left NULL.
-+ */
-+ if (dh->pub_key == NULL && pub_key == NULL)
-+ return 0;
-+
-+ if (pub_key != NULL) {
-+ BN_free(dh->pub_key);
-+ dh->pub_key = pub_key;
-+ }
-+ if (priv_key != NULL) {
-+ BN_free(dh->priv_key);
-+ dh->priv_key = priv_key;
-+ }
-+
-+ return 1;
-+}
-+
-+int DH_set_length(DH *dh, long length)
-+{
-+ dh->length = length;
-+ return 1;
-+}
-+
-+const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx)
-+{
-+ return ctx->iv;
-+}
-+
-+unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx)
-+{
-+ return ctx->iv;
-+}
-+
-+EVP_MD_CTX *EVP_MD_CTX_new(void)
-+{
-+ return OPENSSL_zalloc(sizeof(EVP_MD_CTX));
-+}
-+
-+void EVP_MD_CTX_free(EVP_MD_CTX *ctx)
-+{
-+ EVP_MD_CTX_cleanup(ctx);
-+ OPENSSL_free(ctx);
-+}
-+
-+RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth)
-+{
-+ RSA_METHOD *ret;
-+
-+ ret = OPENSSL_malloc(sizeof(RSA_METHOD));
-+
-+ if (ret != NULL) {
-+ memcpy(ret, meth, sizeof(*meth));
-+ ret->name = OPENSSL_strdup(meth->name);
-+ if (ret->name == NULL) {
-+ OPENSSL_free(ret);
-+ return NULL;
-+ }
-+ }
-+
-+ return ret;
-+}
-+
-+int RSA_meth_set1_name(RSA_METHOD *meth, const char *name)
-+{
-+ char *tmpname;
-+
-+ tmpname = OPENSSL_strdup(name);
-+ if (tmpname == NULL) {
-+ return 0;
-+ }
-+
-+ OPENSSL_free((char *)meth->name);
-+ meth->name = tmpname;
-+
-+ return 1;
-+}
-+
-+int RSA_meth_set_priv_enc(RSA_METHOD *meth,
-+ int (*priv_enc) (int flen, const unsigned char *from,
-+ unsigned char *to, RSA *rsa,
-+ int padding))
-+{
-+ meth->rsa_priv_enc = priv_enc;
-+ return 1;
-+}
-+
-+int RSA_meth_set_priv_dec(RSA_METHOD *meth,
-+ int (*priv_dec) (int flen, const unsigned char *from,
-+ unsigned char *to, RSA *rsa,
-+ int padding))
-+{
-+ meth->rsa_priv_dec = priv_dec;
-+ return 1;
-+}
-+
-+int RSA_meth_set_finish(RSA_METHOD *meth, int (*finish) (RSA *rsa))
-+{
-+ meth->finish = finish;
-+ return 1;
-+}
-+
-+void RSA_meth_free(RSA_METHOD *meth)
-+{
-+ if (meth != NULL) {
-+ OPENSSL_free((char *)meth->name);
-+ OPENSSL_free(meth);
-+ }
-+}
-+
-+int RSA_bits(const RSA *r)
-+{
-+ return (BN_num_bits(r->n));
-+}
-+
-+RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey)
-+{
-+ if (pkey->type != EVP_PKEY_RSA) {
-+ return NULL;
-+ }
-+ return pkey->pkey.rsa;
-+}
-+
-+
-+#endif /* OPENSSL_VERSION_NUMBER */
-diff --git a/plugins/qca-ossl/libcrypto-compat.h b/plugins/qca-ossl/libcrypto-compat.h
-index e69de29..057f1fe 100644
---- a/plugins/qca-ossl/libcrypto-compat.h
-+++ b/plugins/qca-ossl/libcrypto-compat.h
-@@ -0,0 +1,57 @@
-+#ifndef LIBCRYPTO_COMPAT_H
-+#define LIBCRYPTO_COMPAT_H
-+
-+#if OPENSSL_VERSION_NUMBER < 0x10100000L
-+
-+#include <openssl/rsa.h>
-+#include <openssl/dsa.h>
-+#include <openssl/ecdsa.h>
-+#include <openssl/dh.h>
-+#include <openssl/evp.h>
-+
-+int RSA_set0_key(RSA *r, BIGNUM *n, BIGNUM *e, BIGNUM *d);
-+int RSA_set0_factors(RSA *r, BIGNUM *p, BIGNUM *q);
-+int RSA_set0_crt_params(RSA *r, BIGNUM *dmp1, BIGNUM *dmq1, BIGNUM *iqmp);
-+void RSA_get0_key(const RSA *r, const BIGNUM **n, const BIGNUM **e, const BIGNUM **d);
-+void RSA_get0_factors(const RSA *r, const BIGNUM **p, const BIGNUM **q);
-+void RSA_get0_crt_params(const RSA *r, const BIGNUM **dmp1, const BIGNUM **dmq1, const BIGNUM **iqmp);
-+
-+void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
-+int DSA_set0_pqg(DSA *d, BIGNUM *p, BIGNUM *q, BIGNUM *g);
-+void DSA_get0_key(const DSA *d, const BIGNUM **pub_key, const BIGNUM **priv_key);
-+int DSA_set0_key(DSA *d, BIGNUM *pub_key, BIGNUM *priv_key);
-+
-+void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
-+int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s);
-+
-+void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
-+int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
-+
-+void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, const BIGNUM **g);
-+int DH_set0_pqg(DH *dh, BIGNUM *p, BIGNUM *q, BIGNUM *g);
-+void DH_get0_key(const DH *dh, const BIGNUM **pub_key, const BIGNUM **priv_key);
-+int DH_set0_key(DH *dh, BIGNUM *pub_key, BIGNUM *priv_key);
-+int DH_set_length(DH *dh, long length);
-+
-+const unsigned char *EVP_CIPHER_CTX_iv(const EVP_CIPHER_CTX *ctx);
-+unsigned char *EVP_CIPHER_CTX_iv_noconst(EVP_CIPHER_CTX *ctx);
-+EVP_MD_CTX *EVP_MD_CTX_new(void);
-+void EVP_MD_CTX_free(EVP_MD_CTX *ctx);
-+#define EVP_CIPHER_impl_ctx_size(e) e->ctx_size
-+#define EVP_CIPHER_CTX_get_cipher_data(ctx) ctx->cipher_data
-+
-+RSA_METHOD *RSA_meth_dup(const RSA_METHOD *meth);
-+int RSA_meth_set1_name(RSA_METHOD *meth, const char *name);
-+#define RSA_meth_get_finish(meth) meth->finish
-+int RSA_meth_set_priv_enc(RSA_METHOD *meth, int (*priv_enc) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding));
-+int RSA_meth_set_priv_dec(RSA_METHOD *meth, int (*priv_dec) (int flen, const unsigned char *from, unsigned char *to, RSA *rsa, int padding));
-+int RSA_meth_set_finish(RSA_METHOD *meth, int (*finish) (RSA *rsa));
-+void RSA_meth_free(RSA_METHOD *meth);
-+
-+int RSA_bits(const RSA *r);
-+
-+RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey);
-+
-+#endif /* OPENSSL_VERSION_NUMBER */
-+
-+#endif /* LIBCRYPTO_COMPAT_H */
-diff --git a/plugins/qca-ossl/qca-ossl.cpp b/plugins/qca-ossl/qca-ossl.cpp
-index f0b9431..d961ad9 100644
---- a/plugins/qca-ossl/qca-ossl.cpp
-+++ b/plugins/qca-ossl/qca-ossl.cpp
-@@ -1,6 +1,7 @@
- /*
- * Copyright (C) 2004-2007 Justin Karneges <justin@affinix.com>
- * Copyright (C) 2004-2006 Brad Hards <bradh@frogmouth.net>
-+ * Copyright (C) 2017 Fabian Vogt <fabian@ritter-vogt.de>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
-@@ -38,6 +39,10 @@
- #include <openssl/pkcs12.h>
- #include <openssl/ssl.h>
-
-+extern "C" {
-+#include "libcrypto-compat.h"
-+}
-+
- #ifndef OSSL_097
- // comment this out if you'd rather use openssl 0.9.6
- #define OSSL_097
-@@ -52,6 +57,73 @@
- ((_STACK*) (1 ? p : (type*)0))
- #endif
-
-+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
-+ #define OSSL_110
-+#endif
-+
-+// OpenSSL 1.1.0 compatibility macros
-+#ifdef OSSL_110
-+#define M_ASN1_IA5STRING_new() ASN1_IA5STRING_new()
-+#else
-+static HMAC_CTX *HMAC_CTX_new() { return new HMAC_CTX(); }
-+static void HMAC_CTX_free(HMAC_CTX *x) { free(x); }
-+static void EVP_PKEY_up_ref(EVP_PKEY *x) { CRYPTO_add(&x->references, 1, CRYPTO_LOCK_EVP_PKEY); }
-+static void X509_up_ref(X509 *x) { CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509); }
-+static void X509_CRL_up_ref(X509_CRL *x) { CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509_CRL); }
-+static DSA *EVP_PKEY_get0_DSA(EVP_PKEY *x) { return x->pkey.dsa; }
-+static DH *EVP_PKEY_get0_DH(EVP_PKEY *x) { return x->pkey.dh; }
-+static int RSA_meth_set_sign(RSA_METHOD *meth,
-+ int (*sign) (int type, const unsigned char *m,
-+ unsigned int m_length,
-+ unsigned char *sigret, unsigned int *siglen,
-+ const RSA *rsa))
-+{
-+ meth->rsa_sign = sign;
-+ return 1;
-+}
-+int RSA_meth_set_verify(RSA_METHOD *meth,
-+ int (*verify) (int dtype, const unsigned char *m,
-+ unsigned int m_length,
-+ const unsigned char *sigbuf,
-+ unsigned int siglen, const RSA *rsa))
-+{
-+ meth->rsa_verify = verify;
-+ return 1;
-+}
-+void X509_REQ_get0_signature(const X509_REQ *req, const ASN1_BIT_STRING **psig,
-+ const X509_ALGOR **palg)
-+{
-+ if (psig != NULL)
-+ *psig = req->signature;
-+ if (palg != NULL)
-+ *palg = req->sig_alg;
-+}
-+int X509_REQ_get_signature_nid(const X509_REQ *req)
-+{
-+ return OBJ_obj2nid(req->sig_alg->algorithm);
-+}
-+void X509_CRL_get0_signature(const X509_CRL *crl, const ASN1_BIT_STRING **psig,
-+ const X509_ALGOR **palg)
-+{
-+ if (psig != NULL)
-+ *psig = crl->signature;
-+ if (palg != NULL)
-+ *palg = crl->sig_alg;
-+}
-+int X509_CRL_get_signature_nid(const X509_CRL *crl)
-+{
-+ return OBJ_obj2nid(crl->sig_alg->algorithm);
-+}
-+const ASN1_INTEGER *X509_REVOKED_get0_serialNumber(const X509_REVOKED *x)
-+{
-+ return x->serialNumber;
-+}
-+const ASN1_TIME *X509_REVOKED_get0_revocationDate(const X509_REVOKED *x)
-+{
-+ return x->revocationDate;
-+}
-+#endif
-+
- using namespace QCA;
-
- namespace opensslQCAPlugin {
-@@ -93,7 +165,7 @@ static QByteArray bio2ba(BIO *b)
- return buf;
- }
-
--static BigInteger bn2bi(BIGNUM *n)
-+static BigInteger bn2bi(const BIGNUM *n)
- {
- SecureArray buf(BN_num_bytes(n) + 1);
- buf[0] = 0; // positive
-@@ -109,7 +181,7 @@ static BIGNUM *bi2bn(const BigInteger &n)
-
- // take lowest bytes of BIGNUM to fit
- // pad with high byte zeroes to fit
--static SecureArray bn2fixedbuf(BIGNUM *n, int size)
-+static SecureArray bn2fixedbuf(const BIGNUM *n, int size)
- {
- SecureArray buf(BN_num_bytes(n));
- BN_bn2bin(n, (unsigned char *)buf.data());
-@@ -127,8 +199,16 @@ static SecureArray dsasig_der_to_raw(const SecureArray &in)
- const unsigned char *inp = (const unsigned char *)in.data();
- d2i_DSA_SIG(&sig, &inp, in.size());
-
-- SecureArray part_r = bn2fixedbuf(sig->r, 20);
-- SecureArray part_s = bn2fixedbuf(sig->s, 20);
-+ const BIGNUM *bnr, *bns;
-+
-+#ifdef OSSL_110
-+ DSA_SIG_get0(sig, &bnr, &bns);
-+#else
-+ bnr = sig->r; bns = sig->s;
-+#endif
-+
-+ SecureArray part_r = bn2fixedbuf(bnr, 20);
-+ SecureArray part_s = bn2fixedbuf(bns, 20);
- SecureArray result;
- result.append(part_r);
- result.append(part_s);
-@@ -143,12 +223,20 @@ static SecureArray dsasig_raw_to_der(const SecureArray &in)
- return SecureArray();
-
- DSA_SIG *sig = DSA_SIG_new();
-- SecureArray part_r(20);
-- SecureArray part_s(20);
-+ SecureArray part_r(20); BIGNUM *bnr;
-+ SecureArray part_s(20); BIGNUM *bns;
- memcpy(part_r.data(), in.data(), 20);
- memcpy(part_s.data(), in.data() + 20, 20);
-- sig->r = BN_bin2bn((const unsigned char *)part_r.data(), part_r.size(), NULL);
-- sig->s = BN_bin2bn((const unsigned char *)part_s.data(), part_s.size(), NULL);
-+ bnr = BN_bin2bn((const unsigned char *)part_r.data(), part_r.size(), NULL);
-+ bns = BN_bin2bn((const unsigned char *)part_s.data(), part_s.size(), NULL);
-+
-+#ifdef OSSL_110
-+ if(DSA_SIG_set0(sig, bnr, bns) == 0)
-+ return SecureArray();
-+ // Not documented what happens in the failure case, free bnr and bns?
-+#else
-+ sig->r = bnr; sig->s = bns;
-+#endif
-
- int len = i2d_DSA_SIG(sig, NULL);
- SecureArray result(len);
-@@ -1004,29 +1092,39 @@ public:
- opensslHashContext(const EVP_MD *algorithm, Provider *p, const QString &type) : HashContext(p, type)
- {
- m_algorithm = algorithm;
-- EVP_DigestInit( &m_context, m_algorithm );
-+ m_context = EVP_MD_CTX_new();
-+ EVP_DigestInit( m_context, m_algorithm );
-+ }
-+
-+ opensslHashContext(const opensslHashContext &other)
-+ : HashContext(other)
-+ {
-+ m_algorithm = other.m_algorithm;
-+ m_context = EVP_MD_CTX_new();
-+ EVP_MD_CTX_copy_ex(m_context, other.m_context);
- }
-
- ~opensslHashContext()
- {
-- EVP_MD_CTX_cleanup(&m_context);
-+ EVP_MD_CTX_free(m_context);
- }
-
- void clear()
- {
-- EVP_MD_CTX_cleanup(&m_context);
-- EVP_DigestInit( &m_context, m_algorithm );
-+ EVP_MD_CTX_free(m_context);
-+ m_context = EVP_MD_CTX_new();
-+ EVP_DigestInit( m_context, m_algorithm );
- }
-
- void update(const MemoryRegion &a)
- {
-- EVP_DigestUpdate( &m_context, (unsigned char*)a.data(), a.size() );
-+ EVP_DigestUpdate( m_context, (unsigned char*)a.data(), a.size() );
- }
-
- MemoryRegion final()
- {
- SecureArray a( EVP_MD_size( m_algorithm ) );
-- EVP_DigestFinal( &m_context, (unsigned char*)a.data(), 0 );
-+ EVP_DigestFinal( m_context, (unsigned char*)a.data(), 0 );
- return a;
- }
-
-@@ -1037,7 +1135,7 @@ public:
-
- protected:
- const EVP_MD *m_algorithm;
-- EVP_MD_CTX m_context;
-+ EVP_MD_CTX *m_context;
- };
-
-
-@@ -1047,7 +1145,21 @@ public:
- opensslPbkdf1Context(const EVP_MD *algorithm, Provider *p, const QString &type) : KDFContext(p, type)
- {
- m_algorithm = algorithm;
-- EVP_DigestInit( &m_context, m_algorithm );
-+ m_context = EVP_MD_CTX_new();
-+ EVP_DigestInit( m_context, m_algorithm );
-+ }
-+
-+ opensslPbkdf1Context(const opensslPbkdf1Context &other)
-+ : KDFContext(other)
-+ {
-+ m_algorithm = other.m_algorithm;
-+ m_context = EVP_MD_CTX_new();
-+ EVP_MD_CTX_copy(m_context, other.m_context);
-+ }
-+
-+ ~opensslPbkdf1Context()
-+ {
-+ EVP_MD_CTX_free(m_context);
- }
-
- Provider::Context *clone() const
-@@ -1081,16 +1193,16 @@ public:
- DK = Tc<0..dkLen-1>
- */
- // calculate T_1
-- EVP_DigestUpdate( &m_context, (unsigned char*)secret.data(), secret.size() );
-- EVP_DigestUpdate( &m_context, (unsigned char*)salt.data(), salt.size() );
-+ EVP_DigestUpdate( m_context, (unsigned char*)secret.data(), secret.size() );
-+ EVP_DigestUpdate( m_context, (unsigned char*)salt.data(), salt.size() );
- SecureArray a( EVP_MD_size( m_algorithm ) );
-- EVP_DigestFinal( &m_context, (unsigned char*)a.data(), 0 );
-+ EVP_DigestFinal( m_context, (unsigned char*)a.data(), 0 );
-
- // calculate T_2 up to T_c
- for ( unsigned int i = 2; i <= iterationCount; ++i ) {
-- EVP_DigestInit( &m_context, m_algorithm );
-- EVP_DigestUpdate( &m_context, (unsigned char*)a.data(), a.size() );
-- EVP_DigestFinal( &m_context, (unsigned char*)a.data(), 0 );
-+ EVP_DigestInit( m_context, m_algorithm );
-+ EVP_DigestUpdate( m_context, (unsigned char*)a.data(), a.size() );
-+ EVP_DigestFinal( m_context, (unsigned char*)a.data(), 0 );
- }
-
- // shrink a to become DK, of the required length
-@@ -1136,19 +1248,19 @@ public:
- DK = Tc<0..dkLen-1>
- */
- // calculate T_1
-- EVP_DigestUpdate( &m_context, (unsigned char*)secret.data(), secret.size() );
-- EVP_DigestUpdate( &m_context, (unsigned char*)salt.data(), salt.size() );
-+ EVP_DigestUpdate( m_context, (unsigned char*)secret.data(), secret.size() );
-+ EVP_DigestUpdate( m_context, (unsigned char*)salt.data(), salt.size() );
- SecureArray a( EVP_MD_size( m_algorithm ) );
-- EVP_DigestFinal( &m_context, (unsigned char*)a.data(), 0 );
-+ EVP_DigestFinal( m_context, (unsigned char*)a.data(), 0 );
-
- // calculate T_2 up to T_c
- *iterationCount = 2 - 1; // <- Have to remove 1, unless it computes one
- timer.start(); // ^ time more than the base function
- // ^ with the same iterationCount
- while (timer.elapsed() < msecInterval) {
-- EVP_DigestInit( &m_context, m_algorithm );
-- EVP_DigestUpdate( &m_context, (unsigned char*)a.data(), a.size() );
-- EVP_DigestFinal( &m_context, (unsigned char*)a.data(), 0 );
-+ EVP_DigestInit( m_context, m_algorithm );
-+ EVP_DigestUpdate( m_context, (unsigned char*)a.data(), a.size() );
-+ EVP_DigestFinal( m_context, (unsigned char*)a.data(), 0 );
- ++(*iterationCount);
- }
-
-@@ -1163,7 +1275,7 @@ public:
-
- protected:
- const EVP_MD *m_algorithm;
-- EVP_MD_CTX m_context;
-+ EVP_MD_CTX *m_context;
- };
-
- class opensslPbkdf2Context : public KDFContext
-@@ -1231,12 +1343,28 @@ public:
- opensslHMACContext(const EVP_MD *algorithm, Provider *p, const QString &type) : MACContext(p, type)
- {
- m_algorithm = algorithm;
-- HMAC_CTX_init( &m_context );
-+ m_context = HMAC_CTX_new();
-+#ifndef OSSL_110
-+ HMAC_CTX_init( m_context );
-+#endif
-+ }
-+
-+ opensslHMACContext(const opensslHMACContext &other)
-+ : MACContext(other)
-+ {
-+ m_algorithm = other.m_algorithm;
-+ m_context = HMAC_CTX_new();
-+ HMAC_CTX_copy(m_context, other.m_context);
-+ }
-+
-+ ~opensslHMACContext()
-+ {
-+ HMAC_CTX_free(m_context);
- }
-
- void setup(const SymmetricKey &key)
- {
-- HMAC_Init_ex( &m_context, key.data(), key.size(), m_algorithm, 0 );
-+ HMAC_Init_ex( m_context, key.data(), key.size(), m_algorithm, 0 );
- }
-
- KeyLength keyLength() const
-@@ -1246,14 +1374,18 @@ public:
-
- void update(const MemoryRegion &a)
- {
-- HMAC_Update( &m_context, (unsigned char *)a.data(), a.size() );
-+ HMAC_Update( m_context, (unsigned char *)a.data(), a.size() );
- }
-
- void final(MemoryRegion *out)
- {
- SecureArray sa( EVP_MD_size( m_algorithm ), 0 );
-- HMAC_Final(&m_context, (unsigned char *)sa.data(), 0 );
-- HMAC_CTX_cleanup(&m_context);
-+ HMAC_Final(m_context, (unsigned char *)sa.data(), 0 );
-+#ifdef OSSL_110
-+ HMAC_CTX_reset(m_context);
-+#else
-+ HMAC_CTX_cleanup(m_context);
-+#endif
- *out = sa;
- }
-
-@@ -1263,7 +1395,7 @@ public:
- }
-
- protected:
-- HMAC_CTX m_context;
-+ HMAC_CTX *m_context;
- const EVP_MD *m_algorithm;
- };
-
-@@ -1277,7 +1409,7 @@ class EVPKey
- public:
- enum State { Idle, SignActive, SignError, VerifyActive, VerifyError };
- EVP_PKEY *pkey;
-- EVP_MD_CTX mdctx;
-+ EVP_MD_CTX *mdctx;
- State state;
- bool raw_type;
- SecureArray raw;
-@@ -1287,19 +1419,23 @@ public:
- pkey = 0;
- raw_type = false;
- state = Idle;
-+ mdctx = EVP_MD_CTX_new();
- }
-
- EVPKey(const EVPKey &from)
- {
- pkey = from.pkey;
-- CRYPTO_add(&pkey->references, 1, CRYPTO_LOCK_EVP_PKEY);
-+ EVP_PKEY_up_ref(pkey);
- raw_type = false;
- state = Idle;
-+ mdctx = EVP_MD_CTX_new();
-+ EVP_MD_CTX_copy(mdctx, from.mdctx);
- }
-
- ~EVPKey()
- {
- reset();
-+ EVP_MD_CTX_free(mdctx);
- }
-
- void reset()
-@@ -1322,8 +1458,8 @@ public:
- else
- {
- raw_type = false;
-- EVP_MD_CTX_init(&mdctx);
-- if(!EVP_SignInit_ex(&mdctx, type, NULL))
-+ EVP_MD_CTX_init(mdctx);
-+ if(!EVP_SignInit_ex(mdctx, type, NULL))
- state = SignError;
- }
- }
-@@ -1339,8 +1475,8 @@ public:
- else
- {
- raw_type = false;
-- EVP_MD_CTX_init(&mdctx);
-- if(!EVP_VerifyInit_ex(&mdctx, type, NULL))
-+ EVP_MD_CTX_init(mdctx);
-+ if(!EVP_VerifyInit_ex(mdctx, type, NULL))
- state = VerifyError;
- }
- }
-@@ -1352,7 +1488,7 @@ public:
- if (raw_type)
- raw += in;
- else
-- if(!EVP_SignUpdate(&mdctx, in.data(), (unsigned int)in.size()))
-+ if(!EVP_SignUpdate(mdctx, in.data(), (unsigned int)in.size()))
- state = SignError;
- }
- else if(state == VerifyActive)
-@@ -1360,7 +1496,7 @@ public:
- if (raw_type)
- raw += in;
- else
-- if(!EVP_VerifyUpdate(&mdctx, in.data(), (unsigned int)in.size()))
-+ if(!EVP_VerifyUpdate(mdctx, in.data(), (unsigned int)in.size()))
- state = VerifyError;
- }
- }
-@@ -1373,17 +1509,24 @@ public:
- unsigned int len = out.size();
- if (raw_type)
- {
-- if (pkey->type == EVP_PKEY_RSA)
-+ int type;
-+#ifdef OSSL_110
-+ type = EVP_PKEY_id(pkey);
-+#else
-+ type = pkey->type;
-+#endif
-+ if (type == EVP_PKEY_RSA)
- {
-+ RSA *rsa = EVP_PKEY_get0_RSA(pkey);
- if(RSA_private_encrypt (raw.size(), (unsigned char *)raw.data(),
-- (unsigned char *)out.data(), pkey->pkey.rsa,
-+ (unsigned char *)out.data(), rsa,
- RSA_PKCS1_PADDING) == -1) {
-
- state = SignError;
- return SecureArray ();
- }
- }
-- else if (pkey->type == EVP_PKEY_DSA)
-+ else if (type == EVP_PKEY_DSA)
- {
- state = SignError;
- return SecureArray ();
-@@ -1395,7 +1538,7 @@ public:
- }
- }
- else {
-- if(!EVP_SignFinal(&mdctx, (unsigned char *)out.data(), &len, pkey))
-+ if(!EVP_SignFinal(mdctx, (unsigned char *)out.data(), &len, pkey))
- {
- state = SignError;
- return SecureArray();
-@@ -1418,16 +1561,24 @@ public:
- SecureArray out(EVP_PKEY_size(pkey));
- int len = 0;
-
-- if (pkey->type == EVP_PKEY_RSA) {
-+ int type;
-+#ifdef OSSL_110
-+ type = EVP_PKEY_type(EVP_PKEY_id(pkey));
-+#else
-+ type = pkey->type;
-+#endif
-+
-+ if (type == EVP_PKEY_RSA) {
-+ RSA *rsa = EVP_PKEY_get0_RSA(pkey);
- if((len = RSA_public_decrypt (sig.size(), (unsigned char *)sig.data(),
-- (unsigned char *)out.data (), pkey->pkey.rsa,
-+ (unsigned char *)out.data (), rsa,
- RSA_PKCS1_PADDING)) == -1) {
-
- state = VerifyError;
- return false;
- }
- }
-- else if (pkey->type == EVP_PKEY_DSA)
-+ else if (type == EVP_PKEY_DSA)
- {
- state = VerifyError;
- return false;
-@@ -1447,7 +1598,7 @@ public:
- }
- else
- {
-- if(EVP_VerifyFinal(&mdctx, (unsigned char *)sig.data(), (unsigned int)sig.size(), pkey) != 1)
-+ if(EVP_VerifyFinal(mdctx, (unsigned char *)sig.data(), (unsigned int)sig.size(), pkey) != 1)
- {
- state = VerifyError;
- return false;
-@@ -1561,9 +1712,11 @@ static bool make_dlgroup(const QByteArray &seed, int bits, int counter, DLParams
- return false;
- if(ret_counter != counter)
- return false;
-- params->p = bn2bi(dsa->p);
-- params->q = bn2bi(dsa->q);
-- params->g = bn2bi(dsa->g);
-+ const BIGNUM *bnp, *bnq, *bng;
-+ DSA_get0_pqg(dsa, &bnp, &bnq, &bng);
-+ params->p = bn2bi(bnp);
-+ params->q = bn2bi(bnq);
-+ params->g = bn2bi(bng);
- DSA_free(dsa);
- return true;
- }
-@@ -1826,10 +1979,11 @@ public:
- return;
-
- // extract the public key into DER format
-- int len = i2d_RSAPublicKey(evp.pkey->pkey.rsa, NULL);
-+ RSA *rsa_pkey = EVP_PKEY_get0_RSA(evp.pkey);
-+ int len = i2d_RSAPublicKey(rsa_pkey, NULL);
- SecureArray result(len);
- unsigned char *p = (unsigned char *)result.data();
-- i2d_RSAPublicKey(evp.pkey->pkey.rsa, &p);
-+ i2d_RSAPublicKey(rsa_pkey, &p);
- p = (unsigned char *)result.data();
-
- // put the DER public key back into openssl
-@@ -1852,7 +2006,7 @@ public:
-
- virtual int maximumEncryptSize(EncryptionAlgorithm alg) const
- {
-- RSA *rsa = evp.pkey->pkey.rsa;
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
- int size = 0;
- switch(alg)
- {
-@@ -1867,7 +2021,7 @@ public:
-
- virtual SecureArray encrypt(const SecureArray &in, EncryptionAlgorithm alg)
- {
-- RSA *rsa = evp.pkey->pkey.rsa;
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
- SecureArray buf = in;
- int max = maximumEncryptSize(alg);
-
-@@ -1900,7 +2054,7 @@ public:
-
- virtual bool decrypt(const SecureArray &in, SecureArray *out, EncryptionAlgorithm alg)
- {
-- RSA *rsa = evp.pkey->pkey.rsa;
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
- SecureArray result(RSA_size(rsa));
- int pad;
-
-@@ -2021,14 +2175,10 @@ public:
- evp.reset();
-
- RSA *rsa = RSA_new();
-- rsa->n = bi2bn(n);
-- rsa->e = bi2bn(e);
-- rsa->p = bi2bn(p);
-- rsa->q = bi2bn(q);
-- rsa->d = bi2bn(d);
--
-- if(!rsa->n || !rsa->e || !rsa->p || !rsa->q || !rsa->d)
-+ if(RSA_set0_key(rsa, bi2bn(n), bi2bn(e), bi2bn(d)) == 0
-+ || RSA_set0_factors(rsa, bi2bn(p), bi2bn(q)) == 0)
- {
-+ // Free BIGNUMS?
- RSA_free(rsa);
- return;
- }
-@@ -2036,7 +2186,7 @@ public:
- // When private key has no Public Exponent (e) or Private Exponent (d)
- // need to disable blinding. Otherwise decryption will be broken.
- // http://www.mail-archive.com/openssl-users@openssl.org/msg63530.html
-- if(BN_is_zero(rsa->e) || BN_is_zero(rsa->d))
-+ if(e == BigInteger(0) || d == BigInteger(0))
- RSA_blinding_off(rsa);
-
- evp.pkey = EVP_PKEY_new();
-@@ -2049,10 +2199,7 @@ public:
- evp.reset();
-
- RSA *rsa = RSA_new();
-- rsa->n = bi2bn(n);
-- rsa->e = bi2bn(e);
--
-- if(!rsa->n || !rsa->e)
-+ if(RSA_set0_key(rsa, bi2bn(n), bi2bn(e), NULL) == 0)
- {
- RSA_free(rsa);
- return;
-@@ -2065,27 +2212,42 @@ public:
-
- virtual BigInteger n() const
- {
-- return bn2bi(evp.pkey->pkey.rsa->n);
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
-+ const BIGNUM *bnn;
-+ RSA_get0_key(rsa, &bnn, NULL, NULL);
-+ return bn2bi(bnn);
- }
-
- virtual BigInteger e() const
- {
-- return bn2bi(evp.pkey->pkey.rsa->e);
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
-+ const BIGNUM *bne;
-+ RSA_get0_key(rsa, NULL, &bne, NULL);
-+ return bn2bi(bne);
- }
-
- virtual BigInteger p() const
- {
-- return bn2bi(evp.pkey->pkey.rsa->p);
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
-+ const BIGNUM *bnp;
-+ RSA_get0_factors(rsa, &bnp, NULL);
-+ return bn2bi(bnp);
- }
-
- virtual BigInteger q() const
- {
-- return bn2bi(evp.pkey->pkey.rsa->q);
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
-+ const BIGNUM *bnq;
-+ RSA_get0_factors(rsa, NULL, &bnq);
-+ return bn2bi(bnq);
- }
-
- virtual BigInteger d() const
- {
-- return bn2bi(evp.pkey->pkey.rsa->d);
-+ RSA *rsa = EVP_PKEY_get0_RSA(evp.pkey);
-+ const BIGNUM *bnd;
-+ RSA_get0_key(rsa, NULL, NULL, &bnd);
-+ return bn2bi(bnd);
- }
-
- private slots:
-@@ -2134,10 +2296,12 @@ public:
- virtual void run()
- {
- DSA *dsa = DSA_new();
-- dsa->p = bi2bn(domain.p());
-- dsa->q = bi2bn(domain.q());
-- dsa->g = bi2bn(domain.g());
-- if(!DSA_generate_key(dsa))
-+ BIGNUM *pne = bi2bn(domain.p()),
-+ *qne = bi2bn(domain.q()),
-+ *gne = bi2bn(domain.g());
-+
-+ if(!DSA_set0_pqg(dsa, pne, qne, gne)
-+ || !DSA_generate_key(dsa))
- {
- DSA_free(dsa);
- return;
-@@ -2212,10 +2376,11 @@ public:
- return;
-
- // extract the public key into DER format
-- int len = i2d_DSAPublicKey(evp.pkey->pkey.dsa, NULL);
-+ DSA *dsa_pkey = EVP_PKEY_get0_DSA(evp.pkey);
-+ int len = i2d_DSAPublicKey(dsa_pkey, NULL);
- SecureArray result(len);
- unsigned char *p = (unsigned char *)result.data();
-- i2d_DSAPublicKey(evp.pkey->pkey.dsa, &p);
-+ i2d_DSAPublicKey(dsa_pkey, &p);
- p = (unsigned char *)result.data();
-
- // put the DER public key back into openssl
-@@ -2244,7 +2409,7 @@ public:
- else
- transformsig = false;
-
-- evp.startSign(EVP_dss1());
-+ evp.startSign(EVP_sha1());
- }
-
- virtual void startVerify(SignatureAlgorithm, SignatureFormat format)
-@@ -2255,7 +2420,7 @@ public:
- else
- transformsig = false;
-
-- evp.startVerify(EVP_dss1());
-+ evp.startVerify(EVP_sha1());
- }
-
- virtual void update(const MemoryRegion &in)
-@@ -2305,13 +2470,14 @@ public:
- evp.reset();
-
- DSA *dsa = DSA_new();
-- dsa->p = bi2bn(domain.p());
-- dsa->q = bi2bn(domain.q());
-- dsa->g = bi2bn(domain.g());
-- dsa->pub_key = bi2bn(y);
-- dsa->priv_key = bi2bn(x);
-+ BIGNUM *bnp = bi2bn(domain.p());
-+ BIGNUM *bnq = bi2bn(domain.q());
-+ BIGNUM *bng = bi2bn(domain.g());
-+ BIGNUM *bnpub_key = bi2bn(y);
-+ BIGNUM *bnpriv_key = bi2bn(x);
-
-- if(!dsa->p || !dsa->q || !dsa->g || !dsa->pub_key || !dsa->priv_key)
-+ if(!DSA_set0_pqg(dsa, bnp, bnq, bng)
-+ || !DSA_set0_key(dsa, bnpub_key, bnpriv_key))
- {
- DSA_free(dsa);
- return;
-@@ -2327,12 +2493,13 @@ public:
- evp.reset();
-
- DSA *dsa = DSA_new();
-- dsa->p = bi2bn(domain.p());
-- dsa->q = bi2bn(domain.q());
-- dsa->g = bi2bn(domain.g());
-- dsa->pub_key = bi2bn(y);
-+ BIGNUM *bnp = bi2bn(domain.p());
-+ BIGNUM *bnq = bi2bn(domain.q());
-+ BIGNUM *bng = bi2bn(domain.g());
-+ BIGNUM *bnpub_key = bi2bn(y);
-
-- if(!dsa->p || !dsa->q || !dsa->g || !dsa->pub_key)
-+ if(!DSA_set0_pqg(dsa, bnp, bnq, bng)
-+ || !DSA_set0_key(dsa, bnpub_key, NULL))
- {
- DSA_free(dsa);
- return;
-@@ -2345,17 +2512,26 @@ public:
-
- virtual DLGroup domain() const
- {
-- return DLGroup(bn2bi(evp.pkey->pkey.dsa->p), bn2bi(evp.pkey->pkey.dsa->q), bn2bi(evp.pkey->pkey.dsa->g));
-+ DSA *dsa = EVP_PKEY_get0_DSA(evp.pkey);
-+ const BIGNUM *bnp, *bnq, *bng;
-+ DSA_get0_pqg(dsa, &bnp, &bnq, &bng);
-+ return DLGroup(bn2bi(bnp), bn2bi(bnq), bn2bi(bng));
- }
-
- virtual BigInteger y() const
- {
-- return bn2bi(evp.pkey->pkey.dsa->pub_key);
-+ DSA *dsa = EVP_PKEY_get0_DSA(evp.pkey);
-+ const BIGNUM *bnpub_key;
-+ DSA_get0_key(dsa, &bnpub_key, NULL);
-+ return bn2bi(bnpub_key);
- }
-
- virtual BigInteger x() const
- {
-- return bn2bi(evp.pkey->pkey.dsa->priv_key);
-+ DSA *dsa = EVP_PKEY_get0_DSA(evp.pkey);
-+ const BIGNUM *bnpriv_key;
-+ DSA_get0_key(dsa, NULL, &bnpriv_key);
-+ return bn2bi(bnpriv_key);
- }
-
- private slots:
-@@ -2404,9 +2580,10 @@ public:
- virtual void run()
- {
- DH *dh = DH_new();
-- dh->p = bi2bn(domain.p());
-- dh->g = bi2bn(domain.g());
-- if(!DH_generate_key(dh))
-+ BIGNUM *bnp = bi2bn(domain.p());
-+ BIGNUM *bng = bi2bn(domain.g());
-+ if(!DH_set0_pqg(dh, bnp, NULL, bng)
-+ || !DH_generate_key(dh))
- {
- DH_free(dh);
- return;
-@@ -2478,11 +2655,14 @@ public:
- if(!sec)
- return;
-
-- DH *orig = evp.pkey->pkey.dh;
-+ DH *orig = EVP_PKEY_get0_DH(evp.pkey);
- DH *dh = DH_new();
-- dh->p = BN_dup(orig->p);
-- dh->g = BN_dup(orig->g);
-- dh->pub_key = BN_dup(orig->pub_key);
-+ const BIGNUM *bnp, *bng, *bnpub_key;
-+ DH_get0_pqg(orig, &bnp, NULL, &bng);
-+ DH_get0_key(orig, &bnpub_key, NULL);
-+
-+ DH_set0_key(dh, BN_dup(bnpub_key), NULL);
-+ DH_set0_pqg(dh, BN_dup(bnp), NULL, BN_dup(bng));
-
- evp.reset();
-
-@@ -2498,10 +2678,13 @@ public:
-
- virtual SymmetricKey deriveKey(const PKeyBase &theirs)
- {
-- DH *dh = evp.pkey->pkey.dh;
-- DH *them = static_cast<const DHKey *>(&theirs)->evp.pkey->pkey.dh;
-+ DH *dh = EVP_PKEY_get0_DH(evp.pkey);
-+ DH *them = EVP_PKEY_get0_DH(static_cast<const DHKey *>(&theirs)->evp.pkey);
-+ const BIGNUM *bnpub_key;
-+ DH_get0_key(them, &bnpub_key, NULL);
-+
- SecureArray result(DH_size(dh));
-- int ret = DH_compute_key((unsigned char *)result.data(), them->pub_key, dh);
-+ int ret = DH_compute_key((unsigned char *)result.data(), bnpub_key, dh);
- if(ret <= 0)
- return SymmetricKey();
- result.resize(ret);
-@@ -2531,12 +2714,13 @@ public:
- evp.reset();
-
- DH *dh = DH_new();
-- dh->p = bi2bn(domain.p());
-- dh->g = bi2bn(domain.g());
-- dh->pub_key = bi2bn(y);
-- dh->priv_key = bi2bn(x);
-+ BIGNUM *bnp = bi2bn(domain.p());
-+ BIGNUM *bng = bi2bn(domain.g());
-+ BIGNUM *bnpub_key = bi2bn(y);
-+ BIGNUM *bnpriv_key = bi2bn(x);
-
-- if(!dh->p || !dh->g || !dh->pub_key || !dh->priv_key)
-+ if(!DH_set0_key(dh, bnpub_key, bnpriv_key)
-+ || !DH_set0_pqg(dh, bnp, NULL, bng))
- {
- DH_free(dh);
- return;
-@@ -2552,11 +2736,12 @@ public:
- evp.reset();
-
- DH *dh = DH_new();
-- dh->p = bi2bn(domain.p());
-- dh->g = bi2bn(domain.g());
-- dh->pub_key = bi2bn(y);
-+ BIGNUM *bnp = bi2bn(domain.p());
-+ BIGNUM *bng = bi2bn(domain.g());
-+ BIGNUM *bnpub_key = bi2bn(y);
-
-- if(!dh->p || !dh->g || !dh->pub_key)
-+ if(!DH_set0_key(dh, bnpub_key, NULL)
-+ || !DH_set0_pqg(dh, bnp, NULL, bng))
- {
- DH_free(dh);
- return;
-@@ -2569,17 +2754,26 @@ public:
-
- virtual DLGroup domain() const
- {
-- return DLGroup(bn2bi(evp.pkey->pkey.dh->p), bn2bi(evp.pkey->pkey.dh->g));
-+ DH *dh = EVP_PKEY_get0_DH(evp.pkey);
-+ const BIGNUM *bnp, *bng;
-+ DH_get0_pqg(dh, &bnp, NULL, &bng);
-+ return DLGroup(bn2bi(bnp), bn2bi(bng));
- }
-
- virtual BigInteger y() const
- {
-- return bn2bi(evp.pkey->pkey.dh->pub_key);
-+ DH *dh = EVP_PKEY_get0_DH(evp.pkey);
-+ const BIGNUM *bnpub_key;
-+ DH_get0_key(dh, &bnpub_key, NULL);
-+ return bn2bi(bnpub_key);
- }
-
- virtual BigInteger x() const
- {
-- return bn2bi(evp.pkey->pkey.dh->priv_key);
-+ DH *dh = EVP_PKEY_get0_DH(evp.pkey);
-+ const BIGNUM *bnpriv_key;
-+ DH_get0_key(dh, NULL, &bnpriv_key);
-+ return bn2bi(bnpriv_key);
- }
-
- private slots:
-@@ -2618,10 +2812,14 @@ public:
- {
- key = _key;
- RSA_set_method(rsa, rsa_method());
-+#ifndef OSSL_110
- rsa->flags |= RSA_FLAG_SIGN_VER;
-+#endif
- RSA_set_app_data(rsa, this);
-- rsa->n = bi2bn(_key.n());
-- rsa->e = bi2bn(_key.e());
-+ BIGNUM *bnn = bi2bn(_key.n());
-+ BIGNUM *bne = bi2bn(_key.e());
-+
-+ RSA_set0_key(rsa, bnn, bne, NULL);
- }
-
- RSA_METHOD *rsa_method()
-@@ -2630,12 +2828,16 @@ public:
-
- if(!ops)
- {
-- ops = new RSA_METHOD(*RSA_get_default_method());
-- ops->rsa_priv_enc = 0;//pkcs11_rsa_encrypt;
-- ops->rsa_priv_dec = rsa_priv_dec;
-- ops->rsa_sign = rsa_sign;
-- ops->rsa_verify = 0;//pkcs11_rsa_verify;
-- ops->finish = rsa_finish;
-+ ops = RSA_meth_dup(RSA_get_default_method());
-+ RSA_meth_set_priv_enc(ops, NULL); //pkcs11_rsa_encrypt
-+ RSA_meth_set_priv_dec(ops, rsa_priv_dec); //pkcs11_rsa_encrypt
-+#ifdef OSSL_110
-+ RSA_meth_set_sign(ops, NULL);
-+#else
-+ RSA_meth_set_sign(ops, rsa_sign);
-+#endif
-+ RSA_meth_set_verify(ops, NULL); //pkcs11_rsa_verify
-+ RSA_meth_set_finish(ops, rsa_finish);
- }
- return ops;
- }
-@@ -2654,7 +2856,7 @@ public:
- }
- else
- {
-- RSAerr(RSA_F_RSA_EAY_PRIVATE_DECRYPT, RSA_R_UNKNOWN_PADDING_TYPE);
-+ RSAerr(RSA_F_RSA_OSSL_PRIVATE_DECRYPT, RSA_R_UNKNOWN_PADDING_TYPE);
- return -1;
- }
-
-@@ -2675,6 +2877,7 @@ public:
- return -1;
- }
-
-+#ifndef OSSL_110
- static int rsa_sign(int type, const unsigned char *m, unsigned int m_len, unsigned char *sigret, unsigned int *siglen, const RSA *rsa)
- {
- QCA_RSA_METHOD *self = (QCA_RSA_METHOD *)RSA_get_app_data(rsa);
-@@ -2691,7 +2894,6 @@ public:
- }
- else
- {
--
- // make X509 packet
- X509_SIG sig;
- ASN1_TYPE parameter;
-@@ -2765,6 +2967,7 @@ public:
-
- return 1;
- }
-+#endif
-
- static int rsa_finish(RSA *rsa)
- {
-@@ -2866,21 +3069,22 @@ public:
- PKeyBase *pkeyToBase(EVP_PKEY *pkey, bool sec) const
- {
- PKeyBase *nk = 0;
-- if(pkey->type == EVP_PKEY_RSA)
-+ int pkey_type = EVP_PKEY_type(EVP_PKEY_id(pkey));
-+ if(pkey_type == EVP_PKEY_RSA)
- {
- RSAKey *c = new RSAKey(provider());
- c->evp.pkey = pkey;
- c->sec = sec;
- nk = c;
- }
-- else if(pkey->type == EVP_PKEY_DSA)
-+ else if(pkey_type == EVP_PKEY_DSA)
- {
- DSAKey *c = new DSAKey(provider());
- c->evp.pkey = pkey;
- c->sec = sec;
- nk = c;
- }
-- else if(pkey->type == EVP_PKEY_DH)
-+ else if(pkey_type == EVP_PKEY_DH)
- {
- DHKey *c = new DHKey(provider());
- c->evp.pkey = pkey;
-@@ -2898,8 +3102,10 @@ public:
- {
- EVP_PKEY *pkey = get_pkey();
-
-+ int pkey_type = EVP_PKEY_type(EVP_PKEY_id(pkey));
-+
- // OpenSSL does not have DH import/export support
-- if(pkey->type == EVP_PKEY_DH)
-+ if(pkey_type == EVP_PKEY_DH)
- return QByteArray();
-
- BIO *bo = BIO_new(BIO_s_mem());
-@@ -2912,8 +3118,10 @@ public:
- {
- EVP_PKEY *pkey = get_pkey();
-
-+ int pkey_type = EVP_PKEY_type(EVP_PKEY_id(pkey));
-+
- // OpenSSL does not have DH import/export support
-- if(pkey->type == EVP_PKEY_DH)
-+ if(pkey_type == EVP_PKEY_DH)
- return QString();
-
- BIO *bo = BIO_new(BIO_s_mem());
-@@ -2978,9 +3186,10 @@ public:
- return SecureArray();
-
- EVP_PKEY *pkey = get_pkey();
-+ int pkey_type = EVP_PKEY_type(EVP_PKEY_id(pkey));
-
- // OpenSSL does not have DH import/export support
-- if(pkey->type == EVP_PKEY_DH)
-+ if(pkey_type == EVP_PKEY_DH)
- return SecureArray();
-
- BIO *bo = BIO_new(BIO_s_mem());
-@@ -3007,9 +3216,10 @@ public:
- return QString();
-
- EVP_PKEY *pkey = get_pkey();
-+ int pkey_type = EVP_PKEY_type(EVP_PKEY_id(pkey));
-
- // OpenSSL does not have DH import/export support
-- if(pkey->type == EVP_PKEY_DH)
-+ if(pkey_type == EVP_PKEY_DH)
- return QString();
-
- BIO *bo = BIO_new(BIO_s_mem());
-@@ -3110,11 +3320,18 @@ public:
- crl = from.crl;
-
- if(cert)
-- CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(cert);
- if(req)
-+ {
-+#ifdef OSSL_110
-+ // Not exposed, so copy
-+ req = X509_REQ_dup(req);
-+#else
- CRYPTO_add(&req->references, 1, CRYPTO_LOCK_X509_REQ);
-+#endif
-+ }
- if(crl)
-- CRYPTO_add(&crl->references, 1, CRYPTO_LOCK_X509_CRL);
-+ X509_CRL_up_ref(crl);
- }
-
- return *this;
-@@ -3220,7 +3437,7 @@ public:
- //
- // This code is mostly taken from OpenSSL v0.9.5a
- // by Eric Young
--QDateTime ASN1_UTCTIME_QDateTime(ASN1_UTCTIME *tm, int *isGmt)
-+QDateTime ASN1_UTCTIME_QDateTime(const ASN1_UTCTIME *tm, int *isGmt)
- {
- QDateTime qdt;
- char *v;
-@@ -3318,7 +3535,7 @@ public:
-
- void fromX509(X509 *x)
- {
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- item.cert = x;
- make_props();
- }
-@@ -3349,7 +3566,7 @@ public:
- if(priv.key()->type() == PKey::RSA)
- md = EVP_sha1();
- else if(priv.key()->type() == PKey::DSA)
-- md = EVP_dss1();
-+ md = EVP_sha1();
- else
- return false;
-
-@@ -3480,7 +3697,7 @@ public:
-
- const MyCertContext *our_cc = this;
- X509 *x = our_cc->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(untrusted_list, x);
-
- const MyCertContext *other_cc = static_cast<const MyCertContext *>(other);
-@@ -3595,14 +3812,21 @@ public:
- p.policies = get_cert_policies(ex);
- }
-
-- if (x->signature)
-+#ifdef OSSL_110
-+ const
-+#endif
-+ ASN1_BIT_STRING *signature;
-+
-+ X509_get0_signature(&signature, NULL, x);
-+ if(signature)
- {
-- p.sig = QByteArray(x->signature->length, 0);
-- for (int i=0; i< x->signature->length; i++)
-- p.sig[i] = x->signature->data[i];
-+ p.sig = QByteArray(signature->length, 0);
-+ for (int i=0; i< signature->length; i++)
-+ p.sig[i] = signature->data[i];
- }
-
-- switch( OBJ_obj2nid(x->cert_info->signature->algorithm) )
-+
-+ switch( X509_get_signature_nid(x) )
- {
- case NID_sha1WithRSAEncryption:
- p.sigalgo = QCA::EMSA3_SHA1;
-@@ -3634,7 +3858,7 @@ public:
- p.sigalgo = QCA::EMSA3_SHA512;
- break;
- default:
-- qDebug() << "Unknown signature value: " << OBJ_obj2nid(x->cert_info->signature->algorithm);
-+ qDebug() << "Unknown signature value: " << X509_get_signature_nid(x);
- p.sigalgo = QCA::SignatureUnknown;
- }
-
-@@ -3751,7 +3975,7 @@ public:
- if(privateKey -> key()->type() == PKey::RSA)
- md = EVP_sha1();
- else if(privateKey -> key()->type() == PKey::DSA)
-- md = EVP_dss1();
-+ md = EVP_sha1();
- else
- return 0;
-
-@@ -3934,7 +4158,7 @@ public:
- if(priv.key()->type() == PKey::RSA)
- md = EVP_sha1();
- else if(priv.key()->type() == PKey::DSA)
-- md = EVP_dss1();
-+ md = EVP_sha1();
- else
- return false;
-
-@@ -4095,14 +4319,17 @@ public:
-
- sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
-
-- if (x->signature)
-+ const ASN1_BIT_STRING *signature;
-+
-+ X509_REQ_get0_signature(x, &signature, NULL);
-+ if(signature)
- {
-- p.sig = QByteArray(x->signature->length, 0);
-- for (int i=0; i< x->signature->length; i++)
-- p.sig[i] = x->signature->data[i];
-+ p.sig = QByteArray(signature->length, 0);
-+ for (int i=0; i< signature->length; i++)
-+ p.sig[i] = signature->data[i];
- }
-
-- switch( OBJ_obj2nid(x->sig_alg->algorithm) )
-+ switch( X509_REQ_get_signature_nid(x) )
- {
- case NID_sha1WithRSAEncryption:
- p.sigalgo = QCA::EMSA3_SHA1;
-@@ -4122,7 +4349,7 @@ public:
- p.sigalgo = QCA::EMSA1_SHA1;
- break;
- default:
-- qDebug() << "Unknown signature value: " << OBJ_obj2nid(x->sig_alg->algorithm);
-+ qDebug() << "Unknown signature value: " << X509_REQ_get_signature_nid(x);
- p.sigalgo = QCA::SignatureUnknown;
- }
-
-@@ -4186,7 +4413,7 @@ public:
-
- void fromX509(X509_CRL *x)
- {
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509_CRL);
-+ X509_CRL_up_ref(x);
- item.crl = x;
- make_props();
- }
-@@ -4238,8 +4465,8 @@ public:
-
- for (int i = 0; i < sk_X509_REVOKED_num(revokeStack); ++i) {
- X509_REVOKED *rev = sk_X509_REVOKED_value(revokeStack, i);
-- BigInteger serial = bn2bi(ASN1_INTEGER_to_BN(rev->serialNumber, NULL));
-- QDateTime time = ASN1_UTCTIME_QDateTime( rev->revocationDate, NULL);
-+ BigInteger serial = bn2bi(ASN1_INTEGER_to_BN(X509_REVOKED_get0_serialNumber(rev), NULL));
-+ QDateTime time = ASN1_UTCTIME_QDateTime( X509_REVOKED_get0_revocationDate(rev), NULL);
- QCA::CRLEntry::Reason reason = QCA::CRLEntry::Unspecified;
- int pos = X509_REVOKED_get_ext_by_NID(rev, NID_crl_reason, -1);
- if (pos != -1) {
-@@ -4288,13 +4515,18 @@ public:
- p.revoked.append(thisEntry);
- }
-
-- if (x->signature)
-+ const ASN1_BIT_STRING *signature;
-+
-+ X509_CRL_get0_signature(x, &signature, NULL);
-+ if(signature)
- {
-- p.sig = QByteArray(x->signature->length, 0);
-- for (int i=0; i< x->signature->length; i++)
-- p.sig[i] = x->signature->data[i];
-+ p.sig = QByteArray(signature->length, 0);
-+ for (int i=0; i< signature->length; i++)
-+ p.sig[i] = signature->data[i];
- }
-- switch( OBJ_obj2nid(x->sig_alg->algorithm) )
-+
-+
-+ switch( X509_CRL_get_signature_nid(x) )
- {
- case NID_sha1WithRSAEncryption:
- p.sigalgo = QCA::EMSA3_SHA1;
-@@ -4326,7 +4558,7 @@ public:
- p.sigalgo = QCA::EMSA3_SHA512;
- break;
- default:
-- qWarning() << "Unknown signature value: " << OBJ_obj2nid(x->sig_alg->algorithm);
-+ qWarning() << "Unknown signature value: " << X509_CRL_get_signature_nid(x);
- p.sigalgo = QCA::SignatureUnknown;
- }
-
-@@ -4487,21 +4719,21 @@ Validity MyCertContext::validate(const QList<CertContext*> &trusted, const QList
- {
- const MyCertContext *cc = static_cast<const MyCertContext *>(trusted[n]);
- X509 *x = cc->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(trusted_list, x);
- }
- for(n = 0; n < untrusted.count(); ++n)
- {
- const MyCertContext *cc = static_cast<const MyCertContext *>(untrusted[n]);
- X509 *x = cc->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(untrusted_list, x);
- }
- for(n = 0; n < crls.count(); ++n)
- {
- const MyCRLContext *cc = static_cast<const MyCRLContext *>(crls[n]);
- X509_CRL *x = cc->item.crl;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509_CRL);
-+ X509_CRL_up_ref(x);
- crl_list.append(x);
- }
-
-@@ -4526,7 +4758,7 @@ Validity MyCertContext::validate(const QList<CertContext*> &trusted, const QList
- int ret = X509_verify_cert(ctx);
- int err = -1;
- if(!ret)
-- err = ctx->error;
-+ err = X509_STORE_CTX_get_error(ctx);
-
- // cleanup
- X509_STORE_CTX_free(ctx);
-@@ -4560,21 +4792,21 @@ Validity MyCertContext::validate_chain(const QList<CertContext*> &chain, const Q
- {
- const MyCertContext *cc = static_cast<const MyCertContext *>(trusted[n]);
- X509 *x = cc->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(trusted_list, x);
- }
- for(n = 1; n < chain.count(); ++n)
- {
- const MyCertContext *cc = static_cast<const MyCertContext *>(chain[n]);
- X509 *x = cc->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(untrusted_list, x);
- }
- for(n = 0; n < crls.count(); ++n)
- {
- const MyCRLContext *cc = static_cast<const MyCRLContext *>(crls[n]);
- X509_CRL *x = cc->item.crl;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509_CRL);
-+ X509_CRL_up_ref(x);
- crl_list.append(x);
- }
-
-@@ -4599,7 +4831,7 @@ Validity MyCertContext::validate_chain(const QList<CertContext*> &chain, const Q
- int ret = X509_verify_cert(ctx);
- int err = -1;
- if(!ret)
-- err = ctx->error;
-+ err = X509_STORE_CTX_get_error(ctx);
-
- // grab the chain, which may not be fully populated
- STACK_OF(X509) *xchain = X509_STORE_CTX_get_chain(ctx);
-@@ -4663,7 +4895,7 @@ public:
- for(int n = 1; n < chain.count(); ++n)
- {
- X509 *x = static_cast<const MyCertContext *>(chain[n])->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(ca, x);
- }
- }
-@@ -5398,7 +5630,7 @@ public:
- OpenSSL_add_ssl_algorithms();
- SSL_CTX *ctx = 0;
- switch (version) {
--#ifndef OPENSSL_NO_SSL2
-+#if !defined(OPENSSL_NO_SSL2) && !defined(OSSL_110)
- case TLS::SSL_v2:
- ctx = SSL_CTX_new(SSLv2_client_method());
- break;
-@@ -5429,8 +5661,8 @@ public:
- STACK_OF(SSL_CIPHER) *sk = SSL_get_ciphers(ssl);
- QStringList cipherList;
- for(int i = 0; i < sk_SSL_CIPHER_num(sk); ++i) {
-- SSL_CIPHER *thisCipher = sk_SSL_CIPHER_value(sk, i);
-- cipherList += cipherIDtoString(version, thisCipher->id);
-+ const SSL_CIPHER *thisCipher = sk_SSL_CIPHER_value(sk, i);
-+ cipherList += cipherIDtoString(version, SSL_CIPHER_get_id(thisCipher));
- }
-
- SSL_free(ssl);
-@@ -5807,13 +6039,15 @@ public:
- {
- SessionInfo sessInfo;
-
-- sessInfo.isCompressed = (0 != SSL_SESSION_get_compress_id(ssl->session));
-+ SSL_SESSION *session = SSL_get0_session(ssl);
-+ sessInfo.isCompressed = (0 != SSL_SESSION_get_compress_id(session));
-+ int ssl_version = SSL_version(ssl);
-
-- if (ssl->version == TLS1_VERSION)
-+ if (ssl_version == TLS1_VERSION)
- sessInfo.version = TLS::TLS_v1;
-- else if (ssl->version == SSL3_VERSION)
-+ else if (ssl_version == SSL3_VERSION)
- sessInfo.version = TLS::SSL_v3;
-- else if (ssl->version == SSL2_VERSION)
-+ else if (ssl_version == SSL2_VERSION)
- sessInfo.version = TLS::SSL_v2;
- else {
- qDebug("unexpected version response");
-@@ -5821,7 +6055,7 @@ public:
- }
-
- sessInfo.cipherSuite = cipherIDtoString( sessInfo.version,
-- SSL_get_current_cipher(ssl)->id);
-+ SSL_CIPHER_get_id(SSL_get_current_cipher(ssl)));
-
- sessInfo.cipherMaxBits = SSL_get_cipher_bits(ssl, &(sessInfo.cipherBits));
-
-@@ -6393,7 +6627,7 @@ public:
- for(int n = 0; n < nonroots.count(); ++n)
- {
- X509 *x = static_cast<MyCertContext *>(nonroots[n].context())->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(other_certs, x);
- }
-
-@@ -6435,7 +6669,7 @@ public:
-
- other_certs = sk_X509_new_null();
- X509 *x = static_cast<MyCertContext *>(target.context())->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(other_certs, x);
-
- bi = BIO_new(BIO_s_mem());
-@@ -6498,7 +6732,7 @@ public:
- for(int n = 0; n < untrusted_list.count(); ++n)
- {
- X509 *x = static_cast<MyCertContext *>(untrusted_list[n].context())->item.cert;
-- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
-+ X509_up_ref(x);
- sk_X509_push(other_certs, x);
- }
-
-@@ -6749,14 +6983,27 @@ public:
- opensslCipherContext(const EVP_CIPHER *algorithm, const int pad, Provider *p, const QString &type) : CipherContext(p, type)
- {
- m_cryptoAlgorithm = algorithm;
-- EVP_CIPHER_CTX_init(&m_context);
-+ m_context = EVP_CIPHER_CTX_new();
-+ EVP_CIPHER_CTX_init(m_context);
- m_pad = pad;
- m_type = type;
- }
-
-+ opensslCipherContext(const opensslCipherContext &other)
-+ : CipherContext(other)
-+ {
-+ m_cryptoAlgorithm = other.m_cryptoAlgorithm;
-+ m_context = EVP_CIPHER_CTX_new();
-+ EVP_CIPHER_CTX_copy(m_context, other.m_context);
-+ m_direction = other.m_direction;
-+ m_pad = other.m_pad;
-+ m_type = other.m_type;
-+ }
-+
- ~opensslCipherContext()
- {
-- EVP_CIPHER_CTX_cleanup(&m_context);
-+ EVP_CIPHER_CTX_cleanup(m_context);
-+ EVP_CIPHER_CTX_free(m_context);
- }
-
- void setup(Direction dir,
-@@ -6769,20 +7016,20 @@ public:
- m_cryptoAlgorithm = EVP_des_ede();
- }
- if (Encode == m_direction) {
-- EVP_EncryptInit_ex(&m_context, m_cryptoAlgorithm, 0, 0, 0);
-- EVP_CIPHER_CTX_set_key_length(&m_context, key.size());
-- EVP_EncryptInit_ex(&m_context, 0, 0,
-+ EVP_EncryptInit_ex(m_context, m_cryptoAlgorithm, 0, 0, 0);
-+ EVP_CIPHER_CTX_set_key_length(m_context, key.size());
-+ EVP_EncryptInit_ex(m_context, 0, 0,
- (const unsigned char*)(key.data()),
- (const unsigned char*)(iv.data()));
- } else {
-- EVP_DecryptInit_ex(&m_context, m_cryptoAlgorithm, 0, 0, 0);
-- EVP_CIPHER_CTX_set_key_length(&m_context, key.size());
-- EVP_DecryptInit_ex(&m_context, 0, 0,
-+ EVP_DecryptInit_ex(m_context, m_cryptoAlgorithm, 0, 0, 0);
-+ EVP_CIPHER_CTX_set_key_length(m_context, key.size());
-+ EVP_DecryptInit_ex(m_context, 0, 0,
- (const unsigned char*)(key.data()),
- (const unsigned char*)(iv.data()));
- }
-
-- EVP_CIPHER_CTX_set_padding(&m_context, m_pad);
-+ EVP_CIPHER_CTX_set_padding(m_context, m_pad);
- }
-
- Provider::Context *clone() const
-@@ -6792,7 +7039,7 @@ public:
-
- int blockSize() const
- {
-- return EVP_CIPHER_CTX_block_size(&m_context);
-+ return EVP_CIPHER_CTX_block_size(m_context);
- }
-
- bool update(const SecureArray &in, SecureArray *out)
-@@ -6805,7 +7052,7 @@ public:
- out->resize(in.size()+blockSize());
- int resultLength;
- if (Encode == m_direction) {
-- if (0 == EVP_EncryptUpdate(&m_context,
-+ if (0 == EVP_EncryptUpdate(m_context,
- (unsigned char*)out->data(),
- &resultLength,
- (unsigned char*)in.data(),
-@@ -6813,7 +7060,7 @@ public:
- return false;
- }
- } else {
-- if (0 == EVP_DecryptUpdate(&m_context,
-+ if (0 == EVP_DecryptUpdate(m_context,
- (unsigned char*)out->data(),
- &resultLength,
- (unsigned char*)in.data(),
-@@ -6830,13 +7077,13 @@ public:
- out->resize(blockSize());
- int resultLength;
- if (Encode == m_direction) {
-- if (0 == EVP_EncryptFinal_ex(&m_context,
-+ if (0 == EVP_EncryptFinal_ex(m_context,
- (unsigned char*)out->data(),
- &resultLength)) {
- return false;
- }
- } else {
-- if (0 == EVP_DecryptFinal_ex(&m_context,
-+ if (0 == EVP_DecryptFinal_ex(m_context,
- (unsigned char*)out->data(),
- &resultLength)) {
- return false;
-@@ -6871,7 +7118,7 @@ public:
-
-
- protected:
-- EVP_CIPHER_CTX m_context;
-+ EVP_CIPHER_CTX *m_context;
- const EVP_CIPHER *m_cryptoAlgorithm;
- Direction m_direction;
- int m_pad;
-diff --git a/unittest/tls/tlsunittest.cpp b/unittest/tls/tlsunittest.cpp
-index fb8fa10..5e88002 100644
---- a/unittest/tls/tlsunittest.cpp
-+++ b/unittest/tls/tlsunittest.cpp
-@@ -60,15 +60,16 @@ void TLSUnitTest::testCipherList()
- QCA::TLS *tls = new QCA::TLS(QCA::TLS::Stream, 0, "qca-ossl");
- QStringList cipherList = tls->supportedCipherSuites(QCA::TLS::TLS_v1);
- QVERIFY( cipherList.contains("TLS_DHE_RSA_WITH_AES_256_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_DHE_DSS_WITH_AES_256_CBC_SHA") );
- QVERIFY( cipherList.contains("TLS_RSA_WITH_AES_256_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_RSA_WITH_3DES_EDE_CBC_SHA") );
- QVERIFY( cipherList.contains("TLS_DHE_RSA_WITH_AES_128_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_DHE_DSS_WITH_AES_128_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_RSA_WITH_AES_128_CBC_SHA") );
-- QVERIFY( cipherList.contains("TLS_RSA_WITH_RC4_128_SHA") );
-+
-+ // openSUSE TW OpenSSL 1.1 does not have this
-+ // QVERIFY( cipherList.contains("TLS_DHE_DSS_WITH_AES_256_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("TLS_RSA_WITH_3DES_EDE_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("TLS_RSA_WITH_AES_128_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("TLS_DHE_DSS_WITH_AES_128_CBC_SHA") );
-
- // Fedora 22 has no TLS_RSA_WITH_RC4_128_MD5
- // QVERIFY( cipherList.contains("TLS_RSA_WITH_RC4_128_MD5") );
-@@ -87,17 +88,17 @@ void TLSUnitTest::testCipherList()
- // QVERIFY( cipherList.contains("TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5") );
- // QVERIFY( cipherList.contains("TLS_RSA_EXPORT_WITH_RC4_40_MD5") );
-
-- cipherList = tls->supportedCipherSuites(QCA::TLS::SSL_v3);
-- QVERIFY( cipherList.contains("SSL_DHE_RSA_WITH_AES_256_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_DHE_DSS_WITH_AES_256_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_RSA_WITH_AES_256_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_RSA_WITH_3DES_EDE_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_DHE_RSA_WITH_AES_128_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_DHE_DSS_WITH_AES_128_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_RSA_WITH_AES_128_CBC_SHA") );
-- QVERIFY( cipherList.contains("SSL_RSA_WITH_RC4_128_SHA") );
-+ // OpenSSL 1.1 in openSUSE TW has it disabled by default
-+ // cipherList = tls->supportedCipherSuites(QCA::TLS::SSL_v3);
-+ // QVERIFY( cipherList.contains("SSL_DHE_RSA_WITH_AES_256_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_DHE_DSS_WITH_AES_256_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_RSA_WITH_AES_256_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_RSA_WITH_3DES_EDE_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_DHE_RSA_WITH_AES_128_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_DHE_DSS_WITH_AES_128_CBC_SHA") );
-+ // QVERIFY( cipherList.contains("SSL_RSA_WITH_AES_128_CBC_SHA") );
-
- // Fedora 22 has no SSL_RSA_WITH_RC4_128_MD5
- // QVERIFY( cipherList.contains("SSL_RSA_WITH_RC4_128_MD5") );
diff --git a/deps/qca-qt5/qca-qt5.SlackBuild b/deps/qca-qt5/qca-qt5.SlackBuild
index 9187549..3bbd1e8 100755
--- a/deps/qca-qt5/qca-qt5.SlackBuild
+++ b/deps/qca-qt5/qca-qt5.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
# Copyright 2015 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2015, 2016, 2017, 2018, 2019 Eric Hameleers, Eindhoven, NL
+# Copyright 2015, 2016, 2017, 2018, 2019, 2020 Eric Hameleers, Eindhoven, NL
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -21,11 +21,12 @@
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+cd $(dirname $0) ; CWD=$(pwd)
+
PKGNAM=qca-qt5
SRCNAM=qca
-VERSION=${VERSION:-2.2.1}
+VERSION=${VERSION:-2.3.1}
BUILD=${BUILD:-1}
-NUMJOBS=${NUMJOBS:-" -j$(nproc) "}
# Automatically determine the architecture we're building on:
if [ -z "$ARCH" ]; then
@@ -38,6 +39,19 @@ if [ -z "$ARCH" ]; then
export ARCH
fi
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-$PKGNAM
+
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
@@ -52,26 +66,22 @@ elif [ "$ARCH" = "x86_64" ]; then
LIBDIRSUFFIX="64"
fi
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-${PKGNAM}
-
rm -rf $PKG
mkdir -p $TMP $PKG
cd $TMP
rm -rf $SRCNAM-$VERSION
-tar xvf $CWD/$SRCNAM-$VERSION.tar.?z* || exit 1
+tar xvf $CWD/$SRCNAM-$VERSION.tar.?z || exit 1
cd $SRCNAM-$VERSION || exit 1
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
+ -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
+ -exec chmod 644 {} \+
# Note: Slackware already has the qt4 build of this,
-# it needs "-DQT4_BUILD=ON" as aditional cmake parameter.
+# The qt4 support has been removed as of 2.3.0 .
mkdir -p build
cd build
cmake \
diff --git a/deps/qt5-webkit/.deps b/deps/qt5-webkit/.deps
deleted file mode 100644
index 14ae13d..0000000
--- a/deps/qt5-webkit/.deps
+++ /dev/null
@@ -1,3 +0,0 @@
-qt5
-hyphen
-woff2
diff --git a/deps/qt5-webkit/.url b/deps/qt5-webkit/.url
deleted file mode 100644
index 0037258..0000000
--- a/deps/qt5-webkit/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/annulen/webkit/releases/download/qtwebkit-5.212.0-alpha3/qtwebkit-5.212.0-alpha3.tar.xz
diff --git a/deps/qt5-webkit/patches/qt5-webkit.gcc7.patch b/deps/qt5-webkit/patches/qt5-webkit.gcc7.patch
deleted file mode 100644
index bddb6fc..0000000
--- a/deps/qt5-webkit/patches/qt5-webkit.gcc7.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff -u -r webkitgtk-2.16.5/Source/WTF/wtf/text/StringImpl.h webkitgtk-2.16.5-gcc7/Source/WTF/wtf/text/StringImpl.h
---- webkitgtk-2.16.5/Source/WTF/wtf/text/StringImpl.h 2017-02-20 17:20:15.000000000 +0100
-+++ webkitgtk-2.16.5-gcc7/Source/WTF/wtf/text/StringImpl.h 2017-06-27 13:13:57.801527350 +0200
-@@ -581,29 +581,7 @@
- // FIXME: Does this really belong in StringImpl?
- template <typename T> static void copyChars(T* destination, const T* source, unsigned numCharacters)
- {
-- if (numCharacters == 1) {
-- *destination = *source;
-- return;
-- }
--
-- if (numCharacters <= s_copyCharsInlineCutOff) {
-- unsigned i = 0;
--#if (CPU(X86) || CPU(X86_64))
-- const unsigned charsPerInt = sizeof(uint32_t) / sizeof(T);
--
-- if (numCharacters > charsPerInt) {
-- unsigned stopCount = numCharacters & ~(charsPerInt - 1);
--
-- const uint32_t* srcCharacters = reinterpret_cast<const uint32_t*>(source);
-- uint32_t* destCharacters = reinterpret_cast<uint32_t*>(destination);
-- for (unsigned j = 0; i < stopCount; i += charsPerInt, ++j)
-- destCharacters[j] = srcCharacters[j];
-- }
--#endif
-- for (; i < numCharacters; ++i)
-- destination[i] = source[i];
-- } else
-- memcpy(destination, source, numCharacters * sizeof(T));
-+ memcpy(destination, source, numCharacters * sizeof(T));
- }
-
- ALWAYS_INLINE static void copyChars(UChar* destination, const LChar* source, unsigned numCharacters)
diff --git a/deps/qt5-webkit/patches/qt5-webkit.icu59.patch b/deps/qt5-webkit/patches/qt5-webkit.icu59.patch
deleted file mode 100644
index 3eb73b2..0000000
--- a/deps/qt5-webkit/patches/qt5-webkit.icu59.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-Submitted by: DJ Lucas (dj_AT_linuxfromscratch_DOT_org)
-Date: 2017-04-29
-Initial Package Version: 5.8.0
-Upstream Status: Unknown
-Origin: https://bugreports.qt.io/browse/QTBUG-35971
-Description: Fixes build with icu-59.
-
-diff -Naurp qtwebkit-opensource-src-5.8.0-orig/Source/JavaScriptCore/API/JSStringRef.h qtwebkit-opensource-src-5.8.0/Source/JavaScriptCore/API/JSStringRef.h
---- qtwebkit-opensource-src-5.8.0-orig/Source/JavaScriptCore/API/JSStringRef.h 2016-12-10 10:32:34.000000000 -0600
-+++ qtwebkit-opensource-src-5.8.0/Source/JavaScriptCore/API/JSStringRef.h 2017-04-29 17:03:35.280465079 -0500
-@@ -32,6 +32,7 @@
- #include <stdbool.h>
- #endif
- #include <stddef.h> /* for size_t */
-+#include <uchar.h>
-
- #ifdef __cplusplus
- extern "C" {
-@@ -43,7 +44,7 @@ extern "C" {
- @typedef JSChar
- @abstract A Unicode character.
- */
-- typedef unsigned short JSChar;
-+ typedef char16_t JSChar;
- #else
- typedef wchar_t JSChar;
- #endif
-diff -Naurp qtwebkit-opensource-src-5.8.0-orig/Source/WTF/wtf/Compiler.h qtwebkit-opensource-src-5.8.0/Source/WTF/wtf/Compiler.h
---- qtwebkit-opensource-src-5.8.0-orig/Source/WTF/wtf/Compiler.h 2016-12-10 10:32:34.000000000 -0600
-+++ qtwebkit-opensource-src-5.8.0/Source/WTF/wtf/Compiler.h 2017-04-29 17:03:35.280465079 -0500
-@@ -61,6 +61,7 @@
- #define WTF_COMPILER_SUPPORTS_HAS_TRIVIAL_DESTRUCTOR __has_feature(has_trivial_destructor)
- #define WTF_COMPILER_SUPPORTS_CXX_STRONG_ENUMS __has_feature(cxx_strong_enums)
- #define WTF_COMPILER_SUPPORTS_CXX_REFERENCE_QUALIFIED_FUNCTIONS __has_feature(cxx_reference_qualified_functions)
-+#define WTF_COMPILER_SUPPORTS_CXX_NEW_CHAR_TYPES !defined(_LIBCPP_HAS_NO_UNICODE_CHARS)
-
- #endif
-
-@@ -142,6 +143,7 @@
- #define WTF_COMPILER_SUPPORTS_CXX_DELETED_FUNCTIONS 1
- #endif
- #if GCC_VERSION_AT_LEAST(4, 5, 0)
-+#define WTF_COMPILER_SUPPORTS_CXX_NEW_CHAR_TYPES 1
- #define WTF_COMPILER_SUPPORTS_CXX_EXPLICIT_CONVERSIONS 1
- #endif
- #if GCC_VERSION_AT_LEAST(4, 6, 0)
-diff -Naurp qtwebkit-opensource-src-5.8.0-orig/Source/WTF/wtf/TypeTraits.h qtwebkit-opensource-src-5.8.0/Source/WTF/wtf/TypeTraits.h
---- qtwebkit-opensource-src-5.8.0-orig/Source/WTF/wtf/TypeTraits.h 2016-12-10 10:32:34.000000000 -0600
-+++ qtwebkit-opensource-src-5.8.0/Source/WTF/wtf/TypeTraits.h 2017-04-29 17:03:35.280465079 -0500
-@@ -75,6 +75,10 @@ namespace WTF {
- #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED)
- template<> struct IsInteger<wchar_t> { static const bool value = true; };
- #endif
-+#if COMPILER_SUPPORTS(CXX_NEW_CHAR_TYPES)
-+ template<> struct IsInteger<char16_t> { static const bool value = true; };
-+ template<> struct IsInteger<char32_t> { static const bool value = true; };
-+#endif
-
- template<typename T> struct IsFloatingPoint { static const bool value = false; };
- template<> struct IsFloatingPoint<float> { static const bool value = true; };
-diff -Naurp qtwebkit-opensource-src-5.8.0-orig/Source/WebKit2/Shared/API/c/WKString.h qtwebkit-opensource-src-5.8.0/Source/WebKit2/Shared/API/c/WKString.h
---- qtwebkit-opensource-src-5.8.0-orig/Source/WebKit2/Shared/API/c/WKString.h 2016-12-10 10:32:34.000000000 -0600
-+++ qtwebkit-opensource-src-5.8.0/Source/WebKit2/Shared/API/c/WKString.h 2017-04-29 17:03:35.280465079 -0500
-@@ -31,6 +31,7 @@
- #ifndef __cplusplus
- #include <stdbool.h>
- #endif
-+#include <uchar.h>
-
- #ifdef __cplusplus
- extern "C" {
-@@ -38,7 +39,7 @@ extern "C" {
-
- #if !defined(WIN32) && !defined(_WIN32) \
- && !((defined(__CC_ARM) || defined(__ARMCC__)) && !defined(__linux__)) /* RVCT */
-- typedef unsigned short WKChar;
-+ typedef char16_t WKChar;
- #else
- typedef wchar_t WKChar;
- #endif
diff --git a/deps/qt5-webkit/patches/qt5-webkit.icu65.patch b/deps/qt5-webkit/patches/qt5-webkit.icu65.patch
deleted file mode 100644
index fe27d24..0000000
--- a/deps/qt5-webkit/patches/qt5-webkit.icu65.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-# -----------------------------------------------------------------------------
-# Patch obtained from FreeBSD:
-# https://svnweb.freebsd.org/ports/head/www/qt5-webkit/files/patch-Source_WebCore_dom_Document.cpp?view=co
-# -----------------------------------------------------------------------------
-Regressed by https://github.com/unicode-org/icu/commit/480bec3ea652
-
-In file included from Source/WebCore/dom/DOMAllInOne.cpp:67:
-Source/WebCore/dom/Document.cpp:4410:39: error: expected ';' after do/while statement
- U16_NEXT(characters, i, length, c)
- ^
- ;
-Source/WebCore/dom/Document.cpp:4415:43: error: expected ';' after do/while statement
- U16_NEXT(characters, i, length, c)
- ^
- ;
-Source/WebCore/dom/Document.cpp:4477:46: error: expected ';' after do/while statement
- U16_NEXT(qualifiedName, i, length, c)
- ^
- ;
-
---- Source/WebCore/dom/Document.cpp.orig 2019-06-26 16:25:02 UTC
-+++ Source/WebCore/dom/Document.cpp
-@@ -4407,12 +4407,12 @@ static bool isValidNameNonASCII(const UChar* character
- unsigned i = 0;
-
- UChar32 c;
-- U16_NEXT(characters, i, length, c)
-+ U16_NEXT(characters, i, length, c);
- if (!isValidNameStart(c))
- return false;
-
- while (i < length) {
-- U16_NEXT(characters, i, length, c)
-+ U16_NEXT(characters, i, length, c);
- if (!isValidNamePart(c))
- return false;
- }
-@@ -4474,7 +4474,7 @@ bool Document::parseQualifiedName(const String& qualif
-
- for (unsigned i = 0; i < length;) {
- UChar32 c;
-- U16_NEXT(qualifiedName, i, length, c)
-+ U16_NEXT(qualifiedName, i, length, c);
- if (c == ':') {
- if (sawColon) {
- ec = NAMESPACE_ERR;
-
diff --git a/deps/qt5-webkit/patches/qt5-webkit.pthread.patch b/deps/qt5-webkit/patches/qt5-webkit.pthread.patch
deleted file mode 100644
index 53d5439..0000000
--- a/deps/qt5-webkit/patches/qt5-webkit.pthread.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 5f359baacdf92fabcece83f0a2b30f74c7c02a3c Mon Sep 17 00:00:00 2001
-From: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
-Date: Mon, 22 Feb 2016 10:57:32 +0100
-Subject: [PATCH] Fix linking with libpthread
-
-WebKit use libpthread directly but is depending on other qt modules
-causing it to be linked against, which might break unless -lpthread
-is last. Instead just add it explicitly after the static libraries.
-
-Change-Id: I2b95cff2c96373f8dce6f95052c4fccbe1982b33
-Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
-(cherry picked from commit 5dd4bb67cfce812fd7686e43616e2069f354a7df)
-Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
----
- Tools/qmake/mkspecs/features/default_post.prf | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/Tools/qmake/mkspecs/features/default_post.prf b/Tools/qmake/mkspecs/features/default_post.prf
-index 67276b7..39bb3f7 100644
---- a/Tools/qmake/mkspecs/features/default_post.prf
-+++ b/Tools/qmake/mkspecs/features/default_post.prf
-@@ -201,6 +201,7 @@ needToLink() {
- linkAgainstLibrary($$library, $$eval(WEBKIT.$${library_identifier}.root_source_dir))
- LIBS += $$eval(WEBKIT.$${library_identifier}.dependent_libs)
- }
-+ posix:!darwin: LIBS += -lpthread
- }
-
- creating_module {
---
-2.7.1
-
diff --git a/deps/qt5-webkit/qt5-webkit.SlackBuild b/deps/qt5-webkit/qt5-webkit.SlackBuild
deleted file mode 100755
index 5bad338..0000000
--- a/deps/qt5-webkit/qt5-webkit.SlackBuild
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/bin/sh
-
-# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# Derived from the qt5.SlackBuild
-
-# Modifications for qt5-webkit 5.6.0, 5.6.1, 5.7.0, 5.7.1, 5.9.0, 5.9.1, 5.212 2016, 2017, 2018, 2019 by Eric Hameleers, Eindhoven, NL
-
-PKGNAM=qt5-webkit
-SRCVER=${SRCVER:-"5.212.0-alpha3"}
-VERSION=$(echo $SRCVER | tr - _)
-BUILD=${BUILD:-2}
-
-NUMJOBS=${NUMJOBS:-"-j$(nproc)"}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- SLKLDFLAGS=""
- SLKLDFLAGS="-L/usr/lib64"
- LIBDIRSUFFIX="64"
-else
- SLKCFLAGS="-O2"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-${PKGNAM}
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf qtwebkit-$SRCVER
-echo "Extracting qtwebkit-$SRCVER.tar.xz"
-tar xf $CWD/qtwebkit-$SRCVER.tar.xz || exit 1
-cd qtwebkit-$SRCVER || exit 1
-
-# Fix compilation against icu4c 65.1:
-cat $CWD/patches/qt5-webkit.icu65.patch | patch -p0 --verbose || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# Use -reduce-relocations only on i?86 and x86_64 architextures.
-# https://bugreports.qt-project.org/browse/QTBUG-36129
-if echo $ARCH | grep -q '\(i.86\|x86_64\)' 2>/dev/null; then
- RELOCATIONS="-reduce-relocations"
-else
- RELOCATIONS=""
-fi
-
-export CFLAGS="$SLKCFLAGS"
-export CXXFLAGS="$SLKCFLAGS -fpermissive -fno-strict-aliasing"
-export OPENSOURCE_CXXFLAGS="$SLKCFLAGS -fpermissive -fno-strict-aliasing"
-export QTDIR="/usr/lib$LIBDIRSUFFIX/qt5"
-export LD_LIBRARY_PATH="${QTDIR}/qtbase/lib:${QTDIR}/qttools/lib:${LD_LIBRARY_PATH}"
-
-mkdir build
-cd build
- cmake .. \
- -DPORT=Qt \
- -DQt5_DIR=$QTDIR \
- || exit 1
- make ${NUMJOBS} || make || exit 1
- make install DESTDIR=$PKG || exit 1
-cd ..
-
-# Strip binaries the Slackware way:
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-# Fix the path in prl files:
-find "$PKG/usr/lib${LIBDIRSUFFIX}" -type f -name '*.prl' \
- -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/' {} \;
-
-# Add a documentation directory:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- ChangeLog* VERSION \
- $PKG/usr/doc/$PKGNAM-$VERSION
-if [ -d $PKG/usr/lib${LIBDIRSUFFIX}/qt5/doc/html ]; then
- ( cd $PKG/usr/doc/$PKGNAM-$VERSION
- ln -sf /usr/lib${LIBDIRSUFFIX}/qt5/doc/html .
- )
-fi
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/qt5-webkit/slack-desc b/deps/qt5-webkit/slack-desc
deleted file mode 100644
index baba7e8..0000000
--- a/deps/qt5-webkit/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-qt5-webkit: qt5-webkit (Qt based web browser engine)
-qt5-webkit:
-qt5-webkit: Qtwebkit is a Qt based web browser engine.
-qt5-webkit: This package contains the Qt5 based version.
-qt5-webkit:
-qt5-webkit: Homepage: http://qt-project.org
-qt5-webkit:
-qt5-webkit:
-qt5-webkit:
-qt5-webkit:
-qt5-webkit:
diff --git a/deps/qt5/.deps b/deps/qt5/.deps
deleted file mode 100644
index d1eaacd..0000000
--- a/deps/qt5/.deps
+++ /dev/null
@@ -1,2 +0,0 @@
-OpenAL
-libxkbcommon
diff --git a/deps/qt5/.url b/deps/qt5/.url
deleted file mode 100644
index cc9f30b..0000000
--- a/deps/qt5/.url
+++ /dev/null
@@ -1 +0,0 @@
-https://download.qt.io/official_releases/qt/5.13/5.13.2/single/qt-everywhere-src-5.13.2.tar.xz
diff --git a/deps/qt5/doinst.sh b/deps/qt5/doinst.sh
deleted file mode 100644
index 3e5691a..0000000
--- a/deps/qt5/doinst.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-if [ -x /usr/bin/update-desktop-database ]; then
- /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
-fi
-
-if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
- if [ -x /usr/bin/gtk-update-icon-cache ]; then
- /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
- fi
-fi
diff --git a/deps/qt5/patches/platformplugin-install-path-fix.patch b/deps/qt5/patches/platformplugin-install-path-fix.patch
deleted file mode 100644
index db9b33b..0000000
--- a/deps/qt5/patches/platformplugin-install-path-fix.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-See https://bugs.webkit.org/show_bug.cgi?id=117077
-
-diff -Naur qt-everywhere-opensource-src-5.0.2.orig/qtwebkit/Source/WebKit/qt/examples/platformplugin/platformplugin.pro qt-everywhere-opensource-src-5.0.2/qtwebkit/Source/WebKit/qt/examples/platformplugin/platformplugin.pro
---- qt-everywhere-opensource-src-5.0.2.orig/qtwebkit/Source/WebKit/qt/examples/platformplugin/platformplugin.pro 2013-04-09 00:11:38.000000000 +0000
-+++ qt-everywhere-opensource-src-5.0.2/qtwebkit/Source/WebKit/qt/examples/platformplugin/platformplugin.pro 2013-05-31 01:18:29.157175082 +0000
-@@ -20,7 +20,8 @@
- }
- }
-
--DESTDIR = $$[QT_INSTALL_PLUGINS]/webkit
-+target.path = $$[QT_INSTALL_PLUGINS]/webkit
-+INSTALLS += target
-
- SOURCES += \
- WebPlugin.cpp \
diff --git a/deps/qt5/patches/qt5.alsa.patch b/deps/qt5/patches/qt5.alsa.patch
deleted file mode 100644
index 892431b..0000000
--- a/deps/qt5/patches/qt5.alsa.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- qt-everywhere-opensource-src-5.6.0/qtbase/config.tests/unix/alsa/alsatest.cpp.orig 2016-02-29 08:15:48.203031809 +0000
-+++ qt-everywhere-opensource-src-5.6.0/qtbase/config.tests/unix/alsa/alsatest.cpp 2016-02-29 08:16:39.712811962 +0000
-@@ -32,7 +32,7 @@
- ****************************************************************************/
-
- #include <alsa/asoundlib.h>
--#if(!(SND_LIB_MAJOR == 1 && SND_LIB_MINOR == 0 && SND_LIB_SUBMINOR >= 10))
-+#if(!(SND_LIB_MAJOR == 1 && (SND_LIB_MINOR > 0 || SND_LIB_SUBMINOR >= 10)))
- #error "Alsa version found too old, require >= 1.0.10"
- #endif
-
diff --git a/deps/qt5/patches/qt5.cr206850.patch b/deps/qt5/patches/qt5.cr206850.patch
deleted file mode 100644
index 1fb71df..0000000
--- a/deps/qt5/patches/qt5.cr206850.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-The latest MariaDB versions aren't caught properly by the checks in Qt, which
-may cause a regression to appear (regression, because it was already fixed in
-Qt by Dan Vratil): this manifests itself in Akonadi losing its connection to
-the database if running for long periods of time.
-
-Until this is fixed in Qt, you may want to apply this patch in your packages:
-
-https://codereview.qt-project.org/#/c/206850/
-
-From 64588c9bae92ef79f9ca5e87653ffb0962691d0d Mon Sep 17 00:00:00 2001
-From: Andy Shaw <andy.shaw@qt.io>
-Date: Wed, 27 Sep 2017 09:23:10 +0200
-Subject: [PATCH] Extend the MariaDB define check to cover the later versions too
-
-Change-Id: Ide89b4e07feb116bf152cbf3f5630d313e8ba0f1
----
- src/plugins/sqldrivers/mysql/qsql_mysql.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
-index 6e428fb..b2d3e85 100644
---- a/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
-+++ b/src/plugins/sqldrivers/mysql/qsql_mysql.cpp
-@@ -1159,14 +1159,14 @@ static void qLibraryInit()
- # endif // MYSQL_VERSION_ID
- #endif // Q_NO_MYSQL_EMBEDDED
-
--#ifdef MARIADB_BASE_VERSION
-+#if defined(MARIADB_BASE_VERSION) || defined(MARIADB_VERSION_ID)
- qAddPostRoutine(mysql_server_end);
- #endif
- }
-
- static void qLibraryEnd()
- {
--#if !defined(MARIADB_BASE_VERSION)
-+#if !defined(MARIADB_BASE_VERSION) && !defined(MARIADB_VERSION_ID)
- # if !defined(Q_NO_MYSQL_EMBEDDED)
- # if MYSQL_VERSION_ID > 40000
- # if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003
---
-2.7.4
-
diff --git a/deps/qt5/patches/qt5.cve-2020-0569.patch b/deps/qt5/patches/qt5.cve-2020-0569.patch
deleted file mode 100644
index fa0efdc..0000000
--- a/deps/qt5/patches/qt5.cve-2020-0569.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From bf131e8d2181b3404f5293546ed390999f760404 Mon Sep 17 00:00:00 2001
-From: Olivier Goffart <ogoffart@woboq.com>
-Date: Fri, 8 Nov 2019 11:30:40 +0100
-Subject: Do not load plugin from the $PWD
-
-I see no reason why this would make sense to look for plugins in the current
-directory. And when there are plugins there, it may actually be wrong
-
-Change-Id: I5f5aa168021fedddafce90effde0d5762cd0c4c5
-Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
----
- src/corelib/plugin/qpluginloader.cpp | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp
-index cadff4f32b..c2443dbdda 100644
---- a/src/corelib/plugin/qpluginloader.cpp
-+++ b/src/corelib/plugin/qpluginloader.cpp
-@@ -305,7 +305,6 @@ static QString locatePlugin(const QString& fileName)
- paths.append(fileName.left(slash)); // don't include the '/'
- } else {
- paths = QCoreApplication::libraryPaths();
-- paths.prepend(QStringLiteral(".")); // search in current dir first
- }
-
- for (const QString &path : qAsConst(paths)) {
---
-cgit v1.2.1
-
diff --git a/deps/qt5/patches/qt5.cve-2020-0570.patch b/deps/qt5/patches/qt5.cve-2020-0570.patch
deleted file mode 100644
index fa3eb33..0000000
--- a/deps/qt5/patches/qt5.cve-2020-0570.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-QLibrary/Unix: do not attempt to load a library relative to $PWD
-
-I added the code in commit 5219c37f7c98f37f078fee00fe8ca35d83ff4f5d to
-find libraries in a haswell/ subdir of the main path, but we only need
-to do that transformation if the library is contains at least one
-directory seprator. That is, if the user asks to load "lib/foo", then we
-should try "lib/haswell/foo" (often, the path prefix will be absolute).
-
-When the library name the user requested has no directory separators, we
-let dlopen() do the transformation for us. Testing on Linux confirms
-glibc does so:
-
-$ LD_DEBUG=libs /lib64/ld-linux-x86-64.so.2 --inhibit-cache ./qml -help |& grep Xcursor
- 1972475: find library=libXcursor.so.1 [0]; searching
- 1972475: trying file=/usr/lib64/haswell/avx512_1/libXcursor.so.1
- 1972475: trying file=/usr/lib64/haswell/libXcursor.so.1
- 1972475: trying file=/usr/lib64/libXcursor.so.1
- 1972475: calling init: /usr/lib64/libXcursor.so.1
- 1972475: calling fini: /usr/lib64/libXcursor.so.1 [0]
-
-Fixes: QTBUG-81272
-Change-Id: I596aec77785a4e4e84d5fffd15e89689bb91ffbb
-
-X-Git-Url: https://codereview.qt-project.org/gitweb?p=qt%2Fqtbase.git;a=blobdiff_plain;f=src%2Fcorelib%2Fplugin%2Fqlibrary_unix.cpp;h=135b82cd378b00abe231c2320866d88f8a71b25a;hp=f0de1010d7b7126d83c4365a31924fa080ec334d;hb=27d92ead3a5f3c145f16b96f95a43c5af136a36b;hpb=3b54009b13e9629b75827a59f8537451d25613a4
-
-diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp
-index f0de1010d7b..135b82cd378 100644
---- a/src/corelib/plugin/qlibrary_unix.cpp
-+++ b/src/corelib/plugin/qlibrary_unix.cpp
-@@ -1,7 +1,7 @@
- /****************************************************************************
- **
- ** Copyright (C) 2016 The Qt Company Ltd.
--** Copyright (C) 2018 Intel Corporation
-+** Copyright (C) 2020 Intel Corporation
- ** Contact: https://www.qt.io/licensing/
- **
- ** This file is part of the QtCore module of the Qt Toolkit.
-@@ -218,6 +218,8 @@ bool QLibraryPrivate::load_sys()
- for(int suffix = 0; retry && !pHnd && suffix < suffixes.size(); suffix++) {
- if (!prefixes.at(prefix).isEmpty() && name.startsWith(prefixes.at(prefix)))
- continue;
-+ if (path.isEmpty() && prefixes.at(prefix).contains(QLatin1Char('/')))
-+ continue;
- if (!suffixes.at(suffix).isEmpty() && name.endsWith(suffixes.at(suffix)))
- continue;
- if (loadHints & QLibrary::LoadArchiveMemberHint) {
-
diff --git a/deps/qt5/patches/qt5.delayed_highlight.patch b/deps/qt5/patches/qt5.delayed_highlight.patch
deleted file mode 100644
index 201179b..0000000
--- a/deps/qt5/patches/qt5.delayed_highlight.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-From f8f0f3eef1151c9377a5c76ccfa6432e930e1307 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= <marten.nordheim@qt.io>
-Date: Mon, 14 Jan 2019 10:37:42 +0100
-Subject: QSyntaxHighlighter: cancel delayed highlight if done manually
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-It was an implicit effect before which stopped working after
-dec7961709c90f6977d2447f7fa6c6625af41cb2. Reintroduce it as some
-projects used this side-effect as a way to abort the initial
-highlighting.
-
-Change-Id: I5340ee9882a242bc8b5f7f843f1cfe793a65d357
-Reviewed-by: J?drzej Nowacki <jedrzej.nowacki@qt.io>
----
- src/gui/text/qsyntaxhighlighter.cpp | 1 +
- .../qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp | 19 +++++++++++++++++++
- 2 files changed, 20 insertions(+)
-
-diff --git a/src/gui/text/qsyntaxhighlighter.cpp b/src/gui/text/qsyntaxhighlighter.cpp
-index b09f8b565a..0e07b69868 100644
---- a/src/gui/text/qsyntaxhighlighter.cpp
-+++ b/src/gui/text/qsyntaxhighlighter.cpp
-@@ -376,6 +376,7 @@ void QSyntaxHighlighter::rehighlight()
-
- QTextCursor cursor(d->doc);
- d->rehighlight(cursor, QTextCursor::End);
-+ d->rehighlightPending = false; // user manually did a full rehighlight
- }
-
- /*!
-diff --git a/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp b/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp
-index 9d6ce78b24..c683ecd424 100644
---- a/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp
-+++ b/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp
-@@ -82,6 +82,7 @@ private slots:
- void preservePreeditArea();
- void task108530();
- void avoidUnnecessaryRehighlight();
-+ void avoidUnnecessaryDelayedRehighlight();
- void noContentsChangedDuringHighlight();
- void rehighlight();
- void rehighlightBlock();
-@@ -478,6 +479,24 @@ void tst_QSyntaxHighlighter::avoidUnnecessaryRehighlight()
- QTRY_VERIFY(!hl->highlighted);
- }
-
-+void tst_QSyntaxHighlighter::avoidUnnecessaryDelayedRehighlight()
-+{
-+ // Having text in the document before creating the highlighter starts the delayed rehighlight
-+ cursor.insertText("Hello World");
-+
-+ TestHighlighter *hl = new TestHighlighter(doc);
-+ QVERIFY(!hl->highlighted);
-+
-+ hl->rehighlight();
-+ QVERIFY(hl->highlighted);
-+
-+ hl->highlighted = false;
-+ // Process events, including delayed rehighlight emission
-+ QCoreApplication::processEvents();
-+ // Should be cancelled and no extra rehighlight should be done
-+ QVERIFY(!hl->highlighted);
-+}
-+
- void tst_QSyntaxHighlighter::noContentsChangedDuringHighlight()
- {
- QVector<QTextLayout::FormatRange> formats;
---
-cgit v1.2.1
-
diff --git a/deps/qt5/patches/qt5.glibc224.patch b/deps/qt5/patches/qt5.glibc224.patch
deleted file mode 100644
index 773781a..0000000
--- a/deps/qt5/patches/qt5.glibc224.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From b12ffcd411d4776f7120ccecb3be34344d930d2b Mon Sep 17 00:00:00 2001
-From: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
-Date: Tue, 9 Aug 2016 16:21:29 +0200
-Subject: Do not depend on Linux 4.5
-
-Avoid using MADV_FREE that was only recently added to Linux. It will fail when
-run on older Linux kernels.
-
-Change-Id: I9b0369fb31402f088b2327c12f70dd39f5e4c8c0
-Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
----
- chromium/third_party/WebKit/Source/wtf/PageAllocator.cpp | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/src/3rdparty/chromium/third_party/WebKit/Source/wtf/PageAllocator.cpp b/src/3rdparty/chromium/third_party/WebKit/Source/wtf/PageAllocator.cpp
-index 121b687..be7c3b9 100644
---- a/src/3rdparty/chromium/third_party/WebKit/Source/wtf/PageAllocator.cpp
-+++ b/src/3rdparty/chromium/third_party/WebKit/Source/wtf/PageAllocator.cpp
-@@ -39,6 +39,11 @@
-
- #include <sys/mman.h>
-
-+#if OS(LINUX) && defined(MADV_FREE)
-+// Added in Linux 4.5, but we don't want to depend on 4.5 at runtime
-+#undef MADV_FREE
-+#endif
-+
- #ifndef MADV_FREE
- #define MADV_FREE MADV_DONTNEED
- #endif
---
-cgit v1.0-4-g1e03
-
diff --git a/deps/qt5/patches/qt5.mysql.h.diff b/deps/qt5/patches/qt5.mysql.h.diff
deleted file mode 100644
index f1cf11b..0000000
--- a/deps/qt5/patches/qt5.mysql.h.diff
+++ /dev/null
@@ -1,11 +0,0 @@
---- qt-everywhere-opensource-src-5.9.0/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql_p.h.orig 2017-05-26 14:43:31.000000000 +0200
-+++ qt-everywhere-opensource-src-5.9.0/qtbase/src/plugins/sqldrivers/mysql/qsql_mysql_p.h 2017-06-17 22:11:34.211899826 +0200
-@@ -57,7 +57,7 @@
- #include <QtCore/qt_windows.h>
- #endif
-
--#include <mysql.h>
-+#include <mysql/mysql.h>
-
- #ifdef QT_PLUGIN
- #define Q_EXPORT_SQLDRIVER_MYSQL
diff --git a/deps/qt5/patches/qt5.private-includes.patch b/deps/qt5/patches/qt5.private-includes.patch
deleted file mode 100644
index 3ef8ebe..0000000
--- a/deps/qt5/patches/qt5.private-includes.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-# Taken from http://code.qt.io/cgit/qt/qtbase.git/patch/?id=67aa365d
-# ------------------------------------------------------------------
-
-From 67aa365d41ebfe082b4efcfd725e4d5f08be678c Mon Sep 17 00:00:00 2001
-From: Ulf Hermann <ulf.hermann@qt.io>
-Date: Wed, 25 Apr 2018 12:48:21 +0200
-Subject: Do emit CMake declarations for existing private headers
-
-We need to make sure we don't emit CMake declarations for private
-headers if those headers are absent. However, most of the time we have
-private headers and should add them.
-
-Task-number: QTBUG-37417
-Change-Id: I639eb93d008de27928dedac540894af70c1883b9
-Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
----
- mkspecs/features/create_cmake.prf | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/mkspecs/features/create_cmake.prf b/mkspecs/features/create_cmake.prf
-index 66acedef55..2ed708e085 100644
---- a/mkspecs/features/create_cmake.prf
-+++ b/mkspecs/features/create_cmake.prf
-@@ -28,9 +28,13 @@ CMAKE_OUT_DIR = $$MODULE_BASE_OUTDIR/lib/cmake
-
- CMAKE_MODULE_NAME = $$cmakeModuleName($${MODULE})
-
-+!generated_privates {
-+ isEmpty(SYNCQT.INJECTED_PRIVATE_HEADER_FILES):isEmpty(SYNCQT.PRIVATE_HEADER_FILES): \
-+ CMAKE_NO_PRIVATE_INCLUDES = true
-+}
-+
- split_incpath {
- CMAKE_ADD_SOURCE_INCLUDE_DIRS = true
-- CMAKE_NO_PRIVATE_INCLUDES = true # Don't add private includes in the build dir which don't exist
- CMAKE_SOURCE_INCLUDES = \
- $$cmakeTargetPaths($$QT_MODULE_INCLUDE_BASE $$QT_MODULE_INCLUDE_BASE/Qt$${CMAKE_MODULE_NAME})
- CMAKE_SOURCE_PRIVATE_INCLUDES = \
-@@ -53,10 +57,6 @@ contains(CMAKE_INCLUDE_DIR, "^\\.\\./.*") {
- CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
- }
-
--isEmpty(QT.$${MODULE}_private.includes)| \
-- !exists($$first(QT.$${MODULE}_private.includes)): \
-- CMAKE_NO_PRIVATE_INCLUDES = true
--
- CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
- contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
- CMAKE_LIB_DIR = $$[QT_INSTALL_LIBS]/
---
-cgit v1.1-6-g87c4
-
-
diff --git a/deps/qt5/patches/qt5.pulseaudio.diff b/deps/qt5/patches/qt5.pulseaudio.diff
deleted file mode 100644
index 8d8f616..0000000
--- a/deps/qt5/patches/qt5.pulseaudio.diff
+++ /dev/null
@@ -1,12 +0,0 @@
---- qt-everywhere-opensource-src-5.4.0/qtwebengine/src/3rdparty/chromium/media/media.gyp.orig 2014-12-05 17:26:44.000000000 +0100
-+++ qt-everywhere-opensource-src-5.4.0/qtwebengine/src/3rdparty/chromium/media/media.gyp 2014-12-12 10:27:20.393735405 +0100
-@@ -29,7 +29,7 @@
- ['use_cras==1', {
- 'use_pulseaudio%': 0,
- }, {
-- 'use_pulseaudio%': 1,
-+ 'use_pulseaudio%': 0,
- }],
- ],
- }, {
-
diff --git a/deps/qt5/patches/qt5.qlockfile-deadlock.patch b/deps/qt5/patches/qt5.qlockfile-deadlock.patch
deleted file mode 100644
index e51d5ad..0000000
--- a/deps/qt5/patches/qt5.qlockfile-deadlock.patch
+++ /dev/null
@@ -1,116 +0,0 @@
-# Taken from:
-# https://projects.archlinux.org/svntogit/packages.git/plain/trunk/qlockfile-deadlock.patch?h=packages/qt5
-# QTBUG-44771
-# ----------------------------------------------------------------------------
-From f58e882b7594c59b6050d3c87562fcf836d10f60 Mon Sep 17 00:00:00 2001
-From: Olivier Goffart <ogoffart@woboq.com>
-Date: Tue, 14 Apr 2015 10:58:26 +0200
-Subject: QLockFile: fix deadlock when the lock file is corrupted
-
-[ChangeLog][QtCore][QLockFile] Fixed a deadlock when the lock file
-is corrupted.
-
-Task-number: QTBUG-44771
-Change-Id: Ic490b09d70ff1cc1733b64949889a73720b2d0f3
-Reviewed-by: David Faure <david.faure@kdab.com>
----
- src/corelib/io/qlockfile_unix.cpp | 10 +++++-----
- src/corelib/io/qlockfile_win.cpp | 22 +++++++++++-----------
- tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp | 17 +++++++++++++++++
- 3 files changed, 33 insertions(+), 16 deletions(-)
-
-diff --git a/qtbase/src/corelib/io/qlockfile_unix.cpp b/qtbase/src/corelib/io/qlockfile_unix.cpp
-index bf1015a..dc9f8f7 100644
---- a/qtbase/src/corelib/io/qlockfile_unix.cpp
-+++ b/qtbase/src/corelib/io/qlockfile_unix.cpp
-@@ -181,11 +181,11 @@ bool QLockFilePrivate::isApparentlyStale() const
- {
- qint64 pid;
- QString hostname, appname;
-- if (!getLockInfo(&pid, &hostname, &appname))
-- return false;
-- if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) {
-- if (::kill(pid, 0) == -1 && errno == ESRCH)
-- return true; // PID doesn't exist anymore
-+ if (getLockInfo(&pid, &hostname, &appname)) {
-+ if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) {
-+ if (::kill(pid, 0) == -1 && errno == ESRCH)
-+ return true; // PID doesn't exist anymore
-+ }
- }
- const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime());
- return staleLockTime > 0 && age > staleLockTime;
-diff --git a/qtbase/src/corelib/io/qlockfile_win.cpp b/qtbase/src/corelib/io/qlockfile_win.cpp
-index f9f2909..3587c7b 100644
---- a/qtbase/src/corelib/io/qlockfile_win.cpp
-+++ b/qtbase/src/corelib/io/qlockfile_win.cpp
-@@ -115,21 +115,21 @@ bool QLockFilePrivate::isApparentlyStale() const
- {
- qint64 pid;
- QString hostname, appname;
-- if (!getLockInfo(&pid, &hostname, &appname))
-- return false;
-
- // On WinRT there seems to be no way of obtaining information about other
- // processes due to sandboxing
- #ifndef Q_OS_WINRT
-- if (hostname == QString::fromLocal8Bit(localHostName())) {
-- HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
-- if (!procHandle)
-- return true;
-- // We got a handle but check if process is still alive
-- DWORD dwR = ::WaitForSingleObject(procHandle, 0);
-- ::CloseHandle(procHandle);
-- if (dwR == WAIT_TIMEOUT)
-- return true;
-+ if (getLockInfo(&pid, &hostname, &appname)) {
-+ if (hostname == QString::fromLocal8Bit(localHostName())) {
-+ HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
-+ if (!procHandle)
-+ return true;
-+ // We got a handle but check if process is still alive
-+ DWORD dwR = ::WaitForSingleObject(procHandle, 0);
-+ ::CloseHandle(procHandle);
-+ if (dwR == WAIT_TIMEOUT)
-+ return true;
-+ }
- }
- #endif // !Q_OS_WINRT
- const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime());
-diff --git a/qtbase/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/qtbase/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
-index 77bef94..12bea67 100644
---- a/qtbase/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
-+++ b/qtbase/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
-@@ -58,6 +58,7 @@ private slots:
- void staleLongLockFromBusyProcess();
- void staleLockRace();
- void noPermissions();
-+ void corruptedLockFile();
-
- public:
- QString m_helperApp;
-@@ -415,5 +416,21 @@ void tst_QLockFile::noPermissions()
- QCOMPARE(int(lockFile.error()), int(QLockFile::PermissionError));
- }
-
-+void tst_QLockFile::corruptedLockFile()
-+{
-+ const QString fileName = dir.path() + "/corruptedLockFile";
-+
-+ {
-+ // Create a empty file. Typically the result of a computer crash or hard disk full.
-+ QFile file(fileName);
-+ QVERIFY(file.open(QFile::WriteOnly));
-+ }
-+
-+ QLockFile secondLock(fileName);
-+ secondLock.setStaleLockTime(100);
-+ QVERIFY(secondLock.tryLock(10000));
-+ QCOMPARE(int(secondLock.error()), int(QLockFile::NoError));
-+}
-+
- QTEST_MAIN(tst_QLockFile)
- #include "tst_qlockfile.moc"
---
-cgit v0.11.0
-
diff --git a/deps/qt5/patches/qt5.qt5uitoolsconfig.patch b/deps/qt5/patches/qt5.qt5uitoolsconfig.patch
deleted file mode 100644
index 1a0da5b..0000000
--- a/deps/qt5/patches/qt5.qt5uitoolsconfig.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-The fix for https://bugreports.qt.io/browse/QTBUG-76244 was not complete.
-Further quoting is needed to deal with empty variables.
--- Eric Hameleers <alien@slackware.com>
-
---- qt-everywhere-src-5.13.0/qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in.orig 2019-06-13 06:18:18.000000000 +0200
-+++ qt-everywhere-src-5.13.0/qtbase/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in 2019-07-09 19:37:15.253291684 +0200
-@@ -57,8 +57,8 @@
-
- if(EXISTS \"${prl_file_location}\")
- file(STRINGS \"${prl_file_location}\" _prl_strings REGEX \"QMAKE_PRL_LIBS[ \\t]*=\")
-- string(REGEX REPLACE \"QMAKE_PRL_LIBS[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends ${_prl_strings})
-- string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends ${_static_depends})
-+ string(REGEX REPLACE \"QMAKE_PRL_LIBS[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends \"${_prl_strings}\")
-+ string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends \"${_static_depends}\")
- string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries \"${CMAKE_CXX_STANDARD_LIBRARIES}\")
- set(_search_paths)
- string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\")
diff --git a/deps/qt5/patches/qt5.qtbase_cmake_isystem_includes.patch b/deps/qt5/patches/qt5.qtbase_cmake_isystem_includes.patch
deleted file mode 100644
index ff00e63..0000000
--- a/deps/qt5/patches/qt5.qtbase_cmake_isystem_includes.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff -up qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in.foo qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in
---- qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in.foo 2019-04-30 15:18:24.886346423 -0500
-+++ qtbase-everywhere-src-5.12.1/src/gui/Qt5GuiConfigExtras.cmake.in 2019-04-30 15:19:48.303873296 -0500
-@@ -66,8 +66,10 @@ unset(_GL_INCDIRS)
- # Don\'t check for existence of the "_qt5gui_OPENGL_INCLUDE_DIR" because it is
- # optional.
-
-+if (NOT ${_qt5gui_OPENGL_INCLUDE_DIR} STREQUAL "/usr/include")
- list(APPEND Qt5Gui_INCLUDE_DIRS ${_qt5gui_OPENGL_INCLUDE_DIR})
- set_property(TARGET Qt5::Gui APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${_qt5gui_OPENGL_INCLUDE_DIR})
-+endif()
-
- unset(_qt5gui_OPENGL_INCLUDE_DIR CACHE)
-
diff --git a/deps/qt5/patches/qt5.qtbug-49061.patch b/deps/qt5/patches/qt5.qtbug-49061.patch
deleted file mode 100644
index d006edb..0000000
--- a/deps/qt5/patches/qt5.qtbug-49061.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-#
-# https://github.com/qt/qtbase/commit/494376f9.patch
-#
-From 494376f980e96339b6f1eff7c41336ca4d853065 Mon Sep 17 00:00:00 2001
-From: Thiago Macieira <thiago.macieira@intel.com>
-Date: Thu, 12 Nov 2015 10:14:51 -0800
-Subject: [PATCH] Stop unloading plugins in QPluginLoader and QFactoryLoader
-
-QPluginLoader hasn't unloaded in its destructor since Qt 5.0, but we
-missed the equivalent code in QFactoryLoader (which bypasses
-QPluginLoader). Besides, QPluginLoader::unload() was still doing
-unloading, which it won't anymore.
-
-Not unloading plugins is Qt's policy, as decided during the 5.0
-development process and reaffirmed now in 5.6. This is due to static
-data in plugins leaking out and remaining in use past the unloading of
-the plugin, causing crashes.
-
-This does not affect QLibrary and QLibrary::unload(). Those are meant
-for non-Qt loadable modules, so unloading them may be safe.
-
-Task-number: QTBUG-49061
-Discussed-on: http://lists.qt-project.org/pipermail/development/2015-November/023681.html
-Change-Id: I461e9fc7199748faa187ffff1416070f138df8db
-Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
-Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
----
- src/corelib/plugin/qfactoryloader.cpp | 6 ++++--
- src/corelib/plugin/qpluginloader.cpp | 5 +++--
- 2 files changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
-index 53b38c3..c820d53 100644
---- a/src/corelib/plugin/qfactoryloader.cpp
-+++ b/src/corelib/plugin/qfactoryloader.cpp
-@@ -203,10 +203,12 @@ void QFactoryLoader::update()
- ++keyUsageCount;
- }
- }
-- if (keyUsageCount || keys.isEmpty())
-+ if (keyUsageCount || keys.isEmpty()) {
-+ library->setLoadHints(QLibrary::PreventUnloadHint); // once loaded, don't unload
- d->libraryList += library;
-- else
-+ } else {
- library->release();
-+ }
- }
- }
- #else
-diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp
-index 62067c7..4752f69 100644
---- a/src/corelib/plugin/qpluginloader.cpp
-+++ b/src/corelib/plugin/qpluginloader.cpp
-@@ -154,6 +154,7 @@ QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent)
- : QObject(parent), d(0), did_load(false)
- {
- setFileName(fileName);
-+ setLoadHints(QLibrary::PreventUnloadHint);
- }
-
- /*!
-@@ -348,7 +349,7 @@ static QString locatePlugin(const QString& fileName)
- void QPluginLoader::setFileName(const QString &fileName)
- {
- #if defined(QT_SHARED)
-- QLibrary::LoadHints lh;
-+ QLibrary::LoadHints lh = QLibrary::PreventUnloadHint;
- if (d) {
- lh = d->loadHints();
- d->release();
-@@ -394,7 +395,7 @@ QString QPluginLoader::errorString() const
- \brief Give the load() function some hints on how it should behave.
-
- You can give hints on how the symbols in the plugin are
-- resolved. By default, none of the hints are set.
-+ resolved. By default since Qt 5.7, QLibrary::PreventUnloadHint is set.
-
- See the documentation of QLibrary::loadHints for a complete
- description of how this property works.
diff --git a/deps/qt5/patches/qt5.qtbug-49452.patch b/deps/qt5/patches/qt5.qtbug-49452.patch
deleted file mode 100644
index 4549ff1..0000000
--- a/deps/qt5/patches/qt5.qtbug-49452.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 6f423555eba55ccdf7287071e10576bc1b687fd2 Mon Sep 17 00:00:00 2001
-From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-Date: Mon, 1 Aug 2016 13:39:53 +0200
-Subject: [PATCH] REG: Fix unwanted cache flush in Freetype engine
-
-The Freetype cache was almost completely disabled by
-134c6db8587a8ce156d4fa31ffa62605821851b2 because after that
-change, the lockedAlphaMapForGlyph() function would no longer
-cut off early for empty glyphs like spaces, but rather go
-through all alpha map functions before it realized that there
-was nothing to render. This would in turn invalidate the cache
-for every empty glyph, causing all glyphs to be rerendered for
-every isolated word.
-
-This change adds back a cut off. This is only needed in the
-lockedAlphaMapForGlyph() function, since the superclass implementation
-of the other alpha map functions already contains a cut off for
-width/height == 0.
-
-[ChangeLog][Qt Gui][Text] Fixed a performance regression in Freetype
-engine that was introduced in Qt 5.5.
-
-Change-Id: I381285939909e99cc5fb5f3497fecf9fa871f29a
-Task-number: QTBUG-49452
-Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
----
- src/gui/text/qfontengine_ft.cpp | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
-index 4de41df..7c878da 100644
---- a/src/gui/text/qfontengine_ft.cpp
-+++ b/src/gui/text/qfontengine_ft.cpp
-@@ -1716,7 +1716,7 @@ glyph_metrics_t QFontEngineFT::alphaMapBoundingBox(glyph_t glyph, QFixed subPixe
-
- static inline QImage alphaMapFromGlyphData(QFontEngineFT::Glyph *glyph, QFontEngine::GlyphFormat glyphFormat)
- {
-- if (glyph == Q_NULLPTR)
-+ if (glyph == Q_NULLPTR || glyph->height == 0 || glyph->width == 0)
- return QImage();
-
- QImage::Format format = QImage::Format_Invalid;
-@@ -1764,11 +1764,15 @@ QImage *QFontEngineFT::lockedAlphaMapForGlyph(glyph_t glyphIndex, QFixed subPixe
-
- currentlyLockedAlphaMap = alphaMapFromGlyphData(glyph, neededFormat);
-
-+ const bool glyphHasGeometry = glyph != Q_NULLPTR && glyph->height != 0 && glyph->width != 0;
- if (!cacheEnabled && glyph != &emptyGlyph) {
- currentlyLockedAlphaMap = currentlyLockedAlphaMap.copy();
- delete glyph;
- }
-
-+ if (!glyphHasGeometry)
-+ return Q_NULLPTR;
-+
- if (currentlyLockedAlphaMap.isNull())
- return QFontEngine::lockedAlphaMapForGlyph(glyphIndex, subPixelPosition, neededFormat, t, offset);
-
diff --git a/deps/qt5/patches/qt5.qtbug-51621.patch b/deps/qt5/patches/qt5.qtbug-51621.patch
deleted file mode 100644
index 187a3d7..0000000
--- a/deps/qt5/patches/qt5.qtbug-51621.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-build with explicitlib after all
-
-unlike speculated in 2fe363514, this is not a workaround at all: it
-causes that libraries' public link interfaces (LIBS) are exported in the
-first place. unlike with staticlib, this does not export LIBS_PRIVATE,
-so it wouldn't even be a particularly effective workaround for rpath
-brokenness anyway.
-
-the problem was pretty well hidden by the qt module system, which at the
-level of libraries is pretty redundant with the .prl file handling,
-which shows just how stupid the whole "design" is.
-
-unlike before, we now enable explicitlib for all libraries, not just qt
-modules - we enable create_prl for all of them as well, after all.
-
-an immediate effect of this change is that it fixes linking on RaspPI:
-the qtcore headers make the user code require linking libatomic, so we
-must add it to our public link interface.
-
-Task-number: QTBUG-51621
-Change-Id: I5742c88694db8e8a9b79d17222dc6df2b38e5ab2
-
-X-Git-Url: https://codereview.qt-project.org/gitweb?p=qt%2Fqtbase.git;a=blobdiff_plain;f=mkspecs%2Ffeatures%2Fqt_build_config.prf;h=b3081b960ec192c3421d7a1c2bd5a628f0ca8455;hp=518fd93f0457c6060721c38ad8b6a0286407e562;hb=268e7ee9778de79d2485bdd028721ec7adbc1324;hpb=495e8c205424253186bef47421de63534d23dd59
-
-diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf
-index 518fd93..b3081b9 100644
---- a/mkspecs/features/qt_build_config.prf
-+++ b/mkspecs/features/qt_build_config.prf
-@@ -72,6 +72,10 @@ CONFIG += \
- # However, testcases should be still built with exceptions.
- exceptions_off testcase_exceptions
-
-+# Under Windows, this is neither necessary (transitive deps are automatically
-+# resolved), nor functional (.res files end up in .prl files and break things).
-+unix: CONFIG += explicitlib
-+
-
- defineTest(qtBuildPart) {
- bp = $$eval($$upper($$section(_QMAKE_CONF_, /, -2, -2))_BUILD_PARTS)
diff --git a/deps/qt5/patches/qt5.qtbug-51648.patch b/deps/qt5/patches/qt5.qtbug-51648.patch
deleted file mode 100644
index 279839b..0000000
--- a/deps/qt5/patches/qt5.qtbug-51648.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-From b024fbe83863fc57364a52c717d5b43d654bdb5d Mon Sep 17 00:00:00 2001
-From: Weng Xuetian <wengxt@gmail.com>
-Date: Sat, 5 Mar 2016 12:23:21 -0800
-Subject: [PATCH] QtDBus: clean up signal hooks and object tree in
- closeConnection
-
-If a QObject is added or passed as receiver to QDBusConnection::connect()
-and it is managed by Q_GLOBAL_STATIC or similar mechanism, it is
-possible that when that its destructor is called after the dbus daemon
-thread ends. In that case, QObject::destroyed connected via
-Qt::BlockingQueuedConnection to QDBusConnectionPrivate will cause dead
-lock since the thread is no longer processing events.
-
-Task-number: QTBUG-51648
-Change-Id: I1a1810a6d6d0234af0269d5f3fc1f54101bf1547
----
- src/dbus/qdbusconnection_p.h | 1 +
- src/dbus/qdbusintegrator.cpp | 28 +++++++++++++++++++++++++++-
- 2 files changed, 28 insertions(+), 1 deletion(-)
-
-diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
-index c77daf7..565eb83 100644
---- a/src/dbus/qdbusconnection_p.h
-+++ b/src/dbus/qdbusconnection_p.h
-@@ -254,6 +254,7 @@ private:
- const QVector<int> &metaTypes, int slotIdx);
-
- SignalHookHash::Iterator removeSignalHookNoLock(SignalHookHash::Iterator it);
-+ void disconnectObjectTree(ObjectTreeNode &node);
-
- bool isServiceRegisteredByThread(const QString &serviceName);
-
-diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
-index cd44861..a3cd47b 100644
---- a/src/dbus/qdbusintegrator.cpp
-+++ b/src/dbus/qdbusintegrator.cpp
-@@ -1030,7 +1030,6 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
- qPrintable(name));
-
- closeConnection();
-- rootNode.children.clear(); // free resources
- qDeleteAll(cachedMetaObjects);
-
- if (mode == ClientMode || mode == PeerMode) {
-@@ -1052,6 +1051,20 @@ QDBusConnectionPrivate::~QDBusConnectionPrivate()
- }
- }
-
-+void QDBusConnectionPrivate::disconnectObjectTree(QDBusConnectionPrivate::ObjectTreeNode &haystack)
-+{
-+ QDBusConnectionPrivate::ObjectTreeNode::DataList::Iterator it = haystack.children.begin();
-+
-+ while (it != haystack.children.end()) {
-+ disconnectObjectTree(*it);
-+ it++;
-+ }
-+
-+ if (haystack.obj) {
-+ haystack.obj->disconnect(this);
-+ }
-+}
-+
- void QDBusConnectionPrivate::closeConnection()
- {
- QDBusWriteLocker locker(CloseConnectionAction, this);
-@@ -1075,6 +1088,19 @@ void QDBusConnectionPrivate::closeConnection()
- }
-
- qDeleteAll(pendingCalls);
-+
-+ // clean up all signal hook and object tree, to avoid QObject::destroyed
-+ // being activated to dbus daemon thread which already quits.
-+ // dbus connection is already closed, so there is nothing we could do be clean
-+ // up everything here.
-+ SignalHookHash::iterator sit = signalHooks.begin();
-+ while (sit != signalHooks.end()) {
-+ sit.value().obj->disconnect(this);
-+ sit++;
-+ }
-+
-+ disconnectObjectTree(rootNode);
-+ rootNode.children.clear(); // free resources
- }
-
- void QDBusConnectionPrivate::checkThread()
---
-2.7.1
-
diff --git a/deps/qt5/patches/qt5.qtbug-51649.patch b/deps/qt5/patches/qt5.qtbug-51649.patch
deleted file mode 100644
index 3b7cf9e..0000000
--- a/deps/qt5/patches/qt5.qtbug-51649.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From acde2e69df5dedc624674107596f276125e22864 Mon Sep 17 00:00:00 2001
-From: Weng Xuetian <wengxt@gmail.com>
-Date: Thu, 3 Mar 2016 21:56:53 -0800
-Subject: [PATCH] QtDBus: finish all pending call with error if disconnected
-
-libdbus will send a local signal if connection gets disconnected. When
-this happens, end all pending calls with QDBusError::Disconnected.
-
-Task-number: QTBUG-51649
-Change-Id: I5c7d2a468bb5da746d0c0e53e458c1e376f186a9
----
- src/dbus/dbus_minimal_p.h | 2 ++
- src/dbus/qdbusintegrator.cpp | 26 +++++++++++++++++-----
- src/dbus/qdbusutil_p.h | 6 +++++
- .../dbus/qdbusconnection/tst_qdbusconnection.cpp | 22 ++++++++++++++++++
- .../dbus/qdbusconnection/tst_qdbusconnection.h | 1 +
- 5 files changed, 51 insertions(+), 6 deletions(-)
-
-diff --git a/src/dbus/dbus_minimal_p.h b/src/dbus/dbus_minimal_p.h
-index f0a2954..8f25b24 100644
---- a/src/dbus/dbus_minimal_p.h
-+++ b/src/dbus/dbus_minimal_p.h
-@@ -99,9 +99,11 @@ typedef dbus_uint32_t dbus_bool_t;
- /* dbus-shared.h */
- #define DBUS_SERVICE_DBUS "org.freedesktop.DBus"
- #define DBUS_PATH_DBUS "/org/freedesktop/DBus"
-+#define DBUS_PATH_LOCAL "/org/freedesktop/DBus/Local"
- #define DBUS_INTERFACE_DBUS "org.freedesktop.DBus"
- #define DBUS_INTERFACE_INTROSPECTABLE "org.freedesktop.DBus.Introspectable"
- #define DBUS_INTERFACE_PROPERTIES "org.freedesktop.DBus.Properties"
-+#define DBUS_INTERFACE_LOCAL "org.freedesktop.DBus.Local"
-
- #define DBUS_NAME_FLAG_ALLOW_REPLACEMENT 0x1 /**< Allow another service to become the primary owner if requested */
- #define DBUS_NAME_FLAG_REPLACE_EXISTING 0x2 /**< Request to replace the current primary owner */
-diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
-index cd44861..320419f 100644
---- a/src/dbus/qdbusintegrator.cpp
-+++ b/src/dbus/qdbusintegrator.cpp
-@@ -519,6 +519,14 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
- switch (amsg.type()) {
- case QDBusMessage::SignalMessage:
- handleSignal(amsg);
-+ // Check local disconnected signal from libdbus
-+ if (amsg.interface() == QDBusUtil::dbusInterfaceLocal()
-+ && amsg.path() == QDBusUtil::dbusPathLocal()
-+ && amsg.member() == QDBusUtil::disconnected()
-+ && !QDBusMessagePrivate::isLocal(amsg)) {
-+ while (!pendingCalls.isEmpty())
-+ processFinishedCall(pendingCalls.first());
-+ }
- // if there are any other filters in this DBusConnection,
- // let them see the signal too
- return false;
-@@ -1767,10 +1775,16 @@ void QDBusConnectionPrivate::processFinishedCall(QDBusPendingCallPrivate *call)
-
- QDBusMessage &msg = call->replyMessage;
- if (call->pending) {
-- // decode the message
-- DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending);
-- msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities);
-- q_dbus_message_unref(reply);
-+ // when processFinishedCall is called and pending call is not completed,
-+ // it means we received disconnected signal from libdbus
-+ if (q_dbus_pending_call_get_completed(call->pending)) {
-+ // decode the message
-+ DBusMessage *reply = q_dbus_pending_call_steal_reply(call->pending);
-+ msg = QDBusMessagePrivate::fromDBusMessage(reply, connection->capabilities);
-+ q_dbus_message_unref(reply);
-+ } else {
-+ msg = QDBusMessage::createError(QDBusError::Disconnected, QDBusUtil::disconnectedErrorMessage());
-+ }
- }
- qDBusDebug() << connection << "got message reply:" << msg;
-
-@@ -2070,8 +2084,8 @@ void QDBusConnectionPrivate::sendInternal(QDBusPendingCallPrivate *pcall, void *
- pcall->pending = pending;
- q_dbus_pending_call_set_notify(pending, qDBusResultReceived, pcall, 0);
-
-- // DBus won't notify us when a peer disconnects so we need to track these ourselves
-- if (mode == QDBusConnectionPrivate::PeerMode)
-+ // DBus won't notify us when a peer disconnects or server terminates so we need to track these ourselves
-+ if (mode == QDBusConnectionPrivate::PeerMode || mode == QDBusConnectionPrivate::ClientMode)
- pendingCalls.append(pcall);
-
- return;
-diff --git a/src/dbus/qdbusutil_p.h b/src/dbus/qdbusutil_p.h
-index 8f5ae92..ca70ff9 100644
---- a/src/dbus/qdbusutil_p.h
-+++ b/src/dbus/qdbusutil_p.h
-@@ -155,6 +155,8 @@ namespace QDBusUtil
- { return QStringLiteral(DBUS_SERVICE_DBUS); }
- inline QString dbusPath()
- { return QStringLiteral(DBUS_PATH_DBUS); }
-+ inline QString dbusPathLocal()
-+ { return QStringLiteral(DBUS_PATH_LOCAL); }
- inline QString dbusInterface()
- {
- // it's the same string, but just be sure
-@@ -165,8 +167,12 @@ namespace QDBusUtil
- { return QStringLiteral(DBUS_INTERFACE_PROPERTIES); }
- inline QString dbusInterfaceIntrospectable()
- { return QStringLiteral(DBUS_INTERFACE_INTROSPECTABLE); }
-+ inline QString dbusInterfaceLocal()
-+ { return QStringLiteral(DBUS_INTERFACE_LOCAL); }
- inline QString nameOwnerChanged()
- { return QStringLiteral("NameOwnerChanged"); }
-+ inline QString disconnected()
-+ { return QStringLiteral("Disconnected"); }
- inline QString disconnectedErrorMessage()
- { return QStringLiteral("Not connected to D-Bus server"); }
- }
-diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
-index e91f87d..6c7e6b1 100644
---- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
-+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
-@@ -1218,6 +1218,28 @@ void tst_QDBusConnection::callVirtualObjectLocal()
- QCOMPARE(obj.replyArguments, subPathReply.arguments());
- }
-
-+void tst_QDBusConnection::pendingCallWhenDisconnected()
-+{
-+ QDBusServer *server = new QDBusServer;
-+ QDBusConnection con = QDBusConnection::connectToPeer(server->address(), "disconnect");
-+ QTestEventLoop::instance().enterLoop(2);
-+ QVERIFY(!QTestEventLoop::instance().timeout());
-+ QVERIFY(con.isConnected());
-+
-+ delete server;
-+
-+ // Make sure we call the method before we know it is disconnected.
-+ QVERIFY(con.isConnected());
-+ QDBusMessage message = QDBusMessage::createMethodCall("", "/", QString(), "method");
-+ QDBusPendingCall reply = con.asyncCall(message);
-+
-+ QTestEventLoop::instance().enterLoop(2);
-+ QVERIFY(!con.isConnected());
-+ QVERIFY(reply.isFinished());
-+ QVERIFY(reply.isError());
-+ QVERIFY(reply.error().type() == QDBusError::Disconnected);
-+}
-+
- QString MyObject::path;
- QString MyObjectWithoutInterface::path;
- QString MyObjectWithoutInterface::interface;
-diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
-index a53ba32..720e484 100644
---- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
-+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
-@@ -121,6 +121,7 @@ private slots:
- void registerVirtualObject();
- void callVirtualObject();
- void callVirtualObjectLocal();
-+ void pendingCallWhenDisconnected();
-
- public:
- QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; }
---
-2.7.1
-
diff --git a/deps/qt5/patches/qt5.qtbug-51676.patch b/deps/qt5/patches/qt5.qtbug-51676.patch
deleted file mode 100644
index 8672a21..0000000
--- a/deps/qt5/patches/qt5.qtbug-51676.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From 11c5e716b08b6b3c5a7c9fce96b0cde8624ec869 Mon Sep 17 00:00:00 2001
-From: Thiago Macieira <thiago.macieira@intel.com>
-Date: Tue, 15 Mar 2016 11:00:20 -0700
-Subject: [PATCH] Fix QtDBus deadlock inside kded/kiod
-
-Whenever a message spy was installed, we failed to actually process
-looped-back messages by queueing them for processing by the spy. That
-had as a consequence that the caller got an error reply. Worse, since
-the message had been queued, QtDBus would attempt to deliver it later.
-Since that message had isLocal==true, bad things happened inside the
-manager thread.
-
-The correct solution is not to queue the message for the filter. If the
-message is local, then simply deliver directly, as we're still in the
-user's thread. This used to be the behavior in Qt 5.5.
-
-Task-number: QTBUG-51676
-Change-Id: I1dc112894cde7121e8ce302ae51b438ade1ff612
----
- src/dbus/qdbusintegrator.cpp | 42 ++++++++++++++++++++++++++++++++----------
- src/dbus/qdbusintegrator_p.h | 1 +
- 2 files changed, 33 insertions(+), 10 deletions(-)
-
-diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
-index cd44861..478a2c4 100644
---- a/src/dbus/qdbusintegrator.cpp
-+++ b/src/dbus/qdbusintegrator.cpp
-@@ -481,6 +481,11 @@ QDBusSpyCallEvent::~QDBusSpyCallEvent()
-
- void QDBusSpyCallEvent::placeMetaCall(QObject *)
- {
-+ invokeSpyHooks(msg, hooks, hookCount);
-+}
-+
-+inline void QDBusSpyCallEvent::invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount)
-+{
- // call the spy hook list
- for (int i = 0; i < hookCount; ++i)
- hooks[i](msg);
-@@ -509,7 +514,12 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
- {
- if (!ref.load())
- return false;
-- if (!dispatchEnabled && !QDBusMessagePrivate::isLocal(amsg)) {
-+
-+ // local message are always delivered, regardless of filtering
-+ // or whether the dispatcher is enabled
-+ bool isLocal = QDBusMessagePrivate::isLocal(amsg);
-+
-+ if (!dispatchEnabled && !isLocal) {
- // queue messages only, we'll handle them later
- qDBusDebug() << this << "delivery is suspended";
- pendingMessages << amsg;
-@@ -523,13 +533,23 @@ bool QDBusConnectionPrivate::handleMessage(const QDBusMessage &amsg)
- // let them see the signal too
- return false;
- case QDBusMessage::MethodCallMessage:
-- // run it through the spy filters (if any) before the regular processing
-+ // run it through the spy filters (if any) before the regular processing:
-+ // a) if it's a local message, we're in the caller's thread, so invoke the filter directly
-+ // b) if it's an external message, post to the main thread
- if (Q_UNLIKELY(qDBusSpyHookList.exists()) && qApp) {
- const QDBusSpyHookList &list = *qDBusSpyHookList;
-- qDBusDebug() << this << "invoking message spies";
-- QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this),
-- amsg, list.constData(), list.size()));
-- return true;
-+ if (isLocal) {
-+ Q_ASSERT(QThread::currentThread() != thread());
-+ qDBusDebug() << this << "invoking message spies directly";
-+ QDBusSpyCallEvent::invokeSpyHooks(amsg, list.constData(), list.size());
-+ } else {
-+ qDBusDebug() << this << "invoking message spies via event";
-+ QCoreApplication::postEvent(qApp, new QDBusSpyCallEvent(this, QDBusConnection(this),
-+ amsg, list.constData(), list.size()));
-+
-+ // we'll be called back, so return
-+ return true;
-+ }
- }
-
- handleObjectCall(amsg);
-@@ -1451,9 +1471,9 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg)
- // that means the dispatchLock mutex is locked
- // must not call out to user code in that case
- //
-- // however, if the message is internal, handleMessage was called
-- // directly and no lock is in place. We can therefore call out to
-- // user code, if necessary
-+ // however, if the message is internal, handleMessage was called directly
-+ // (user's thread) and no lock is in place. We can therefore call out to
-+ // user code, if necessary.
- ObjectTreeNode result;
- int usedLength;
- QThread *objThread = 0;
-@@ -1492,12 +1512,14 @@ void QDBusConnectionPrivate::handleObjectCall(const QDBusMessage &msg)
- usedLength, msg));
- return;
- } else if (objThread != QThread::currentThread()) {
-- // synchronize with other thread
-+ // looped-back message, targeting another thread:
-+ // synchronize with it
- postEventToThread(HandleObjectCallPostEventAction, result.obj,
- new QDBusActivateObjectEvent(QDBusConnection(this), this, result,
- usedLength, msg, &sem));
- semWait = true;
- } else {
-+ // looped-back message, targeting current thread
- semWait = false;
- }
- } // release the lock
-diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h
-index 2bbebdf..c0d9c22 100644
---- a/src/dbus/qdbusintegrator_p.h
-+++ b/src/dbus/qdbusintegrator_p.h
-@@ -145,6 +145,7 @@ public:
- {}
- ~QDBusSpyCallEvent();
- void placeMetaCall(QObject *) Q_DECL_OVERRIDE;
-+ static inline void invokeSpyHooks(const QDBusMessage &msg, const Hook *hooks, int hookCount);
-
- QDBusConnection conn; // keeps the refcount in QDBusConnectionPrivate up
- QDBusMessage msg;
---
-2.7.1
-
diff --git a/deps/qt5/patches/qt5.qtbug-51890.patch b/deps/qt5/patches/qt5.qtbug-51890.patch
deleted file mode 100644
index 51168b9..0000000
--- a/deps/qt5/patches/qt5.qtbug-51890.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-QTBUG-51890: qtwebengine fails to build with system nss 3.23
-Patch obtained from:
-https://github.com/qtproject/qtwebengine/commit/82900c7b96b2a6fb42fe3841df7685b820edd588.patch
-
-And modified to exclude the "Subproject commit" lines.
-
-# ----------------------------------------------------------------------------
-
-From 82900c7b96b2a6fb42fe3841df7685b820edd588 Mon Sep 17 00:00:00 2001
-From: Kai Koehne <kai.koehne@theqtcompany.com>
-Date: Thu, 24 Mar 2016 13:55:28 +0100
-Subject: [PATCH] Use system NSS only for certificate handling
-
-Compiling against NSS 3.23 fails with current Chromium. Also, with NSS
-3.21 there are failures connecting to e.g. google.com.
-
-Fix this by adapting the setup endorsed by upstream Chromium: BoringSSL
-is always used for cryptography, and NSS only for certificate handlng.
-
-Patches included in 3rdparty update:
-
-0a385bb [backport] Call EnsureNSSHttpIOInit in the chimera build.
-0472123 Fix build against newer NSS
-90c62c4 <third_party/libpng> [Backport] update to libpng 1.2.56
-34857b8 <third_party/libpng> [Backport] Stop large iCCP chunks causing delays and "Aw Snap!"
-
-Task-number: QTBUG-52193
-Task-number: QTBUG-51890
-Task-number: QTBUG-52068
-Change-Id: If8aaed9b9a09475c5ed0dfec64d31f45ce9670f5
-Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
----
- src/3rdparty | 2 +-
- src/core/config/linux.pri | 9 ++++++---
- tools/qmake/mkspecs/features/configure.prf | 4 ++--
- 3 files changed, 9 insertions(+), 6 deletions(-)
-
-#diff --git a/src/3rdparty b/src/3rdparty
-#index 3b2b78c..0a385bb 160000
-#--- a/src/3rdparty
-#+++ b/src/3rdparty
-#@@ -1 +1 @@
-#-Subproject commit 3b2b78caa761db2b7b25dc51c3dae8316f595db1
-#+Subproject commit 0a385bb01d9cf060fae4c9d350ee98561654df96
-diff --git a/src/core/config/linux.pri b/src/core/config/linux.pri
-index 88c1a41..39eeb2a 100644
---- a/src/core/config/linux.pri
-+++ b/src/core/config/linux.pri
-@@ -18,11 +18,14 @@ GYP_CONFIG += \
- use_gio=0 \
- use_gnome_keyring=0 \
- use_kerberos=0 \
-- use_pango=0
-+ use_pango=0 \
-+ use_openssl=1
-
--!use?(nss) {
-+use?(nss) {
-+ GYP_CONFIG += use_nss_certs=1 \
-+ use_openssl_certs=0
-+} else {
- GYP_CONFIG += use_nss_certs=0 \
-- use_openssl=1 \
- use_openssl_certs=1
- }
-
-diff --git a/tools/qmake/mkspecs/features/configure.prf b/tools/qmake/mkspecs/features/configure.prf
-index 4cb4600..953572d 100644
---- a/tools/qmake/mkspecs/features/configure.prf
-+++ b/tools/qmake/mkspecs/features/configure.prf
-@@ -72,9 +72,9 @@ defineTest(runConfigure) {
- defineTest(finalizeConfigure) {
- linux {
- use?(nss) {
-- log("SSL............................... Using system NSS$${EOL}")
-+ log("Certificate handling.............. Using system NSS$${EOL}")
- } else {
-- log("SSL............................... Using bundled BoringSSL$${EOL}")
-+ log("Certificate handling.............. Using bundled BoringSSL$${EOL}")
- }
- use?(system_icu) {
- packagesExist("icu-uc icu-i18n") {
diff --git a/deps/qt5/patches/qt5.qtbug-51927.patch b/deps/qt5/patches/qt5.qtbug-51927.patch
deleted file mode 100644
index d253dc1..0000000
--- a/deps/qt5/patches/qt5.qtbug-51927.patch
+++ /dev/null
@@ -1,185 +0,0 @@
-From 5149aa68eca6ede8836ec4f07a14d22d9da9b161 Mon Sep 17 00:00:00 2001
-From: Mitch Curtis <mitch.curtis@qt.io>
-Date: Tue, 13 Sep 2016 12:42:12 +0200
-Subject: Fix crash on exit when using default property aliases with layouts
-
-The layout was being destroyed before the text, which meant that the
-removeItemChangeListener() call never got hit. To ensure that the
-listener is always removed, loop through each child in QQuickLayout's
-destructor.
-
-This is a manual cherry-pick of
-59c6c0e0b1b5b46747595a58e11311b7393d7e70.
-
-Task-number: QTBUG-51927
-Change-Id: I669f42beb8c3dd6b4b741cae0b16e017bb3409df
-Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
----
- src/imports/layouts/qquicklayout.cpp | 4 ++
- .../qquicklayouts/data/rowlayout/Container.qml | 55 ++++++++++++++++++++++
- .../qquicklayouts/data/rowlayout/ContainerUser.qml | 53 +++++++++++++++++++++
- .../quick/qquicklayouts/data/tst_rowlayout.qml | 12 +++++
- 4 files changed, 124 insertions(+)
- create mode 100644 tests/auto/quick/qquicklayouts/data/rowlayout/Container.qml
- create mode 100644 tests/auto/quick/qquicklayouts/data/rowlayout/ContainerUser.qml
-
-diff --git a/src/imports/layouts/qquicklayout.cpp b/src/imports/layouts/qquicklayout.cpp
-index abc8f97..9914826 100644
---- a/src/imports/layouts/qquicklayout.cpp
-+++ b/src/imports/layouts/qquicklayout.cpp
-@@ -698,6 +698,10 @@ QQuickLayout::QQuickLayout(QQuickLayoutPrivate &dd, QQuickItem *parent)
- QQuickLayout::~QQuickLayout()
- {
- d_func()->m_isReady = false;
-+
-+ const auto childItems = d_func()->childItems;
-+ for (QQuickItem *child : childItems)
-+ QQuickItemPrivate::get(child)->removeItemChangeListener(this, QQuickItemPrivate::SiblingOrder);
- }
-
- QQuickLayoutAttached *QQuickLayout::qmlAttachedProperties(QObject *object)
-diff --git a/tests/auto/quick/qquicklayouts/data/rowlayout/Container.qml b/tests/auto/quick/qquicklayouts/data/rowlayout/Container.qml
-new file mode 100644
-index 0000000..22205c1
---- /dev/null
-+++ b/tests/auto/quick/qquicklayouts/data/rowlayout/Container.qml
-@@ -0,0 +1,55 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2016 The Qt Company Ltd.
-+** Contact: http://www.qt.io/licensing/
-+**
-+** This file is part of the test suite of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:BSD$
-+** You may use this file under the terms of the BSD license as follows:
-+**
-+** "Redistribution and use in source and binary forms, with or without
-+** modification, are permitted provided that the following conditions are
-+** met:
-+** * Redistributions of source code must retain the above copyright
-+** notice, this list of conditions and the following disclaimer.
-+** * Redistributions in binary form must reproduce the above copyright
-+** notice, this list of conditions and the following disclaimer in
-+** the documentation and/or other materials provided with the
-+** distribution.
-+** * Neither the name of The Qt Company Ltd nor the names of its
-+** contributors may be used to endorse or promote products derived
-+** from this software without specific prior written permission.
-+**
-+**
-+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+** "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 COPYRIGHT
-+** OWNER OR CONTRIBUTORS 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."
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+import QtQuick 2.7
-+import QtQuick.Layouts 1.3
-+
-+Item {
-+ objectName: "qtbug51927-window"
-+ visible: true
-+
-+ default property alias _contents: customContent.data
-+
-+ RowLayout {
-+ id: customContent
-+ objectName: "qtbug51927-columnLayout"
-+ anchors.fill: parent
-+ }
-+}
-diff --git a/tests/auto/quick/qquicklayouts/data/rowlayout/ContainerUser.qml b/tests/auto/quick/qquicklayouts/data/rowlayout/ContainerUser.qml
-new file mode 100644
-index 0000000..ff7ce62
---- /dev/null
-+++ b/tests/auto/quick/qquicklayouts/data/rowlayout/ContainerUser.qml
-@@ -0,0 +1,53 @@
-+/****************************************************************************
-+**
-+** Copyright (C) 2016 The Qt Company Ltd.
-+** Contact: http://www.qt.io/licensing/
-+**
-+** This file is part of the test suite of the Qt Toolkit.
-+**
-+** $QT_BEGIN_LICENSE:BSD$
-+** You may use this file under the terms of the BSD license as follows:
-+**
-+** "Redistribution and use in source and binary forms, with or without
-+** modification, are permitted provided that the following conditions are
-+** met:
-+** * Redistributions of source code must retain the above copyright
-+** notice, this list of conditions and the following disclaimer.
-+** * Redistributions in binary form must reproduce the above copyright
-+** notice, this list of conditions and the following disclaimer in
-+** the documentation and/or other materials provided with the
-+** distribution.
-+** * Neither the name of The Qt Company Ltd nor the names of its
-+** contributors may be used to endorse or promote products derived
-+** from this software without specific prior written permission.
-+**
-+**
-+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+** "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 COPYRIGHT
-+** OWNER OR CONTRIBUTORS 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."
-+**
-+** $QT_END_LICENSE$
-+**
-+****************************************************************************/
-+
-+import QtQuick 2.6
-+import QtQuick.Window 2.2
-+
-+Container {
-+ visible: true
-+
-+ Text {
-+ objectName: "qtbug51927-text"
-+ text: qsTr("Hello World")
-+ anchors.centerIn: parent
-+ renderType: Text.QtRendering
-+ }
-+}
-diff --git a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
-index 33b8fd0..2d4e227 100644
---- a/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
-+++ b/tests/auto/quick/qquicklayouts/data/tst_rowlayout.qml
-@@ -926,5 +926,17 @@ Item {
- waitForRendering(layout)
- layout.destroy()
- }
-+
-+
-+ function test_defaultPropertyAliasCrash() {
-+ var containerUserComponent = Qt.createComponent("rowlayout/ContainerUser.qml");
-+ compare(containerUserComponent.status, Component.Ready);
-+
-+ var containerUser = containerUserComponent.createObject(testCase);
-+ verify(containerUser);
-+
-+ // Shouldn't crash.
-+ containerUser.destroy();
-+ }
- }
- }
---
-cgit v1.0-4-g1e03
-
diff --git a/deps/qt5/patches/qt5.qtbug-53237.patch b/deps/qt5/patches/qt5.qtbug-53237.patch
deleted file mode 100644
index c6d5739..0000000
--- a/deps/qt5/patches/qt5.qtbug-53237.patch
+++ /dev/null
@@ -1,90 +0,0 @@
-From 8e889378115c69508b050a511621ac8e30ec4158 Mon Sep 17 00:00:00 2001
-From: Jesus Fernandez <jesus.fernandez@theqtcompany.com>
-Date: Mon, 13 Jun 2016 19:09:15 +0200
-Subject: [PATCH] Fix UNSIGNED values in QMYSQL
-
-The unsigned flag in columns was ignored when creating the list of
-bound values in a mysql table. So the result iteration with
-QSqlQuery::next stops after the first wrong truncated value.
-
-[ChangeLog][QtSql] Fixed QSqlQuery::prepare value truncation error when
-using UNSIGNED values in a MySQL database.
-
-Task-number: QTBUG-53969
-Task-number: QTBUG-53237
-Change-Id: I10d977993445f2794f1dd8c88b2e83517ef524f3
-Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
----
- src/sql/drivers/mysql/qsql_mysql.cpp | 1 +
- tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp | 39 +++++++++++++++++++++++
- 2 files changed, 40 insertions(+)
-
-diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
-index 96bdcc4..55bf499 100644
---- a/src/sql/drivers/mysql/qsql_mysql.cpp
-+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
-@@ -387,6 +387,7 @@ bool QMYSQLResultPrivate::bindInValues()
- bind->buffer_length = f.bufLength = fieldInfo->length + 1;
- bind->is_null = &f.nullIndicator;
- bind->length = &f.bufLength;
-+ bind->is_unsigned = fieldInfo->flags & UNSIGNED_FLAG ? 1 : 0;
- f.outField=field;
-
- ++i;
-diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
-index bd553d5..f1c4333 100644
---- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
-+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
-@@ -233,6 +233,9 @@ private slots:
- void QTBUG_36211_data() { generic_data("QPSQL"); }
- void QTBUG_36211();
-
-+ void QTBUG_53969_data() { generic_data("QMYSQL"); }
-+ void QTBUG_53969();
-+
- void sqlite_constraint_data() { generic_data("QSQLITE"); }
- void sqlite_constraint();
-
-@@ -3652,6 +3655,42 @@ void tst_QSqlQuery::QTBUG_36211()
- }
- }
-
-+void tst_QSqlQuery::QTBUG_53969()
-+{
-+ QFETCH( QString, dbName );
-+ QVector<int> values = QVector<int>() << 10 << 20 << 127 << 128 << 1, tableValues;
-+ QSqlDatabase db = QSqlDatabase::database( dbName );
-+ CHECK_DATABASE( db );
-+ tableValues.reserve(values.size());
-+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer) {
-+ const QString tableName(qTableName("bug53969", __FILE__, db));
-+ tst_Databases::safeDropTable( db, tableName );
-+
-+ QSqlQuery q(db);
-+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id INT AUTO_INCREMENT PRIMARY KEY, "
-+ "test_number TINYINT(3) UNSIGNED)")
-+ .arg(tableName)));
-+
-+ QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (test_number) VALUES (:value)"));
-+
-+ QVector<int>::iterator begin = values.begin(), end = values.end(), it;
-+ for (it = begin; it != end; ++it) {
-+ q.bindValue(":value", *it);
-+ QVERIFY_SQL(q, exec());
-+ }
-+
-+ QVERIFY_SQL(q, prepare("SELECT test_number FROM " + tableName));
-+ QVERIFY_SQL(q, exec());
-+
-+ while (q.next()) {
-+ bool ok;
-+ tableValues.push_back(q.value(0).toUInt(&ok));
-+ QVERIFY(ok);
-+ }
-+ QCOMPARE(values, tableValues);
-+ }
-+}
-+
- void tst_QSqlQuery::oraOCINumber()
- {
- QFETCH( QString, dbName );
diff --git a/deps/qt5/patches/qt5.qtbug-55583.patch b/deps/qt5/patches/qt5.qtbug-55583.patch
deleted file mode 100644
index 804f538..0000000
--- a/deps/qt5/patches/qt5.qtbug-55583.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# https://github.com/qt/qtbase/commit/84ea00d4.patch
-#
-From 84ea00d47049d882f2fabf1446ec6c6eb5fe3038 Mon Sep 17 00:00:00 2001
-From: J-P Nurmi <jpnurmi@qt.io>
-Date: Tue, 6 Dec 2016 16:30:31 +0100
-Subject: [PATCH] QGtk3Dialog: don't crash on Wayland
-
-Check if it's an X11 window before calling XSetTransientForHint().
-No transient parent will be set for GTK+ dialogs on Wayland. That
-has to be implemented separately.
-
-Task-number: QTBUG-55583
-Change-Id: Iabc2a72681c8157bb2f2fe500892853aa397106b
-Reviewed-by: Dmitry Shachnev <mitya57@gmail.com>
-Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
----
- src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp | 10 ++++++----
- 1 file changed, 6 insertions(+), 4 deletions(-)
-
-diff --git a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
-index ba5089a..699b058 100644
---- a/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
-+++ b/src/plugins/platformthemes/gtk3/qgtk3dialoghelpers.cpp
-@@ -135,10 +135,12 @@ bool QGtk3Dialog::show(Qt::WindowFlags flags, Qt::WindowModality modality, QWind
-
- GdkWindow *gdkWindow = gtk_widget_get_window(gtkWidget);
- if (parent) {
-- GdkDisplay *gdkDisplay = gdk_window_get_display(gdkWindow);
-- XSetTransientForHint(gdk_x11_display_get_xdisplay(gdkDisplay),
-- gdk_x11_window_get_xid(gdkWindow),
-- parent->winId());
-+ if (GDK_IS_X11_WINDOW(gdkWindow)) {
-+ GdkDisplay *gdkDisplay = gdk_window_get_display(gdkWindow);
-+ XSetTransientForHint(gdk_x11_display_get_xdisplay(gdkDisplay),
-+ gdk_x11_window_get_xid(gdkWindow),
-+ parent->winId());
-+ }
- }
-
- if (modality != Qt::NonModal) {
diff --git a/deps/qt5/patches/qt5.qtbug-60558.patch b/deps/qt5/patches/qt5.qtbug-60558.patch
deleted file mode 100644
index 2d03920..0000000
--- a/deps/qt5/patches/qt5.qtbug-60558.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-https://github.com/qt/qtbase/commit/f45c6c18.patch
-
-From f45c6c180463ccb6620e1d273a264f14a1204a93 Mon Sep 17 00:00:00 2001
-From: Thiago Macieira <thiago.macieira@intel.com>
-Date: Wed, 3 May 2017 14:08:50 -0700
-Subject: [PATCH] QInternal::unregisterCallback: don't crash on unregistering
- during exit
-
-Task-number: QTBUG-60558
-Change-Id: Ica9894dc9b5e48278fd4fffd14bb34c6d98d2555
-Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
----
- src/corelib/global/qglobal.cpp | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
-index c37503f3db..22fc20d47e 100644
---- a/src/corelib/global/qglobal.cpp
-+++ b/src/corelib/global/qglobal.cpp
-@@ -3988,8 +3988,10 @@ bool QInternal::registerCallback(Callback cb, qInternalCallback callback)
- bool QInternal::unregisterCallback(Callback cb, qInternalCallback callback)
- {
- if (cb >= 0 && cb < QInternal::LastCallback) {
-- QInternal_CallBackTable *cbt = global_callback_table();
-- return (bool) cbt->callbacks[cb].removeAll(callback);
-+ if (global_callback_table.exists()) {
-+ QInternal_CallBackTable *cbt = global_callback_table();
-+ return (bool) cbt->callbacks[cb].removeAll(callback);
-+ }
- }
- return false;
- }
diff --git a/deps/qt5/patches/qt5.qtbug-61140.patch b/deps/qt5/patches/qt5.qtbug-61140.patch
deleted file mode 100644
index 17468a9..0000000
--- a/deps/qt5/patches/qt5.qtbug-61140.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-https://github.com/qt/qtbase/commit/744fd39e.patch
-
-From 744fd39e66b0b44e65a2505d674fa1cda8b205a4 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= <tor.arne.vestbo@qt.io>
-Date: Fri, 2 Jun 2017 11:09:55 +0200
-Subject: [PATCH] xcb: Don't destroy foreign windows
-
-We can't rely on virtual dispatch in the destructor.
-
-Task-number: QTBUG-61140
-Change-Id: Ib1026caf126095778c24254775cb5a0bfecf3a38
-Reviewed-by: Fabian Vogt
-Reviewed-by: Gatis Paeglis <gatis.paeglis@qt.io>
----
- src/plugins/platforms/xcb/qxcbintegration.cpp | 18 +-----------------
- src/plugins/platforms/xcb/qxcbwindow.cpp | 16 ++++++++++------
- src/plugins/platforms/xcb/qxcbwindow.h | 12 ++++++++++++
- 3 files changed, 23 insertions(+), 23 deletions(-)
-
-diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
-index b414bee204..8e3ee20329 100644
---- a/src/plugins/platforms/xcb/qxcbintegration.cpp
-+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
-@@ -214,25 +214,9 @@ QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
- return xcbWindow;
- }
-
--class QXcbForeignWindow : public QXcbWindow
--{
--public:
-- QXcbForeignWindow(QWindow *window, WId nativeHandle)
-- : QXcbWindow(window) { m_window = nativeHandle; }
-- ~QXcbForeignWindow() {}
-- bool isForeignWindow() const override { return true; }
--
--protected:
-- // No-ops
-- void create() override {}
-- void destroy() override {}
--};
--
- QPlatformWindow *QXcbIntegration::createForeignWindow(QWindow *window, WId nativeHandle) const
- {
-- QXcbWindow *xcbWindow = new QXcbForeignWindow(window, nativeHandle);
-- xcbWindow->create();
-- return xcbWindow;
-+ return new QXcbForeignWindow(window, nativeHandle);
- }
-
- #ifndef QT_NO_OPENGL
-diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
-index 289d0720e7..d6c69d52ef 100644
---- a/src/plugins/platforms/xcb/qxcbwindow.cpp
-+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
-@@ -597,13 +597,17 @@ QXcbWindow::~QXcbWindow()
- }
-
- destroy();
-+}
-
-- if (isForeignWindow()) {
-- if (connection()->mouseGrabber() == this)
-- connection()->setMouseGrabber(Q_NULLPTR);
-- if (connection()->mousePressWindow() == this)
-- connection()->setMousePressWindow(Q_NULLPTR);
-- }
-+QXcbForeignWindow::~QXcbForeignWindow()
-+{
-+ // Clear window so that destroy() does not affect it
-+ m_window = 0;
-+
-+ if (connection()->mouseGrabber() == this)
-+ connection()->setMouseGrabber(nullptr);
-+ if (connection()->mousePressWindow() == this)
-+ connection()->setMousePressWindow(nullptr);
- }
-
- void QXcbWindow::destroy()
-diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
-index 56628094ee..f38343b6c2 100644
---- a/src/plugins/platforms/xcb/qxcbwindow.h
-+++ b/src/plugins/platforms/xcb/qxcbwindow.h
-@@ -278,6 +278,18 @@ public Q_SLOTS:
- xcb_cursor_t m_currentBitmapCursor = XCB_CURSOR_NONE;
- };
-
-+class QXcbForeignWindow : public QXcbWindow
-+{
-+public:
-+ QXcbForeignWindow(QWindow *window, WId nativeHandle)
-+ : QXcbWindow(window) { m_window = nativeHandle; }
-+ ~QXcbForeignWindow();
-+ bool isForeignWindow() const override { return true; }
-+
-+protected:
-+ void create() override {} // No-op
-+};
-+
- QT_END_NAMESPACE
-
- Q_DECLARE_METATYPE(QXcbWindow*)
diff --git a/deps/qt5/patches/qt5.qtbug-66103.patch b/deps/qt5/patches/qt5.qtbug-66103.patch
deleted file mode 100644
index 62d1b30..0000000
--- a/deps/qt5/patches/qt5.qtbug-66103.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-https://code.qt.io/cgit/qt/qtbase.git/patch/?id=4a7771f206d4b29be549d3827c36a46679d90de6
-
-From 4a7771f206d4b29be549d3827c36a46679d90de6 Mon Sep 17 00:00:00 2001
-From: Eike Hein <hein@kde.org>
-Date: Sun, 7 Jan 2018 13:02:01 +0900
-Subject: QSimpleDrag: Fix mouse release coords for delayed event transmission
-
-On platforms such as XCB, the drag cursor pixmap is shown via a window
-(a QShapedPixmapWindow) under the cursor.
-
-The mouse button release event at the end of the drag is received in
-this QXcbWindow, but intercepted by an event filter that QSimpleDrag
-installs on the QApplication. It then resends it unmodified(!) after
-the drag has ended and the drag pixmap window destroyed, causing it to
-be delivered to the new top-level window.
-
-The local coordinates in the unmodified QMouseEvent are local to the
-drag pixmap window and don't match the window it is delayed-transmitted
-to.
-
-This ends up having fatal, user-visible effects particularly in Qt
-Quick: QQuickWindow synthesizes a hover event once per frame using
-the last received mouse coordinates, here: the release posted by
-QSimpleDrag. This is done to update the hover event state for items
-under the cursor when the mouse hasn't moved (e.g. QQuickMouseArea::
-containsMouse). The bogus event coordinates in the release event then
-usually end up causing an item near the top-left of the QQuickWindow
-to assume it is hovered (because drag pixmap windows tend to be small),
-even when the mouse cursor is actually far away from it at the end of
-the drag.
-
-This shows up e.g. in the Plasma 5 desktop, where dragging an icon
-on the desktop will cause the icon at the top-left of the screen (if
-any) to switch to hovered state, as the release coordinates on the
-drag pixmap window (showing a dragged icon) fall into the geometry
-of the top-left icon.
-
-QSimpleDrag contains a topLevelAt() function to find the top-level
-window under the global cursor coordinates that is not the drag
-pixmap window. This is used by the drop event delivery code.
-
-This patch uses this function to find the relevant top-level window,
-then asks it to map the global cusor coordinates to its local
-coordinate system, then synthesizes a new QMouseEvent with local
-coordinates computed in this fashion. As a result the window now
-gets a release event with coordinates that make sense and are
-correct.
-
-Task-number: QTBUG-66103
-Change-Id: I04ebe6ccd4a991fdd4b540ff0227973ea8896a9d
-Reviewed-by: Eike Hein <hein@kde.org>
-Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
----
- src/gui/kernel/qsimpledrag.cpp | 32 +++++++++++++++++++++++++++-----
- src/gui/kernel/qsimpledrag_p.h | 6 +++---
- 2 files changed, 30 insertions(+), 8 deletions(-)
-
-diff --git a/src/gui/kernel/qsimpledrag.cpp b/src/gui/kernel/qsimpledrag.cpp
-index a1e25dc53c..87d3ba5915 100644
---- a/src/gui/kernel/qsimpledrag.cpp
-+++ b/src/gui/kernel/qsimpledrag.cpp
-@@ -58,6 +58,7 @@
-
- #include <QtCore/QEventLoop>
- #include <QtCore/QDebug>
-+#include <QtCore/QLoggingCategory>
-
- #include <private/qguiapplication_p.h>
- #include <private/qdnd_p.h>
-@@ -69,6 +70,8 @@ QT_BEGIN_NAMESPACE
-
- #ifndef QT_NO_DRAGANDDROP
-
-+Q_LOGGING_CATEGORY(lcDnd, "qt.gui.dnd")
-+
- static QWindow* topLevelAt(const QPoint &pos)
- {
- QWindowList list = QGuiApplication::topLevelWindows();
-@@ -94,10 +97,10 @@ static QWindow* topLevelAt(const QPoint &pos)
- */
-
- QBasicDrag::QBasicDrag() :
-- m_restoreCursor(false), m_eventLoop(0),
-+ m_current_window(nullptr), m_restoreCursor(false), m_eventLoop(nullptr),
- m_executed_drop_action(Qt::IgnoreAction), m_can_drop(false),
-- m_drag(0), m_drag_icon_window(0), m_useCompositing(true),
-- m_screen(Q_NULLPTR)
-+ m_drag(nullptr), m_drag_icon_window(nullptr), m_useCompositing(true),
-+ m_screen(nullptr)
- {
- }
-
-@@ -161,6 +164,7 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e)
- return true; // Eat all mouse move events
- }
- case QEvent::MouseButtonRelease:
-+ {
- disableEventFilter();
- if (canDrop()) {
- QPoint nativePosition = getNativeMousePos(e, m_drag_icon_window);
-@@ -169,8 +173,25 @@ bool QBasicDrag::eventFilter(QObject *o, QEvent *e)
- cancel();
- }
- exitDndEventLoop();
-- QCoreApplication::postEvent(o, new QMouseEvent(*static_cast<QMouseEvent *>(e)));
-+
-+ // If a QShapedPixmapWindow (drag feedback) is being dragged along, the
-+ // mouse event's localPos() will be relative to that, which is useless.
-+ // We want a position relative to the window where the drag ends, if possible (?).
-+ // If there is no such window (belonging to this Qt application),
-+ // make the event relative to the window where the drag started. (QTBUG-66103)
-+ const QMouseEvent *release = static_cast<QMouseEvent *>(e);
-+ const QWindow *releaseWindow = topLevelAt(release->globalPos());
-+ qCDebug(lcDnd) << "mouse released over" << releaseWindow << "after drag from" << m_current_window << "globalPos" << release->globalPos();
-+ if (!releaseWindow)
-+ releaseWindow = m_current_window;
-+ QPoint releaseWindowPos = (releaseWindow ? releaseWindow->mapFromGlobal(release->globalPos()) : release->globalPos());
-+ QMouseEvent *newRelease = new QMouseEvent(release->type(),
-+ releaseWindowPos, releaseWindowPos, release->screenPos(),
-+ release->button(), release->buttons(),
-+ release->modifiers(), release->source());
-+ QCoreApplication::postEvent(o, newRelease);
- return true; // defer mouse release events until drag event loop has returned
-+ }
- case QEvent::MouseButtonDblClick:
- case QEvent::Wheel:
- return true;
-@@ -349,7 +370,7 @@ static inline QPoint fromNativeGlobalPixels(const QPoint &point)
- into account.
- */
-
--QSimpleDrag::QSimpleDrag() : m_current_window(0)
-+QSimpleDrag::QSimpleDrag()
- {
- }
-
-@@ -373,6 +394,7 @@ void QSimpleDrag::startDrag()
- updateCursor(Qt::IgnoreAction);
- }
- setExecutedDropAction(Qt::IgnoreAction);
-+ qCDebug(lcDnd) << "drag began from" << m_current_window<< "cursor pos" << QCursor::pos() << "can drop?" << canDrop();
- }
-
- void QSimpleDrag::cancel()
-diff --git a/src/gui/kernel/qsimpledrag_p.h b/src/gui/kernel/qsimpledrag_p.h
-index 0b8a0bc703..bbd7f7f4bb 100644
---- a/src/gui/kernel/qsimpledrag_p.h
-+++ b/src/gui/kernel/qsimpledrag_p.h
-@@ -105,6 +105,9 @@ protected:
-
- QDrag *drag() const { return m_drag; }
-
-+protected:
-+ QWindow *m_current_window;
-+
- private:
- void enableEventFilter();
- void disableEventFilter();
-@@ -132,9 +135,6 @@ protected:
- virtual void cancel() Q_DECL_OVERRIDE;
- virtual void move(const QPoint &globalPos) Q_DECL_OVERRIDE;
- virtual void drop(const QPoint &globalPos) Q_DECL_OVERRIDE;
--
--private:
-- QWindow *m_current_window;
- };
-
- #endif // QT_NO_DRAGANDDROP
---
-cgit v1.1-6-g87c4
-
-
diff --git a/deps/qt5/patches/qt5.qtbug-69310.patch b/deps/qt5/patches/qt5.qtbug-69310.patch
deleted file mode 100644
index b924627..0000000
--- a/deps/qt5/patches/qt5.qtbug-69310.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From fcba9fa861574f33e1d2e54d8c8d6da8062927cd Mon Sep 17 00:00:00 2001
-From: Allan Sandfeld Jensen <allan.jensen@qt.io>
-Date: Wed, 23 Jan 2019 10:42:12 +0100
-Subject: Fix regression in QPlainTextEdit updating
-
-It was incorrectly counting a block having more than one line as having
-changed visibility.
-
-Fixes: QTBUG-69310
-Change-Id: I502cda1d3e8a4efb1c14122353cc0a4731d8581c
-Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
----
- src/widgets/widgets/qplaintextedit.cpp | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
-diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
-index d6f6a364a8..57f2dec8f7 100644
---- a/src/widgets/widgets/qplaintextedit.cpp
-+++ b/src/widgets/widgets/qplaintextedit.cpp
-@@ -312,10 +312,11 @@ void QPlainTextDocumentLayout::documentChanged(int from, int charsRemoved, int c
- QTextBlock block = changeStartBlock;
- do {
- block.clearLayout();
-- const int lineCount = block.isVisible() ? 1 : 0;
-- if (block.lineCount() != lineCount) {
-+ if (block.isVisible()
-+ ? (block.lineCount() == 0)
-+ : (block.lineCount() > 0)) {
- blockVisibilityChanged = true;
-- block.setLineCount(lineCount);
-+ block.setLineCount(block.isVisible() ? 1 : 0);
- }
- if (block == changeEndBlock)
- break;
---
-cgit v1.2.1
-
diff --git a/deps/qt5/patches/qt5.qtbug-76255.patch b/deps/qt5/patches/qt5.qtbug-76255.patch
deleted file mode 100644
index 678913c..0000000
--- a/deps/qt5/patches/qt5.qtbug-76255.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From cc32a691936f37eaaec618a71edd62f896009c9d Mon Sep 17 00:00:00 2001
-From: Joerg Bornemann <joerg.bornemann@qt.io>
-Date: Fri, 06 Sep 2019 10:54:44 +0200
-Subject: [PATCH] Fix CMake config files for -libdir different from "lib"
-
-When Qt was configured with -libdir different from "lib", one could not
-build with CMake whenever a static lib was pulled in (e.g. uitools).
-
-Do not hard-code "/lib" but use the correct variable also for static
-libraries.
-
-Fixes: QTBUG-76255
-Change-Id: I28c6861752e29e461247628d2b1f8a9ec32f0790
-Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
-Reviewed-by: Fabian Vogt <fabian@ritter-vogt.de>
----
-
-diff --git a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-index d4fd057..f4a34d6 100644
---- a/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-+++ b/mkspecs/features/data/cmake/Qt5BasicConfig.cmake.in
-@@ -53,7 +53,11 @@
- set(_lib_deps)
- set(_link_flags)
-
-- get_filename_component(_qt5_install_libs \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/lib\" ABSOLUTE)
-+!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
-+ set(_qt5_install_libs \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}\")
-+!!ELSE
-+ set(_qt5_install_libs \"$${CMAKE_LIB_DIR}\")
-+!!ENDIF
-
- if(EXISTS \"${prl_file_location}\")
- file(STRINGS \"${prl_file_location}\" _prl_strings REGEX \"QMAKE_PRL_LIBS_FOR_CMAKE[ \\t]*=\")
-
diff --git a/deps/qt5/patches/qt5.qtbug-77037.patch b/deps/qt5/patches/qt5.qtbug-77037.patch
deleted file mode 100644
index 4dac59a..0000000
--- a/deps/qt5/patches/qt5.qtbug-77037.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 0b57f15958f07ef12c8944d6db7a33a6fe9d9c59 Mon Sep 17 00:00:00 2001
-From: Allan Sandfeld Jensen <allan.jensen@qt.io>
-Date: Mon, 23 Sep 2019 13:49:53 +0200
-Subject: Fix building with pulseaudio 13
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function signature changed though the ABI stayed the same.
-
-Change-Id: I86ca361b5e4f0c523e1031910df438c23beee876
-Fixes: QTBUG-77037
-Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
----
- chromium/media/audio/pulse/pulse.sigs | 16 ++++++++--------
- chromium/media/audio/pulse/pulse_stub_header.fragment | 11 +++++++++++
- 2 files changed, 19 insertions(+), 8 deletions(-)
-
-diff --git a/chromium/media/audio/pulse/pulse.sigs b/chromium/media/audio/pulse/pulse.sigs
-index 8b5888786a9..daaeb149c13 100644
---- a/chromium/media/audio/pulse/pulse.sigs
-+++ b/chromium/media/audio/pulse/pulse.sigs
-@@ -24,11 +24,11 @@ pa_operation* pa_context_get_source_info_by_index(pa_context* c, uint32_t idx, p
- pa_operation* pa_context_get_source_info_by_name(pa_context* c, const char* name, pa_source_info_cb_t cb, void *userdata);
- pa_operation* pa_context_get_source_info_list(pa_context* c, pa_source_info_cb_t cb, void* userdata);
- pa_operation* pa_context_get_sink_info_list(pa_context* c, pa_sink_info_cb_t cb, void* userdata);
--pa_context_state_t pa_context_get_state(pa_context* c);
-+pa_context_state_t pa_context_get_state(const_pa_context_ptr c);
- pa_context* pa_context_new(pa_mainloop_api* mainloop, const char* name);
- pa_operation* pa_context_set_source_volume_by_index(pa_context* c, uint32_t idx, const pa_cvolume* volume, pa_context_success_cb_t cb, void* userdata);
- void pa_context_set_state_callback(pa_context* c, pa_context_notify_cb_t cb, void* userdata);
--pa_operation_state_t pa_operation_get_state(pa_operation* o);
-+pa_operation_state_t pa_operation_get_state(const_pa_operation_ptr o);
- void pa_context_unref(pa_context* c);
- void pa_operation_unref(pa_operation* o);
- int pa_stream_begin_write(pa_stream* p, void** data, size_t* nbytes);
-@@ -38,23 +38,23 @@ pa_operation* pa_stream_cork(pa_stream* s, int b, pa_stream_success_cb_t cb, voi
- int pa_stream_disconnect(pa_stream* s);
- int pa_stream_drop(pa_stream *p);
- pa_operation* pa_stream_flush(pa_stream* s, pa_stream_success_cb_t cb, void* userdata);
--uint32_t pa_stream_get_device_index(pa_stream* s);
-+uint32_t pa_stream_get_device_index(const_pa_stream_ptr s);
- int pa_stream_get_latency(pa_stream* s, pa_usec_t* r_usec, int* negative);
--pa_stream_state_t pa_stream_get_state(pa_stream* p);
-+pa_stream_state_t pa_stream_get_state(const_pa_stream_ptr p);
- pa_stream* pa_stream_new(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map * map);
- pa_stream* pa_stream_new_with_proplist(pa_context* c, const char* name, const pa_sample_spec* ss, const pa_channel_map* map, pa_proplist* p);
- pa_proplist* pa_proplist_new(void);
--int pa_proplist_contains(pa_proplist* p, const char* key);
-+int pa_proplist_contains(const_pa_proplist_ptr p, const char* key);
- void pa_proplist_free(pa_proplist* p);
--const char* pa_proplist_gets(pa_proplist* p, const char* key);
-+const char* pa_proplist_gets(const_pa_proplist_ptr p, const char* key);
- int pa_proplist_sets(pa_proplist* p, const char* key, const char* value);
--size_t pa_stream_readable_size(pa_stream *p);
-+size_t pa_stream_readable_size(const_pa_stream_ptr p);
- int pa_stream_peek(pa_stream* p, const void** data, size_t* nbytes);
- void pa_stream_set_read_callback(pa_stream* p, pa_stream_request_cb_t cb, void* userdata);
- void pa_stream_set_state_callback(pa_stream* s, pa_stream_notify_cb_t cb, void* userdata);
- int pa_stream_write(pa_stream* p, const void* data, size_t nbytes, pa_free_cb_t free_cb, int64_t offset, pa_seek_mode_t seek);
- void pa_stream_set_write_callback(pa_stream *p, pa_stream_request_cb_t cb, void *userdata);
- void pa_stream_unref(pa_stream* s);
--int pa_context_errno(pa_context *c);
-+int pa_context_errno(const_pa_context_ptr c);
- const char* pa_strerror(int error);
- pa_cvolume* pa_cvolume_set(pa_cvolume* a, unsigned channels, pa_volume_t v);
-diff --git a/chromium/media/audio/pulse/pulse_stub_header.fragment b/chromium/media/audio/pulse/pulse_stub_header.fragment
-index 2a2d3e7552b..cdaa841b29f 100644
---- a/chromium/media/audio/pulse/pulse_stub_header.fragment
-+++ b/chromium/media/audio/pulse/pulse_stub_header.fragment
-@@ -5,4 +5,15 @@ extern "C" {
-
- #include <pulse/pulseaudio.h>
-
-+#if PA_MAJOR > 12
-+typedef const pa_context* const_pa_context_ptr;
-+typedef const pa_operation* const_pa_operation_ptr;
-+typedef const pa_proplist* const_pa_proplist_ptr;
-+typedef const pa_stream* const_pa_stream_ptr;
-+#else
-+typedef pa_context* const_pa_context_ptr;
-+typedef pa_operation* const_pa_operation_ptr;
-+typedef pa_proplist* const_pa_proplist_ptr;
-+typedef pa_stream* const_pa_stream_ptr;
-+#endif
- }
---
-cgit v1.2.1
-
diff --git a/deps/qt5/patches/qt5.qtbug-77364.patch b/deps/qt5/patches/qt5.qtbug-77364.patch
deleted file mode 100644
index 088856c..0000000
--- a/deps/qt5/patches/qt5.qtbug-77364.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
-index 04290a4ce1..27773d5762 100644
---- a/src/widgets/kernel/qwidget.cpp
-+++ b/src/widgets/kernel/qwidget.cpp
-@@ -6446,7 +6446,7 @@ void QWidget::setFocusProxy(QWidget * w)
-
- if (changingAppFocusWidget) {
- QWidget *newDeepestFocusProxy = d_func()->deepestFocusProxy();
-- QApplicationPrivate::focus_widget = newDeepestFocusProxy ? newDeepestFocusProxy : this;
-+ QApplicationPrivate::setFocusWidget(newDeepestFocusProxy ? newDeepestFocusProxy : this, Qt::NoFocusReason);
- }
- }
-
diff --git a/deps/qt5/patches/qt5.webengine_gcc8.patch b/deps/qt5/patches/qt5.webengine_gcc8.patch
deleted file mode 100644
index cf276bc..0000000
--- a/deps/qt5/patches/qt5.webengine_gcc8.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-# Prevent these errors caused by using GCC8
-# (original patch taken from Fedora's chromium SRPM):
-#
-# make: *** [Makefile:1028: module-qtwebengine-make_first] Error 2
-# FAILED: obj/mojo/public/c/system/system/thunks.o
-# ../../3rdparty/chromium/mojo/public/c/system/buffer.h:38:42: error: static assertion failed: int64_t has weird alignment
-# ../../3rdparty/chromium/mojo/public/c/system/data_pipe.h:49:42: error: static assertion failed: int64_t has weird alignment
-# ../../3rdparty/chromium/mojo/public/c/system/message_pipe.h:47:42: error: static assertion failed: int64_t has weird alignment
-#
---- a/src/3rdparty/chromium/mojo/public/c/system/macros.h 2018-05-15 14:58:46.448912634 -0400
-+++ b/src/3rdparty/chromium/mojo/public/c/system/macros.h 2018-05-15 14:58:52.041784613 -0400
-@@ -18,7 +18,13 @@
- #endif
-
- // Like the C++11 |alignof| operator.
--#if __cplusplus >= 201103L
-+#if defined(__GNUC__) && __GNUC__ >= 8
-+// GCC 8 has changed the alignof operator to return the minimal alignment
-+// required by the target ABI, instead of the preferred alignment.
-+// This means that on 32-bit x86, it will return 4 instead of 8.
-+// Use __alignof__ instead to avoid this.
-+#define MOJO_ALIGNOF(type) __alignof__(type)
-+#elif __cplusplus >= 201103L
- #define MOJO_ALIGNOF(type) alignof(type)
- #elif defined(__GNUC__)
- #define MOJO_ALIGNOF(type) __alignof__(type)
diff --git a/deps/qt5/patches/qt5.whandle.patch b/deps/qt5/patches/qt5.whandle.patch
deleted file mode 100644
index 4428974..0000000
--- a/deps/qt5/patches/qt5.whandle.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From: Ulf Hermann <ulf.hermann@theqtcompany.com>
-Date: Tue, 27 Oct 2015 14:25:42 +0000 (+0100)
-Subject: WIP: Also do hide/show via WA_OutsideWSRange for native widgets
-X-Git-Url: https://codereview.qt-project.org/gitweb?p=qt%2Fqtbase.git;a=commitdiff_plain;h=5ea44d1d516f0c68a6793279df5c1569ef9fadd2
-
-WIP: Also do hide/show via WA_OutsideWSRange for native widgets
-
-Task-number: QTBUG-48321
-Change-Id: I78ef29975181ee22429c9bd4b11d96d9e68b7a9c
----
-
-diff --git a/qtbase/src/widgets/kernel/qwidget.cpp b/qtbase/src/widgets/kernel/qwidget.cpp
-index a006246..024005d 100644
---- a/qtbase/src/widgets/kernel/qwidget.cpp
-+++ b/qtbase/src/widgets/kernel/qwidget.cpp
-@@ -7169,7 +7169,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove)
-
- bool needsShow = false;
-
-- if (q->isWindow()) {
-+ if (q->isWindow() || q->windowHandle()) {
- if (!(data.window_state & Qt::WindowFullScreen) && (w == 0 || h == 0)) {
- q->setAttribute(Qt::WA_OutsideWSRange, true);
- if (q->isVisible() && q->testAttribute(Qt::WA_Mapped))
diff --git a/deps/qt5/patches/qtbase-qxcbwindow.patch b/deps/qt5/patches/qtbase-qxcbwindow.patch
deleted file mode 100644
index 62a0bb4..0000000
--- a/deps/qt5/patches/qtbase-qxcbwindow.patch
+++ /dev/null
@@ -1,97 +0,0 @@
-Taken from: https://code.qt.io/cgit/qt/qtbase.git/patch/?id=0c183117
-
-From 0c1831178540462da31fd7a4b6d2e446bc84498b Mon Sep 17 00:00:00 2001
-From: Erik Kurzinger <ekurzinger@nvidia.com>
-Date: Thu, 13 Jun 2019 08:15:50 -0700
-Subject: Track swap interval in QXcbWindow
-
-As per GLX_EXT_swap_control, the GLX swap interval is specified on a
-per-drawable basis. However, QGLXContext only tracks it per-context
-using the m_swapInterval member. If a new drawable is made current to a
-context, it is still necessary to call glXSwapIntervalEXT to change the
-swap interval, even if it has been previously called for the same
-context with a different drawable. However, currently,
-QGLXContext::makeCurrent doesn't do this if its m_swapInterval field
-matches the new swap interval. This change removes m_swapInterval from
-QGLXContext, instead tracking it in QXcbWindow. This still avoids
-unnecessary calls to glXSwapIntervalEXT, while ensuring the swap
-interval is always set for new window drawables.
-
-Change-Id: Idc34101476c6af618059f6f3d8925dee743994a3
-Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
----
- .../platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp | 6 +++---
- src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h | 1 -
- src/plugins/platforms/xcb/qxcbwindow.h | 4 ++++
- 3 files changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
-index 4adf662152..f26f698e76 100644
---- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
-+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
-@@ -204,7 +204,6 @@ QGLXContext::QGLXContext(QXcbScreen *screen, const QSurfaceFormat &format, QPlat
- , m_shareContext(0)
- , m_format(format)
- , m_isPBufferCurrent(false)
-- , m_swapInterval(-1)
- , m_ownsContext(nativeHandle.isNull())
- , m_getGraphicsResetStatus(0)
- , m_lost(false)
-@@ -567,9 +566,9 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
-
- if (success && surfaceClass == QSurface::Window) {
- int interval = surface->format().swapInterval();
-+ QXcbWindow *window = static_cast<QXcbWindow *>(surface);
- QXcbScreen *screen = screenForPlatformSurface(surface);
-- if (interval >= 0 && m_swapInterval != interval && screen) {
-- m_swapInterval = interval;
-+ if (interval >= 0 && interval != window->swapInterval() && screen) {
- typedef void (*qt_glXSwapIntervalEXT)(Display *, GLXDrawable, int);
- typedef void (*qt_glXSwapIntervalMESA)(unsigned int);
- static qt_glXSwapIntervalEXT glXSwapIntervalEXT = 0;
-@@ -588,6 +587,7 @@ bool QGLXContext::makeCurrent(QPlatformSurface *surface)
- glXSwapIntervalEXT(m_display, glxDrawable, interval);
- else if (glXSwapIntervalMESA)
- glXSwapIntervalMESA(interval);
-+ window->setSwapInterval(interval);
- }
- }
-
-diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h
-index be9d3f5dcb..2a88fd6e59 100644
---- a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h
-+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h
-@@ -87,7 +87,6 @@ private:
- GLXContext m_shareContext;
- QSurfaceFormat m_format;
- bool m_isPBufferCurrent;
-- int m_swapInterval;
- bool m_ownsContext;
- GLenum (APIENTRY * m_getGraphicsResetStatus)();
- bool m_lost;
-diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
-index f98cd8a74d..8258cc2dfa 100644
---- a/src/plugins/platforms/xcb/qxcbwindow.h
-+++ b/src/plugins/platforms/xcb/qxcbwindow.h
-@@ -184,6 +184,9 @@ public:
- static void setWindowTitle(const QXcbConnection *conn, xcb_window_t window, const QString &title);
- static QString windowTitle(const QXcbConnection *conn, xcb_window_t window);
-
-+ int swapInterval() const { return m_swapInterval; }
-+ void setSwapInterval(int swapInterval) { m_swapInterval = swapInterval; }
-+
- public Q_SLOTS:
- void updateSyncRequestCounter();
-
-@@ -276,6 +279,7 @@ protected:
- SyncState m_syncState = NoSyncNeeded;
-
- QXcbSyncWindowRequest *m_pendingSyncRequest = nullptr;
-+ int m_swapInterval = -1;
- };
-
- class QXcbForeignWindow : public QXcbWindow
---
-cgit v1.2.1
-
diff --git a/deps/qt5/patches/qtbase-zlib-compression.patch b/deps/qt5/patches/qtbase-zlib-compression.patch
deleted file mode 100644
index a6896a4..0000000
--- a/deps/qt5/patches/qtbase-zlib-compression.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-Taken from: https://code.qt.io/cgit/qt/qtbase.git/patch/?id=cbdc9a77
-
-From cbdc9a7786278c31fdb6eb465f32d0374349c1ef Mon Sep 17 00:00:00 2001
-From: Thiago Macieira <thiago.macieira@intel.com>
-Date: Thu, 20 Jun 2019 09:36:46 -0700
-Subject: RCC: Change the default compression to Zlib
-
-Codebases using QResource::isCompressed() and assuming it is Zlib break
-if zstd is enabled. So change the default back to Zlib until Qt 6.0.
-
-[ChangeLog][Important Behavior Changes] RCC's default compression
-algorithm was changed back to Zlib, as it was in all previous releases
-until 5.13.0. The default will remain Zlib for all Qt 5.x releases but
-will change in Qt 6.0. To activate Zstd compression for your resources,
-either pass the --compress-algo=zstd option to the rcc tool or add the
-XML attribute compression-algorithm="zstd" to the <file> tags in the
-.qrc file.
-
-Task-number: QTBUG-76521
-Change-Id: Ief874765cd7b43798de3fffd15a9f56fd9ad1ad4
-Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
----
- src/tools/rcc/rcc.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/tools/rcc/rcc.cpp b/src/tools/rcc/rcc.cpp
-index 862e574f2d..011a7db810 100644
---- a/src/tools/rcc/rcc.cpp
-+++ b/src/tools/rcc/rcc.cpp
-@@ -58,7 +58,7 @@ enum {
- CONSTANT_COMPRESSTHRESHOLD_DEFAULT = 70
- };
-
--#if QT_CONFIG(zstd)
-+#if QT_CONFIG(zstd) && QT_VERSION >= QT_VERSION_CHECK(6,0,0)
- # define CONSTANT_COMPRESSALGO_DEFAULT RCCResourceLibrary::CompressionAlgorithm::Zstd
- #elif !defined(QT_NO_COMPRESS)
- # define CONSTANT_COMPRESSALGO_DEFAULT RCCResourceLibrary::CompressionAlgorithm::Zlib
---
-cgit v1.2.1
-
diff --git a/deps/qt5/profile.d/qt5.csh b/deps/qt5/profile.d/qt5.csh
deleted file mode 100644
index ec1ecd9..0000000
--- a/deps/qt5/profile.d/qt5.csh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/csh
-# Environment path variables for the Qt package:
-if ( ! $?QT5DIR ) then
- # It's best to use the generic directory to avoid
- # compiling in a version-containing path:
- if ( -d /usr/lib@LIBDIRSUFFIX@/qt5 ) then
- setenv QT5DIR /usr/lib@LIBDIRSUFFIX@/qt5
- else
- # Find the newest Qt directory and set $QT5DIR to that:
- foreach qtd ( /usr/lib@LIBDIRSUFFIX@/qt5-* )
- if ( -d $qtd ) then
- setenv QT5DIR $qtd
- endif
- end
- endif
-endif
-set path = ( $path $QT5DIR/bin )
diff --git a/deps/qt5/profile.d/qt5.sh b/deps/qt5/profile.d/qt5.sh
deleted file mode 100644
index 8ee075e..0000000
--- a/deps/qt5/profile.d/qt5.sh
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-# Environment variables for the Qt package.
-#
-# It's best to use the generic directory to avoid
-# compiling in a version-containing path:
-if [ -d /usr/lib@LIBDIRSUFFIX@/qt5 ]; then
- QT5DIR=/usr/lib@LIBDIRSUFFIX@/qt5
-else
- # Find the newest Qt directory and set $QT5DIR to that:
- for qtd in /usr/lib@LIBDIRSUFFIX@/qt5-* ; do
- if [ -d $qtd ]; then
- QT5DIR=$qtd
- fi
- done
-fi
-PATH="$PATH:$QT5DIR/bin"
-export QT5DIR
diff --git a/deps/qt5/qt5.SlackBuild b/deps/qt5/qt5.SlackBuild
deleted file mode 100755
index 7ce93c3..0000000
--- a/deps/qt5/qt5.SlackBuild
+++ /dev/null
@@ -1,380 +0,0 @@
-#!/bin/sh
-
-# Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# Merged some ideas from Alex Sarmardzic's script for qt4 at SlackBuilds.org
-# ^^ Modified by Robby Workman <rworkman@slackware.com> for QT4 & KDE4
-
-# We're using qt-copy instead of a released qt version, as this git release
-# has at least one bugfix strongly recommended by the kde developers.
-
-# Obtained from:
-# git clone git://gitorious.org/+kde-developers/qt/kde-qt.git
-# git checkout origin/4.5.3-patched
-# git checkout origin/4.6.0-stable-patched
-# git checkout origin/4.6.1-patched
-# git checkout origin/4.7.0-patched
-#
-# Alternate method (we don't use this):
-# wget http://qt.gitorious.org/qt/kde-qt/archive-tarball/4.6.2-patched
-#
-# Modifications 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018,2019 Eric Hameleers, Eindhoven, NL
-# qt 4.7.3, 4.7.4, 4.8.0, 4.8.1, 4.8.2, 4.8.4, are built from original nokia sources.
-#
-# Modifications for qt 5.2.0 2013 by Michael James, AU
-# Modifications for qt 5.2.1 2014 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.3.1 2014 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.4.0 2015 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.4.1 2015 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.5.1 2015,2016 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.6.0 2016 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.6.1 2016 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.7.0 2016 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.7.1 2017 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.0 2017 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.1 2017 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.2 2017 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.3 2017 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.4 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.5 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.9.6 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.11.0 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.11.1 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.11.2 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.11.3 2018 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.12.1 2019 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.12.3 2019 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.13.0 2019 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.13.1 2019 by Eric Hameleers, Eindhoven, NL
-# Modifications for qt 5.13.2 2019 by Eric Hameleers, Eindhoven, NL
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=qt5
-VERSION=${VERSION:-5.13.2}
-BUILD=${BUILD:-2}
-PKGSRC=$(echo $VERSION |cut -d- -f1)
-PKGVER=$(echo $VERSION |tr - _)
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-${PKGVER}-${ARCH}-${BUILD}.txz"
- exit 0
-fi
-
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- SLKLDFLAGS=""
- SLKLDFLAGS="-L/usr/lib64"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "armv7hl" ]; then
- # To prevent "qatomic_armv6.h error: output number 2 not directly addressable"
- # More permanent solution is to patch gcc:
- # http://bazaar.launchpad.net/~linaro-toolchain-dev/gcc-linaro/4.6/revision/106731
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16 -fno-strict-volatile-bitfields"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- SLKLDFLAGS=""
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-${PKGNAM}
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf qt-everywhere-src-$VERSION
-echo "Extracting qt-everywhere-src-$VERSION.tar.xz"
-tar xf $CWD/qt-everywhere-src-$VERSION.tar.xz || exit 1
-cd qt-everywhere-src-$PKGSRC || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# Use -reduce-relocations only on i?86 and x86_64 architextures.
-# https://bugreports.qt-project.org/browse/QTBUG-36129
-if echo $ARCH | grep -q '\(i.86\|x86_64\)' 2>/dev/null; then
- RELOCATIONS="-reduce-relocations"
-else
- RELOCATIONS=""
-fi
-
-# Fix path to mysql header:
-cat $CWD/patches/qt5.mysql.h.diff | patch -p1 --verbose || exit 1
-
-# CMake generates wrong -isystem /usr/include compilations flags with Qt5::Gui
-# and for it breaks KWin compilation with:
-# /usr/include/c++/9.1.0/cstdlib:75:15: fatal error: stdlib.h: No such file or directory
-# See also https://bugzilla.redhat.com/1704474
-cd qtbase
- cat $CWD/patches/qt5.qtbase_cmake_isystem_includes.patch \
- | patch -p1 --verbose || exit 1
-cd - 1>/dev/null
-
-# CVE-2020-0569 (fixed in 5.14.0):
-cd qtbase
- cat $CWD/patches/qt5.cve-2020-0569.patch \
- | patch -p1 --verbose || exit 1
-cd - 1>/dev/null
-
-# CVE-2020-0570 (fixed in 5.14.1):
-cd qtbase
- cat $CWD/patches/qt5.cve-2020-0570.patch \
- | patch -p1 --verbose || exit 1
-cd - 1>/dev/null
-
-if ! pkg-config --exists libpulse 2>/dev/null ; then
- # Forcibly disable pulseaudio in qtwebengine:
- cat $CWD/patches/qt5.pulseaudio.diff | patch -p1 --verbose || exit 1
- # Disable pulseaudio in Qt5:
- PACONF="-no-pulseaudio"
-else
- PACONF=" "
-fi
-
-# Use our custom compiler and linker flags:
-sed -e "s|^\(QMAKE_CFLAGS_RELEASE.*\)|\1 ${SLKCFLAGS}|" \
- -i qtbase/mkspecs/common/gcc-base.conf || exit 1
-sed -e "s|^\(QMAKE_LFLAGS_RELEASE.*\)|\1 ${SLKLDFLAGS}|" \
- -i qtbase/mkspecs/common/g++-unix.conf || exit 1
-
-export CFLAGS="$SLKCFLAGS"
-export CXXFLAGS="$SLKCFLAGS"
-export OPENSOURCE_CXXFLAGS="$SLKCFLAGS"
-export QTDIR="${TMP}/qt-everywhere-src-${PKGSRC}"
-export LD_LIBRARY_PATH="${QTDIR}/qtbase/lib:${QTDIR}/qttools/lib:${LD_LIBRARY_PATH}"
-export QT_PLUGIN_PATH="${QTDIR}/qtbase/plugins"
-./configure -v \
- -confirm-license \
- -opensource \
- -prefix /usr \
- -libdir /usr/lib${LIBDIRSUFFIX} \
- -bindir /usr/lib${LIBDIRSUFFIX}/qt5/bin \
- -sysconfdir /etc/xdg \
- -headerdir /usr/include/qt5 \
- -datadir /usr/share/qt5 \
- -archdatadir /usr/lib${LIBDIRSUFFIX}/qt5 \
- -docdir /usr/doc/qt5-$PKGVER \
- -examplesdir /usr/doc/qt5-$PKGVER/examples \
- -proprietary-codecs \
- -system-libpng \
- -system-libjpeg \
- -system-sqlite \
- -system-zlib \
- -plugin-sql-mysql \
- -plugin-sql-sqlite \
- -accessibility \
- -alsa \
- -dbus \
- -glib \
- -icu \
- -opengl \
- -openssl-linked \
- -optimized-qmake \
- -qpa xcb \
- -qt-harfbuzz \
- -verbose \
- -xcb \
- -nomake examples \
- -nomake tests \
- -no-mimetype-database \
- -no-separate-debug-info \
- -no-strip \
- -no-use-gold-linker \
- -webengine-proprietary-codecs \
- ${PACONF} \
- ${RELOCATIONS} \
- -no-pch \
- # No-precompiled-headers is ccache-friendly.
-
-# Sometimes a failure happens when parallelizing make. Try again if make fails,
-# but make a failure the second time around (single threaded) a fatal error:
-make $NUMJOBS || make || exit 1
-make install INSTALL_ROOT=$PKG || exit 1
-
-# Strip binaries the Slackware way:
-find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
- | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-# Remove rpaths:
-for file in $(find . | xargs file | grep -e "executable" -e "shared object" | grep ELF | cut -f 1 -d : 2> /dev/null) ; do
- if [ ! "$(patchelf --print-rpath $file 2> /dev/null)" = "" ]; then
- patchelf --remove-rpath $file
- fi
-done
-
-# Don't ship .la files:
-rm -f $PKG/usr/lib${LIBDIRSUFFIX}/*.la
-
-# Fix internal linking for Qt5WebEngineCore.pc ,
-# thanks to Larry Hajali's SBo script:
-sed -i \
- -e 's|-Wl,--start-group.* -Wl,--end-group||' \
- -e "s|-L${PWD}/qtwebengine/src/core/api/Release||" \
- $PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/Qt5WebEngineCore.pc
-
-# Fix the path in prl files:
-find "$PKG/usr/lib${LIBDIRSUFFIX}" -type f -name '*.prl' \
- -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d;s/\(QMAKE_PRL_LIBS =\).*/\1/' {} \;
-
-# Fix the qmake path in pri file:
-sed -i "s,${QTDIR}/qtbase,/usr/lib${LIBDIRSUFFIX}/qt5," \
- $PKG/usr/lib${LIBDIRSUFFIX}/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri
-
-# Install symlinks to the Qt5 binaries in the $PATH:
-mkdir -p $PKG/usr/bin
-for FILE in $PKG/usr/lib${LIBDIRSUFFIX}/qt5/bin/* ; do
- ln -s ../lib${LIBDIRSUFFIX}/qt5/bin/$(basename $FILE) $PKG/usr/bin/$(basename $FILE)-qt5
-done
-
-# Set the QT5DIR variable in the environment:
-mkdir -p $PKG/etc/profile.d
-sed -e "s,@LIBDIRSUFFIX@,${LIBDIRSUFFIX},g" $CWD/profile.d/$PKGNAM.sh \
- > $PKG/etc/profile.d/$PKGNAM.sh
-sed -e "s,@LIBDIRSUFFIX@,${LIBDIRSUFFIX},g" $CWD/profile.d/$PKGNAM.csh \
- > $PKG/etc/profile.d/$PKGNAM.csh
-chmod 0755 $PKG/etc/profile.d/*
-
-# Add menu entries for all those hidden but great Qt applications:
-# Qt5 logo:
-mkdir -p $PKG/usr/share/icons/hicolor/48x48/apps
-convert qtdoc/doc/src/images/qt-logo.png -resize 48x48 $PKG/usr/share/icons/hicolor/48x48/apps/qt5-logo.png
-# Assistant icons
-install -p -m644 -D qttools/src/assistant/assistant/images/assistant.png $PKG/usr/share/icons/hicolor/32x32/apps/qt5-assistant.png
-install -p -m644 -D qttools/src/assistant/assistant/images/assistant-128.png $PKG/usr/share/icons/hicolor/128x128/apps/qt5-assistant.png
-# Designer icon
-install -p -m644 -D qttools/src/designer/src/designer/images/designer.png $PKG/usr/share/icons/hicolor/128x128/apps/qt5-designer.png
-# QDbusViewer icons
-install -p -m644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer.png $PKG/usr/share/icons/hicolor/32x32/apps/qt5-qdbusviewer.png
-install -p -m644 qttools/src/qdbus/qdbusviewer/images/qdbusviewer-128.png $PKG/usr/share/icons/hicolor/128x128/apps/qt5-qdbusviewer.png
-# Linguist icons
-for icon in qttools/src/linguist/linguist/images/icons/linguist-*-32.png ; do
- size=$(echo $(basename ${icon}) | cut -d- -f2)
- install -p -m644 -D ${icon} $PKG/usr/share/icons/hicolor/${size}x${size}/apps/qt5-linguist.png
-done
-
-# And the .desktop files too:
-mkdir -p $PKG/usr/share/applications
-cat <<EOF > $PKG/usr/share/applications/qt5-designer.desktop
-[Desktop Entry]
-Name=Qt5 Designer
-GenericName=Interface Designer
-Comment=Design GUIs for Qt5 applications
-Exec=designer-qt5
-Icon=qt5-designer
-MimeType=application/x-designer;
-Terminal=false
-Encoding=UTF-8
-Type=Application
-Categories=Qt;Development;
-EOF
-cat <<EOF > $PKG/usr/share/applications/qt5-assistant.desktop
-[Desktop Entry]
-Name=Qt5 Assistant
-Comment=Shows Qt5 documentation and examples
-Exec=assistant-qt5
-Icon=qt5-assistant
-Terminal=false
-Encoding=UTF-8
-Type=Application
-Categories=Qt;Development;Documentation;
-EOF
-cat <<EOF > $PKG/usr/share/applications/qt5-linguist.desktop
-[Desktop Entry]
-Name=Qt5 Linguist
-Comment=Add translations to Qt5 applications
-Exec=linguist-qt5
-Icon=qt5-linguist
-MimeType=text/vnd.trolltech.linguist;application/x-linguist;
-Terminal=false
-Encoding=UTF-8
-Type=Application
-Categories=Qt;Development;
-EOF
-cat <<EOF > $PKG/usr/share/applications/qt5-qdbusviewer.desktop
-[Desktop Entry]
-Name=Qt5 QDbusViewer
-GenericName=Qt5 D-Bus Debugger
-Comment=Debug D-Bus applications
-Exec=qdbusviewer-qt5
-Icon=qt5-qdbusviewer
-Terminal=false
-Type=Application
-Categories=Qt;Development;Debugger;
-EOF
-
-# Add a documentation directory:
-mkdir -p $PKG/usr/doc/$PKGNAM-$PKGVER
-cp -a \
- README qtbase/{header*,LGPL_EXCEPTION.txt,LICENSE*} \
- $PKG/usr/doc/$PKGNAM-$PKGVER
-if [ -d $PKG/usr/lib${LIBDIRSUFFIX}/qt5/doc/html ]; then
- ( cd $PKG/usr/doc/$PKGNAM-$PKGVER
- ln -sf /usr/lib${LIBDIRSUFFIX}/qt5/doc/html .
- )
-fi
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-cat $CWD/doinst.sh > $PKG/install/doinst.sh
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$PKGVER-$ARCH-$BUILD.txz
-
diff --git a/deps/qt5/slack-desc b/deps/qt5/slack-desc
deleted file mode 100644
index 99abf5c..0000000
--- a/deps/qt5/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-qt5: qt5 (a multi-platform C++ graphical user interface toolkit)
-qt5:
-qt5: Qt is a cross-platform C++ application framework. Qt's primary feature
-qt5: is its rich set of widgets that provide standard GUI functionality.
-qt5:
-qt5: Homepage: http://qt-project.org
-qt5:
-qt5:
-qt5:
-qt5:
-qt5:
diff --git a/deps/sassc/sassc.SlackBuild b/deps/sassc/sassc.SlackBuild
index 42e753c..eb190d9 100755
--- a/deps/sassc/sassc.SlackBuild
+++ b/deps/sassc/sassc.SlackBuild
@@ -92,7 +92,7 @@ CXXFLAGS="$SLKCFLAGS" \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--mandir=/usr/man \
- --docdir=/usr/doc/$PRGNAM-$VERSION \
+ --docdir=/usr/doc/$PKGNAM-$VERSION \
--build=$TARGET || exit 1
make || exit 1
diff --git a/deps/sip/.url b/deps/sip/.url
deleted file mode 100644
index ef7b01f..0000000
--- a/deps/sip/.url
+++ /dev/null
@@ -1,2 +0,0 @@
-https://www.riverbankcomputing.com/static/Downloads/sip/4.19.20/sip-4.19.20.tar.gz
-
diff --git a/deps/sip/patches/PyQt4_sip_regression.patch b/deps/sip/patches/PyQt4_sip_regression.patch
deleted file mode 100644
index e656ff4..0000000
--- a/deps/sip/patches/PyQt4_sip_regression.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-# HG changeset patch
-# User Phil Thompson <phil@riverbankcomputing.com>
-# Date 1550579387 0
-# Node ID 7bd4d19479adc46c40e8d43629aaac871fae6cd7
-# Parent 4ab117a13343cd8d8f5804600936f445fb2d59ef
-Fixed a code generation regression specific to PyQt4.
-
-diff -r 4ab117a13343 -r 7bd4d19479ad sipgen/gencode.c
---- a/sipgen/gencode.c Tue Feb 12 09:27:11 2019 +0000
-+++ b/sipgen/gencode.c Tue Feb 19 12:29:47 2019 +0000
-@@ -295,7 +295,7 @@
- static int emptyIfaceFile(sipSpec *pt, ifaceFileDef *iff);
- static void declareLimitedAPI(int py_debug, moduleDef *mod, FILE *fp);
- static int generatePluginSignalsTable(sipSpec *pt, classDef *cd,
-- const char *pyqt_prefix, FILE *fp);
-+ int pyqt_version, FILE *fp);
- static int generatePyQt5ClassPlugin(sipSpec *pt, classDef *cd, FILE *fp);
- static int generatePyQt4ClassPlugin(sipSpec *pt, classDef *cd, FILE *fp);
- static void generateGlobalFunctionTableEntries(sipSpec *pt, moduleDef *mod,
-@@ -15542,7 +15542,7 @@
- * Generate the PyQt4/5 signals table.
- */
- static int generatePluginSignalsTable(sipSpec *pt, classDef *cd,
-- const char *pyqt_prefix, FILE *fp)
-+ int pyqt_version, FILE *fp)
- {
- int is_signals = FALSE;
-
-@@ -15586,8 +15586,8 @@
- "\n"
- "\n"
- "/* Define this type's signals. */\n"
--"static const %sQtSignal signals_%C[] = {\n"
-- , pyqt_prefix, classFQCName(cd));
-+"static const pyqt%dQtSignal signals_%C[] = {\n"
-+ , pyqt_version, classFQCName(cd));
- }
-
- /*
-@@ -15628,9 +15628,9 @@
-
- if (is_signals)
- prcode(fp,
--" {SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR}\n"
-+" {SIP_NULLPTR, SIP_NULLPTR, SIP_NULLPTR, %s}\n"
- "};\n"
-- );
-+ , (pyqt_version == 5 ? "SIP_NULLPTR" : "0"));
- }
-
- return is_signals;
-@@ -15643,7 +15643,7 @@
- */
- static int generatePyQt5ClassPlugin(sipSpec *pt, classDef *cd, FILE *fp)
- {
-- int is_signals = generatePluginSignalsTable(pt, cd, "pyqt5", fp);
-+ int is_signals = generatePluginSignalsTable(pt, cd, 5, fp);
-
- prcode(fp,
- "\n"
-@@ -15696,7 +15696,7 @@
- */
- static int generatePyQt4ClassPlugin(sipSpec *pt, classDef *cd, FILE *fp)
- {
-- int is_signals = generatePluginSignalsTable(pt, cd, "pyqt4", fp);
-+ int is_signals = generatePluginSignalsTable(pt, cd, 4, fp);
-
- prcode(fp,
- "\n"
-
-
diff --git a/deps/sip/sip.SlackBuild b/deps/sip/sip.SlackBuild
deleted file mode 100755
index 923ac6c..0000000
--- a/deps/sip/sip.SlackBuild
+++ /dev/null
@@ -1,189 +0,0 @@
-#!/bin/sh
-
-# Copyright 2008 Aleksandar Samardzic <asamardzic@gmail.com>
-# Copyright 2008, 2009, 2010, 2011, 2017, 2018, 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 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.
-
-# Modified by Robby Workman <rworkman@slackware.com>
-# Modified by Eric Hameleers <alien@slackware.com>
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=sip
-VERSION=${VERSION:-4.19.20}
-BUILD=${BUILD:-2}
-
-NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$(echo $VERSION | tr - _)-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-if [ "$ARCH" = "i586" ]; then
- SLKCFLAGS="-O2 -march=i586 -mtune=i686"
-elif [ "$ARCH" = "i686" ]; then
- SLKCFLAGS="-O2 -march=i686 -mtune=i686"
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
-elif [ "$ARCH" = "armv7hl" ]; then
- SLKCFLAGS="-O2 -march=armv7-a -mfpu=vfpv3-d16"
-else
- SLKCFLAGS="-O2"
-fi
-
-PYTHON2VER=$(python2 -V 2>&1 | cut -f 2 -d' ' | cut -f 1-2 -d. 2>/dev/null)
-PYTHON2LIB=$( python2 -c 'from distutils.sysconfig import get_python_lib; print get_python_lib()' 2>/dev/null )
-
-PYTHON3VER=$(python3 -V 2>&1 | cut -f 2 -d' ' | cut -f 1-2 -d. 2>/dev/null)
-PYTHON3LIB=$( python3 -c 'from distutils.sysconfig import get_python_lib; print(get_python_lib())' 2>/dev/null )
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-rm -rf $PKG
-mkdir -p $TMP $PKG $OUTPUT
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.?z || exit 1
-cd $PKGNAM-$VERSION || exit 1
-
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \+ -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \+
-
-python2 configure.py \
- -b "/usr/bin" \
- -d "$PYTHON2LIB" \
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" \
- || exit 1
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Add the PyQt4 private sip module:
-make clean
-python2 configure.py \
- --sip-module PyQt4.sip \
- --no-tools \
- -b "/usr/bin" \
- -d "$PYTHON2LIB" \
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" \
- || exit 1
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Add the PyQt5 private sip module:
-make clean
-python2 configure.py \
- --sip-module PyQt5.sip \
- --no-tools \
- -b "/usr/bin" \
- -d "$PYTHON2LIB" \
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" \
- || exit 1
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Rename to avoid a clash:
-mv $PKG/usr/bin/sip $PKG/usr/bin/sip2
-
-make clean
-
-python3 configure.py \
- -b "/usr/bin" \
- -d "$PYTHON3LIB" \
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" || exit 1
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Add the PyQt4 private sip module:
-make clean
-python3 configure.py \
- --sip-module PyQt4.sip \
- --no-tools \
- -b "/usr/bin" \
- -d "$PYTHON3LIB" \
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" || exit 1
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Add the PyQt5 private sip module:
-make clean
-python3 configure.py \
- --sip-module PyQt5.sip \
- --no-tools \
- -b "/usr/bin" \
- -d "$PYTHON3LIB" \
- CFLAGS="$SLKCFLAGS" \
- CXXFLAGS="$SLKCFLAGS" || exit 1
-make $NUMJOBS || make || exit 1
-make install DESTDIR=$PKG || exit 1
-
-# Rename to avoid a clash:
-mv $PKG/usr/bin/sip $PKG/usr/bin/sip3
-
-# Create a symbolic link 'sip' pointing to the sip3 binary:
-ln -s sip3 $PKG/usr/bin/sip
-
-find $PKG | xargs file | grep -e "executable" -e "shared object" \
- | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
-
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- LICENSE* COPYING* ChangeLog NEWS README TODO doc/* \
- $PKG/usr/doc/$PKGNAM-$VERSION
-chown -R root:root $PKG/usr/doc
-
-# If there's a ChangeLog, installing at least part of the recent history
-# is useful, but don't let it get totally out of control:
-if [ -r ChangeLog ]; then
- DOCSDIR=$(echo $PKG/usr/doc/${PKGNAM}-$VERSION)
- cat ChangeLog | head -n 1000 > $DOCSDIR/ChangeLog
- touch -r ChangeLog $DOCSDIR/ChangeLog
-fi
-
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$(echo $VERSION |tr - _)-$ARCH-$BUILD.txz
-
diff --git a/deps/sip/slack-desc b/deps/sip/slack-desc
deleted file mode 100644
index 69e52db..0000000
--- a/deps/sip/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|'
-# on the right side marks the last column you can put a character in. You must
-# make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-sip: sip (a tool for generating Python bindings)
-sip:
-sip: SIP is a tool that makes it very easy to create Python bindings for
-sip: C and C++ libraries. It was originally developed to create PyQt,
-sip: the Python bindings for the Qt toolkit, but can be used to create
-sip: bindings for any C or C++ library.
-sip:
-sip: Homepage: http://www.riverbankcomputing.co.uk/software/sip/
-sip:
-sip:
-sip:
diff --git a/deps/speech-dispatcher/speech-dispatcher.SlackBuild b/deps/speech-dispatcher/speech-dispatcher.SlackBuild
index a1c9592..21b5b13 100755
--- a/deps/speech-dispatcher/speech-dispatcher.SlackBuild
+++ b/deps/speech-dispatcher/speech-dispatcher.SlackBuild
@@ -1,7 +1,7 @@
#!/bin/sh
# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
+# Copyright 2019, 2020 Eric Hameleers, Eindhoven, NL
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -26,7 +26,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PKGNAM=speech-dispatcher
VERSION=${VERSION:-0.8.8}
-BUILD=${BUILD:-3}
+BUILD=${BUILD:-5}
TMP=${TMP:-/tmp}
PKG=$TMP/package-$PKGNAM
@@ -95,19 +95,38 @@ CXXFLAGS="$SLKCFLAGS" \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
+ --infodir=/usr/info \
--disable-static \
+ --without-flite \
--build=$TARGET || exit 1
- #--without-flite \
make || exit 1
make install DESTDIR=$PKG || exit 1
+# Don't ship .la files:
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
+
# Add documentation:
mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
cp -a \
ANNOUNCE AUTHORS BUGS COPYING* README* TODO \
$PKG/usr/doc/$PKGNAM-$VERSION
+# Compress info pages and remove the package's dir file:
+if [ -d $PKG/usr/info ]; then
+ rm -f $PKG/usr/info/dir
+ gzip -9f $PKG/usr/info/*.info*
+fi
+
+# Add this to the doinst.sh:
+mkdir -p $PKG/install
+cat <<EOT >> $PKG/install/doinst.sh
+# Install info files:
+for INFOFILE in usr/info/*.info.gz ; do
+ chroot . install-info /${INFOFILE} /usr/info/dir 2> /dev/null
+done
+EOT
+
# Strip binaries (if any):
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
diff --git a/deps/updates.SlackBuild b/deps/updates.SlackBuild
deleted file mode 100755
index 83375c9..0000000
--- a/deps/updates.SlackBuild
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/sh
-
-# Build (and install) all KDE dependencies
-# Modified from the KDE Slackware script by Eric Hameleers <alien@slackware.com>
-
-# Set initial variables:
-CWD=$(pwd)
-TMP=${TMP:-/tmp}
-
-# Set the config option variables if they are not already set:
-[ -r ./alldeps.options ] && . ./alldeps.options
-
-# This avoids compiling a version number into KDE's .la files:
-QTDIR=/usr/lib${LIBDIRSUFFIX}/qt ; export QTDIR
-
-ALLDEPS=" \
- extra-cmake-modules \
- md4c \
- sni-qt \
- SDL_sound \
- OpenAL \
- libxkbcommon \
- wayland \
- brotli \
- woff2 \
- hyphen \
- qt5 \
- qt5-webkit \
- qca-qt5 \
- libdbusmenu-qt5 \
- phonon \
- phonon-gstreamer \
- phonon-qt4 \
- phonon-qt4-gstreamer \
- python-enum34 \
- pyxdg \
- pcaudiolib \
- espeak-ng \
- dotconf \
- flite \
- speech-dispatcher \
- sip \
- PyQt \
- PyQt5 \
- QScintilla \
- polkit-qt5-1 \
- grantlee \
- grantlee-qt4 \
- poppler \
- libdbusmenu-gtk \
- libindicator \
- libappindicator \
- cfitsio \
- libdmtx \
- qrencode \
- hack-font-ttf \
- noto-font-ttf \
- noto-cjk-font-ttf \
- gpgme \
- lensfun \
- opencv \
- dvdauthor \
- vid.stab \
- frei0r-plugins \
- mlt \
- cracklib \
- libpwquality \
- accountsservice \
- libburn \
- qtav \
- ddcutil \
- id3lib \
- cryptopp \
- cryfs \
- python3-random2 \
- perl-path-tiny \
- perl-template-toolkit \
- freecell-solver \
- drumstick \
- libsass \
- sassc \
- rttr \
- quazip \
- "
- # Only needed when adding support for Wayland:
- #elogind \
-
-# Allow for specification of individual packages to be built:
-if [ -z "$1" ]; then
- MODQUEUE=$ALLDEPS
-else
- MODQUEUE=$*
-fi
-
-for module in \
- $MODQUEUE ;
-do
- cd $module
- ./$module.SlackBuild
- if [ $? = 0 ]; then
- # Yes, I will build with the fresh packages installed:
- upgradepkg --install-new --reinstall ${TMP}/${module}-*.txz
- # Keep MIME database current:
- /usr/bin/update-mime-database /usr/share/mime 1> /dev/null 2> /dev/null &
- rm -rf ${TMP}/package-${module} ${TMP}/${module}-$VERSION
- else
- echo "${module} failed to build."
- exit 1
- fi
- cd - ;
-done
-
diff --git a/deps/util-linux/adjtimex_1.29-2.2.diff b/deps/util-linux/adjtimex_1.29-2.2.diff
new file mode 100644
index 0000000..62ac1db
--- /dev/null
+++ b/deps/util-linux/adjtimex_1.29-2.2.diff
@@ -0,0 +1,6564 @@
+--- adjtimex-1.29.orig/adjtimex.lsm
++++ adjtimex-1.29/adjtimex.lsm
+@@ -1,7 +1,7 @@
+ Begin4
+ Title: adjtimex - display or set the kernel time variables
+ Version: 1.29
+-Entered-date: 2010-04-16
++Entered-date: 2010-05-26
+ Description: Display or set the kernel time variables.
+ This program gives you raw access to the kernel time variables. For
+ a machine connected to the Internet, or equipped with a precision
+--- adjtimex-1.29.orig/config.h
++++ adjtimex-1.29/config.h
+@@ -0,0 +1,80 @@
++/* config.h. Generated from config.h.in by configure. */
++/* config.h.in. Generated from configure.in by autoheader. */
++
++/* Define to 1 if you have the `gettimeofday' function. */
++#define HAVE_GETTIMEOFDAY 1
++
++/* Define to 1 if you have the <inttypes.h> header file. */
++#define HAVE_INTTYPES_H 1
++
++/* Define to 1 if you have the <linux/rtc.h> header file. */
++#define HAVE_LINUX_RTC_H 1
++
++/* Define to 1 if you have the <memory.h> header file. */
++#define HAVE_MEMORY_H 1
++
++/* Define to 1 if you have the `mktime' function. */
++#define HAVE_MKTIME 1
++
++/* Define to 1 if you have the `putenv' function. */
++#define HAVE_PUTENV 1
++
++/* Define to 1 if you have the `select' function. */
++#define HAVE_SELECT 1
++
++/* Define to 1 if you have the <stdint.h> header file. */
++#define HAVE_STDINT_H 1
++
++/* Define to 1 if you have the <stdlib.h> header file. */
++#define HAVE_STDLIB_H 1
++
++/* Define to 1 if you have the <strings.h> header file. */
++#define HAVE_STRINGS_H 1
++
++/* Define to 1 if you have the <string.h> header file. */
++#define HAVE_STRING_H 1
++
++/* Define to 1 if you have the <sys/stat.h> header file. */
++#define HAVE_SYS_STAT_H 1
++
++/* Define to 1 if you have the <sys/time.h> header file. */
++#define HAVE_SYS_TIME_H 1
++
++/* Define to 1 if you have the <sys/types.h> header file. */
++#define HAVE_SYS_TYPES_H 1
++
++/* Define to 1 if you have the <unistd.h> header file. */
++#define HAVE_UNISTD_H 1
++
++/* Define to the address where bug reports for this package should be sent. */
++#define PACKAGE_BUGREPORT ""
++
++/* Define to the full name of this package. */
++#define PACKAGE_NAME ""
++
++/* Define to the full name and version of this package. */
++#define PACKAGE_STRING ""
++
++/* Define to the one symbol short name of this package. */
++#define PACKAGE_TARNAME ""
++
++/* Define to the version of this package. */
++#define PACKAGE_VERSION ""
++
++/* Define to 1 if you have the ANSI C header files. */
++#define STDC_HEADERS 1
++
++/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
++#define TIME_WITH_SYS_TIME 1
++
++/* Define to 1 if your <sys/time.h> declares `struct tm'. */
++/* #undef TM_IN_SYS_TIME */
++
++/* Define to empty if `const' does not conform to ANSI C. */
++/* #undef const */
++
++/* Define to `__inline__' or `__inline' if that's what the C compiler
++ calls it, or to nothing if 'inline' is not supported under any name. */
++#ifndef __cplusplus
++/* #undef inline */
++#endif
+--- adjtimex-1.29.orig/config.sub
++++ adjtimex-1.29/config.sub
+@@ -0,0 +1,1760 @@
++#! /bin/sh
++# Configuration validation subroutine script.
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
++# 2011 Free Software Foundation, Inc.
++
++timestamp='2011-03-23'
++
++# This file is (in principle) common to ALL GNU software.
++# The presence of a machine in this file suggests that SOME GNU software
++# can handle that machine. It does not imply ALL GNU software can.
++#
++# This file 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) any later version.
++#
++# This program 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 program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
++# 02110-1301, USA.
++#
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++
++# Please send patches to <config-patches@gnu.org>. Submit a context
++# diff and a properly formatted GNU ChangeLog entry.
++#
++# Configuration subroutine to validate and canonicalize a configuration type.
++# Supply the specified configuration type as an argument.
++# If it is invalid, we print an error message on stderr and exit with code 1.
++# Otherwise, we print the canonical config type on stdout and succeed.
++
++# You can get the latest version of this script from:
++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
++
++# This file is supposed to be the same for all GNU packages
++# and recognize all the CPU types, system types and aliases
++# that are meaningful with *any* GNU software.
++# Each package is responsible for reporting which valid configurations
++# it does not support. The user should be able to distinguish
++# a failure to support a valid configuration from a meaningless
++# configuration.
++
++# The goal of this file is to map all the various variations of a given
++# machine specification into a single specification in the form:
++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
++# or in some cases, the newer four-part form:
++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
++# It is wrong to echo any other type of specification.
++
++me=`echo "$0" | sed -e 's,.*/,,'`
++
++usage="\
++Usage: $0 [OPTION] CPU-MFR-OPSYS
++ $0 [OPTION] ALIAS
++
++Canonicalize a configuration name.
++
++Operation modes:
++ -h, --help print this help, then exit
++ -t, --time-stamp print date of last modification, then exit
++ -v, --version print version number, then exit
++
++Report bugs and patches to <config-patches@gnu.org>."
++
++version="\
++GNU config.sub ($timestamp)
++
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
++Software Foundation, Inc.
++
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++
++help="
++Try \`$me --help' for more information."
++
++# Parse command line
++while test $# -gt 0 ; do
++ case $1 in
++ --time-stamp | --time* | -t )
++ echo "$timestamp" ; exit ;;
++ --version | -v )
++ echo "$version" ; exit ;;
++ --help | --h* | -h )
++ echo "$usage"; exit ;;
++ -- ) # Stop option processing
++ shift; break ;;
++ - ) # Use stdin as input.
++ break ;;
++ -* )
++ echo "$me: invalid option $1$help"
++ exit 1 ;;
++
++ *local*)
++ # First pass through any local machine types.
++ echo $1
++ exit ;;
++
++ * )
++ break ;;
++ esac
++done
++
++case $# in
++ 0) echo "$me: missing argument$help" >&2
++ exit 1;;
++ 1) ;;
++ *) echo "$me: too many arguments$help" >&2
++ exit 1;;
++esac
++
++# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
++# Here we must recognize all the valid KERNEL-OS combinations.
++maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
++case $maybe_os in
++ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
++ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
++ knetbsd*-gnu* | netbsd*-gnu* | \
++ kopensolaris*-gnu* | \
++ storm-chaos* | os2-emx* | rtmk-nova*)
++ os=-$maybe_os
++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
++ ;;
++ *)
++ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
++ if [ $basic_machine != $1 ]
++ then os=`echo $1 | sed 's/.*-/-/'`
++ else os=; fi
++ ;;
++esac
++
++### Let's recognize common machines as not being operating systems so
++### that things like config.sub decstation-3100 work. We also
++### recognize some manufacturers as not being operating systems, so we
++### can provide default operating systems below.
++case $os in
++ -sun*os*)
++ # Prevent following clause from handling this invalid input.
++ ;;
++ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
++ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
++ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
++ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
++ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
++ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
++ -apple | -axis | -knuth | -cray | -microblaze)
++ os=
++ basic_machine=$1
++ ;;
++ -bluegene*)
++ os=-cnk
++ ;;
++ -sim | -cisco | -oki | -wec | -winbond)
++ os=
++ basic_machine=$1
++ ;;
++ -scout)
++ ;;
++ -wrs)
++ os=-vxworks
++ basic_machine=$1
++ ;;
++ -chorusos*)
++ os=-chorusos
++ basic_machine=$1
++ ;;
++ -chorusrdb)
++ os=-chorusrdb
++ basic_machine=$1
++ ;;
++ -hiux*)
++ os=-hiuxwe2
++ ;;
++ -sco6)
++ os=-sco5v6
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco5)
++ os=-sco3.2v5
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco4)
++ os=-sco3.2v4
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco3.2.[4-9]*)
++ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco3.2v[4-9]*)
++ # Don't forget version if it is 3.2v4 or newer.
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco5v6*)
++ # Don't forget version if it is 3.2v4 or newer.
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco*)
++ os=-sco3.2v2
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -udk*)
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -isc)
++ os=-isc2.2
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -clix*)
++ basic_machine=clipper-intergraph
++ ;;
++ -isc*)
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -lynx*)
++ os=-lynxos
++ ;;
++ -ptx*)
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
++ ;;
++ -windowsnt*)
++ os=`echo $os | sed -e 's/windowsnt/winnt/'`
++ ;;
++ -psos*)
++ os=-psos
++ ;;
++ -mint | -mint[0-9]*)
++ basic_machine=m68k-atari
++ os=-mint
++ ;;
++esac
++
++# Decode aliases for certain CPU-COMPANY combinations.
++case $basic_machine in
++ # Recognize the basic CPU types without company name.
++ # Some are omitted here because they have special meanings below.
++ 1750a | 580 \
++ | a29k \
++ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
++ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
++ | am33_2.0 \
++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
++ | bfin \
++ | c4x | clipper \
++ | d10v | d30v | dlx | dsp16xx \
++ | fido | fr30 | frv \
++ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++ | i370 | i860 | i960 | ia64 \
++ | ip2k | iq2000 \
++ | lm32 \
++ | m32c | m32r | m32rle | m68000 | m68k | m88k \
++ | maxq | mb | microblaze | mcore | mep | metag \
++ | mips | mipsbe | mipseb | mipsel | mipsle \
++ | mips16 \
++ | mips64 | mips64el \
++ | mips64octeon | mips64octeonel \
++ | mips64orion | mips64orionel \
++ | mips64r5900 | mips64r5900el \
++ | mips64vr | mips64vrel \
++ | mips64vr4100 | mips64vr4100el \
++ | mips64vr4300 | mips64vr4300el \
++ | mips64vr5000 | mips64vr5000el \
++ | mips64vr5900 | mips64vr5900el \
++ | mipsisa32 | mipsisa32el \
++ | mipsisa32r2 | mipsisa32r2el \
++ | mipsisa64 | mipsisa64el \
++ | mipsisa64r2 | mipsisa64r2el \
++ | mipsisa64sb1 | mipsisa64sb1el \
++ | mipsisa64sr71k | mipsisa64sr71kel \
++ | mipstx39 | mipstx39el \
++ | mn10200 | mn10300 \
++ | moxie \
++ | mt \
++ | msp430 \
++ | nds32 | nds32le | nds32be \
++ | nios | nios2 \
++ | ns16k | ns32k \
++ | open8 \
++ | or32 \
++ | pdp10 | pdp11 | pj | pjl \
++ | powerpc | powerpc64 | powerpc64le | powerpcle \
++ | pyramid \
++ | rx \
++ | score \
++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
++ | sh64 | sh64le \
++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
++ | spu \
++ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
++ | ubicom32 \
++ | v850 | v850e \
++ | we32k \
++ | x86 | xc16x | xstormy16 | xtensa \
++ | z8k | z80)
++ basic_machine=$basic_machine-unknown
++ ;;
++ c54x)
++ basic_machine=tic54x-unknown
++ ;;
++ c55x)
++ basic_machine=tic55x-unknown
++ ;;
++ c6x)
++ basic_machine=tic6x-unknown
++ ;;
++ m6811 | m68hc11 | m6812 | m68hc12 | picochip)
++ # Motorola 68HC11/12.
++ basic_machine=$basic_machine-unknown
++ os=-none
++ ;;
++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
++ ;;
++ ms1)
++ basic_machine=mt-unknown
++ ;;
++
++ strongarm | thumb | xscale)
++ basic_machine=arm-unknown
++ ;;
++
++ xscaleeb)
++ basic_machine=armeb-unknown
++ ;;
++
++ xscaleel)
++ basic_machine=armel-unknown
++ ;;
++
++ # We use `pc' rather than `unknown'
++ # because (1) that's what they normally are, and
++ # (2) the word "unknown" tends to confuse beginning users.
++ i*86 | x86_64)
++ basic_machine=$basic_machine-pc
++ ;;
++ # Object if more than one company name word.
++ *-*-*)
++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
++ exit 1
++ ;;
++ # Recognize the basic CPU types with company name.
++ 580-* \
++ | a29k-* \
++ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
++ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
++ | avr-* | avr32-* \
++ | bfin-* | bs2000-* \
++ | c[123]* | c30-* | [cjt]90-* | c4x-* \
++ | clipper-* | craynv-* | cydra-* \
++ | d10v-* | d30v-* | dlx-* \
++ | elxsi-* \
++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
++ | h8300-* | h8500-* \
++ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
++ | i*86-* | i860-* | i960-* | ia64-* \
++ | ip2k-* | iq2000-* \
++ | lm32-* \
++ | m32c-* | m32r-* | m32rle-* \
++ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
++ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
++ | mips16-* \
++ | mips64-* | mips64el-* \
++ | mips64octeon-* | mips64octeonel-* \
++ | mips64orion-* | mips64orionel-* \
++ | mips64r5900-* | mips64r5900el-* \
++ | mips64vr-* | mips64vrel-* \
++ | mips64vr4100-* | mips64vr4100el-* \
++ | mips64vr4300-* | mips64vr4300el-* \
++ | mips64vr5000-* | mips64vr5000el-* \
++ | mips64vr5900-* | mips64vr5900el-* \
++ | mipsisa32-* | mipsisa32el-* \
++ | mipsisa32r2-* | mipsisa32r2el-* \
++ | mipsisa64-* | mipsisa64el-* \
++ | mipsisa64r2-* | mipsisa64r2el-* \
++ | mipsisa64sb1-* | mipsisa64sb1el-* \
++ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++ | mipstx39-* | mipstx39el-* \
++ | mmix-* \
++ | mt-* \
++ | msp430-* \
++ | nds32-* | nds32le-* | nds32be-* \
++ | nios-* | nios2-* \
++ | none-* | np1-* | ns16k-* | ns32k-* \
++ | open8-* \
++ | orion-* \
++ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
++ | pyramid-* \
++ | romp-* | rs6000-* | rx-* \
++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
++ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
++ | sparclite-* \
++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
++ | tahoe-* \
++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
++ | tile-* | tilegx-* \
++ | tron-* \
++ | ubicom32-* \
++ | v850-* | v850e-* | vax-* \
++ | we32k-* \
++ | x86-* | x86_64-* | xc16x-* | xps100-* \
++ | xstormy16-* | xtensa*-* \
++ | ymp-* \
++ | z8k-* | z80-*)
++ ;;
++ # Recognize the basic CPU types without company name, with glob match.
++ xtensa*)
++ basic_machine=$basic_machine-unknown
++ ;;
++ # Recognize the various machine names and aliases which stand
++ # for a CPU type and a company and sometimes even an OS.
++ 386bsd)
++ basic_machine=i386-unknown
++ os=-bsd
++ ;;
++ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
++ basic_machine=m68000-att
++ ;;
++ 3b*)
++ basic_machine=we32k-att
++ ;;
++ a29khif)
++ basic_machine=a29k-amd
++ os=-udi
++ ;;
++ abacus)
++ basic_machine=abacus-unknown
++ ;;
++ adobe68k)
++ basic_machine=m68010-adobe
++ os=-scout
++ ;;
++ alliant | fx80)
++ basic_machine=fx80-alliant
++ ;;
++ altos | altos3068)
++ basic_machine=m68k-altos
++ ;;
++ am29k)
++ basic_machine=a29k-none
++ os=-bsd
++ ;;
++ amd64)
++ basic_machine=x86_64-pc
++ ;;
++ amd64-*)
++ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ amdahl)
++ basic_machine=580-amdahl
++ os=-sysv
++ ;;
++ amiga | amiga-*)
++ basic_machine=m68k-unknown
++ ;;
++ amigaos | amigados)
++ basic_machine=m68k-unknown
++ os=-amigaos
++ ;;
++ amigaunix | amix)
++ basic_machine=m68k-unknown
++ os=-sysv4
++ ;;
++ apollo68)
++ basic_machine=m68k-apollo
++ os=-sysv
++ ;;
++ apollo68bsd)
++ basic_machine=m68k-apollo
++ os=-bsd
++ ;;
++ aros)
++ basic_machine=i386-pc
++ os=-aros
++ ;;
++ aux)
++ basic_machine=m68k-apple
++ os=-aux
++ ;;
++ balance)
++ basic_machine=ns32k-sequent
++ os=-dynix
++ ;;
++ blackfin)
++ basic_machine=bfin-unknown
++ os=-linux
++ ;;
++ blackfin-*)
++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ bluegene*)
++ basic_machine=powerpc-ibm
++ os=-cnk
++ ;;
++ c54x-*)
++ basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c55x-*)
++ basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c6x-*)
++ basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ c90)
++ basic_machine=c90-cray
++ os=-unicos
++ ;;
++ cegcc)
++ basic_machine=arm-unknown
++ os=-cegcc
++ ;;
++ convex-c1)
++ basic_machine=c1-convex
++ os=-bsd
++ ;;
++ convex-c2)
++ basic_machine=c2-convex
++ os=-bsd
++ ;;
++ convex-c32)
++ basic_machine=c32-convex
++ os=-bsd
++ ;;
++ convex-c34)
++ basic_machine=c34-convex
++ os=-bsd
++ ;;
++ convex-c38)
++ basic_machine=c38-convex
++ os=-bsd
++ ;;
++ cray | j90)
++ basic_machine=j90-cray
++ os=-unicos
++ ;;
++ craynv)
++ basic_machine=craynv-cray
++ os=-unicosmp
++ ;;
++ cr16 | cr16-*)
++ basic_machine=cr16-unknown
++ os=-elf
++ ;;
++ crds | unos)
++ basic_machine=m68k-crds
++ ;;
++ crisv32 | crisv32-* | etraxfs*)
++ basic_machine=crisv32-axis
++ ;;
++ cris | cris-* | etrax*)
++ basic_machine=cris-axis
++ ;;
++ crx)
++ basic_machine=crx-unknown
++ os=-elf
++ ;;
++ da30 | da30-*)
++ basic_machine=m68k-da30
++ ;;
++ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
++ basic_machine=mips-dec
++ ;;
++ decsystem10* | dec10*)
++ basic_machine=pdp10-dec
++ os=-tops10
++ ;;
++ decsystem20* | dec20*)
++ basic_machine=pdp10-dec
++ os=-tops20
++ ;;
++ delta | 3300 | motorola-3300 | motorola-delta \
++ | 3300-motorola | delta-motorola)
++ basic_machine=m68k-motorola
++ ;;
++ delta88)
++ basic_machine=m88k-motorola
++ os=-sysv3
++ ;;
++ dicos)
++ basic_machine=i686-pc
++ os=-dicos
++ ;;
++ djgpp)
++ basic_machine=i586-pc
++ os=-msdosdjgpp
++ ;;
++ dpx20 | dpx20-*)
++ basic_machine=rs6000-bull
++ os=-bosx
++ ;;
++ dpx2* | dpx2*-bull)
++ basic_machine=m68k-bull
++ os=-sysv3
++ ;;
++ ebmon29k)
++ basic_machine=a29k-amd
++ os=-ebmon
++ ;;
++ elxsi)
++ basic_machine=elxsi-elxsi
++ os=-bsd
++ ;;
++ encore | umax | mmax)
++ basic_machine=ns32k-encore
++ ;;
++ es1800 | OSE68k | ose68k | ose | OSE)
++ basic_machine=m68k-ericsson
++ os=-ose
++ ;;
++ fx2800)
++ basic_machine=i860-alliant
++ ;;
++ genix)
++ basic_machine=ns32k-ns
++ ;;
++ gmicro)
++ basic_machine=tron-gmicro
++ os=-sysv
++ ;;
++ go32)
++ basic_machine=i386-pc
++ os=-go32
++ ;;
++ h3050r* | hiux*)
++ basic_machine=hppa1.1-hitachi
++ os=-hiuxwe2
++ ;;
++ h8300hms)
++ basic_machine=h8300-hitachi
++ os=-hms
++ ;;
++ h8300xray)
++ basic_machine=h8300-hitachi
++ os=-xray
++ ;;
++ h8500hms)
++ basic_machine=h8500-hitachi
++ os=-hms
++ ;;
++ harris)
++ basic_machine=m88k-harris
++ os=-sysv3
++ ;;
++ hp300-*)
++ basic_machine=m68k-hp
++ ;;
++ hp300bsd)
++ basic_machine=m68k-hp
++ os=-bsd
++ ;;
++ hp300hpux)
++ basic_machine=m68k-hp
++ os=-hpux
++ ;;
++ hp3k9[0-9][0-9] | hp9[0-9][0-9])
++ basic_machine=hppa1.0-hp
++ ;;
++ hp9k2[0-9][0-9] | hp9k31[0-9])
++ basic_machine=m68000-hp
++ ;;
++ hp9k3[2-9][0-9])
++ basic_machine=m68k-hp
++ ;;
++ hp9k6[0-9][0-9] | hp6[0-9][0-9])
++ basic_machine=hppa1.0-hp
++ ;;
++ hp9k7[0-79][0-9] | hp7[0-79][0-9])
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k78[0-9] | hp78[0-9])
++ # FIXME: really hppa2.0-hp
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
++ # FIXME: really hppa2.0-hp
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k8[0-9][13679] | hp8[0-9][13679])
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k8[0-9][0-9] | hp8[0-9][0-9])
++ basic_machine=hppa1.0-hp
++ ;;
++ hppa-next)
++ os=-nextstep3
++ ;;
++ hppaosf)
++ basic_machine=hppa1.1-hp
++ os=-osf
++ ;;
++ hppro)
++ basic_machine=hppa1.1-hp
++ os=-proelf
++ ;;
++ i370-ibm* | ibm*)
++ basic_machine=i370-ibm
++ ;;
++# I'm not sure what "Sysv32" means. Should this be sysv3.2?
++ i*86v32)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-sysv32
++ ;;
++ i*86v4*)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-sysv4
++ ;;
++ i*86v)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-sysv
++ ;;
++ i*86sol2)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-solaris2
++ ;;
++ i386mach)
++ basic_machine=i386-mach
++ os=-mach
++ ;;
++ i386-vsta | vsta)
++ basic_machine=i386-unknown
++ os=-vsta
++ ;;
++ iris | iris4d)
++ basic_machine=mips-sgi
++ case $os in
++ -irix*)
++ ;;
++ *)
++ os=-irix4
++ ;;
++ esac
++ ;;
++ isi68 | isi)
++ basic_machine=m68k-isi
++ os=-sysv
++ ;;
++ m68knommu)
++ basic_machine=m68k-unknown
++ os=-linux
++ ;;
++ m68knommu-*)
++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ m88k-omron*)
++ basic_machine=m88k-omron
++ ;;
++ magnum | m3230)
++ basic_machine=mips-mips
++ os=-sysv
++ ;;
++ merlin)
++ basic_machine=ns32k-utek
++ os=-sysv
++ ;;
++ microblaze)
++ basic_machine=microblaze-xilinx
++ ;;
++ mingw32)
++ basic_machine=i386-pc
++ os=-mingw32
++ ;;
++ mingw32ce)
++ basic_machine=arm-unknown
++ os=-mingw32ce
++ ;;
++ miniframe)
++ basic_machine=m68000-convergent
++ ;;
++ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
++ basic_machine=m68k-atari
++ os=-mint
++ ;;
++ mips3*-*)
++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
++ ;;
++ mips3*)
++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
++ ;;
++ monitor)
++ basic_machine=m68k-rom68k
++ os=-coff
++ ;;
++ morphos)
++ basic_machine=powerpc-unknown
++ os=-morphos
++ ;;
++ msdos)
++ basic_machine=i386-pc
++ os=-msdos
++ ;;
++ ms1-*)
++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
++ ;;
++ mvs)
++ basic_machine=i370-ibm
++ os=-mvs
++ ;;
++ ncr3000)
++ basic_machine=i486-ncr
++ os=-sysv4
++ ;;
++ netbsd386)
++ basic_machine=i386-unknown
++ os=-netbsd
++ ;;
++ netwinder)
++ basic_machine=armv4l-rebel
++ os=-linux
++ ;;
++ news | news700 | news800 | news900)
++ basic_machine=m68k-sony
++ os=-newsos
++ ;;
++ news1000)
++ basic_machine=m68030-sony
++ os=-newsos
++ ;;
++ news-3600 | risc-news)
++ basic_machine=mips-sony
++ os=-newsos
++ ;;
++ necv70)
++ basic_machine=v70-nec
++ os=-sysv
++ ;;
++ next | m*-next )
++ basic_machine=m68k-next
++ case $os in
++ -nextstep* )
++ ;;
++ -ns2*)
++ os=-nextstep2
++ ;;
++ *)
++ os=-nextstep3
++ ;;
++ esac
++ ;;
++ nh3000)
++ basic_machine=m68k-harris
++ os=-cxux
++ ;;
++ nh[45]000)
++ basic_machine=m88k-harris
++ os=-cxux
++ ;;
++ nindy960)
++ basic_machine=i960-intel
++ os=-nindy
++ ;;
++ mon960)
++ basic_machine=i960-intel
++ os=-mon960
++ ;;
++ nonstopux)
++ basic_machine=mips-compaq
++ os=-nonstopux
++ ;;
++ np1)
++ basic_machine=np1-gould
++ ;;
++ neo-tandem)
++ basic_machine=neo-tandem
++ ;;
++ nse-tandem)
++ basic_machine=nse-tandem
++ ;;
++ nsr-tandem)
++ basic_machine=nsr-tandem
++ ;;
++ op50n-* | op60c-*)
++ basic_machine=hppa1.1-oki
++ os=-proelf
++ ;;
++ openrisc | openrisc-*)
++ basic_machine=or32-unknown
++ ;;
++ os400)
++ basic_machine=powerpc-ibm
++ os=-os400
++ ;;
++ OSE68000 | ose68000)
++ basic_machine=m68000-ericsson
++ os=-ose
++ ;;
++ os68k)
++ basic_machine=m68k-none
++ os=-os68k
++ ;;
++ pa-hitachi)
++ basic_machine=hppa1.1-hitachi
++ os=-hiuxwe2
++ ;;
++ paragon)
++ basic_machine=i860-intel
++ os=-osf
++ ;;
++ parisc)
++ basic_machine=hppa-unknown
++ os=-linux
++ ;;
++ parisc-*)
++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ pbd)
++ basic_machine=sparc-tti
++ ;;
++ pbb)
++ basic_machine=m68k-tti
++ ;;
++ pc532 | pc532-*)
++ basic_machine=ns32k-pc532
++ ;;
++ pc98)
++ basic_machine=i386-pc
++ ;;
++ pc98-*)
++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentium | p5 | k5 | k6 | nexgen | viac3)
++ basic_machine=i586-pc
++ ;;
++ pentiumpro | p6 | 6x86 | athlon | athlon_*)
++ basic_machine=i686-pc
++ ;;
++ pentiumii | pentium2 | pentiumiii | pentium3)
++ basic_machine=i686-pc
++ ;;
++ pentium4)
++ basic_machine=i786-pc
++ ;;
++ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
++ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentiumpro-* | p6-* | 6x86-* | athlon-*)
++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentium4-*)
++ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pn)
++ basic_machine=pn-gould
++ ;;
++ power) basic_machine=power-ibm
++ ;;
++ ppc | ppcbe) basic_machine=powerpc-unknown
++ ;;
++ ppc-* | ppcbe-*)
++ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppcle | powerpclittle | ppc-le | powerpc-little)
++ basic_machine=powerpcle-unknown
++ ;;
++ ppcle-* | powerpclittle-*)
++ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppc64) basic_machine=powerpc64-unknown
++ ;;
++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
++ basic_machine=powerpc64le-unknown
++ ;;
++ ppc64le-* | powerpc64little-*)
++ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ps2)
++ basic_machine=i386-ibm
++ ;;
++ pw32)
++ basic_machine=i586-unknown
++ os=-pw32
++ ;;
++ rdos)
++ basic_machine=i386-pc
++ os=-rdos
++ ;;
++ rom68k)
++ basic_machine=m68k-rom68k
++ os=-coff
++ ;;
++ rm[46]00)
++ basic_machine=mips-siemens
++ ;;
++ rtpc | rtpc-*)
++ basic_machine=romp-ibm
++ ;;
++ s390 | s390-*)
++ basic_machine=s390-ibm
++ ;;
++ s390x | s390x-*)
++ basic_machine=s390x-ibm
++ ;;
++ sa29200)
++ basic_machine=a29k-amd
++ os=-udi
++ ;;
++ sb1)
++ basic_machine=mipsisa64sb1-unknown
++ ;;
++ sb1el)
++ basic_machine=mipsisa64sb1el-unknown
++ ;;
++ sde)
++ basic_machine=mipsisa32-sde
++ os=-elf
++ ;;
++ sei)
++ basic_machine=mips-sei
++ os=-seiux
++ ;;
++ sequent)
++ basic_machine=i386-sequent
++ ;;
++ sh)
++ basic_machine=sh-hitachi
++ os=-hms
++ ;;
++ sh5el)
++ basic_machine=sh5le-unknown
++ ;;
++ sh64)
++ basic_machine=sh64-unknown
++ ;;
++ sparclite-wrs | simso-wrs)
++ basic_machine=sparclite-wrs
++ os=-vxworks
++ ;;
++ sps7)
++ basic_machine=m68k-bull
++ os=-sysv2
++ ;;
++ spur)
++ basic_machine=spur-unknown
++ ;;
++ st2000)
++ basic_machine=m68k-tandem
++ ;;
++ stratus)
++ basic_machine=i860-stratus
++ os=-sysv4
++ ;;
++ strongarm-* | thumb-*)
++ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ sun2)
++ basic_machine=m68000-sun
++ ;;
++ sun2os3)
++ basic_machine=m68000-sun
++ os=-sunos3
++ ;;
++ sun2os4)
++ basic_machine=m68000-sun
++ os=-sunos4
++ ;;
++ sun3os3)
++ basic_machine=m68k-sun
++ os=-sunos3
++ ;;
++ sun3os4)
++ basic_machine=m68k-sun
++ os=-sunos4
++ ;;
++ sun4os3)
++ basic_machine=sparc-sun
++ os=-sunos3
++ ;;
++ sun4os4)
++ basic_machine=sparc-sun
++ os=-sunos4
++ ;;
++ sun4sol2)
++ basic_machine=sparc-sun
++ os=-solaris2
++ ;;
++ sun3 | sun3-*)
++ basic_machine=m68k-sun
++ ;;
++ sun4)
++ basic_machine=sparc-sun
++ ;;
++ sun386 | sun386i | roadrunner)
++ basic_machine=i386-sun
++ ;;
++ sv1)
++ basic_machine=sv1-cray
++ os=-unicos
++ ;;
++ symmetry)
++ basic_machine=i386-sequent
++ os=-dynix
++ ;;
++ t3e)
++ basic_machine=alphaev5-cray
++ os=-unicos
++ ;;
++ t90)
++ basic_machine=t90-cray
++ os=-unicos
++ ;;
++ # This must be matched before tile*.
++ tilegx*)
++ basic_machine=tilegx-unknown
++ os=-linux-gnu
++ ;;
++ tile*)
++ basic_machine=tile-unknown
++ os=-linux-gnu
++ ;;
++ tx39)
++ basic_machine=mipstx39-unknown
++ ;;
++ tx39el)
++ basic_machine=mipstx39el-unknown
++ ;;
++ toad1)
++ basic_machine=pdp10-xkl
++ os=-tops20
++ ;;
++ tower | tower-32)
++ basic_machine=m68k-ncr
++ ;;
++ tpf)
++ basic_machine=s390x-ibm
++ os=-tpf
++ ;;
++ udi29k)
++ basic_machine=a29k-amd
++ os=-udi
++ ;;
++ ultra3)
++ basic_machine=a29k-nyu
++ os=-sym1
++ ;;
++ v810 | necv810)
++ basic_machine=v810-nec
++ os=-none
++ ;;
++ vaxv)
++ basic_machine=vax-dec
++ os=-sysv
++ ;;
++ vms)
++ basic_machine=vax-dec
++ os=-vms
++ ;;
++ vpp*|vx|vx-*)
++ basic_machine=f301-fujitsu
++ ;;
++ vxworks960)
++ basic_machine=i960-wrs
++ os=-vxworks
++ ;;
++ vxworks68)
++ basic_machine=m68k-wrs
++ os=-vxworks
++ ;;
++ vxworks29k)
++ basic_machine=a29k-wrs
++ os=-vxworks
++ ;;
++ w65*)
++ basic_machine=w65-wdc
++ os=-none
++ ;;
++ w89k-*)
++ basic_machine=hppa1.1-winbond
++ os=-proelf
++ ;;
++ xbox)
++ basic_machine=i686-pc
++ os=-mingw32
++ ;;
++ xps | xps100)
++ basic_machine=xps100-honeywell
++ ;;
++ xscale-* | xscalee[bl]-*)
++ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
++ ;;
++ ymp)
++ basic_machine=ymp-cray
++ os=-unicos
++ ;;
++ z8k-*-coff)
++ basic_machine=z8k-unknown
++ os=-sim
++ ;;
++ z80-*-coff)
++ basic_machine=z80-unknown
++ os=-sim
++ ;;
++ none)
++ basic_machine=none-none
++ os=-none
++ ;;
++
++# Here we handle the default manufacturer of certain CPU types. It is in
++# some cases the only manufacturer, in others, it is the most popular.
++ w89k)
++ basic_machine=hppa1.1-winbond
++ ;;
++ op50n)
++ basic_machine=hppa1.1-oki
++ ;;
++ op60c)
++ basic_machine=hppa1.1-oki
++ ;;
++ romp)
++ basic_machine=romp-ibm
++ ;;
++ mmix)
++ basic_machine=mmix-knuth
++ ;;
++ rs6000)
++ basic_machine=rs6000-ibm
++ ;;
++ vax)
++ basic_machine=vax-dec
++ ;;
++ pdp10)
++ # there are many clones, so DEC is not a safe bet
++ basic_machine=pdp10-unknown
++ ;;
++ pdp11)
++ basic_machine=pdp11-dec
++ ;;
++ we32k)
++ basic_machine=we32k-att
++ ;;
++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
++ basic_machine=sh-unknown
++ ;;
++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
++ basic_machine=sparc-sun
++ ;;
++ cydra)
++ basic_machine=cydra-cydrome
++ ;;
++ orion)
++ basic_machine=orion-highlevel
++ ;;
++ orion105)
++ basic_machine=clipper-highlevel
++ ;;
++ mac | mpw | mac-mpw)
++ basic_machine=m68k-apple
++ ;;
++ pmac | pmac-mpw)
++ basic_machine=powerpc-apple
++ ;;
++ *-unknown)
++ # Make sure to match an already-canonicalized machine name.
++ ;;
++ *)
++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
++ exit 1
++ ;;
++esac
++
++# Here we canonicalize certain aliases for manufacturers.
++case $basic_machine in
++ *-digital*)
++ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
++ ;;
++ *-commodore*)
++ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
++ ;;
++ *)
++ ;;
++esac
++
++# Decode manufacturer-specific aliases for certain operating systems.
++
++if [ x"$os" != x"" ]
++then
++case $os in
++ # First match some system type aliases
++ # that might get confused with valid system types.
++ # -solaris* is a basic system type, with this one exception.
++ -auroraux)
++ os=-auroraux
++ ;;
++ -solaris1 | -solaris1.*)
++ os=`echo $os | sed -e 's|solaris1|sunos4|'`
++ ;;
++ -solaris)
++ os=-solaris2
++ ;;
++ -svr4*)
++ os=-sysv4
++ ;;
++ -unixware*)
++ os=-sysv4.2uw
++ ;;
++ -gnu/linux*)
++ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
++ ;;
++ # First accept the basic system types.
++ # The portable systems comes first.
++ # Each alternative MUST END IN A *, to match a version number.
++ # -sysv* is not here because it comes later, after sysvr4.
++ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
++ | -sym* | -kopensolaris* \
++ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
++ | -aos* | -aros* \
++ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
++ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
++ | -openbsd* | -solidbsd* \
++ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
++ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
++ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
++ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
++ | -chorusos* | -chorusrdb* | -cegcc* \
++ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -mingw32* | -linux-gnu* | -linux-android* \
++ | -linux-newlib* | -linux-uclibc* \
++ | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
++ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
++ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
++ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
++ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*)
++ # Remember, each alternative MUST END IN *, to match a version number.
++ ;;
++ -qnx*)
++ case $basic_machine in
++ x86-* | i*86-*)
++ ;;
++ *)
++ os=-nto$os
++ ;;
++ esac
++ ;;
++ -nto-qnx*)
++ ;;
++ -nto*)
++ os=`echo $os | sed -e 's|nto|nto-qnx|'`
++ ;;
++ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
++ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
++ ;;
++ -mac*)
++ os=`echo $os | sed -e 's|mac|macos|'`
++ ;;
++ -linux-dietlibc)
++ os=-linux-dietlibc
++ ;;
++ -linux*)
++ os=`echo $os | sed -e 's|linux|linux-gnu|'`
++ ;;
++ -sunos5*)
++ os=`echo $os | sed -e 's|sunos5|solaris2|'`
++ ;;
++ -sunos6*)
++ os=`echo $os | sed -e 's|sunos6|solaris3|'`
++ ;;
++ -opened*)
++ os=-openedition
++ ;;
++ -os400*)
++ os=-os400
++ ;;
++ -wince*)
++ os=-wince
++ ;;
++ -osfrose*)
++ os=-osfrose
++ ;;
++ -osf*)
++ os=-osf
++ ;;
++ -utek*)
++ os=-bsd
++ ;;
++ -dynix*)
++ os=-bsd
++ ;;
++ -acis*)
++ os=-aos
++ ;;
++ -atheos*)
++ os=-atheos
++ ;;
++ -syllable*)
++ os=-syllable
++ ;;
++ -386bsd)
++ os=-bsd
++ ;;
++ -ctix* | -uts*)
++ os=-sysv
++ ;;
++ -nova*)
++ os=-rtmk-nova
++ ;;
++ -ns2 )
++ os=-nextstep2
++ ;;
++ -nsk*)
++ os=-nsk
++ ;;
++ # Preserve the version number of sinix5.
++ -sinix5.*)
++ os=`echo $os | sed -e 's|sinix|sysv|'`
++ ;;
++ -sinix*)
++ os=-sysv4
++ ;;
++ -tpf*)
++ os=-tpf
++ ;;
++ -triton*)
++ os=-sysv3
++ ;;
++ -oss*)
++ os=-sysv3
++ ;;
++ -svr4)
++ os=-sysv4
++ ;;
++ -svr3)
++ os=-sysv3
++ ;;
++ -sysvr4)
++ os=-sysv4
++ ;;
++ # This must come after -sysvr4.
++ -sysv*)
++ ;;
++ -ose*)
++ os=-ose
++ ;;
++ -es1800*)
++ os=-ose
++ ;;
++ -xenix)
++ os=-xenix
++ ;;
++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
++ os=-mint
++ ;;
++ -aros*)
++ os=-aros
++ ;;
++ -kaos*)
++ os=-kaos
++ ;;
++ -zvmoe)
++ os=-zvmoe
++ ;;
++ -dicos*)
++ os=-dicos
++ ;;
++ -nacl*)
++ ;;
++ -none)
++ ;;
++ *)
++ # Get rid of the `-' at the beginning of $os.
++ os=`echo $os | sed 's/[^-]*-//'`
++ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
++ exit 1
++ ;;
++esac
++else
++
++# Here we handle the default operating systems that come with various machines.
++# The value should be what the vendor currently ships out the door with their
++# machine or put another way, the most popular os provided with the machine.
++
++# Note that if you're going to try to match "-MANUFACTURER" here (say,
++# "-sun"), then you have to tell the case statement up towards the top
++# that MANUFACTURER isn't an operating system. Otherwise, code above
++# will signal an error saying that MANUFACTURER isn't an operating
++# system, and we'll never get to this point.
++
++case $basic_machine in
++ score-*)
++ os=-elf
++ ;;
++ spu-*)
++ os=-elf
++ ;;
++ *-acorn)
++ os=-riscix1.2
++ ;;
++ arm*-rebel)
++ os=-linux
++ ;;
++ arm*-semi)
++ os=-aout
++ ;;
++ c4x-* | tic4x-*)
++ os=-coff
++ ;;
++ tic54x-*)
++ os=-coff
++ ;;
++ tic55x-*)
++ os=-coff
++ ;;
++ tic6x-*)
++ os=-coff
++ ;;
++ # This must come before the *-dec entry.
++ pdp10-*)
++ os=-tops20
++ ;;
++ pdp11-*)
++ os=-none
++ ;;
++ *-dec | vax-*)
++ os=-ultrix4.2
++ ;;
++ m68*-apollo)
++ os=-domain
++ ;;
++ i386-sun)
++ os=-sunos4.0.2
++ ;;
++ m68000-sun)
++ os=-sunos3
++ # This also exists in the configure program, but was not the
++ # default.
++ # os=-sunos4
++ ;;
++ m68*-cisco)
++ os=-aout
++ ;;
++ mep-*)
++ os=-elf
++ ;;
++ mips*-cisco)
++ os=-elf
++ ;;
++ mips*-*)
++ os=-elf
++ ;;
++ or32-*)
++ os=-coff
++ ;;
++ *-tti) # must be before sparc entry or we get the wrong os.
++ os=-sysv3
++ ;;
++ sparc-* | *-sun)
++ os=-sunos4.1.1
++ ;;
++ *-be)
++ os=-beos
++ ;;
++ *-haiku)
++ os=-haiku
++ ;;
++ *-ibm)
++ os=-aix
++ ;;
++ *-knuth)
++ os=-mmixware
++ ;;
++ *-wec)
++ os=-proelf
++ ;;
++ *-winbond)
++ os=-proelf
++ ;;
++ *-oki)
++ os=-proelf
++ ;;
++ *-hp)
++ os=-hpux
++ ;;
++ *-hitachi)
++ os=-hiux
++ ;;
++ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
++ os=-sysv
++ ;;
++ *-cbm)
++ os=-amigaos
++ ;;
++ *-dg)
++ os=-dgux
++ ;;
++ *-dolphin)
++ os=-sysv3
++ ;;
++ m68k-ccur)
++ os=-rtu
++ ;;
++ m88k-omron*)
++ os=-luna
++ ;;
++ *-next )
++ os=-nextstep
++ ;;
++ *-sequent)
++ os=-ptx
++ ;;
++ *-crds)
++ os=-unos
++ ;;
++ *-ns)
++ os=-genix
++ ;;
++ i370-*)
++ os=-mvs
++ ;;
++ *-next)
++ os=-nextstep3
++ ;;
++ *-gould)
++ os=-sysv
++ ;;
++ *-highlevel)
++ os=-bsd
++ ;;
++ *-encore)
++ os=-bsd
++ ;;
++ *-sgi)
++ os=-irix
++ ;;
++ *-siemens)
++ os=-sysv4
++ ;;
++ *-masscomp)
++ os=-rtu
++ ;;
++ f30[01]-fujitsu | f700-fujitsu)
++ os=-uxpv
++ ;;
++ *-rom68k)
++ os=-coff
++ ;;
++ *-*bug)
++ os=-coff
++ ;;
++ *-apple)
++ os=-macos
++ ;;
++ *-atari*)
++ os=-mint
++ ;;
++ *)
++ os=-none
++ ;;
++esac
++fi
++
++# Here we handle the case where we know the os, and the CPU type, but not the
++# manufacturer. We pick the logical manufacturer.
++vendor=unknown
++case $basic_machine in
++ *-unknown)
++ case $os in
++ -riscix*)
++ vendor=acorn
++ ;;
++ -sunos*)
++ vendor=sun
++ ;;
++ -cnk*|-aix*)
++ vendor=ibm
++ ;;
++ -beos*)
++ vendor=be
++ ;;
++ -hpux*)
++ vendor=hp
++ ;;
++ -mpeix*)
++ vendor=hp
++ ;;
++ -hiux*)
++ vendor=hitachi
++ ;;
++ -unos*)
++ vendor=crds
++ ;;
++ -dgux*)
++ vendor=dg
++ ;;
++ -luna*)
++ vendor=omron
++ ;;
++ -genix*)
++ vendor=ns
++ ;;
++ -mvs* | -opened*)
++ vendor=ibm
++ ;;
++ -os400*)
++ vendor=ibm
++ ;;
++ -ptx*)
++ vendor=sequent
++ ;;
++ -tpf*)
++ vendor=ibm
++ ;;
++ -vxsim* | -vxworks* | -windiss*)
++ vendor=wrs
++ ;;
++ -aux*)
++ vendor=apple
++ ;;
++ -hms*)
++ vendor=hitachi
++ ;;
++ -mpw* | -macos*)
++ vendor=apple
++ ;;
++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
++ vendor=atari
++ ;;
++ -vos*)
++ vendor=stratus
++ ;;
++ esac
++ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
++ ;;
++esac
++
++echo $basic_machine$os
++exit
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "timestamp='"
++# time-stamp-format: "%:y-%02m-%02d"
++# time-stamp-end: "'"
++# End:
+--- adjtimex-1.29.orig/Makefile
++++ adjtimex-1.29/Makefile
+@@ -0,0 +1,78 @@
++#### Start of system configuration section. -*-makefile-*- ####
++ srcdir = .
++VPATH = .
++
++VERSION=1.29
++
++CFLAGS = -Wall -g -O2 -Wall
++prefix = /usr
++man1dir=${prefix}/share/man/man1
++exec_prefix = ${prefix}
++bindir=/sbin
++datadir = ${datarootdir}
++datarootdir = ${prefix}/share
++
++INSTALL=/usr/bin/install -c
++
++
++# Extension (not including `.') for the manual page filenames.
++manext = 8
++# Where to put the manual pages.
++mandir = $(prefix)/share/man/man$(manext)
++
++#### End of system configuration section. ####
++
++SRC = adjtimex.c adjtimex.8 mat.c mat.h install-sh configure.in \
++ configure Makefile.in config.h.in README README.ru adjtimex.lsm \
++ adjtimex.lsm.in COPYING COPYRIGHT ChangeLog
++
++all: adjtimex adjtimex.lsm Makefile
++
++configure config.h.in: configure.in
++ autoconf
++ autoheader
++Makefile config.h: Makefile.in config.h.in
++ ./configure
++
++adjtimex: adjtimex.c mat.o config.h Makefile
++ $(CC) $(CFLAGS) -I. -DVERSION=\"$(VERSION)\" -o adjtimex \
++ adjtimex.c mat.o -lm
++
++mat.o: mat.c
++ $(CC) $(CFLAGS) -c mat.c
++
++install: all
++ $(INSTALL) -g bin -m 755 -o root adjtimex $(bindir)/adjtimex
++ $(INSTALL) -d -g root -m 755 -o root $(mandir)
++ -$(INSTALL) -g root -m 644 -o root $(srcdir)/adjtimex.8 \
++ $(mandir)/adjtimex.$(manext)
++
++uninstall:
++ rm -f $(bindir)/adjtimex $(mandir)/adjtimex.$(manext)
++
++clean:
++ rm -f core *.o
++veryclean: clean
++ rm -f adjtimex
++
++adjtimex.lsm: adjtimex.lsm.in Makefile
++ sed -e 's/@VERSION@/$(VERSION)/' \
++ -e "s/@DATE@/`date +%Y-%m-%d`/" \
++ adjtimex.lsm.in >adjtimex.lsm
++
++shar: $(SRC)
++ distname=adjtimex-$(VERSION); \
++ shar $(SRC) >$$distname.shar
++
++dist: $(SRC)
++ distname=adjtimex-$(VERSION); \
++ rm -fr $$distname; \
++ mkdir $$distname; \
++ for file in $(SRC); do \
++ ln $$file $$distname/$$file \
++ || { echo copying $$file instead; cp -p $$file $$distname/$$file;}; \
++ done; \
++ chmod -R a+rX $$distname; \
++ tar -chz -f $$distname.tar.gz $$distname; \
++ rm -fr $$distname
++
+--- adjtimex-1.29.orig/config.guess
++++ adjtimex-1.29/config.guess
+@@ -0,0 +1,1517 @@
++#! /bin/sh
++# Attempt to guess a canonical system name.
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
++# 2011 Free Software Foundation, Inc.
++
++timestamp='2011-05-11'
++
++# This file 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) any later version.
++#
++# This program 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 program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
++# 02110-1301, USA.
++#
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++
++# Originally written by Per Bothner. Please send patches (context
++# diff format) to <config-patches@gnu.org> and include a ChangeLog
++# entry.
++#
++# This script attempts to guess a canonical system name similar to
++# config.sub. If it succeeds, it prints the system name on stdout, and
++# exits with 0. Otherwise, it exits with 1.
++#
++# You can get the latest version of this script from:
++# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++
++me=`echo "$0" | sed -e 's,.*/,,'`
++
++usage="\
++Usage: $0 [OPTION]
++
++Output the configuration name of the system \`$me' is run on.
++
++Operation modes:
++ -h, --help print this help, then exit
++ -t, --time-stamp print date of last modification, then exit
++ -v, --version print version number, then exit
++
++Report bugs and patches to <config-patches@gnu.org>."
++
++version="\
++GNU config.guess ($timestamp)
++
++Originally written by Per Bothner.
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
++2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
++Software Foundation, Inc.
++
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++
++help="
++Try \`$me --help' for more information."
++
++# Parse command line
++while test $# -gt 0 ; do
++ case $1 in
++ --time-stamp | --time* | -t )
++ echo "$timestamp" ; exit ;;
++ --version | -v )
++ echo "$version" ; exit ;;
++ --help | --h* | -h )
++ echo "$usage"; exit ;;
++ -- ) # Stop option processing
++ shift; break ;;
++ - ) # Use stdin as input.
++ break ;;
++ -* )
++ echo "$me: invalid option $1$help" >&2
++ exit 1 ;;
++ * )
++ break ;;
++ esac
++done
++
++if test $# != 0; then
++ echo "$me: too many arguments$help" >&2
++ exit 1
++fi
++
++trap 'exit 1' 1 2 15
++
++# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
++# compiler to aid in system detection is discouraged as it requires
++# temporary files to be created and, as you can see below, it is a
++# headache to deal with in a portable fashion.
++
++# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
++# use `HOST_CC' if defined, but it is deprecated.
++
++# Portable tmp directory creation inspired by the Autoconf team.
++
++set_cc_for_build='
++trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
++trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
++: ${TMPDIR=/tmp} ;
++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
++ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
++ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
++ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
++dummy=$tmp/dummy ;
++tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
++case $CC_FOR_BUILD,$HOST_CC,$CC in
++ ,,) echo "int x;" > $dummy.c ;
++ for c in cc gcc c89 c99 ; do
++ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
++ CC_FOR_BUILD="$c"; break ;
++ fi ;
++ done ;
++ if test x"$CC_FOR_BUILD" = x ; then
++ CC_FOR_BUILD=no_compiler_found ;
++ fi
++ ;;
++ ,,*) CC_FOR_BUILD=$CC ;;
++ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
++esac ; set_cc_for_build= ;'
++
++# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
++# (ghazi@noc.rutgers.edu 1994-08-24)
++if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
++ PATH=$PATH:/.attbin ; export PATH
++fi
++
++UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
++UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
++UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
++UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
++
++# Note: order is significant - the case branches are not exclusive.
++
++case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
++ *:NetBSD:*:*)
++ # NetBSD (nbsd) targets should (where applicable) match one or
++ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
++ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
++ # switched to ELF, *-*-netbsd* would select the old
++ # object file format. This provides both forward
++ # compatibility and a consistent mechanism for selecting the
++ # object file format.
++ #
++ # Note: NetBSD doesn't particularly care about the vendor
++ # portion of the name. We always set it to "unknown".
++ sysctl="sysctl -n hw.machine_arch"
++ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
++ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
++ case "${UNAME_MACHINE_ARCH}" in
++ armeb) machine=armeb-unknown ;;
++ arm*) machine=arm-unknown ;;
++ sh3el) machine=shl-unknown ;;
++ sh3eb) machine=sh-unknown ;;
++ sh5el) machine=sh5le-unknown ;;
++ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
++ esac
++ # The Operating System including object format, if it has switched
++ # to ELF recently, or will in the future.
++ case "${UNAME_MACHINE_ARCH}" in
++ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
++ eval $set_cc_for_build
++ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ELF__
++ then
++ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
++ # Return netbsd for either. FIX?
++ os=netbsd
++ else
++ os=netbsdelf
++ fi
++ ;;
++ *)
++ os=netbsd
++ ;;
++ esac
++ # The OS release
++ # Debian GNU/NetBSD machines have a different userland, and
++ # thus, need a distinct triplet. However, they do not need
++ # kernel version information, so it can be replaced with a
++ # suitable tag, in the style of linux-gnu.
++ case "${UNAME_VERSION}" in
++ Debian*)
++ release='-gnu'
++ ;;
++ *)
++ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
++ ;;
++ esac
++ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
++ # contains redundant information, the shorter form:
++ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
++ echo "${machine}-${os}${release}"
++ exit ;;
++ *:OpenBSD:*:*)
++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
++ exit ;;
++ *:ekkoBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
++ exit ;;
++ *:SolidBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
++ exit ;;
++ macppc:MirBSD:*:*)
++ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
++ exit ;;
++ *:MirBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
++ exit ;;
++ alpha:OSF1:*:*)
++ case $UNAME_RELEASE in
++ *4.0)
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
++ ;;
++ *5.*)
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
++ ;;
++ esac
++ # According to Compaq, /usr/sbin/psrinfo has been available on
++ # OSF/1 and Tru64 systems produced since 1995. I hope that
++ # covers most systems running today. This code pipes the CPU
++ # types through head -n 1, so we only detect the type of CPU 0.
++ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
++ case "$ALPHA_CPU_TYPE" in
++ "EV4 (21064)")
++ UNAME_MACHINE="alpha" ;;
++ "EV4.5 (21064)")
++ UNAME_MACHINE="alpha" ;;
++ "LCA4 (21066/21068)")
++ UNAME_MACHINE="alpha" ;;
++ "EV5 (21164)")
++ UNAME_MACHINE="alphaev5" ;;
++ "EV5.6 (21164A)")
++ UNAME_MACHINE="alphaev56" ;;
++ "EV5.6 (21164PC)")
++ UNAME_MACHINE="alphapca56" ;;
++ "EV5.7 (21164PC)")
++ UNAME_MACHINE="alphapca57" ;;
++ "EV6 (21264)")
++ UNAME_MACHINE="alphaev6" ;;
++ "EV6.7 (21264A)")
++ UNAME_MACHINE="alphaev67" ;;
++ "EV6.8CB (21264C)")
++ UNAME_MACHINE="alphaev68" ;;
++ "EV6.8AL (21264B)")
++ UNAME_MACHINE="alphaev68" ;;
++ "EV6.8CX (21264D)")
++ UNAME_MACHINE="alphaev68" ;;
++ "EV6.9A (21264/EV69A)")
++ UNAME_MACHINE="alphaev69" ;;
++ "EV7 (21364)")
++ UNAME_MACHINE="alphaev7" ;;
++ "EV7.9 (21364A)")
++ UNAME_MACHINE="alphaev79" ;;
++ esac
++ # A Pn.n version is a patched version.
++ # A Vn.n version is a released version.
++ # A Tn.n version is a released field test version.
++ # A Xn.n version is an unreleased experimental baselevel.
++ # 1.2 uses "1.2" for uname -r.
++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
++ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
++ exitcode=$?
++ trap '' 0
++ exit $exitcode ;;
++ Alpha\ *:Windows_NT*:*)
++ # How do we know it's Interix rather than the generic POSIX subsystem?
++ # Should we change UNAME_MACHINE based on the output of uname instead
++ # of the specific Alpha model?
++ echo alpha-pc-interix
++ exit ;;
++ 21064:Windows_NT:50:3)
++ echo alpha-dec-winnt3.5
++ exit ;;
++ Amiga*:UNIX_System_V:4.0:*)
++ echo m68k-unknown-sysv4
++ exit ;;
++ *:[Aa]miga[Oo][Ss]:*:*)
++ echo ${UNAME_MACHINE}-unknown-amigaos
++ exit ;;
++ *:[Mm]orph[Oo][Ss]:*:*)
++ echo ${UNAME_MACHINE}-unknown-morphos
++ exit ;;
++ *:OS/390:*:*)
++ echo i370-ibm-openedition
++ exit ;;
++ *:z/VM:*:*)
++ echo s390-ibm-zvmoe
++ exit ;;
++ *:OS400:*:*)
++ echo powerpc-ibm-os400
++ exit ;;
++ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
++ echo arm-acorn-riscix${UNAME_RELEASE}
++ exit ;;
++ arm:riscos:*:*|arm:RISCOS:*:*)
++ echo arm-unknown-riscos
++ exit ;;
++ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
++ echo hppa1.1-hitachi-hiuxmpp
++ exit ;;
++ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
++ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
++ if test "`(/bin/universe) 2>/dev/null`" = att ; then
++ echo pyramid-pyramid-sysv3
++ else
++ echo pyramid-pyramid-bsd
++ fi
++ exit ;;
++ NILE*:*:*:dcosx)
++ echo pyramid-pyramid-svr4
++ exit ;;
++ DRS?6000:unix:4.0:6*)
++ echo sparc-icl-nx6
++ exit ;;
++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
++ case `/usr/bin/uname -p` in
++ sparc) echo sparc-icl-nx7; exit ;;
++ esac ;;
++ s390x:SunOS:*:*)
++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4H:SunOS:5.*:*)
++ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
++ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
++ echo i386-pc-auroraux${UNAME_RELEASE}
++ exit ;;
++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
++ eval $set_cc_for_build
++ SUN_ARCH="i386"
++ # If there is a compiler, see if it is configured for 64-bit objects.
++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
++ # This test works for both compilers.
++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++ grep IS_64BIT_ARCH >/dev/null
++ then
++ SUN_ARCH="x86_64"
++ fi
++ fi
++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4*:SunOS:6*:*)
++ # According to config.sub, this is the proper way to canonicalize
++ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
++ # it's likely to be more like Solaris than SunOS4.
++ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4*:SunOS:*:*)
++ case "`/usr/bin/arch -k`" in
++ Series*|S4*)
++ UNAME_RELEASE=`uname -v`
++ ;;
++ esac
++ # Japanese Language versions have a version number like `4.1.3-JL'.
++ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
++ exit ;;
++ sun3*:SunOS:*:*)
++ echo m68k-sun-sunos${UNAME_RELEASE}
++ exit ;;
++ sun*:*:4.2BSD:*)
++ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
++ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
++ case "`/bin/arch`" in
++ sun3)
++ echo m68k-sun-sunos${UNAME_RELEASE}
++ ;;
++ sun4)
++ echo sparc-sun-sunos${UNAME_RELEASE}
++ ;;
++ esac
++ exit ;;
++ aushp:SunOS:*:*)
++ echo sparc-auspex-sunos${UNAME_RELEASE}
++ exit ;;
++ # The situation for MiNT is a little confusing. The machine name
++ # can be virtually everything (everything which is not
++ # "atarist" or "atariste" at least should have a processor
++ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
++ # to the lowercase version "mint" (or "freemint"). Finally
++ # the system name "TOS" denotes a system which is actually not
++ # MiNT. But MiNT is downward compatible to TOS, so this should
++ # be no problem.
++ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
++ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
++ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
++ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
++ echo m68k-milan-mint${UNAME_RELEASE}
++ exit ;;
++ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
++ echo m68k-hades-mint${UNAME_RELEASE}
++ exit ;;
++ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
++ echo m68k-unknown-mint${UNAME_RELEASE}
++ exit ;;
++ m68k:machten:*:*)
++ echo m68k-apple-machten${UNAME_RELEASE}
++ exit ;;
++ powerpc:machten:*:*)
++ echo powerpc-apple-machten${UNAME_RELEASE}
++ exit ;;
++ RISC*:Mach:*:*)
++ echo mips-dec-mach_bsd4.3
++ exit ;;
++ RISC*:ULTRIX:*:*)
++ echo mips-dec-ultrix${UNAME_RELEASE}
++ exit ;;
++ VAX*:ULTRIX*:*:*)
++ echo vax-dec-ultrix${UNAME_RELEASE}
++ exit ;;
++ 2020:CLIX:*:* | 2430:CLIX:*:*)
++ echo clipper-intergraph-clix${UNAME_RELEASE}
++ exit ;;
++ mips:*:*:UMIPS | mips:*:*:RISCos)
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++#ifdef __cplusplus
++#include <stdio.h> /* for printf() prototype */
++ int main (int argc, char *argv[]) {
++#else
++ int main (argc, argv) int argc; char *argv[]; {
++#endif
++ #if defined (host_mips) && defined (MIPSEB)
++ #if defined (SYSTYPE_SYSV)
++ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
++ #endif
++ #if defined (SYSTYPE_SVR4)
++ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
++ #endif
++ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
++ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
++ #endif
++ #endif
++ exit (-1);
++ }
++EOF
++ $CC_FOR_BUILD -o $dummy $dummy.c &&
++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
++ SYSTEM_NAME=`$dummy $dummyarg` &&
++ { echo "$SYSTEM_NAME"; exit; }
++ echo mips-mips-riscos${UNAME_RELEASE}
++ exit ;;
++ Motorola:PowerMAX_OS:*:*)
++ echo powerpc-motorola-powermax
++ exit ;;
++ Motorola:*:4.3:PL8-*)
++ echo powerpc-harris-powermax
++ exit ;;
++ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
++ echo powerpc-harris-powermax
++ exit ;;
++ Night_Hawk:Power_UNIX:*:*)
++ echo powerpc-harris-powerunix
++ exit ;;
++ m88k:CX/UX:7*:*)
++ echo m88k-harris-cxux7
++ exit ;;
++ m88k:*:4*:R4*)
++ echo m88k-motorola-sysv4
++ exit ;;
++ m88k:*:3*:R3*)
++ echo m88k-motorola-sysv3
++ exit ;;
++ AViiON:dgux:*:*)
++ # DG/UX returns AViiON for all architectures
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
++ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
++ then
++ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
++ [ ${TARGET_BINARY_INTERFACE}x = x ]
++ then
++ echo m88k-dg-dgux${UNAME_RELEASE}
++ else
++ echo m88k-dg-dguxbcs${UNAME_RELEASE}
++ fi
++ else
++ echo i586-dg-dgux${UNAME_RELEASE}
++ fi
++ exit ;;
++ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
++ echo m88k-dolphin-sysv3
++ exit ;;
++ M88*:*:R3*:*)
++ # Delta 88k system running SVR3
++ echo m88k-motorola-sysv3
++ exit ;;
++ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
++ echo m88k-tektronix-sysv3
++ exit ;;
++ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
++ echo m68k-tektronix-bsd
++ exit ;;
++ *:IRIX*:*:*)
++ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
++ exit ;;
++ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
++ i*86:AIX:*:*)
++ echo i386-ibm-aix
++ exit ;;
++ ia64:AIX:*:*)
++ if [ -x /usr/bin/oslevel ] ; then
++ IBM_REV=`/usr/bin/oslevel`
++ else
++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
++ fi
++ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
++ exit ;;
++ *:AIX:2:3)
++ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #include <sys/systemcfg.h>
++
++ main()
++ {
++ if (!__power_pc())
++ exit(1);
++ puts("powerpc-ibm-aix3.2.5");
++ exit(0);
++ }
++EOF
++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
++ then
++ echo "$SYSTEM_NAME"
++ else
++ echo rs6000-ibm-aix3.2.5
++ fi
++ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
++ echo rs6000-ibm-aix3.2.4
++ else
++ echo rs6000-ibm-aix3.2
++ fi
++ exit ;;
++ *:AIX:*:[4567])
++ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
++ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
++ IBM_ARCH=rs6000
++ else
++ IBM_ARCH=powerpc
++ fi
++ if [ -x /usr/bin/oslevel ] ; then
++ IBM_REV=`/usr/bin/oslevel`
++ else
++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
++ fi
++ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
++ exit ;;
++ *:AIX:*:*)
++ echo rs6000-ibm-aix
++ exit ;;
++ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
++ echo romp-ibm-bsd4.4
++ exit ;;
++ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
++ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
++ exit ;; # report: romp-ibm BSD 4.3
++ *:BOSX:*:*)
++ echo rs6000-bull-bosx
++ exit ;;
++ DPX/2?00:B.O.S.:*:*)
++ echo m68k-bull-sysv3
++ exit ;;
++ 9000/[34]??:4.3bsd:1.*:*)
++ echo m68k-hp-bsd
++ exit ;;
++ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
++ echo m68k-hp-bsd4.4
++ exit ;;
++ 9000/[34678]??:HP-UX:*:*)
++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
++ case "${UNAME_MACHINE}" in
++ 9000/31? ) HP_ARCH=m68000 ;;
++ 9000/[34]?? ) HP_ARCH=m68k ;;
++ 9000/[678][0-9][0-9])
++ if [ -x /usr/bin/getconf ]; then
++ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
++ case "${sc_cpu_version}" in
++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
++ 532) # CPU_PA_RISC2_0
++ case "${sc_kernel_bits}" in
++ 32) HP_ARCH="hppa2.0n" ;;
++ 64) HP_ARCH="hppa2.0w" ;;
++ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
++ esac ;;
++ esac
++ fi
++ if [ "${HP_ARCH}" = "" ]; then
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++
++ #define _HPUX_SOURCE
++ #include <stdlib.h>
++ #include <unistd.h>
++
++ int main ()
++ {
++ #if defined(_SC_KERNEL_BITS)
++ long bits = sysconf(_SC_KERNEL_BITS);
++ #endif
++ long cpu = sysconf (_SC_CPU_VERSION);
++
++ switch (cpu)
++ {
++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
++ case CPU_PA_RISC2_0:
++ #if defined(_SC_KERNEL_BITS)
++ switch (bits)
++ {
++ case 64: puts ("hppa2.0w"); break;
++ case 32: puts ("hppa2.0n"); break;
++ default: puts ("hppa2.0"); break;
++ } break;
++ #else /* !defined(_SC_KERNEL_BITS) */
++ puts ("hppa2.0"); break;
++ #endif
++ default: puts ("hppa1.0"); break;
++ }
++ exit (0);
++ }
++EOF
++ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
++ test -z "$HP_ARCH" && HP_ARCH=hppa
++ fi ;;
++ esac
++ if [ ${HP_ARCH} = "hppa2.0w" ]
++ then
++ eval $set_cc_for_build
++
++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
++ # generating 64-bit code. GNU and HP use different nomenclature:
++ #
++ # $ CC_FOR_BUILD=cc ./config.guess
++ # => hppa2.0w-hp-hpux11.23
++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
++ # => hppa64-hp-hpux11.23
++
++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
++ grep -q __LP64__
++ then
++ HP_ARCH="hppa2.0w"
++ else
++ HP_ARCH="hppa64"
++ fi
++ fi
++ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
++ exit ;;
++ ia64:HP-UX:*:*)
++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
++ echo ia64-hp-hpux${HPUX_REV}
++ exit ;;
++ 3050*:HI-UX:*:*)
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #include <unistd.h>
++ int
++ main ()
++ {
++ long cpu = sysconf (_SC_CPU_VERSION);
++ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
++ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
++ results, however. */
++ if (CPU_IS_PA_RISC (cpu))
++ {
++ switch (cpu)
++ {
++ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
++ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
++ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
++ default: puts ("hppa-hitachi-hiuxwe2"); break;
++ }
++ }
++ else if (CPU_IS_HP_MC68K (cpu))
++ puts ("m68k-hitachi-hiuxwe2");
++ else puts ("unknown-hitachi-hiuxwe2");
++ exit (0);
++ }
++EOF
++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
++ { echo "$SYSTEM_NAME"; exit; }
++ echo unknown-hitachi-hiuxwe2
++ exit ;;
++ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
++ echo hppa1.1-hp-bsd
++ exit ;;
++ 9000/8??:4.3bsd:*:*)
++ echo hppa1.0-hp-bsd
++ exit ;;
++ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
++ echo hppa1.0-hp-mpeix
++ exit ;;
++ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
++ echo hppa1.1-hp-osf
++ exit ;;
++ hp8??:OSF1:*:*)
++ echo hppa1.0-hp-osf
++ exit ;;
++ i*86:OSF1:*:*)
++ if [ -x /usr/sbin/sysversion ] ; then
++ echo ${UNAME_MACHINE}-unknown-osf1mk
++ else
++ echo ${UNAME_MACHINE}-unknown-osf1
++ fi
++ exit ;;
++ parisc*:Lites*:*:*)
++ echo hppa1.1-hp-lites
++ exit ;;
++ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
++ echo c1-convex-bsd
++ exit ;;
++ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
++ if getsysinfo -f scalar_acc
++ then echo c32-convex-bsd
++ else echo c2-convex-bsd
++ fi
++ exit ;;
++ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
++ echo c34-convex-bsd
++ exit ;;
++ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
++ echo c38-convex-bsd
++ exit ;;
++ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
++ echo c4-convex-bsd
++ exit ;;
++ CRAY*Y-MP:*:*:*)
++ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*[A-Z]90:*:*:*)
++ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
++ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
++ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
++ -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*TS:*:*:*)
++ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*T3E:*:*:*)
++ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*SV1:*:*:*)
++ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ *:UNICOS/mp:*:*)
++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
++ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
++ 5000:UNIX_System_V:4.*:*)
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
++ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
++ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
++ exit ;;
++ sparc*:BSD/OS:*:*)
++ echo sparc-unknown-bsdi${UNAME_RELEASE}
++ exit ;;
++ *:BSD/OS:*:*)
++ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
++ exit ;;
++ *:FreeBSD:*:*)
++ case ${UNAME_MACHINE} in
++ pc98)
++ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ amd64)
++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ *)
++ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ esac
++ exit ;;
++ i*:CYGWIN*:*)
++ echo ${UNAME_MACHINE}-pc-cygwin
++ exit ;;
++ *:MINGW*:*)
++ echo ${UNAME_MACHINE}-pc-mingw32
++ exit ;;
++ i*:windows32*:*)
++ # uname -m includes "-pc" on this system.
++ echo ${UNAME_MACHINE}-mingw32
++ exit ;;
++ i*:PW*:*)
++ echo ${UNAME_MACHINE}-pc-pw32
++ exit ;;
++ *:Interix*:*)
++ case ${UNAME_MACHINE} in
++ x86)
++ echo i586-pc-interix${UNAME_RELEASE}
++ exit ;;
++ authenticamd | genuineintel | EM64T)
++ echo x86_64-unknown-interix${UNAME_RELEASE}
++ exit ;;
++ IA64)
++ echo ia64-unknown-interix${UNAME_RELEASE}
++ exit ;;
++ esac ;;
++ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
++ echo i${UNAME_MACHINE}-pc-mks
++ exit ;;
++ 8664:Windows_NT:*)
++ echo x86_64-pc-mks
++ exit ;;
++ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
++ # How do we know it's Interix rather than the generic POSIX subsystem?
++ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
++ # UNAME_MACHINE based on the output of uname instead of i386?
++ echo i586-pc-interix
++ exit ;;
++ i*:UWIN*:*)
++ echo ${UNAME_MACHINE}-pc-uwin
++ exit ;;
++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
++ echo x86_64-unknown-cygwin
++ exit ;;
++ p*:CYGWIN*:*)
++ echo powerpcle-unknown-cygwin
++ exit ;;
++ prep*:SunOS:5.*:*)
++ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ *:GNU:*:*)
++ # the GNU system
++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
++ exit ;;
++ *:GNU/*:*:*)
++ # other systems with GNU libc and userland
++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
++ exit ;;
++ i*86:Minix:*:*)
++ echo ${UNAME_MACHINE}-pc-minix
++ exit ;;
++ alpha:Linux:*:*)
++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
++ EV5) UNAME_MACHINE=alphaev5 ;;
++ EV56) UNAME_MACHINE=alphaev56 ;;
++ PCA56) UNAME_MACHINE=alphapca56 ;;
++ PCA57) UNAME_MACHINE=alphapca56 ;;
++ EV6) UNAME_MACHINE=alphaev6 ;;
++ EV67) UNAME_MACHINE=alphaev67 ;;
++ EV68*) UNAME_MACHINE=alphaev68 ;;
++ esac
++ objdump --private-headers /bin/sh | grep -q ld.so.1
++ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
++ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
++ exit ;;
++ arm*:Linux:*:*)
++ eval $set_cc_for_build
++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ARM_EABI__
++ then
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ else
++ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ARM_PCS_VFP
++ then
++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++ else
++ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
++ fi
++ fi
++ exit ;;
++ avr32*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ cris:Linux:*:*)
++ echo cris-axis-linux-gnu
++ exit ;;
++ crisv32:Linux:*:*)
++ echo crisv32-axis-linux-gnu
++ exit ;;
++ frv:Linux:*:*)
++ echo frv-unknown-linux-gnu
++ exit ;;
++ i*86:Linux:*:*)
++ LIBC=gnu
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #ifdef __dietlibc__
++ LIBC=dietlibc
++ #endif
++EOF
++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
++ exit ;;
++ ia64:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ m32r*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ m68*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ mips:Linux:*:* | mips64:Linux:*:*)
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #undef CPU
++ #undef ${UNAME_MACHINE}
++ #undef ${UNAME_MACHINE}el
++ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
++ CPU=${UNAME_MACHINE}el
++ #else
++ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
++ CPU=${UNAME_MACHINE}
++ #else
++ CPU=
++ #endif
++ #endif
++EOF
++ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
++ ;;
++ or32:Linux:*:*)
++ echo or32-unknown-linux-gnu
++ exit ;;
++ padre:Linux:*:*)
++ echo sparc-unknown-linux-gnu
++ exit ;;
++ parisc64:Linux:*:* | hppa64:Linux:*:*)
++ echo hppa64-unknown-linux-gnu
++ exit ;;
++ parisc:Linux:*:* | hppa:Linux:*:*)
++ # Look for CPU level
++ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
++ PA7*) echo hppa1.1-unknown-linux-gnu ;;
++ PA8*) echo hppa2.0-unknown-linux-gnu ;;
++ *) echo hppa-unknown-linux-gnu ;;
++ esac
++ exit ;;
++ ppc64:Linux:*:*)
++ echo powerpc64-unknown-linux-gnu
++ exit ;;
++ ppc:Linux:*:*)
++ echo powerpc-unknown-linux-gnu
++ exit ;;
++ s390:Linux:*:* | s390x:Linux:*:*)
++ echo ${UNAME_MACHINE}-ibm-linux
++ exit ;;
++ sh64*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ sh*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ sparc:Linux:*:* | sparc64:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ tile*:Linux:*:*)
++ echo ${UNAME_MACHINE}-tilera-linux-gnu
++ exit ;;
++ vax:Linux:*:*)
++ echo ${UNAME_MACHINE}-dec-linux-gnu
++ exit ;;
++ x86_64:Linux:*:*)
++ echo x86_64-unknown-linux-gnu
++ exit ;;
++ xtensa*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ i*86:DYNIX/ptx:4*:*)
++ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
++ # earlier versions are messed up and put the nodename in both
++ # sysname and nodename.
++ echo i386-sequent-sysv4
++ exit ;;
++ i*86:UNIX_SV:4.2MP:2.*)
++ # Unixware is an offshoot of SVR4, but it has its own version
++ # number series starting with 2...
++ # I am not positive that other SVR4 systems won't match this,
++ # I just have to hope. -- rms.
++ # Use sysv4.2uw... so that sysv4* matches it.
++ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
++ exit ;;
++ i*86:OS/2:*:*)
++ # If we were able to find `uname', then EMX Unix compatibility
++ # is probably installed.
++ echo ${UNAME_MACHINE}-pc-os2-emx
++ exit ;;
++ i*86:XTS-300:*:STOP)
++ echo ${UNAME_MACHINE}-unknown-stop
++ exit ;;
++ i*86:atheos:*:*)
++ echo ${UNAME_MACHINE}-unknown-atheos
++ exit ;;
++ i*86:syllable:*:*)
++ echo ${UNAME_MACHINE}-pc-syllable
++ exit ;;
++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
++ echo i386-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ i*86:*DOS:*:*)
++ echo ${UNAME_MACHINE}-pc-msdosdjgpp
++ exit ;;
++ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
++ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
++ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
++ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
++ else
++ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
++ fi
++ exit ;;
++ i*86:*:5:[678]*)
++ # UnixWare 7.x, OpenUNIX and OpenServer 6.
++ case `/bin/uname -X | grep "^Machine"` in
++ *486*) UNAME_MACHINE=i486 ;;
++ *Pentium) UNAME_MACHINE=i586 ;;
++ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
++ esac
++ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
++ exit ;;
++ i*86:*:3.2:*)
++ if test -f /usr/options/cb.name; then
++ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
++ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
++ elif /bin/uname -X 2>/dev/null >/dev/null ; then
++ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
++ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
++ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
++ && UNAME_MACHINE=i586
++ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
++ && UNAME_MACHINE=i686
++ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
++ && UNAME_MACHINE=i686
++ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
++ else
++ echo ${UNAME_MACHINE}-pc-sysv32
++ fi
++ exit ;;
++ pc:*:*:*)
++ # Left here for compatibility:
++ # uname -m prints for DJGPP always 'pc', but it prints nothing about
++ # the processor, so we play safe by assuming i586.
++ # Note: whatever this is, it MUST be the same as what config.sub
++ # prints for the "djgpp" host, or else GDB configury will decide that
++ # this is a cross-build.
++ echo i586-pc-msdosdjgpp
++ exit ;;
++ Intel:Mach:3*:*)
++ echo i386-pc-mach3
++ exit ;;
++ paragon:*:*:*)
++ echo i860-intel-osf1
++ exit ;;
++ i860:*:4.*:*) # i860-SVR4
++ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
++ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
++ else # Add other i860-SVR4 vendors below as they are discovered.
++ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
++ fi
++ exit ;;
++ mini*:CTIX:SYS*5:*)
++ # "miniframe"
++ echo m68010-convergent-sysv
++ exit ;;
++ mc68k:UNIX:SYSTEM5:3.51m)
++ echo m68k-convergent-sysv
++ exit ;;
++ M680?0:D-NIX:5.3:*)
++ echo m68k-diab-dnix
++ exit ;;
++ M68*:*:R3V[5678]*:*)
++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
++ OS_REL=''
++ test -r /etc/.relid \
++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
++ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4; exit; } ;;
++ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
++ OS_REL='.3'
++ test -r /etc/.relid \
++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
++ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
++ echo m68k-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ mc68030:UNIX_System_V:4.*:*)
++ echo m68k-atari-sysv4
++ exit ;;
++ TSUNAMI:LynxOS:2.*:*)
++ echo sparc-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ rs6000:LynxOS:2.*:*)
++ echo rs6000-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
++ echo powerpc-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ SM[BE]S:UNIX_SV:*:*)
++ echo mips-dde-sysv${UNAME_RELEASE}
++ exit ;;
++ RM*:ReliantUNIX-*:*:*)
++ echo mips-sni-sysv4
++ exit ;;
++ RM*:SINIX-*:*:*)
++ echo mips-sni-sysv4
++ exit ;;
++ *:SINIX-*:*:*)
++ if uname -p 2>/dev/null >/dev/null ; then
++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
++ echo ${UNAME_MACHINE}-sni-sysv4
++ else
++ echo ns32k-sni-sysv
++ fi
++ exit ;;
++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
++ # says <Richard.M.Bartel@ccMail.Census.GOV>
++ echo i586-unisys-sysv4
++ exit ;;
++ *:UNIX_System_V:4*:FTX*)
++ # From Gerald Hewes <hewes@openmarket.com>.
++ # How about differentiating between stratus architectures? -djm
++ echo hppa1.1-stratus-sysv4
++ exit ;;
++ *:*:*:FTX*)
++ # From seanf@swdc.stratus.com.
++ echo i860-stratus-sysv4
++ exit ;;
++ i*86:VOS:*:*)
++ # From Paul.Green@stratus.com.
++ echo ${UNAME_MACHINE}-stratus-vos
++ exit ;;
++ *:VOS:*:*)
++ # From Paul.Green@stratus.com.
++ echo hppa1.1-stratus-vos
++ exit ;;
++ mc68*:A/UX:*:*)
++ echo m68k-apple-aux${UNAME_RELEASE}
++ exit ;;
++ news*:NEWS-OS:6*:*)
++ echo mips-sony-newsos6
++ exit ;;
++ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
++ if [ -d /usr/nec ]; then
++ echo mips-nec-sysv${UNAME_RELEASE}
++ else
++ echo mips-unknown-sysv${UNAME_RELEASE}
++ fi
++ exit ;;
++ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
++ echo powerpc-be-beos
++ exit ;;
++ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
++ echo powerpc-apple-beos
++ exit ;;
++ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
++ echo i586-pc-beos
++ exit ;;
++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
++ echo i586-pc-haiku
++ exit ;;
++ SX-4:SUPER-UX:*:*)
++ echo sx4-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-5:SUPER-UX:*:*)
++ echo sx5-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-6:SUPER-UX:*:*)
++ echo sx6-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-7:SUPER-UX:*:*)
++ echo sx7-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-8:SUPER-UX:*:*)
++ echo sx8-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-8R:SUPER-UX:*:*)
++ echo sx8r-nec-superux${UNAME_RELEASE}
++ exit ;;
++ Power*:Rhapsody:*:*)
++ echo powerpc-apple-rhapsody${UNAME_RELEASE}
++ exit ;;
++ *:Rhapsody:*:*)
++ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
++ exit ;;
++ *:Darwin:*:*)
++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
++ case $UNAME_PROCESSOR in
++ i386)
++ eval $set_cc_for_build
++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++ grep IS_64BIT_ARCH >/dev/null
++ then
++ UNAME_PROCESSOR="x86_64"
++ fi
++ fi ;;
++ unknown) UNAME_PROCESSOR=powerpc ;;
++ esac
++ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
++ exit ;;
++ *:procnto*:*:* | *:QNX:[0123456789]*:*)
++ UNAME_PROCESSOR=`uname -p`
++ if test "$UNAME_PROCESSOR" = "x86"; then
++ UNAME_PROCESSOR=i386
++ UNAME_MACHINE=pc
++ fi
++ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
++ exit ;;
++ *:QNX:*:4*)
++ echo i386-pc-qnx
++ exit ;;
++ NEO-?:NONSTOP_KERNEL:*:*)
++ echo neo-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ NSE-?:NONSTOP_KERNEL:*:*)
++ echo nse-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ NSR-?:NONSTOP_KERNEL:*:*)
++ echo nsr-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ *:NonStop-UX:*:*)
++ echo mips-compaq-nonstopux
++ exit ;;
++ BS2000:POSIX*:*:*)
++ echo bs2000-siemens-sysv
++ exit ;;
++ DS/*:UNIX_System_V:*:*)
++ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
++ exit ;;
++ *:Plan9:*:*)
++ # "uname -m" is not consistent, so use $cputype instead. 386
++ # is converted to i386 for consistency with other x86
++ # operating systems.
++ if test "$cputype" = "386"; then
++ UNAME_MACHINE=i386
++ else
++ UNAME_MACHINE="$cputype"
++ fi
++ echo ${UNAME_MACHINE}-unknown-plan9
++ exit ;;
++ *:TOPS-10:*:*)
++ echo pdp10-unknown-tops10
++ exit ;;
++ *:TENEX:*:*)
++ echo pdp10-unknown-tenex
++ exit ;;
++ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
++ echo pdp10-dec-tops20
++ exit ;;
++ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
++ echo pdp10-xkl-tops20
++ exit ;;
++ *:TOPS-20:*:*)
++ echo pdp10-unknown-tops20
++ exit ;;
++ *:ITS:*:*)
++ echo pdp10-unknown-its
++ exit ;;
++ SEI:*:*:SEIUX)
++ echo mips-sei-seiux${UNAME_RELEASE}
++ exit ;;
++ *:DragonFly:*:*)
++ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
++ exit ;;
++ *:*VMS:*:*)
++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
++ case "${UNAME_MACHINE}" in
++ A*) echo alpha-dec-vms ; exit ;;
++ I*) echo ia64-dec-vms ; exit ;;
++ V*) echo vax-dec-vms ; exit ;;
++ esac ;;
++ *:XENIX:*:SysV)
++ echo i386-pc-xenix
++ exit ;;
++ i*86:skyos:*:*)
++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
++ exit ;;
++ i*86:rdos:*:*)
++ echo ${UNAME_MACHINE}-pc-rdos
++ exit ;;
++ i*86:AROS:*:*)
++ echo ${UNAME_MACHINE}-pc-aros
++ exit ;;
++esac
++
++#echo '(No uname command or uname output not recognized.)' 1>&2
++#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
++
++eval $set_cc_for_build
++cat >$dummy.c <<EOF
++#ifdef _SEQUENT_
++# include <sys/types.h>
++# include <sys/utsname.h>
++#endif
++main ()
++{
++#if defined (sony)
++#if defined (MIPSEB)
++ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
++ I don't know.... */
++ printf ("mips-sony-bsd\n"); exit (0);
++#else
++#include <sys/param.h>
++ printf ("m68k-sony-newsos%s\n",
++#ifdef NEWSOS4
++ "4"
++#else
++ ""
++#endif
++ ); exit (0);
++#endif
++#endif
++
++#if defined (__arm) && defined (__acorn) && defined (__unix)
++ printf ("arm-acorn-riscix\n"); exit (0);
++#endif
++
++#if defined (hp300) && !defined (hpux)
++ printf ("m68k-hp-bsd\n"); exit (0);
++#endif
++
++#if defined (NeXT)
++#if !defined (__ARCHITECTURE__)
++#define __ARCHITECTURE__ "m68k"
++#endif
++ int version;
++ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
++ if (version < 4)
++ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
++ else
++ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
++ exit (0);
++#endif
++
++#if defined (MULTIMAX) || defined (n16)
++#if defined (UMAXV)
++ printf ("ns32k-encore-sysv\n"); exit (0);
++#else
++#if defined (CMU)
++ printf ("ns32k-encore-mach\n"); exit (0);
++#else
++ printf ("ns32k-encore-bsd\n"); exit (0);
++#endif
++#endif
++#endif
++
++#if defined (__386BSD__)
++ printf ("i386-pc-bsd\n"); exit (0);
++#endif
++
++#if defined (sequent)
++#if defined (i386)
++ printf ("i386-sequent-dynix\n"); exit (0);
++#endif
++#if defined (ns32000)
++ printf ("ns32k-sequent-dynix\n"); exit (0);
++#endif
++#endif
++
++#if defined (_SEQUENT_)
++ struct utsname un;
++
++ uname(&un);
++
++ if (strncmp(un.version, "V2", 2) == 0) {
++ printf ("i386-sequent-ptx2\n"); exit (0);
++ }
++ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
++ printf ("i386-sequent-ptx1\n"); exit (0);
++ }
++ printf ("i386-sequent-ptx\n"); exit (0);
++
++#endif
++
++#if defined (vax)
++# if !defined (ultrix)
++# include <sys/param.h>
++# if defined (BSD)
++# if BSD == 43
++ printf ("vax-dec-bsd4.3\n"); exit (0);
++# else
++# if BSD == 199006
++ printf ("vax-dec-bsd4.3reno\n"); exit (0);
++# else
++ printf ("vax-dec-bsd\n"); exit (0);
++# endif
++# endif
++# else
++ printf ("vax-dec-bsd\n"); exit (0);
++# endif
++# else
++ printf ("vax-dec-ultrix\n"); exit (0);
++# endif
++#endif
++
++#if defined (alliant) && defined (i860)
++ printf ("i860-alliant-bsd\n"); exit (0);
++#endif
++
++ exit (1);
++}
++EOF
++
++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
++ { echo "$SYSTEM_NAME"; exit; }
++
++# Apollos put the system type in the environment.
++
++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
++
++# Convex versions that predate uname can use getsysinfo(1)
++
++if [ -x /usr/convex/getsysinfo ]
++then
++ case `getsysinfo -f cpu_type` in
++ c1*)
++ echo c1-convex-bsd
++ exit ;;
++ c2*)
++ if getsysinfo -f scalar_acc
++ then echo c32-convex-bsd
++ else echo c2-convex-bsd
++ fi
++ exit ;;
++ c34*)
++ echo c34-convex-bsd
++ exit ;;
++ c38*)
++ echo c38-convex-bsd
++ exit ;;
++ c4*)
++ echo c4-convex-bsd
++ exit ;;
++ esac
++fi
++
++cat >&2 <<EOF
++$0: unable to guess system type
++
++This script, last modified $timestamp, has failed to recognize
++the operating system you are using. It is advised that you
++download the most up to date version of the config scripts from
++
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++and
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
++
++If the version you run ($0) is already up to date, please
++send the following data and any information you think might be
++pertinent to <config-patches@gnu.org> in order to provide the needed
++information to handle your system.
++
++config.guess timestamp = $timestamp
++
++uname -m = `(uname -m) 2>/dev/null || echo unknown`
++uname -r = `(uname -r) 2>/dev/null || echo unknown`
++uname -s = `(uname -s) 2>/dev/null || echo unknown`
++uname -v = `(uname -v) 2>/dev/null || echo unknown`
++
++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
++/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
++
++hostinfo = `(hostinfo) 2>/dev/null`
++/bin/universe = `(/bin/universe) 2>/dev/null`
++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
++/bin/arch = `(/bin/arch) 2>/dev/null`
++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
++
++UNAME_MACHINE = ${UNAME_MACHINE}
++UNAME_RELEASE = ${UNAME_RELEASE}
++UNAME_SYSTEM = ${UNAME_SYSTEM}
++UNAME_VERSION = ${UNAME_VERSION}
++EOF
++
++exit 1
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "timestamp='"
++# time-stamp-format: "%:y-%02m-%02d"
++# time-stamp-end: "'"
++# End:
+--- adjtimex-1.29.orig/debian/compat
++++ adjtimex-1.29/debian/compat
+@@ -0,0 +1 @@
++5
+--- adjtimex-1.29.orig/debian/changelog
++++ adjtimex-1.29/debian/changelog
+@@ -0,0 +1,753 @@
++adjtimex (1.29-2.2) unstable; urgency=low
++
++ * Non-maintainer upload.
++ * Make the package multiarch-ready: add build-arch and build-indep
++ build targets
++ * Fix pending l10n issues. Debconf translations:
++ - Vietnamese (Clytie Siddall). Closes: #601529
++ - Brazilian Portuguese (Flamarion Jorge). Closes: #610409
++ - Dutch (Michiel Sikkes). Closes: #625744
++
++ -- Christian Perrier <bubulle@debian.org> Mon, 04 Jul 2011 07:06:43 +0200
++
++adjtimex (1.29-2.1) unstable; urgency=low
++
++ * Non-maintainer upload.
++ * Fix pending l10n issues. Debconf translations:
++ - Czech (Martin Sin). Closes: #589289
++ - Bokmål, Norwegian (Bjørn Steensrud). Closes: #600279
++
++ -- Christian Perrier <bubulle@debian.org> Tue, 19 Oct 2010 07:14:50 +0200
++
++adjtimex (1.29-2) unstable; urgency=low
++
++ * debian/postinst: check conffile for corruption (Closes:Bug#571633,
++ thanks to Savvas Radevic <vicedar@gmail.com> for the idea, though I
++ chose a different implementation.)
++
++ -- James R. Van Zandt <jrv@debian.org> Tue, 25 May 2010 20:49:21 -0400
++
++adjtimex (1.29-1) unstable; urgency=low
++
++ * New upstream release: Document the --force-adjust
++ option. --force-adjust suppresses warning printouts. Relax sanity
++ check to +- 1 percent.
++
++ * debian/adjtimexconfig: Use --force-adjust option, so adjustment is
++ applied even if system clock is way off. (Thanks to Santiago Vila
++ <sanvila@unex.es> for helping to diagnose the problem.
++ Closes:Bug#557949, #559882)
++
++ * debian/adjtimex.init: fix LSB comment header: require $local_fs, start
++ in S
++
++ -- James R. Van Zandt <jrv@debian.org> Fri, 16 Apr 2010 20:08:49 -0400
++
++adjtimex (1.28-4) unstable; urgency=low
++
++ * Update debconf template translations:
++ Swedish (Thanks to Martin Bagge <brother@bsnet.se>, Closes:Bug#572579)
++
++ -- James R. Van Zandt <jrv@debian.org> Wed, 17 Mar 2010 19:51:06 -0400
++
++adjtimex (1.28-3) unstable; urgency=low
++
++ * Update debconf template translations:
++ Swedish (Thanks to Martin Bagge <brother@bsnet.se>, Closes:Bug#562932)
++ Russian (thanks to Yuri Kozlov <yuray@komyakino.ru>, Closes:Bug#563347)
++ Finnish (thanks to Esko =?UTF-8?Q?Araj=C3=A4rvi?= <edu@iki.fi>,
++ Closes:Bug#564508)
++
++ * debian/control: bump standards version to 3.8.4 (no changes needed)
++
++ -- James R. Van Zandt <jrv@debian.org> Mon, 08 Feb 2010 20:19:44 -0500
++
++adjtimex (1.28-2) unstable; urgency=low
++
++ * Move Swedish and Russian template translations to the correct directory
++ (thanks to Martin Bagge <brother@bsnet.se> for pointing out the
++ problem).
++
++ * debian/control: bump standards version to 3.8.3 (no changes needed)
++
++ -- James R. Van Zandt <jrv@debian.org> Fri, 05 Feb 2010 21:42:54 -0500
++
++adjtimex (1.28-1) unstable; urgency=low
++
++ * New upstream release: (compare): Correctly apply +-500 ppm sanity
++ check (Thanks to Jacques luder <j.luder@laposte.net>)
++
++ * Update debconf template translations:
++ Swedish (thanks to: Martin Bagge <brother@bsnet.se>,
++ Closes:Bug#533567)
++ Russian (thanks to: Yuri Kozlov <yuray@komyakino.ru>,
++ Closes:Bug#532068)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 07 Nov 2009 11:59:29 -0500
++
++adjtimex (1.27.1-4) unstable; urgency=low
++
++ * Update translations:
++ Japanese (thanks to: Hideki Yamane, henrich @ debian.or.jp.
++ Closes:Bug#538242)
++ Spanish (Thanks to Francisco Javier Cuadrado <fcocuadrado@gmail.com>,
++ Closes:Bug#538425)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 26 Jul 2009 17:36:16 -0400
++
++adjtimex (1.27.1-3) unstable; urgency=low
++
++ * Update translations:
++ Japanese (thanks to: Hideki Yamane, henrich @ debian.or.jp.
++ Closes:Bug#525233)
++ Swedish (thanks to: Martin Bagge <brother@bsnet.se>. Closes:Bug#525924)
++ Spanish (thanks to: Francisco Javier Cuadrado <fcocuadrado@gmail.com>,
++ Closes:Bug#528621)
++ Russian (thanks to: Yuri Kozlov <yuray@komyakino.ru>, Closes:Bug#529047)
++ Czech (thanks to: Martin Sin <martin.sin@zshk.cz>, Closes:Bug#529652)
++
++ -- James R. Van Zandt <jrv@debian.org> Tue, 26 May 2009 20:47:42 -0400
++
++adjtimex (1.27.1-2) unstable; urgency=low
++
++ * Debconf templates and debian/control reviewed by the debian-l10n-
++ english team as part of the Smith review project. Closes: #519431
++ * Update translation:
++ French (Closes:Bug#520986)
++
++ -- James R. Van Zandt <jrv@debian.org> Wed, 20 May 2009 22:03:38 -0400
++
++adjtimex (1.27.1-1) unstable; urgency=low
++
++ * New upstream release. Provide workaround if linux/rtc.h
++ is missing (Closes:#308864)
++
++ * debian/rules: delete config temporaries, but not config.h.in
++ * debian/control: bump version to 3.8.1 (no changes needed)
++
++ * Update translations:
++ Japanese (Thanks to: henrich@debian.or.jp [188] Closes:Bug#522188)
++ Czech (Thanks to: martin.sin@zshk.cz [219] Closes:Bug#522193)
++ Swedish (Thanks to: brother@bsnet.se [194] Closes:Bug#522979)
++ Basque (Thanks to: pi+debian@beobide.net [207] Closes:Bug#523079)
++ Italian (Thanks to: vinz65@gmail.com [197] Closes:Bug#523419)
++ Spanish (Thanks to: fcocuadrado@gmail.com [193] Closes:Bug#523915)
++ Russian (Thanks to: yuray@komyakino.ru [223] Closes:Bug#524069)
++ German (Thanks to: schanzi_@gmx.de [226] Closes:Bug#524224)
++ Portuguese (Thanks to: carloslisboa@gmail.com [170] Closes:Bug#524283)
++ Danish (Thanks to: debian@overbygaard.dk [209] Closes:Bug#524368)
++ Galician (Thanks to: mvillarino@gmail.com [216] Closes:Bug#524397)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 18 Apr 2009 16:35:22 -0400
++
++adjtimex (1.27-1) unstable; urgency=low
++
++ * New upstream release. If using update interrupt, sanity check the
++ delay. Sometimes the status includes an update complete flag, but it
++ actually didn't wait. Fall back to another method of reading RTC
++ (closes:Bug#517732) Calculate RTC correction as PPM of RTC time
++ (Thanks to Alain Guibert, closes:Bug#308863).
++
++ * debian/control: add ${misc:Depends} per lintian warning.
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 22 Mar 2009 21:54:51 -0400
++
++adjtimex (1.26-2) unstable; urgency=low
++
++ * debian/templates: Clarify wording: ask about running "when installed
++ or upgraded" not just "at installation time" (thanks to Uwe Storbeck
++ <uwe@ibr.ch> and Michael Meskes <meskes@debian.org>,
++ Closes:Bug#514987)
++
++ * debian/postinst: don't prepend path to command running adjtimexconfig
++ to silence lintian complaint. (The package management system already
++ puts /usr/sbin in path, because that's where install-info is.)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 14 Feb 2009 11:46:24 -0500
++
++adjtimex (1.26-1) unstable; urgency=low
++
++ * New upstream release. Fix a possible hang with the Intersil ISL1208,
++ one of those new non-PC-compatible RTCs. Cleanly exits with an error
++ message, instead of either hang or returning garbage. (Thanks to Alain
++ Guibert).
++
++ * debian/control: bump Debian policy version to 3.8.0 (no changes needed)
++
++ * debian/rules: use "filter" instead of "findstring" to parse
++ DEB_BUILD_OPTIONS.
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 17 Aug 2008 17:52:14 -0400
++
++adjtimex (1.25-1) unstable; urgency=low
++
++ * New upstream release. Set an alarm to avoid blocking even if /dev/rtc
++ never becomes readable, then fall back to busywait. New --nointerrupt
++ option to force busywait without first waiting for the interrupt
++ timeout (thanks to Alain Guibert). (closes:Bug#477637,Bug#474337).
++ Update man page (closes:Bug#435956).
++
++ -- James R. Van Zandt <jrv@debian.org> Fri, 08 Aug 2008 19:43:38 -0400
++
++adjtimex (1.24-1) unstable; urgency=low
++
++ * New upstream release
++
++ * adjtimex.c: Reorganize cmos_read_time() to properly integrate the
++ fallback case for when /dev/rtc has no interrupts. Make this fallback
++ actually work. fixes partially(?) Debian bug #460065 (Thanks to Alain
++ Guibert <alguibert@free.fr>) (closes:Bug#471203)
++
++ * (cmos_read_time): Fix Y2K bug: read century from byte 50, instead of
++ assuming we're in the range 1969-2068.
++
++ * Implement second kind of busywait (busywait_second_change): when
++ /dev/rtc interrupt is not available, fallbacks to loops around
++ ioctl(RTC_RD_TIME) until the RTC second changes. Patch applies to
++ adjtimex 1.23 above first no-interrupt-fallback.patch fixes
++ partially(?) Debian bug #460065 (Thanks to: Alain Guibert
++ <alguibert@free.fr>)
++
++ * (cmos_read_time) If /dev/rtc does not exist then automatically
++ fallback to /dev/rtc0, so it works even without symlink. (Thanks to:
++ Alain Guibert <alguibert@free.fr>)
++
++ * adjtimex.c (main): fix typo in options handling (thanks to Miroslav
++ Lichvar <mlichvar@redhat.com>)
++
++ * debian/control: bump Debian policy version to 3.7.3 (no changes needed)
++
++ * debian/dirs: don't install empty directory /usr/bin
++
++ -- James R. Van Zandt <jrv@debian.org> Fri, 04 Apr 2008 22:05:01 -0400
++
++adjtimex (1.23-1) unstable; urgency=low
++
++ * New upstream release
++
++ * adjtimex.c (compare): In case of absence of /etc/adjtime, do not fail,
++ and do not force users to manually create it with 0.0
++ content. Instead, proceed assuming zero values (meaning RTC does not
++ drift). Also replace redundant code by a call to
++ get_cmos_adjustment(). README: Rewrite USAGE paragraph. Remove point
++ about creating zero adjfile. Document new behaviour without
++ adjfile. Remove reference to the long outdated clock(8). Update URL
++ for hwclock(8). (Thanks to Alain Guibert <alguibert@free.fr>,
++ closes:bug#445448)
++
++ * adjtimex.c (busy_wait): timestamp more closely the RTC clock beat
++ (thanks to Alain Guibert <alguibert at free.fr>, see Debian
++ bug#443814). (usage): --directisa switch forces adjtimex to poll the
++ update-in-process (UIP) flag of the CMOS clock (thanks to Alain
++ Guibert <alguibert at free.fr>, closes:bug#443773).
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 06 Oct 2007 21:57:04 -0400
++
++adjtimex (1.22-1) unstable; urgency=low
++
++ * New upstream release: fix these bugs in ntpdate output
++ interpretation (closes:bug#438718):
++ adjtimex has a bug in evaluating the output of ntpdate, because
++ 1. it assumes ntpdate outputs "adjust time server", but ntpdate
++ may output "step time server" also
++ 2. it doesnt stop at last line but as soon as it has found "filter
++ offset:" lines, and because of this it will not find the "offset ..."
++ information in the last line.
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 23 Sep 2007 12:51:52 -0400
++
++adjtimex (1.21.1-3) unstable; urgency=low
++
++ * update German translation of debconf templates, thanks to Erik Schanze
++ <eriks@debian.org> and Helge Kreutzmann
++ <debian@helgefjell.de>(closes:#436080)
++
++ * debian/rules don't ignore failure of "make distclean"
++
++ * debian/adjtimex.init: make LSB compliant
++
++ -- James R. Van Zandt <jrv@debian.org> Mon, 06 Aug 2007 21:39:47 -0400
++
++adjtimex (1.21.1-2) unstable; urgency=low
++
++ * Update French translation of debconf templates, thanks to Christian
++ Perrier <bubulle@debian.org> (closes:Bug#403472)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 7 Jan 2007 18:10:32 -0500
++
++adjtimex (1.21.1-1) unstable; urgency=low
++
++ * New upstream release.
++
++ * adjtimex.c: don't declare adjtimex syscall (should already be getting
++ the declaration from sys/timex.h) Thanks to Andreas Jochens
++ <aj@andaco.de> (closes:#390989)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 7 Oct 2006 08:04:52 -0400
++
++adjtimex (1.21-2) unstable; urgency=low
++
++ * Makefile: correct version number to 1.21 (error in importing upstream
++ sources)
++
++ * debian/control: depend on po-debconf
++
++ -- James R. Van Zandt <jrv@debian.org> Fri, 6 Oct 2006 20:41:00 -0400
++
++adjtimex (1.21-1) unstable; urgency=low
++
++ * New upstream release. use /dev/rtc if available (closes:#196692). Use
++ heuristic to correct for DST changes or lacking --utc flag
++ (closes:#308396). check return code in probe_time() so if root
++ privileges are needed (e.g. "adjtimex -r") and lacking, command will
++ fail rather than printing bogus results. (closes:#364060)
++
++ * debian/postinst: start with invoke-rc.d if available (closes:#367746)
++
++ * debian/control: update to policy 3.7.2
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 20 May 2006 08:33:05 -0400
++
++adjtimex (1.20-7) unstable; urgency=low
++
++ * debian/README.Debian: correct references to files, which are no longer
++ in /usr/doc/adjtimex (closes:#365761)
++ * debian/rules: declare debhelper compat level 5
++ * debian/control: build-depends on debhelper ver 5
++
++ -- James R. Van Zandt <jrv@debian.org> Thu, 4 May 2006 21:54:33 -0400
++
++adjtimex (1.20-6) unstable; urgency=low
++
++ * control: depend on debconf | debconf-2.0 (closes: #331733), update to
++ policy 3.6.2
++ * debian/po/de.po: fix spelling error in German translation, thanks to
++ Philipp Meier <meier@meisterbohne.de> (closes: #279254)
++ * debian/po/sv.po: Swedish translation for debconf template, courtesy
++ of Daniel Nylander <yeager@lidkoping.net> (closes: #333124)
++ * debian/po: Add Portugese translation for debconf template, courtesy of
++ Miguel Figueiredo <elmig@debianpt.org> (closes: #336333)
++ * debian/po: Add Russian translation for debconf template, courtesy of
++ Yuri Kozlov <kozlov.y@gmail.com> (closes: #337967)
++ * debian/copyright: update FSF address.
++
++ -- James R. Van Zandt <jrv@debian.org> Fri, 25 Nov 2005 21:04:08 -0500
++
++adjtimex (1.20-5) unstable; urgency=low
++
++ * debian/po/vi.po: Vietnamese translation for debconf template, courtesy
++ of Clytie Siddall <clytie@riverland.net.au> (closes:Bug#307600)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 7 May 2005 11:58:47 -0400
++
++adjtimex (1.20-4) unstable; urgency=low
++
++ * debian/po/cs.po: Czech translation for debconf template, courtesy of
++ Martin Šín <martin.sin@seznam.cz> (closes:Bug#304377)
++
++ -- James R. Van Zandt <jrv@debian.org> Mon, 25 Apr 2005 20:14:42 -0400
++
++adjtimex (1.20-3) unstable; urgency=low
++
++ * debian/adjtimex.init: adjust printout to conform to Debian standard,
++ output error to stderr (Thanks to Thomas Hood, closes:bug#294824)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 13 Mar 2005 17:20:28 -0500
++
++adjtimex (1.20-2) unstable; urgency=low
++
++ * debian/po/de.po: replace corrupted file (closes: #250250)
++
++ -- James R. Van Zandt <jrv@debian.org> Mon, 20 Sep 2004 20:08:47 -0400
++
++adjtimex (1.20-1) unstable; urgency=low
++
++ * New upstream release
++
++ * adjtimex.c (compare): in "compare" or "adjust", return immediately
++ after printing last result, instead of sleeping an extra $interval
++ seconds. (Thanks to Alain Guibert <derogaton at oreka.com>,
++ closes:Bug#243652)
++
++ * postinst: remove /etc/rcS.d/S20adjtimex link if configured not to run
++ at startup (thanks to Mario 'BitKoenig' Holbe, closes:Bug#267229)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 19 Sep 2004 12:41:37 -0400
++
++adjtimex (1.19-1) unstable; urgency=high
++
++ * copyright: report upstream source address (closes:Bug#269691)
++
++ * control: don't depend on either mawk or awk, since either works and
++ awk is required (closes:Bug#267228)
++
++ * New upstream release
++
++ * adjtimex.c (compare): Account for the current frequency value
++ when calculating the recommended frequency value. Simplify
++ calculation of recommended tick. (compare): print estimated system
++ error in ppm instead of obscure "second diff".
++
++ * adjtimex.8: use 2^16 instead of the more obscure 1<<16.
++
++ * adjtimex.c: revert to poll-wait instead of using /dev/rtc, because the
++ latter only provides time with one second precision and so gives
++ wildly inaccurate adjustments. (closes:Bug#269498,Bug#265839)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 11 Sep 2004 16:01:52 -0400
++
++adjtimex (1.18-1.1) unstable; urgency=medium
++
++ * Non-maintainer upload prepared by Joshua Kwan and Ken Bloom.
++ * Applied patch from Jurij Smakov <jurij@wooyd.org> to #263401:
++ - Fixes the regular expression used to extract the baseline value
++ from the adjtimex output. Closes: #263401
++ - Replaces non-POSIX compliant calls to ('tail -1') by the
++ POSIX-compliant ones ('tail -n 1')
++ - Cosmetic changes to the adjtimexconfig output, making it
++ consistent with the general Debian style.
++ * Add German debconf template translations (closes: #250250)
++
++ -- Ken Bloom <kabloom@ucdavis.edu> Thu, 12 Aug 2004 23:34:33 -0700
++
++adjtimex (1.18-1) unstable; urgency=low
++
++ * New upstream release
++
++ * call reset_time_status() only when explicitly told to (thanks to Alain
++ Guibert <derogaton at oreka.com>, closes:bug#243031)
++
++ * Add debconf translations for Japanese (closes:bug#223462), Danish
++ (closes:bug#239865), and Brazilian Portuguese (closes:bug#228281).
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 11 Apr 2004 18:32:33 -0400
++
++adjtimex (1.17-1) unstable; urgency=low
++
++ * New upstream release
++
++ * control: compliant with Debian policy version 3.6.1
++
++ * es.po: decode "quoted-printable" encoding.
++
++ * adjtimex.c: update email
++ (main): If adjtimex() returns an error, print HZ and legal ranges
++ for tick and freq. (thanks to Sami Farin <safari at iki.fi>)
++ (review): calculate reasonable tick and frequency when HZ != 100.
++ (cmos_init): use /dev/rtc when available (thanks to Richard
++ Henderson <rth at twiddle.net>).
++
++ * adjtimex.c: --status switch sets clock status (courtesy of Alain
++ Guibert <derogaton at oreka.com>) (closes:bug#242732)
++
++ * adjtimexconfig: set reasonable tick and frequency when HZ !=
++ 100. (closes:Bug#241726)
++
++ * adjtimex.c (longopt): fix spelling to match documentation: --esterror
++ and --maxerror (thanks to Alain Guibert) (fixes:Bug#241863)
++
++ -- James R. Van Zandt <jrv@debian.org> Sat, 3 Apr 2004 21:13:09 -0500
++
++adjtimex (1.16-3) unstable; urgency=low
++
++ * Dutch translation of gettext debconf templates (courtesy of Michiel Sikkes, closes:bug#215162)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 12 Oct 2003 17:33:55 -0400
++
++adjtimex (1.16-2) unstable; urgency=low
++
++ * Polish translation of gettext debconf templates (courtesy of Bartosz
++ Zapalowski, closes:bug#208955)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 7 Sep 2003 16:26:30 -0400
++
++adjtimex (1.16-1) unstable; urgency=low
++
++ * New upstream release (closes:Bug#204382)(closes:Bug#204377)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sun, 24 Aug 2003 20:52:32 -0400
++
++adjtimex (1.15.1-2) unstable; urgency=low
++
++ * gettext-based debconf templates (closes:bug#205788)
++ * French translation of gettext debconf templates (closes:Bug#206430)
++ * Spanish translation of gettext debconf templates (closes:Bug#197485)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 24 Aug 2003 18:01:56 -0400
++
++adjtimex (1.15.1-1) unstable; urgency=low
++
++ * New upstream release. Add explicit newlines in multi-line help text
++ (closes:bug#194858)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 31 May 2003 20:53:14 -0400
++
++adjtimex (1.15-1) unstable; urgency=low
++
++ * New upstream release. Now compiles on ia64 (closes:bug#141655).
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Wed, 30 Apr 2003 19:38:11 -0400
++
++adjtimex (1.14-1) unstable; urgency=low
++
++ * New Upstream Release. Expanded documentation (closes:bug#142967)
++ * convert to debhelper
++ * debian/control: depend on debconf
++ * debian/postinst: configure adjtimex to run on startup, and run
++ adjtimexconfig on installation, only if asked by sysadmin (via
++ debconf) (closes:bug#158047)
++ * debian/postrm: purge debconf db entry
++ * debian/adjtimexconfig: config file is now /etc/default/adjtimex
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 27 Apr 2003 21:28:40 -0400
++
++adjtimex (1.13-1) unstable; urgency=low
++
++ * New upstream release (closes:Bug#127483)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 6 Jan 2002 21:06:23 -0500
++
++adjtimex (1.12-3) unstable; urgency=low
++
++ * New maintainer email (fix remaining references)
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 9 Dec 2001 15:25:06 -0500
++
++adjtimex (1.12-2) unstable; urgency=low
++
++ * New maintainer email
++
++ -- James R. Van Zandt <jrv@debian.org> Sun, 9 Dec 2001 13:24:59 -0500
++
++adjtimex (1.12-1) unstable; urgency=low
++
++ * New upstream release
++ * debian/control: move Build-Depends entry to source section
++ (closes:bug#91928). Policy version 3.5.2
++ * debian/rules: by default, compile without -g option. Honor
++ DEB_BUILD_OPTIONS.
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Wed, 22 Nov 2000 01:37:58 -0500
++
++adjtimex (1.11-3) unstable; urgency=low
++
++ * adjtimexconfig: install new values in /etc/adjtimex.conf rather than
++ the startup script /etc/init.d/adjtimex (thanks to Zsolt Szabo
++ <szazs@mm.bme.hu>).
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 30 Sep 2000 09:34:58 -0400
++
++adjtimex (1.11-2) unstable; urgency=low
++
++ * build-depends on debmake
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sun, 3 Sep 2000 13:50:02 -0400
++
++adjtimex (1.11-1) unstable; urgency=low
++
++ * /etc/init.d/adjtimex: restart|force-reload also run adjtimex
++ (closes:bug#69514), add comment explaining precedence of
++ /etc/adjtimex.conf
++
++ * New upstream release
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Mon, 28 Aug 2000 21:19:48 -0400
++
++adjtimex (1.10-1) frozen unstable; urgency=high
++
++ * New upstream release - security fix: use popen() to recover output from
++ ntpdate, instead of an unsafe temporary file (thanks to Colin Phipps
++ <crp22@cam.ac.uk>) (closes:bug#56752)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Tue, 1 Feb 2000 21:29:03 -0500
++
++adjtimex (1.9-2) unstable; urgency=low
++
++ * Suggest ntpdate (closes:bug#56751)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Mon, 31 Jan 2000 19:26:16 -0500
++
++adjtimex (1.9-1) unstable; urgency=low
++
++ * New upstream release
++ * Removed pointer to /usr/doc/copyright/GPL
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Mon, 3 Jan 2000 21:34:59 -0500
++
++adjtimex (1.8.1-1) unstable; urgency=low
++
++ * New upstream release (closes:bug#52637)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Thu, 16 Dec 1999 20:13:43 -0500
++
++adjtimex (1.8-4) unstable; urgency=low
++
++ * Change references from /usr/sbin/adjtimex to /sbin/adjtimex in
++ adjtimexconfig
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Tue, 2 Nov 1999 20:21:48 -0500
++
++adjtimex (1.8-3) unstable; urgency=low
++
++ * *Really* install binary into /sbin, so it is available
++ even if /usr is not mounted (closes:Bug#44399)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 30 Oct 1999 17:57:57 -0400
++
++adjtimex (1.8-2) unstable; urgency=low
++
++ * Install compatibility symlink /usr/doc/adjtimex.
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sun, 24 Oct 1999 10:54:01 -0400
++
++adjtimex (1.8-1) unstable; urgency=low
++
++ * New upstream release: Install binary into /sbin, so it is available
++ even if /usr is not mounted (closes:Bug#44399)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Mon, 6 Sep 1999 13:08:15 -0400
++
++adjtimex (1.7-2) unstable; urgency=low
++
++ * Link against glibc2.1
++ * Upgrade to FHS
++ * Include full license statement in copyright file
++ * Revise GPL reference in copyright file
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 4 Sep 1999 12:04:34 -0400
++
++adjtimex (1.7-1) unstable; urgency=low
++
++ * install configuration file in /etc/init.d rather than /etc/rc.boot
++ closes: #30120, #32436.
++ * New upstream release (incorporates Paul Slootman's alpha patch)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 28 Nov 1998 20:33:38 -0500
++
++adjtimex (1.6-2) unstable; urgency=low
++
++ * corrected reference in man page: clock -> hwclock (Bug#27854)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 24 Oct 1998 14:40:45 -0400
++
++adjtimex (1.6-1.1) unstable; urgency=low
++
++ * non-maintainer (binary-only) upload for Alpha
++ * changed architecture back to 'any'. Why should it be i386 only?
++ * don't use syscall1() to declare adjtimex() for Alpha
++
++ -- Paul Slootman <paul@debian.org> Tue, 8 Sep 1998 20:42:52 +0200
++
++adjtimex (1.6-1) unstable; urgency=low
++
++ * New upstream release: Default log file is "/var/log/clocks.log".
++ Create log file if it does not exist. (Bug#25834)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 22 Aug 1998 20:33:22 -0400
++
++adjtimex (1.5-3) unstable; urgency=low
++
++ * architecture is i386 only
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Mon, 29 Jun 1998 19:35:22 -0400
++
++adjtimex (1.5-2) unstable; urgency=low
++
++ * eliminate question in postinst, by eliminating postinst entirely
++ (Bug#22288)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sun, 7 Jun 1998 20:51:42 -0400
++
++adjtimex (1.5-1) frozen unstable; urgency=low
++
++ * New upstream release. No functional changes, but adjtimex is now
++ covered by the GNU GPL. (Bug#21358)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Mon, 20 Apr 1998 21:38:53 -0400
++
++adjtimex (1.4-2) unstable; urgency=low
++
++ * Ensure that changelog is compressed *before* calculating md5sum
++ (Bug#19266)
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Sat, 14 Mar 1998 20:47:52 -0500
++
++adjtimex (1.4-1) unstable; urgency=low
++
++ * New upstream release. Log times for long-term estimation of drifts.
++
++ -- James R. Van Zandt <jrv@vanzandt.mv.com> Thu, 11 Dec 1997 21:48:01 -0500
++
++adjtimex (1.3-3) stable; urgency=medium
++
++ * Moved temporary files from /tmp to /etc, to eliminate security
++ hole (bug #11610).
++
++ -- Jim Van Zandt <jrv@vanzandt.mv.com> Sun, 3 Aug 1997 11:34:48 -0400
++
++adjtimex (1.3-2) stable; urgency=medium
++
++ * Removed conflict with xntp, since ntpdate from the xntp package
++ is still compatible with adjtimex.
++
++ -- Jim Van Zandt <jrv@vanzandt.mv.com> Wed, 12 Mar 1997 21:01:05 -0500
++
++adjtimex (1.3-1) unstable; urgency=HIGH
++
++ * New upstream version: Previous version allows 2.0 kernel to reset
++ the CMOS clock periodically. Now using different method of
++ preventing this.
++ * New --compare switch to compare system and CMOS clocks (replacing
++ the separate program clockdiff) and suggest better values of time
++ parameters. New --adjust switch to actually install the suggested
++ values. GNU format long switches, including --help and --version.
++ * Revised conftimex to use --adjust switch instead of clockdiff.
++ * Renamed conftimex to adjtimexconfig per Debian recommendation.
++ * Added conftimex man page.
++ * Revised messages in postinst to better explain what is going on.
++ * Conflicts with xntp
++ * New maintainer
++
++ -- Jim Van Zandt <jrv@vanzandt.mv.com> Sat, 1 Mar 1997 18:03:35 -0500
++
++adjtimex (1.2-5) unstable; urgency=LOW
++
++ * New packaging format
++ * Corrected comment in /etc/rc.boot/adjtimex
++ * Corrected the installation of doc files
++
++ -- Michael Meskes <meskes@debian.org> Wed, 18 Sep 1996 09:22:51 +0200
++
++Fri May 17 12:48:07 MET DST 1996 Michael Meskes (meskes@debian.org)
++
++ adjtimex (1.2-1):
++
++ * Added Debian Linux package maintenance system files.
++
++Fri May 17 20:39:30 MET DST 1996 Michael Meskes (meskes@debian.org)
++
++ adjtimex (1.2-2):
++
++ * Corrected mode for /etc/rc.boot/adjtimex
++
++ * Added conftimex script
++
++ * Automatically configure system
++
++Sun Jun 30 13:17:53 MET DST 1996 Michael Meskes (meskes@debian.org)
++
++ adjtimex (1.2-3):
++
++ * Corrected rules file for new naming scheme
++
++ * Gzip manpage
++
++ * Strip binaries
++
++Tue Jul 2 10:01:35 MET DST 1996 Michael Meskes (meskes@debian.org)
++
++ adjtimex (1.2-4):
++
++ * Really say what we're doing in postinst (Bug#3474)
++
++
+--- adjtimex-1.29.orig/debian/adjtimexconfig.8
++++ adjtimex-1.29/debian/adjtimexconfig.8
+@@ -0,0 +1,41 @@
++.\"{{{ Title Emacs major mode should be: -*- nroff -*-
++.TH ADJTIMEXCONFIG 8 "April 27, 2003"
++.\"}}}
++.\"{{{ Name
++.SH NAME
++adjtimexconfig \- find kernel clock variables and save for reboots
++.\"}}}
++.\"{{{ Synopsis
++.SH SYNOPSIS
++.ad l
++.\" commands only
++.B /sbin/adjtimexconfig
++.\"}}}
++.\"{{{ Config
++.SH DESCRIPTION
++This script uses \fBadjtimex\fP(8) to find values for the kernel
++variables \fBtick\fP and \fBfrequency\fP that will make the system
++clock approximately agree with the CMOS clock. It then saves these
++values in the configuration file \fI/etc/default/adjtimex\fP so the
++settings will be restored on every boot, when
++\fI/etc/init.d/adjtimex\fP runs.
++.P
++\fPadjtimexconfig\fP uses the drift rate recorded in
++\fI/etc/adjtime\fP to adjust the times it reads from the CMOS clock.
++If you find the CMOS clock has a systematic drift, read the
++\fBclock\fP(8) or \fBhwclock\fP(8) manual page, modify
++\fI/etc/adjtime\fP as required, and run \fBadjtimexconfig\fP again.
++.SH AUTHOR
++Michael Meskes <meskes@debian.org>.
++.\"}}}
++.\"{{{
++.SH FILES
++.nf
++\fI/etc/default/adjtimex\fP
++\fI/etc/init.d/adjtimex\fP
++.fi
++.\"}}}
++.\"{{{ See also
++.SH "SEE ALSO"
++.BR adjtimex "(8), "clock "(8), "hwclock "(8), "ntpd (8)
++.\"}}}
+--- adjtimex-1.29.orig/debian/adjust
++++ adjtimex-1.29/debian/adjust
+@@ -0,0 +1,15 @@
++ mode: 16384
++ offset: 0
++ frequency: 0
++ maxerror: 0
++ esterror: 0
++ status: 0
++time_constant: 0
++ precision: 0
++ tolerance: 0
++ tick: 0
++ raw time: 0s 0us = 0.000000
++for this kernel:
++ USER_HZ = 100 (nominally 100 ticks per second)
++ 9000 <= tick <= 11000
++ -33554432 <= frequency <= 33554432
+--- adjtimex-1.29.orig/debian/dirs
++++ adjtimex-1.29/debian/dirs
+@@ -0,0 +1,3 @@
++usr/sbin
++sbin
++usr/share/man/man8
+--- adjtimex-1.29.orig/debian/adjtimexconfig
++++ adjtimex-1.29/debian/adjtimexconfig
+@@ -0,0 +1,67 @@
++#!/bin/sh
++
++conffile=/etc/default/adjtimex
++startfile=/etc/init.d/adjtimex
++
++echo -n "Comparing clocks (this will take 70 sec)..."
++
++# Get the parameters
++
++/sbin/adjtimex --print --tick 0 >/etc/adj.adjust 2>/dev/null
++baseline=`awk '/<= tick/{print ($1+$NF)/2}' /etc/adj.adjust`
++hz=`awk '/USER_HZ/{print $3}' /etc/adj.adjust`
++/sbin/adjtimex --tick $baseline --frequency 0
++/sbin/adjtimex --adjust --force-adjust >/etc/adj.adjust
++echo "done."
++ticks=`tail -n 1 /etc/adj.adjust|awk '{print $6}'`
++freq=`tail -n 1 /etc/adj.adjust|awk '{print $7}'`
++# cat /etc/adj.adjust
++# echo hz=$hz baseline=$baseline ticks=$ticks freq=$freq
++rm /etc/adj.adjust
++adjt=`awk "BEGIN{print (($ticks-$baseline)*$hz + $freq/65536.)*.0864}"`
++echo -n "Adjusting system time by ${adjt} sec/day to agree with CMOS clock..."
++
++# Recreate /etc/adjtimex.conf if necessary
++
++if [ -f $conffile ]; then
++# echo "using existing $conffile";
++ true;
++else
++cat >$conffile <<EOF
++# $conffile - configuration file for adjtimex(8)
++#
++# you may adjust these values manually or by calling /usr/sbin/adjtimexconfig
++#
++# This file is sourced by $startfile
++#
++TICK=$TICK
++FREQ=$FREQ
++
++EOF
++fi
++
++# Reset values in $conffile
++
++sed -e "s/^TICK=.*/TICK=$ticks/" \
++ -e "s/^FREQ=.*/FREQ=$freq/" \
++ $conffile >$conffile.TMP && \
++ mv $conffile.TMP $conffile
++
++# grep "TICK=" /etc/init.d/adjtimex | cut -d'#' -f1 > /etc/adj.tick
++# grep "FREQ=" /etc/init.d/adjtimex | cut -d'#' -f1 > /etc/adj.freq
++#
++# TICKLINE="`echo -n "TICK="$ticks" # old: "; cat /etc/adj.tick`"
++# FREQLINE="`echo -n "FREQ="$freq" # old: "; cat /etc/adj.freq`"
++#
++# cp /etc/init.d/adjtimex /etc/init.d/adjtimex.TMP
++# sed -e "s/^TICK=.*/$TICKLINE/" -e "s/^FREQ=.*/$FREQLINE/" \
++# < /etc/init.d/adjtimex.TMP > /etc/init.d/adjtimex
++#
++# if [ -s /etc/init.d/adjtimex ]
++# then
++# rm -f /etc/init.d/adjtimex.TMP
++# fi
++# rm -f /etc/adj.tick /etc/adj.freq /etc/adj.adjust
++rm -f /etc/adj.adjust
++echo "done."
++
+--- adjtimex-1.29.orig/debian/postrm
++++ adjtimex-1.29/debian/postrm
+@@ -0,0 +1,25 @@
++#! /bin/sh -e
++
++case "$1" in
++ purge)
++ rm -f /etc/adjtimex.conf /etc/default/adjtimex
++ update-rc.d adjtimex remove >/dev/null
++ if [ -e /usr/share/debconf/confmodule ]; then
++ # Source debconf library.
++ . /usr/share/debconf/confmodule
++ # Remove my changes to the db.
++echo "removing debconf db entries"
++ db_purge
++echo "removed debconf db entries"
++ fi
++ ;;
++ remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
++ exit 0
++ ;;
++ *)
++ echo "postrm called with unknown argument \`$1'" >&2
++ exit 0
++ ;;
++esac
++
++#DEBHELPER#
+--- adjtimex-1.29.orig/debian/control
++++ adjtimex-1.29/debian/control
+@@ -0,0 +1,20 @@
++Source: adjtimex
++Section: admin
++Priority: optional
++Maintainer: James R. Van Zandt <jrv@debian.org>
++Build-Depends: debhelper (>= 5), po-debconf
++Standards-Version: 3.8.4
++
++Package: adjtimex
++Architecture: any
++Depends: ${misc:Depends}, ${shlibs:Depends}, debconf | debconf-2.0
++Suggests: ntpdate
++Description: kernel time variables configuration utility
++ This package provides a utility to manipulate the kernel time
++ variables. For a machine connected to the Internet, or equipped with
++ a precision oscillator or radio clock, the best way to keep the
++ system clock accurate is using NTP (Network Time Protocol). However,
++ for a standalone or intermittently connected machine, you may use
++ adjtimex instead to at least correct for systematic drift. It can
++ optionally adjust the system clock using the CMOS clock as a
++ reference, and can log times for long-term estimation of drift rates.
+--- adjtimex-1.29.orig/debian/adjtimex.init
++++ adjtimex-1.29/debian/adjtimex.init
+@@ -0,0 +1,45 @@
++#!/bin/sh
++#
++# Run ADJTIMEX at startup.
++
++### BEGIN INIT INFO
++# Provides: adjtimex
++# Required-Start: $local_fs
++# Required-Stop:
++# Should-Start:
++# Should-Stop:
++# Default-Start: S
++# Default-Stop:
++# Short-Description: set the kernel time variables
++# Description: set the kernel time variables
++### END INIT INFO
++
++test -x /sbin/adjtimex || exit 0
++
++# default values
++TICK=10000
++FREQ=0
++
++# values in $cfg take precedence over the values here
++cfg=/etc/default/adjtimex
++
++if [ -f $cfg ]; then
++ . $cfg
++fi
++
++case "$1" in
++ start|restart|force-reload)
++ echo -n "Regulating system clock..."
++ /sbin/adjtimex -tick "$TICK" -frequency "$FREQ"
++ echo "done."
++ ;;
++ stop|status)
++ ;;
++ *)
++ echo "/etc/init.d/adjtimex: unknown command $1" >&2
++ echo "Usage: /etc/init.d/adjtimex {start|stop|restart|force-reload}" >&2
++ exit 3
++ ;;
++esac
++
++exit 0
+--- adjtimex-1.29.orig/debian/copyright
++++ adjtimex-1.29/debian/copyright
+@@ -0,0 +1,28 @@
++This package was debianized by James R. Van Zandt jrv@debian.org on
++Thu, 11 Dec 1997 21:48:01 -0500.
++
++This package was put together by Jim Van Zandt <jrv@debian.org>,
++who also maintains the program and therefore used the master sources.
++
++Copyright:
++
++adjtimex is Copyright (C) 1997 Steven S. Dick and James R. Van Zandt
++
++ This program 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 dated June,
++ 1991, or any later version.
++
++ This program 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 program; if not, write to the Free Software
++ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
++ 02110-1301, USA.
++
++On Debian GNU/Linux systems, the complete text of the GNU Public
++License can be found in `/usr/share/common-licenses/'
++
+--- adjtimex-1.29.orig/debian/templates
++++ adjtimex-1.29/debian/templates
+@@ -0,0 +1,35 @@
++# These templates have been reviewed by the debian-l10n-english
++# team
++#
++# If modifications/additions/rewording are needed, please ask
++# debian-l10n-english@lists.debian.org for advice.
++#
++# Even minor modifications require translation updates and such
++# changes should be coordinated with translators and reviewers.
++
++Template: adjtimex/run_daemon
++Type: boolean
++Default: true
++_Description: Should adjtimex be run at installation and at every startup?
++ Running adjtimex at system startup will set the kernel time parameters to
++ the values in /etc/default/adjtimex.
++ .
++ You should not choose this option if you just want to
++ use adjtimex to inspect the current parameters.
++
++Template: adjtimex/compare_rtc
++Type: boolean
++Default: true
++#flag:comment:2
++# Translators: do not translate "tick" and "frequency"
++_Description: Run adjtimexconfig when adjtimex is installed or upgraded?
++ The adjtimexconfig script will use adjtimex to find values for the kernel
++ variables "tick" and "frequency" that will make the system clock approximately
++ agree with the hardware clock (also known as the CMOS clock). It then
++ saves these values in the configuration file /etc/default/adjtimex so the
++ settings will be restored on every boot, when /etc/init.d/adjtimex runs.
++ .
++ The script takes 70 seconds to run, so running it for every upgrade
++ may be a waste of time. Alternatively, you can run adjtimexconfig
++ manually when needed, or determine the kernel variables by using other
++ methods and set them manually in /etc/default/adjtimex.
+--- adjtimex-1.29.orig/debian/docs
++++ adjtimex-1.29/debian/docs
+@@ -0,0 +1,2 @@
++README
++README.ru
+--- adjtimex-1.29.orig/debian/config
++++ adjtimex-1.29/debian/config
+@@ -0,0 +1,8 @@
++#! /bin/sh -e
++
++# Source debconf library.
++. /usr/share/debconf/confmodule
++
++db_input medium adjtimex/run_daemon || true
++db_input medium adjtimex/compare_rtc || true
++db_go
+--- adjtimex-1.29.orig/debian/rules
++++ adjtimex-1.29/debian/rules
+@@ -0,0 +1,117 @@
++#!/usr/bin/make -f
++# Sample debian/rules that uses debhelper.
++# GNU copyright 1997 to 1999 by Joey Hess.
++
++# Uncomment this to turn on verbose mode.
++#export DH_VERBOSE=1
++
++# These are used for cross-compiling and for saving the configure script
++# from having to guess our platform (since we know it already)
++DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
++DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
++
++
++package=adjtimex
++
++CFLAGS = -Wall -g
++INSTALL = install
++INSTALL_FILE = $(INSTALL) -p -o root -g root -m 644
++INSTALL_PROGRAM = $(INSTALL) -p -o root -g root -m 755
++INSTALL_SCRIPT = $(INSTALL) -p -o root -g root -m 755
++INSTALL_DIR = $(INSTALL) -p -d -o root -g root -m 755
++
++ifneq (,$(filter noopt,$(DEB_BUILD_OPTIONS)))
++CFLAGS += -O0
++else
++CFLAGS += -O2
++endif
++ifeq (,$(filter nostrip,$(DEB_BUILD_OPTIONS)))
++INSTALL_PROGRAM += -s
++endif
++# parallel build isn't worth while
++
++config.status: configure
++ dh_testdir
++ # configure the package.
++ ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info
++ touch config.h
++
++build: build-arch build-indep
++
++build-arch: build-stamp
++
++build-indep: build-stamp
++
++build-stamp: config.status
++ dh_testdir
++
++ # compile the package.
++ $(MAKE) CFLAGS="$(CFLAGS)"
++ #/usr/bin/docbook-to-man debian/adjtimex.sgml > adjtimex.1
++
++ touch build-stamp
++
++clean:
++ dh_testdir
++ dh_testroot
++ rm -f build-stamp
++
++ # clean up after the build process.
++ debconf-updatepo
++ [ ! -f Makefile ] || $(MAKE) veryclean
++ rm -rf adjtimex *.o config.cache config.log config.status
++ -test -r /usr/share/misc/config.sub && \
++ cp -f /usr/share/misc/config.sub config.sub
++ -test -r /usr/share/misc/config.guess && \
++ cp -f /usr/share/misc/config.guess config.guess
++
++
++ dh_clean
++
++install: build
++ dh_testdir
++ dh_testroot
++ dh_clean -k
++ dh_installdirs
++
++ # install the package into debian/$(package).
++ $(INSTALL_PROGRAM) adjtimex $(CURDIR)/debian/$(package)/sbin
++ $(INSTALL_SCRIPT) debian/adjtimexconfig \
++ $(CURDIR)/debian/$(package)/usr/sbin/adjtimexconfig
++
++# Build architecture-independent files here.
++binary-indep: build install
++# We have nothing to do
++
++# Build architecture-dependent files here.
++binary-arch: build install
++ dh_testdir
++ dh_testroot
++ dh_installdebconf
++ dh_installdocs
++ dh_installexamples
++ dh_installmenu
++# dh_installlogrotate
++# dh_installemacsen
++# dh_installpam
++# dh_installmime
++ dh_installinit -n
++ dh_installcron
++ dh_installman adjtimex.8 debian/adjtimexconfig.8
++ dh_installinfo
++# dh_undocumented
++ dh_installchangelogs ChangeLog
++ dh_link
++ dh_strip
++ dh_compress
++ dh_fixperms
++# dh_makeshlibs
++ dh_installdeb
++# dh_perl
++ dh_shlibdeps
++ dh_gencontrol
++ dh_md5sums
++ dh_builddeb
++
++binary: binary-indep binary-arch
++.PHONY: build clean binary-indep binary-arch binary install
+--- adjtimex-1.29.orig/debian/postinst
++++ adjtimex-1.29/debian/postinst
+@@ -0,0 +1,123 @@
++#! /bin/sh
++
++set -e
++
++# Source debconf library.
++. /usr/share/debconf/confmodule
++
++# old scripts
++oldfile=/etc/adjtimex.conf
++olderfile=/etc/rc.boot/adjtimex
++# new starting script
++startfile=/etc/init.d/adjtimex
++# new configuration file
++conffile=/etc/default/adjtimex
++
++create_adjtimex_conf()
++{
++
++ TICK=10000
++ FREQ=0
++
++ if [ -f $oldfile ]; then
++ TICK=`awk '
++ BEGIN{tick=10000;}
++ /[ \t]*TICK[ \t]*=[ \t]*"?[0-9]+"?/ {
++ sub(/[ \t]*TICK[ \t]*=[ \t]*"?/,"");
++ tick=$0+0;
++ }
++ END {print tick;}
++ ' $oldfile`
++
++ FREQ=`awk '
++ BEGIN{freq=0;}
++ /[ \t]*FREQ[ \t]*=[ \t]*"?[0-9]+"?/ {
++ sub(/[ \t]*FREQ[ \t]*=[ \t]*"?/,"");
++ freq=$0+0;
++ }
++ END {print freq;}
++ ' $oldfile`
++
++# echo "parameters from $oldfile: TICK=$TICK FREQ=$FREQ";
++ else
++ if [ -f $olderfile ]; then
++ TICK=`awk '
++ BEGIN{tick=10000;}
++ /[ \t]*TICK[ \t]*=[ \t]*"?[0-9]+"?/ {
++ sub(/[ \t]*TICK[ \t]*=[ \t]*"?/,"");
++ tick=$0+0;
++ }
++ END {print tick;}
++ ' $olderfile`
++
++ FREQ=`awk '
++ BEGIN{freq=0;}
++ /[ \t]*FREQ[ \t]*=[ \t]*"?[0-9]+"?/ {
++ sub(/[ \t]*FREQ[ \t]*=[ \t]*"?/,"");
++ freq=$0+0;
++ }
++ END {print freq;}
++ ' $olderfile`
++
++# echo "parameters from $olderfile: TICK=$TICK FREQ=$FREQ";
++ fi
++ fi
++
++ if [ -f $conffile ]; then
++# echo "using existing $conffile";
++ true;
++ else
++ if [ -d /etc/default ]; then true; else mkdir /etc/default; fi
++ cat >$conffile <<EOF
++# $conffile - configuration file for adjtimex(8)
++#
++# you may adjust these values manually or by calling /usr/sbin/adjtimexconfig
++#
++# This file is sourced by $startfile
++#
++TICK=$TICK
++FREQ=$FREQ
++
++EOF
++ fi
++
++ rm -f $oldfile $olderfile
++}
++
++
++case "$1" in
++ configure)
++
++# A previous installation may have left a corrupt conffile.
++# The regexp matches only blank lines, comments, and integer assignments:
++ egrep -qv '^([:space:]*(#.*)?|[:space:]*[a-zA-Z][a-zA-Z0-9]*[:space:]*=[:space:]*[0-9]+[:space:]*)$' $conffile && rm -f $conffile
++
++ create_adjtimex_conf
++
++ db_get adjtimex/run_daemon
++ if [ "$RET" = "true" ]; then
++ update-rc.d adjtimex start 20 S . >/dev/null
++
++ if which invoke-rc.d >/dev/null 2>&1; then
++ invoke-rc.d adjtimex start
++ else
++ /etc/init.d/adjtimex start
++ fi
++ fi
++
++ db_get adjtimex/compare_rtc
++ if [ "$RET" = "true" ]; then
++ adjtimexconfig
++ fi
++
++ ;;
++ abort-upgrade|abort-remove|abort-deconfigure)
++ exit 0
++ ;;
++ *)
++ echo "postinst called with unknown argument \`$1'" >&2
++ exit 0
++ ;;
++esac
++
++#DEBHELPER#
+--- adjtimex-1.29.orig/debian/README.Debian
++++ adjtimex-1.29/debian/README.Debian
+@@ -0,0 +1,21 @@
++adjtimex for DEBIAN
++----------------------
++
++This is the Debian Linux prepackaged version of adjtimex.
++
++This package was put together by Jim Van Zandt <jrv@debian.org>,
++who also maintains the program and therefore used the master sources.
++
++further Information:
++
++* adjtimex manpage
++* copying policy
++ /usr/share/doc/adjtimex/copyright
++ (or debian/copyright in the source package)
++* changelog for debian package
++ /usr/share/doc/adjtimex/changelog.Debian
++* adjtimex's README:
++ /usr/share/doc/adjtimex/README
++
++
++James R. Van Zandt <jrv@debian.org>, Sun, 7 Mar 1999 21:58:51 -0500
+--- adjtimex-1.29.orig/debian/po/fr.po
++++ adjtimex-1.29/debian/po/fr.po
+@@ -0,0 +1,90 @@
++# Translation of adjtimex debconf screen to French
++# Copyright (C) 2005-2009 Debian French l10n team <debian-l10n-french@lists.debian.org>
++# This file is distributed under the same license as the adjtimex package.
++#
++# Christian Perrier <bubulle@debian.org>, 2006, 2009.
++# Translators:
++msgid ""
++msgstr ""
++"Project-Id-Version: fr\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-03-17 07:45+0100\n"
++"Last-Translator: Christian Perrier <bubulle@debian.org>\n"
++"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
++"Language: fr\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.11.4\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Faut-il lancer adjtimex lors de l'installation et à chaque démarrage du "
++"système ?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Adjtimex peut être lancé au démarrage du système afin de régler les "
++"paramètres d'horloge du noyau en fonction des valeurs contenues dans /etc/"
++"default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Vous ne devriez pas choisir cette option si vous souhaitez simplement vous "
++"servir d'adjtimex pour consulter les paramètres actuels."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++"Faut-il lancer adjtimexconfig lors de l'installation ou de la mise à jour ?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Le script adjtimexconfig utilise adjtimex afin de trouver les valeurs "
++"appropriées pour les variables du noyau concernant le battement (« tick ») "
++"et la fréquence d'horloge. Cela permettra à l'horloge du système d'être à "
++"peu près en accord avec l'horloge matérielle (parfois appelée « horloge "
++"CMOS »). Ces valeurs seront alors conservées dans le fichier de "
++"configuration /etc/default/adjtimex ce qui permettra de les restaurer à "
++"chaque démarrage quand /etc/init.d/adjtimex s'exécutera. "
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"La durée d'exécution du script est de 70 secondes, ce qui peut être vu comme "
++"une perte de temps au démarrage. Vous pouvez également utiliser "
++"adjtimexconfig vous-même plus tard ou déterminer les valeurs des variables "
++"du noyau d'une autre manière. Ces valeurs devront ensuite être placées dans /"
++"etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/it.po
++++ adjtimex-1.29/debian/po/it.po
+@@ -0,0 +1,85 @@
++# ITALIAN TRANSLATION OF ADJTIMEX'S.PO-DEBCONF FILE
++# COPYRIGHT (C) 2009 THE ADJTIMEX'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the adjtimex package.
++#
++# Vincenzo Campanella <vinz65@gmail.com>, 2009.
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.26-3\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-04-01 14:15+0200\n"
++"Last-Translator: Vincenzo Campanella <vinz65@gmail.com>\n"
++"Language-Team: Italian <tp@lists.linux.it>\n"
++"Language: it\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.11.4\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "Eseguire adjtimex all'installazione e con ogni avvio del sistema?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"L'esecuzione di adjtimex all'avvio del sistema imposterà i parametri di "
++"tempo del kernel ai valori contenuti in «/etc/default/adjtimex»."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Non si dovrebbe scegliere questa opzione se si prevede di usare adjtimex "
++"solo per verificare i parametri attuali."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Eseguire adjtimexconfig quando adjtimex viene installato o aggiornato?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Lo script adjtimexconfig userà adjtimex per trovare i valori delle variabili "
++"del kernel «tick» e «frequency» per fare in modo che l'orario del sistema "
++"coincida approssimativamente a quello dell'orologio dell'hardware (anche "
++"conosciuto come orologio CMOS). Questi valori vengono poi salvati nel file "
++"di configurazione «/etc/default/adjtimex», in modo che le impostazioni "
++"vengano ripristinate a ogni avvio, quando «/etc/init.d/adjtimex» viene "
++"eseguito."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Lo script necessita di 70 secondi per essere eseguito, per cui lanciarlo a "
++"ogni aggiornamento potrebbe essere uno spreco di tempo. In alternativa è "
++"possibile eseguire manualmente adjtimexconfig quando è necessario, oppure "
++"determinare le variabili del kernel usando altri metodi e impostandole "
++"manualmente in «/etc/default/adjtimex»."
+--- adjtimex-1.29.orig/debian/po/pt_BR.po
++++ adjtimex-1.29/debian/po/pt_BR.po
+@@ -0,0 +1,96 @@
++#
++# Translators, if you are not familiar with the PO format, gettext
++# documentation is worth reading, especially sections dedicated to
++# this format, e.g. by running:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++#
++# Some information specific to po-debconf are available at
++# /usr/share/doc/po-debconf/README-trans
++# or http://www.debian.org/intl/l10n/po-debconf/README-trans
++#
++# Developers do not need to manually edit POT or PO files.
++# André Luís Lopes <andrelop@debian.org>, 2010.
++# Flamarion Jorge <jorge.flamarion@gmail.com>, 2010.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.29-2.1\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-11-11 22:16-0200\n"
++"Last-Translator: Flamarion Jorge <jorge.flamarion@gmail.com>\n"
++"Language-Team: Brazilian Portuguese <debian-l10n-portuguese@lists.debian."
++"org>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n > 1);\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "O adjtimex deve ser executado na instalação e em cada inicialização?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Executar o adjtimex na inicialização do sistema configurará os parâmetros de "
++"tempo do kernel para os valores em /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Você não deve escolher esta opção se você apenas quer usar o adjtimex para "
++"inspecionar os parâmetros atuais."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++"Executar o adjtimexconfig quando o adjtimex for instalado ou atualizado?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"O script adjtimexconfig usará o adjtimex para encontrar valores para as "
++"variáveis \"tick\" e \"frequency\" do kernel, que farão o relógio do sistema "
++"o mais próximo do relógio do hardware (também conhecido como o relógio da "
++"CMOS). Ele então salva estes valores no arquivo de configuração /etc/default/"
++"adjtimex, assim as configurações serão restauradas a cada inicialização, "
++"quando o /etc/init.d/adjtimex executar."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"O script leva 70 segundos para rodar, portanto rodá-lo a cada atualização "
++"pode ser um desperdício de tempo. Alternativamente, você pode executar o "
++"adjtimexconfig manualmente quando necessário, ou determinar as variáveis de "
++"kernel usando outros métodos e configurá-las manualmente em /etc/default/"
++"adjtimex."
+--- adjtimex-1.29.orig/debian/po/templates.pot
++++ adjtimex-1.29/debian/po/templates.pot
+@@ -0,0 +1,68 @@
++# SOME DESCRIPTIVE TITLE.
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
++# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: PACKAGE VERSION\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
++"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
++"Language-Team: LANGUAGE <LL@li.org>\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=CHARSET\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
+--- adjtimex-1.29.orig/debian/po/gl.po
++++ adjtimex-1.29/debian/po/gl.po
+@@ -0,0 +1,85 @@
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
++#
++# marce villarino <mvillarino@users.sourceforge.net>, 2009.
++msgid ""
++msgstr ""
++"Project-Id-Version: templates_[OK3397]\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-04-16 22:09+0200\n"
++"Last-Translator: marce villarino <mvillarino@users.sourceforge.net>\n"
++"Language-Team: Galician <proxecto@trasno.ent>\n"
++"Language: gl\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: Lokalize 0.2\n"
++"Plural-Forms: nplurals=2; plural=n != 1;\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Debe executarse adjtimex durante a instalación e con cada inicio do sistema?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Se executa adjtimex durante o inicio do sistema axustará os parámetros de "
++"hora do núcleo cos valores que haxa en /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Non debería escoller esta opción se só desexa empregar adjtimex para "
++"inspeccionar os parámetros actuais."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Desexa executar adjtimexconfig se instala ou actualiza?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"O script adjtimexconfig empregará adjtimex para achar valores paras as "
++"variábeis do núcleo «tick» e «frequency» que fagan que o reloxo do sistema "
++"se corresponda aproximadamente co do hardware (o chamado reloxo da BIOS). "
++"Logo garda eses valores no ficheiro de configuración /etc/default/adjtimex "
++"de xeito que os valores se restauren en cada arranque, cando se executa /etc/"
++"init.d/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"O script tarda 70 segundos en executarse, pode que executalo cada vez que se "
++"actualice pode ser un desperdicio de tempo. En alternativa, pode executar "
++"adjtimexconfig manualmente cando o precise, ou determinar as variábeis do "
++"núcleo empregando outros métodos e axustalas manualmente en /etc/default/"
++"adjtimex."
+--- adjtimex-1.29.orig/debian/po/vi.po
++++ adjtimex-1.29/debian/po/vi.po
+@@ -0,0 +1,82 @@
++# Vietnamese Translation for adjtimex.
++# Copyright © 2010 Free Software Foundation, Inc.
++# Clytie Siddall <clytie@riverland.net.au>, 2005-2010.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.29-2.1\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-10-27 14:39+1030\n"
++"Last-Translator: Clytie Siddall <clytie@riverland.net.au>\n"
++"Language-Team: Vietnamese <vi-VN@googlegroups.com>\n"
++"Language: vi\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=1; plural=0;\n"
++"X-Generator: LocFactoryEditor 1.8\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "adjtimex có nên chạy vào lúc cài đặt và khi nào khởi động không?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Chạy adjtimex vào lúc khởi chạy hệ thống thì lập các tham số thá»i gian của "
++"hạt nhân thành những giá trị trong tập tin « /etc/default/adjtimex »."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Không nên bật tuỳ chá»n này nếu bạn chỉ muốn sá»­ dụng adjtimex để kiểm tra "
++"những tham số hiện thá»i."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Chạy adjtimexconfig khi adjtimex được cài đặt hay nâng cấp ?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Văn lệnh cấu hình adjtimexconfig thì sử dụng adjtimex để tìm giá trị cho hai "
++"biến hạt nhân « tick » và « frequency », để làm cho đồng hồ hệ thống tương "
++"ứng xấp xỉ vá»›i đồng hồ phần cứng (cÅ©ng được gá»i nhÆ° là đồng hồ CMOS). Văn "
++"lệnh này lưu các giá trị đó vào tập tin cấu hình « /etc/default/adjtimex », "
++"để phục hồi thiết lập khi nào việc khởi động chạy « /etc/init.d/adjtimex »."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Văn lệnh này chạy trong khoảng 70 giây thì có thể là bạn không muốn chạy nó "
++"vào mỗi lúc nâng cấp. Bạn cũng có thể chạy adjtimexconfig bằng tay khi cần "
++"thiết, hoặc quyết định những biến hạt nhân bằng phương pháp khác và lập bằng "
++"tay trong tập tin « /etc/default/adjtimex »."
+--- adjtimex-1.29.orig/debian/po/fi.po
++++ adjtimex-1.29/debian/po/fi.po
+@@ -0,0 +1,84 @@
++# Copyright (C) 2009
++# This file is distributed under the same license as the adjtimex package.
++#
++# Esko Arajärvi <edu@iki.fi>, 2010.
++msgid ""
++msgstr ""
++"Project-Id-Version: \n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-01-09 22:59+0200\n"
++"Last-Translator: Esko Arajärvi <edu@iki.fi>\n"
++"Language-Team: Finnish <debian-l10n-finnish@lists.debian.org>\n"
++"Language: fi\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: Lokalize 1.0\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Tulisiko adjtimex ajaa asennuksen yhteydessä ja aina kun järjestelmä "
++"käynnistetään?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Jos adjtimex ajetaan käynnistettäessä järjestelmä, ytimen aikaparametrit "
++"asetetaan tiedostossa /etc/default/adjtimex annettuihin arvoihin."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Älä valitse tätä vaihtoehtoa, jos haluat käyttää adjtimexiä vain nykyisten "
++"parametriarvojen tarkasteluun."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Tulisiko adjtimexconfig ajaa, kun adjtimex asennetaan tai päivitetään?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Komentosarja adjtimexconfig etsii ohjelman adjtimex avulla ytimen "
++"muuttujille â€tick†ja â€frequency†arvot, joilla järjestelmän kello näyttää "
++"suunnilleen samaa kuin laitteiston kello (CMOS-kello). Se tallentaa nämä "
++"arvot asetustiedostoon /etc/default/adjtimex, jolloin ne palautetaan "
++"järjestelmän käynnistyessä, kun /etc/init.d/adjtimex ajetaan."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Komentosarjan ajaminen kestää 70 sekuntia, joten sen ajaminen jokaisen "
++"päivityksen yhteydessä saattaa olla ajanhukkaa. Voit vaihtoehtoisesti ajaa "
++"adjtimexconfigin käsin tarvittaessa tai määrittää ytimen muuttujien arvot "
++"muilla keinoin ja asettaa ne käsin tiedostoon /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/pl.po
++++ adjtimex-1.29/debian/po/pl.po
+@@ -0,0 +1,123 @@
++#
++# Translators, if you are not familiar with the PO format, gettext
++# documentation is worth reading, especially sections dedicated to
++# this format, e.g. by running:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++#
++# Some information specific to po-debconf are available at
++# /usr/share/doc/po-debconf/README-trans
++# or http://www.debian.org/intl/l10n/po-debconf/README-trans
++#
++# Developers do not need to manually edit POT or PO files.
++#
++#, fuzzy
++msgid ""
++msgstr ""
++"Project-Id-Version: PACKAGE VERSION\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
++"Last-Translator: Bartosz Zapa³owski <zapal@debian.linux.org.pl>\n"
++"Language-Team: Polish Debian Documentation Project <pddp@debian.linux.org."
++"pl>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=iso-8859-2\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Czy adjtimex ma byæ uruchomiany podczas instalacji i ka¿dego startu systemu?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++#, fuzzy
++#| msgid ""
++#| "adjtimex can run at system startup to set the kernel time parameters to "
++#| "the values in /etc/default/adjtimex. Don't accept if you just want to use "
++#| "adjtimex to inspect the current parameters."
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"adjtimex mo¿e byæ uruchamiany podczas ka¿dego uruchomienia systemu,by "
++"ustawiæ parametry czasu w j±drze na warto¶ci znajduj±ce siê w pliku/etc/"
++"default/adjtimex. Nie wyra¿aj zgody, je¶li chcesz u¿ywaæ adjtimextylko do "
++"sprawdzania aktualnych warto¶ci."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++#, fuzzy
++#| msgid ""
++#| "adjtimex can run at system startup to set the kernel time parameters to "
++#| "the values in /etc/default/adjtimex. Don't accept if you just want to use "
++#| "adjtimex to inspect the current parameters."
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"adjtimex mo¿e byæ uruchamiany podczas ka¿dego uruchomienia systemu,by "
++"ustawiæ parametry czasu w j±drze na warto¶ci znajduj±ce siê w pliku/etc/"
++"default/adjtimex. Nie wyra¿aj zgody, je¶li chcesz u¿ywaæ adjtimextylko do "
++"sprawdzania aktualnych warto¶ci."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++#, fuzzy
++#| msgid "Should adjtimexconfig be run at installation time?"
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Czy adjtimexconfig ma byæ uruchomiony podczas instalacji?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++#, fuzzy
++#| msgid ""
++#| "The adjtimexconfig script will use adjtimex to find values for the kernel "
++#| "variables tick and frequency that will make the system clock "
++#| "approximately agree with the hardware clock (also known as the CMOS "
++#| "clock). It then saves these values in the configuration file /etc/"
++#| "default/adjtimex so the settings will be restored on every boot, when /"
++#| "etc/init.d/adjtimex runs."
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Skrypt adjtimexconfig skorzysta z programu adjtimex do znalezienia "
++"takichwarto¶ci parametrów j±dra tick i frequency, ¿eby zegar systemowy by³ "
++"zbli¿onydo zegara sprzêtowego (zegara CMOS). Nastêpnie zapisze ustawienia w "
++"plikukonfiguracyjnym /etc/default/adjtimex, dziêki czemu warto¶ci te "
++"bêd±przywrócane przy ka¿dym starcie systemu w momencie wykonywania skryptu/"
++"etc/init.d/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++#, fuzzy
++#| msgid ""
++#| "The script takes 70 sec to run. Alternatively, you can run adjtimexconfig "
++#| "yourself at a later time, or determine the kernel variables one of "
++#| "several other ways (see the adjtimex man page) and install them in /etc/"
++#| "default/adjtimex."
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Skrypt bêdzie dzia³a³ przez 70 sekund. Mo¿esz te¿ uruchomiæ "
++"w³asnorêcznieadjtimexconfig w dowolnym czasie lub dobraæ paramterty j±dra w "
++"innysposób (zapoznaj siê ze stron± manuala adjtimex) i zapisaæ je w pliku/"
++"etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/ru.po
++++ adjtimex-1.29/debian/po/ru.po
+@@ -0,0 +1,95 @@
++# translation of adjtimex_1.28-1_ru.po to Russian
++#
++# Translators, if you are not familiar with the PO format, gettext
++# documentation is worth reading, especially sections dedicated to
++# this format, e.g. by running:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++# Some information specific to po-debconf are available at
++# /usr/share/doc/po-debconf/README-trans
++# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
++# Developers do not need to manually edit POT or PO files.
++#
++# Yuri Kozlov <kozlov.y@gmail.com>, 2005.
++# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010.
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.28-1\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-01-02 09:43+0300\n"
++"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
++"Language-Team: Russian <debian-l10n-russian@lists.debian.org>\n"
++"Language: ru\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.11.4\n"
++"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
++"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "ЗапуÑтить adjtimex ÑÐµÐ¹Ñ‡Ð°Ñ Ð¸ каждый раз при Ñтарте ÑиÑтемы?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"ЗапуÑк adjtimex при включении компьютера выполнит наÑтройку значений "
++"параметров времени Ñдра из файла /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Ответьте отрицательно, еÑли проÑто хотите иÑпользовать adjtimex Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ "
++"текущих параметров."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "ЗапуÑкать adjtimexconfig при уÑтановке или обновлении adjtimex?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Сценарий adjtimexconfig иÑпользует adjtimex при поиÑке значений переменных "
++"Ñдра \"tick\" и \"frequency\", которые помогают ÑоглаÑовывать ÑиÑтемные чаÑÑ‹ "
++"Ñ Ð°Ð¿Ð¿Ð°Ñ€Ð°Ñ‚Ð½Ñ‹Ð¼Ð¸ чаÑами (так называемые чаÑÑ‹ CMOS). Затем он ÑохранÑет Ñти "
++"Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð² файл наÑтройки /etc/default/adjtimex Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы "
++"воÑÑтанавливать их Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ /etc/init.d/adjtimex при каждом "
++"запуÑке ÑиÑтемы."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"ДлительноÑÑ‚ÑŒ работы ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ -- 70 Ñекунд, поÑтому при каждом обновлении "
++"будет Ñ‚Ð°ÐºÐ°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° в работе. Ð’ качеÑтве альтернативы вы можете запуÑтить "
++"adjtimexconfig вручную позже, или определить переменные Ñдра одним из "
++"неÑкольких других ÑпоÑобов (Ñмотрите Ñправочную Ñтраницу по adjtimex) и "
++"Ñохранить их в файл /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/ja.po
++++ adjtimex-1.29/debian/po/ja.po
+@@ -0,0 +1,91 @@
++#
++# Translators, if you are not familiar with the PO format, gettext
++# documentation is worth reading, especially sections dedicated to
++# this format, e.g. by running:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++#
++# Some information specific to po-debconf are available at
++# /usr/share/doc/po-debconf/README-trans
++# or http://www.debian.org/intl/l10n/po-debconf/README-trans
++#
++# Developers do not need to manually edit POT or PO files.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.27.1-3\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-07-24 18:05+0900\n"
++"Last-Translator: Hideki Yamane (Debian-JP) <henrich@debian.or.jp>\n"
++"Language-Team: Japanese <debian-japanese@lists.debian.org>\n"
++"Language: ja\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "adjtimex をインストール時ãŠã‚ˆã³æ¯Žå›žã®èµ·å‹•æ™‚ã«å‹•ä½œã•ã›ã¾ã™ã‹?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"システムã®èµ·å‹•æ™‚ã«ã‚«ãƒ¼ãƒãƒ«ã§ã®æ™‚é–“ã®ãƒ‘ラメータを /etc/default/adjtimex ã®å€¤ã«"
++"設定ã™ã‚‹ã‚ˆã†ã« adjtimex を動作ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"システムã®èµ·å‹•æ™‚ã«ã‚«ãƒ¼ãƒãƒ«ã§ã®æ™‚é–“ã®ãƒ‘ラメータを /etc/default/adjtimex ã®å€¤ã«"
++"設定ã™ã‚‹ã‚ˆã†ã« adjtimex を動作ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++"adjtimexconfig ã‚’ adjtimex をインストールã€ã‚ã‚‹ã„ã¯ã‚¢ãƒƒãƒ—グレードã—ãŸæ™‚ã«å®Ÿè¡Œ"
++"ã—ã¾ã™ã‹?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"adjtimexconfig スクリプト㯠adjtimex を使用ã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ã‚¯ãƒ­ãƒƒã‚¯ã‚’ãƒãƒ¼ãƒ‰ã‚¦ã‚§"
++"アクロック (CMOS クロックã¨ã—ã¦ã‚‚知られã¦ã„ã¾ã™) ã¨ãŠãŠã‚ˆãåŒæœŸã™ã‚‹ã‚ˆã†ã«ã‚«ãƒ¼"
++"ãƒãƒ«å¤‰æ•°ã€Œtickã€ã¨ã€Œfrequencyã€ã«ä¸Žãˆã‚‹å€¤ã‚’見ã¤ã‘ã¾ã™ã€‚ãã—ã¦ã€ã“ã®å€¤ã‚’設定"
++"ファイル /etc/default/adjtimex ã«ä¿å­˜ã™ã‚‹ã“ã¨ã§æ¯Žå›žèµ·å‹•æ™‚ã« /etc/init.d/"
++"adjtimex ãŒå‹•ä½œã™ã‚‹éš›ã«è¨­å®šãŒå¾©å…ƒã•ã‚Œã¾ã™ã€‚"
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"スクリプトã¯å‹•ä½œã« 70 秒もã‹ã‹ã‚‹ã®ã§ã‚¢ãƒƒãƒ—グレードã®åº¦ã«æ¯Žå›žå®Ÿè¡Œã™ã‚‹ã®ã¯æ™‚é–“"
++"ã®ç„¡é§„ã§ã™ã€‚別解ã¨ã—ã¦ã¯ adjtimexconfig を後ã»ã©å®Ÿè¡Œã™ã‚‹ã€ã¾ãŸã¯ä»–ã®æ–¹æ³•ã§"
++"カーãƒãƒ«å¤‰æ•°ã‚’決ã‚ã¦ã€æ‰‹å‹•ã§ /etc/default/adjtimex ã¸ã®è¨­å®šã‚’è¡Œã†ã€ãªã©ãŒå¯èƒ½"
++"ã§ã™ã€‚"
+--- adjtimex-1.29.orig/debian/po/nb.po
++++ adjtimex-1.29/debian/po/nb.po
+@@ -0,0 +1,82 @@
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
++#
++# Bjørn Steensrud <bjornst@skogkatt.homelinux.org>, 2010.
++msgid ""
++msgstr ""
++"Project-Id-Version: \n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-10-15 14:50+0200\n"
++"Last-Translator: Bjørn Steensrud <bjornst@skogkatt.homelinux.org>\n"
++"Language-Team: Norwegian Bokmål <i18n-nb@lister.ping.uio.no>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: Lokalize 1.0\n"
++"Plural-Forms: nplurals=2; plural=n != 1;\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "Skal adjtimex kjøres ved installasjon og hver gang systemet startes?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Om adjtimex kjøres ved oppstart blir kjernens tidsparametre satt til "
++"verdiene i /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Du bør ikke velge dette hvis du bare vil bruke adjtimex til å se hva de "
++"gjeldende parametrene er."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Skal adjtimexconfig kjøres når adjtimex installeres eller oppgraderes?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Skriptet adjtimexconfig vil bruke adjtimex til å finne verdier for kjerne- "
++"variablene «tick» og «frequency» som vil få systemklokka til å gå omtrent "
++"lik maskinklokka (også kalt CMOS-klokka). Deretter lagres disse verdiene i "
++"oppsettsfila /etc/default/adjtimex, slik at de blir tilbakestilt ved hver "
++"oppstart nåt /etc/init.d/adjtimex kjører."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Skriptet tar 70 sekunder å kjøre, så det kan være bortkastet tid å kjøre det "
++"ved hver oppgradering. Du kan ellers kjøre adjtimexconfig manuelt når det "
++"trengs, eller bestemme kjernevariablene på annen måte og sette dem inn "
++"manuelt i /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/sv.po
++++ adjtimex-1.29/debian/po/sv.po
+@@ -0,0 +1,85 @@
++# Translation of adjtimex debconf template to Swedish
++# Copyright (C) 2009 Martin Bagge <brother@bsnet.se>
++# This file is distributed under the same license as the adjtimex package.
++#
++# Martin Bagge <brother@bsnet.se>, 2009
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.20-5\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-03-17 19:49-0400\n"
++"Last-Translator: Martin Bagge <brother@bsnet.se>\n"
++"Language-Team: Swedish <debian-l10n-swedish@lists.debian.org>\n"
++"Language: sv\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=utf-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Poedit-Language: Swedish\n"
++"X-Poedit-Country: Sweden\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "Ska adjtimex köras vid installation och vid varje uppstart?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"adjtimex kan köra vid systemets uppstart för att sätta kärntidsparametrar "
++"till värdena i /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Aktivera inte denna funktion om du endast vill använda adjtime för att "
++"inspektera aktuella parameterar."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++"Ska adjtimexconfig köras efter installation eller uppgradering av adjtimex?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Skriptet adjtimexconfig kommer att använda adjtimex för att hitta värden för "
++"kärnvariablerna \"tick\" och \"frequency\" som gör att systemklockan kommer "
++"överens med hårdvaruklockan (också kallad CMOS-klockan). Den sparar sedan "
++"dessa värden i konfigurationsfilen /etc/default/adjtimex så att "
++"inställningarna kommer att användas vid varje uppstart, när /etc/init.d/"
++"adjtimex körs."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Skriptet tar 70 sekunder att köra vilket innebär att det kan vara slöseri "
++"med tid att köra vid varje uppgradering. Alternativt kan du köra "
++"adjtimexconfig själv när det behövs eller bestämma variabler för kärnan på "
++"andra sätt och ange dessa i /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/POTFILES.in
++++ adjtimex-1.29/debian/po/POTFILES.in
+@@ -0,0 +1 @@
++[type: gettext/rfc822deb] templates
+--- adjtimex-1.29.orig/debian/po/pt.po
++++ adjtimex-1.29/debian/po/pt.po
+@@ -0,0 +1,83 @@
++# 2005-10-27 - Marco Ferra <mferra@sdf.lonestar.org> (initial translation)
++# 2009, Carlos Lisboa <carloslisboa@gmail.com>
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.20-5\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-04-15 22:00+0100\n"
++"Last-Translator: Carlos Lisboa <carloslisboa@gmail.com>\n"
++"Language-Team: Portuguese <traduz@debianpt.org>\n"
++"Language: pt\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Deve o adjtimex correr enquanto o instala e depois sempre que o sistema "
++"inicia?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Correr o adjtimex no arranque do sistema irá colocar os parâmetros de tempo "
++"do kernel para os valores em /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Não deve escolher esta opção se apenas deseja usar o adjtimex para verificar "
++"os parâmetros actuais."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Correr o adjtimexconfig quando o adjtimex é instalado ou actualizado?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"O script adjtimexconfig irá usar adjtimex para encontrar valores para as "
++"variáveis do kernel \"tick\" e \"frequency\" que irão tornar o relógio do "
++"sistema em concordância com o relógio de hardware (também conhecido por "
++"relógio CMOS). Irá então guardar os valores no ficheiro de configuração /etc/"
++"default/adjtimex para que as configurações sejam restauradas em cada "
++"arranque, quando o /etc/init.d/adjtimex é corrido."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Este script demora 70 segundos a correr, podendo ser um desperdício de tempo "
++"corrê-lo em cada actualização. Como alternativa, pode correr o "
++"adjtimexconfig manualmente quando necessário, ou determine as variáveis do "
++"kernel usando outro método e configure-as manualmente em /etc/default/"
++"adjtimex."
+--- adjtimex-1.29.orig/debian/po/de.po
++++ adjtimex-1.29/debian/po/de.po
+@@ -0,0 +1,96 @@
++# translation of adjtimex_1.26-3_de.po to German
++#
++# Translators, if you are not familiar with the PO format, gettext
++# documentation is worth reading, especially sections dedicated to
++# this format, e.g. by running:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++# Some information specific to po-debconf are available at
++# /usr/share/doc/po-debconf/README-trans
++# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
++# Developers do not need to manually edit POT or PO files.
++#
++# Erik Schanze <eriks@debian.org>, 2004-2009.
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex_1.26-3_de\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-04-15 18:02+0200\n"
++"Last-Translator: Erik Schanze <eriks@debian.org>\n"
++"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
++"Language: de\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.11.4\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Soll Adjtimex nach der Installation und bei jedem Hochfahren gestartet "
++"werden?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Wird Adjtimex beim Hochfahren des Systems gestartet, werden die "
++"Zeitparameter im Kernel auf die Werte in /etc/defaults/adjtimex gesetzt."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Stimmen Sie nicht zu, wenn Sie mit Adjtimex nur die aktuellen Parameter "
++"ermitteln wollen."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++"Adjtimexconfig zur Installation oder Aktualisierung von Adjtimex aufrufen?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Das Skript »adjtimexconfig« nutzt Adjtimex, um die Werte der Kernelvariablen "
++"»tick« und »frequency« zu finden, damit die Systemuhr ungefähr mit der "
++"Rechneruhr (auch bekannt als CMOS-Uhr) übereinstimmt. Das Skript speichert "
++"diese Werte in der Konfigurationsdatei /etc/default/adjtimex, sodass die "
++"Einstellung bei jedem Systemstart wiederhergestellt wird, wenn /etc/init.d/"
++"adjtimex ausgeführt wird."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Das Skript benötigt 70 Sekunden, um durchzulaufen, es bei jeder "
++"Aktualisierung laufen zu lassen, dürfte Zeitverschwendung sein. Andererseits "
++"können Sie »adjtimexconfig« selbst bei Bedarf starten oder Sie finden die "
++"Kernelvariablen auf einem anderen Weg heraus (siehe Handbuchseite von "
++"Adjtimex) und speichern die Werte in der Datei /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/eu.po
++++ adjtimex-1.29/debian/po/eu.po
+@@ -0,0 +1,84 @@
++# translation of adjtimex-eu.po to Euskara
++# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the PACKAGE package.
++#
++# Piarres Beobide <pi@beobide.net>, 2009.
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex-eu\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-04-08 12:49+0200\n"
++"Last-Translator: Piarres Beobide <pi@beobide.net>\n"
++"Language-Team: Euskara <debian-l10n-basque@lists.debian.org>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.11.4\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "Adjtimex instalazio eta abiarazte bakoitzean exekutatu behar al da?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Adjtimex sistema abiaraztean exekutatzean kernelaren denbora parametroak /"
++"etc/default/adjtimex-eko balioetara ezarriko dira."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Ez zenuke aukera hau aukeratu beharko adjtimex uneko parametroak begiratzeko "
++"bakarrik erabili nahi baduzu."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Adjtimexconfig exekutatu adjtimex instalatu edo bertsio-berritzean?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Adjtimexconfig script-ak adjtimex erabiliko du kerneleko \"tick\" eta "
++"\"frequency\" aldagaien balioa aurkitzeko honekin sistema erlojuak hardware "
++"erlojuarekin (CMOS ordularia bezala ere ezagutua) bat egingo du. Orduan "
++"balio hauek /etc/default/adjtimex konfigurazio fitxategian gordeko ditu Abio "
++"bakoitzean balio horiek berrezarri daitezen /etc/init.d/adjtimex "
++"exekutatzean."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Script-ak 70 segundu behar ditu exekutatzeko, beraz berau bertsio-berritze "
++"bakoitzean exekutatzea denbora galtze bat izan daiteke. Bestela behar "
++"duzunean adjtimexconfig eskuz konfiguratu dezakezu edo kernel aldagaiak "
++"beste metodo batez atzeman eta /etc/default/adjtimex fitxategian eskuz ipini "
++"ditzakezu."
+--- adjtimex-1.29.orig/debian/po/da.po
++++ adjtimex-1.29/debian/po/da.po
+@@ -0,0 +1,92 @@
++# translation of adjtimex_1.16-1-da.po to Danish
++# translation of adjtimex_1.16-1_templates.po to Danish
++#
++# Translators, if you are not familiar with the PO format, gettext
++# documentation is worth reading, especially sections dedicated to
++# this format, e.g. by running:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++# Some information specific to po-debconf are available at
++# /usr/share/doc/po-debconf/README-trans
++# or http://www.debian.org/intl/l10n/po-debconf/README-trans#
++# Developers do not need to manually edit POT or PO files.
++# Claus Hindsgaul <claus_h@image.dk>, 2004.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex_1.16-1-da\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-04-16 16:56+0200\n"
++"Last-Translator: Frank Damgaard <debian@overbygaard.dk>\n"
++"Language-Team: Danish\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"X-Generator: KBabel 1.3.1\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "Skal adjtimex køres under installation og ved hver opstart?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Køres adjtimex under opstart af systemet, sættes kernens tidsparametre til "
++"værdierne i /etc/default/adjtimex. "
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Vælg ikke dette hvis du ønsker at bruge adjtimex til at gemmense de aktuelle "
++"parametre."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Skal adjtimexconfig køres ved installation eller opgradering?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Skriptet adjtimexconfig vil bruge adjtimex til at finde de værdier til "
++"kernevariablene \"tick\" og \"frequency\", der vil få systemuret til at "
++"passe med computerens indbyggede ur (CMOS-uret). Den gemmer derefter "
++"værdierne i opsætningsfilen /etc/default/edjtimex, så indstillingerne bliver "
++"sat under hver opstart, når skriptet /etC/init.d/adjtimex køres."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Det tager 70 sekunder at køre skriptet, så at køre skriptet ved hver "
++"opgradering kan være spild af tid. Alternativt kan du selv køre "
++"adjtimexconfig når der er behov, eller finde kernevariablene på en anden "
++"måde og sætte dem manuelt i /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/nl.po
++++ adjtimex-1.29/debian/po/nl.po
+@@ -0,0 +1,86 @@
++# Dutch translation of adjtimex debconf templates.
++# Copyright (C) 2003-2011 THE PACKAGE'S COPYRIGHT HOLDER
++# This file is distributed under the same license as the adjtimex package.
++# Michiel Sikkes <michiel@sikkes.xs4all.nl>, 2003.
++# Jeroen Schot <schot@a-eskwadraat.nl>, 2011.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex_1.29-2.1\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2011-05-05 17:49+0200\n"
++"Last-Translator: Michiel Sikkes <michiel@sikkes.xs4all.nl>\n"
++"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n"
++"Language: nl\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr ""
++"Wilt u dat adjtimex bij de installatie en bij elke opstartprocedure gedraaid "
++"wordt?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Het draaien van adjtimex bij het opstarten van het systeem zal "
++"tijdparameters van de kernel instellen zoals gedefinieerd in /etc/default/"
++"adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Accepteer deze optie niet als u adjtimex alleen wilt gebruiken om de huidige "
++"parameters te bekijken."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr ""
++"Wilt u dat adjtimexconfig bij het installeren en opwaarderen wordt gedraaid?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Het adjtimexconfig-script zal adjtimex gebruiken om de eigenschappen voor de "
++"kernelvariabelen \"tick\" en \"frequency\" te vinden. Dit zal er voor zorgen "
++"dat de systeemklok gelijk loopt met de hardware-klok (ook bekend onder de "
++"naam CMOS-klok). Deze eigenschappen worden opgeslagen in het "
++"configuratiebestand /etc/default/adjtimex, dus de instellingen worden bij "
++"elke systeemopstartprocedure hersteld als /etc/init.d/adjtimex draait."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Het script doet er 70 seconden over om te draaien. Als alternatief kunt u "
++"adjtimexconfig later handmatig draaien, of de kernelvariabelen op een andere "
++"manier bepalen en deze zelf in /etc/default/adjtimex zetten."
+--- adjtimex-1.29.orig/debian/po/cs.po
++++ adjtimex-1.29/debian/po/cs.po
+@@ -0,0 +1,78 @@
++# Czech translation of adjtimex templates
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.29-2\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2010-07-16 14:53+0200\n"
++"Last-Translator: Martin Sin <martin.sin@zshk.cz>\n"
++"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
++"Language: cs\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=utf-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "Má být adjtimex spuÅ¡tÄ›n po instalaci a pÅ™i každém spuÅ¡tÄ›ní poÄítaÄe?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"SpuÅ¡tÄ›ní adjtimex pÅ™i startu poÄítaÄe nastaví Äasové parametry jádra na "
++"hodnoty uložené v /etc/default/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"Pokud chcete používat adjtimex pouze ke zjištění aktuálních hodnot, pak tuto "
++"možnost nemusíte používat."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "Spustit adjtimexconfig po instalaci nebo aktualizaci adjtimex?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"Skript adjtimexconfig použije adjtimex k nalezení hodnot „tick“ a "
++"„frequency“ jádra tak, že nastaví systémové hodiny přibližně na hodnoty těch "
++"hardwarových (také známých jako CMOS hodiny). Tyto hodnoty pak uloží do "
++"konfiguraÄního souboru /etc/default/adjtimex, aby mohlo být nastavení "
++"obnoveno při každém startu, vždy při spuštění /etc/init.d/adjtimex."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"Spuštění skriptu zabere 70 sekund, takže jeho spuštění při každé aktualizaci "
++"může být ztrátou Äasu. VolitelnÄ› můžete adjtimexconfig spustit podle potÅ™eby "
++"také ruÄnÄ› nebo urÄit promÄ›nné jádra jinými způsoby a nastavit je ruÄnÄ› v "
++"souboru /etc/default/adjtimex."
+--- adjtimex-1.29.orig/debian/po/es.po
++++ adjtimex-1.29/debian/po/es.po
+@@ -0,0 +1,108 @@
++# adjtimex po-debconf translation to Spanish
++# Copyright (C) 2009 Software in the Public Interest
++# This file is distributed under the same license as the adjtimex package.
++#
++# Changes:
++# - Initial translation
++# Vicente H. <vherrerv@supercable.es>
++#
++# - Updates
++# Francisco Javier Cuadrado <fcocuadrado@gmail.com>, 2009
++#
++# Traductores, si no conocen el formato PO, merece la pena leer la
++# documentación de gettext, especialmente las secciones dedicadas a este
++# formato, por ejemplo ejecutando:
++# info -n '(gettext)PO Files'
++# info -n '(gettext)Header Entry'
++#
++# Equipo de traducción al español, por favor lean antes de traducir
++# los siguientes documentos:
++#
++# - El proyecto de traducción de Debian al español
++# http://www.debian.org/intl/spanish/coordinacion
++# especialmente las notas de traducción en
++# http://www.debian.org/intl/spanish/notas
++#
++# - La guía de traducción de po's de debconf:
++# /usr/share/doc/po-debconf/README-trans
++# o http://www.debian.org/intl/l10n/po-debconf/README-trans
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: adjtimex 1.27.1-3\n"
++"Report-Msgid-Bugs-To: adjtimex@packages.debian.org\n"
++"POT-Creation-Date: 2009-03-17 07:38+0100\n"
++"PO-Revision-Date: 2009-07-25 20:18+0100\n"
++"Last-Translator: Francisco Javier Cuadrado <fcocuadrado@gmail.com>\n"
++"Language-Team: Debian l10n Spanish <debian-l10n-spanish@lists.debian.org>\n"
++"Language: \n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid "Should adjtimex be run at installation and at every startup?"
++msgstr "¿Se debe ejecutar adjtimex ahora y en cada arranque?"
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"Running adjtimex at system startup will set the kernel time parameters to "
++"the values in /etc/default/adjtimex."
++msgstr ""
++"Ejecutar adjtimex al inicio del sistema configurará los parámetros de tiempo "
++"del núcleo a los valores del archivo «/etc/default/adjtimex»."
++
++#. Type: boolean
++#. Description
++#: ../templates:2001
++msgid ""
++"You should not choose this option if you just want to use adjtimex to "
++"inspect the current parameters."
++msgstr ""
++"No debería escoger esta opción si sólo quiere utilizar adjtimex para "
++"inspeccionar los parámetros actuales."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid "Run adjtimexconfig when adjtimex is installed or upgraded?"
++msgstr "¿Desea ejecutar adjtimexconfig cuando adjtimex se instale o actualice?"
++
++#. Type: boolean
++#. Description
++#. Translators: do not translate "tick" and "frequency"
++#: ../templates:3001
++msgid ""
++"The adjtimexconfig script will use adjtimex to find values for the kernel "
++"variables \"tick\" and \"frequency\" that will make the system clock "
++"approximately agree with the hardware clock (also known as the CMOS clock). "
++"It then saves these values in the configuration file /etc/default/adjtimex "
++"so the settings will be restored on every boot, when /etc/init.d/adjtimex "
++"runs."
++msgstr ""
++"El script adjtimexconfig utilizará adjtimex para encontrar los valores de "
++"las variables «tick» y «frecuency» del núcleo que harán que el reloj del "
++"sistema concuerde aproximadamente con el reloj del hardware (también "
++"conocido como reloj CMOS). Entonces, se guardan estos valores en el archivo "
++"de configuración «/etc/default/adjtimex» de modo que los valores se "
++"restaurarán en cada arranque, cuando el script «/etc/init.d/adjtimex» se "
++"ejecute."
++
++#. Type: boolean
++#. Description
++#: ../templates:3001
++msgid ""
++"The script takes 70 seconds to run, so running it for every upgrade may be a "
++"waste of time. Alternatively, you can run adjtimexconfig manually when "
++"needed, or determine the kernel variables by using other methods and set "
++"them manually in /etc/default/adjtimex."
++msgstr ""
++"El script tarda 70 segundos para ejecutarse, por lo que ejecutarlo en cada "
++"actualización puede ser una pérdida de tiempo. De forma alternativa, puede "
++"ejecutar manualmente ajdtimexconfig cuando lo necesite, o determinar las "
++"variables del núcleo utilizando otros métodos e configurándolas en el "
++"archivo «/etc/default/adjtimex»."
diff --git a/deps/util-linux/bsdstrings-util-linux_overflow.diff b/deps/util-linux/bsdstrings-util-linux_overflow.diff
new file mode 100644
index 0000000..127ff9d
--- /dev/null
+++ b/deps/util-linux/bsdstrings-util-linux_overflow.diff
@@ -0,0 +1,20 @@
+From db281fc97f1d665a61acabfd8d5933130996b29f Mon Sep 17 00:00:00 2001
+From: mancha <mancha1@zoho.com>
+Date: Wed, 29 Oct 2014
+Subject: Heap overflow
+
+Fix heap-buffer-overflow in strings.c as bundled by util-linux
+through version 2.9 and as shipped by Slackware Linux and
+Slackware derivatives.
+
+--- a/strings.c
++++ b/strings.c
+@@ -124,7 +124,7 @@ main(argc, argv)
+ if (minlen == -1)
+ minlen = DEF_LEN;
+
+- if (!(bfr = malloc((u_int)minlen))) {
++ if (!(bfr = malloc((u_int)minlen + 1))) {
+ (void)fprintf(stderr, "strings: %s\n", strerror(errno));
+ exit(1);
+ }
diff --git a/deps/util-linux/ddate.1 b/deps/util-linux/ddate.1
new file mode 100644
index 0000000..ec4ee81
--- /dev/null
+++ b/deps/util-linux/ddate.1
@@ -0,0 +1,115 @@
+.\" All Rites Reversed. This file is in the PUBLIC DOMAIN.
+.\" Kallisti.
+.TH DDATE 1 "Bureaucracy 3161" "ddate" "Emperor Norton User Command"
+.SH NAME
+ddate \- convert Gregorian dates to Discordian dates
+.SH SYNOPSIS
+.B ddate
+.RI [ \fB+\fPformat]
+.RI [ date ]
+.SH DESCRIPTION
+.B ddate
+prints the date in Discordian date format.
+.PP
+If called with no arguments,
+.B ddate
+will get the current system date, convert this to the Discordian
+date format and print this on the standard output. Alternatively, a
+Gregorian date may be specified on the command line, in the form of a numerical
+day, month and year.
+.PP
+If a format string is specified, the Discordian date will be printed in
+a format specified by the string. This mechanism works similarly to the
+format string mechanism of
+.B date(1),
+only almost completely differently. The fields are:
+.IP %A
+Full name of the day of the week (i.e., Sweetmorn)
+.IP %a
+Abbreviated name of the day of the week (i.e., SM)
+.IP %B
+Full name of the season (i.e., Chaos)
+.IP %b
+Abbreviated name of the season (i.e., Chs)
+.IP %d
+Cardinal number of day in season (i.e., 23)
+.IP %e
+Ordinal number of day in season (i.e., 23rd)
+.IP %H
+Name of current Holyday, if any
+.IP %N
+Magic code to prevent rest of format from being printed unless today is
+a Holyday.
+.IP %n
+Newline
+.IP %t
+Tab
+.IP %X
+Number of days remaining until X-Day. (Not valid if the SubGenius options
+are not compiled in.)
+.IP %{
+.IP %}
+Used to enclose the part of the string which is to be replaced with the
+words "St. Tib's Day" if the current day is St. Tib's Day.
+.IP %\.
+Try it and see.
+.bp
+.SH EXAMPLES
+.nf
+% ddate
+.br
+Sweetmorn, Bureaucracy 42, 3161 YOLD
+.PP
+% ddate +'Today is %{%A, the %e of %B%}, %Y. %N%nCelebrate %H'
+.br
+Today is Sweetmorn, the 42nd of Bureaucracy, 3161.
+.PP
+% ddate +"It's %{%A, the %e of %B%}, %Y. %N%nCelebrate %H" 26 9 1995
+.br
+It's Prickle-Prickle, the 50th of Bureaucracy, 3161.
+.br
+Celebrate Bureflux
+.PP
+% ddate +"Today's %{%A, the %e of %B%}, %Y. %N%nCelebrate %H" 29 2 1996
+.br
+Today's St. Tib's Day, 3162.
+.br
+
+.SH BUGS
+
+.B ddate(1)
+will produce undefined behavior if asked to produce the date for St. Tib's
+day and its format string does not contain the St. Tib's Day delimiters
+%{ and %}.
+
+.SH NOTE
+
+After `X-Day' passed without incident, the Church of the SubGenius
+declared that it had got the year upside down - X-Day is actually in 8661 AD
+rather than 1998 AD. Thus, the True X-Day is Cfn 40, 9827.
+
+.SH AUTHOR
+.nh
+Original program by Druel the Chaotic aka Jeremy Johnson (mpython@gnu.ai.mit.edu)
+.br
+Major rewrite by Lee H:. O:. Smith, KYTP, aka Andrew Bulhak (acb@dev.null.org)
+.br
+Gregorian B.C.E. dates fixed by Chaplain Nyan the Wiser, aka Dan Dart (ntw@dandart.co.uk)
+.br
+Five tons of flax.
+
+.SH DISTRIBUTION POLICY
+
+Public domain. All rites reversed.
+
+.SH SEE ALSO
+
+date(1),
+.br
+http://www.subgenius.com/
+.br
+Malaclypse the Younger,
+.I "Principia Discordia, Or How I Found Goddess And What I Did To Her When I Found Her"
+
+.SH AVAILABILITY
+The ddate command is available from https://github.com/bo0ts/ddate.
diff --git a/deps/util-linux/ddate.c b/deps/util-linux/ddate.c
new file mode 100644
index 0000000..4c2a0f8
--- /dev/null
+++ b/deps/util-linux/ddate.c
@@ -0,0 +1,399 @@
+/* $ DVCS ID: $jer|,523/lhos,KYTP!41023161\b"?" <<= DO NOT DELETE! */
+
+/* ddate.c .. converts boring normal dates to fun Discordian Date -><-
+ written the 65th day of The Aftermath in the Year of Our Lady of
+ Discord 3157 by Druel the Chaotic aka Jeremy Johnson aka
+ mpython@gnu.ai.mit.edu
+ 28 Sever St Apt #3
+ Worcester MA 01609
+
+ and I'm not responsible if this program messes anything up (except your
+ mind, I'm responsible for that)
+
+ (k) YOLD 3161 and all time before and after.
+ Reprint, reuse, and recycle what you wish.
+ This program is in the public domain. Distribute freely. Or not.
+
+ Majorly hacked, extended and bogotified/debogotified on
+ Sweetmorn, Bureaucracy 42, 3161 YOLD, by Lee H:. O:. Smith, KYTP,
+ aka Andrew Bulhak, aka acb@dev.null.org
+
+ Slightly hackled and crackled by a sweet firey stove on
+ Boomtime, the 53rd day of Bureaucracy in the YOLD 3179,
+ by Chaplain Nyan the Wiser, aka Dan Dart, aka ntw@dandart.co.uk
+
+ and I'm not responsible if this program messes anything up (except your
+ mind, I'm responsible for that) (and that goes for me as well --lhos)
+
+ Version history:
+ Bureflux 3161: First release of enhanced ddate with format strings
+ 59 Bcy, 3161: PRAISE_BOB and KILL_BOB options split, other minor
+ changes.
+ 53 Bcy, 3179: Fixed gregorian date conversions less than YOLD 1167
+
+ 1999-02-22 Arkadiusz Miskiewicz <misiek@pld.ORG.PL>
+ - added Native Language Support
+
+ 2000-03-17 Burt Holzman <holzman+ddate@gmail.com>
+ - added range checks for dates
+
+ 2014-06-07 William Woodruff <william@tuffbizz.com>
+ - removed gettext dependent locale code
+
+ 15th of Confusion, 3180:
+ - call out adherents of the wrong fruit
+
+ FIVE TONS OF FLAX
+*/
+
+/* configuration options VVVVV READ THIS!!! */
+
+/* If you wish ddate(1) to print the date in the same format as Druel's
+ * original ddate when called in immediate mode, define OLD_IMMEDIATE_FMT
+ */
+
+#define OLD_IMMEDIATE_FMT
+
+/* If you wish to use the US format for aneristic dates (m-d-y), as opposed to
+ * the Commonwealth format, define US_FORMAT.
+ */
+
+/* #define US_FORMAT */
+
+/* If you are ideologically, theologically or otherwise opposed to the
+ * Church of the SubGenius and do not wish your copy of ddate(1) to contain
+ * code for counting down to X-Day, undefine KILL_BOB */
+
+#define KILL_BOB 13013
+
+/* If you wish ddate(1) to contain SubGenius slogans, define PRAISE_BOB */
+
+/*#define PRAISE_BOB 13013*/
+
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <stdio.h>
+
+
+// work around includes and defines from formerly c.h
+#ifndef ARRAY_SIZE
+# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
+#endif
+
+/* &a[0] degrades to a pointer: a different type from an array */
+# define __must_be_array(a) \
+ BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(__typeof__(a), __typeof__(&a[0])))
+
+#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
+
+/* work around hacks for standalone package */
+#define PACKAGE "ddate"
+#define PACKAGE_STRING "Stand Alone"
+
+#ifndef __GNUC__
+#define inline /* foo */
+#endif
+
+#ifdef KILL_BOB
+int xday_countdown(int yday, int year);
+#endif
+
+
+/* string constants */
+
+char *day_long[5] = {
+ "Sweetmorn", "Boomtime", "Pungenday", "Prickle-Prickle", "Setting Orange"
+};
+
+char *day_short[5] = {"SM","BT","PD","PP","SO"};
+
+char *season_long[5] = {
+ "Chaos", "Discord", "Confusion", "Bureaucracy", "The Aftermath"
+};
+
+char *season_short[5] = {"Chs", "Dsc", "Cfn", "Bcy", "Afm"};
+
+char *holyday[5][2] = {
+ { "Mungday", "Chaoflux" },
+ { "Mojoday", "Discoflux" },
+ { "Syaday", "Confuflux" },
+ { "Zaraday", "Bureflux" },
+ { "Maladay", "Afflux" }
+};
+
+struct disc_time {
+ int season; /* 0-4 */
+ int day; /* 0-72 */
+ int yday; /* 0-365 */
+ int year; /* 3066- */
+};
+
+char *excl[] = {
+ "Hail Eris!", "All Hail Discordia!", "Kallisti!", "Fnord.", "Or not.",
+ "Wibble.", "Pzat!", "P'tang!", "Frink!",
+#ifdef PRAISE_BOB
+ "Slack!", "Praise \"Bob\"!", "Or kill me.",
+#endif /* PRAISE_BOB */
+ /* randomness, from the Net and other places. Feel free to add (after
+ checking with the relevant authorities, of course). */
+ "Grudnuk demand sustenance!", "Keep the Lasagna flying!",
+ "You are what you see.",
+ "Or is it?", "This statement is false.",
+ "Lies and slander, sire!", "Hee hee hee!",
+#if defined(linux) || defined (__linux__) || defined (__linux)
+ "Hail Eris, Hack Linux!",
+#elif defined(__APPLE__)
+ "This Fruit is not the True Fruit of Discord.",
+#endif
+ ""
+};
+
+char default_fmt[] = "%{%A, %B %d%}, %Y YOLD";
+char *default_immediate_fmt=
+#ifdef OLD_IMMEDIATE_FMT
+"Today is %{%A, the %e day of %B%} in the YOLD %Y%N%nCelebrate %H"
+#else
+default_fmt
+#endif
+;
+
+#define DY(y) (y+1166)
+
+static inline char *ending(int i) {
+ return i/10==1?"th":(i%10==1?"st":(i%10==2?"nd":(i%10==3?"rd":"th")));
+}
+
+static inline int leapp(int i) {
+ return (!(DY(i)%4))&&((DY(i)%100)||(!(DY(i)%400)));
+}
+
+/* select a random string */
+static inline char *sel(char **strings, int num) {
+ return(strings[random()%num]);
+}
+
+void print(struct disc_time,char **); /* old */
+void format(char *buf, const char* fmt, struct disc_time dt);
+/* read a fortune file */
+int load_fortunes(char *fn, char *delim, char** result);
+
+struct disc_time convert(int,int);
+struct disc_time makeday(int,int,int);
+
+int
+main (int argc, char *argv[]) {
+ long t;
+ struct tm *eris;
+ int bob,raw;
+ struct disc_time hastur;
+ char schwa[23*17], *fnord=0;
+ int pi;
+ char *progname, *p;
+
+ progname = argv[0];
+ if ((p = strrchr(progname, '/')) != NULL)
+ progname = p+1;
+
+ srandom(time(NULL));
+ /* do args here */
+ for(pi=1; pi<argc; pi++) {
+ switch(argv[pi][0]) {
+ case '+': fnord=argv[pi]+1; break;
+ case '-':
+ switch(argv[pi][1]) {
+ case 'V':
+ printf(("%s (%s)\n"), progname, PACKAGE_STRING);
+ default: goto usage;
+ }
+ default: goto thud;
+ }
+ }
+
+ thud:
+ if (argc-pi==3){
+ int moe=atoi(argv[pi]), larry=atoi(argv[pi+1]), curly=atoi(argv[pi+2]);
+ hastur=makeday(
+#ifdef US_FORMAT
+ moe,larry,
+#else
+ larry,moe,
+#endif
+ curly);
+ if (hastur.season == -1) {
+ printf("Invalid date -- out of range\n");
+ return -1;
+ }
+ fnord=fnord?fnord:default_fmt;
+ } else if (argc!=pi) {
+ usage:
+ fprintf(stderr,("usage: %s [+format] [day month year]\n"), argv[0]);
+ exit(1);
+ } else {
+ t= time(NULL);
+ eris=localtime(&t);
+ bob=eris->tm_yday; /* days since Jan 1. */
+ raw=eris->tm_year; /* years since 1980 */
+ hastur=convert(bob,raw);
+ fnord=fnord?fnord:default_immediate_fmt;
+ }
+ format(schwa, fnord, hastur);
+ printf("%s\n", schwa);
+
+ return 0;
+}
+
+void format(char *buf, const char* fmt, struct disc_time dt)
+{
+ int tib_start=-1, tib_end=0;
+ int i, fmtlen=strlen(fmt);
+ char *bufptr=buf;
+
+/* fprintf(stderr, "format(%p, \"%s\", dt)\n", buf, fmt);*/
+
+ /* first, find extents of St. Tib's Day area, if defined */
+ for(i=0; i<fmtlen; i++) {
+ if(fmt[i]=='%') {
+ switch(fmt[i+1]) {
+ case 'A':
+ case 'a':
+ case 'd':
+ case 'e':
+ if(tib_start>0) tib_end=i+1;
+ else tib_start=i;
+ break;
+ case '{': tib_start=i; break;
+ case '}': tib_end=i+1; break;
+ }
+ }
+ }
+
+ /* now do the formatting */
+ buf[0]=0;
+
+ for(i=0; i<fmtlen; i++) {
+ if((i==tib_start) && (dt.day==-1)) {
+ /* handle St. Tib's Day */
+ strcpy(bufptr, ("St. Tib's Day"));
+ bufptr += strlen(bufptr);
+ i=tib_end;
+ } else {
+ if(fmt[i]=='%') {
+ char *wibble=0, snarf[23];
+ switch(fmt[++i]) {
+ case 'A': wibble=day_long[dt.yday%5]; break;
+ case 'a': wibble=day_short[dt.yday%5]; break;
+ case 'B': wibble=season_long[dt.season]; break;
+ case 'b': wibble=season_short[dt.season]; break;
+ case 'd': sprintf(snarf, "%d", dt.day+1); wibble=snarf; break;
+ case 'e': sprintf(snarf, "%d%s", dt.day+1, ending(dt.day+1));
+ wibble=snarf; break;
+ case 'H': if(dt.day==4||dt.day==49)
+ wibble=holyday[dt.season][dt.day==49]; break;
+ case 'N': if(dt.day!=4&&dt.day!=49) goto eschaton; break;
+ case 'n': *(bufptr++)='\n'; break;
+ case 't': *(bufptr++)='\t'; break;
+
+ case 'Y': sprintf(snarf, "%d", dt.year); wibble=snarf; break;
+ case '.': wibble=sel(excl, ARRAY_SIZE(excl));
+ break;
+#ifdef KILL_BOB
+ case 'X': sprintf(snarf, "%d",
+ xday_countdown(dt.yday, dt.year));
+ wibble = snarf; break;
+#endif /* KILL_BOB */
+ }
+ if(wibble) {
+/* fprintf(stderr, "wibble = (%s)\n", wibble);*/
+ strcpy(bufptr, wibble); bufptr+=strlen(wibble);
+ }
+ } else {
+ *(bufptr++) = fmt[i];
+ }
+ }
+ }
+ eschaton:
+ *(bufptr)=0;
+}
+
+struct disc_time makeday(int imonth,int iday,int iyear) /*i for input */
+{
+ struct disc_time funkychickens;
+
+ int cal[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
+ int dayspast=0;
+
+ memset(&funkychickens,0,sizeof(funkychickens));
+ /* basic range checks */
+ if (imonth < 1 || imonth > 12 || iyear == 0) {
+ funkychickens.season = -1;
+ return funkychickens;
+ }
+ if (iday < 1 || iday > cal[imonth-1]) {
+ if (!(imonth == 2 && iday == 29 && iyear%4 == 0 &&
+ (iyear%100 != 0 || iyear%400 == 0))) {
+ funkychickens.season = -1;
+ return funkychickens;
+ }
+ }
+
+ imonth--;
+ /* note: gregorian year 0 doesn't exist so
+ * add one if user specifies a year less than 0 */
+ funkychickens.year= iyear+1166 + ((0 > iyear)?1:0);
+ while(imonth>0) { dayspast+=cal[--imonth]; }
+ funkychickens.day=dayspast+iday-1;
+ funkychickens.season=0;
+ if((funkychickens.year%4)==2) {
+ if (funkychickens.day==59 && iday==29) funkychickens.day=-1;
+ }
+ funkychickens.yday=funkychickens.day;
+/* note: EQUAL SIGN...hopefully that fixes it */
+ while(funkychickens.day>=73) {
+ funkychickens.season++;
+ funkychickens.day-=73;
+ }
+ return funkychickens;
+}
+
+struct disc_time convert(int nday, int nyear)
+{ struct disc_time funkychickens;
+
+ funkychickens.year = nyear+3066;
+ funkychickens.day=nday;
+ funkychickens.season=0;
+ if ((funkychickens.year%4)==2)
+ {if (funkychickens.day==59)
+ funkychickens.day=-1;
+ else if (funkychickens.day >59)
+ funkychickens.day-=1;
+ }
+ funkychickens.yday=funkychickens.day;
+ while (funkychickens.day>=73)
+ { funkychickens.season++;
+ funkychickens.day-=73;
+ }
+ return funkychickens;
+
+ }
+
+#ifdef KILL_BOB
+
+/* Code for counting down to X-Day, X-Day being Cfn 40, 3164
+ *
+ * After `X-Day' passed without incident, the CoSG declared that it had
+ * got the year upside down --- X-Day is actually in 8661 AD rather than
+ * 1998 AD.
+ *
+ * Thus, the True X-Day is Cfn 40, 9827.
+ *
+ */
+
+int xday_countdown(int yday, int year) {
+ int r=(185-yday)+(((yday<59)&&(leapp(year)))?1:0);
+ while(year<9827) r+=(leapp(++year)?366:365);
+ while(year>9827) r-=(leapp(year--)?366:365);
+ return r;
+}
+
+#endif
diff --git a/deps/util-linux/doinst.sh b/deps/util-linux/doinst.sh
new file mode 100644
index 0000000..8277c0e
--- /dev/null
+++ b/deps/util-linux/doinst.sh
@@ -0,0 +1,33 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+# Keep same perms on rc.serial.new:
+if [ -e etc/rc.d/rc.serial ]; then
+ cp -a etc/rc.d/rc.serial etc/rc.d/rc.serial.new.incoming
+ cat etc/rc.d/rc.serial.new > etc/rc.d/rc.serial.new.incoming
+ mv etc/rc.d/rc.serial.new.incoming etc/rc.d/rc.serial.new
+fi
+
+config etc/rc.d/rc.serial.new
+config etc/rc.d/rc.setterm.new
+config etc/serial.conf.new
+
+for configfile in chfn.new chsh.new login.new runuser.new runuser-l.new su.new su-l.new ; do
+ if [ -r etc/pam.d/$configfile ]; then
+ config etc/pam.d/$configfile
+ fi
+done
+
+if [ -r etc/default/su.new ]; then
+ config etc/default/su.new
+fi
diff --git a/deps/util-linux/pam.d-su/su b/deps/util-linux/pam.d-su/su
new file mode 100644
index 0000000..c28a252
--- /dev/null
+++ b/deps/util-linux/pam.d-su/su
@@ -0,0 +1,11 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+# Uncomment the following line to implicitly trust users in the "wheel" group.
+#auth sufficient pam_wheel.so trust use_uid
+# Uncomment the following line to require a user to be in the "wheel" group.
+#auth required pam_wheel.so use_uid
+auth include system-auth
+account include system-auth
+password include system-auth
+session include system-auth
+session optional pam_xauth.so
diff --git a/deps/util-linux/pam.d-su/su-l b/deps/util-linux/pam.d-su/su-l
new file mode 100644
index 0000000..654dc24
--- /dev/null
+++ b/deps/util-linux/pam.d-su/su-l
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth include su
+account include su
+password include su
+session optional pam_keyinit.so force revoke
+session include su
diff --git a/deps/util-linux/pam.d/chfn b/deps/util-linux/pam.d/chfn
new file mode 100644
index 0000000..2dbc0aa
--- /dev/null
+++ b/deps/util-linux/pam.d/chfn
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth include system-auth
+account include system-auth
+password include system-auth
+session include system-auth
diff --git a/deps/util-linux/pam.d/chsh b/deps/util-linux/pam.d/chsh
new file mode 100644
index 0000000..2dbc0aa
--- /dev/null
+++ b/deps/util-linux/pam.d/chsh
@@ -0,0 +1,6 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+auth include system-auth
+account include system-auth
+password include system-auth
+session include system-auth
diff --git a/deps/util-linux/pam.d/login b/deps/util-linux/pam.d/login
new file mode 100644
index 0000000..93923f9
--- /dev/null
+++ b/deps/util-linux/pam.d/login
@@ -0,0 +1,15 @@
+#%PAM-1.0
+auth required pam_securetty.so
+# To set a limit on failed authentications, the pam_tally2 module
+# can be enabled. See pam_tally2(8) for options.
+#auth required pam_tally2.so deny=4 unlock_time=1200
+auth include system-auth
+auth include postlogin
+account required pam_nologin.so
+account include system-auth
+password include system-auth
+session include system-auth
+session include postlogin
+session required pam_loginuid.so
+-session optional pam_ck_connector.so nox11
+-session optional pam_elogind.so
diff --git a/deps/util-linux/pam.d/runuser b/deps/util-linux/pam.d/runuser
new file mode 100644
index 0000000..5344abf
--- /dev/null
+++ b/deps/util-linux/pam.d/runuser
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth sufficient pam_rootok.so
+session optional pam_keyinit.so revoke
+session required pam_limits.so
+session required pam_unix.so
diff --git a/deps/util-linux/pam.d/runuser-l b/deps/util-linux/pam.d/runuser-l
new file mode 100644
index 0000000..5ba318a
--- /dev/null
+++ b/deps/util-linux/pam.d/runuser-l
@@ -0,0 +1,4 @@
+#%PAM-1.0
+auth include runuser
+session optional pam_keyinit.so force revoke
+session include runuser
diff --git a/deps/util-linux/rc.setterm b/deps/util-linux/rc.setterm
new file mode 100644
index 0000000..b98b102
--- /dev/null
+++ b/deps/util-linux/rc.setterm
@@ -0,0 +1,13 @@
+#!/bin/sh
+#
+# This file provides the command line for the setterm utility to set the
+# terminal attributes (primarily used for screen blanking and power
+# management).
+
+# Screen blanks after 15 minutes idle time, and powers down in one hour
+# if the kernel supports APM or ACPI power management (default setting):
+/bin/setterm -blank 15 -powersave powerdown -powerdown 60
+
+# Screen does not blank or use power management features:
+#/bin/setterm -blank 0 -powersave off -powerdown 0
+
diff --git a/deps/util-linux/scsi_ioctl.h b/deps/util-linux/scsi_ioctl.h
new file mode 100644
index 0000000..edb9525
--- /dev/null
+++ b/deps/util-linux/scsi_ioctl.h
@@ -0,0 +1,48 @@
+#ifndef _SCSI_IOCTL_H
+#define _SCSI_IOCTL_H
+
+#define SCSI_IOCTL_SEND_COMMAND 1
+#define SCSI_IOCTL_TEST_UNIT_READY 2
+#define SCSI_IOCTL_BENCHMARK_COMMAND 3
+#define SCSI_IOCTL_SYNC 4 /* Request synchronous parameters */
+#define SCSI_IOCTL_START_UNIT 5
+#define SCSI_IOCTL_STOP_UNIT 6
+/* The door lock/unlock constants are compatible with Sun constants for
+ the cdrom */
+#define SCSI_IOCTL_DOORLOCK 0x5380 /* lock the eject mechanism */
+#define SCSI_IOCTL_DOORUNLOCK 0x5381 /* unlock the mechanism */
+
+#define SCSI_REMOVAL_PREVENT 1
+#define SCSI_REMOVAL_ALLOW 0
+
+#ifdef __KERNEL__
+
+struct scsi_device;
+
+/*
+ * Structures used for scsi_ioctl et al.
+ */
+
+typedef struct scsi_ioctl_command {
+ unsigned int inlen;
+ unsigned int outlen;
+ unsigned char data[0];
+} Scsi_Ioctl_Command;
+
+typedef struct scsi_idlun {
+ __u32 dev_id;
+ __u32 host_unique_id;
+} Scsi_Idlun;
+
+/* Fibre Channel WWN, port_id struct */
+typedef struct scsi_fctargaddress {
+ __u32 host_port_id;
+ unsigned char host_wwn[8]; // include NULL term.
+} Scsi_FCTargAddress;
+
+extern int scsi_ioctl(struct scsi_device *, int, void __user *);
+extern int scsi_nonblockable_ioctl(struct scsi_device *sdev, int cmd,
+ void __user *arg, struct file *filp);
+
+#endif /* __KERNEL__ */
+#endif /* _SCSI_IOCTL_H */
diff --git a/deps/util-linux/setserial-rc.serial.diff b/deps/util-linux/setserial-rc.serial.diff
new file mode 100644
index 0000000..248d253
--- /dev/null
+++ b/deps/util-linux/setserial-rc.serial.diff
@@ -0,0 +1,49 @@
+--- ./rc.serial.orig Thu Jan 27 07:47:30 2000
++++ ./rc.serial Sun May 13 13:27:57 2001
+@@ -14,8 +14,6 @@
+ # XXXX For now, the autosave feature doesn't work if you are
+ # using the multiport feature; it doesn't save the multiport configuration
+ # (for now). Autosave also doesn't work for the hayes devices.
+-# Will fix later...
+-#
+ #
+
+ RCLOCKFILE=/var/lock/subsys/serial
+@@ -87,7 +85,7 @@
+ mv /etc/.serial.conf.new /etc/serial.conf
+ echo "done."
+ fi
+- if test -n $MODULE ; then
++ if test -n "$MODULE" ; then
+ module=`grep $MODULE_REGEXP /proc/modules | awk '{print $1}'`
+ if test -z "$module" ; then
+ echo "The $DRIVER_NAME driver is not loaded."
+@@ -108,22 +106,22 @@
+ # If not stop, it must be a start....
+ #
+
+-if test -n $MODULE -a "$LOADED" != "yes" ; then
+- if insmod -fm $MODULE $DRIVER_ARG \
+- > /tmp/$DRIVER.map 2> /tmp/$DRIVER.$$; then :;
++if test -n "$MODULE" -a "$LOADED" != "yes" ; then
++ if insmod -f $MODULE $DRIVER_ARG ; then
++ true
+ else
+ echo "Couldn't load $DRIVER_NAME driver."
+- echo "See error logs in /tmp/$DRIVER.$$"
+ exit 1
+ fi
+- /bin/rm -f /tmp/$DRIVER.$$
+ fi
+
+ if test -f /etc/serial.conf ; then
+ if test -n ${SETSERIAL} ; then
+ grep -v ^# < /etc/serial.conf | while read device args
+ do
+- ${SETSERIAL} -z $device $args
++ if [ ! "$device" = "" -a ! "$args" = "" ]; then
++ ${SETSERIAL} -z $device $args
++ fi
+ done
+ fi
+ else
diff --git a/deps/util-linux/setserial-undef_TIOCGHAYESESP.diff b/deps/util-linux/setserial-undef_TIOCGHAYESESP.diff
new file mode 100644
index 0000000..97f0784
--- /dev/null
+++ b/deps/util-linux/setserial-undef_TIOCGHAYESESP.diff
@@ -0,0 +1,13 @@
+diff -Nur setserial-2.17.orig/setserial.c setserial-2.17/setserial.c
+--- setserial-2.17.orig/setserial.c 2000-01-27 09:40:52.000000000 -0600
++++ setserial-2.17/setserial.c 2010-03-29 23:05:27.093878048 -0500
+@@ -26,6 +26,9 @@
+
+ #include "version.h"
+
++/* http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=f53a2ade0bb9f2a81f473e6469155172a96b7c38 */
++#undef TIOCGHAYESESP
++
+ static char version_str[] = "setserial version " SETSERIAL_VERSION ", "
+ SETSERIAL_DATE;
+
diff --git a/deps/util-linux/slack-desc b/deps/util-linux/slack-desc
new file mode 100644
index 0000000..2ddf351
--- /dev/null
+++ b/deps/util-linux/slack-desc
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------|
+util-linux: util-linux (a huge collection of essential utilities)
+util-linux:
+util-linux: The util-linux package is a huge collection of random utilities
+util-linux: that are essential to run a Linux system.
+util-linux:
+util-linux: Homepage: https://www.kernel.org/pub/linux/utils/util-linux/
+util-linux:
+util-linux:
+util-linux:
+util-linux:
+util-linux:
diff --git a/deps/util-linux/su.default b/deps/util-linux/su.default
new file mode 100644
index 0000000..73fb50a
--- /dev/null
+++ b/deps/util-linux/su.default
@@ -0,0 +1,3 @@
+# Ensure that ENV_SUPATH from /etc/login.defs is used for the $PATH when
+# 'su' is used. Otherwise /sbin paths will be missing unless 'su -' is used.
+ALWAYS_SET_PATH yes
diff --git a/deps/util-linux/util-linux.SlackBuild b/deps/util-linux/util-linux.SlackBuild
new file mode 100755
index 0000000..31eb6c1
--- /dev/null
+++ b/deps/util-linux/util-linux.SlackBuild
@@ -0,0 +1,381 @@
+#!/bin/bash
+
+# Copyright 2008, 2009, 2010, 2011, 2012, 2013, 2015, 2017, 2018, 2020 Patrick J. Volkerding, Sebeka, MN, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 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.
+
+# Slackware build script for util-linux
+
+cd $(dirname $0) ; CWD=$(pwd)
+
+PKGNAM=util-linux
+VERSION=${VERSION:-$(echo util-linux*.tar.xz | cut -d - -f 3 | rev | cut -f 3- -d . | rev)}
+BUILD=${BUILD:-2}
+
+ADJTIMEXVERS=1.29
+SETSERIALVERS=2.17
+ZIPTOOLVERS=1.4.0
+
+NUMJOBS=${NUMJOBS:-" -j$(expr $(nproc) + 1) "}
+
+# Automatically determine the architecture we're building on:
+if [ -z "$ARCH" ]; then
+ case "$( uname -m )" in
+ i?86) export ARCH=i586 ;;
+ arm*) export ARCH=arm ;;
+ # Unless $ARCH is already set, use uname -m for all other archs:
+ *) export ARCH=$( uname -m ) ;;
+ esac
+fi
+
+# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
+# the name of the created package would be, and then exit. This information
+# could be useful to other scripts.
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
+ exit 0
+fi
+
+if [ "$ARCH" = "i586" ]; then
+ SLKCFLAGS="-O2 -march=i586 -mtune=i686"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "s390" ]; then
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+elif [ "$ARCH" = "x86_64" ]; then
+ SLKCFLAGS="-O2 -fPIC"
+ LIBDIRSUFFIX="64"
+else
+ SLKCFLAGS="-O2"
+ LIBDIRSUFFIX=""
+fi
+
+TMP=${TMP:-/tmp}
+PKG=$TMP/package-util-linux
+
+rm -rf $PKG
+mkdir -p $TMP $PKG
+cd $TMP || exit 1
+rm -rf util-linux-$VERSION
+tar xvf $CWD/util-linux-$VERSION.tar.xz || exit 1
+cd util-linux-$VERSION || exit 1
+chown -R root.root .
+find . \
+ \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
+ -exec chmod 755 {} \+ -o \
+ \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
+ -exec chmod 644 {} \+
+
+# Choose correct options depending on whether PAM is installed:
+if [ -L /lib${LIBDIRSUFFIX}/libpam.so.? ]; then
+ LOGIN_OPTIONS=""
+ # By default, don't use the util-linux version of /bin/su:
+ SHIP_SU=${SHIP_SU:-NO}
+ # Add /etc/pam.d config files:
+ rm -rf $PKG/etc/pam.d
+ mkdir -p $PKG/etc/pam.d
+ for file in $CWD/pam.d/* ; do
+ cp -a ${file} $PKG/etc/pam.d/
+ done
+ if [ "$SHIP_SU" = "YES" ]; then
+ # Add su default file to ensure using ENV_SUPATH with 'su':
+ mkdir -p $PKG/etc/default
+ cp -a $CWD/su.default $PKG/etc/default/su.new
+ chown root:root $PKG/etc/default/su.new
+ chmod 644 $PKG/etc/default/su.new
+ # Add su /etc/pam.d files:
+ cp -a $CWD/pam.d-su/* $PKG/etc/pam.d/
+ fi
+ # Ensure correct perms/ownership on files in /etc/pam.d/:
+ chown root:root $PKG/etc/pam.d/*
+ chmod 644 $PKG/etc/pam.d/*
+ # Don't clobber existing config files:
+ find $PKG/etc/pam.d -type f -exec mv {} {}.new \;
+else
+ # Don't use the util-linux version of /bin/su.
+ # It can't be built without PAM anyway.
+ SHIP_SU=NO
+ LOGIN_OPTIONS="--disable-login"
+fi
+
+# Changing the fdisk -l output (this was done prior to util-linux-ng) broke
+# our installation scripts, so we have changed the name of partition type
+# 83 back to "Linux swap":
+cat $CWD/util-linux.fdisk-no-solaris.diff | patch -p1 --verbose || exit 1
+
+# Revert to the behavior of earlier versions of fdisk which did not list the
+# /dev/ram* devices in 'fdisk -l' output:
+cat $CWD/util-linux.do.not.list.ram.devices.diff | patch -p1 --verbose || exit 1
+
+# This just call the configure script with $1 either being 2 for python2
+# or 3 for python3.
+#
+# The releasenotes say to use --runstatedir, but it doesn't work and the
+# configure script fails. So we'll leave things using localstatedir, but
+# check again later:
+#
+# --runstatedir=/run
+configure_with_python(){
+./configure \
+ --prefix=/usr \
+ --libdir=/usr/lib${LIBDIRSUFFIX} \
+ --sysconfdir=/etc \
+ --localstatedir=/var \
+ --mandir=/usr/man \
+ --infodir=/usr/info \
+ --docdir=/usr/doc/util-linux-$VERSION \
+ --disable-static \
+ --enable-agetty \
+ --enable-kill \
+ --disable-last \
+ --enable-libmount-support-mtab \
+ --enable-line \
+ --enable-mesg \
+ --enable-partx \
+ --enable-pg \
+ --enable-raw \
+ --enable-rename \
+ $LOGIN_OPTIONS \
+ --enable-schedutils \
+ --enable-wall \
+ --enable-write \
+ --enable-use-tty-group \
+ --enable-libblkid \
+ --enable-libmount \
+ --enable-libuuid \
+ --disable-uuidd \
+ --with-python=$1 \
+ --build=$ARCH-slackware-linux
+}
+
+CFLAGS="$SLKCFLAGS" \
+ configure_with_python 2 || exit 1
+
+make $NUMJOBS || make || exit 1
+make install $NUMJOBS DESTDIR=$PKG || exit 1
+
+# These need to be setuid root to work properly (only built for PAM):
+if [ -r $PKG/usr/bin/chfn ]; then
+ chmod 4711 $PKG/usr/bin/chfn
+fi
+if [ -r $PKG/usr/bin/chsh ]; then
+ chmod 4711 $PKG/usr/bin/chsh
+fi
+
+# Build python3 bindings for libmount:
+make clean
+CFLAGS="$SLKCFLAGS" \
+ configure_with_python 3 || exit 1
+make $NUMJOBS \
+ install-pylibmountexecLTLIBRARIES \
+ install-pylibmountexecPYTHON \
+ DESTDIR=$PKG || exit 1
+
+# Remove all overlap with the shadow package, since --disable-login doesn't quite do that:
+rm $PKG/sbin/nologin $PKG/usr/man/man8/nologin.8 $PKG/sbin/sulogin $PKG/usr/man/man8/sulogin.8
+
+# If we aren't shipping su, remove the files:
+if [ "$SHIP_SU" = "NO" ]; then
+ rm -f $PKG/bin/su
+ rm -f $PKG/usr/man/man1/su.1
+ rm -f $PKG/usr/share/bash-completion/completions/su
+fi
+
+# Move the libblkid, libfdisk, libmount, libsmartcols, and
+# libuuid libraries to /lib${LIBSUFFIX}:
+mkdir -p $PKG/lib${LIBDIRSUFFIX}
+( cd $PKG/usr/lib${LIBDIRSUFFIX}
+ mv libblkid.so.1* $PKG/lib${LIBDIRSUFFIX}
+ mv libfdisk.so.1* $PKG/lib${LIBDIRSUFFIX}
+ mv libmount.so.1* $PKG/lib${LIBDIRSUFFIX}
+ mv libsmartcols.so.1* $PKG/lib${LIBDIRSUFFIX}
+ mv libuuid.so.1* $PKG/lib${LIBDIRSUFFIX}
+ rm -f libblkid.so libfdisk.so libmount.so libsmartcols.so libuuid.so
+ ln -sf ../../lib${LIBDIRSUFFIX}/libblkid.so.1 libblkid.so
+ ln -sf ../../lib${LIBDIRSUFFIX}/libfdisk.so.1 libfdisk.so
+ ln -sf ../../lib${LIBDIRSUFFIX}/libmount.so.1 libmount.so
+ ln -sf ../../lib${LIBDIRSUFFIX}/libsmartcols.so.1 libsmartcols.so
+ ln -sf ../../lib${LIBDIRSUFFIX}/libuuid.so.1 libuuid.so
+)
+
+# Moving things around that have been in the same place
+# for 15 years is, IMHO, not a wise idea AT ALL.
+# If this had to be moved, some place out of /usr might
+# have shown a grain of insight...
+if [ -r $PKG/usr/sbin/fdformat ]; then
+ mkdir -p $PKG/usr/bin
+ mv $PKG/usr/sbin/fdformat $PKG/usr/bin/fdformat
+ # Now since stuff will start looking in this new place,
+ # we have no choice but to link these:
+ ( cd $PKG/usr/sbin
+ ln -sf ../bin/fdformat .
+ )
+fi
+
+# Add the rc.setterm init script to set default terminal attributes:
+mkdir -p $PKG/etc/rc.d
+cp -a $CWD/rc.setterm $PKG/etc/rc.d/rc.setterm.new
+chown root:root $PKG/etc/rc.d/rc.setterm.new
+chmod 755 $PKG/etc/rc.d/rc.setterm.new
+
+# ddate.{1,c} taken from https://github.com/bo0ts/ddate:
+cp -a $CWD/ddate.? .
+cc -O -o ddate ddate.c
+cp -a ddate $PKG/usr/bin
+cat ddate.1 > $PKG/usr/man/man1/ddate.1
+chown root:root $PKG/usr/bin/ddate
+
+# Build ziptool (install as jaztool to avoid conflict with libzip):
+cd $TMP || exit 1
+rm -rf ziptool-$ZIPTOOLVERS
+tar xvf $CWD/ziptool-$ZIPTOOLVERS.tar.xz || exit 1
+cd ziptool-$ZIPTOOLVERS || exit 1
+cat $CWD/ziptool-fix_build.patch | patch -p1 || exit 1
+mkdir scsi
+cat $CWD/scsi_ioctl.h > scsi/scsi_ioctl.h
+chown -R root:root .
+make || exit 1
+strip ziptool
+cat ziptool > $PKG/sbin/jaztool
+chmod 0755 $PKG/sbin/jaztool
+mkdir -p $PKG/usr/doc/ziptool-$ZIPTOOLVERS
+cp -a README $PKG/usr/doc/ziptool-$ZIPTOOLVERS
+chmod 644 $PKG/usr/doc/ziptool-$ZIPTOOLVERS/*
+cat ziptool.1.gz > $PKG/usr/man/man1/jaztool.1.gz
+
+# Build bsdstrings
+cd $TMP || exit 1
+rm -rf bsdstrings
+tar xvf $CWD/bsdstrings.tar.gz || exit 1
+cd bsdstrings || exit 1
+cat $CWD/bsdstrings-util-linux_overflow.diff | patch -p1 --verbose || exit 1
+make || exit 1
+strip strings
+cat strings > $PKG/usr/bin/strings-BSD
+chmod 0755 $PKG/usr/bin/strings-BSD
+cat strings.1 | gzip -9c > $PKG/usr/man/man1/strings-BSD.1.gz
+
+# Build adjtimex
+cd $TMP || exit 1
+rm -rf adjtimex-$ADJTIMEXVERS
+tar xvf $CWD/adjtimex_${ADJTIMEXVERS}.orig.tar.gz || exit 1
+cd adjtimex-$ADJTIMEXVERS || exit 1
+chown -R root:root .
+cat $CWD/adjtimex_1.29-2.2.diff | patch -p1 || exit 1
+CFLAGS=-O2 ./configure --prefix=/usr || exit 1
+make || exit 1
+strip adjtimex
+cat adjtimex > $PKG/sbin/adjtimex
+chmod 0755 $PKG/sbin/adjtimex
+cat adjtimex.8 | gzip -9c > $PKG/usr/man/man8/adjtimex.8.gz
+mkdir -p $PKG/usr/doc/adjtimex-$ADJTIMEXVERS
+cp -a COPYING COPYRIGHT README README.ru adjtimex.lsm \
+ $PKG/usr/doc/adjtimex-$ADJTIMEXVERS
+
+# Build setserial
+cd $TMP || exit 1
+rm -rf setserial-$SETSERIALVERS
+tar xvf $CWD/setserial-$SETSERIALVERS.tar.gz || exit 1
+cd setserial-$SETSERIALVERS || exit 1
+chown -R root:root .
+cat $CWD/setserial-rc.serial.diff | patch -E -p1 --verbose || exit 1
+cat $CWD/setserial-undef_TIOCGHAYESESP.diff | patch -E -p1 --verbose || exit 1
+# The original config.{guess,sub} do not work on x86_64
+cp -p /usr/share/libtool/build-aux/config.{guess,sub} .
+./configure --prefix=/usr || exit 1
+make || exit 1
+strip setserial
+cat setserial > $PKG/sbin/setserial
+chmod 0755 $PKG/sbin/setserial
+mkdir -p $PKG/etc/rc.d
+cat rc.serial > $PKG/etc/rc.d/rc.serial.new
+cat serial.conf > $PKG/etc/serial.conf.new
+cat setserial.8 | gzip -9c > $PKG/usr/man/man8/setserial.8.gz
+
+# These have always traditionally been available before /usr
+# might be mounted:
+( cd $PKG/usr/bin
+ mv getopt setterm $PKG/bin
+ cd $PKG/usr/bin
+ ln -s ../../bin/getopt .
+ ln -s ../../bin/setterm .
+)
+
+cd $TMP/util-linux-$VERSION # Go back home :)
+
+# Now let's add some important symlinks :)
+( cd $PKG/sbin
+ ln -s ../bin/mount .
+ ln -s ../bin/umount .
+ #ln -s ziptool jaztool
+ ln -s hwclock clock
+ cd $PKG/usr/sbin
+ ln -s ../../sbin/cfdisk .
+ ln -s ../../sbin/ctrlaltdel .
+ ln -s ../../sbin/sfdisk .
+ cd $PKG/usr/bin
+ ln -s ../sbin/readprofile .
+ # tunelp was removed by upstream:
+ #ln -s ../sbin/tunelp .
+ ln -s ../../bin/more .
+ ln -s ../../sbin/raw .
+ cd $PKG/usr/man/man1
+ #ln -s ziptool.1 jaztool.1
+ cd $PKG/usr/man/man8
+ ln -s hwclock.8 clock.8
+)
+
+find $PKG | xargs file | grep -e "executable" -e "shared object" \
+ | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
+
+# Don't ship .la files:
+rm -f $PKG/{,usr/}lib${LIBDIRSUFFIX}/*.la
+
+# Compress and if needed symlink the man pages:
+if [ -d $PKG/usr/man ]; then
+ ( cd $PKG/usr/man
+ for manpagedir in $(find . -type d -name "man*") ; do
+ ( cd $manpagedir
+ for eachpage in $( find . -type l -maxdepth 1) ; do
+ ln -s $( readlink $eachpage ).gz $eachpage.gz
+ rm $eachpage
+ done
+ gzip -9 *.?
+ )
+ done
+ )
+fi
+
+# Compress info page and remove dir file
+rm $PKG/usr/info/dir
+gzip -9 $PKG/usr/info/*
+
+mkdir -p $PKG/usr/doc/util-linux-$VERSION
+cp -a AUTHORS COPYING* DEPRECATED NEWS README* \
+ Documentation/v${VERSION}-ReleaseNotes \
+ Documentation/licenses/* Documentation/{TODO,*.txt} \
+ $PKG/usr/doc/util-linux-$VERSION
+
+mkdir $PKG/install
+cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
+
+cd $PKG
+/sbin/makepkg -l y -c n $TMP/util-linux-$VERSION-$ARCH-$BUILD.txz
+
diff --git a/deps/util-linux/util-linux.do.not.list.ram.devices.diff b/deps/util-linux/util-linux.do.not.list.ram.devices.diff
new file mode 100644
index 0000000..33a7430
--- /dev/null
+++ b/deps/util-linux/util-linux.do.not.list.ram.devices.diff
@@ -0,0 +1,13 @@
+--- ./disk-utils/fdisk-list.c.orig 2018-09-20 07:38:55.845404951 -0500
++++ ./disk-utils/fdisk-list.c 2019-01-02 15:53:21.256868721 -0600
+@@ -337,6 +337,10 @@
+ if (devno <= 0)
+ continue;
+
++ /* Don't list /dev/ram* devices */
++ if (strstr(line, "ram") && devno >= 256)
++ continue;
++
+ if (sysfs_devno_is_dm_private(devno, NULL) ||
+ sysfs_devno_is_wholedisk(devno) <= 0)
+ continue;
diff --git a/deps/util-linux/util-linux.fdisk-no-solaris.diff b/deps/util-linux/util-linux.fdisk-no-solaris.diff
new file mode 100644
index 0000000..a495ffa
--- /dev/null
+++ b/deps/util-linux/util-linux.fdisk-no-solaris.diff
@@ -0,0 +1,12 @@
+diff -Nur util-linux-2.24.2.orig/include/pt-mbr-partnames.h util-linux-2.24.2/include/pt-mbr-partnames.h
+--- util-linux-2.24.2.orig/include/pt-mbr-partnames.h 2014-04-24 02:37:04.352704164 -0500
++++ util-linux-2.24.2/include/pt-mbr-partnames.h 2014-07-03 03:33:27.054574467 -0500
+@@ -49,7 +49,7 @@
+ {0x75, N_("PC/IX")},
+ {0x80, N_("Old Minix")}, /* Minix 1.4a and earlier */
+ {0x81, N_("Minix / old Linux")},/* Minix 1.4b and later */
+- {0x82, N_("Linux swap / Solaris")},
++ {0x82, N_("Linux swap")},
+ {0x83, N_("Linux")},
+ {0x84, N_("OS/2 hidden C: drive")},
+ {0x85, N_("Linux extended")},
diff --git a/deps/util-linux/ziptool-fix_build.patch b/deps/util-linux/ziptool-fix_build.patch
new file mode 100644
index 0000000..a2d3d51
--- /dev/null
+++ b/deps/util-linux/ziptool-fix_build.patch
@@ -0,0 +1,24 @@
+diff -Nur ziptool-1.4.0.orig/Makefile ziptool-1.4.0/Makefile
+--- ziptool-1.4.0.orig/Makefile 2002-08-23 17:13:48.000000000 -0500
++++ ziptool-1.4.0/Makefile 2009-02-09 16:33:12.913637302 -0600
+@@ -5,10 +5,6 @@
+ #
+ CFLAGS = -O2 -g -Wall
+
+-# Path to linux kernel sources.
+-#
+-LINUX_SRC_DIR = /usr/src/linux
+-
+ # Installation directories
+ #
+ INSTALL_BIN_DIR = /usr/bin
+@@ -30,7 +26,7 @@
+ cd $(INSTALL_MAN_DIR)/man1; ln -sf ziptool.1.gz jaztool.1.gz
+
+ ziptool: ziptool.c
+- cc $(CFLAGS) -I$(LINUX_SRC_DIR)/include -o ziptool ziptool.c
++ cc $(CFLAGS) -I. -o ziptool ziptool.c
+
+ jaztool: ziptool.c
+- cc $(CFLAGS) -I$(LINUX_SRC_DIR)/include -o jaztool ziptool.c
++ cc $(CFLAGS) -I. -o jaztool ziptool.c
diff --git a/deps/woff2/.deps b/deps/woff2/.deps
deleted file mode 100644
index 71867b8..0000000
--- a/deps/woff2/.deps
+++ /dev/null
@@ -1 +0,0 @@
-brotli
diff --git a/deps/woff2/.url b/deps/woff2/.url
deleted file mode 100644
index c7e97d3..0000000
--- a/deps/woff2/.url
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/sh
-
-# Define variables:
-PKGNAM=woff2
-MYDATE=$(date +%Y%m%d)
-GITURI="https://github.com/google/${PKGNAM}.git"
-
-# Checkout source and create tarball:
-rm -rf ${PKGNAM}temp
-git clone ${GITURI} ${PKGNAM}temp
-cd ${PKGNAM}temp
- MYHASH=$(git rev-parse --short=7 HEAD)
-cd - 1>/dev/null
-mv ${PKGNAM}temp ${PKGNAM}-${MYHASH}_${MYDATE}
-tar -Jcf ${PKGNAM}-${MYHASH}_${MYDATE}.tar.xz ${PKGNAM}-${MYHASH}_${MYDATE}
-rm -rf ${PKGNAM}-${MYHASH}_${MYDATE}
diff --git a/deps/woff2/slack-desc b/deps/woff2/slack-desc
deleted file mode 100644
index 1d0ca07..0000000
--- a/deps/woff2/slack-desc
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description.
-# Line up the first '|' above the ':' following the base package name, and
-# the '|' on the right side marks the last column you can put a character in.
-# You must make exactly 11 lines for the formatting to be correct. It's also
-# customary to leave one space after the ':' except on otherwise blank lines.
-
- |-----handy-ruler------------------------------------------------------|
-woff2: woff2 (web font compression format)
-woff2:
-woff2: WOFF2 is the Web Open Font Format 2 reference implementation.
-woff2: See also https://www.w3.org/TR/WOFF2/
-woff2: This tarball contains an embedded version of brotli (a lossless
-woff2: compression algorithm) used to build woff2.
-woff2:
-woff2:
-woff2:
-woff2: Homepage: https://github.com/google/woff2
-woff2:
diff --git a/deps/woff2/woff2.SlackBuild b/deps/woff2/woff2.SlackBuild
deleted file mode 100755
index 6293b3f..0000000
--- a/deps/woff2/woff2.SlackBuild
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/bin/sh
-# Copyright 2019 Patrick J. Volkerding, Sebeka, MN, USA
-# Copyright 2019 Eric Hameleers, Eindhoven, NL
-# All rights reserved.
-#
-# Permission to use, copy, modify, and distribute this software for
-# any purpose with or without fee is hereby granted, provided that
-# the above copyright notice and this permission notice appear in all
-# copies.
-#
-# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR
-# CONTRIBUTORS 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.
-# -----------------------------------------------------------------------------
-
-
-cd $(dirname $0) ; CWD=$(pwd)
-
-PKGNAM=woff2
-VERSION=${VERSION:-"a0d0ed7_20190630"}
-BUILD=${BUILD:-1}
-
-NUMJOBS=${NUMJOBS:-" -j$(nproc) "}
-
-TMP=${TMP:-/tmp}
-PKG=$TMP/package-$PKGNAM
-
-# Automatically determine the architecture we're building on:
-if [ -z "$ARCH" ]; then
- case "$(uname -m)" in
- i?86) ARCH=i586 ;;
- arm*) readelf /usr/bin/file -A | egrep -q "Tag_CPU.*[4,5]" && ARCH=arm || ARCH=armv7hl ;;
- # Unless $ARCH is already set, use uname -m for all other archs:
- *) ARCH=$(uname -m) ;;
- esac
- export ARCH
-fi
-
-# If the variable PRINT_PACKAGE_NAME is set, then this script will report what
-# the name of the created package would be, and then exit. This information
-# could be useful to other scripts.
-if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
- echo "$PKGNAM-$VERSION-$ARCH-$BUILD.txz"
- exit 0
-fi
-
-# Set CFLAGS/CXXFLAGS and LIBDIRSUFFIX:
-if [ "$ARCH" = "i486" ]; then
- SLKCFLAGS="-O2 -march=i486 -mtune=i686"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "s390" ]; then
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-elif [ "$ARCH" = "x86_64" ]; then
- SLKCFLAGS="-O2 -fPIC"
- LIBDIRSUFFIX="64"
-elif [ "$ARCH" = "arm" ]; then
- SLKCFLAGS="-O2 -march=armv5te"
- LIBDIRSUFFIX=""
-else
- SLKCFLAGS="-O2"
- LIBDIRSUFFIX=""
-fi
-
-case "$ARCH" in
- arm*) TARGET=$ARCH-slackware-linux-gnueabi ;;
- *) TARGET=$ARCH-slackware-linux ;;
-esac
-
-rm -rf $PKG
-mkdir -p $TMP $PKG
-cd $TMP
-rm -rf $PKGNAM-$VERSION
-tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1
-cd $PKGNAM-$VERSION || exit 1
-
-# Make sure ownerships and permissions are sane:
-chown -R root:root .
-find . \
- \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
- \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
-
-# Build and install:
-export CFLAGS="$SLKCFLAGS"
-export CXXFLAGS="$SLKCFLAGS"
-cmake \
- -G Ninja \
- -DCMAKE_INSTALL_PREFIX=/usr \
- -DCMAKE_INSTALL_LIBDIR=/usr/lib${LIBDIRSUFFIX} \
- . || exit 1
-ninja || exit 1
-DESTDIR=$PKG ninja install || exit 1
-
-# Strip binaries:
-find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | \
- grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
-
-# Add documentation:
-mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION
-cp -a \
- CONTRIBUTING.md LICENSE README.md \
- $PKG/usr/doc/$PKGNAM-$VERSION
-
-# Add a description:
-mkdir -p $PKG/install
-cat $CWD/slack-desc > $PKG/install/slack-desc
-
-# Create the package:
-cd $PKG
-/sbin/makepkg -l y -c n $TMP/$PKGNAM-$VERSION-$ARCH-$BUILD.txz
-
diff --git a/deps/xorg-server/patches/0001-Always-install-vbe-and-int10-sdk-headers.patch b/deps/xorg-server/patches/0001-Always-install-vbe-and-int10-sdk-headers.patch
new file mode 100644
index 0000000..c613eb8
--- /dev/null
+++ b/deps/xorg-server/patches/0001-Always-install-vbe-and-int10-sdk-headers.patch
@@ -0,0 +1,37 @@
+From e96a83d9b1b5a52a41213c7a4840dc96b4f5b06f Mon Sep 17 00:00:00 2001
+From: Adam Jackson <ajax@redhat.com>
+Date: Wed, 15 Aug 2012 12:35:21 -0400
+Subject: [PATCH] Always install vbe and int10 sdk headers
+
+Signed-off-by: Adam Jackson <ajax@redhat.com>
+---
+ hw/xfree86/Makefile.am | 12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
+index b876b79..a170b58 100644
+--- a/hw/xfree86/Makefile.am
++++ b/hw/xfree86/Makefile.am
+@@ -26,17 +26,9 @@ if VGAHW
+ VGAHW_SUBDIR = vgahw
+ endif
+
+-if VBE
+-VBE_SUBDIR = vbe
+-endif
+-
+-if INT10MODULE
+-INT10_SUBDIR = int10
+-endif
+-
+-SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \
++SUBDIRS = common ddc x86emu int10 os-support parser \
+ ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \
+- $(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods xkb \
++ $(DRI2_SUBDIR) . vbe i2c dixmods xkb \
+ fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \
+ $(GLAMOR_EGL_SUBDIR) drivers
+
+--
+2.13.6
+
diff --git a/deps/xorg-server/patches/0001-autobind-GPUs-to-the-screen.patch b/deps/xorg-server/patches/0001-autobind-GPUs-to-the-screen.patch
new file mode 100644
index 0000000..86b96a2
--- /dev/null
+++ b/deps/xorg-server/patches/0001-autobind-GPUs-to-the-screen.patch
@@ -0,0 +1,293 @@
+From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001
+From: Dave Airlie <airlied@redhat.com>
+Date: Mon, 2 Apr 2018 16:49:02 -0400
+Subject: [PATCH] autobind GPUs to the screen
+
+This is a modified version of a patch we've been carry-ing in Fedora and
+RHEL for years now. This patch automatically adds secondary GPUs to the
+master as output sink / offload source making e.g. the use of
+slave-outputs just work, with requiring the user to manually run
+"xrandr --setprovideroutputsource" before he can hookup an external
+monitor to his hybrid graphics laptop.
+
+There is one problem with this patch, which is why it was not upstreamed
+before. What to do when a secondary GPU gets detected really is a policy
+decission (e.g. one may want to autobind PCI GPUs but not USB ones) and
+as such should be under control of the Desktop Environment.
+
+Unconditionally adding autobinding support to the xserver will result
+in races between the DE dealing with the hotplug of a secondary GPU
+and the server itself dealing with it.
+
+However we've waited for years for any Desktop Environments to actually
+start doing some sort of autoconfiguration of secondary GPUs and there
+is still not a single DE dealing with this, so I believe that it is
+time to upstream this now.
+
+To avoid potential future problems if any DEs get support for doing
+secondary GPU configuration themselves, the new autobind functionality
+is made optional. Since no DEs currently support doing this themselves it
+is enabled by default. When DEs grow support for doing this themselves
+they can disable the servers autobinding through the servers cmdline or a
+xorg.conf snippet.
+
+Signed-off-by: Dave Airlie <airlied@gmail.com>
+[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream]
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+---
+ hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++
+ hw/xfree86/common/xf86Globals.c | 2 ++
+ hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++
+ hw/xfree86/common/xf86Priv.h | 1 +
+ hw/xfree86/common/xf86Privstr.h | 1 +
+ hw/xfree86/common/xf86platformBus.c | 4 ++++
+ hw/xfree86/man/Xorg.man | 7 +++++++
+ hw/xfree86/man/xorg.conf.man | 6 ++++++
+ randr/randrstr.h | 3 +++
+ randr/rrprovider.c | 22 ++++++++++++++++++++++
+ 10 files changed, 85 insertions(+)
+
+diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c
+index 2c1d335..d7d7c2e 100644
+--- a/hw/xfree86/common/xf86Config.c
++++ b/hw/xfree86/common/xf86Config.c
+@@ -643,6 +643,7 @@ typedef enum {
+ FLAG_DRI2,
+ FLAG_USE_SIGIO,
+ FLAG_AUTO_ADD_GPU,
++ FLAG_AUTO_BIND_GPU,
+ FLAG_MAX_CLIENTS,
+ FLAG_IGLX,
+ FLAG_DEBUG,
+@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = {
+ {0}, FALSE},
+ {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN,
+ {0}, FALSE},
++ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN,
++ {0}, FALSE},
+ {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER,
+ {0}, FALSE },
+ {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN,
+@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts)
+ }
+ xf86Msg(from, "%sutomatically adding GPU devices\n",
+ xf86Info.autoAddGPU ? "A" : "Not a");
++
++ if (xf86AutoBindGPUDisabled) {
++ xf86Info.autoBindGPU = FALSE;
++ from = X_CMDLINE;
++ }
++ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) {
++ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU,
++ &xf86Info.autoBindGPU);
++ from = X_CONFIG;
++ }
++ else {
++ from = X_DEFAULT;
++ }
++ xf86Msg(from, "%sutomatically binding GPU devices\n",
++ xf86Info.autoBindGPU ? "A" : "Not a");
++
+ /*
+ * Set things up based on the config file information. Some of these
+ * settings may be overridden later when the command line options are
+diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
+index e890f05..7b27b4c 100644
+--- a/hw/xfree86/common/xf86Globals.c
++++ b/hw/xfree86/common/xf86Globals.c
+@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = {
+ #else
+ .autoAddGPU = FALSE,
+ #endif
++ .autoBindGPU = TRUE,
+ };
+
+ const char *xf86ConfigFile = NULL;
+@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE;
+ Gamma xf86Gamma = { 0.0, 0.0, 0.0 };
+
+ Bool xf86AllowMouseOpenFail = FALSE;
++Bool xf86AutoBindGPUDisabled = FALSE;
+
+ #ifdef XF86VIDMODE
+ Bool xf86VidModeDisabled = FALSE;
+diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
+index ea42ec9..ec255b6 100644
+--- a/hw/xfree86/common/xf86Init.c
++++ b/hw/xfree86/common/xf86Init.c
+@@ -76,6 +76,7 @@
+ #include "xf86DDC.h"
+ #include "xf86Xinput.h"
+ #include "xf86InPriv.h"
++#include "xf86Crtc.h"
+ #include "picturestr.h"
+ #include "randrstr.h"
+ #include "glxvndabi.h"
+@@ -237,6 +238,19 @@ xf86PrivsElevated(void)
+ return PrivsElevated();
+ }
+
++static void
++xf86AutoConfigOutputDevices(void)
++{
++ int i;
++
++ if (!xf86Info.autoBindGPU)
++ return;
++
++ for (i = 0; i < xf86NumGPUScreens; i++)
++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
++ xf86ScrnToScreen(xf86Screens[0]));
++}
++
+ static void
+ TrapSignals(void)
+ {
+@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
+ for (i = 0; i < xf86NumGPUScreens; i++)
+ AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
+
++ xf86AutoConfigOutputDevices();
++
+ xf86VGAarbiterWrapFunctions();
+ if (sigio_blocked)
+ input_unlock();
+@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i)
+ xf86Info.iglxFrom = X_CMDLINE;
+ return 0;
+ }
++ if (!strcmp(argv[i], "-noautoBindGPU")) {
++ xf86AutoBindGPUDisabled = TRUE;
++ return 1;
++ }
+
+ /* OS-specific processing */
+ return xf86ProcessArgument(argc, argv, i);
+diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h
+index 4fe2b5f..6566622 100644
+--- a/hw/xfree86/common/xf86Priv.h
++++ b/hw/xfree86/common/xf86Priv.h
+@@ -46,6 +46,7 @@
+ extern _X_EXPORT const char *xf86ConfigFile;
+ extern _X_EXPORT const char *xf86ConfigDir;
+ extern _X_EXPORT Bool xf86AllowMouseOpenFail;
++extern _X_EXPORT Bool xf86AutoBindGPUDisabled;
+
+ #ifdef XF86VIDMODE
+ extern _X_EXPORT Bool xf86VidModeDisabled;
+diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h
+index 21c2e1f..6c71863 100644
+--- a/hw/xfree86/common/xf86Privstr.h
++++ b/hw/xfree86/common/xf86Privstr.h
+@@ -98,6 +98,7 @@ typedef struct {
+
+ Bool autoAddGPU;
+ const char *debug;
++ Bool autoBindGPU;
+ } xf86InfoRec, *xf86InfoPtr;
+
+ /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */
+diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
+index cef47da..913a324 100644
+--- a/hw/xfree86/common/xf86platformBus.c
++++ b/hw/xfree86/common/xf86platformBus.c
+@@ -49,6 +49,7 @@
+ #include "Pci.h"
+ #include "xf86platformBus.h"
+ #include "xf86Config.h"
++#include "xf86Crtc.h"
+
+ #include "randrstr.h"
+ int platformSlotClaimed;
+@@ -665,6 +666,9 @@ xf86platformAddDevice(int index)
+ }
+ /* attach unbound to 0 protocol screen */
+ AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
++ if (xf86Info.autoBindGPU)
++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]),
++ xf86ScrnToScreen(xf86Screens[0]));
+
+ RRResourcesChanged(xf86Screens[0]->pScreen);
+ RRTellChanged(xf86Screens[0]->pScreen);
+diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man
+index 13a9dc3..745f986 100644
+--- a/hw/xfree86/man/Xorg.man
++++ b/hw/xfree86/man/Xorg.man
+@@ -283,6 +283,13 @@ is a comma separated list of directories to search for
+ server modules. This option is only available when the server is run
+ as root (i.e, with real-uid 0).
+ .TP 8
++.B \-noautoBindGPU
++Disable automatically setting secondary GPUs up as output sinks and offload
++sources. This is equivalent to setting the
++.B AutoBindGPU
++xorg.conf(__filemansuffix__) file option. To
++.B false.
++.TP 8
+ .B \-nosilk
+ Disable Silken Mouse support.
+ .TP 8
+diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man
+index 9589262..8d51e06 100644
+--- a/hw/xfree86/man/xorg.conf.man
++++ b/hw/xfree86/man/xorg.conf.man
+@@ -672,6 +672,12 @@ Enabled by default.
+ If this option is disabled, then no GPU devices will be added from the udev
+ backend. Enabled by default. (May need to be disabled to setup Xinerama).
+ .TP 7
++.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q
++If enabled then secondary GPUs will be automatically set up as output-sinks and
++offload-sources. Making e.g. laptop outputs connected only to the secondary
++GPU directly available for use without needing to run
++"xrandr --setprovideroutputsource". Enabled by default.
++.TP 7
+ .BI "Option \*qLog\*q \*q" string \*q
+ This option controls whether the log is flushed and/or synced to disk after
+ each message.
+diff --git a/randr/randrstr.h b/randr/randrstr.h
+index f94174b..092d726 100644
+--- a/randr/randrstr.h
++++ b/randr/randrstr.h
+@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p);
+ extern _X_EXPORT void
+ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
+
++extern _X_EXPORT void
++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen);
++
+ /* rrproviderproperty.c */
+
+ extern _X_EXPORT void
+diff --git a/randr/rrprovider.c b/randr/rrprovider.c
+index e4bc2bf..e04c18f 100644
+--- a/randr/rrprovider.c
++++ b/randr/rrprovider.c
+@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider)
+
+ WriteEventsToClient(client, 1, (xEvent *) &pe);
+ }
++
++void
++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen)
++{
++ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen);
++ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen);
++ RRProviderPtr provider = pScrPriv->provider;
++ RRProviderPtr master_provider = masterPriv->provider;
++
++ if (!provider || !master_provider)
++ return;
++
++ if ((provider->capabilities & RR_Capability_SinkOutput) &&
++ (master_provider->capabilities & RR_Capability_SourceOutput)) {
++ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider);
++ RRInitPrimeSyncProps(pScreen);
++ }
++
++ if ((provider->capabilities & RR_Capability_SourceOffload) &&
++ (master_provider->capabilities & RR_Capability_SinkOffload))
++ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider);
++}
+--
+2.16.2
+
diff --git a/deps/xorg-server/patches/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch b/deps/xorg-server/patches/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch
new file mode 100644
index 0000000..87b2877
--- /dev/null
+++ b/deps/xorg-server/patches/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch
@@ -0,0 +1,47 @@
+From aa2f34d80ef3118eae0cce73b610c36cdcb978fe Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Sat, 22 Apr 2017 02:26:28 +1000
+Subject: [PATCH xserver] xfree86: use modesetting driver by default on GeForce
+ 8 and newer
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+---
+ hw/xfree86/common/xf86pciBus.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+--- ./hw/xfree86/common/xf86pciBus.c.orig 2019-02-26 13:28:50.000000000 -0600
++++ ./hw/xfree86/common/xf86pciBus.c 2019-02-26 17:16:04.131096857 -0600
+@@ -37,6 +37,7 @@
+ #include <unistd.h>
+ #include <X11/X.h>
+ #include <pciaccess.h>
++#include <xf86drm.h>
+ #include "os.h"
+ #include "Pci.h"
+ #include "xf86.h"
+@@ -1191,6 +1192,25 @@
+ int idx = 0;
+
+ #if defined(__linux__) || defined(__NetBSD__)
++ char busid[32];
++ int fd;
++
++ snprintf(busid, sizeof(busid), "pci:%04x:%02x:%02x.%d",
++ dev->domain, dev->bus, dev->dev, dev->func);
++
++ /* 'modesetting' is preferred for GeForce 8 and newer GPUs */
++ fd = drmOpenWithType("nouveau", busid, DRM_NODE_RENDER);
++ if (fd >= 0) {
++ uint64_t args[] = { 11 /* NOUVEAU_GETPARAM_CHIPSET_ID */, 0 };
++ int ret = drmCommandWriteRead(fd, 0 /* DRM_NOUVEAU_GETPARAM */,
++ &args, sizeof(args));
++ drmClose(fd);
++ if (ret == 0) {
++ if (args[1] == 0x050 || args[1] >= 0x80)
++ break;
++ }
++ }
++
+ driverList[idx++] = "nouveau";
+ #endif
+ driverList[idx++] = "nv";
diff --git a/deps/xorg-server/patches/fix-nouveau-segfault.diff b/deps/xorg-server/patches/fix-nouveau-segfault.diff
new file mode 100644
index 0000000..db66956
--- /dev/null
+++ b/deps/xorg-server/patches/fix-nouveau-segfault.diff
@@ -0,0 +1,12 @@
+--- ./render/mipict.c.orig 2018-05-10 11:32:37.000000000 -0500
++++ ./render/mipict.c 2018-05-30 00:01:50.648530333 -0500
+@@ -394,6 +394,9 @@
+ CARD32 r, g, b, a;
+ miIndexedPtr pIndexed;
+
++ if(! format)
++ *pixel = (color->alpha >> 8 << 24) | (color->red >> 8 << 16) | (color->green & 0xff00) | (color->blue >> 8);
++ else
+ switch (format->type) {
+ case PictTypeDirect:
+ r = color->red >> (16 - Ones(format->direct.redMask));
diff --git a/deps/xorg-server/xorg-server.SlackBuild b/deps/xorg-server/xorg-server.SlackBuild
index 633701e..5163675 100755
--- a/deps/xorg-server/xorg-server.SlackBuild
+++ b/deps/xorg-server/xorg-server.SlackBuild
@@ -1,5 +1,5 @@
#!/bin/sh
-# Copyright 2007-2018 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2007-2020 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for
@@ -22,12 +22,12 @@
# -----------------------------------------------------------------------------
# Condensed from the modular x11.SlackBuild
-# 2016, 2017, 2018 by Eric Hameleers <alien@slackware.com>
+# 2016, 2017, 2018, 2020 by Eric Hameleers <alien@slackware.com>
# Note: this package contains _all_ X servers. Not just Xorg, but also:
# Xnest, Xephyr, Xvfb, Xwayland.
PKGNAM=xorg-server
-VERSION=${VERSION:-1.19.6}
+VERSION=${VERSION:-1.20.8}
BUILD=${BUILD:-2}
cd $(dirname $0) ; CWD=$(pwd)
@@ -86,16 +86,34 @@ tar xvf $CWD/$PKGNAM-$VERSION.tar.xz || exit 1
cd $PKGNAM-$VERSION || exit 1
# Apply patches:
+# We've used this one forever.
cat $CWD/patches/x11.startwithblackscreen.diff | patch -p1 --verbose || exit 1
+# Without this patch, combo mouse/keyboard (such as Logitech through unified
+# receiver) may be unable to set the desired keyboard layout.
cat $CWD/patches/xorg-server.combo.mouse.keyboard.layout.patch | patch -p1 --verbose || exit 1
+# Fix a segfault in xorg-server-1.20.0. Odds are good this will be fixed in
+# the next xorg-server and will no longer apply then.
+cat $CWD/patches/fix-nouveau-segfault.diff | patch -p1 --verbose || exit 1
+# From Fedora Rawhide 2018/7
+# (possibly useful, doesn't seem like it will hurt anything):
+cat $CWD/patches/0001-Always-install-vbe-and-int10-sdk-headers.patch | patch -p1 --verbose || exit 1
+# From Fedora Rawhide 2018/7, looks like many other distributions have added
+# this patch for a long time. Keep an eye out for newer versions though, and
+# revisit this if any DE begin to manage secondary GPUs (although none do yet):
+cat $CWD/patches/0001-autobind-GPUs-to-the-screen.patch | patch -p1 --verbose || exit 1
+# The upstream nouveau developers recommend this. On newer nvidia cards it works
+# better to use the generic modesetting ddx rather than nouveau.
+# Reference: https://bugs.freedesktop.org/show_bug.cgi?id=94844
+# Added here 2018/7.
+cat $CWD/patches/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch | patch -p1 --verbose || exit 1
# Make sure ownerships and permissions are sane:
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
- -exec chmod 755 {} \; -o \
+ -exec chmod 755 {} \+ -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
- -exec chmod 644 {} \;
+ -exec chmod 644 {} \+
# Servers to build:
BUILD_SERVERS=" \
@@ -106,14 +124,10 @@ BUILD_SERVERS=" \
--enable-glamor \
--enable-kdrive \
--enable-xephyr \
- --enable-xfbdev \
--enable-xwayland \
--enable-config-udev \
- --enable-kdrive-evdev \
- --enable-kdrive-kbd \
- --enable-kdrive-mouse \
--disable-config-hal \
- --disable-systemd-logind"
+ --enable-systemd-logind"
#MESA_VERSION=${MESA_VERSION:-7.5} # unused in 1.7+
@@ -139,7 +153,6 @@ CFLAGS="$SLKCFLAGS" \
--with-module-dir=/usr/lib${LIBDIRSUFFIX}/xorg/modules \
--with-os-name="Slackware 15.0" \
--with-os-vendor="Slackware Linux Project" \
- --with-shared-memory-dir=/dev/shm \
--with-xkb-path=/etc/X11/xkb \
--with-xkb-output=/var/lib/xkb \
$BUILD_SERVERS \
@@ -226,7 +239,7 @@ rmdir $PKG/var 2>/dev/null
# While I hate to have X11 take over another generic-sounding
# piece of prime filesystem real estate, this symlink will
-# direct (for now) proprietary X drivers into the corrent
+# direct (for now) proprietary X drivers into the correct
# location:
( cd $PKG/usr/lib${LIBDIRSUFFIX}
diff --git a/kde/build/digikam b/kde/build/alkimia
index 0cfbf08..0cfbf08 100644
--- a/kde/build/digikam
+++ b/kde/build/alkimia
diff --git a/kde/build/calligra b/kde/build/calligra
deleted file mode 100644
index f599e28..0000000
--- a/kde/build/calligra
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/kde/build/kile b/kde/build/kile
deleted file mode 100644
index 00750ed..0000000
--- a/kde/build/kile
+++ /dev/null
@@ -1 +0,0 @@
-3
diff --git a/kde/build/kjots b/kde/build/kjots
index 00750ed..b8626c4 100644
--- a/kde/build/kjots
+++ b/kde/build/kjots
@@ -1 +1 @@
-3
+4
diff --git a/kde/build/krita b/kde/build/krita
deleted file mode 100644
index 0cfbf08..0000000
--- a/kde/build/krita
+++ /dev/null
@@ -1 +0,0 @@
-2
diff --git a/kde/build/sddm-qt5 b/kde/build/sddm-qt5
new file mode 100644
index 0000000..1e8b314
--- /dev/null
+++ b/kde/build/sddm-qt5
@@ -0,0 +1 @@
+6
diff --git a/kde/cmake/alkimia b/kde/cmake/alkimia
new file mode 100644
index 0000000..5062df2
--- /dev/null
+++ b/kde/cmake/alkimia
@@ -0,0 +1,26 @@
+mkdir build
+cd build
+ cmake \
+ $KDE_OPT_ARGS \
+ -DKDE_PLATFORM_FEATURE_DISABLE_DEPRECATED=TRUE \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_BINARY_DIR=/usr \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DAPPDATA_INSTALL_DIR=/usr/share \
+ -DDATA_INSTALL_DIR=/usr \
+ -DMAN_INSTALL_DIR=/usr/man \
+ -DSYSCONF_INSTALL_DIR=/etc/kde \
+ -DLIB_SUFFIX=${LIBDIRSUFFIX} \
+ -DLIB_INSTALL_DIR=lib$LIBDIRSUFFIX \
+ -DLIBEXEC_INSTALL_DIR=lib$LIBDIRSUFFIX \
+ -DQT_PLUGIN_INSTALL_DIR=lib$LIBDIRSUFFIX/qt5/plugins \
+ -DQML_INSTALL_DIR=lib$LIBDIRSUFFIX/qt5/qml \
+ -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
+ -DBUILD_TESTING=OFF \
+ -DQca-qt5_DIR=/usr/lib${LIBDIRSUFFIX}/cmake/Qca \
+ ..
+
diff --git a/kde/cmake/applications b/kde/cmake/applications
index 626e05d..44e0edb 100644
--- a/kde/cmake/applications
+++ b/kde/cmake/applications
@@ -17,7 +17,9 @@ cd build
-DQT_PLUGIN_INSTALL_DIR=lib$LIBDIRSUFFIX/qt5/plugins \
-DQML_INSTALL_DIR=lib$LIBDIRSUFFIX/qt5/qml \
-DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
+ -DBUILD_APIDOC=OFF \
-DBUILD_TESTING=OFF \
+ -DBUILD_unittests=OFF \
-DQca-qt5_DIR=/usr/lib${LIBDIRSUFFIX}/cmake/Qca \
..
diff --git a/kde/cmake/k3b b/kde/cmake/k3b
index 01164dd..3296e61 100644
--- a/kde/cmake/k3b
+++ b/kde/cmake/k3b
@@ -17,6 +17,6 @@ cd build
-DBUILD_TESTING:BOOL=OFF \
-DK3B_ENABLE_HAL_SUPPORT:BOOL=OFF \
-DK3B_ENABLE_PERMISSION_HELPER:BOOL=ON \
- -DKDE_INSTALL_LIBEXECDIR=/usr/libexec \
+ -DKDE_INSTALL_LIBEXECDIR=/usr/lib$LIBDIRSUFFIX/kauth \
..
diff --git a/kde/cmake/kid3 b/kde/cmake/kid3
new file mode 100644
index 0000000..363e97b
--- /dev/null
+++ b/kde/cmake/kid3
@@ -0,0 +1,22 @@
+mkdir build
+cd build
+ cmake \
+ $KDE_OPT_ARGS \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DLIB_SUFFIX=${LIBDIRSUFFIX} \
+ -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
+ -DWITH_APPS="Qt;CLI;KDE" \
+ -DWITH_CHROMAPRINT=OFF \
+ -DWITH_DOCDIR=share/kid3/doc \
+ -DWITH_FFMPEG=ON \
+ -DWITH_GSTREAMER_VERSION="1.0" \
+ -DWITH_LIBDIR=lib$LIBDIRSUFFIX \
+ -DWITH_MANDIR=man \
+ -DWITH_NO_MANCOMPRESS=ON \
+ ..
+
diff --git a/kde/cmake/kscreenlocker b/kde/cmake/kscreenlocker
index 943d246..7141030 100644
--- a/kde/cmake/kscreenlocker
+++ b/kde/cmake/kscreenlocker
@@ -1,6 +1,13 @@
+if [ "$SLACKPAM" == "no" ]; then
+ DO_SLACKPAM="-DHAVE_SHADOW=TRUE -DPAM_REQUIRED=OFF"
+else
+ DO_SLACKPAM=""
+fi
+
mkdir build
cd build
cmake \
+ $DO_SLACKPAM \
$KDE_OPT_ARGS \
-DKDE_PLATFORM_FEATURE_DISABLE_DEPRECATED=TRUE \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
@@ -17,9 +24,6 @@ cd build
-DQT_PLUGIN_INSTALL_DIR=lib$LIBDIRSUFFIX/qt5/plugins \
-DQML_INSTALL_DIR=lib$LIBDIRSUFFIX/qt5/qml \
-DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
- -DBUILD_TESTING=OFF \
- -DHAVE_SHADOW=TRUE \
- -DPAM_REQUIRED=OFF \
-DQca-qt5_DIR=/usr/lib${LIBDIRSUFFIX}/cmake/Qca \
..
diff --git a/kde/cmake/kwallet-pam b/kde/cmake/kwallet-pam
new file mode 100644
index 0000000..065f645
--- /dev/null
+++ b/kde/cmake/kwallet-pam
@@ -0,0 +1,21 @@
+mkdir build
+cd build
+ cmake \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_LIBDIR=lib$LIBDIRSUFFIX \
+ -DCMAKE_INSTALL_PREFIX=/ \
+ -DKDE_INSTALL_LIBDIR=lib$LIBDIRSUFFIX \
+ -DKDE_INSTALL_LIBEXECDIR=lib$LIBDIRSUFFIX \
+ -DKDE_INSTALL_MANDIR=/usr/man \
+ -DKDE_INSTALL_QTPLUGINDIR=lib$LIBDIRSUFFIX/qt5/plugins \
+ -DKDE_INSTALL_QMLDIR=lib$LIBDIRSUFFIX/qt5/qml \
+ -DKDE_INSTALL_SYSCONFDIR=/etc/kde \
+ -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
+ -DBUILD_TESTING=OFF \
+ -DQca-qt5_DIR=/usr/lib${LIBDIRSUFFIX}/cmake/Qca \
+ ..
+
diff --git a/kde/cmake/sddm-qt5 b/kde/cmake/sddm-qt5
index fe0b89d..cd8ebfb 100644
--- a/kde/cmake/sddm-qt5
+++ b/kde/cmake/sddm-qt5
@@ -1,18 +1,35 @@
-# Switch the two booleans USE_QT4 and USE_QT5 to build a Qt4 version instead.
+if [ "$SLACKPAM" == "no" ]; then
+ DO_SLACKPAM="-DENABLE_PAM:BOOL=OFF"
+else
+ DO_SLACKPAM="-DENABLE_PAM:BOOL=ON"
+fi
+
+if [ "$SLKELOGIND" == "no" ]; then
+ DO_SLKELOGIND=""
+else
+ DO_SLKELOGIND=" \
+ -DNO_SYSTEMD:BOOL=TRUE \
+ -DUSE_ELOGIND:BOOL=TRUE \
+ "
+fi
mkdir -p build
cd build
cmake \
+ $DO_SLACKPAM \
+ $DO_SLKELOGIND \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
-DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
-DCMAKE_INSTALL_PREFIX=/usr \
+ -DCMAKE_INSTALL_MANDIR=/usr/man \
-DLIB_SUFFIX=${LIBDIRSUFFIX} \
+ -DBUILD_MAN_PAGES:BOOL=TRUE \
+ -DDBUS_CONFIG_FILENAME="org.freedesktop.sddm.conf" \
-DUSE_QT4:BOOL=FALSE \
-DUSE_QT5:BOOL=TRUE \
- -DENABLE_JOURNALD:BOOL=OFF \
- -DENABLE_PAM:BOOL=OFF \
+ -DENABLE_JOURNALD:BOOL=FALSE \
..
diff --git a/kde/cmake/xdg-desktop-portal-kde b/kde/cmake/xdg-desktop-portal-kde
new file mode 100644
index 0000000..26bc0a8
--- /dev/null
+++ b/kde/cmake/xdg-desktop-portal-kde
@@ -0,0 +1,24 @@
+mkdir build
+cd build
+ cmake \
+ $KDE_OPT_ARGS \
+ -DKDE_PLATFORM_FEATURE_DISABLE_DEPRECATED=TRUE \
+ -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_C_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
+ -DCMAKE_CXX_FLAGS_RELEASE:STRING="$SLKCFLAGS" \
+ -DCMAKE_BUILD_TYPE=Release \
+ -DCMAKE_INSTALL_PREFIX=/usr \
+ -DLIB_SUFFIX=${LIBDIRSUFFIX} \
+ -DKDE_INSTALL_LIBDIR=lib$LIBDIRSUFFIX \
+ -DKDE_INSTALL_LIBEXECDIR=lib$LIBDIRSUFFIX \
+ -DKDE_INSTALL_MANDIR=/usr/man \
+ -DKDE_INSTALL_QTPLUGINDIR=lib$LIBDIRSUFFIX/qt5/plugins \
+ -DKDE_INSTALL_QMLDIR=lib$LIBDIRSUFFIX/qt5/qml \
+ -DKDE_INSTALL_SYSCONFDIR=/etc/kde \
+ -DKDE_INSTALL_USE_QT_SYS_PATHS=ON \
+ -DBUILD_TESTING=OFF \
+ -DENABLE_PIPEWIRE=ON \
+ -DQca-qt5_DIR=/usr/lib${LIBDIRSUFFIX}/cmake/Qca \
+ ..
+
diff --git a/kde/doinst.sh/powerdevil b/kde/doinst.sh/powerdevil
index 6e92caa..8745d62 100644
--- a/kde/doinst.sh/powerdevil
+++ b/kde/doinst.sh/powerdevil
@@ -12,8 +12,7 @@ config() {
}
# Move over the new policy files:
-config etc/polkit-1/rules.d/10-enable-suspend.rules.new
-config etc/polkit-1/localauthority/50-local.d/30-org.freedesktop.upower.pkla.new
-config etc/polkit-1/localauthority/50-local.d/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla.new
-config etc/polkit-1/localauthority/50-local.d/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla.new
+config etc/polkit-1/rules.d/10-enable-upower-suspend.rules.new
+config etc/polkit-1/rules.d/10-enable-session-power.rules.new
+config etc/polkit-1/rules.d/10-enable-powerdevil-discrete-gpu.rules.new 2>/dev/null
diff --git a/kde/doinst.sh/sddm-qt5 b/kde/doinst.sh/sddm-qt5
index d747215..09a1ccf 100644
--- a/kde/doinst.sh/sddm-qt5
+++ b/kde/doinst.sh/sddm-qt5
@@ -80,3 +80,10 @@ if [ -f etc/sddm.conf.new ]; then
fi
# And our defaults file:
config etc/default/sddm.new
+
+# Also the session scripts:
+config usr/share/sddm/scripts/Xsession.new
+config usr/share/sddm/scripts/Xsetup.new
+config usr/share/sddm/scripts/Xstop.new
+config usr/share/sddm/scripts/wayland-session.new
+
diff --git a/kde/kde.SlackBuild b/kde/kde.SlackBuild
index d7edff0..2a700e0 100755
--- a/kde/kde.SlackBuild
+++ b/kde/kde.SlackBuild
@@ -487,6 +487,7 @@ KDEMODS=" \
frameworks \
applications-extra:kdiagram \
kdepim \
+ plasma-extra:plasma-wayland-protocols \
plasma \
plasma-extra \
applications-extra:libktorrent \
diff --git a/kde/kde.options b/kde/kde.options
index ac89033..f29b953 100644
--- a/kde/kde.options
+++ b/kde/kde.options
@@ -52,5 +52,18 @@ fi
# Additional cmake flags that are spanned across the KDE modules
# Do not use "final build" unless we build an actual release.
-export KDE_OPT_ARGS=" -Wno-dev -DBUILD_TESTING=OFF -DKDE4_BUILD_TESTS=OFF -DSITE=\"slackware.com\" -DKDE_DISTRIBUTION_TEXT=\"volkerdi@slackware.com\" "
+export KDE_OPT_ARGS=" -Wno-dev -DBUILD_TESTING=OFF -DSITE=\"slackware.com\" -DKDE_DISTRIBUTION_TEXT=\"volkerdi@slackware.com\" "
+# Choose correct options depending on whether PAM is installed:
+if [ -L /lib${LIBDIRSUFFIX}/libpam.so.? ]; then
+ SLACKPAM=${SLACKPAM:-"yes"}
+else
+ SLACKPAM=${SLACKPAM:-"no"}
+fi
+
+# Choose correct options depending on whether elogind is installed:
+if [ -L /lib${LIBDIRSUFFIX}/libelogind.so.? ]; then
+ SLKELOGIND=${SLKELOGIND:-"yes"}
+else
+ SLKELOGIND=${SLKELOGIND:-"no"}
+fi
diff --git a/kde/modules/applications b/kde/modules/applications
index 28585de..141810d 100644
--- a/kde/modules/applications
+++ b/kde/modules/applications
@@ -10,8 +10,8 @@ gwenview
# kdebase:
kio-extras
-kate
konsole
+kate
kdialog
keditbookmarks
kfind
@@ -183,3 +183,5 @@ kimagemapeditor
# New in 19.08:
yakuake
+# New in 20.04:
+kdeconnect-kde
diff --git a/kde/modules/applications-extra b/kde/modules/applications-extra
index 3bd8f80..d709af8 100644
--- a/kde/modules/applications-extra
+++ b/kde/modules/applications-extra
@@ -29,3 +29,5 @@ kmymoney
okteta
krename
ktimetracker
+labplot
+kid3
diff --git a/kde/modules/frameworks b/kde/modules/frameworks
index 2fdc9cd..002e935 100644
--- a/kde/modules/frameworks
+++ b/kde/modules/frameworks
@@ -51,6 +51,7 @@ syndication
kquickcharts
# Tier 3, depends on Tier 1 and 2, Qt5, system libraries:
kconfigwidgets
+kdav
kservice
kglobalaccel
kiconthemes
@@ -60,6 +61,7 @@ kdesu
ktextwidgets
kxmlgui
kbookmarks
+kded
kio
knewstuff
kparts
@@ -68,7 +70,6 @@ kdesignerplugin
kdeclarative
kcmutils
kinit
-kded
knotifyconfig
ktexteditor
kactivities-framework
diff --git a/kde/modules/kdepim b/kde/modules/kdepim
index 8f5b281..eb58f35 100644
--- a/kde/modules/kdepim
+++ b/kde/modules/kdepim
@@ -37,7 +37,6 @@ incidenceeditor
messagelib
mailcommon
kleopatra
-kdav
kpkpass
kitinerary
kdepim-addons
diff --git a/kde/modules/plasma b/kde/modules/plasma
index 3c8db9d..a329e8f 100644
--- a/kde/modules/plasma
+++ b/kde/modules/plasma
@@ -6,6 +6,7 @@ breeze-gtk
breeze-grub
#breeze-plymouth
kwayland-integration
+kwayland-server
plasma-integration
kinfocenter
libksysguard
@@ -43,8 +44,10 @@ xdg-desktop-portal-kde
drkonqi
plasma-vault
plasma-browser-integration
+kwallet-pam
#plymouth-kcm
-#kwallet-pam
#discover
#plasma-thunderbolt
+#plasma-nano
+#plasma-phone-components
diff --git a/kde/modules/plasma-extra b/kde/modules/plasma-extra
index 385ef12..6d68e60 100644
--- a/kde/modules/plasma-extra
+++ b/kde/modules/plasma-extra
@@ -1,10 +1,8 @@
sddm-qt5
kpeoplevcard
pulseaudio-qt
-kdeconnect-framework
-polkit-kde-kcmodules-framework
-kde-wallpapers
latte-dock
oxygen-fonts
+plasma-wayland-protocols
wacomtablet
diff --git a/kde/patch/akonadi.patch b/kde/patch/akonadi.patch
deleted file mode 100644
index ddab2a8..0000000
--- a/kde/patch/akonadi.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-# Remove hardcoded absolute path to stdlib header.
-# This is Windows-centric and breaks on any linux GCC upgrade.
-# Thanks to Gentoo where I found the following two patches at
-# https://packages.gentoo.org/packages/kde-apps/akonadi
-# No longer needed since 17.04.0.
-#cat $CWD/patch/akonadi/akonadi_revert-abs-path.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-#cat $CWD/patch/akonadi/akonadi_rename-header.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Temporary fix for non-working Akonadi in combination with mariadb 10.2.8
-# (actually this is a bug in qtsql, not in akonadi or mariadb):
-#cat $CWD/patch/akonadi/akonadi_mariadb_qtsql.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/akonadi/akonadi_mariadb_qtsql.patch b/kde/patch/akonadi/akonadi_mariadb_qtsql.patch
deleted file mode 100644
index 7ec6d7c..0000000
--- a/kde/patch/akonadi/akonadi_mariadb_qtsql.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-Patch taken from https://cgit.kde.org/akonadi.git/patch/?id=b145f47f000978b9d39edc1882849ec7f6b3ef79
-
-Upstream bug reports:
-https://bugs.kde.org/show_bug.cgi?id=383991
-https://bugreports.qt.io/browse/QTBUG-63108
-
-From b145f47f000978b9d39edc1882849ec7f6b3ef79 Mon Sep 17 00:00:00 2001
-From: Heinz Wiesinger <pprkut@liwjatan.at>
-Date: Sun, 17 Sep 2017 10:56:44 +0200
-Subject: Only remove init connections to the database on server shutdown.
-
-Summary:
-With MariaDB 10.2 libmysqlclient was replaced with libmariadb that
-changed how establishing database connections behaves. The MySQL
-QSQL driver calls mysql_server_end() on QSqlDatabase::removeDatabase()
-if the overall connection count dropped to 0 (which it does when
-the init connection is removed).
-A future QSqlDatabase:addDatabase() would call mysql_server_init()
-again, but this no longer works with libmariadb as that one only
-allows calling mysql_server_init() once. Future calls are simply
-ignored.
-
-In order to prevent this from happening we have to keep the
-init connection open until the server shuts down, so the connection
-count only drops to 0 at shutdown and mysql_server_end() isn't
-called before.
-
-This is a workaround for QTBUG-63108
-
-CCBUG: 383991
-
-Reviewers: dvratil, mlaurent
-
-Reviewed By: dvratil
-
-Subscribers: #kde_pim
-
-Tags: #kde_pim
-
-Differential Revision: https://phabricator.kde.org/D7858
----
- src/server/akonadi.cpp | 3 ++-
- src/server/storage/dbconfigmysql.cpp | 4 +++-
- 2 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/src/server/akonadi.cpp b/src/server/akonadi.cpp
-index 4364e63..bcb7e88 100644
---- a/src/server/akonadi.cpp
-+++ b/src/server/akonadi.cpp
-@@ -423,13 +423,14 @@ bool AkonadiServer::createDatabase()
- success = false;
- }
- }
-- QSqlDatabase::removeDatabase(initCon);
- return success;
- }
-
- void AkonadiServer::stopDatabaseProcess()
- {
- if (!DbConfig::configuredDatabase()->useInternalServer()) {
-+ // closing initConnection this late to work around QTBUG-63108
-+ QSqlDatabase::removeDatabase(QStringLiteral("initConnection"));
- return;
- }
-
-diff --git a/src/server/storage/dbconfigmysql.cpp b/src/server/storage/dbconfigmysql.cpp
-index 2bd231d..d565706 100644
---- a/src/server/storage/dbconfigmysql.cpp
-+++ b/src/server/storage/dbconfigmysql.cpp
-@@ -492,7 +492,6 @@ bool DbConfigMysql::startInternalServer()
- }
- }
-
-- QSqlDatabase::removeDatabase(initCon);
- return success;
- }
-
-@@ -520,6 +519,9 @@ void DbConfigMysql::stopInternalServer()
- return;
- }
-
-+ // closing initConnection this late to work around QTBUG-63108
-+ QSqlDatabase::removeDatabase(QStringLiteral("initConnection"));
-+
- disconnect(mDatabaseProcess, static_cast<void(QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished),
- this, &DbConfigMysql::processFinished);
-
---
-cgit v0.11.2
-
-
diff --git a/kde/patch/akonadi/akonadi_rename-header.patch b/kde/patch/akonadi/akonadi_rename-header.patch
deleted file mode 100644
index 73347f0..0000000
--- a/kde/patch/akonadi/akonadi_rename-header.patch
+++ /dev/null
@@ -1,77 +0,0 @@
-commit 248671e8200ff0883877b6d0e56700ef99ff3b51
-Author: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Sat Jan 7 14:38:17 2017 +0100
-
- Rename exception.h to exceptionbase.h
-
- REVIEW: 129788
-
-diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
-index 6ac851e..fa996b9 100644
---- a/src/core/CMakeLists.txt
-+++ b/src/core/CMakeLists.txt
-@@ -95,7 +95,7 @@ ecm_generate_headers(AkonadiCore_base_HEADERS
- EntityDeletedAttribute
- EntityDisplayAttribute
- EntityHiddenAttribute
-- Exception
-+ ExceptionBase
- GidExtractorInterface
- IndexPolicyAttribute
- Item
-diff --git a/src/core/exception.cpp b/src/core/exception.cpp
-index f229c1a..14f7330 100644
---- a/src/core/exception.cpp
-+++ b/src/core/exception.cpp
-@@ -17,7 +17,7 @@
- 02110-1301, USA.
- */
-
--#include "exception.h"
-+#include "exceptionbase.h"
-
- #include <QString>
-
-diff --git a/src/core/exception.h b/src/core/exceptionbase.h
-similarity index 100%
-rename from src/core/exception.h
-rename to src/core/exceptionbase.h
-diff --git a/src/core/item.h b/src/core/item.h
-index de71cad..5ec62c8 100644
---- a/src/core/item.h
-+++ b/src/core/item.h
-@@ -23,7 +23,7 @@
-
- #include "akonadicore_export.h"
- #include "attribute.h"
--#include "exception.h"
-+#include "exceptionbase.h"
- #include "tag.h"
- #include "collection.h"
- #include "relation.h"
-diff --git a/src/core/itempayloadinternals_p.h b/src/core/itempayloadinternals_p.h
-index 0a4de3c..1626f10 100644
---- a/src/core/itempayloadinternals_p.h
-+++ b/src/core/itempayloadinternals_p.h
-@@ -32,7 +32,7 @@
-
- #include <boost/shared_ptr.hpp>
-
--#include "exception.h"
-+#include "exceptionbase.h"
-
- //@cond PRIVATE Doxygen 1.7.1 hangs processing this file. so skip it.
- //for more info, see https://bugzilla.gnome.org/show_bug.cgi?id=531637
-diff --git a/src/core/protocolhelper.cpp b/src/core/protocolhelper.cpp
-index f740e9d..c218f0c 100644
---- a/src/core/protocolhelper.cpp
-+++ b/src/core/protocolhelper.cpp
-@@ -23,7 +23,7 @@
- #include "collectionstatistics.h"
- #include "item_p.h"
- #include "collection_p.h"
--#include "exception.h"
-+#include "exceptionbase.h"
- #include "itemserializer_p.h"
- #include "itemserializerplugin.h"
- #include "servermanager.h"
diff --git a/kde/patch/akonadi/akonadi_revert-abs-path.patch b/kde/patch/akonadi/akonadi_revert-abs-path.patch
deleted file mode 100644
index 3b48253..0000000
--- a/kde/patch/akonadi/akonadi_revert-abs-path.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-commit d98e29a07f4acc3bf01f06f25b3eef5522397e2e
-Author: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Thu Jan 5 22:41:02 2017 +0100
-
- Revert "Workaround an include loop on case-insensitive systems"
-
- Do not hardcode absolute patchs to GCC headers.
-
- This reverts commit 59b9d6b79425c9ec1e5df059a2593580048c4adf.
-
- REVIEW: 129788
-
-diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
-index 72589cd..6ac851e 100644
---- a/src/core/CMakeLists.txt
-+++ b/src/core/CMakeLists.txt
-@@ -257,21 +257,6 @@ ecm_generate_headers(AkonadiCore_jobs_HEADERS
- RELATIVE jobs
- )
-
--# This is a workaround for conflict between our "Exception" fancy header and
--# C++ stdlib's "exception" header which occurs in case-insensitive systems.
--# For that reason we generate std_exception.h file, which contains an absolute
--# path to the stdlib's exception header file, which resolves the ambiguity
--# when including <exception> from within Akonadi.
--include(FindStdlibInclude)
--findStdlibInclude("exception" std_exception_file)
--if (NOT "${std_exception_file}" STREQUAL "")
-- configure_file(${CMAKE_CURRENT_SOURCE_DIR}/std_exception.h.in
-- ${CMAKE_CURRENT_BINARY_DIR}/std_exception.h
-- )
--else()
-- message(FATAL_ERROR "stdlib <exception> include absolute path not found")
--endif()
--
- set(akonadicore_dbus_xml ${Akonadi_SOURCE_DIR}/src/interfaces/org.freedesktop.Akonadi.NotificationManager.xml)
- qt5_add_dbus_interface(akonadicore_dbus_SRCS ${akonadicore_dbus_xml} notificationmanagerinterface)
-
-@@ -338,7 +323,6 @@ install(TARGETS
-
- install(FILES
- ${CMAKE_CURRENT_BINARY_DIR}/akonadicore_export.h
-- ${CMAKE_CURRENT_BINARY_DIR}/std_exception.h
- ${AkonadiCore_base_HEADERS}
- ${AkonadiCore_models_HEADERS}
- ${AkonadiCore_jobs_HEADERS}
-diff --git a/src/core/exception.h b/src/core/exception.h
-index d07ca71..2a376df 100644
---- a/src/core/exception.h
-+++ b/src/core/exception.h
-@@ -20,16 +20,11 @@
- #ifndef AKONADI_EXCEPTION_H
- #define AKONADI_EXCEPTION_H
-
--// The std_exception.h file is generated at build-time and #includes C++ stdlib
--// header "exception" by aboslute path. This is to workaround an include loop on
--// case-insensitive systems, where #include <exception> includes our "Exception"
--// fancy header instead of stdlib's exception, causing an endless loop of
--// includes between "Exception" and "exception.h".
--#include "std_exception.h"
--
- #include "akonadicore_export.h"
-+#include <QObject>
-+#include <QByteArray>
-+#include <exception>
-
--class QByteArray;
- class QString;
-
- namespace Akonadi
diff --git a/kde/patch/akonadi4.patch b/kde/patch/akonadi4.patch
index 388c3ea..8ff0118 100644
--- a/kde/patch/akonadi4.patch
+++ b/kde/patch/akonadi4.patch
@@ -1,4 +1,3 @@
# Backport a patch from git master since there will not be another
# official akonadi release after the current 1.13:
cat $CWD/patch/akonadi4/akonadi_dont-leak-old-external-payload-files.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/amarok.patch b/kde/patch/amarok.patch
index 9fc3963..7ede8ad 100644
--- a/kde/patch/amarok.patch
+++ b/kde/patch/amarok.patch
@@ -1,4 +1,3 @@
# Fix a crash in KDE 4.11:
# See also https://bugs.kde.org/show_bug.cgi?id=320855
cat $CWD/patch/amarok/amarok_kdebug_320855.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/ark.patch b/kde/patch/ark.patch
index 35ac2d3..3710075 100644
--- a/kde/patch/ark.patch
+++ b/kde/patch/ark.patch
@@ -1,7 +1,5 @@
-# Ark won't open RAR archives unless rar is installed (even for read access).
-# KDEBUG #357057 is fixed in 15.12.1; still needs unrar.
-#cat $CWD/patch/ark/ark_kdebug357057.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
# Fix a compilation issue in 18.04.0:
-cat $CWD/patch/ark/ark_include_memory.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+#cat $CWD/patch/ark/ark_include_memory.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+# Fix for CVE-2020-16116:
+cat $CWD/patch/ark/ark_cve-2020-16116.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/ark/ark_cve-2020-16116.patch b/kde/patch/ark/ark_cve-2020-16116.patch
new file mode 100644
index 0000000..b3feb1b
--- /dev/null
+++ b/kde/patch/ark/ark_cve-2020-16116.patch
@@ -0,0 +1,47 @@
+From 0df592524fed305d6fbe74ddf8a196bc9ffdb92f Mon Sep 17 00:00:00 2001
+From: Elvis Angelaccio <elvis.angelaccio@kde.org>
+Date: Wed, 29 Jul 2020 23:45:30 +0200
+Subject: [PATCH] Fix vulnerability to path traversal attacks
+
+Ark was vulnerable to directory traversal attacks because of
+missing validation of file paths in the archive.
+
+More details about this attack are available at:
+https://github.com/snyk/zip-slip-vulnerability
+
+Job::onEntry() is the only place where we can safely check the path of
+every entry in the archive. There shouldn't be a valid reason
+to have a "../" in an archive path, so we can just play safe and abort
+the LoadJob if we detect such an entry. This makes impossibile to
+extract this kind of malicious archives and perform the attack.
+
+Thanks to Albert Astals Cid for suggesting to use QDir::cleanPath()
+so that we can still allow loading of legitimate archives that
+contain "../" in their paths but still resolve inside the extraction folder.
+---
+ kerfuffle/jobs.cpp | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+diff --git a/kerfuffle/jobs.cpp b/kerfuffle/jobs.cpp
+index fdaa48695..f73b56f86 100644
+--- a/kerfuffle/jobs.cpp
++++ b/kerfuffle/jobs.cpp
+@@ -180,6 +180,14 @@ void Job::onError(const QString & message, const QString & details)
+
+ void Job::onEntry(Archive::Entry *entry)
+ {
++ const QString entryFullPath = entry->fullPath();
++ if (QDir::cleanPath(entryFullPath).contains(QLatin1String("../"))) {
++ qCWarning(ARK) << "Possibly malicious archive. Detected entry that could lead to a directory traversal attack:" << entryFullPath;
++ onError(i18n("Could not load the archive because it contains ill-formed entries and might be a malicious archive."), QString());
++ onFinished(false);
++ return;
++ }
++
+ emit newEntry(entry);
+ }
+
+--
+GitLab
+
+
diff --git a/kde/patch/ark/ark_kdebug357057.patch b/kde/patch/ark/ark_kdebug357057.patch
deleted file mode 100644
index 76c0bab..0000000
--- a/kde/patch/ark/ark_kdebug357057.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From: Elvis Angelaccio <elvis.angelaccio@kdemail.net>
-Date: Wed, 23 Dec 2015 16:19:29 +0000
-Subject: Fallback to read-only mode if there are no read-write executables
-X-Git-Url: http://quickgit.kde.org/?p=ark.git&a=commitdiff&h=087e5aab49c60ac5930742fe892fa930048e2f43
----
-Fallback to read-only mode if there are no read-write executables
-
-Commit 2d000a0 introduced executables check when loading a plugin. However the
-current behavior is too restrictive: if one wants only to open a rar or a
-zip archive, there is no need to require also the rar or zip program to be
-installed. Plus, some distributions (e.g. Archlinux) ship only unrar in their
-official repositories.
-
-With this commit, Ark is able to understand that e.g. unrar is installed but
-rar is not. In this case, Ark can and should fallback to read-only mode,
-to disable the Add/Delete actions in the toolbar.
-
-BUG: 357057
-FIXED-IN: 15.12.1
-
-CC: rthomsen6@gmail.com
----
-
-
---- a/kerfuffle/archive_kerfuffle.cpp
-+++ b/kerfuffle/archive_kerfuffle.cpp
-@@ -173,6 +173,9 @@
-
- if (iface->findExecutables(!isReadOnly)) {
- return new Archive(iface, isReadOnly, parent);
-+ } else if (!isReadOnly && iface->findExecutables(false)) {
-+ qCWarning(ARK) << "Failed to find read-write executables: falling back to read-only mode for read-write plugin" << pluginName;
-+ return new Archive(iface, true, parent);
- } else {
- qCWarning(ARK) << "Failed to find needed executables for plugin" << pluginName;
- }
-
diff --git a/kde/patch/baloo5.patch b/kde/patch/baloo5.patch
index 794bcd9..75aa4d1 100644
--- a/kde/patch/baloo5.patch
+++ b/kde/patch/baloo5.patch
@@ -1,3 +1,2 @@
-# Adapt to changes in KAboutData (will be fixed in next release):
-#cat $CWD/patch/baloo5/baloo-4.96.0_kaboutdata.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
+# Disable file indexing by default in Baloo:
+cat $CWD/patch/baloo5/baloo_def_indexing_disabled.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/baloo5/baloo-4.96.0_kaboutdata.diff b/kde/patch/baloo5/baloo-4.96.0_kaboutdata.diff
deleted file mode 100644
index 36ec0d1..0000000
--- a/kde/patch/baloo5/baloo-4.96.0_kaboutdata.diff
+++ /dev/null
@@ -1,69 +0,0 @@
-From: Andreas Hartmetz <ahartmetz@gmail.com>
-Date: Wed, 14 May 2014 02:36:57 +0000
-Subject: Adapt to changes in KAboutData.
-X-Git-Url: http://quickgit.kde.org/?p=baloo.git&a=commitdiff&h=46e3ea7828c8066e75bec87ba0a19d5ef3bd700a
----
-Adapt to changes in KAboutData.
----
-
-
---- a/src/file/kcm/kcm.cpp
-+++ b/src/file/kcm/kcm.cpp
-@@ -58,8 +58,8 @@
- : KCModule(parent, args)
- {
- KAboutData* about = new KAboutData(
-- "kcm_baloofile", "kcm_baloofile", i18n("Configure Desktop Search"),
-- "0.1", QString(), KAboutData::License_GPL,
-+ "kcm_baloofile", i18n("Configure Desktop Search"),
-+ "0.1", QString(), KAboutLicense::GPL,
- i18n("Copyright 2007-2010 Sebastian Trüg"));
- about->addAuthor(i18n("Sebastian Trüg"), QString(), "trueg@kde.org");
- about->addAuthor(i18n("Vishesh Handa"), QString(), "vhanda@kde.org");
-
---- a/src/file/main.cpp
-+++ b/src/file/main.cpp
-@@ -44,9 +44,9 @@
- lowerSchedulingPriority();
- lowerPriority();
-
-- KAboutData aboutData("baloo_file", "baloo_file", i18n("Baloo File"), "0.1",
-+ KAboutData aboutData("baloo_file", i18n("Baloo File"), "0.1",
- i18n("An application to handle file metadata"),
-- KAboutData::License_LGPL_V2);
-+ KAboutLicense::LGPL_V2);
- aboutData.addAuthor(i18n("Vishesh Handa"), i18n("Maintainer"), "me@vhanda.in", "http://vhanda.in");
-
- KAboutData::setApplicationData(aboutData);
-
---- a/src/tools/baloosearch/main.cpp
-+++ b/src/tools/baloosearch/main.cpp
-@@ -55,11 +55,10 @@
- int main(int argc, char* argv[])
- {
- KAboutData aboutData("baloosearch",
-- "baloosearch",
- i18n("Baloo Search"),
- "0.1",
- i18n("Baloo Search - A debugging tool"),
-- KAboutData::License_GPL,
-+ KAboutLicense::GPL,
- i18n("(c) 2013, Vishesh Handa"));
- aboutData.addAuthor(i18n("Vishesh Handa"), i18n("Maintainer"), "me@vhanda.in");
-
-
---- a/src/tools/balooshow/main.cpp
-+++ b/src/tools/balooshow/main.cpp
-@@ -46,11 +46,10 @@
- int main(int argc, char* argv[])
- {
- KAboutData aboutData("balooshow",
-- "balooshow",
- i18n("Baloo Show"),
- "0.1",
- i18n("The Baloo data Viewer - A debugging tool"),
-- KAboutData::License_GPL,
-+ KAboutLicense::GPL,
- i18n("(c) 2012, Vishesh Handa"));
- aboutData.addAuthor(i18n("Vishesh Handa"), i18n("Maintainer"), "me@vhanda.in");
-
diff --git a/kde/patch/baloo5/baloo_def_indexing_disabled.patch b/kde/patch/baloo5/baloo_def_indexing_disabled.patch
new file mode 100644
index 0000000..8a12e45
--- /dev/null
+++ b/kde/patch/baloo5/baloo_def_indexing_disabled.patch
@@ -0,0 +1,12 @@
+diff -uar baloo-5.72.0.orig/src/lib/baloosettings.kcfg baloo-5.72.0/src/lib/baloosettings.kcfg
+--- baloo-5.72.0.orig/src/lib/baloosettings.kcfg 2020-07-04 15:03:02.000000000 +0200
++++ baloo-5.72.0/src/lib/baloosettings.kcfg 2020-07-29 19:51:58.891567902 +0200
+@@ -9,7 +9,7 @@
+ <group name="Basic Settings">
+ <entry name="indexingEnabled" key="Indexing-Enabled" type="Bool">
+ <label>Indexing-Enabled</label>
+- <default>true</default>
++ <default>false</default>
+ </entry>
+ </group>
+ <group name="General">
diff --git a/kde/patch/calligra.patch b/kde/patch/calligra.patch
deleted file mode 100644
index 340e170..0000000
--- a/kde/patch/calligra.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-# Fix build against Qt 5.11:
-cat $CWD/patch/calligra/calligra3_qt511.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix build against Qt 5.13:
-cat $CWD/patch/calligra/calligra3_qt513.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix build against poppler 0.71:
-#cat $CWD/patch/calligra/calligra3_poppler-0.71.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix build against poppler 0.72:
-#cat $CWD/patch/calligra/calligra3_poppler-0.72.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix build against poppler 0.73:
-#cat $CWD/patch/calligra/calligra3_poppler-0.73.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/calligra/calligra3_poppler-0.71.patch b/kde/patch/calligra/calligra3_poppler-0.71.patch
deleted file mode 100644
index 65284a3..0000000
--- a/kde/patch/calligra/calligra3_poppler-0.71.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-diff --git a/filters/karbon/pdf/PdfImport.cpp b/filters/karbon/pdf/PdfImport.cpp
-index 48b08dfa32d..e910dae0756 100644
---- a/filters/karbon/pdf/PdfImport.cpp
-+++ b/filters/karbon/pdf/PdfImport.cpp
-@@ -88,9 +88,9 @@ KoFilter::ConversionStatus PdfImport::convert(const QByteArray& from, const QByt
- SvgOutputDev * dev = new SvgOutputDev(m_chain->outputFile());
- if (dev->isOk()) {
- int rotate = 0;
-- GBool useMediaBox = gTrue;
-- GBool crop = gFalse;
-- GBool printing = gFalse;
-+ bool useMediaBox = true;
-+ bool crop = false;
-+ bool printing = false;
- pdfDoc->displayPages(dev, firstPage, lastPage, hDPI, vDPI, rotate, useMediaBox, crop, printing);
- dev->dumpContent();
- }
-diff --git a/filters/karbon/pdf/SvgOutputDev.cpp b/filters/karbon/pdf/SvgOutputDev.cpp
-index 5692824bc45..43205170991 100644
---- a/filters/karbon/pdf/SvgOutputDev.cpp
-+++ b/filters/karbon/pdf/SvgOutputDev.cpp
-@@ -39,7 +39,7 @@ class SvgOutputDev::Private
- {
- public:
- Private(const QString &fname)
-- : svgFile(fname), defs(0), body(0), state(gTrue)
-+ : svgFile(fname), defs(0), body(0), state(true)
- , brush(Qt::SolidPattern) {}
-
- ~Private() {
-@@ -52,7 +52,7 @@ public:
- QString defsData;
- QTextStream * defs;
- QTextStream * body;
-- GBool state;
-+ bool state;
- QSizeF pageSize;
- QPen pen;
- QBrush brush;
-@@ -62,7 +62,7 @@ SvgOutputDev::SvgOutputDev(const QString &fileName)
- : d(new Private(fileName))
- {
- if (! d->svgFile.open(QIODevice::WriteOnly)) {
-- d->state = gFalse;
-+ d->state = false;
- return;
- }
-
-@@ -75,24 +75,24 @@ SvgOutputDev::~SvgOutputDev()
- delete d;
- }
-
--GBool SvgOutputDev::isOk()
-+bool SvgOutputDev::isOk()
- {
- return d->state;
- }
-
--GBool SvgOutputDev::upsideDown()
-+bool SvgOutputDev::upsideDown()
- {
-- return gTrue;
-+ return true;
- }
-
--GBool SvgOutputDev::useDrawChar()
-+bool SvgOutputDev::useDrawChar()
- {
-- return gFalse;
-+ return false;
- }
-
--GBool SvgOutputDev::interpretType3Chars()
-+bool SvgOutputDev::interpretType3Chars()
- {
-- return gFalse;
-+ return false;
- }
-
- void SvgOutputDev::startPage(int pageNum, GfxState *state, XRef */*xref*/)
-@@ -480,7 +480,7 @@ void SvgOutputDev::drawString(GfxState * state, GooString * s)
-
- void SvgOutputDev::drawImage(GfxState *state, Object */*ref*/, Stream *str,
- int width, int height, GfxImageColorMap *colorMap,
-- int *maskColors, GBool /*inlineImg*/)
-+ int *maskColors, bool /*inlineImg*/)
- {
- ImageStream * imgStr = new ImageStream(str, width, colorMap->getNumPixelComps(), colorMap->getBits());
- imgStr->reset();
-@@ -549,7 +549,7 @@ void SvgOutputDev::drawImage(GfxState *state, Object */*ref*/, Stream *str,
-
- void SvgOutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
- int width, int height, GfxImageColorMap *colorMap,
-- GBool /*interpolate*/, int *maskColors, GBool inlineImg)
-+ bool /*interpolate*/, int *maskColors, bool inlineImg)
- {
- drawImage(state, ref, str, width, height, colorMap, maskColors, inlineImg);
- }
-diff --git a/filters/karbon/pdf/SvgOutputDev.h b/filters/karbon/pdf/SvgOutputDev.h
-index 2a4490848bf..cdb1d4e43b1 100644
---- a/filters/karbon/pdf/SvgOutputDev.h
-+++ b/filters/karbon/pdf/SvgOutputDev.h
-@@ -44,11 +44,11 @@ public:
- explicit SvgOutputDev(const QString &fileName);
- virtual ~SvgOutputDev();
-
-- GBool isOk();
-+ bool isOk();
-
-- virtual GBool upsideDown();
-- virtual GBool useDrawChar();
-- virtual GBool interpretType3Chars();
-+ virtual bool upsideDown();
-+ virtual bool useDrawChar();
-+ virtual bool interpretType3Chars();
- virtual void startPage(int pageNum, GfxState *state, XRef *xref);
- virtual void endPage();
-
-@@ -63,10 +63,10 @@ public:
- // images
- virtual void drawImage(GfxState *state, Object *ref, Stream *str,
- int width, int height, GfxImageColorMap *colorMap,
-- int *maskColors, GBool inlineImg);
-+ int *maskColors, bool inlineImg);
- virtual void drawImage(GfxState *state, Object *ref, Stream *str,
- int width, int height, GfxImageColorMap *colorMap,
-- GBool interpolate, int *maskColors, GBool inlineImg);
-+ bool interpolate, int *maskColors, bool inlineImg);
-
- // styles
- virtual void updateAll(GfxState *state);
diff --git a/kde/patch/calligra/calligra3_poppler-0.72.patch b/kde/patch/calligra/calligra3_poppler-0.72.patch
deleted file mode 100644
index 2cab98f..0000000
--- a/kde/patch/calligra/calligra3_poppler-0.72.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/filters/karbon/pdf/SvgOutputDev.cpp b/filters/karbon/pdf/SvgOutputDev.cpp
-index 80f01a5f76f..ea69228dbc1 100644
---- a/filters/karbon/pdf/SvgOutputDev.cpp
-+++ b/filters/karbon/pdf/SvgOutputDev.cpp
-@@ -407,7 +407,7 @@ void SvgOutputDev::drawString(GfxState * state, const GooString * s)
-
- QString str;
-
-- const char * p = s->getCString();
-+ const char * p = s->c_str();
- int len = s->getLength();
- CharCode code;
- Unicode *u = nullptr;
-@@ -459,11 +459,11 @@ void SvgOutputDev::drawString(GfxState * state, const GooString * s)
- *d->body << " y=\"" << y << "px\"";
-
- if (font && font->getFamily()) {
-- *d->body << " font-family=\"" << QString::fromLatin1(font->getFamily()->getCString()) << "\"";
-- //debugPdf << "font family:" << QString::fromLatin1( font->getFamily()->getCString() );
-+ *d->body << " font-family=\"" << QString::fromLatin1(font->getFamily()->c_str()) << "\"";
-+ //debugPdf << "font family:" << QString::fromLatin1( font->getFamily()->c_str() );
- } else if (font && font->getName()) {
-- *d->body << " font-family=\"" << QString::fromLatin1(font->getName()->getCString()) << "\"";
-- //debugPdf << "font name:" << QString::fromLatin1( font->getName()->getCString() );
-+ *d->body << " font-family=\"" << QString::fromLatin1(font->getName()->c_str()) << "\"";
-+ //debugPdf << "font name:" << QString::fromLatin1( font->getName()->c_str() );
- }
- *d->body << " font-size=\"" << qMax(state->getFontSize(), state->getTransformedFontSize()) << "px\"";
-
diff --git a/kde/patch/calligra/calligra3_poppler-0.73.patch b/kde/patch/calligra/calligra3_poppler-0.73.patch
deleted file mode 100644
index 86738de..0000000
--- a/kde/patch/calligra/calligra3_poppler-0.73.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From a1ddd91e6c354e8f0dda40f8a522053c3fa19c39 Mon Sep 17 00:00:00 2001
-From: Albert Astals Cid <aacid@kde.org>
-Date: Tue, 15 Jan 2019 22:24:08 +0100
-Subject: [PATCH] Guchar -> unsigned char
-
-It was just a typdef and it's now gone
----
- filters/karbon/pdf/SvgOutputDev.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/filters/karbon/pdf/SvgOutputDev.cpp b/filters/karbon/pdf/SvgOutputDev.cpp
-index 80f01a5f76f..1a5aa30bc40 100644
---- a/filters/karbon/pdf/SvgOutputDev.cpp
-+++ b/filters/karbon/pdf/SvgOutputDev.cpp
-@@ -496,7 +496,7 @@ void SvgOutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
- if (maskColors) {
- for (int y = 0; y < height; y++) {
- dest = (unsigned int *)(buffer + y * 4 * width);
-- Guchar * pix = imgStr->getLine();
-+ unsigned char * pix = imgStr->getLine();
- colorMap->getRGBLine(pix, dest, width);
-
- for (int x = 0; x < width; x++) {
-@@ -515,7 +515,7 @@ void SvgOutputDev::drawImage(GfxState *state, Object *ref, Stream *str,
- } else {
- for (int y = 0; y < height; y++) {
- dest = (unsigned int *)(buffer + y * 4 * width);
-- Guchar * pix = imgStr->getLine();
-+ unsigned char * pix = imgStr->getLine();
- colorMap->getRGBLine(pix, dest, width);
- }
-
diff --git a/kde/patch/calligra/calligra3_qt511.patch b/kde/patch/calligra/calligra3_qt511.patch
deleted file mode 100644
index 0ddf0f2..0000000
--- a/kde/patch/calligra/calligra3_qt511.patch
+++ /dev/null
@@ -1,135 +0,0 @@
-From ee83e0f2c251072e47a2799619cdc79efe67e651 Mon Sep 17 00:00:00 2001
-From: David Faure <faure@kde.org>
-Date: Tue, 3 Apr 2018 00:31:19 +0200
-Subject: Fix compilation with Qt 5.11 (missing include)
-
----
- stage/part/KPrPresentationTool.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/stage/part/KPrPresentationTool.cpp b/stage/part/KPrPresentationTool.cpp
-index ae743da..3007f91 100644
---- a/stage/part/KPrPresentationTool.cpp
-+++ b/stage/part/KPrPresentationTool.cpp
-@@ -32,6 +32,7 @@
- #include <QDesktopServices>
- #include <QUrl>
- #include <QDBusConnection>
-+#include <QFrame>
-
- #include <KoShape.h>
- #include <KoShapeManager.h>
----
-From a7ebecb9fbee2190e649c44ed53f1299013baa30 Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Sun, 18 Mar 2018 11:56:57 +0100
-Subject: Fix build with Qt 5.11 (missing headers)
-
-Reviewers: #calligra:_3.0, anthonyfieroni, danders
-
-Reviewed By: #calligra:_3.0, anthonyfieroni, danders
-
-Subscribers: anthonyfieroni, danders
-
-Tags: #calligra:_3.0
-
-Differential Revision: https://phabricator.kde.org/D11454
----
- libs/widgets/KoCsvImportDialog.cpp | 1 +
- libs/widgets/KoPageLayoutWidget.cpp | 2 ++
- plugins/chartshape/dialogs/TableEditorDialog.cpp | 1 +
- plugins/formulashape/FormulaToolWidget.cpp | 1 +
- sheets/dialogs/LayoutDialog.cpp | 1 +
- words/part/dialogs/KWAnchoringProperties.cpp | 1 +
- words/part/dialogs/KWRunAroundProperties.cpp | 2 ++
- 15 files changed, 18 insertions(+), 1 deletion(-)
-
-diff --git a/libs/widgets/KoCsvImportDialog.cpp b/libs/widgets/KoCsvImportDialog.cpp
-index 0ffdcf6..cdca006 100644
---- a/libs/widgets/KoCsvImportDialog.cpp
-+++ b/libs/widgets/KoCsvImportDialog.cpp
-@@ -21,6 +21,7 @@
- #include "KoCsvImportDialog.h"
-
- // Qt
-+#include <QButtonGroup>
- #include <QTextCodec>
- #include <QTextStream>
-
-diff --git a/libs/widgets/KoPageLayoutWidget.cpp b/libs/widgets/KoPageLayoutWidget.cpp
-index f91555c..a3816f9 100644
---- a/libs/widgets/KoPageLayoutWidget.cpp
-+++ b/libs/widgets/KoPageLayoutWidget.cpp
-@@ -23,6 +23,8 @@
-
- #include <KoUnit.h>
-
-+#include <QButtonGroup>
-+
- class Q_DECL_HIDDEN KoPageLayoutWidget::Private
- {
- public:
-diff --git a/plugins/chartshape/dialogs/TableEditorDialog.cpp b/plugins/chartshape/dialogs/TableEditorDialog.cpp
-index c0d5136..d2a772e 100644
---- a/plugins/chartshape/dialogs/TableEditorDialog.cpp
-+++ b/plugins/chartshape/dialogs/TableEditorDialog.cpp
-@@ -24,6 +24,7 @@
-
- // Qt
- #include <QAbstractItemModel>
-+#include <QAction>
-
- // Calligra
- #include <KoIcon.h>
-diff --git a/plugins/formulashape/FormulaToolWidget.cpp b/plugins/formulashape/FormulaToolWidget.cpp
-index ed10919..8f52177 100644
---- a/plugins/formulashape/FormulaToolWidget.cpp
-+++ b/plugins/formulashape/FormulaToolWidget.cpp
-@@ -30,6 +30,7 @@
- #include <QWidgetAction>
- #include <QTableWidget>
- #include <QAction>
-+#include <QHeaderView>
- #include <QMenu>
-
- FormulaToolWidget::FormulaToolWidget( KoFormulaTool* tool, QWidget* parent )
-diff --git a/sheets/dialogs/LayoutDialog.cpp b/sheets/dialogs/LayoutDialog.cpp
-index a0a9832..7d7db53 100644
---- a/sheets/dialogs/LayoutDialog.cpp
-+++ b/sheets/dialogs/LayoutDialog.cpp
-@@ -36,6 +36,7 @@
- #include <math.h>
-
- #include <QIntValidator>
-+#include <QButtonGroup>
- #include <QCheckBox>
- #include <QFrame>
- #include <QLabel>
-diff --git a/words/part/dialogs/KWAnchoringProperties.cpp b/words/part/dialogs/KWAnchoringProperties.cpp
-index d64208c..bfddb3a 100644
---- a/words/part/dialogs/KWAnchoringProperties.cpp
-+++ b/words/part/dialogs/KWAnchoringProperties.cpp
-@@ -35,6 +35,7 @@
-
- #include <kundo2command.h>
-
-+#include <QButtonGroup>
- #include <QComboBox>
-
- const int KWAnchoringProperties::vertRels[4][20] = {
-diff --git a/words/part/dialogs/KWRunAroundProperties.cpp b/words/part/dialogs/KWRunAroundProperties.cpp
-index e38599a..7e8b2d5 100644
---- a/words/part/dialogs/KWRunAroundProperties.cpp
-+++ b/words/part/dialogs/KWRunAroundProperties.cpp
-@@ -28,6 +28,8 @@
-
- #include <kundo2command.h>
-
-+#include <QButtonGroup>
-+
- KWRunAroundProperties::KWRunAroundProperties(FrameConfigSharedState *state)
- : m_state(state)
- {
---
-cgit v0.11.2
-
diff --git a/kde/patch/calligra/calligra3_qt513.patch b/kde/patch/calligra/calligra3_qt513.patch
deleted file mode 100644
index 987b353..0000000
--- a/kde/patch/calligra/calligra3_qt513.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-From 0c5430697bdcf41a45046107b28014e40c49a11a Mon Sep 17 00:00:00 2001
-From: David Faure <faure@kde.org>
-Date: Tue, 23 Jul 2019 13:02:34 +0200
-Subject: [PATCH] Fix compilation with Qt 5.13 (missing include)
-
----
- sheets/plugins/calendar/CalendarToolWidget.cpp | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/sheets/plugins/calendar/CalendarToolWidget.cpp b/sheets/plugins/calendar/CalendarToolWidget.cpp
-index b10b23022a2..0c5eeb68cf3 100644
---- a/sheets/plugins/calendar/CalendarToolWidget.cpp
-+++ b/sheets/plugins/calendar/CalendarToolWidget.cpp
-@@ -30,6 +30,7 @@
- #include <kdatepicker.h>
-
- #include <QPushButton>
-+#include <QDate>
-
- namespace Calligra
- {
-
diff --git a/kde/patch/calligraplan.patch b/kde/patch/calligraplan.patch
index 4cc1f85..5895d0c 100644
--- a/kde/patch/calligraplan.patch
+++ b/kde/patch/calligraplan.patch
@@ -1,11 +1,2 @@
-# Fix build against Qt 5.11 (fixed in 3.2.0):
-#cat $CWD/patch/calligraplan/calligraplan.qt-511.patch | patch -p2 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix build against kcalendarcore (fixed in 3.2.0):
-#cat $CWD/patch/calligraplan/calligraplan.kcalcore.1.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-#cat $CWD/patch/calligraplan/calligraplan.kcalcore.2.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-#cat $CWD/patch/calligraplan/calligraplan.kcalendarcore.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix missing include (fixed in 3.2.0):
-#cat $CWD/patch/calligraplan/calligraplan.missingheader.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
+# Fix build against Qt 5.15:
+cat $CWD/patch/calligraplan/calligraplan.qt-5.15.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/calligraplan/calligraplan.kcalcore.1.patch b/kde/patch/calligraplan/calligraplan.kcalcore.1.patch
deleted file mode 100644
index dcbe903..0000000
--- a/kde/patch/calligraplan/calligraplan.kcalcore.1.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-From 3a01affd66f8dfdcc124e23595217f3ae5a09723 Mon Sep 17 00:00:00 2001
-From: Dag Andersen <danders@get2net.dk>
-Date: Thu, 20 Jun 2019 10:52:00 +0200
-Subject: ICal: Adapt to api changes in KCalCore
-
----
- CMakeLists.txt | 37 +++++++++++-----------
- src/CMakeLists.txt | 4 +++
- .../filters/icalendar/export/icalendarexport.cpp | 5 +++
- 3 files changed, 27 insertions(+), 19 deletions(-)
-
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
-index 0dabbaf..49fa642 100644
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -75,6 +75,10 @@ if ("${KF5CalendarCore_VERSION}" VERSION_GREATER 5.6.40)
- set(HAVE_QDATETIME_KCALCORE TRUE)
- endif()
-
-+if ("${KF5CalendarCore_VERSION}" VERSION_GREATER 5.11.42)
-+ set(KCALCORE_HAVE_NO_PERSION_PTR TRUE)
-+endif()
-+
- if (PLANCHARTDEBUG)
- add_definitions(-DPLAN_CHART_DEBUG)
- endif ()
-diff --git a/src/plugins/filters/icalendar/export/icalendarexport.cpp b/src/plugins/filters/icalendar/export/icalendarexport.cpp
-index cd75598..ce29bfe 100644
---- a/src/plugins/filters/icalendar/export/icalendarexport.cpp
-+++ b/src/plugins/filters/icalendar/export/icalendarexport.cpp
-@@ -141,8 +141,13 @@ void ICalendarExport::createTodos(KCalCore::Calendar::Ptr cal, const Node *node,
- todo->setOrganizer(node->projectNode()->leader());
- }
- if ( node->type() != Node::Type_Project && ! node->leader().isEmpty()) {
-+#if KCALCORE_HAVE_NO_PERSION_PTR
-+ KCalCore::Person p = KCalCore::Person::fromFullName(node->leader());
-+ KCalCore::Attendee::Ptr a(new KCalCore::Attendee(p.name(), p.email()));
-+#else
- KCalCore::Person::Ptr p = KCalCore::Person::fromFullName(node->leader());
- KCalCore::Attendee::Ptr a(new KCalCore::Attendee(p->name(), p->email()));
-+#endif
- a->setRole(KCalCore::Attendee::NonParticipant);
- todo->addAttendee(a);
- }
---
-cgit v1.1
-
diff --git a/kde/patch/calligraplan/calligraplan.kcalcore.2.patch b/kde/patch/calligraplan/calligraplan.kcalcore.2.patch
deleted file mode 100644
index 5c118e1..0000000
--- a/kde/patch/calligraplan/calligraplan.kcalcore.2.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From a9eaf1c98ed408fd6e8897fa9e2f99ed17db1ebc Mon Sep 17 00:00:00 2001
-From: David Faure <faure@kde.org>
-Date: Tue, 23 Jul 2019 12:26:17 +0200
-Subject: Port to KCalCore API changes
-
-The code is in #if 0, but I tested compilation of this in the calligra
-stable branch:
-https://commits.kde.org/calligra/2d484fda1b31a72659088a4bfce5c3708e923cb0
-
-So you can use KCalCore again if you want :-)
-It's turning into a KF5 framework so the API will be stable from now on.
-
-CCMAIL: danders@get2net.dk
----
- .../filters/icalendar/export/icalendarexport.cpp | 20 +++++++++++++++++---
- 1 file changed, 17 insertions(+), 3 deletions(-)
-
-diff --git a/src/plugins/filters/icalendar/export/icalendarexport.cpp b/src/plugins/filters/icalendar/export/icalendarexport.cpp
-index b21320f..828b641 100644
---- a/src/plugins/filters/icalendar/export/icalendarexport.cpp
-+++ b/src/plugins/filters/icalendar/export/icalendarexport.cpp
-@@ -35,6 +35,7 @@
- #include <kcalcore/attachment.h>
- #include <kcalcore/icalformat.h>
- #include <kcalcore/memorycalendar.h>
-+#include <kcalcore_version.h>
-
- #include <QTextCodec>
- #include <QByteArray>
-@@ -355,14 +356,15 @@ void ICalendarExport::createTodos(KCalCore::Calendar::Ptr cal, const Node *node,
- todo->setOrganizer(node->projectNode()->leader());
- }
- if ( node->type() != Node::Type_Project && ! node->leader().isEmpty()) {
--#if KCALCORE_HAVE_NO_PERSION_PTR
-+#if KCALCORE_VERSION >= QT_VERSION_CHECK(5, 11, 80)
- KCalCore::Person p = KCalCore::Person::fromFullName(node->leader());
-- KCalCore::Attendee::Ptr a(new KCalCore::Attendee(p.name(), p.email()));
-+ KCalCore::Attendee a(p.name(), p.email());
-+ a.setRole(KCalCore::Attendee::NonParticipant);
- #else
- KCalCore::Person::Ptr p = KCalCore::Person::fromFullName(node->leader());
- KCalCore::Attendee::Ptr a(new KCalCore::Attendee(p->name(), p->email()));
--#endif
- a->setRole(KCalCore::Attendee::NonParticipant);
-+#endif
- todo->addAttendee(a);
- }
- DateTime st = node->startTime(id);
-@@ -381,13 +383,21 @@ void ICalendarExport::createTodos(KCalCore::Calendar::Ptr cal, const Node *node,
- const QList<Resource*> lst = task->requestedResources();
- foreach(const Resource *r, lst) {
- if (r->type() == Resource::Type_Work) {
-+#if KCALCORE_VERSION >= QT_VERSION_CHECK(5, 11, 80)
-+ todo->addAttendee(KCalCore::Attendee(r->name(), r->email()));
-+#else
- todo->addAttendee(KCalCore::Attendee::Ptr(new KCalCore::Attendee(r->name(), r->email())));
-+#endif
- }
- }
- } else {
- foreach(const Resource *r, s->resources()) {
- if (r->type() == Resource::Type_Work) {
-+#if KCALCORE_VERSION >= QT_VERSION_CHECK(5, 11, 80)
-+ todo->addAttendee(KCalCore::Attendee(r->name(), r->email()));
-+#else
- todo->addAttendee(KCalCore::Attendee::Ptr(new KCalCore::Attendee(r->name(), r->email())));
-+#endif
- }
- }
-
-@@ -398,7 +408,11 @@ void ICalendarExport::createTodos(KCalCore::Calendar::Ptr cal, const Node *node,
- todo->setPercentComplete(task->completion().percentFinished());
- }
- foreach(const Document *doc, node->documents().documents()) {
-+#if KCALCORE_VERSION >= QT_VERSION_CHECK(5, 11, 80)
-+ todo->addAttachment(KCalCore::Attachment(doc->url().url()));
-+#else
- todo->addAttachment(KCalCore::Attachment::Ptr(new KCalCore::Attachment(doc->url().url())));
-+#endif
- }
- if (! parent.isNull()) {
- todo->setRelatedTo(parent->uid(), KCalCore::Incidence::RelTypeParent);
---
-cgit v1.1
-
diff --git a/kde/patch/calligraplan/calligraplan.kcalendarcore.patch b/kde/patch/calligraplan/calligraplan.kcalendarcore.patch
deleted file mode 100644
index 42aa135..0000000
--- a/kde/patch/calligraplan/calligraplan.kcalendarcore.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 2f5505cf03ff865349d06e1d5c39007c52e7cd10 Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <asturm@gentoo.org>
-Date: Fri, 16 Aug 2019 15:49:09 +0200
-Subject: [PATCH] Fix headers after kcalcore->kcalendercore rename happened
-
----
- .../filters/icalendar/export/icalendarexport.cpp | 10 +++++-----
- 1 file changed, 5 insertions(+), 5 deletions(-)
-
-diff --git a/src/plugins/filters/icalendar/export/icalendarexport.cpp b/src/plugins/filters/icalendar/export/icalendarexport.cpp
-index bb6b097d..729d6e50 100644
---- a/src/plugins/filters/icalendar/export/icalendarexport.cpp
-+++ b/src/plugins/filters/icalendar/export/icalendarexport.cpp
-@@ -31,11 +31,11 @@
- #include <kptdocuments.h>
- #include "kptdebug.h"
-
--#include <kcalcore/attendee.h>
--#include <kcalcore/attachment.h>
--#include <kcalcore/icalformat.h>
--#include <kcalcore/memorycalendar.h>
--#include <kcalcore_version.h>
-+#include <kcalendarcore/attendee.h>
-+#include <kcalendarcore/attachment.h>
-+#include <kcalendarcore/icalformat.h>
-+#include <kcalendarcore/memorycalendar.h>
-+#include <kcalcore_version.h>
-
- #include <QTextCodec>
- #include <QByteArray>
---
-2.22.1
-
-
diff --git a/kde/patch/calligraplan/calligraplan.missingheader.patch b/kde/patch/calligraplan/calligraplan.missingheader.patch
deleted file mode 100644
index b5941c5..0000000
--- a/kde/patch/calligraplan/calligraplan.missingheader.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From fe36bf6f0dc1f0c1e927850dd78093cfe3b7aae2 Mon Sep 17 00:00:00 2001
-From: Albert Astals Cid <aacid@kde.org>
-Date: Sun, 28 Jul 2019 00:07:33 +0200
-Subject: Fix compile on CI
-
-src/workpackage/view.h:148:31: error: field m_scheduleActions has incomplete type QMap<QAction*, KPlato::Schedule*>
----
- src/workpackage/view.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/src/workpackage/view.h b/src/workpackage/view.h
-index 6cae32b..cd2fc4e 100644
---- a/src/workpackage/view.h
-+++ b/src/workpackage/view.h
-@@ -24,6 +24,7 @@
-
- #include <KoView.h>
-
-+#include <QMap>
- #include <QStackedWidget>
-
- class QPrinter;
---
-cgit v1.1
-
diff --git a/kde/patch/calligraplan/calligraplan.qt-5.15.patch b/kde/patch/calligraplan/calligraplan.qt-5.15.patch
new file mode 100644
index 0000000..c8962a1
--- /dev/null
+++ b/kde/patch/calligraplan/calligraplan.qt-5.15.patch
@@ -0,0 +1,10 @@
+--- ./src/libs/ui/kptganttitemdelegate.cpp.orig 2019-12-12 05:48:13.000000000 -0600
++++ ./src/libs/ui/kptganttitemdelegate.cpp 2020-07-18 14:48:48.058351438 -0500
+@@ -28,6 +28,7 @@
+ #include <QModelIndex>
+ #include <QApplication>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QLocale>
+
+ #include <KLocalizedString>
diff --git a/kde/patch/calligraplan/calligraplan.qt-511.patch b/kde/patch/calligraplan/calligraplan.qt-511.patch
deleted file mode 100644
index c0776fa..0000000
--- a/kde/patch/calligraplan/calligraplan.qt-511.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-From f53805bdc108b608e40f217e6a78e7e4df4284f2 Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Sun, 18 Mar 2018 11:56:57 +0100
-Subject: [PATCH] Fix build with Qt 5.11 (missing headers)
-
-Reviewers: #calligra:_3.0
-
-Tags: #calligra:_3.0
-
-Differential Revision: https://phabricator.kde.org/D11454
----
- plan/src/kptview.h | 1 +
- plan/src/kptviewlist.cpp | 1 +
- plan/src/libs/ui/kptaccountseditor.cpp | 1 +
- plan/src/libs/ui/kptdocumentspanel.h | 1 +
- plan/src/libs/ui/kptitemviewsettup.cpp | 2 +-
- plan/src/libs/ui/kpttaskeditor.cpp | 1 +
- plan/src/libs/ui/reportsgenerator/ReportsGeneratorView.cpp | 1 +
- plan/src/libs/widgets/KoPageLayoutWidget.cpp | 2 ++
- 15 files changed, 18 insertions(+), 1 deletion(-)
-
-diff --git a/plan/src/kptview.h b/plan/src/kptview.h
-index 44d11935e71..a98e55342db 100644
---- a/plan/src/kptview.h
-+++ b/plan/src/kptview.h
-@@ -28,6 +28,7 @@
- #include "kptcontext.h"
- #include "kptviewbase.h"
-
-+#include <QActionGroup>
- #include <QDockWidget>
- #include <QMap>
-
-diff --git a/plan/src/kptviewlist.cpp b/plan/src/kptviewlist.cpp
-index f34e702e055..0e6db7b2ffe 100644
---- a/plan/src/kptviewlist.cpp
-+++ b/plan/src/kptviewlist.cpp
-@@ -25,6 +25,7 @@
- #include <QStyle>
- #include <QBrush>
- #include <QContextMenuEvent>
-+#include <QHeaderView>
- #include <QMenu>
-
- #include <kmessagebox.h>
-diff --git a/plan/src/libs/ui/kptaccountseditor.cpp b/plan/src/libs/ui/kptaccountseditor.cpp
-index 7991fafd779..54e3a87c94f 100644
---- a/plan/src/libs/ui/kptaccountseditor.cpp
-+++ b/plan/src/libs/ui/kptaccountseditor.cpp
-@@ -40,6 +40,7 @@
- #include <QContextMenuEvent>
- #include <QMenu>
- #include <QAction>
-+#include <QHeaderView>
-
- #include <KLocalizedString>
- #include <kactioncollection.h>
-diff --git a/plan/src/libs/ui/kptdocumentspanel.h b/plan/src/libs/ui/kptdocumentspanel.h
-index 00ea3af80b2..491cb1ebb86 100644
---- a/plan/src/libs/ui/kptdocumentspanel.h
-+++ b/plan/src/libs/ui/kptdocumentspanel.h
-@@ -26,6 +26,7 @@
-
- #include "kptdocuments.h"
-
-+#include <QModelIndexList>
- #include <QWidget>
- #include <kundo2qstack.h>
-
-diff --git a/plan/src/libs/ui/kptitemviewsettup.cpp b/plan/src/libs/ui/kptitemviewsettup.cpp
-index d1c3b1fc157..7c97a070b9a 100644
---- a/plan/src/libs/ui/kptitemviewsettup.cpp
-+++ b/plan/src/libs/ui/kptitemviewsettup.cpp
-@@ -25,9 +25,9 @@
-
- #include "KoPageLayoutWidget.h"
-
-+#include <QHeaderView>
- #include <QPushButton>
-
--
- namespace KPlato
- {
-
-diff --git a/plan/src/libs/ui/kpttaskeditor.cpp b/plan/src/libs/ui/kpttaskeditor.cpp
-index 21546118d33..91db5acbb18 100644
---- a/plan/src/libs/ui/kpttaskeditor.cpp
-+++ b/plan/src/libs/ui/kpttaskeditor.cpp
-@@ -45,6 +45,7 @@
- #include <QVBoxLayout>
- #include <QDragMoveEvent>
- #include <QAction>
-+#include <QHeaderView>
- #include <QMenu>
-
- #include <kactionmenu.h>
-diff --git a/plan/src/libs/ui/reportsgenerator/ReportsGeneratorView.cpp b/plan/src/libs/ui/reportsgenerator/ReportsGeneratorView.cpp
-index 344ebc2b599..9146f06ab8c 100644
---- a/plan/src/libs/ui/reportsgenerator/ReportsGeneratorView.cpp
-+++ b/plan/src/libs/ui/reportsgenerator/ReportsGeneratorView.cpp
-@@ -31,6 +31,7 @@
- #include <KFile>
-
- #include <QAction>
-+#include <QHeaderView>
- #include <QTreeView>
- #include <QStandardItemModel>
- #include <QModelIndex>
-diff --git a/plan/src/libs/widgets/KoPageLayoutWidget.cpp b/plan/src/libs/widgets/KoPageLayoutWidget.cpp
-index c9e17b748a9..b67e9848807 100644
---- a/plan/src/libs/widgets/KoPageLayoutWidget.cpp
-+++ b/plan/src/libs/widgets/KoPageLayoutWidget.cpp
-@@ -23,6 +23,8 @@
-
- #include <KoUnit.h>
-
-+#include <QButtonGroup>
-+
- class Q_DECL_HIDDEN KoPageLayoutWidget::Private
- {
- public:
---
-2.16.2
-
-
diff --git a/kde/patch/cantor.patch b/kde/patch/cantor.patch
deleted file mode 100644
index 54f2b47..0000000
--- a/kde/patch/cantor.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix build against KF 5.31.0 (repaired in 16.12.3):
-#cat $CWD/patch/cantor/cantor_python.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-#cat $CWD/patch/cantor/cantor_julia.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/cantor/cantor_julia.patch b/kde/patch/cantor/cantor_julia.patch
deleted file mode 100644
index 5c381ca..0000000
--- a/kde/patch/cantor/cantor_julia.patch
+++ /dev/null
@@ -1,193 +0,0 @@
-Patch taken from:
-https://gitweb.gentoo.org/repo/gentoo.git/plain/kde-apps/cantor/files/cantor-16.12.2-julia-kf-5.31.patch
-
-From 45322d9f58f50df3d4d5755d4199e579f6fd8646 Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Sat, 11 Feb 2017 22:46:35 +0100
-Subject: [PATCH] [julia] Fix build with -fno-operator-names
-
-REVIEW: 129942
----
- src/backends/julia/juliaexpression.cpp | 6 +++---
- src/backends/julia/juliaextensions.cpp | 4 ++--
- src/backends/julia/juliahighlighter.cpp | 4 ++--
- src/backends/julia/juliakeywords.cpp | 10 +++++-----
- src/backends/julia/juliaserver/juliaserver.cpp | 4 ++--
- src/backends/julia/juliaserver/main.cpp | 4 ++--
- src/backends/julia/juliasession.cpp | 4 ++--
- 7 files changed, 18 insertions(+), 18 deletions(-)
-
-diff --git a/src/backends/julia/juliaexpression.cpp b/src/backends/julia/juliaexpression.cpp
-index 27cdd85..618200d 100644
---- a/src/backends/julia/juliaexpression.cpp
-+++ b/src/backends/julia/juliaexpression.cpp
-@@ -40,7 +40,7 @@ void JuliaExpression::evaluate()
-
- // Plots integration
- m_plot_filename.clear();
-- if (juliaSession->integratePlots() and checkPlotShowingCommands()) {
-+ if (juliaSession->integratePlots() && checkPlotShowingCommands()) {
- // Simply add plot saving command to the end of execution
- QStringList inlinePlotFormats;
- inlinePlotFormats << QLatin1String("svg");
-@@ -73,8 +73,8 @@ void JuliaExpression::finalize()
- setResult(new Cantor::TextResult(juliaSession->getOutput()));
- setStatus(Cantor::Expression::Error);
- } else {
-- if (not m_plot_filename.isEmpty()
-- and QFileInfo(m_plot_filename).exists()) {
-+ if (!m_plot_filename.isEmpty()
-+ && QFileInfo(m_plot_filename).exists()) {
- // If we have plot in result, show it
- setResult(
- new Cantor::ImageResult(QUrl::fromLocalFile(m_plot_filename)));
-diff --git a/src/backends/julia/juliaextensions.cpp b/src/backends/julia/juliaextensions.cpp
-index 4585c6f..ad5e3a9 100644
---- a/src/backends/julia/juliaextensions.cpp
-+++ b/src/backends/julia/juliaextensions.cpp
-@@ -138,7 +138,7 @@ QString JuliaPlotExtension::plotFunction2d(
- {
- auto new_left = left;
- auto new_right = right;
-- if (new_left.isEmpty() and new_right.isEmpty()) {
-+ if (new_left.isEmpty() && new_right.isEmpty()) {
- new_left = QLatin1String("-1");
- new_right = QLatin1String("1");
- } else if (new_left.isEmpty()) {
-@@ -165,7 +165,7 @@ QString JuliaPlotExtension::plotFunction3d(
- {
-
- auto update_interval = [](Interval &interval) {
-- if (interval.first.isEmpty() and interval.second.isEmpty()) {
-+ if (interval.first.isEmpty() && interval.second.isEmpty()) {
- interval.first = QLatin1String("-1");
- interval.second = QLatin1String("1");
- } else if (interval.first.isEmpty()) {
-diff --git a/src/backends/julia/juliahighlighter.cpp b/src/backends/julia/juliahighlighter.cpp
-index 4795361..f7d3622 100644
---- a/src/backends/julia/juliahighlighter.cpp
-+++ b/src/backends/julia/juliahighlighter.cpp
-@@ -98,7 +98,7 @@ void JuliaHighlighter::highlightBlock(const QString &text)
- while (pos < text.length()) {
- // Trying to close current environments
- bool triggered = false;
-- for (int i = 0; i < flags.size() and not triggered; i++) {
-+ for (int i = 0; i < flags.size() && !triggered; i++) {
- int flag = flags[i];
- QRegExp &regexp = regexps_ends[i];
- QTextCharFormat &format = formats[i];
-@@ -144,7 +144,7 @@ void JuliaHighlighter::highlightBlock(const QString &text)
- singleLineCommentStart.indexIn(text, pos);
-
- if (singleLineCommentStartPos != -1
-- and singleLineCommentStartPos < minPos) {
-+ && singleLineCommentStartPos < minPos) {
- // single line comment starts earlier
- setFormat(pos, text.length() - pos, commentFormat());
- break;
-diff --git a/src/backends/julia/juliakeywords.cpp b/src/backends/julia/juliakeywords.cpp
-index f0a5846..8a0efec 100644
---- a/src/backends/julia/juliakeywords.cpp
-+++ b/src/backends/julia/juliakeywords.cpp
-@@ -62,11 +62,11 @@ void JuliaKeywords::loadFromFile()
- const QStringRef name = xml.name();
-
- if (name == QLatin1String("keywords")
-- or name == QLatin1String("variables")
-- or name == QLatin1String("plot_showing_commands")) {
-+ || name == QLatin1String("variables")
-+ || name == QLatin1String("plot_showing_commands")) {
- while (xml.readNextStartElement()) {
- Q_ASSERT(
-- xml.isStartElement() and xml.name() == QLatin1String("word")
-+ xml.isStartElement() && xml.name() == QLatin1String("word")
- );
-
- const QString text = xml.readElementText();
-@@ -91,7 +91,7 @@ void JuliaKeywords::loadFromFile()
-
- void JuliaKeywords::addVariable(const QString &variable)
- {
-- if (not m_variables.contains(variable)) {
-+ if (!m_variables.contains(variable)) {
- m_variables << variable;
- }
- }
-@@ -104,7 +104,7 @@ void JuliaKeywords::clearVariables()
-
- void JuliaKeywords::addFunction(const QString &function)
- {
-- if (not m_functions.contains(function)) {
-+ if (!m_functions.contains(function)) {
- m_functions << function;
- }
- }
-diff --git a/src/backends/julia/juliaserver/juliaserver.cpp b/src/backends/julia/juliaserver/juliaserver.cpp
-index c9beb4c..91585cf 100644
---- a/src/backends/julia/juliaserver/juliaserver.cpp
-+++ b/src/backends/julia/juliaserver/juliaserver.cpp
-@@ -47,7 +47,7 @@ void JuliaServer::runJuliaCommand(const QString &command)
- {
- // Redirect stdout, stderr to temprorary files
- QTemporaryFile output, error;
-- if (not output.open() or not error.open()) {
-+ if (!output.open() || !error.open()) {
- qFatal("Unable to create temprorary files for stdout/stderr");
- return;
- }
-@@ -90,7 +90,7 @@ void JuliaServer::runJuliaCommand(const QString &command)
- bool is_nothing = jl_unbox_bool(
- static_cast<jl_value_t *>(jl_call2(equality, nothing, val))
- );
-- if (not is_nothing) {
-+ if (!is_nothing) {
- jl_static_show(JL_STDOUT, val);
- }
- m_was_exception = false;
-diff --git a/src/backends/julia/juliaserver/main.cpp b/src/backends/julia/juliaserver/main.cpp
-index ad7e4d9..11687ec 100644
---- a/src/backends/julia/juliaserver/main.cpp
-+++ b/src/backends/julia/juliaserver/main.cpp
-@@ -30,7 +30,7 @@ int main(int argc, char *argv[])
- {
- QCoreApplication app(argc, argv);
-
-- if (not QDBusConnection::sessionBus().isConnected()) {
-+ if (!QDBusConnection::sessionBus().isConnected()) {
- qWarning() << "Can't connect to the D-Bus session bus.\n"
- "To start it, run: eval `dbus-launch --auto-syntax`";
- return 1;
-@@ -39,7 +39,7 @@ int main(int argc, char *argv[])
- const QString &serviceName =
- QString::fromLatin1("org.kde.Cantor.Julia-%1").arg(app.applicationPid());
-
-- if (not QDBusConnection::sessionBus().registerService(serviceName)) {
-+ if (!QDBusConnection::sessionBus().registerService(serviceName)) {
- qWarning() << QDBusConnection::sessionBus().lastError().message();
- return 2;
- }
-diff --git a/src/backends/julia/juliasession.cpp b/src/backends/julia/juliasession.cpp
-index 425e6cb..9183e11 100644
---- a/src/backends/julia/juliasession.cpp
-+++ b/src/backends/julia/juliasession.cpp
-@@ -86,7 +86,7 @@ void JuliaSession::login()
- QDBusConnection::sessionBus()
- );
-
-- if (not m_interface->isValid()) {
-+ if (!m_interface->isValid()) {
- qWarning() << QDBusConnection::sessionBus().lastError().message();
- return;
- }
-@@ -213,7 +213,7 @@ bool JuliaSession::getWasException()
- {
- const QDBusReply<bool> &reply =
- m_interface->call(QLatin1String("getWasException"));
-- return reply.isValid() and reply.value();
-+ return reply.isValid() && reply.value();
- }
-
- void JuliaSession::listVariables()
---
-2.10.2
-
diff --git a/kde/patch/cantor/cantor_python.patch b/kde/patch/cantor/cantor_python.patch
deleted file mode 100644
index aa2b398..0000000
--- a/kde/patch/cantor/cantor_python.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-Patch taken from:
-https://gitweb.gentoo.org/repo/gentoo.git/plain/kde-apps/cantor/files/cantor-16.12.2-python-kf-5.31.patch
-
-commit 4b8ef6bed62daced90c7826985650c2a813d2996
-Author: Jonathan Riddell <jr@jriddell.org>
-Date: Wed Feb 8 14:56:48 2017 +0000
-
- remove modern C++ use to fix compile with current KDE policy
-
-diff --git a/src/backends/python/pythonhighlighter.cpp b/src/backends/python/pythonhighlighter.cpp
-index 4064524..87b10dd 100644
---- a/src/backends/python/pythonhighlighter.cpp
-+++ b/src/backends/python/pythonhighlighter.cpp
-@@ -87,7 +87,7 @@ void PythonHighlighter::highlightBlock(const QString &text)
- while (pos < text.length()) {
- // Trying to close current environments
- bool triggered = false;
-- for (int i = 0; i < flags.size() and not triggered; i++) {
-+ for (int i = 0; i < flags.size() && !triggered; i++) {
- int flag = flags[i];
- QRegExp &regexp = regexps[i];
- QTextCharFormat &format = formats[i];
-@@ -126,7 +126,7 @@ void PythonHighlighter::highlightBlock(const QString &text)
- singleLineCommentStart.indexIn(text, pos);
-
- if (singleLineCommentStartPos != -1
-- and singleLineCommentStartPos < minPos) {
-+ && singleLineCommentStartPos < minPos) {
- setFormat(pos, text.length() - pos, commentFormat());
- break;
- } else if (minRegexp) {
diff --git a/kde/patch/digikam.patch b/kde/patch/digikam.patch
deleted file mode 100644
index 8f50ec2..0000000
--- a/kde/patch/digikam.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-# Fix compilation with clang.
-# Fixed in digikam 5.5.0.
-#cat $CWD/patch/digikam/digikam_clang_fix.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix linking issue, backport from git master:
-#cd core
-# cat $CWD/patch/digikam/digikam_databasemodel.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-#cd -
-
-# Fix crashes with imagemagick 7 (fixed post digikam 6.4.0):
-cat $CWD/patch/digikam/digikam_imagemagick7.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/digikam/digikam_clang_fix.patch b/kde/patch/digikam/digikam_clang_fix.patch
deleted file mode 100644
index a4d77b0..0000000
--- a/kde/patch/digikam/digikam_clang_fix.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Taken from:
-http://pkgs.fedoraproject.org/cgit/rpms/digikam.git/
-And added and extra '/core/' path componenent.
-
-From 86cd0d1d89c8b4d13f06dc8a353bdd99f13c4758 Mon Sep 17 00:00:00 2001
-From: Gilles Caulier <caulier.gilles@gmail.com>
-Date: Wed, 18 Jan 2017 10:13:20 +0100
-Subject: [PATCH 2/2] Fix compilation with clang
-
----
- libs/dmetadata/metaengine_p.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/core/libs/dmetadata/metaengine_p.cpp b/core/libs/dmetadata/metaengine_p.cpp
-index 2c83b58..2b44e06 100644
---- a/core/libs/dmetadata/metaengine_p.cpp
-+++ b/core/libs/dmetadata/metaengine_p.cpp
-@@ -49,7 +49,7 @@ extern "C"
- #include "digikam_debug.h"
-
- // Pragma directives to reduce warnings from Exiv2.
--#if not defined(__APPLE__) && defined(__GNUC__)
-+#if !defined(__APPLE__) && defined(__GNUC__)
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- #endif
-@@ -723,7 +723,7 @@ void MetaEngine::Private::loadSidecarData(Exiv2::Image::AutoPtr xmpsidecar)
- } // namespace Digikam
-
- // Restore warnings
--#if not defined(__APPLE__) && defined(__GNUC__)
-+#if !defined(__APPLE__) && defined(__GNUC__)
- #pragma GCC diagnostic pop
- #endif
-
---
-2.9.3
-
diff --git a/kde/patch/digikam/digikam_databasemodel.patch b/kde/patch/digikam/digikam_databasemodel.patch
deleted file mode 100644
index 8b2fff7..0000000
--- a/kde/patch/digikam/digikam_databasemodel.patch
+++ /dev/null
@@ -1,13337 +0,0 @@
-From 7e00441c257e7e9e5dc5ab983fc06046fb72b0c5 Mon Sep 17 00:00:00 2001
-From: Gilles Caulier <caulier.gilles@gmail.com>
-Date: Sat, 22 Jul 2017 15:46:08 +0200
-Subject: fix broken linking stage under MacOS with macports. move database
- models into libdigikamdatabase. Let's others model in place to be included
- into libdigikamcore
-
----
- libs/database/CMakeLists.txt | 16 +-
- libs/database/models/imagefiltermodel.cpp | 1116 ++++++++++++++++++
- libs/database/models/imagefiltermodel.h | 299 +++++
- libs/database/models/imagefiltermodelpriv.cpp | 258 ++++
- libs/database/models/imagefiltermodelpriv.h | 159 +++
- libs/database/models/imagefiltermodelthreads.cpp | 40 +
- libs/database/models/imagefiltermodelthreads.h | 100 ++
- libs/database/models/imagefiltersettings.cpp | 952 +++++++++++++++
- libs/database/models/imagefiltersettings.h | 349 ++++++
- libs/database/models/imagelistmodel.cpp | 70 ++
- libs/database/models/imagelistmodel.h | 63 +
- libs/database/models/imagemodel.cpp | 1368 ++++++++++++++++++++++
- libs/database/models/imagemodel.h | 364 ++++++
- libs/database/models/imagesortsettings.cpp | 400 +++++++
- libs/database/models/imagesortsettings.h | 225 ++++
- libs/database/models/imagethumbnailmodel.cpp | 323 +++++
- libs/database/models/imagethumbnailmodel.h | 140 +++
- libs/database/models/imageversionsmodel.cpp | 183 +++
- libs/database/models/imageversionsmodel.h | 75 ++
- libs/models/CMakeLists.txt | 15 +-
- libs/models/imagefiltermodel.cpp | 1116 ------------------
- libs/models/imagefiltermodel.h | 299 -----
- libs/models/imagefiltermodelpriv.cpp | 258 ----
- libs/models/imagefiltermodelpriv.h | 159 ---
- libs/models/imagefiltermodelthreads.cpp | 40 -
- libs/models/imagefiltermodelthreads.h | 100 --
- libs/models/imagefiltersettings.cpp | 952 ---------------
- libs/models/imagefiltersettings.h | 349 ------
- libs/models/imagelistmodel.cpp | 70 --
- libs/models/imagelistmodel.h | 63 -
- libs/models/imagemodel.cpp | 1368 ----------------------
- libs/models/imagemodel.h | 364 ------
- libs/models/imagesortsettings.cpp | 400 -------
- libs/models/imagesortsettings.h | 225 ----
- libs/models/imagethumbnailmodel.cpp | 323 -----
- libs/models/imagethumbnailmodel.h | 140 ---
- libs/models/imageversionsmodel.cpp | 183 ---
- libs/models/imageversionsmodel.h | 75 --
- 38 files changed, 6499 insertions(+), 6500 deletions(-)
- create mode 100644 libs/database/models/imagefiltermodel.cpp
- create mode 100644 libs/database/models/imagefiltermodel.h
- create mode 100644 libs/database/models/imagefiltermodelpriv.cpp
- create mode 100644 libs/database/models/imagefiltermodelpriv.h
- create mode 100644 libs/database/models/imagefiltermodelthreads.cpp
- create mode 100644 libs/database/models/imagefiltermodelthreads.h
- create mode 100644 libs/database/models/imagefiltersettings.cpp
- create mode 100644 libs/database/models/imagefiltersettings.h
- create mode 100644 libs/database/models/imagelistmodel.cpp
- create mode 100644 libs/database/models/imagelistmodel.h
- create mode 100644 libs/database/models/imagemodel.cpp
- create mode 100644 libs/database/models/imagemodel.h
- create mode 100644 libs/database/models/imagesortsettings.cpp
- create mode 100644 libs/database/models/imagesortsettings.h
- create mode 100644 libs/database/models/imagethumbnailmodel.cpp
- create mode 100644 libs/database/models/imagethumbnailmodel.h
- create mode 100644 libs/database/models/imageversionsmodel.cpp
- create mode 100644 libs/database/models/imageversionsmodel.h
- delete mode 100644 libs/models/imagefiltermodel.cpp
- delete mode 100644 libs/models/imagefiltermodel.h
- delete mode 100644 libs/models/imagefiltermodelpriv.cpp
- delete mode 100644 libs/models/imagefiltermodelpriv.h
- delete mode 100644 libs/models/imagefiltermodelthreads.cpp
- delete mode 100644 libs/models/imagefiltermodelthreads.h
- delete mode 100644 libs/models/imagefiltersettings.cpp
- delete mode 100644 libs/models/imagefiltersettings.h
- delete mode 100644 libs/models/imagelistmodel.cpp
- delete mode 100644 libs/models/imagelistmodel.h
- delete mode 100644 libs/models/imagemodel.cpp
- delete mode 100644 libs/models/imagemodel.h
- delete mode 100644 libs/models/imagesortsettings.cpp
- delete mode 100644 libs/models/imagesortsettings.h
- delete mode 100644 libs/models/imagethumbnailmodel.cpp
- delete mode 100644 libs/models/imagethumbnailmodel.h
- delete mode 100644 libs/models/imageversionsmodel.cpp
- delete mode 100644 libs/models/imageversionsmodel.h
-
-diff --git a/libs/database/CMakeLists.txt b/libs/database/CMakeLists.txt
-index 7d05536..a431a36 100644
---- a/libs/database/CMakeLists.txt
-+++ b/libs/database/CMakeLists.txt
-@@ -13,6 +13,18 @@ endif (POLICY CMP0063)
- # Boost uses operator names (and, not, ...)
- string(REPLACE "-fno-operator-names" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
-
-+set(libdatabasemodels_SRCS
-+ models/imagemodel.cpp
-+ models/imagefiltermodel.cpp
-+ models/imagefiltermodelpriv.cpp
-+ models/imagefiltermodelthreads.cpp
-+ models/imagefiltersettings.cpp
-+ models/imagelistmodel.cpp
-+ models/imagesortsettings.cpp
-+ models/imagethumbnailmodel.cpp
-+ models/imageversionsmodel.cpp
-+)
-+
- set(libdatabasecore_SRCS
- server/databaseserverstarter.cpp
- server/databaseservererror.cpp
-@@ -152,10 +164,10 @@ if(ENABLE_DBUS)
- include_directories($<TARGET_PROPERTY:Qt5::DBus,INTERFACE_INCLUDE_DIRECTORIES>)
- endif()
-
--add_library(digikamdatabase_src OBJECT ${digikamdatabase_LIB_SRCS})
-+add_library(digikamdatabase_src OBJECT ${digikamdatabase_LIB_SRCS} ${libdatabasemodels_SRCS})
- add_library(digikamdatabasemain_src OBJECT ${libdatabaseutils_SRCS} ${libimgqsort_SRCS})
- add_library(digikamdatabasecore_src OBJECT ${libdatabasecore_SRCS})
--add_library(digikamdatabase SHARED $<TARGET_OBJECTS:digikamdatabase_src> $<TARGET_OBJECTS:digikamdatabasemodels_src>)
-+add_library(digikamdatabase $<TARGET_OBJECTS:digikamdatabase_src>)
-
- generate_export_header(digikamdatabase
- BASE_NAME digikam_database
-diff --git a/libs/database/models/imagefiltermodel.cpp b/libs/database/models/imagefiltermodel.cpp
-new file mode 100644
-index 0000000..3d57e05
---- /dev/null
-+++ b/libs/database/models/imagefiltermodel.cpp
-@@ -0,0 +1,1116 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-+ * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagefiltermodel.h"
-+#include "imagefiltermodelpriv.h"
-+#include "imagefiltermodelthreads.h"
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "coredbaccess.h"
-+#include "coredbchangesets.h"
-+#include "coredbwatch.h"
-+#include "imageinfolist.h"
-+#include "imagemodel.h"
-+
-+namespace Digikam
-+{
-+
-+ImageSortFilterModel::ImageSortFilterModel(QObject* parent)
-+ : DCategorizedSortFilterProxyModel(parent), m_chainedModel(0)
-+{
-+}
-+
-+void ImageSortFilterModel::setSourceImageModel(ImageModel* source)
-+{
-+ if (m_chainedModel)
-+ {
-+ m_chainedModel->setSourceImageModel(source);
-+ }
-+ else
-+ {
-+ setDirectSourceImageModel(source);
-+ }
-+}
-+
-+void ImageSortFilterModel::setSourceFilterModel(ImageSortFilterModel* source)
-+{
-+ if (source)
-+ {
-+ ImageModel* const model = sourceImageModel();
-+
-+ if (model)
-+ {
-+ source->setSourceImageModel(model);
-+ }
-+ }
-+
-+ m_chainedModel = source;
-+ setSourceModel(source);
-+}
-+
-+void ImageSortFilterModel::setDirectSourceImageModel(ImageModel* model)
-+{
-+ setSourceModel(model);
-+}
-+
-+void ImageSortFilterModel::setSourceModel(QAbstractItemModel* model)
-+{
-+ // made it protected, only setSourceImageModel is public
-+ DCategorizedSortFilterProxyModel::setSourceModel(model);
-+}
-+
-+ImageModel* ImageSortFilterModel::sourceImageModel() const
-+{
-+ if (m_chainedModel)
-+ {
-+ return m_chainedModel->sourceImageModel();
-+ }
-+
-+ return static_cast<ImageModel*>(sourceModel());
-+}
-+
-+ImageSortFilterModel* ImageSortFilterModel::sourceFilterModel() const
-+{
-+ return m_chainedModel;
-+}
-+
-+ImageFilterModel* ImageSortFilterModel::imageFilterModel() const
-+{
-+ // reimplemented in ImageFilterModel
-+ if (m_chainedModel)
-+ {
-+ return m_chainedModel->imageFilterModel();
-+ }
-+
-+ return 0;
-+}
-+
-+QModelIndex ImageSortFilterModel::mapToSourceImageModel(const QModelIndex& index) const
-+{
-+ if (m_chainedModel)
-+ {
-+ return m_chainedModel->mapToSourceImageModel(mapToSource(index));
-+ }
-+
-+ return mapToSource(index);
-+}
-+
-+QModelIndex ImageSortFilterModel::mapFromSourceImageModel(const QModelIndex& albummodel_index) const
-+{
-+ if (m_chainedModel)
-+ {
-+ return mapFromSource(m_chainedModel->mapFromSourceImageModel(albummodel_index));
-+ }
-+
-+ return mapFromSource(albummodel_index);
-+}
-+
-+
-+QModelIndex ImageSortFilterModel::mapFromDirectSourceToSourceImageModel(const QModelIndex& sourceModel_index) const
-+{
-+ if (m_chainedModel)
-+ {
-+ return m_chainedModel->mapToSourceImageModel(sourceModel_index);
-+ }
-+ return sourceModel_index;
-+}
-+
-+// -------------- Convenience mappers -------------------------------------------------------------------
-+
-+QList<QModelIndex> ImageSortFilterModel::mapListToSource(const QList<QModelIndex>& indexes) const
-+{
-+ QList<QModelIndex> sourceIndexes;
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ sourceIndexes << mapToSourceImageModel(index);
-+ }
-+ return sourceIndexes;
-+}
-+
-+QList<QModelIndex> ImageSortFilterModel::mapListFromSource(const QList<QModelIndex>& sourceIndexes) const
-+{
-+ QList<QModelIndex> indexes;
-+ foreach(const QModelIndex& index, sourceIndexes)
-+ {
-+ indexes << mapFromSourceImageModel(index);
-+ }
-+ return indexes;
-+}
-+
-+ImageInfo ImageSortFilterModel::imageInfo(const QModelIndex& index) const
-+{
-+ return sourceImageModel()->imageInfo(mapToSourceImageModel(index));
-+}
-+
-+qlonglong ImageSortFilterModel::imageId(const QModelIndex& index) const
-+{
-+ return sourceImageModel()->imageId(mapToSourceImageModel(index));
-+}
-+
-+QList<ImageInfo> ImageSortFilterModel::imageInfos(const QList<QModelIndex>& indexes) const
-+{
-+ QList<ImageInfo> infos;
-+ ImageModel* const model = sourceImageModel();
-+
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ infos << model->imageInfo(mapToSourceImageModel(index));
-+ }
-+
-+ return infos;
-+}
-+
-+QList<qlonglong> ImageSortFilterModel::imageIds(const QList<QModelIndex>& indexes) const
-+{
-+ QList<qlonglong> ids;
-+ ImageModel* const model = sourceImageModel();
-+
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ ids << model->imageId(mapToSourceImageModel(index));
-+ }
-+
-+ return ids;
-+}
-+
-+QModelIndex ImageSortFilterModel::indexForPath(const QString& filePath) const
-+{
-+ return mapFromSourceImageModel(sourceImageModel()->indexForPath(filePath));
-+}
-+
-+QModelIndex ImageSortFilterModel::indexForImageInfo(const ImageInfo& info) const
-+{
-+ return mapFromSourceImageModel(sourceImageModel()->indexForImageInfo(info));
-+}
-+
-+QModelIndex ImageSortFilterModel::indexForImageId(qlonglong id) const
-+{
-+ return mapFromSourceImageModel(sourceImageModel()->indexForImageId(id));
-+}
-+
-+QList<ImageInfo> ImageSortFilterModel::imageInfosSorted() const
-+{
-+ QList<ImageInfo> infos;
-+ const int size = rowCount();
-+ ImageModel* const model = sourceImageModel();
-+
-+ for (int i=0; i<size; ++i)
-+ {
-+ infos << model->imageInfo(mapToSourceImageModel(index(i, 0)));
-+ }
-+
-+ return infos;
-+}
-+
-+// --------------------------------------------------------------------------------------------
-+
-+ImageFilterModel::ImageFilterModel(QObject* parent)
-+ : ImageSortFilterModel(parent),
-+ d_ptr(new ImageFilterModelPrivate)
-+{
-+ d_ptr->init(this);
-+}
-+
-+ImageFilterModel::ImageFilterModel(ImageFilterModelPrivate& dd, QObject* parent)
-+ : ImageSortFilterModel(parent),
-+ d_ptr(&dd)
-+{
-+ d_ptr->init(this);
-+}
-+
-+ImageFilterModel::~ImageFilterModel()
-+{
-+ Q_D(ImageFilterModel);
-+ delete d;
-+}
-+
-+void ImageFilterModel::setDirectSourceImageModel(ImageModel* sourceModel)
-+{
-+ Q_D(ImageFilterModel);
-+
-+ if (d->imageModel)
-+ {
-+ d->imageModel->unsetPreprocessor(d);
-+ disconnect(d->imageModel, SIGNAL(modelReset()),
-+ this, SLOT(slotModelReset()));
-+ slotModelReset();
-+ }
-+
-+ d->imageModel = sourceModel;
-+
-+ if (d->imageModel)
-+ {
-+ d->imageModel->setPreprocessor(d);
-+
-+ connect(d->imageModel, SIGNAL(preprocess(QList<ImageInfo>,QList<QVariant>)),
-+ d, SLOT(preprocessInfos(QList<ImageInfo>,QList<QVariant>)));
-+
-+ connect(d->imageModel, SIGNAL(processAdded(QList<ImageInfo>,QList<QVariant>)),
-+ d, SLOT(processAddedInfos(QList<ImageInfo>,QList<QVariant>)));
-+
-+ connect(d, SIGNAL(reAddImageInfos(QList<ImageInfo>,QList<QVariant>)),
-+ d->imageModel, SLOT(reAddImageInfos(QList<ImageInfo>,QList<QVariant>)));
-+
-+ connect(d, SIGNAL(reAddingFinished()),
-+ d->imageModel, SLOT(reAddingFinished()));
-+
-+ connect(d->imageModel, SIGNAL(modelReset()),
-+ this, SLOT(slotModelReset()));
-+
-+ connect(d->imageModel, SIGNAL(imageChange(ImageChangeset,QItemSelection)),
-+ this, SLOT(slotImageChange(ImageChangeset)));
-+
-+ connect(d->imageModel, SIGNAL(imageTagChange(ImageTagChangeset,QItemSelection)),
-+ this, SLOT(slotImageTagChange(ImageTagChangeset)));
-+ }
-+
-+ setSourceModel(d->imageModel);
-+}
-+
-+QVariant ImageFilterModel::data(const QModelIndex& index, int role) const
-+{
-+ Q_D(const ImageFilterModel);
-+
-+ if (!index.isValid())
-+ {
-+ return QVariant();
-+ }
-+
-+ switch (role)
-+ {
-+ // Attention: This breaks should there ever be another filter model between this and the ImageModel
-+
-+ case DCategorizedSortFilterProxyModel::CategoryDisplayRole:
-+ return categoryIdentifier(d->imageModel->imageInfoRef(mapToSource(index)));
-+ case CategorizationModeRole:
-+ return d->sorter.categorizationMode;
-+ case SortOrderRole:
-+ return d->sorter.sortRole;
-+ //case CategoryCountRole:
-+ // return categoryCount(d->imageModel->imageInfoRef(mapToSource(index)));
-+ case CategoryAlbumIdRole:
-+ return d->imageModel->imageInfoRef(mapToSource(index)).albumId();
-+ case CategoryFormatRole:
-+ return d->imageModel->imageInfoRef(mapToSource(index)).format();
-+ case GroupIsOpenRole:
-+ return d->groupFilter.isAllOpen() ||
-+ d->groupFilter.isOpen(d->imageModel->imageInfoRef(mapToSource(index)).id());
-+ case ImageFilterModelPointerRole:
-+ return QVariant::fromValue(const_cast<ImageFilterModel*>(this));
-+ }
-+
-+ return DCategorizedSortFilterProxyModel::data(index, role);
-+}
-+
-+ImageFilterModel* ImageFilterModel::imageFilterModel() const
-+{
-+ return const_cast<ImageFilterModel*>(this);
-+}
-+
-+DatabaseFields::Set ImageFilterModel::suggestedWatchFlags() const
-+{
-+ DatabaseFields::Set watchFlags;
-+ watchFlags |= DatabaseFields::Name | DatabaseFields::FileSize | DatabaseFields::ModificationDate;
-+ watchFlags |= DatabaseFields::Rating | DatabaseFields::CreationDate | DatabaseFields::Orientation |
-+ DatabaseFields::Width | DatabaseFields::Height;
-+ watchFlags |= DatabaseFields::Comment;
-+ watchFlags |= DatabaseFields::ImageRelations;
-+ return watchFlags;
-+}
-+
-+// -------------- Filter settings --------------
-+
-+void ImageFilterModel::setDayFilter(const QList<QDateTime>& days)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setDayFilter(days);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setTagFilter(const QList<int>& includedTags, const QList<int>& excludedTags,
-+ ImageFilterSettings::MatchingCondition matchingCond,
-+ bool showUnTagged, const QList<int>& clTagIds, const QList<int>& plTagIds)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setTagFilter(includedTags, excludedTags, matchingCond, showUnTagged, clTagIds, plTagIds);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setRatingFilter(int rating, ImageFilterSettings::RatingCondition ratingCond, bool isUnratedExcluded)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setRatingFilter(rating, ratingCond, isUnratedExcluded);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setUrlWhitelist(const QList<QUrl> urlList, const QString& id)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setUrlWhitelist(urlList, id);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setIdWhitelist(const QList<qlonglong>& idList, const QString& id)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setIdWhitelist(idList, id);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setMimeTypeFilter(int mimeTypeFilter)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setMimeTypeFilter(mimeTypeFilter);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setGeolocationFilter(const ImageFilterSettings::GeolocationCondition& condition)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setGeolocationFilter(condition);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setTextFilter(const SearchTextFilterSettings& settings)
-+{
-+ Q_D(ImageFilterModel);
-+ d->filter.setTextFilter(settings);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+void ImageFilterModel::setImageFilterSettings(const ImageFilterSettings& settings)
-+{
-+ Q_D(ImageFilterModel);
-+
-+ {
-+ QMutexLocker lock(&d->mutex);
-+ d->version++;
-+ d->filter = settings;
-+ d->filterCopy = settings;
-+ d->versionFilterCopy = d->versionFilter;
-+ d->groupFilterCopy = d->groupFilter;
-+
-+ d->needPrepareComments = settings.isFilteringByText();
-+ d->needPrepareTags = settings.isFilteringByTags();
-+ d->needPrepareGroups = true;
-+ d->needPrepare = d->needPrepareComments || d->needPrepareTags || d->needPrepareGroups;
-+
-+ d->hasOneMatch = false;
-+ d->hasOneMatchForText = false;
-+ }
-+
-+ d->filterResults.clear();
-+
-+ //d->categoryCountHashInt.clear();
-+ //d->categoryCountHashString.clear();
-+ if (d->imageModel)
-+ {
-+ d->infosToProcess(d->imageModel->imageInfos());
-+ }
-+
-+ emit filterSettingsChanged(settings);
-+}
-+
-+void ImageFilterModel::setVersionManagerSettings(const VersionManagerSettings& settings)
-+{
-+ Q_D(ImageFilterModel);
-+ d->versionFilter.setVersionManagerSettings(settings);
-+ setVersionImageFilterSettings(d->versionFilter);
-+}
-+
-+void ImageFilterModel::setExceptionList(const QList<qlonglong>& idList, const QString& id)
-+{
-+ Q_D(ImageFilterModel);
-+ d->versionFilter.setExceptionList(idList, id);
-+ setVersionImageFilterSettings(d->versionFilter);
-+}
-+
-+void ImageFilterModel::setVersionImageFilterSettings(const VersionImageFilterSettings& settings)
-+{
-+ Q_D(ImageFilterModel);
-+ d->versionFilter = settings;
-+ slotUpdateFilter();
-+}
-+
-+bool ImageFilterModel::isGroupOpen(qlonglong group) const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->groupFilter.isOpen(group);
-+}
-+
-+bool ImageFilterModel::isAllGroupsOpen() const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->groupFilter.isAllOpen();
-+}
-+
-+void ImageFilterModel::setGroupOpen(qlonglong group, bool open)
-+{
-+ Q_D(ImageFilterModel);
-+ d->groupFilter.setOpen(group, open);
-+ setGroupImageFilterSettings(d->groupFilter);
-+}
-+
-+void ImageFilterModel::toggleGroupOpen(qlonglong group)
-+{
-+ setGroupOpen(group, !isGroupOpen(group));
-+}
-+
-+void ImageFilterModel::setAllGroupsOpen(bool open)
-+{
-+ Q_D(ImageFilterModel);
-+ d->groupFilter.setAllOpen(open);
-+ setGroupImageFilterSettings(d->groupFilter);
-+}
-+
-+void ImageFilterModel::setGroupImageFilterSettings(const GroupImageFilterSettings& settings)
-+{
-+ Q_D(ImageFilterModel);
-+ d->groupFilter = settings;
-+ slotUpdateFilter();
-+}
-+
-+void ImageFilterModel::slotUpdateFilter()
-+{
-+ Q_D(ImageFilterModel);
-+ setImageFilterSettings(d->filter);
-+}
-+
-+ImageFilterSettings ImageFilterModel::imageFilterSettings() const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->filter;
-+}
-+
-+ImageSortSettings ImageFilterModel::imageSortSettings() const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->sorter;
-+}
-+
-+VersionImageFilterSettings ImageFilterModel::versionImageFilterSettings() const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->versionFilter;
-+}
-+
-+GroupImageFilterSettings ImageFilterModel::groupImageFilterSettings() const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->groupFilter;
-+}
-+
-+void ImageFilterModel::slotModelReset()
-+{
-+ Q_D(ImageFilterModel);
-+ {
-+ QMutexLocker lock(&d->mutex);
-+ // discard all packages on the way that are marked as send out for re-add
-+ d->lastDiscardVersion = d->version;
-+ d->sentOutForReAdd = 0;
-+ // discard all packages on the way
-+ d->version++;
-+ d->sentOut = 0;
-+
-+ d->hasOneMatch = false;
-+ d->hasOneMatchForText = false;
-+ }
-+ d->filterResults.clear();
-+}
-+
-+bool ImageFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
-+{
-+ Q_D(const ImageFilterModel);
-+
-+ if (source_parent.isValid())
-+ {
-+ return false;
-+ }
-+
-+ qlonglong id = d->imageModel->imageId(source_row);
-+ QHash<qlonglong, bool>::const_iterator it = d->filterResults.constFind(id);
-+
-+ if (it != d->filterResults.constEnd())
-+ {
-+ return it.value();
-+ }
-+
-+ // usually done in thread and cache, unless source model changed
-+ ImageInfo info = d->imageModel->imageInfo(source_row);
-+ bool match = d->filter.matches(info);
-+ match = match ? d->versionFilter.matches(info) : false;
-+
-+ return match ? d->groupFilter.matches(info) : false;
-+}
-+
-+void ImageFilterModel::setSendImageInfoSignals(bool sendSignals)
-+{
-+ if (sendSignals)
-+ {
-+ connect(this, SIGNAL(rowsInserted(QModelIndex,int,int)),
-+ this, SLOT(slotRowsInserted(QModelIndex,int,int)));
-+
-+ connect(this, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-+ this, SLOT(slotRowsAboutToBeRemoved(QModelIndex,int,int)));
-+ }
-+ else
-+ {
-+ disconnect(this, SIGNAL(rowsInserted(QModelIndex,int,int)),
-+ this, SLOT(slotRowsInserted(QModelIndex,int,int)));
-+
-+ disconnect(this, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-+ this, SLOT(slotRowsAboutToBeRemoved(QModelIndex,int,int)));
-+ }
-+}
-+
-+void ImageFilterModel::slotRowsInserted(const QModelIndex& /*parent*/, int start, int end)
-+{
-+ QList<ImageInfo> infos;
-+
-+ for (int i=start; i<=end; ++i)
-+ {
-+ infos << imageInfo(index(i, 0));
-+ }
-+
-+ emit imageInfosAdded(infos);
-+}
-+
-+void ImageFilterModel::slotRowsAboutToBeRemoved(const QModelIndex& /*parent*/, int start, int end)
-+{
-+ QList<ImageInfo> infos;
-+
-+ for (int i=start; i<=end; ++i)
-+ {
-+ infos << imageInfo(index(i, 0));
-+ }
-+
-+ emit imageInfosAboutToBeRemoved(infos);
-+}
-+
-+// -------------- Threaded preparation & filtering --------------
-+
-+void ImageFilterModel::addPrepareHook(ImageFilterModelPrepareHook* hook)
-+{
-+ Q_D(ImageFilterModel);
-+ QMutexLocker lock(&d->mutex);
-+ d->prepareHooks << hook;
-+}
-+
-+void ImageFilterModel::removePrepareHook(ImageFilterModelPrepareHook* hook)
-+{
-+ Q_D(ImageFilterModel);
-+ QMutexLocker lock(&d->mutex);
-+ d->prepareHooks.removeAll(hook);
-+}
-+
-+void ImageFilterModelPreparer::process(ImageFilterModelTodoPackage package)
-+{
-+ if (!checkVersion(package))
-+ {
-+ emit discarded(package);
-+ return;
-+ }
-+
-+ // get thread-local copy
-+ bool needPrepareTags, needPrepareComments, needPrepareGroups;
-+ QList<ImageFilterModelPrepareHook*> prepareHooks;
-+ {
-+ QMutexLocker lock(&d->mutex);
-+ needPrepareTags = d->needPrepareTags;
-+ needPrepareComments = d->needPrepareComments;
-+ needPrepareGroups = d->needPrepareGroups;
-+ prepareHooks = d->prepareHooks;
-+ }
-+
-+ //TODO: Make efficient!!
-+ if (needPrepareComments)
-+ {
-+ foreach(const ImageInfo& info, package.infos)
-+ {
-+ info.comment();
-+ }
-+ }
-+
-+ if (!checkVersion(package))
-+ {
-+ emit discarded(package);
-+ return;
-+ }
-+
-+ // The downside of QVector: At some point, we may need a QList for an API.
-+ // Nonetheless, QList and ImageInfo is fast. We could as well
-+ // reimplement ImageInfoList to ImageInfoVector (internally with templates?)
-+ ImageInfoList infoList;
-+
-+ if (needPrepareTags || needPrepareGroups)
-+ {
-+ infoList = package.infos.toList();
-+ }
-+
-+ if (needPrepareTags)
-+ {
-+ infoList.loadTagIds();
-+ }
-+
-+ if (needPrepareGroups)
-+ {
-+ infoList.loadGroupImageIds();
-+ }
-+
-+ foreach(ImageFilterModelPrepareHook* hook, prepareHooks)
-+ {
-+ hook->prepare(package.infos);
-+ }
-+
-+ emit processed(package);
-+}
-+
-+void ImageFilterModelFilterer::process(ImageFilterModelTodoPackage package)
-+{
-+ if (!checkVersion(package))
-+ {
-+ emit discarded(package);
-+ return;
-+ }
-+
-+ // get thread-local copy
-+ ImageFilterSettings localFilter;
-+ VersionImageFilterSettings localVersionFilter;
-+ GroupImageFilterSettings localGroupFilter;
-+ bool hasOneMatch;
-+ bool hasOneMatchForText;
-+ {
-+ QMutexLocker lock(&d->mutex);
-+ localFilter = d->filterCopy;
-+ localVersionFilter = d->versionFilterCopy;
-+ localGroupFilter = d->groupFilterCopy;
-+ hasOneMatch = d->hasOneMatch;
-+ hasOneMatchForText = d->hasOneMatchForText;
-+ }
-+
-+ // Actual filtering. The variants to spare checking hasOneMatch over and over again.
-+ if (hasOneMatch && hasOneMatchForText)
-+ {
-+ foreach(const ImageInfo& info, package.infos)
-+ {
-+ package.filterResults[info.id()] = localFilter.matches(info) &&
-+ localVersionFilter.matches(info) &&
-+ localGroupFilter.matches(info);
-+ }
-+ }
-+ else if (hasOneMatch)
-+ {
-+ bool matchForText;
-+
-+ foreach(const ImageInfo& info, package.infos)
-+ {
-+ package.filterResults[info.id()] = localFilter.matches(info, &matchForText) &&
-+ localVersionFilter.matches(info) &&
-+ localGroupFilter.matches(info);
-+
-+ if (matchForText)
-+ {
-+ hasOneMatchForText = true;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ bool result, matchForText;
-+
-+ foreach(const ImageInfo& info, package.infos)
-+ {
-+ result = localFilter.matches(info, &matchForText) &&
-+ localVersionFilter.matches(info) &&
-+ localGroupFilter.matches(info);
-+ package.filterResults[info.id()] = result;
-+
-+ if (result)
-+ {
-+ hasOneMatch = true;
-+ }
-+
-+ if (matchForText)
-+ {
-+ hasOneMatchForText = true;
-+ }
-+ }
-+ }
-+
-+ if (checkVersion(package))
-+ {
-+ QMutexLocker lock(&d->mutex);
-+ d->hasOneMatch = hasOneMatch;
-+ d->hasOneMatchForText = hasOneMatchForText;
-+ }
-+
-+ emit processed(package);
-+}
-+
-+// -------------- Sorting and Categorization -------------------------------------------------------
-+
-+void ImageFilterModel::setImageSortSettings(const ImageSortSettings& sorter)
-+{
-+ Q_D(ImageFilterModel);
-+ d->sorter = sorter;
-+ setCategorizedModel(d->sorter.categorizationMode != ImageSortSettings::NoCategories);
-+ invalidate();
-+}
-+
-+void ImageFilterModel::setCategorizationMode(ImageSortSettings::CategorizationMode mode)
-+{
-+ Q_D(ImageFilterModel);
-+ d->sorter.setCategorizationMode(mode);
-+ setImageSortSettings(d->sorter);
-+}
-+
-+void ImageFilterModel::setCategorizationSortOrder(ImageSortSettings::SortOrder order)
-+{
-+ Q_D(ImageFilterModel);
-+ d->sorter.setCategorizationSortOrder(order);
-+ setImageSortSettings(d->sorter);
-+}
-+
-+void ImageFilterModel::setSortRole(ImageSortSettings::SortRole role)
-+{
-+ Q_D(ImageFilterModel);
-+ d->sorter.setSortRole(role);
-+ setImageSortSettings(d->sorter);
-+}
-+
-+void ImageFilterModel::setSortOrder(ImageSortSettings::SortOrder order)
-+{
-+ Q_D(ImageFilterModel);
-+ d->sorter.setSortOrder(order);
-+ setImageSortSettings(d->sorter);
-+}
-+
-+void ImageFilterModel::setStringTypeNatural(bool natural)
-+{
-+ Q_D(ImageFilterModel);
-+ d->sorter.setStringTypeNatural(natural);
-+ setImageSortSettings(d->sorter);
-+}
-+
-+int ImageFilterModel::compareCategories(const QModelIndex& left, const QModelIndex& right) const
-+{
-+ // source indexes
-+ Q_D(const ImageFilterModel);
-+
-+ if (!d->sorter.isCategorized())
-+ {
-+ return 0;
-+ }
-+
-+ if (!left.isValid() || !right.isValid())
-+ {
-+ return -1;
-+ }
-+
-+ const ImageInfo& leftInfo = d->imageModel->imageInfoRef(left);
-+ const ImageInfo& rightInfo = d->imageModel->imageInfoRef(right);
-+
-+ // Check grouping
-+ qlonglong leftGroupImageId = leftInfo.groupImageId();
-+ qlonglong rightGroupImageId = rightInfo.groupImageId();
-+
-+ return compareInfosCategories(leftGroupImageId == -1 ? leftInfo : ImageInfo(leftGroupImageId),
-+ rightGroupImageId == -1 ? rightInfo : ImageInfo(rightGroupImageId));
-+}
-+
-+bool ImageFilterModel::subSortLessThan(const QModelIndex& left, const QModelIndex& right) const
-+{
-+ // source indexes
-+ Q_D(const ImageFilterModel);
-+
-+ if (!left.isValid() || !right.isValid())
-+ {
-+ return true;
-+ }
-+
-+ if (left == right)
-+ {
-+ return false;
-+ }
-+
-+ const ImageInfo& leftInfo = d->imageModel->imageInfoRef(left);
-+ const ImageInfo& rightInfo = d->imageModel->imageInfoRef(right);
-+
-+ if (leftInfo == rightInfo)
-+ {
-+ return d->sorter.lessThan(left.data(ImageModel::ExtraDataRole), right.data(ImageModel::ExtraDataRole));
-+ }
-+
-+ // Check grouping
-+ qlonglong leftGroupImageId = leftInfo.groupImageId();
-+ qlonglong rightGroupImageId = rightInfo.groupImageId();
-+
-+ // Either no grouping (-1), or same group image, or same image
-+ if (leftGroupImageId == rightGroupImageId)
-+ {
-+ return infosLessThan(leftInfo, rightInfo);
-+ }
-+
-+ // We have grouping to handle
-+
-+ // Is one grouped on the other? Sort behind leader.
-+ if (leftGroupImageId == rightInfo.id())
-+ {
-+ return false;
-+ }
-+ if (rightGroupImageId == leftInfo.id())
-+ {
-+ return true;
-+ }
-+
-+ // Use the group leader for sorting
-+ return infosLessThan(leftGroupImageId == -1 ? leftInfo : ImageInfo(leftGroupImageId),
-+ rightGroupImageId == -1 ? rightInfo : ImageInfo(rightGroupImageId));
-+}
-+
-+int ImageFilterModel::compareInfosCategories(const ImageInfo& left, const ImageInfo& right) const
-+{
-+ // Note: reimplemented in ImageAlbumFilterModel
-+ Q_D(const ImageFilterModel);
-+ return d->sorter.compareCategories(left, right);
-+}
-+
-+// Feel free to optimize. QString::number is 3x slower.
-+static inline QString fastNumberToString(int id)
-+{
-+ const int size = sizeof(int) * 2;
-+ char c[size+1];
-+ c[size] = '\0';
-+ char* p = c;
-+ int number = id;
-+
-+ for (int i=0; i<size; ++i)
-+ {
-+ *p = 'a' + (number & 0xF);
-+ number >>= 4;
-+ ++p;
-+ }
-+
-+ return QString::fromLatin1(c);
-+}
-+
-+QString ImageFilterModel::categoryIdentifier(const ImageInfo& i) const
-+{
-+ Q_D(const ImageFilterModel);
-+
-+ if (!d->sorter.isCategorized())
-+ {
-+ return QString();
-+ }
-+
-+ qlonglong groupedImageId = i.groupImageId();
-+ ImageInfo info = groupedImageId == -1 ? i : ImageInfo(groupedImageId);
-+
-+ switch (d->sorter.categorizationMode)
-+ {
-+ case ImageSortSettings::NoCategories:
-+ return QString();
-+ case ImageSortSettings::OneCategory:
-+ return QString();
-+ case ImageSortSettings::CategoryByAlbum:
-+ return fastNumberToString(info.albumId());
-+ case ImageSortSettings::CategoryByFormat:
-+ return info.format();
-+ default:
-+ return QString();
-+ }
-+}
-+
-+bool ImageFilterModel::infosLessThan(const ImageInfo& left, const ImageInfo& right) const
-+{
-+ Q_D(const ImageFilterModel);
-+ return d->sorter.lessThan(left, right);
-+}
-+
-+// -------------- Watching changes -----------------------------------------------------------------
-+
-+void ImageFilterModel::slotImageTagChange(const ImageTagChangeset& changeset)
-+{
-+ Q_D(ImageFilterModel);
-+
-+ if (!d->imageModel || d->imageModel->isEmpty())
-+ {
-+ return;
-+ }
-+
-+ // already scheduled to re-filter?
-+ if (d->updateFilterTimer->isActive())
-+ {
-+ return;
-+ }
-+
-+ // do we filter at all?
-+ if (!d->versionFilter.isFilteringByTags() &&
-+ !d->filter.isFilteringByTags() &&
-+ !d->filter.isFilteringByText())
-+ {
-+ return;
-+ }
-+
-+ // is one of our images affected?
-+ foreach(const qlonglong& id, changeset.ids())
-+ {
-+ // if one matching image id is found, trigger a refresh
-+ if (d->imageModel->hasImage(id))
-+ {
-+ d->updateFilterTimer->start();
-+ return;
-+ }
-+ }
-+}
-+
-+void ImageFilterModel::slotImageChange(const ImageChangeset& changeset)
-+{
-+ Q_D(ImageFilterModel);
-+
-+ if (!d->imageModel || d->imageModel->isEmpty())
-+ {
-+ return;
-+ }
-+
-+ // already scheduled to re-filter?
-+ if (d->updateFilterTimer->isActive())
-+ {
-+ return;
-+ }
-+
-+ // is one of the values affected that we filter or sort by?
-+ DatabaseFields::Set set = changeset.changes();
-+ bool sortAffected = (set & d->sorter.watchFlags());
-+ bool filterAffected = (set & d->filter.watchFlags()) || (set & d->groupFilter.watchFlags());
-+
-+ if (!sortAffected && !filterAffected)
-+ {
-+ return;
-+ }
-+
-+ // is one of our images affected?
-+ bool imageAffected = false;
-+
-+ foreach(const qlonglong& id, changeset.ids())
-+ {
-+ // if one matching image id is found, trigger a refresh
-+ if (d->imageModel->hasImage(id))
-+ {
-+ imageAffected = true;
-+ break;
-+ }
-+ }
-+
-+ if (!imageAffected)
-+ {
-+ return;
-+ }
-+
-+ if (filterAffected)
-+ {
-+ d->updateFilterTimer->start();
-+ }
-+ else
-+ {
-+ invalidate(); // just resort, reuse filter results
-+ }
-+}
-+
-+// -------------------------------------------------------------------------------------------------------
-+
-+NoDuplicatesImageFilterModel::NoDuplicatesImageFilterModel(QObject* parent)
-+ : ImageSortFilterModel(parent)
-+{
-+}
-+
-+bool NoDuplicatesImageFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
-+{
-+ QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
-+
-+ if (index.data(ImageModel::ExtraDataDuplicateCount).toInt() <= 1)
-+ {
-+ return true;
-+ }
-+
-+ QModelIndex previousIndex = sourceModel()->index(source_row - 1, 0, source_parent);
-+
-+ if (!previousIndex.isValid())
-+ {
-+ return true;
-+ }
-+
-+ if (sourceImageModel()->imageId(mapFromDirectSourceToSourceImageModel(index)) == sourceImageModel()->imageId(mapFromDirectSourceToSourceImageModel(previousIndex)))
-+ {
-+ return false;
-+ }
-+ return true;
-+}
-+
-+/*
-+void NoDuplicatesImageFilterModel::setSourceModel(QAbstractItemModel* model)
-+{
-+ if (sourceModel())
-+ {
-+ }
-+
-+ ImageSortFilterModel::setSourceModel(model);
-+
-+ if (sourceModel())
-+ {
-+ connect(sourceModel(), SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-+ this, SLOT(slotRowsAboutToBeRemoved(QModelIndex,int,int)));
-+ }
-+}
-+
-+void NoDuplicatesImageFilterModel::slotRowsAboutToBeRemoved(const QModelIndex& parent, int begin, int end)
-+{
-+ bool needInvalidate = false;
-+
-+ for (int i = begin; i<=end; ++i)
-+ {
-+ QModelIndex index = sourceModel()->index(i, 0, parent);
-+
-+ // filtered out by us?
-+ if (!mapFromSource(index).isValid())
-+ {
-+ continue;
-+ }
-+
-+ QModelIndex sourceIndex = mapFromDirectSourceToSourceImageModel(index);
-+ qlonglong id = sourceImageModel()->imageId(sourceIndex);
-+
-+ if (sourceImageModel()->numberOfIndexesForImageId(id) > 1)
-+ {
-+ needInvalidate = true;
-+ }
-+ }
-+}*/
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagefiltermodel.h b/libs/database/models/imagefiltermodel.h
-new file mode 100644
-index 0000000..d131b3e
---- /dev/null
-+++ b/libs/database/models/imagefiltermodel.h
-@@ -0,0 +1,299 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-+ * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGEFILTERMODEL_H
-+#define IMAGEFILTERMODEL_H
-+
-+// Local includes
-+
-+#include "dcategorizedsortfilterproxymodel.h"
-+#include "textfilter.h"
-+#include "imagefiltersettings.h"
-+#include "imagemodel.h"
-+#include "imagesortsettings.h"
-+#include "digikam_export.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageChangeset;
-+class ImageFilterModel;
-+class ImageTagChangeset;
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterModelPrepareHook
-+{
-+public:
-+
-+ virtual ~ImageFilterModelPrepareHook() {};
-+ virtual void prepare(const QVector<ImageInfo>& infos) = 0;
-+};
-+
-+// -----------------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT ImageSortFilterModel : public DCategorizedSortFilterProxyModel
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit ImageSortFilterModel(QObject* parent = 0);
-+
-+ void setSourceImageModel(ImageModel* model);
-+ ImageModel* sourceImageModel() const;
-+
-+ void setSourceFilterModel(ImageSortFilterModel* model);
-+ ImageSortFilterModel* sourceFilterModel() const;
-+
-+ QModelIndex mapToSourceImageModel(const QModelIndex& index) const;
-+ QModelIndex mapFromSourceImageModel(const QModelIndex& imagemodel_index) const;
-+ QModelIndex mapFromDirectSourceToSourceImageModel(const QModelIndex& sourceModel_index) const;
-+
-+ /// Convenience methods mapped to ImageModel.
-+ /// Mentioned indexes returned come from the source image model.
-+ QList<QModelIndex> mapListToSource(const QList<QModelIndex>& indexes) const;
-+ QList<QModelIndex> mapListFromSource(const QList<QModelIndex>& sourceIndexes) const;
-+
-+ ImageInfo imageInfo(const QModelIndex& index) const;
-+ qlonglong imageId(const QModelIndex& index) const;
-+ QList<ImageInfo> imageInfos(const QList<QModelIndex>& indexes) const;
-+ QList<qlonglong> imageIds(const QList<QModelIndex>& indexes) const;
-+
-+ QModelIndex indexForPath(const QString& filePath) const;
-+ QModelIndex indexForImageInfo(const ImageInfo& info) const;
-+ QModelIndex indexForImageId(qlonglong id) const;
-+
-+ /** Returns a list of all image infos, sorted according to this model.
-+ * If you do not need a sorted list, use ImageModel's imageInfos() method.
-+ */
-+ QList<ImageInfo> imageInfosSorted() const;
-+
-+ /// Returns this, any chained ImageFilterModel, or 0.
-+ virtual ImageFilterModel* imageFilterModel() const;
-+
-+protected:
-+
-+ /// Reimplement if needed. Called only when model shall be set as (direct) sourceModel.
-+ virtual void setDirectSourceImageModel(ImageModel* model);
-+
-+ // made protected
-+ virtual void setSourceModel(QAbstractItemModel* model);
-+
-+protected:
-+
-+ ImageSortFilterModel* m_chainedModel;
-+};
-+
-+// -----------------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterModel : public ImageSortFilterModel
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ enum ImageFilterModelRoles
-+ {
-+ /// Returns the current categorization mode
-+ CategorizationModeRole = ImageModel::FilterModelRoles + 1,
-+ /// Returns the current sort order
-+ SortOrderRole = ImageModel::FilterModelRoles + 2,
-+ // / Returns the number of items in the index' category
-+ //CategoryCountRole = ImageModel::FilterModelRoles + 3,
-+ /// Returns the id of the PAlbum of the index which is used for category
-+ CategoryAlbumIdRole = ImageModel::FilterModelRoles + 3,
-+ /// Returns the format of the index which is used for category
-+ CategoryFormatRole = ImageModel::FilterModelRoles + 4,
-+ /// Returns true if the given image is a group leader, and the group is opened
-+ GroupIsOpenRole = ImageModel::FilterModelRoles + 5,
-+ ImageFilterModelPointerRole = ImageModel::FilterModelRoles + 50
-+ };
-+
-+public:
-+
-+ explicit ImageFilterModel(QObject* parent = 0);
-+ ~ImageFilterModel();
-+
-+ /** Add a hook to get added images for preparation tasks before they are added in the model */
-+ void addPrepareHook(ImageFilterModelPrepareHook* hook);
-+ void removePrepareHook(ImageFilterModelPrepareHook* hook);
-+
-+ /** Returns a set of DatabaseFields suggested to set as watch flags on the source ImageModel.
-+ * The contained flags will be those that this model can sort or filter by. */
-+ DatabaseFields::Set suggestedWatchFlags() const;
-+
-+ ImageFilterSettings imageFilterSettings() const;
-+ VersionImageFilterSettings versionImageFilterSettings() const;
-+ GroupImageFilterSettings groupImageFilterSettings() const;
-+ ImageSortSettings imageSortSettings() const;
-+
-+ // group is identified by the id of its group leader
-+ bool isGroupOpen(qlonglong group) const;
-+ bool isAllGroupsOpen() const;
-+
-+ /// Enables sending imageInfosAdded and imageInfosAboutToBeRemoved
-+ void setSendImageInfoSignals(bool sendSignals);
-+
-+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-+ virtual ImageFilterModel* imageFilterModel() const;
-+
-+public Q_SLOTS:
-+
-+ /** Changes the current version image filter settings and refilters. */
-+ void setVersionImageFilterSettings(const VersionImageFilterSettings& settings);
-+
-+ /** Changes the current version image filter settings and refilters. */
-+ void setGroupImageFilterSettings(const GroupImageFilterSettings& settings);
-+
-+ /** Adjust the current ImageFilterSettings.
-+ * Equivalent to retrieving the current filter settings, adjusting the parameter
-+ * and calling setImageFilterSettings.
-+ * Provided for convenience.
-+ * It is encouraged to use setImageFilterSettings if you change more than one
-+ * parameter at a time.
-+ */
-+ void setDayFilter(const QList<QDateTime>& days);
-+ void setTagFilter(const QList<int>& includedTags, const QList<int>& excludedTags,
-+ ImageFilterSettings::MatchingCondition matchingCond, bool showUnTagged,
-+ const QList<int>& clTagIds, const QList<int>& plTagIds);
-+ void setRatingFilter(int rating, ImageFilterSettings::RatingCondition ratingCond, bool isUnratedExcluded);
-+ void setMimeTypeFilter(int mimeTypeFilter);
-+ void setGeolocationFilter(const ImageFilterSettings::GeolocationCondition& condition);
-+ void setTextFilter(const SearchTextFilterSettings& settings);
-+
-+ void setCategorizationMode(ImageSortSettings::CategorizationMode mode);
-+ void setCategorizationSortOrder(ImageSortSettings::SortOrder order);
-+ void setSortRole(ImageSortSettings::SortRole role);
-+ void setSortOrder(ImageSortSettings::SortOrder order);
-+ void setStringTypeNatural(bool natural);
-+ void setUrlWhitelist(const QList<QUrl> urlList, const QString& id);
-+ void setIdWhitelist(const QList<qlonglong>& idList, const QString& id);
-+
-+ void setVersionManagerSettings(const VersionManagerSettings& settings);
-+ void setExceptionList(const QList<qlonglong>& idlist, const QString& id);
-+
-+ void setGroupOpen(qlonglong group, bool open);
-+ void toggleGroupOpen(qlonglong group);
-+ void setAllGroupsOpen(bool open);
-+
-+ /** Changes the current image filter settings and refilters. */
-+ virtual void setImageFilterSettings(const ImageFilterSettings& settings);
-+
-+ /** Changes the current image sort settings and resorts. */
-+ virtual void setImageSortSettings(const ImageSortSettings& settings);
-+
-+Q_SIGNALS:
-+
-+ /// Signals that the set filter matches at least one index
-+ void filterMatches(bool matches);
-+
-+ /** Signals that the set text filter matches at least one entry.
-+ If no text filter is set, this signal is emitted
-+ with 'false' when filterMatches() is emitted.
-+ */
-+ void filterMatchesForText(bool matchesByText);
-+
-+ /** Emitted when the filter settings have been changed
-+ (the model may not yet have been updated)
-+ */
-+ void filterSettingsChanged(const ImageFilterSettings& settings);
-+
-+ /** These signals need to be explicitly enabled with setSendImageInfoSignals()
-+ */
-+ void imageInfosAdded(const QList<ImageInfo>& infos);
-+ void imageInfosAboutToBeRemoved(const QList<ImageInfo>& infos);
-+
-+public:
-+
-+ // Declared as public because of use in sub-classes.
-+ class ImageFilterModelPrivate;
-+
-+protected:
-+
-+ ImageFilterModelPrivate* const d_ptr;
-+
-+protected:
-+
-+ ImageFilterModel(ImageFilterModelPrivate& dd, QObject* parent);
-+
-+ virtual void setDirectSourceImageModel(ImageModel* model);
-+
-+ virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
-+
-+ virtual int compareCategories(const QModelIndex& left, const QModelIndex& right) const;
-+ virtual bool subSortLessThan(const QModelIndex& left, const QModelIndex& right) const;
-+ //virtual int categoryCount(const ImageInfo& info) const;
-+
-+ /** Reimplement to customize category sorting,
-+ * Return negative if category of left < category right,
-+ * Return 0 if left and right are in the same category, else return positive.
-+ */
-+ virtual int compareInfosCategories(const ImageInfo& left, const ImageInfo& right) const;
-+
-+ /** Reimplement to customize sorting. Do not take categories into account here.
-+ */
-+ virtual bool infosLessThan(const ImageInfo& left, const ImageInfo& right) const;
-+
-+ /** Returns a unique identifier for the category if info. The string need not be for user display.
-+ */
-+ virtual QString categoryIdentifier(const ImageInfo& info) const;
-+
-+protected Q_SLOTS:
-+
-+ void slotModelReset();
-+ void slotUpdateFilter();
-+
-+ void slotImageTagChange(const ImageTagChangeset& changeset);
-+ void slotImageChange(const ImageChangeset& changeset);
-+
-+ void slotRowsInserted(const QModelIndex& parent, int start, int end);
-+ void slotRowsAboutToBeRemoved(const QModelIndex& parent, int start, int end);
-+
-+private:
-+
-+ Q_DECLARE_PRIVATE(ImageFilterModel)
-+};
-+
-+// -----------------------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT NoDuplicatesImageFilterModel : public ImageSortFilterModel
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit NoDuplicatesImageFilterModel(QObject* parent = 0);
-+
-+protected:
-+
-+ virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
-+};
-+
-+} // namespace Digikam
-+
-+Q_DECLARE_METATYPE(Digikam::ImageFilterModel*)
-+
-+#endif // IMAGEMODEL_H
-diff --git a/libs/database/models/imagefiltermodelpriv.cpp b/libs/database/models/imagefiltermodelpriv.cpp
-new file mode 100644
-index 0000000..07d9e79
---- /dev/null
-+++ b/libs/database/models/imagefiltermodelpriv.cpp
-@@ -0,0 +1,258 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-+ * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagefiltermodelpriv.h"
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "imagefiltermodelthreads.h"
-+
-+namespace Digikam
-+{
-+
-+ImageFilterModel::ImageFilterModelPrivate::ImageFilterModelPrivate()
-+{
-+ imageModel = 0;
-+ version = 0;
-+ lastDiscardVersion = 0;
-+ sentOut = 0;
-+ sentOutForReAdd = 0;
-+ updateFilterTimer = 0;
-+ needPrepare = false;
-+ needPrepareComments = false;
-+ needPrepareTags = false;
-+ needPrepareGroups = false;
-+ preparer = 0;
-+ filterer = 0;
-+ hasOneMatch = false;
-+ hasOneMatchForText = false;
-+
-+ setupWorkers();
-+}
-+
-+ImageFilterModel::ImageFilterModelPrivate::~ImageFilterModelPrivate()
-+{
-+ // facilitate thread stopping
-+ ++version;
-+ preparer->deactivate();
-+ filterer->deactivate();
-+ delete preparer;
-+ delete filterer;
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::init(ImageFilterModel* _q)
-+{
-+ q = _q;
-+
-+ updateFilterTimer = new QTimer(this);
-+ updateFilterTimer->setSingleShot(true);
-+ updateFilterTimer->setInterval(250);
-+
-+ connect(updateFilterTimer, SIGNAL(timeout()),
-+ q, SLOT(slotUpdateFilter()));
-+
-+ // inter-thread redirection
-+ qRegisterMetaType<ImageFilterModelTodoPackage>("ImageFilterModelTodoPackage");
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::preprocessInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ infosToProcess(infos, extraValues, true);
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::processAddedInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ // These have already been added, we just process them afterwards
-+ infosToProcess(infos, extraValues, false);
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::setupWorkers()
-+{
-+ preparer = new ImageFilterModelPreparer(this);
-+ filterer = new ImageFilterModelFilterer(this);
-+
-+ // A package in constructed in infosToProcess.
-+ // Normal flow is infosToProcess -> preparer::process -> filterer::process -> packageFinished.
-+ // If no preparation is needed, the first step is skipped.
-+ // If filter version changes, both will discard old package and send them to packageDiscarded.
-+
-+ connect(this, SIGNAL(packageToPrepare(ImageFilterModelTodoPackage)),
-+ preparer, SLOT(process(ImageFilterModelTodoPackage)));
-+
-+ connect(this, SIGNAL(packageToFilter(ImageFilterModelTodoPackage)),
-+ filterer, SLOT(process(ImageFilterModelTodoPackage)));
-+
-+ connect(preparer, SIGNAL(processed(ImageFilterModelTodoPackage)),
-+ filterer, SLOT(process(ImageFilterModelTodoPackage)));
-+
-+ connect(filterer, SIGNAL(processed(ImageFilterModelTodoPackage)),
-+ this, SLOT(packageFinished(ImageFilterModelTodoPackage)));
-+
-+ connect(preparer, SIGNAL(discarded(ImageFilterModelTodoPackage)),
-+ this, SLOT(packageDiscarded(ImageFilterModelTodoPackage)));
-+
-+ connect(filterer, SIGNAL(discarded(ImageFilterModelTodoPackage)),
-+ this, SLOT(packageDiscarded(ImageFilterModelTodoPackage)));
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::infosToProcess(const QList<ImageInfo>& infos)
-+{
-+ infosToProcess(infos, QList<QVariant>(), false);
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::infosToProcess(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues, bool forReAdd)
-+{
-+ if (infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ filterer->schedule();
-+
-+ if (needPrepare)
-+ {
-+ preparer->schedule();
-+ }
-+
-+ Q_ASSERT(extraValues.isEmpty() || infos.size() == extraValues.size());
-+
-+ // prepare and filter in chunks
-+ const int size = infos.size();
-+ const int maxChunkSize = needPrepare ? PrepareChunkSize : FilterChunkSize;
-+ const bool hasExtraValues = !extraValues.isEmpty();
-+ QList<ImageInfo>::const_iterator it = infos.constBegin(), end;
-+ QList<QVariant>::const_iterator xit = extraValues.constBegin(), xend;
-+ int index = 0;
-+ QVector<ImageInfo> infoVector;
-+ QVector<QVariant> extraValueVector;
-+
-+ while (it != infos.constEnd())
-+ {
-+ const int chunkSize = qMin(maxChunkSize, size - index);
-+ infoVector.resize(chunkSize);
-+ end = it + chunkSize;
-+ qCopy(it, end, infoVector.begin());
-+
-+ if (hasExtraValues)
-+ {
-+ extraValueVector.resize(chunkSize);
-+ xend = xit + chunkSize;
-+ qCopy(xit, xend, extraValueVector.begin());
-+ xit = xend;
-+ }
-+
-+ it = end;
-+ index += chunkSize;
-+
-+ ++sentOut;
-+
-+ if (forReAdd)
-+ {
-+ ++sentOutForReAdd;
-+ }
-+
-+ if (needPrepare)
-+ {
-+ emit packageToPrepare(ImageFilterModelTodoPackage(infoVector, extraValueVector, version, forReAdd));
-+ }
-+ else
-+ {
-+ emit packageToFilter(ImageFilterModelTodoPackage(infoVector, extraValueVector, version, forReAdd));
-+ }
-+ }
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::packageFinished(const ImageFilterModelTodoPackage& package)
-+{
-+ // check if it got discarded on the journey
-+ if (package.version != version)
-+ {
-+ packageDiscarded(package);
-+ return;
-+ }
-+
-+ // incorporate result
-+ QHash<qlonglong, bool>::const_iterator it = package.filterResults.constBegin();
-+
-+ for (; it != package.filterResults.constEnd(); ++it)
-+ {
-+ filterResults.insert(it.key(), it.value());
-+ }
-+
-+ // re-add if necessary
-+ if (package.isForReAdd)
-+ {
-+ emit reAddImageInfos(package.infos.toList(), package.extraValues.toList());
-+
-+ if (sentOutForReAdd == 1) // last package
-+ {
-+ emit reAddingFinished();
-+ }
-+ }
-+
-+ // decrement counters
-+ --sentOut;
-+
-+ if (package.isForReAdd)
-+ {
-+ --sentOutForReAdd;
-+ }
-+
-+ // If all packages have returned, filtered and readded, and no more are expected,
-+ // and there is need to tell the filter result to the view, do that
-+ if (sentOut == 0 && sentOutForReAdd == 0 && !imageModel->isRefreshing())
-+ {
-+ q->invalidate(); // use invalidate, not invalidateFilter only. Sorting may have changed as well.
-+ emit (q->filterMatches(hasOneMatch));
-+ emit (q->filterMatchesForText(hasOneMatchForText));
-+ filterer->deactivate();
-+ preparer->deactivate();
-+ }
-+}
-+
-+void ImageFilterModel::ImageFilterModelPrivate::packageDiscarded(const ImageFilterModelTodoPackage& package)
-+{
-+ // Either, the model was reset, or the filter changed
-+ // In the former case throw all away, in the latter case, recycle
-+ if (package.version > lastDiscardVersion)
-+ {
-+ // Recycle packages: Send again with current version
-+ // Do not increment sentOut or sentOutForReAdd here: it was not decremented!
-+
-+ if (needPrepare)
-+ {
-+ emit packageToPrepare(ImageFilterModelTodoPackage(package.infos, package.extraValues, version, package.isForReAdd));
-+ }
-+ else
-+ {
-+ emit packageToFilter(ImageFilterModelTodoPackage(package.infos, package.extraValues, version, package.isForReAdd));
-+ }
-+ }
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagefiltermodelpriv.h b/libs/database/models/imagefiltermodelpriv.h
-new file mode 100644
-index 0000000..a9e3f22
---- /dev/null
-+++ b/libs/database/models/imagefiltermodelpriv.h
-@@ -0,0 +1,159 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-11
-+ * Description : Qt item model for database entries - private shared header
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGEFILTERMODELPRIV_H
-+#define IMAGEFILTERMODELPRIV_H
-+
-+// Qt includes
-+
-+#include <QHash>
-+#include <QMutex>
-+#include <QMutexLocker>
-+#include <QSet>
-+#include <QThread>
-+#include <QTimer>
-+#include <QWaitCondition>
-+
-+// Local includes
-+
-+#include "imageinfo.h"
-+#include "imagefiltermodel.h"
-+
-+#include "digikam_export.h"
-+// Yes, we need the EXPORT macro in a private header because
-+// this private header is shared across binary objects.
-+// This does NOT make this classes here any more public!
-+
-+namespace Digikam
-+{
-+
-+const int PrepareChunkSize = 101;
-+const int FilterChunkSize = 2001;
-+
-+class ImageFilterModelTodoPackage
-+{
-+public:
-+
-+ ImageFilterModelTodoPackage()
-+ : version(0), isForReAdd(false)
-+ {
-+ }
-+
-+ ImageFilterModelTodoPackage(const QVector<ImageInfo>& infos, const QVector<QVariant>& extraValues, int version, bool isForReAdd)
-+ : infos(infos), extraValues(extraValues), version(version), isForReAdd(isForReAdd)
-+ {
-+ }
-+
-+ QVector<ImageInfo> infos;
-+ QVector<QVariant> extraValues;
-+ unsigned int version;
-+ bool isForReAdd;
-+ QHash<qlonglong, bool> filterResults;
-+};
-+
-+// ------------------------------------------------------------------------------------------------
-+
-+class ImageFilterModelPreparer;
-+class ImageFilterModelFilterer;
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterModel::ImageFilterModelPrivate : public QObject
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ ImageFilterModelPrivate();
-+ ~ImageFilterModelPrivate();
-+
-+ void init(ImageFilterModel* q);
-+ void setupWorkers();
-+ void infosToProcess(const QList<ImageInfo>& infos);
-+ void infosToProcess(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues, bool forReAdd = true);
-+
-+public:
-+
-+ ImageFilterModel* q;
-+
-+ ImageModel* imageModel;
-+
-+ ImageFilterSettings filter;
-+ ImageSortSettings sorter;
-+ VersionImageFilterSettings versionFilter;
-+ GroupImageFilterSettings groupFilter;
-+
-+ volatile unsigned int version;
-+ unsigned int lastDiscardVersion;
-+ unsigned int lastFilteredVersion;
-+ int sentOut;
-+ int sentOutForReAdd;
-+
-+ QTimer* updateFilterTimer;
-+
-+ bool needPrepare;
-+ bool needPrepareComments;
-+ bool needPrepareTags;
-+ bool needPrepareGroups;
-+
-+ QMutex mutex;
-+ ImageFilterSettings filterCopy;
-+ VersionImageFilterSettings versionFilterCopy;
-+ GroupImageFilterSettings groupFilterCopy;
-+ ImageFilterModelPreparer* preparer;
-+ ImageFilterModelFilterer* filterer;
-+
-+ QHash<qlonglong, bool> filterResults;
-+ bool hasOneMatch;
-+ bool hasOneMatchForText;
-+
-+ QList<ImageFilterModelPrepareHook*> prepareHooks;
-+
-+/*
-+ QHash<int, QSet<qlonglong> > categoryCountHashInt;
-+ QHash<QString, QSet<qlonglong> > categoryCountHashString;
-+
-+public:
-+
-+ void cacheCategoryCount(int id, qlonglong imageid) const
-+ { const_cast<ImageFilterModelPrivate*>(this)->categoryCountHashInt[id].insert(imageid); }
-+ void cacheCategoryCount(const QString& id, qlonglong imageid) const
-+ { const_cast<ImageFilterModelPrivate*>(this)->categoryCountHashString[id].insert(imageid); }
-+*/
-+
-+public Q_SLOTS:
-+
-+ void preprocessInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void processAddedInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void packageFinished(const ImageFilterModelTodoPackage& package);
-+ void packageDiscarded(const ImageFilterModelTodoPackage& package);
-+
-+Q_SIGNALS:
-+
-+ void packageToPrepare(const ImageFilterModelTodoPackage& package);
-+ void packageToFilter(const ImageFilterModelTodoPackage& package);
-+ void reAddImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void reAddingFinished();
-+};
-+
-+} // namespace Digikam
-+
-+#endif // IMAGEFILTERMODELPRIV_H
-diff --git a/libs/database/models/imagefiltermodelthreads.cpp b/libs/database/models/imagefiltermodelthreads.cpp
-new file mode 100644
-index 0000000..aa5c462
---- /dev/null
-+++ b/libs/database/models/imagefiltermodelthreads.cpp
-@@ -0,0 +1,40 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-+ * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagefiltermodel.h"
-+#include "imagefiltermodelpriv.h"
-+#include "imagefiltermodelthreads.h"
-+
-+namespace Digikam
-+{
-+
-+ImageFilterModelWorker::ImageFilterModelWorker(ImageFilterModel::ImageFilterModelPrivate* const d)
-+ : d(d)
-+{
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagefiltermodelthreads.h b/libs/database/models/imagefiltermodelthreads.h
-new file mode 100644
-index 0000000..83fa987
---- /dev/null
-+++ b/libs/database/models/imagefiltermodelthreads.h
-@@ -0,0 +1,100 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-11
-+ * Description : Qt item model for database entries - private header
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGEFILTERMODELTHREADS_H
-+#define IMAGEFILTERMODELTHREADS_H
-+
-+// Qt includes
-+
-+#include <QThread>
-+
-+// Local includes
-+
-+#include "digikam_export.h"
-+#include "workerobject.h"
-+
-+namespace Digikam
-+{
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterModelWorker : public WorkerObject
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit ImageFilterModelWorker(ImageFilterModel::ImageFilterModelPrivate* const d);
-+
-+ bool checkVersion(const ImageFilterModelTodoPackage& package)
-+ {
-+ return d->version == package.version;
-+ }
-+
-+public Q_SLOTS:
-+
-+ virtual void process(ImageFilterModelTodoPackage package) = 0;
-+
-+Q_SIGNALS:
-+
-+ void processed(const ImageFilterModelTodoPackage& package);
-+ void discarded(const ImageFilterModelTodoPackage& package);
-+
-+protected:
-+
-+ ImageFilterModel::ImageFilterModelPrivate* d;
-+};
-+
-+// -----------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterModelPreparer : public ImageFilterModelWorker
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit ImageFilterModelPreparer(ImageFilterModel::ImageFilterModelPrivate* const d)
-+ : ImageFilterModelWorker(d)
-+ {
-+ }
-+
-+ void process(ImageFilterModelTodoPackage package);
-+};
-+
-+// ----------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterModelFilterer : public ImageFilterModelWorker
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit ImageFilterModelFilterer(ImageFilterModel::ImageFilterModelPrivate* const d)
-+ : ImageFilterModelWorker(d)
-+ {
-+ }
-+
-+ void process(ImageFilterModelTodoPackage package);
-+};
-+
-+} // namespace Digikam
-+
-+#endif // IMAGEFILTERMODELTHREADS_H
-diff --git a/libs/database/models/imagefiltersettings.cpp b/libs/database/models/imagefiltersettings.cpp
-new file mode 100644
-index 0000000..b61e7f9
---- /dev/null
-+++ b/libs/database/models/imagefiltersettings.cpp
-@@ -0,0 +1,952 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Filter values for use with ImageFilterModel
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-+ * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagefiltersettings.h"
-+
-+// C++ includes
-+
-+#include <cmath>
-+
-+// Qt includes
-+
-+#include <QDateTime>
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "coredbfields.h"
-+#include "digikam_globals.h"
-+#include "imageinfo.h"
-+#include "tagscache.h"
-+#include "versionmanagersettings.h"
-+
-+namespace Digikam
-+{
-+
-+ImageFilterSettings::ImageFilterSettings()
-+{
-+ m_untaggedFilter = false;
-+ m_isUnratedExcluded = false;
-+ m_ratingFilter = 0;
-+ m_mimeTypeFilter = MimeFilter::AllFiles;
-+ m_ratingCond = GreaterEqualCondition;
-+ m_matchingCond = OrCondition;
-+ m_geolocationCondition = GeolocationNoFilter;
-+}
-+
-+DatabaseFields::Set ImageFilterSettings::watchFlags() const
-+{
-+ DatabaseFields::Set set;
-+
-+ if (isFilteringByDay())
-+ {
-+ set |= DatabaseFields::CreationDate;
-+ }
-+
-+ if (isFilteringByText())
-+ {
-+ set |= DatabaseFields::Name;
-+ set |= DatabaseFields::Comment;
-+ }
-+
-+ if (isFilteringByRating())
-+ {
-+ set |= DatabaseFields::Rating;
-+ }
-+
-+ if (isFilteringByTypeMime())
-+ {
-+ set |= DatabaseFields::Category;
-+ set |= DatabaseFields::Format;
-+ }
-+
-+ if (isFilteringByGeolocation())
-+ {
-+ set |= DatabaseFields::ImagePositionsAll;
-+ }
-+
-+ if (isFilteringByColorLabels())
-+ {
-+ set |= DatabaseFields::ColorLabel;
-+ }
-+
-+ if (isFilteringByPickLabels())
-+ {
-+ set |= DatabaseFields::PickLabel;
-+ }
-+
-+ return set;
-+}
-+
-+bool ImageFilterSettings::isFilteringByDay() const
-+{
-+ if (!m_dayFilter.isEmpty())
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringByTags() const
-+{
-+ if (!m_includeTagFilter.isEmpty() || !m_excludeTagFilter.isEmpty() || m_untaggedFilter)
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringByColorLabels() const
-+{
-+ if (!m_colorLabelTagFilter.isEmpty())
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringByPickLabels() const
-+{
-+ if (!m_pickLabelTagFilter.isEmpty())
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringByText() const
-+{
-+ if (!m_textFilterSettings.text.isEmpty())
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringByTypeMime() const
-+{
-+ if (m_mimeTypeFilter != MimeFilter::AllFiles)
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringByGeolocation() const
-+{
-+ return (m_geolocationCondition != GeolocationNoFilter);
-+}
-+
-+bool ImageFilterSettings::isFilteringByRating() const
-+{
-+ if (m_ratingFilter != 0 || m_ratingCond != GreaterEqualCondition || m_isUnratedExcluded)
-+ {
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool ImageFilterSettings::isFilteringInternally() const
-+{
-+ return (isFiltering() || !m_urlWhitelists.isEmpty() || !m_idWhitelists.isEmpty());
-+}
-+
-+bool ImageFilterSettings::isFiltering() const
-+{
-+ return isFilteringByDay() ||
-+ isFilteringByTags() ||
-+ isFilteringByText() ||
-+ isFilteringByRating() ||
-+ isFilteringByTypeMime() ||
-+ isFilteringByColorLabels() ||
-+ isFilteringByPickLabels() ||
-+ isFilteringByGeolocation();
-+}
-+
-+void ImageFilterSettings::setDayFilter(const QList<QDateTime>& days)
-+{
-+ m_dayFilter.clear();
-+
-+ for (QList<QDateTime>::const_iterator it = days.constBegin(); it != days.constEnd(); ++it)
-+ {
-+ m_dayFilter.insert(*it, true);
-+ }
-+}
-+
-+void ImageFilterSettings::setTagFilter(const QList<int>& includedTags,
-+ const QList<int>& excludedTags,
-+ MatchingCondition matchingCondition,
-+ bool showUnTagged,
-+ const QList<int>& clTagIds,
-+ const QList<int>& plTagIds)
-+{
-+ m_includeTagFilter = includedTags;
-+ m_excludeTagFilter = excludedTags;
-+ m_matchingCond = matchingCondition;
-+ m_untaggedFilter = showUnTagged;
-+ m_colorLabelTagFilter = clTagIds;
-+ m_pickLabelTagFilter = plTagIds;
-+}
-+
-+void ImageFilterSettings::setRatingFilter(int rating, RatingCondition ratingCondition, bool isUnratedExcluded)
-+{
-+ m_ratingFilter = rating;
-+ m_ratingCond = ratingCondition;
-+ m_isUnratedExcluded = isUnratedExcluded;
-+}
-+
-+void ImageFilterSettings::setMimeTypeFilter(int mime)
-+{
-+ m_mimeTypeFilter = (MimeFilter::TypeMimeFilter)mime;
-+}
-+
-+void ImageFilterSettings::setGeolocationFilter(const GeolocationCondition& condition)
-+{
-+ m_geolocationCondition = condition;
-+}
-+
-+void ImageFilterSettings::setTextFilter(const SearchTextFilterSettings& settings)
-+{
-+ m_textFilterSettings = settings;
-+}
-+
-+void ImageFilterSettings::setTagNames(const QHash<int, QString>& hash)
-+{
-+ m_tagNameHash = hash;
-+}
-+
-+void ImageFilterSettings::setAlbumNames(const QHash<int, QString>& hash)
-+{
-+ m_albumNameHash = hash;
-+}
-+
-+void ImageFilterSettings::setUrlWhitelist(const QList<QUrl>& urlList, const QString& id)
-+{
-+ if (urlList.isEmpty())
-+ {
-+ m_urlWhitelists.remove(id);
-+ }
-+ else
-+ {
-+ m_urlWhitelists.insert(id, urlList);
-+ }
-+}
-+
-+void ImageFilterSettings::setIdWhitelist(const QList<qlonglong>& idList, const QString& id)
-+{
-+ if (idList.isEmpty())
-+ {
-+ m_idWhitelists.remove(id);
-+ }
-+ else
-+ {
-+ m_idWhitelists.insert(id, idList);
-+ }
-+}
-+
-+template <class ContainerA, class ContainerB>
-+bool containsAnyOf(const ContainerA& listA, const ContainerB& listB)
-+{
-+ foreach (const typename ContainerA::value_type& a, listA)
-+ {
-+ if (listB.contains(a))
-+ {
-+ return true;
-+ }
-+ }
-+ return false;
-+}
-+
-+template <class ContainerA, typename Value, class ContainerB>
-+bool containsNoneOfExcept(const ContainerA& list, const ContainerB& noneOfList, const Value& exception)
-+{
-+ foreach (const typename ContainerB::value_type& n, noneOfList)
-+ {
-+ if (n != exception && list.contains(n))
-+ {
-+ return false;
-+ }
-+ }
-+ return true;
-+}
-+
-+bool ImageFilterSettings::matches(const ImageInfo& info, bool* const foundText) const
-+{
-+ if (foundText)
-+ {
-+ *foundText = false;
-+ }
-+
-+ if (!isFilteringInternally())
-+ {
-+ return true;
-+ }
-+
-+ bool match = false;
-+
-+ if (!m_includeTagFilter.isEmpty() || !m_excludeTagFilter.isEmpty())
-+ {
-+ QList<int> tagIds = info.tagIds();
-+ QList<int>::const_iterator it;
-+
-+ match = m_includeTagFilter.isEmpty();
-+
-+ if (m_matchingCond == OrCondition)
-+ {
-+ for (it = m_includeTagFilter.begin(); it != m_includeTagFilter.end(); ++it)
-+ {
-+ if (tagIds.contains(*it))
-+ {
-+ match = true;
-+ break;
-+ }
-+ }
-+
-+ match |= (m_untaggedFilter && tagIds.isEmpty());
-+ }
-+ else // AND matching condition...
-+ {
-+ // m_untaggedFilter and non-empty tag filter, combined with AND, is logically no match
-+ if (!m_untaggedFilter)
-+ {
-+ for (it = m_includeTagFilter.begin(); it != m_includeTagFilter.end(); ++it)
-+ {
-+ if (!tagIds.contains(*it))
-+ {
-+ break;
-+ }
-+ }
-+
-+ if (it == m_includeTagFilter.end())
-+ {
-+ match = true;
-+ }
-+ }
-+ }
-+
-+ for (it = m_excludeTagFilter.begin(); it != m_excludeTagFilter.end(); ++it)
-+ {
-+ if (tagIds.contains(*it))
-+ {
-+ match = false;
-+ break;
-+ }
-+ }
-+ }
-+ else if (m_untaggedFilter)
-+ {
-+ match = !TagsCache::instance()->containsPublicTags(info.tagIds());
-+ }
-+ else
-+ {
-+ match = true;
-+ }
-+
-+ //-- Filter by pick labels ------------------------------------------------
-+
-+ if (!m_pickLabelTagFilter.isEmpty())
-+ {
-+ QList<int> tagIds = info.tagIds();
-+ bool matchPL = false;
-+
-+ if (containsAnyOf(m_pickLabelTagFilter, tagIds))
-+ {
-+ matchPL = true;
-+ }
-+ else if (!matchPL)
-+ {
-+ int noPickLabelTagId = TagsCache::instance()->tagForPickLabel(NoPickLabel);
-+
-+ if (m_pickLabelTagFilter.contains(noPickLabelTagId))
-+ {
-+ // Searching for "has no ColorLabel" requires special handling:
-+ // Scan that the tag ids contains none of the ColorLabel tags, except maybe the NoColorLabel tag
-+ matchPL = containsNoneOfExcept(tagIds, TagsCache::instance()->pickLabelTags(), noPickLabelTagId);
-+ }
-+ }
-+
-+ match &= matchPL;
-+ }
-+
-+ //-- Filter by color labels ------------------------------------------------
-+
-+ if (!m_colorLabelTagFilter.isEmpty())
-+ {
-+ QList<int> tagIds = info.tagIds();
-+ bool matchCL = false;
-+
-+ if (containsAnyOf(m_colorLabelTagFilter, tagIds))
-+ {
-+ matchCL = true;
-+ }
-+ else if (!matchCL)
-+ {
-+ int noColorLabelTagId = TagsCache::instance()->tagForColorLabel(NoColorLabel);
-+
-+ if (m_colorLabelTagFilter.contains(noColorLabelTagId))
-+ {
-+ // Searching for "has no ColorLabel" requires special handling:
-+ // Scan that the tag ids contains none of the ColorLabel tags, except maybe the NoColorLabel tag
-+ matchCL = containsNoneOfExcept(tagIds, TagsCache::instance()->colorLabelTags(), noColorLabelTagId);
-+ }
-+ }
-+
-+ match &= matchCL;
-+ }
-+
-+ //-- Filter by date -----------------------------------------------------------
-+
-+ if (!m_dayFilter.isEmpty())
-+ {
-+ match &= m_dayFilter.contains(QDateTime(info.dateTime().date(), QTime()));
-+ }
-+
-+ //-- Filter by rating ---------------------------------------------------------
-+
-+ if (m_ratingFilter >= 0)
-+ {
-+ // for now we treat -1 (no rating) just like a rating of 0.
-+ int rating = info.rating();
-+
-+ if (rating == -1)
-+ {
-+ rating = 0;
-+ }
-+
-+ if(m_isUnratedExcluded && rating == 0)
-+ {
-+ match = false;
-+ }
-+ else
-+ {
-+ if (m_ratingCond == GreaterEqualCondition)
-+ {
-+ // If the rating is not >=, i.e it is <, then it does not match.
-+ if (rating < m_ratingFilter)
-+ {
-+ match = false;
-+ }
-+ }
-+ else if (m_ratingCond == EqualCondition)
-+ {
-+ // If the rating is not =, i.e it is !=, then it does not match.
-+ if (rating != m_ratingFilter)
-+ {
-+ match = false;
-+ }
-+ }
-+ else
-+ {
-+ // If the rating is not <=, i.e it is >, then it does not match.
-+ if (rating > m_ratingFilter)
-+ {
-+ match = false;
-+ }
-+ }
-+ }
-+ }
-+
-+ // -- Filter by mime type -----------------------------------------------------
-+
-+ switch (m_mimeTypeFilter)
-+ {
-+ // info.format is a standardized string: Only one possibility per mime type
-+ case MimeFilter::ImageFiles:
-+ {
-+ if (info.category() != DatabaseItem::Image)
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::JPGFiles:
-+ {
-+ if (info.format() != QLatin1String("JPG"))
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::PNGFiles:
-+ {
-+ if (info.format() != QLatin1String("PNG"))
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::TIFFiles:
-+ {
-+ if (info.format() != QLatin1String("TIFF"))
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::DNGFiles:
-+ {
-+ if (info.format() != QLatin1String("RAW-DNG"))
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::NoRAWFiles:
-+ {
-+ if (info.format().startsWith(QLatin1String("RAW")))
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::RAWFiles:
-+ {
-+ if (!info.format().startsWith(QLatin1String("RAW")))
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::MoviesFiles:
-+ {
-+ if (info.category() != DatabaseItem::Video)
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::AudioFiles:
-+ {
-+ if (info.category() != DatabaseItem::Audio)
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ case MimeFilter::RasterFiles:
-+ {
-+ if (info.format() != QLatin1String("PSD") && // Adobe Photoshop Document
-+ info.format() != QLatin1String("PSB") && // Adobe Photoshop Big
-+ info.format() != QLatin1String("XCF") && // Gimp
-+ info.format() != QLatin1String("KRA") && // Krita
-+ info.format() != QLatin1String("ORA") // Open Raster
-+ )
-+ {
-+ match = false;
-+ }
-+
-+ break;
-+ }
-+ default:
-+ {
-+ // All Files: do nothing...
-+ break;
-+ }
-+ }
-+
-+ //-- Filter by geolocation ----------------------------------------------------
-+
-+ if (m_geolocationCondition!=GeolocationNoFilter)
-+ {
-+ if (m_geolocationCondition==GeolocationNoCoordinates)
-+ {
-+ if (info.hasCoordinates())
-+ {
-+ match = false;
-+ }
-+ }
-+ else if (m_geolocationCondition==GeolocationHasCoordinates)
-+ {
-+ if (!info.hasCoordinates())
-+ {
-+ match = false;
-+ }
-+ }
-+ }
-+
-+ //-- Filter by text -----------------------------------------------------------
-+
-+ if (!m_textFilterSettings.text.isEmpty())
-+ {
-+ bool textMatch = false;
-+
-+ // Image name
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageName &&
-+ info.name().contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-+ {
-+ textMatch = true;
-+ }
-+
-+ // Image title
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageTitle &&
-+ info.title().contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-+ {
-+ textMatch = true;
-+ }
-+
-+ // Image comment
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageComment &&
-+ info.comment().contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-+ {
-+ textMatch = true;
-+ }
-+
-+ // Tag names
-+ foreach(int id, info.tagIds())
-+ {
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::TagName &&
-+ m_tagNameHash.value(id).contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-+ {
-+ textMatch = true;
-+ }
-+ }
-+
-+ // Album names
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::AlbumName &&
-+ m_albumNameHash.value(info.albumId()).contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-+ {
-+ textMatch = true;
-+ }
-+
-+ // Image Aspect Ratio
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageAspectRatio)
-+ {
-+ QRegExp expRatio (QLatin1String("^\\d+:\\d+$"));
-+ QRegExp expFloat (QLatin1String("^\\d+(.\\d+)?$"));
-+
-+ if (expRatio.indexIn(m_textFilterSettings.text) > -1 && m_textFilterSettings.text.contains(QRegExp(QLatin1String(":\\d+"))))
-+ {
-+ QString trimmedTextFilterSettingsText = m_textFilterSettings.text;
-+ QStringList numberStringList = trimmedTextFilterSettingsText.split(QLatin1String(":"), QString::SkipEmptyParts);
-+
-+ if (numberStringList.length() == 2)
-+ {
-+ QString numString = (QString)numberStringList.at(0), denomString = (QString)numberStringList.at(1);
-+ bool canConverseNum = false;
-+ bool canConverseDenom = false;
-+ int num = numString.toInt(&canConverseNum, 10), denom = denomString.toInt(&canConverseDenom, 10);
-+
-+ if (canConverseNum && canConverseDenom)
-+ {
-+ if (fabs(info.aspectRatio() - (double)num / denom) < 0.1)
-+ textMatch = true;
-+ }
-+ }
-+ }
-+ else if (expFloat.indexIn(m_textFilterSettings.text) > -1)
-+ {
-+ QString trimmedTextFilterSettingsText = m_textFilterSettings.text;
-+ bool canConverse = false;
-+ double ratio = trimmedTextFilterSettingsText.toDouble(&canConverse);
-+
-+ if (canConverse)
-+ {
-+ if (fabs(info.aspectRatio() - ratio) < 0.1)
-+ textMatch = true;
-+ }
-+ }
-+ }
-+
-+ // Image Pixel Size
-+ // See bug #341053 for details.
-+
-+ if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImagePixelSize)
-+ {
-+ QSize size = info.dimensions();
-+ int pixelSize = size.height()*size.width();
-+ QString text = m_textFilterSettings.text;
-+
-+ if(text.contains(QRegExp(QLatin1String("^>\\d{1,15}$"))) && pixelSize > (text.remove(0,1)).toInt())
-+ {
-+ textMatch = true;
-+ }
-+ else if(text.contains(QRegExp(QLatin1String("^<\\d{1,15}$"))) && pixelSize < (text.remove(0,1)).toInt())
-+ {
-+ textMatch = true;
-+ }
-+ else if(text.contains(QRegExp(QLatin1String("^\\d+$"))) && pixelSize == text.toInt())
-+ {
-+ textMatch = true;
-+ }
-+ }
-+
-+ match &= textMatch;
-+
-+ if (foundText)
-+ {
-+ *foundText = textMatch;
-+ }
-+ }
-+
-+ // -- filter by URL-whitelists ------------------------------------------------
-+ // NOTE: whitelists are always AND for now.
-+
-+ if (match)
-+ {
-+ const QUrl url = info.fileUrl();
-+
-+ for (QHash<QString, QList<QUrl>>::const_iterator it = m_urlWhitelists.constBegin();
-+ it!=m_urlWhitelists.constEnd(); ++it)
-+ {
-+ match = it->contains(url);
-+
-+ if (!match)
-+ {
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (match)
-+ {
-+ const qlonglong id = info.id();
-+
-+ for (QHash<QString, QList<qlonglong> >::const_iterator it = m_idWhitelists.constBegin();
-+ it!=m_idWhitelists.constEnd(); ++it)
-+ {
-+ match = it->contains(id);
-+
-+ if (!match)
-+ {
-+ break;
-+ }
-+ }
-+ }
-+
-+ return match;
-+}
-+
-+// -------------------------------------------------------------------------------------------------
-+
-+VersionImageFilterSettings::VersionImageFilterSettings()
-+{
-+ m_includeTagFilter = 0;
-+ m_exceptionTagFilter = 0;
-+}
-+
-+VersionImageFilterSettings::VersionImageFilterSettings(const VersionManagerSettings& settings)
-+{
-+ setVersionManagerSettings(settings);
-+}
-+
-+bool VersionImageFilterSettings::operator==(const VersionImageFilterSettings& other) const
-+{
-+ return m_excludeTagFilter == other.m_excludeTagFilter &&
-+ m_exceptionLists == other.m_exceptionLists;
-+}
-+
-+bool VersionImageFilterSettings::matches(const ImageInfo& info) const
-+{
-+ if (!isFiltering())
-+ {
-+ return true;
-+ }
-+
-+ const qlonglong id = info.id();
-+
-+ for (QHash<QString, QList<qlonglong> >::const_iterator it = m_exceptionLists.constBegin();
-+ it != m_exceptionLists.constEnd(); ++it)
-+ {
-+ if (it->contains(id))
-+ {
-+ return true;
-+ }
-+ }
-+
-+ bool match = true;
-+ QList<int> tagIds = info.tagIds();
-+
-+ if (!tagIds.contains(m_includeTagFilter))
-+ {
-+ for (QList<int>::const_iterator it = m_excludeTagFilter.begin();
-+ it != m_excludeTagFilter.end(); ++it)
-+ {
-+ if (tagIds.contains(*it))
-+ {
-+ match = false;
-+ break;
-+ }
-+ }
-+ }
-+
-+ if (!match)
-+ {
-+ if (tagIds.contains(m_exceptionTagFilter))
-+ {
-+ match = true;
-+ }
-+ }
-+
-+ return match;
-+}
-+
-+bool VersionImageFilterSettings::isHiddenBySettings(const ImageInfo& info) const
-+{
-+ QList<int> tagIds = info.tagIds();
-+
-+ foreach(int tagId, m_excludeTagFilter)
-+ {
-+ if (tagIds.contains(tagId))
-+ {
-+ return true;
-+ }
-+ }
-+
-+ return false;
-+}
-+
-+bool VersionImageFilterSettings::isExemptedBySettings(const ImageInfo& info) const
-+{
-+ return info.tagIds().contains(m_exceptionTagFilter);
-+}
-+
-+void VersionImageFilterSettings::setVersionManagerSettings(const VersionManagerSettings& settings)
-+{
-+ m_excludeTagFilter.clear();
-+
-+ if (!settings.enabled)
-+ {
-+ return;
-+ }
-+
-+ if (!(settings.showInViewFlags & VersionManagerSettings::ShowOriginal))
-+ {
-+ m_excludeTagFilter << TagsCache::instance()->getOrCreateInternalTag(InternalTagName::originalVersion());
-+ }
-+
-+ if (!(settings.showInViewFlags & VersionManagerSettings::ShowIntermediates))
-+ {
-+ m_excludeTagFilter << TagsCache::instance()->getOrCreateInternalTag(InternalTagName::intermediateVersion());
-+ }
-+
-+ m_includeTagFilter = TagsCache::instance()->getOrCreateInternalTag(InternalTagName::currentVersion());
-+ m_exceptionTagFilter = TagsCache::instance()->getOrCreateInternalTag(InternalTagName::versionAlwaysVisible());
-+}
-+
-+void VersionImageFilterSettings::setExceptionList(const QList<qlonglong>& idList, const QString& id)
-+{
-+ if (idList.isEmpty())
-+ {
-+ m_exceptionLists.remove(id);
-+ }
-+ else
-+ {
-+ m_exceptionLists.insert(id, idList);
-+ }
-+}
-+
-+bool VersionImageFilterSettings::isFiltering() const
-+{
-+ return !m_excludeTagFilter.isEmpty();
-+}
-+
-+bool VersionImageFilterSettings::isFilteringByTags() const
-+{
-+ return isFiltering();
-+}
-+
-+// -------------------------------------------------------------------------------------------------
-+
-+GroupImageFilterSettings::GroupImageFilterSettings()
-+ : m_allOpen(false)
-+{
-+}
-+
-+bool GroupImageFilterSettings::operator==(const GroupImageFilterSettings& other) const
-+{
-+ return (m_allOpen == other.m_allOpen &&
-+ m_openGroups == other.m_openGroups);
-+}
-+
-+bool GroupImageFilterSettings::matches(const ImageInfo& info) const
-+{
-+ if (m_allOpen)
-+ {
-+ return true;
-+ }
-+
-+ if (info.isGrouped())
-+ {
-+ return m_openGroups.contains(info.groupImage().id());
-+ }
-+ return true;
-+}
-+
-+void GroupImageFilterSettings::setOpen(qlonglong group, bool open)
-+{
-+ if (open)
-+ {
-+ m_openGroups << group;
-+ }
-+ else
-+ {
-+ m_openGroups.remove(group);
-+ }
-+}
-+
-+bool GroupImageFilterSettings::isOpen(qlonglong group) const
-+{
-+ return m_openGroups.contains(group);
-+}
-+
-+void GroupImageFilterSettings::setAllOpen(bool open)
-+{
-+ m_allOpen = open;
-+}
-+
-+bool GroupImageFilterSettings::isAllOpen() const
-+{
-+ return m_allOpen;
-+}
-+
-+bool GroupImageFilterSettings::isFiltering() const
-+{
-+ return !m_allOpen;
-+}
-+
-+DatabaseFields::Set GroupImageFilterSettings::watchFlags() const
-+{
-+ return DatabaseFields::ImageRelations;
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagefiltersettings.h b/libs/database/models/imagefiltersettings.h
-new file mode 100644
-index 0000000..0e7beae
---- /dev/null
-+++ b/libs/database/models/imagefiltersettings.h
-@@ -0,0 +1,349 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Filter values for use with ImageFilterModel
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-+ * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGEFILTERSETTINGS_H
-+#define IMAGEFILTERSETTINGS_H
-+
-+// Qt includes
-+
-+#include <QHash>
-+#include <QList>
-+#include <QMap>
-+#include <QString>
-+#include <QSet>
-+#include <QUrl>
-+
-+// Local includes
-+
-+#include "searchtextbar.h"
-+#include "mimefilter.h"
-+#include "digikam_export.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageInfo;
-+class VersionManagerSettings;
-+
-+namespace DatabaseFields
-+{
-+ class Set;
-+}
-+
-+// ---------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT SearchTextFilterSettings : public SearchTextSettings
-+{
-+
-+public:
-+
-+ enum TextFilterFields
-+ {
-+ None = 0x00,
-+ ImageName = 0x01,
-+ ImageTitle = 0x02,
-+ ImageComment = 0x04,
-+ TagName = 0x08,
-+ AlbumName = 0x10,
-+ ImageAspectRatio = 0x20,
-+ ImagePixelSize = 0x40,
-+ All = ImageName | ImageTitle | ImageComment | TagName | AlbumName | ImageAspectRatio | ImagePixelSize
-+ };
-+
-+public:
-+
-+ SearchTextFilterSettings()
-+ {
-+ textFields = None;
-+ }
-+
-+ explicit SearchTextFilterSettings(const SearchTextSettings& settings)
-+ {
-+ caseSensitive = settings.caseSensitive;
-+ text = settings.text;
-+ textFields = None;
-+ }
-+
-+ TextFilterFields textFields;
-+};
-+
-+// ---------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT ImageFilterSettings
-+{
-+public:
-+
-+ ImageFilterSettings();
-+
-+ /**
-+ * Returns true if the given ImageInfo matches the filter criteria.
-+ * Optionally, foundText is set to true if it matched by text search.
-+ */
-+ bool matches(const ImageInfo& info, bool* const foundText = 0) const;
-+
-+public:
-+
-+ /// --- Tags filter ---
-+
-+ /// Possible logical matching condition used to sort tags id.
-+ enum MatchingCondition
-+ {
-+ OrCondition,
-+ AndCondition
-+ };
-+
-+ void setTagFilter(const QList<int>& includedTags,
-+ const QList<int>& excludedTags,
-+ MatchingCondition matchingCond,
-+ bool showUnTagged,
-+ const QList<int>& clTagIds,
-+ const QList<int>& plTagIds);
-+
-+public:
-+
-+ /// --- Rating filter ---
-+
-+ /// Possible conditions used to filter rating: >=, =, <=
-+ enum RatingCondition
-+ {
-+ GreaterEqualCondition,
-+ EqualCondition,
-+ LessEqualCondition
-+ };
-+
-+ void setRatingFilter(int rating, RatingCondition ratingCond, bool isUnratedExcluded);
-+
-+public:
-+
-+ /// --- Date filter ---
-+ void setDayFilter(const QList<QDateTime>& days);
-+
-+public:
-+
-+ /// --- Text filter ---
-+ void setTextFilter(const SearchTextFilterSettings& settings);
-+ void setTagNames(const QHash<int, QString>& tagNameHash);
-+ void setAlbumNames(const QHash<int, QString>& albumNameHash);
-+
-+public:
-+
-+ /// --- Mime filter ---
-+ void setMimeTypeFilter(int mimeTypeFilter);
-+
-+public:
-+
-+ /// --- Geolocation filter
-+ enum GeolocationCondition
-+ {
-+ GeolocationNoFilter = 0,
-+ GeolocationNoCoordinates = 1 << 1,
-+ GeolocationHasCoordinates = 1 << 2
-+ };
-+
-+ void setGeolocationFilter(const GeolocationCondition& condition);
-+
-+public:
-+
-+ /// Returns if the day is a filter criteria
-+ bool isFilteringByDay() const;
-+
-+ /// Returns if the type mime is a filter criteria
-+ bool isFilteringByTypeMime() const;
-+
-+ /// Returns whether geolocation is a filter criteria
-+ bool isFilteringByGeolocation() const;
-+
-+ /// Returns if the rating is a filter criteria
-+ bool isFilteringByRating() const;
-+
-+ /// Returns if the pick labels is a filter criteria
-+ bool isFilteringByPickLabels() const;
-+
-+ /// Returns if the color labels is a filter criteria
-+ bool isFilteringByColorLabels() const;
-+
-+ /// Returns if the tag is a filter criteria
-+ bool isFilteringByTags() const;
-+
-+ /// Returns if the text (including comment) is a filter criteria
-+ bool isFilteringByText() const;
-+
-+ /// Returns if images will be filtered by these criteria at all
-+ bool isFiltering() const;
-+
-+public:
-+
-+ /// --- URL whitelist filter
-+ void setUrlWhitelist(const QList<QUrl>& urlList, const QString& id);
-+
-+public:
-+
-+ /// --- ID whitelist filter
-+ void setIdWhitelist(const QList<qlonglong>& idList, const QString& id);
-+
-+public:
-+
-+ /// --- Change notification ---
-+
-+ /** Returns database fields a change in which would affect the current filtering.
-+ * To find out if an image tag change affects filtering, test isFilteringByTags().
-+ * The text filter will also be affected by changes in tags and album names.
-+ */
-+ DatabaseFields::Set watchFlags() const;
-+
-+private:
-+
-+ /**
-+ * @brief Returns whether some internal filtering (whitelist by id or URL) or normal filtering is going on
-+ */
-+ bool isFilteringInternally() const;
-+
-+private:
-+
-+ /// --- Tags filter ---
-+ bool m_untaggedFilter;
-+ QList<int> m_includeTagFilter;
-+ QList<int> m_excludeTagFilter;
-+ MatchingCondition m_matchingCond;
-+ QList<int> m_colorLabelTagFilter;
-+ QList<int> m_pickLabelTagFilter;
-+
-+ /// --- Rating filter ---
-+ int m_ratingFilter;
-+ RatingCondition m_ratingCond;
-+ bool m_isUnratedExcluded;
-+
-+ /// --- Date filter ---
-+ QMap<QDateTime, bool> m_dayFilter;
-+
-+ /// --- Text filter ---
-+ SearchTextFilterSettings m_textFilterSettings;
-+
-+ /// Helpers for text search: Set these if you want to search album or tag names with text search
-+ QHash<int, QString> m_tagNameHash;
-+ QHash<int, QString> m_albumNameHash;
-+
-+ /// --- Mime filter ---
-+ MimeFilter::TypeMimeFilter m_mimeTypeFilter;
-+
-+ /// --- Geolocation filter
-+ GeolocationCondition m_geolocationCondition;
-+
-+ /// --- URL whitelist filter
-+ QHash<QString,QList<QUrl>> m_urlWhitelists;
-+
-+ /// --- ID whitelist filter
-+ QHash<QString,QList<qlonglong> > m_idWhitelists;
-+};
-+
-+// ---------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT VersionImageFilterSettings
-+{
-+public:
-+
-+ VersionImageFilterSettings();
-+ explicit VersionImageFilterSettings(const VersionManagerSettings& settings);
-+
-+ bool operator==(const VersionImageFilterSettings& other) const;
-+
-+ /**
-+ * Returns true if the given ImageInfo matches the filter criteria.
-+ */
-+ bool matches(const ImageInfo& info) const;
-+
-+ bool isHiddenBySettings(const ImageInfo& info) const;
-+ bool isExemptedBySettings(const ImageInfo& info) const;
-+
-+ /// --- Tags filter ---
-+
-+ void setVersionManagerSettings(const VersionManagerSettings& settings);
-+
-+ /**
-+ * Add list with exceptions: These images will be exempted from filtering by this filter
-+ */
-+ void setExceptionList(const QList<qlonglong>& idlist, const QString& id);
-+
-+ /// Returns if images will be filtered by these criteria at all
-+ bool isFiltering() const;
-+
-+ /// Returns if the tag is a filter criteria
-+ bool isFilteringByTags() const;
-+
-+ /// DatabaseFields::Set watchFlags() const: Would return 0
-+
-+protected:
-+
-+ QList<int> m_excludeTagFilter;
-+ int m_includeTagFilter;
-+ int m_exceptionTagFilter;
-+ QHash<QString,QList<qlonglong> > m_exceptionLists;
-+};
-+
-+// ---------------------------------------------------------------------------------------
-+
-+class DIGIKAM_DATABASE_EXPORT GroupImageFilterSettings
-+{
-+public:
-+
-+ GroupImageFilterSettings();
-+
-+ bool operator==(const GroupImageFilterSettings& other) const;
-+
-+ /**
-+ * Returns true if the given ImageInfo matches the filter criteria.
-+ */
-+ bool matches(const ImageInfo& info) const;
-+
-+ /**
-+ * Open or close a group.
-+ */
-+ void setOpen(qlonglong group, bool open);
-+ bool isOpen(qlonglong group) const;
-+
-+ /**
-+ * Open all groups
-+ */
-+ void setAllOpen(bool open);
-+ bool isAllOpen() const;
-+
-+ /// Returns if images will be filtered by these criteria at all
-+ bool isFiltering() const;
-+
-+ DatabaseFields::Set watchFlags() const;
-+
-+protected:
-+
-+ bool m_allOpen;
-+ QSet<qlonglong> m_openGroups;
-+};
-+
-+} // namespace Digikam
-+
-+Q_DECLARE_METATYPE(Digikam::ImageFilterSettings::GeolocationCondition)
-+
-+#endif // IMAGEFILTERSETTINGS_H
-diff --git a/libs/database/models/imagelistmodel.cpp b/libs/database/models/imagelistmodel.cpp
-new file mode 100644
-index 0000000..fafce34
---- /dev/null
-+++ b/libs/database/models/imagelistmodel.cpp
-@@ -0,0 +1,70 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2010-12-06
-+ * Description : An image model based on a static list
-+ *
-+ * Copyright (C) 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagelistmodel.h"
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "coredbaccess.h"
-+#include "coredbchangesets.h"
-+#include "coredbwatch.h"
-+#include "imageinfo.h"
-+#include "imageinfolist.h"
-+
-+namespace Digikam
-+{
-+
-+ImageListModel::ImageListModel(QObject* parent)
-+ : ImageThumbnailModel(parent)
-+{
-+ connect(CoreDbAccess::databaseWatch(), SIGNAL(collectionImageChange(CollectionImageChangeset)),
-+ this, SLOT(slotCollectionImageChange(CollectionImageChangeset)));
-+}
-+
-+ImageListModel::~ImageListModel()
-+{
-+}
-+
-+void ImageListModel::slotCollectionImageChange(const CollectionImageChangeset& changeset)
-+{
-+ if (isEmpty())
-+ {
-+ return;
-+ }
-+
-+ switch (changeset.operation())
-+ {
-+ case CollectionImageChangeset::Added:
-+ break;
-+ case CollectionImageChangeset::Removed:
-+ case CollectionImageChangeset::RemovedAll:
-+ removeImageInfos(ImageInfoList(changeset.ids()));
-+ break;
-+
-+ default:
-+ break;
-+ }
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagelistmodel.h b/libs/database/models/imagelistmodel.h
-new file mode 100644
-index 0000000..a225b1b
---- /dev/null
-+++ b/libs/database/models/imagelistmodel.h
-@@ -0,0 +1,63 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2010-12-06
-+ * Description : An image model based on a static list
-+ *
-+ * Copyright (C) 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGELISTMODEL_H
-+#define IMAGELISTMODEL_H
-+
-+// Local includes
-+
-+#include "imagethumbnailmodel.h"
-+#include "digikam_export.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageChangeset;
-+class CollectionImageChangeset;
-+
-+class DIGIKAM_DATABASE_EXPORT ImageListModel : public ImageThumbnailModel
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit ImageListModel(QObject* parent = 0);
-+ ~ImageListModel();
-+
-+ // NOTE: necessary methods to add and remove ImageInfos to the model are inherited from ImageModel
-+
-+Q_SIGNALS:
-+
-+ /**
-+ * Emitted when images are removed from the model because they are removed in the database
-+ */
-+ void imageInfosRemoved(const QList<ImageInfo>& infos);
-+
-+protected Q_SLOTS:
-+
-+ void slotCollectionImageChange(const CollectionImageChangeset& changeset);
-+};
-+
-+} // namespace Digikam
-+
-+#endif // IMAGELISTMODEL_H
-diff --git a/libs/database/models/imagemodel.cpp b/libs/database/models/imagemodel.cpp
-new file mode 100644
-index 0000000..41b43cf
---- /dev/null
-+++ b/libs/database/models/imagemodel.cpp
-@@ -0,0 +1,1368 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagemodel.h"
-+
-+// Qt includes
-+
-+#include <QHash>
-+#include <QItemSelection>
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "coredbchangesets.h"
-+#include "coredbfields.h"
-+#include "coredbwatch.h"
-+#include "imageinfo.h"
-+#include "imageinfolist.h"
-+#include "abstractitemdragdrophandler.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageModel::Private
-+{
-+public:
-+
-+ Private()
-+ {
-+ preprocessor = 0;
-+ keepFilePathCache = false;
-+ sendRemovalSignals = false;
-+ incrementalUpdater = 0;
-+ refreshing = false;
-+ reAdding = false;
-+ incrementalRefreshRequested = false;
-+ }
-+
-+ ImageInfoList infos;
-+ QList<QVariant> extraValues;
-+ QHash<qlonglong, int> idHash;
-+
-+ bool keepFilePathCache;
-+ QHash<QString, qlonglong> filePathHash;
-+
-+ bool sendRemovalSignals;
-+
-+ QObject* preprocessor;
-+ bool refreshing;
-+ bool reAdding;
-+ bool incrementalRefreshRequested;
-+
-+ DatabaseFields::Set watchFlags;
-+
-+ class ImageModelIncrementalUpdater* incrementalUpdater;
-+
-+ ImageInfoList pendingInfos;
-+ QList<QVariant> pendingExtraValues;
-+
-+ inline bool isValid(const QModelIndex& index)
-+ {
-+ if (!index.isValid())
-+ {
-+ return false;
-+ }
-+
-+ if (index.row() < 0 || index.row() >= infos.size())
-+ {
-+ qCDebug(DIGIKAM_GENERAL_LOG) << "Invalid index" << index;
-+ return false;
-+ }
-+
-+ return true;
-+ }
-+ inline bool extraValueValid(const QModelIndex& index)
-+ {
-+ // we assume isValid() being called before, no duplicate checks
-+ if (index.row() >= extraValues.size())
-+ {
-+ qCDebug(DIGIKAM_GENERAL_LOG) << "Invalid index for extraData" << index;
-+ return false;
-+ }
-+
-+ return true;
-+ }
-+};
-+
-+typedef QPair<int, int> IntPair; // to make foreach macro happy
-+typedef QList<IntPair> IntPairList;
-+
-+class ImageModelIncrementalUpdater
-+{
-+public:
-+
-+ explicit ImageModelIncrementalUpdater(ImageModel::Private* d);
-+
-+ void appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void aboutToBeRemovedInModel(const IntPairList& aboutToBeRemoved);
-+ QList<IntPair> oldIndexes();
-+
-+ static QList<IntPair> toContiguousPairs(const QList<int>& ids);
-+
-+public:
-+
-+ QHash<qlonglong, int> oldIds;
-+ QList<QVariant> oldExtraValues;
-+ QList<ImageInfo> newInfos;
-+ QList<QVariant> newExtraValues;
-+ QList<IntPairList> modelRemovals;
-+};
-+
-+ImageModel::ImageModel(QObject* parent)
-+ : QAbstractListModel(parent),
-+ d(new Private)
-+{
-+ connect(CoreDbAccess::databaseWatch(), SIGNAL(imageChange(ImageChangeset)),
-+ this, SLOT(slotImageChange(ImageChangeset)));
-+
-+ connect(CoreDbAccess::databaseWatch(), SIGNAL(imageTagChange(ImageTagChangeset)),
-+ this, SLOT(slotImageTagChange(ImageTagChangeset)));
-+}
-+
-+ImageModel::~ImageModel()
-+{
-+ delete d->incrementalUpdater;
-+ delete d;
-+}
-+
-+// ------------ Access methods -------------
-+
-+void ImageModel::setKeepsFilePathCache(bool keepCache)
-+{
-+ d->keepFilePathCache = keepCache;
-+}
-+
-+bool ImageModel::keepsFilePathCache() const
-+{
-+ return d->keepFilePathCache;
-+}
-+
-+bool ImageModel::isEmpty() const
-+{
-+ return d->infos.isEmpty();
-+}
-+
-+void ImageModel::setWatchFlags(const DatabaseFields::Set& set)
-+{
-+ d->watchFlags = set;
-+}
-+
-+ImageInfo ImageModel::imageInfo(const QModelIndex& index) const
-+{
-+ if (!d->isValid(index))
-+ {
-+ return ImageInfo();
-+ }
-+
-+ return d->infos.at(index.row());
-+}
-+
-+ImageInfo& ImageModel::imageInfoRef(const QModelIndex& index) const
-+{
-+ return d->infos[index.row()];
-+}
-+
-+qlonglong ImageModel::imageId(const QModelIndex& index) const
-+{
-+ if (!d->isValid(index))
-+ {
-+ return 0;
-+ }
-+
-+ return d->infos.at(index.row()).id();
-+}
-+
-+QList<ImageInfo> ImageModel::imageInfos(const QList<QModelIndex>& indexes) const
-+{
-+ QList<ImageInfo> infos;
-+
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ infos << imageInfo(index);
-+ }
-+
-+ return infos;
-+}
-+
-+QList<qlonglong> ImageModel::imageIds(const QList<QModelIndex>& indexes) const
-+{
-+ QList<qlonglong> ids;
-+
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ ids << imageId(index);
-+ }
-+
-+ return ids;
-+}
-+
-+ImageInfo ImageModel::imageInfo(int row) const
-+{
-+ if (row >= d->infos.size())
-+ {
-+ return ImageInfo();
-+ }
-+
-+ return d->infos.at(row);
-+}
-+
-+ImageInfo& ImageModel::imageInfoRef(int row) const
-+{
-+ return d->infos[row];
-+}
-+
-+qlonglong ImageModel::imageId(int row) const
-+{
-+ if (row < 0 || row >= d->infos.size())
-+ {
-+ return -1;
-+ }
-+
-+ return d->infos.at(row).id();
-+}
-+
-+QModelIndex ImageModel::indexForImageInfo(const ImageInfo& info) const
-+{
-+ return indexForImageId(info.id());
-+}
-+
-+QModelIndex ImageModel::indexForImageInfo(const ImageInfo& info, const QVariant& extraValue) const
-+{
-+ return indexForImageId(info.id(), extraValue);
-+}
-+
-+QList<QModelIndex> ImageModel::indexesForImageInfo(const ImageInfo& info) const
-+{
-+ return indexesForImageId(info.id());
-+}
-+
-+QModelIndex ImageModel::indexForImageId(qlonglong id) const
-+{
-+ int index = d->idHash.value(id, -1);
-+
-+ if (index != -1)
-+ {
-+ return createIndex(index, 0);
-+ }
-+
-+ return QModelIndex();
-+}
-+
-+QModelIndex ImageModel::indexForImageId(qlonglong id, const QVariant& extraValue) const
-+{
-+ if (d->extraValues.isEmpty())
-+ return indexForImageId(id);
-+
-+ QHash<qlonglong, int>::const_iterator it;
-+
-+ for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-+ {
-+ if (d->extraValues.at(it.value()) == extraValue)
-+ return createIndex(it.value(), 0);
-+ }
-+
-+ return QModelIndex();
-+}
-+
-+QList<QModelIndex> ImageModel::indexesForImageId(qlonglong id) const
-+{
-+ QList<QModelIndex> indexes;
-+ QHash<qlonglong, int>::const_iterator it;
-+
-+ for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-+ {
-+ indexes << createIndex(it.value(), 0);
-+ }
-+
-+ return indexes;
-+}
-+
-+int ImageModel::numberOfIndexesForImageInfo(const ImageInfo& info) const
-+{
-+ return numberOfIndexesForImageId(info.id());
-+}
-+
-+int ImageModel::numberOfIndexesForImageId(qlonglong id) const
-+{
-+ if (d->extraValues.isEmpty())
-+ {
-+ return 0;
-+ }
-+
-+ int count = 0;
-+ QHash<qlonglong,int>::const_iterator it;
-+
-+ for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-+ {
-+ ++count;
-+ }
-+
-+ return count;
-+}
-+
-+// static method
-+ImageInfo ImageModel::retrieveImageInfo(const QModelIndex& index)
-+{
-+ if (!index.isValid())
-+ {
-+ return ImageInfo();
-+ }
-+
-+ ImageModel* const model = index.data(ImageModelPointerRole).value<ImageModel*>();
-+ int row = index.data(ImageModelInternalId).toInt();
-+
-+ if (!model)
-+ {
-+ return ImageInfo();
-+ }
-+
-+ return model->imageInfo(row);
-+}
-+
-+// static method
-+qlonglong ImageModel::retrieveImageId(const QModelIndex& index)
-+{
-+ if (!index.isValid())
-+ {
-+ return 0;
-+ }
-+
-+ ImageModel* const model = index.data(ImageModelPointerRole).value<ImageModel*>();
-+ int row = index.data(ImageModelInternalId).toInt();
-+
-+ if (!model)
-+ {
-+ return 0;
-+ }
-+
-+ return model->imageId(row);
-+}
-+
-+QModelIndex ImageModel::indexForPath(const QString& filePath) const
-+{
-+ if (d->keepFilePathCache)
-+ {
-+ return indexForImageId(d->filePathHash.value(filePath));
-+ }
-+ else
-+ {
-+ const int size = d->infos.size();
-+
-+ for (int i=0; i<size; ++i)
-+ {
-+ if (d->infos.at(i).filePath() == filePath)
-+ {
-+ return createIndex(i, 0);
-+ }
-+ }
-+ }
-+
-+ return QModelIndex();
-+}
-+
-+QList<QModelIndex> ImageModel::indexesForPath(const QString& filePath) const
-+{
-+ if (d->keepFilePathCache)
-+ {
-+ return indexesForImageId(d->filePathHash.value(filePath));
-+ }
-+ else
-+ {
-+ QList<QModelIndex> indexes;
-+ const int size = d->infos.size();
-+
-+ for (int i=0; i<size; ++i)
-+ {
-+ if (d->infos.at(i).filePath() == filePath)
-+ {
-+ indexes << createIndex(i, 0);
-+ }
-+ }
-+
-+ return indexes;
-+ }
-+}
-+
-+ImageInfo ImageModel::imageInfo(const QString& filePath) const
-+{
-+ if (d->keepFilePathCache)
-+ {
-+ qlonglong id = d->filePathHash.value(filePath);
-+
-+ if (id)
-+ {
-+ int index = d->idHash.value(id, -1);
-+
-+ if (index != -1)
-+ {
-+ return d->infos.at(index);
-+ }
-+ }
-+ }
-+ else
-+ {
-+ foreach(const ImageInfo& info, d->infos)
-+ {
-+ if (info.filePath() == filePath)
-+ {
-+ return info;
-+ }
-+ }
-+ }
-+
-+ return ImageInfo();
-+}
-+
-+QList<ImageInfo> ImageModel::imageInfos(const QString& filePath) const
-+{
-+ QList<ImageInfo> infos;
-+
-+ if (d->keepFilePathCache)
-+ {
-+ qlonglong id = d->filePathHash.value(filePath);
-+
-+ if (id)
-+ {
-+ foreach(int index, d->idHash.values(id))
-+ {
-+ infos << d->infos.at(index);
-+ }
-+ }
-+ }
-+ else
-+ {
-+ foreach(const ImageInfo& info, d->infos)
-+ {
-+ if (info.filePath() == filePath)
-+ {
-+ infos << info;
-+ }
-+ }
-+ }
-+
-+ return infos;
-+}
-+
-+void ImageModel::addImageInfo(const ImageInfo& info)
-+{
-+ addImageInfos(QList<ImageInfo>() << info, QList<QVariant>());
-+}
-+
-+void ImageModel::addImageInfos(const QList<ImageInfo>& infos)
-+{
-+ addImageInfos(infos, QList<QVariant>());
-+}
-+
-+void ImageModel::addImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ if (d->incrementalUpdater)
-+ {
-+ d->incrementalUpdater->appendInfos(infos, extraValues);
-+ }
-+ else
-+ {
-+ appendInfos(infos, extraValues);
-+ }
-+}
-+
-+void ImageModel::addImageInfoSynchronously(const ImageInfo& info)
-+{
-+ addImageInfosSynchronously(QList<ImageInfo>() << info, QList<QVariant>());
-+}
-+
-+void ImageModel::addImageInfosSynchronously(const QList<ImageInfo>& infos)
-+{
-+ addImageInfos(infos, QList<QVariant>());
-+}
-+
-+void ImageModel::addImageInfosSynchronously(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ publiciseInfos(infos, extraValues);
-+ emit processAdded(infos, extraValues);
-+}
-+
-+void ImageModel::ensureHasImageInfo(const ImageInfo& info)
-+{
-+ ensureHasImageInfos(QList<ImageInfo>() << info, QList<QVariant>());
-+}
-+
-+void ImageModel::ensureHasImageInfos(const QList<ImageInfo>& infos)
-+{
-+ ensureHasImageInfos(infos, QList<QVariant>());
-+}
-+
-+void ImageModel::ensureHasImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (extraValues.isEmpty())
-+ {
-+ if (!d->pendingExtraValues.isEmpty())
-+ {
-+ qCDebug(DIGIKAM_GENERAL_LOG) << "ExtraValue / No Extra Value mismatch. Ignoring added infos.";
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ if (d->pendingInfos.size() != d->pendingExtraValues.size())
-+ {
-+ qCDebug(DIGIKAM_GENERAL_LOG) << "ExtraValue / No Extra Value mismatch. Ignoring added infos.";
-+ return;
-+ }
-+ }
-+
-+ d->pendingInfos << infos;
-+ d->pendingExtraValues << extraValues;
-+ cleanSituationChecks();
-+}
-+
-+void ImageModel::clearImageInfos()
-+{
-+ d->infos.clear();
-+ d->extraValues.clear();
-+ d->idHash.clear();
-+ d->filePathHash.clear();
-+ delete d->incrementalUpdater;
-+ d->incrementalUpdater = 0;
-+ d->pendingInfos.clear();
-+ d->pendingExtraValues.clear();
-+ d->refreshing = false;
-+ d->reAdding = false;
-+ d->incrementalRefreshRequested = false;
-+
-+ beginResetModel();
-+ endResetModel();
-+
-+ imageInfosCleared();
-+}
-+
-+void ImageModel::setImageInfos(const QList<ImageInfo>& infos)
-+{
-+ clearImageInfos();
-+ addImageInfos(infos);
-+}
-+
-+QList<ImageInfo> ImageModel::imageInfos() const
-+{
-+ return d->infos;
-+}
-+
-+QList<qlonglong> ImageModel::imageIds() const
-+{
-+ return d->idHash.keys();
-+}
-+
-+bool ImageModel::hasImage(qlonglong id) const
-+{
-+ return d->idHash.contains(id);
-+}
-+
-+bool ImageModel::hasImage(const ImageInfo& info) const
-+{
-+ return d->idHash.contains(info.id());
-+}
-+
-+bool ImageModel::hasImage(const ImageInfo& info, const QVariant& extraValue) const
-+{
-+ return hasImage(info.id(), extraValue);
-+}
-+
-+bool ImageModel::hasImage(qlonglong id, const QVariant& extraValue) const
-+{
-+ if (d->extraValues.isEmpty())
-+ return hasImage(id);
-+
-+ QHash<qlonglong, int>::const_iterator it;
-+
-+ for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-+ {
-+ if (d->extraValues.at(it.value()) == extraValue)
-+ return true;
-+ }
-+
-+ return false;;
-+}
-+
-+QList<ImageInfo> ImageModel::uniqueImageInfos() const
-+{
-+ if (d->extraValues.isEmpty())
-+ {
-+ return d->infos;
-+ }
-+
-+ QList<ImageInfo> uniqueInfos;
-+ const int size = d->infos.size();
-+
-+ for (int i=0; i<size; ++i)
-+ {
-+ const ImageInfo& info = d->infos.at(i);
-+
-+ if (d->idHash.value(info.id()) == i)
-+ {
-+ uniqueInfos << info;
-+ }
-+ }
-+
-+ return uniqueInfos;
-+}
-+
-+void ImageModel::emitDataChangedForAll()
-+{
-+ if (d->infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ QModelIndex first = createIndex(0, 0);
-+ QModelIndex last = createIndex(d->infos.size() - 1, 0);
-+ emit dataChanged(first, last);
-+}
-+
-+void ImageModel::emitDataChangedForSelection(const QItemSelection& selection)
-+{
-+ if (!selection.isEmpty())
-+ {
-+ foreach(const QItemSelectionRange& range, selection)
-+ {
-+ emit dataChanged(range.topLeft(), range.bottomRight());
-+ }
-+ }
-+}
-+
-+void ImageModel::ensureHasGroupedImages(const ImageInfo& groupLeader)
-+{
-+ ensureHasImageInfos(groupLeader.groupedImages());
-+}
-+
-+// ------------ Preprocessing -------------
-+
-+void ImageModel::setPreprocessor(QObject* preprocessor)
-+{
-+ unsetPreprocessor(d->preprocessor);
-+ d->preprocessor = preprocessor;
-+}
-+
-+void ImageModel::unsetPreprocessor(QObject* preprocessor)
-+{
-+ if (preprocessor && d->preprocessor == preprocessor)
-+ {
-+ disconnect(this, SIGNAL(preprocess(QList<ImageInfo>,QList<QVariant>)), 0, 0);
-+ disconnect(d->preprocessor, 0, this, SLOT(reAddImageInfos(QList<ImageInfo>,QList<QVariant>)));
-+ disconnect(d->preprocessor, 0, this, SLOT(reAddingFinished()));
-+ }
-+}
-+
-+void ImageModel::appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ if (d->preprocessor)
-+ {
-+ d->reAdding = true;
-+ emit preprocess(infos, extraValues);
-+ }
-+ else
-+ {
-+ publiciseInfos(infos, extraValues);
-+ }
-+}
-+
-+void ImageModel::appendInfosChecked(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ // This method does deduplication. It is private because in context of readding or refreshing it is of no use.
-+
-+ if (extraValues.isEmpty())
-+ {
-+ QList<ImageInfo> checkedInfos;
-+
-+ foreach (const ImageInfo& info, infos)
-+ {
-+ if (!hasImage(info))
-+ {
-+ checkedInfos << info;
-+ }
-+ }
-+
-+ appendInfos(checkedInfos, QList<QVariant>());
-+ }
-+ else
-+ {
-+ QList<ImageInfo> checkedInfos;
-+ QList<QVariant> checkedExtraValues;
-+ const int size = infos.size();
-+
-+ for (int i=0; i<size; i++)
-+ {
-+ if (!hasImage(infos[i], extraValues[i]))
-+ {
-+ checkedInfos << infos[i];
-+ checkedExtraValues << extraValues[i];
-+ }
-+ }
-+
-+ appendInfos(checkedInfos, checkedExtraValues);
-+ }
-+}
-+
-+void ImageModel::reAddImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ // addImageInfos -> appendInfos -> preprocessor -> reAddImageInfos
-+ publiciseInfos(infos, extraValues);
-+}
-+
-+void ImageModel::reAddingFinished()
-+{
-+ d->reAdding = false;
-+ cleanSituationChecks();
-+}
-+
-+void ImageModel::startRefresh()
-+{
-+ d->refreshing = true;
-+}
-+
-+void ImageModel::finishRefresh()
-+{
-+ d->refreshing = false;
-+ cleanSituationChecks();
-+}
-+
-+bool ImageModel::isRefreshing() const
-+{
-+ return d->refreshing;
-+}
-+
-+void ImageModel::cleanSituationChecks()
-+{
-+ // For starting an incremental refresh we want a clear situation:
-+ // Any remaining batches from non-incremental refreshing subclasses have been received in appendInfos(),
-+ // any batches sent to preprocessor for re-adding have been re-added.
-+ if (d->refreshing || d->reAdding)
-+ {
-+ return;
-+ }
-+
-+ if (!d->pendingInfos.isEmpty())
-+ {
-+ appendInfosChecked(d->pendingInfos, d->pendingExtraValues);
-+ d->pendingInfos.clear();
-+ d->pendingExtraValues.clear();
-+ cleanSituationChecks();
-+ return;
-+ }
-+
-+ if (d->incrementalRefreshRequested)
-+ {
-+ d->incrementalRefreshRequested = false;
-+ emit readyForIncrementalRefresh();
-+ }
-+ else
-+ {
-+ emit allRefreshingFinished();
-+ }
-+}
-+
-+void ImageModel::publiciseInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ Q_ASSERT(infos.size() == extraValues.size() || (extraValues.isEmpty() && d->extraValues.isEmpty()));
-+
-+ emit imageInfosAboutToBeAdded(infos);
-+ const int firstNewIndex = d->infos.size();
-+ const int lastNewIndex = d->infos.size() + infos.size() - 1;
-+ beginInsertRows(QModelIndex(), firstNewIndex, lastNewIndex);
-+ d->infos << infos;
-+ d->extraValues << extraValues;
-+
-+ for (int i=firstNewIndex; i<=lastNewIndex; ++i)
-+ {
-+ const ImageInfo& info = d->infos.at(i);
-+ qlonglong id = info.id();
-+ d->idHash.insertMulti(id, i);
-+
-+ if (d->keepFilePathCache)
-+ {
-+ d->filePathHash[info.filePath()] = id;
-+ }
-+ }
-+
-+ endInsertRows();
-+ emit imageInfosAdded(infos);
-+}
-+
-+void ImageModel::requestIncrementalRefresh()
-+{
-+ if (d->reAdding)
-+ {
-+ d->incrementalRefreshRequested = true;
-+ }
-+ else
-+ {
-+ emit readyForIncrementalRefresh();
-+ }
-+}
-+
-+bool ImageModel::hasIncrementalRefreshPending() const
-+{
-+ return d->incrementalRefreshRequested;
-+}
-+
-+void ImageModel::startIncrementalRefresh()
-+{
-+ delete d->incrementalUpdater;
-+
-+ d->incrementalUpdater = new ImageModelIncrementalUpdater(d);
-+}
-+
-+void ImageModel::finishIncrementalRefresh()
-+{
-+ if (!d->incrementalUpdater)
-+ {
-+ return;
-+ }
-+
-+ // remove old entries
-+ QList<QPair<int, int> > pairs = d->incrementalUpdater->oldIndexes();
-+ removeRowPairs(pairs);
-+
-+ // add new indexes
-+ appendInfos(d->incrementalUpdater->newInfos, d->incrementalUpdater->newExtraValues);
-+
-+ delete d->incrementalUpdater;
-+ d->incrementalUpdater = 0;
-+}
-+
-+void ImageModel::removeIndex(const QModelIndex& index)
-+{
-+ removeIndexes(QList<QModelIndex>() << index);
-+}
-+
-+void ImageModel::removeIndexes(const QList<QModelIndex>& indexes)
-+{
-+ QList<int> listIndexes;
-+
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ if (d->isValid(index))
-+ {
-+ listIndexes << index.row();
-+ }
-+ }
-+
-+ if (listIndexes.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ removeRowPairsWithCheck(ImageModelIncrementalUpdater::toContiguousPairs(listIndexes));
-+}
-+
-+void ImageModel::removeImageInfo(const ImageInfo& info)
-+{
-+ removeImageInfos(QList<ImageInfo>() << info);
-+}
-+
-+void ImageModel::removeImageInfos(const QList<ImageInfo>& infos)
-+{
-+ QList<int> listIndexes;
-+
-+ foreach(const ImageInfo& info, infos)
-+ {
-+ QModelIndex index = indexForImageId(info.id());
-+
-+ if (index.isValid())
-+ {
-+ listIndexes << index.row();
-+ }
-+ }
-+ removeRowPairsWithCheck(ImageModelIncrementalUpdater::toContiguousPairs(listIndexes));
-+}
-+
-+void ImageModel::removeImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (extraValues.isEmpty())
-+ {
-+ removeImageInfos(infos);
-+ return;
-+ }
-+
-+ QList<int> listIndexes;
-+
-+ for (int i=0; i<infos.size(); ++i)
-+ {
-+ QModelIndex index = indexForImageId(infos.at(i).id(), extraValues.at(i));
-+
-+ if (index.isValid())
-+ {
-+ listIndexes << index.row();
-+ }
-+ }
-+
-+ removeRowPairsWithCheck(ImageModelIncrementalUpdater::toContiguousPairs(listIndexes));
-+}
-+
-+void ImageModel::setSendRemovalSignals(bool send)
-+{
-+ d->sendRemovalSignals = send;
-+}
-+
-+template <class List, typename T>
-+static bool pairsContain(const List& list, T value)
-+{
-+ typename List::const_iterator middle;
-+ typename List::const_iterator begin = list.begin();
-+ typename List::const_iterator end = list.end();
-+ int n = int(end - begin);
-+ int half;
-+
-+ while (n > 0)
-+ {
-+ half = n >> 1;
-+ middle = begin + half;
-+
-+ if (middle->first <= value && middle->second >= value)
-+ {
-+ return true;
-+ }
-+ else if (middle->second < value)
-+ {
-+ begin = middle + 1;
-+ n -= half + 1;
-+ }
-+ else
-+ {
-+ n = half;
-+ }
-+ }
-+
-+ return false;
-+}
-+
-+void ImageModel::removeRowPairsWithCheck(const QList<QPair<int, int> >& toRemove)
-+{
-+ if (d->incrementalUpdater)
-+ {
-+ d->incrementalUpdater->aboutToBeRemovedInModel(toRemove);
-+ }
-+
-+ removeRowPairs(toRemove);
-+}
-+
-+void ImageModel::removeRowPairs(const QList<QPair<int, int> >& toRemove)
-+{
-+ if (toRemove.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ // Remove old indexes
-+ // Keep in mind that when calling beginRemoveRows all structures announced to be removed
-+ // must still be valid, and this includes our hashes as well, which limits what we can optimize
-+
-+ int removedRows = 0, offset = 0;
-+ typedef QPair<int, int> IntPair; // to make foreach macro happy
-+
-+ foreach(const IntPair& pair, toRemove)
-+ {
-+ const int begin = pair.first - offset;
-+ const int end = pair.second - offset; // inclusive
-+ removedRows = end - begin + 1;
-+
-+ // when removing from the list, all subsequent indexes are affected
-+ offset += removedRows;
-+
-+ QList<ImageInfo> removedInfos;
-+
-+ if (d->sendRemovalSignals)
-+ {
-+ qCopy(d->infos.begin() + begin, d->infos.begin() + end, removedInfos.begin());
-+ emit imageInfosAboutToBeRemoved(removedInfos);
-+ }
-+
-+ imageInfosAboutToBeRemoved(begin, end);
-+ beginRemoveRows(QModelIndex(), begin, end);
-+
-+ // update idHash - which points to indexes of d->infos, and these change now!
-+ QHash<qlonglong, int>::iterator it;
-+
-+ for (it = d->idHash.begin(); it != d->idHash.end(); )
-+ {
-+ if (it.value() >= begin)
-+ {
-+ if (it.value() > end)
-+ {
-+ // after the removed interval: adjust index
-+ it.value() -= removedRows;
-+ }
-+ else
-+ {
-+ // in the removed interval
-+ it = d->idHash.erase(it);
-+ continue;
-+ }
-+ }
-+
-+ ++it;
-+ }
-+
-+ // remove from list
-+ d->infos.erase(d->infos.begin() + begin, d->infos.begin() + (end + 1));
-+
-+ if (!d->extraValues.isEmpty())
-+ {
-+ d->extraValues.erase(d->extraValues.begin() + begin, d->extraValues.begin() + (end + 1));
-+ }
-+
-+ endRemoveRows();
-+
-+ if (d->sendRemovalSignals)
-+ {
-+ emit imageInfosRemoved(removedInfos);
-+ }
-+ }
-+
-+ // tidy up: remove old indexes from file path hash now
-+ if (d->keepFilePathCache)
-+ {
-+ QHash<QString, qlonglong>::iterator it;
-+
-+ for (it = d->filePathHash.begin(); it != d->filePathHash.end(); )
-+ {
-+ if (pairsContain(toRemove, it.value()))
-+ {
-+ it = d->filePathHash.erase(it);
-+ }
-+ else
-+ {
-+ ++it;
-+ }
-+ }
-+ }
-+}
-+
-+ImageModelIncrementalUpdater::ImageModelIncrementalUpdater(ImageModel::Private* d)
-+{
-+ oldIds = d->idHash;
-+ oldExtraValues = d->extraValues;
-+}
-+
-+void ImageModelIncrementalUpdater::appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
-+{
-+ if (extraValues.isEmpty())
-+ {
-+ foreach(const ImageInfo& info, infos)
-+ {
-+ QHash<qlonglong,int>::iterator it = oldIds.find(info.id());
-+
-+ if (it != oldIds.end())
-+ {
-+ oldIds.erase(it);
-+ }
-+ else
-+ {
-+ newInfos << info;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ for (int i=0; i<infos.size(); ++i)
-+ {
-+ const ImageInfo& info = infos.at(i);
-+ bool found = false;
-+ QHash<qlonglong,int>::iterator it;
-+
-+ for (it = oldIds.find(info.id()); it != oldIds.end() && it.key() == info.id(); ++it)
-+ {
-+ // first check is for bug #262596. Not sure if needed.
-+ if (it.value() < oldExtraValues.size() && extraValues.at(i) == oldExtraValues.at(it.value()))
-+ {
-+ found = true;
-+ break;
-+ }
-+ }
-+
-+ if (found)
-+ {
-+ oldIds.erase(it);
-+ // do not erase from oldExtraValues - oldIds is a hash id -> index.
-+ }
-+ else
-+ {
-+ newInfos << info;
-+ newExtraValues << extraValues.at(i);
-+ }
-+ }
-+ }
-+}
-+
-+void ImageModelIncrementalUpdater::aboutToBeRemovedInModel(const IntPairList& toRemove)
-+{
-+ modelRemovals << toRemove;
-+}
-+
-+QList<QPair<int, int> > ImageModelIncrementalUpdater::oldIndexes()
-+{
-+ // first, apply all changes to indexes by direct removal in model
-+ // while the updater was active
-+ foreach(const IntPairList& list, modelRemovals)
-+ {
-+ int removedRows = 0, offset = 0;
-+
-+ foreach(const IntPair& pair, list)
-+ {
-+ const int begin = pair.first - offset;
-+ const int end = pair.second - offset; // inclusive
-+ removedRows = end - begin + 1;
-+
-+ // when removing from the list, all subsequent indexes are affected
-+ offset += removedRows;
-+
-+ // update idHash - which points to indexes of d->infos, and these change now!
-+ QHash<qlonglong, int>::iterator it;
-+
-+ for (it = oldIds.begin(); it != oldIds.end(); )
-+ {
-+ if (it.value() >= begin)
-+ {
-+ if (it.value() > end)
-+ {
-+ // after the removed interval: adjust index
-+ it.value() -= removedRows;
-+ }
-+ else
-+ {
-+ // in the removed interval
-+ it = oldIds.erase(it);
-+ continue;
-+ }
-+ }
-+
-+ ++it;
-+ }
-+ }
-+ }
-+
-+ modelRemovals.clear();
-+
-+ return toContiguousPairs(oldIds.values());
-+}
-+
-+QList<QPair<int, int> > ImageModelIncrementalUpdater::toContiguousPairs(const QList<int>& unsorted)
-+{
-+ // Take the given indices and return them as contiguous pairs [begin, end]
-+
-+ QList<QPair<int, int> > pairs;
-+
-+ if (unsorted.isEmpty())
-+ {
-+ return pairs;
-+ }
-+
-+ QList<int> indices(unsorted);
-+ qSort(indices);
-+
-+ QPair<int, int> pair(indices.first(), indices.first());
-+
-+ for (int i=1; i<indices.size(); ++i)
-+ {
-+ const int &index = indices.at(i);
-+
-+ if (index == pair.second + 1)
-+ {
-+ pair.second = index;
-+ continue;
-+ }
-+
-+ pairs << pair; // insert last pair
-+ pair.first = index;
-+ pair.second = index;
-+ }
-+
-+ pairs << pair;
-+
-+ return pairs;
-+}
-+
-+// ------------ QAbstractItemModel implementation -------------
-+
-+QVariant ImageModel::data(const QModelIndex& index, int role) const
-+{
-+ if (!d->isValid(index))
-+ {
-+ return QVariant();
-+ }
-+
-+ switch (role)
-+ {
-+ case Qt::DisplayRole:
-+ case Qt::ToolTipRole:
-+ return d->infos.at(index.row()).name();
-+
-+ case ImageModelPointerRole:
-+ return QVariant::fromValue(const_cast<ImageModel*>(this));
-+
-+ case ImageModelInternalId:
-+ return index.row();
-+
-+ case CreationDateRole:
-+ return d->infos.at(index.row()).dateTime();
-+
-+ case ExtraDataRole:
-+
-+ if (d->extraValueValid(index))
-+ {
-+ return d->extraValues.at(index.row());
-+ }
-+ else
-+ {
-+ return QVariant();
-+ }
-+
-+ case ExtraDataDuplicateCount:
-+ {
-+ qlonglong id = d->infos.at(index.row()).id();
-+ return numberOfIndexesForImageId(id);
-+ }
-+ }
-+
-+ return QVariant();
-+}
-+
-+QVariant ImageModel::headerData(int section, Qt::Orientation orientation, int role) const
-+{
-+ Q_UNUSED(section)
-+ Q_UNUSED(orientation)
-+ Q_UNUSED(role)
-+ return QVariant();
-+}
-+
-+int ImageModel::rowCount(const QModelIndex& parent) const
-+{
-+ if (parent.isValid())
-+ {
-+ return 0;
-+ }
-+
-+ return d->infos.size();
-+}
-+
-+Qt::ItemFlags ImageModel::flags(const QModelIndex& index) const
-+{
-+ if (!d->isValid(index))
-+ {
-+ return 0;
-+ }
-+
-+ Qt::ItemFlags f = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
-+
-+ f |= dragDropFlags(index);
-+
-+ return f;
-+}
-+
-+QModelIndex ImageModel::index(int row, int column, const QModelIndex& parent) const
-+{
-+ if (column != 0 || row < 0 || parent.isValid() || row >= d->infos.size())
-+ {
-+ return QModelIndex();
-+ }
-+
-+ return createIndex(row, 0);
-+}
-+
-+// ------------ Database watch -------------
-+
-+void ImageModel::slotImageChange(const ImageChangeset& changeset)
-+{
-+ if (d->infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ if (d->watchFlags & changeset.changes())
-+ {
-+ QItemSelection items;
-+
-+ foreach(const qlonglong& id, changeset.ids())
-+ {
-+ QModelIndex index = indexForImageId(id);
-+
-+ if (index.isValid())
-+ {
-+ items.select(index, index);
-+ }
-+ }
-+
-+ if (!items.isEmpty())
-+ {
-+ emitDataChangedForSelection(items);
-+ emit imageChange(changeset, items);
-+ }
-+ }
-+}
-+
-+void ImageModel::slotImageTagChange(const ImageTagChangeset& changeset)
-+{
-+ if (d->infos.isEmpty())
-+ {
-+ return;
-+ }
-+
-+ QItemSelection items;
-+
-+ foreach(const qlonglong& id, changeset.ids())
-+ {
-+ QModelIndex index = indexForImageId(id);
-+
-+ if (index.isValid())
-+ {
-+ items.select(index, index);
-+ }
-+ }
-+
-+ if (!items.isEmpty())
-+ {
-+ emitDataChangedForSelection(items);
-+ emit imageTagChange(changeset, items);
-+ }
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagemodel.h b/libs/database/models/imagemodel.h
-new file mode 100644
-index 0000000..dcf94c2
---- /dev/null
-+++ b/libs/database/models/imagemodel.h
-@@ -0,0 +1,364 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGEMODEL_H
-+#define IMAGEMODEL_H
-+
-+// Qt includes
-+
-+#include <QAbstractListModel>
-+
-+// Local includes
-+
-+#include "dragdropimplementations.h"
-+#include "imageinfo.h"
-+#include "digikam_export.h"
-+
-+class QItemSelection;
-+
-+namespace Digikam
-+{
-+
-+class ImageChangeset;
-+class ImageTagChangeset;
-+
-+namespace DatabaseFields
-+{
-+class Set;
-+}
-+
-+class DIGIKAM_DATABASE_EXPORT ImageModel : public QAbstractListModel, public DragDropModelImplementation
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ enum ImageModelRoles
-+ {
-+ /// An ImageModel* pointer to this model
-+ ImageModelPointerRole = Qt::UserRole,
-+ ImageModelInternalId = Qt::UserRole + 1,
-+ /// Returns a thumbnail pixmap. May be implemented by subclasses.
-+ /// Returns either a valid pixmap or a null QVariant.
-+ ThumbnailRole = Qt::UserRole + 2,
-+ /// Returns a QDateTime with the creation date
-+ CreationDateRole = Qt::UserRole + 3,
-+ /// Return (optional) extraData field
-+ ExtraDataRole = Qt::UserRole + 5,
-+ /// Returns the number of duplicate indexes for the same image id
-+ ExtraDataDuplicateCount = Qt::UserRole + 6,
-+
-+ // Roles which are defined here but not implemented by ImageModel
-+ /// Returns position of item in Left Light Table preview.
-+ LTLeftPanelRole = Qt::UserRole + 50,
-+ /// Returns position of item in Right Light Table preview.
-+ LTRightPanelRole = Qt::UserRole + 51,
-+
-+ // For use by subclasses
-+ SubclassRoles = Qt::UserRole + 100,
-+ // For use by filter models
-+ FilterModelRoles = Qt::UserRole + 500
-+ };
-+
-+public:
-+
-+ explicit ImageModel(QObject* parent = 0);
-+ ~ImageModel();
-+
-+ /** If a cache is kept, lookup by file path is fast,
-+ * without a cache it is O(n). Default is false.
-+ */
-+ void setKeepsFilePathCache(bool keepCache);
-+ bool keepsFilePathCache() const;
-+
-+ /** Set a set of database fields to watch.
-+ * If either of these is changed, dataChanged() will be emitted.
-+ * Default is no flag (no signal will be emitted).
-+ */
-+ void setWatchFlags(const DatabaseFields::Set& set);
-+
-+ /** Returns the ImageInfo object, reference or image id from the underlying data
-+ * pointed to by the index.
-+ * If the index is not valid, imageInfo will return a null ImageInfo, imageId will
-+ * return 0, imageInfoRef must not be called with an invalid index.
-+ */
-+ ImageInfo imageInfo(const QModelIndex& index) const;
-+ ImageInfo& imageInfoRef(const QModelIndex& index) const;
-+ qlonglong imageId(const QModelIndex& index) const;
-+ QList<ImageInfo> imageInfos(const QList<QModelIndex>& indexes) const;
-+ QList<qlonglong> imageIds(const QList<QModelIndex>& indexes) const;
-+
-+ /** Returns the ImageInfo object, reference or image id from the underlying data
-+ * of the given row (parent is the invalid QModelIndex, column is 0).
-+ * Note that imageInfoRef will crash if index is invalid.
-+ */
-+ ImageInfo imageInfo(int row) const;
-+ ImageInfo& imageInfoRef(int row) const;
-+ qlonglong imageId(int row) const;
-+
-+ /** Return the index for the given ImageInfo or id, if contained in this model.
-+ */
-+ QModelIndex indexForImageInfo(const ImageInfo& info) const;
-+ QModelIndex indexForImageInfo(const ImageInfo& info, const QVariant& extraValue) const;
-+ QModelIndex indexForImageId(qlonglong id) const;
-+ QModelIndex indexForImageId(qlonglong id, const QVariant& extraValue) const;
-+ QList<QModelIndex> indexesForImageInfo(const ImageInfo& info) const;
-+ QList<QModelIndex> indexesForImageId(qlonglong id) const;
-+
-+ int numberOfIndexesForImageInfo(const ImageInfo& info) const;
-+ int numberOfIndexesForImageId(qlonglong id) const;
-+
-+ /** Returns the index or ImageInfo object from the underlying data
-+ * for the given file path. This is fast if keepsFilePathCache is enabled.
-+ * The file path is as returned by ImageInfo.filePath().
-+ * In case of multiple occurrences of the same file, the simpler variants return
-+ * any one found first, use the QList methods to retrieve all occurrences.
-+ */
-+ QModelIndex indexForPath(const QString& filePath) const;
-+ ImageInfo imageInfo(const QString& filePath) const;
-+ QList<QModelIndex> indexesForPath(const QString& filePath) const;
-+ QList<ImageInfo> imageInfos(const QString& filePath) const;
-+
-+ /** Main entry point for subclasses adding image infos to the model.
-+ * If you list entries not unique per image id, you must add an extraValue
-+ * so that every entry is unique by imageId and extraValues.
-+ * Please note that these methods do not prevent addition of duplicate entries.
-+ */
-+ void addImageInfo(const ImageInfo& info);
-+ void addImageInfos(const QList<ImageInfo>& infos);
-+ void addImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+
-+ /** Clears image infos and resets model.
-+ */
-+ void clearImageInfos();
-+
-+ /** Clears and adds the infos.
-+ */
-+ void setImageInfos(const QList<ImageInfo>& infos);
-+
-+ /**
-+ * Directly remove the given indexes or infos from the model.
-+ */
-+ void removeIndex(const QModelIndex& indexes);
-+ void removeIndexes(const QList<QModelIndex>& indexes);
-+ void removeImageInfo(const ImageInfo& info);
-+ void removeImageInfos(const QList<ImageInfo>& infos);
-+ void removeImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+
-+ /**
-+ * addImageInfo() is asynchronous if a prepocessor is set.
-+ * This method first adds the info, synchronously.
-+ * Only afterwards, the preprocessor will have the opportunity to process it.
-+ * This method also bypasses any incremental updates.
-+ * Please note that these methods do not prevent addition of duplicate entries.
-+ */
-+ void addImageInfoSynchronously(const ImageInfo& info);
-+ void addImageInfosSynchronously(const QList<ImageInfo>& infos);
-+ void addImageInfosSynchronously(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+
-+ /**
-+ * Add the given entries. Method returns immediately, the
-+ * addition may happen later asynchronously.
-+ * These methods prevent the addition of duplicate entries.
-+ */
-+ void ensureHasImageInfo(const ImageInfo& info);
-+ void ensureHasImageInfos(const QList<ImageInfo>& infos);
-+ void ensureHasImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+
-+ /**
-+ * Ensure that all images grouped on the given leader are contained in the model.
-+ */
-+ void ensureHasGroupedImages(const ImageInfo& groupLeader);
-+
-+ QList<ImageInfo> imageInfos() const;
-+ QList<qlonglong> imageIds() const;
-+ QList<ImageInfo> uniqueImageInfos() const;
-+
-+ bool hasImage(qlonglong id) const;
-+ bool hasImage(const ImageInfo& info) const;
-+ bool hasImage(const ImageInfo& info, const QVariant& extraValue) const;
-+ bool hasImage(qlonglong id, const QVariant& extraValue) const;
-+
-+ bool isEmpty() const;
-+
-+ // Drag and Drop
-+ DECLARE_MODEL_DRAG_DROP_METHODS
-+
-+ /**
-+ * Install an object as a preprocessor for ImageInfos added to this model.
-+ * For every QList of ImageInfos added to addImageInfo, the signal preprocess()
-+ * will be emitted. The preprocessor may process the items and shall then readd
-+ * them by calling reAddImageInfos(). It may take some time to process.
-+ * It shall discard any held infos when the modelReset() signal is sent.
-+ * It shall call readdFinished() when no reset occurred and all infos on the way have been readded.
-+ * This means that only after calling this method, you shall make three connections
-+ * (preprocess -> your slot, your signal -> reAddImageInfos, your signal -> reAddingFinished)
-+ * and make or already hold a connection modelReset() -> your slot.
-+ * There is only one preprocessor at a time, a previously set object will be disconnected.
-+ */
-+ void setPreprocessor(QObject* processor);
-+ void unsetPreprocessor(QObject* processor);
-+
-+ /**
-+ * Returns true if this model is currently refreshing.
-+ * For a preprocessor this means that, although the preprocessor may currently have
-+ * processed all it got, more batches are to be expected.
-+ */
-+ bool isRefreshing() const;
-+
-+ /**
-+ * Enable sending of imageInfosAboutToBeRemoved and imageInfosRemoved signals.
-+ * Default: false
-+ */
-+ void setSendRemovalSignals(bool send);
-+
-+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
-+ virtual Qt::ItemFlags flags(const QModelIndex& index) const;
-+ virtual QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const;
-+
-+ /** Retrieves the imageInfo object from the data() method of the given index.
-+ * The index may be from a QSortFilterProxyModel as long as an ImageModel is at the end. */
-+ static ImageInfo retrieveImageInfo(const QModelIndex& index);
-+ static qlonglong retrieveImageId(const QModelIndex& index);
-+
-+Q_SIGNALS:
-+
-+ /** Informs that ImageInfos will be added to the model.
-+ * This signal is sent before the model data is changed and views are informed.
-+ */
-+ void imageInfosAboutToBeAdded(const QList<ImageInfo>& infos);
-+
-+ /** Informs that ImageInfos have been added to the model.
-+ * This signal is sent after the model data is changed and views are informed.
-+ */
-+ void imageInfosAdded(const QList<ImageInfo>& infos);
-+
-+ /** Informs that ImageInfos will be removed from the model.
-+ * This signal is sent before the model data is changed and views are informed.
-+ * Note: You need to explicitly enable sending of this signal. It is not sent
-+ * in clearImageInfos().
-+ */
-+ void imageInfosAboutToBeRemoved(const QList<ImageInfo>& infos);
-+
-+ /** Informs that ImageInfos have been removed from the model.
-+ * This signal is sent after the model data is changed and views are informed. *
-+ * Note: You need to explicitly enable sending of this signal. It is not sent
-+ * in clearImageInfos().
-+ */
-+ void imageInfosRemoved(const QList<ImageInfo>& infos);
-+
-+ /** Connect to this signal only if you are the current preprocessor.
-+ */
-+ void preprocess(const QList<ImageInfo>& infos, const QList<QVariant>&);
-+ void processAdded(const QList<ImageInfo>& infos, const QList<QVariant>&);
-+
-+ /** If an ImageChangeset affected indexes of this model with changes as set in watchFlags(),
-+ * this signal contains the changeset and the affected indexes.
-+ */
-+ void imageChange(const ImageChangeset&, const QItemSelection&);
-+
-+ /** If an ImageTagChangeset affected indexes of this model,
-+ * this signal contains the changeset and the affected indexes.
-+ */
-+ void imageTagChange(const ImageTagChangeset&, const QItemSelection&);
-+
-+ /** Signals that the model is right now ready to start an incremental refresh.
-+ * This is guaranteed only for the scope of emitting this signal.
-+ */
-+ void readyForIncrementalRefresh();
-+
-+ /** Signals that the model has finished currently with all scheduled
-+ * refreshing, full or incremental, and all preprocessing.
-+ * The model is in polished, clean situation right now.
-+ */
-+ void allRefreshingFinished();
-+
-+public Q_SLOTS:
-+
-+ void reAddImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void reAddingFinished();
-+
-+protected:
-+
-+ /** Subclasses that add ImageInfos in batches shall call startRefresh()
-+ * when they start sending batches and finishRefresh() when they have finished.
-+ * No incremental refreshes will be started while listing.
-+ * A clearImageInfos() always stops listing, calling finishRefresh() is then not necessary.
-+ */
-+ void startRefresh();
-+ void finishRefresh();
-+
-+ /** As soon as the model is ready to start an incremental refresh, the signal
-+ * readyForIncrementalRefresh() will be emitted. The signal will be emitted inline
-+ * if the model is ready right now.
-+ */
-+ void requestIncrementalRefresh();
-+ bool hasIncrementalRefreshPending() const;
-+
-+ /** Starts an incremental refresh operation. You shall only call this method from a slot
-+ * connected to readyForIncrementalRefresh(). To initiate an incremental refresh,
-+ * call requestIncrementalRefresh().
-+ */
-+ void startIncrementalRefresh();
-+ void finishIncrementalRefresh();
-+
-+ void emitDataChangedForAll();
-+ void emitDataChangedForSelection(const QItemSelection& selection);
-+
-+ // Called when the internal storage is cleared
-+ virtual void imageInfosCleared() {};
-+
-+ // Called before rowsAboutToBeRemoved
-+ virtual void imageInfosAboutToBeRemoved(int /*begin*/, int /*end*/) {};
-+
-+protected Q_SLOTS:
-+
-+ virtual void slotImageChange(const ImageChangeset& changeset);
-+ virtual void slotImageTagChange(const ImageTagChangeset& changeset);
-+
-+private:
-+
-+ void appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void appendInfosChecked(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void publiciseInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-+ void cleanSituationChecks();
-+ void removeRowPairsWithCheck(const QList<QPair<int, int> >& toRemove);
-+ void removeRowPairs(const QList<QPair<int, int> >& toRemove);
-+
-+public:
-+
-+ // Declared public because it's used in ImageModelIncrementalUpdater class
-+ class Private;
-+
-+private:
-+
-+ Private* const d;
-+};
-+
-+} // namespace Digikam
-+
-+Q_DECLARE_METATYPE(Digikam::ImageModel*)
-+
-+#endif // IMAGEMODEL_H
-diff --git a/libs/database/models/imagesortsettings.cpp b/libs/database/models/imagesortsettings.cpp
-new file mode 100644
-index 0000000..39ee6e1
---- /dev/null
-+++ b/libs/database/models/imagesortsettings.cpp
-@@ -0,0 +1,400 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Filter values for use with ImageFilterModel
-+ *
-+ * Copyright (C) 2009 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagesortsettings.h"
-+
-+// Qt includes
-+
-+#include <QDateTime>
-+#include <QRectF>
-+
-+// Local includes
-+
-+#include "coredbfields.h"
-+#include "imageinfo.h"
-+
-+namespace Digikam
-+{
-+
-+ImageSortSettings::ImageSortSettings()
-+{
-+ categorizationMode = NoCategories;
-+ categorizationSortOrder = DefaultOrder;
-+ categorizationCaseSensitivity = Qt::CaseSensitive;
-+ sortRole = SortByFileName;
-+ sortOrder = DefaultOrder;
-+ strTypeNatural = true;
-+ sortCaseSensitivity = Qt::CaseSensitive;
-+ currentCategorizationSortOrder = Qt::AscendingOrder;
-+ currentSortOrder = Qt::AscendingOrder;
-+}
-+
-+bool ImageSortSettings::operator==(const ImageSortSettings& other) const
-+{
-+ return
-+ categorizationMode == other.categorizationMode &&
-+ categorizationSortOrder == other.categorizationSortOrder &&
-+ categorizationCaseSensitivity == other.categorizationCaseSensitivity &&
-+ sortRole == other.sortRole &&
-+ sortOrder == other.sortOrder &&
-+ sortCaseSensitivity == other.sortCaseSensitivity;
-+}
-+
-+void ImageSortSettings::setCategorizationMode(CategorizationMode mode)
-+{
-+ categorizationMode = mode;
-+
-+ if (categorizationSortOrder == DefaultOrder)
-+ {
-+ currentCategorizationSortOrder = defaultSortOrderForCategorizationMode(categorizationMode);
-+ }
-+}
-+
-+void ImageSortSettings::setCategorizationSortOrder(SortOrder order)
-+{
-+ categorizationSortOrder = order;
-+
-+ if (categorizationSortOrder == DefaultOrder)
-+ {
-+ currentCategorizationSortOrder = defaultSortOrderForCategorizationMode(categorizationMode);
-+ }
-+ else
-+ {
-+ currentCategorizationSortOrder = (Qt::SortOrder)categorizationSortOrder;
-+ }
-+}
-+
-+void ImageSortSettings::setSortRole(SortRole role)
-+{
-+ sortRole = role;
-+
-+ if (sortOrder == DefaultOrder)
-+ {
-+ currentSortOrder = defaultSortOrderForSortRole(sortRole);
-+ }
-+}
-+
-+void ImageSortSettings::setSortOrder(SortOrder order)
-+{
-+ sortOrder = order;
-+
-+ if (sortOrder == DefaultOrder)
-+ {
-+ currentSortOrder = defaultSortOrderForSortRole(sortRole);
-+ }
-+ else
-+ {
-+ currentSortOrder = (Qt::SortOrder)order;
-+ }
-+}
-+
-+void ImageSortSettings::setStringTypeNatural(bool natural)
-+{
-+ strTypeNatural = natural;
-+}
-+
-+Qt::SortOrder ImageSortSettings::defaultSortOrderForCategorizationMode(CategorizationMode mode)
-+{
-+ switch (mode)
-+ {
-+ case NoCategories:
-+ case OneCategory:
-+ case CategoryByAlbum:
-+ case CategoryByFormat:
-+ default:
-+ return Qt::AscendingOrder;
-+ }
-+}
-+
-+Qt::SortOrder ImageSortSettings::defaultSortOrderForSortRole(SortRole role)
-+{
-+ switch (role)
-+ {
-+ case SortByFileName:
-+ case SortByFilePath:
-+ return Qt::AscendingOrder;
-+ case SortByFileSize:
-+ return Qt::DescendingOrder;
-+ case SortByModificationDate:
-+ case SortByCreationDate:
-+ return Qt::AscendingOrder;
-+ case SortByRating:
-+ case SortByImageSize:
-+ return Qt::DescendingOrder;
-+ case SortByAspectRatio:
-+ return Qt::DescendingOrder;
-+ case SortBySimilarity:
-+ return Qt::DescendingOrder;
-+ default:
-+ return Qt::AscendingOrder;
-+ }
-+}
-+
-+int ImageSortSettings::compareCategories(const ImageInfo& left, const ImageInfo& right) const
-+{
-+ switch (categorizationMode)
-+ {
-+ case NoCategories:
-+ case OneCategory:
-+ return 0;
-+ case CategoryByAlbum:
-+ {
-+ int leftAlbum = left.albumId();
-+ int rightAlbum = right.albumId();
-+
-+ // return comparation result
-+ if (leftAlbum == rightAlbum)
-+ {
-+ return 0;
-+ }
-+ else if (lessThanByOrder(leftAlbum, rightAlbum, currentCategorizationSortOrder))
-+ {
-+ return -1;
-+ }
-+ else
-+ {
-+ return 1;
-+ }
-+ }
-+ case CategoryByFormat:
-+ {
-+ return naturalCompare(left.format(), right.format(),
-+ currentCategorizationSortOrder, categorizationCaseSensitivity, strTypeNatural);
-+ }
-+ default:
-+ return 0;
-+ }
-+}
-+
-+bool ImageSortSettings::lessThan(const ImageInfo& left, const ImageInfo& right) const
-+{
-+ int result = compare(left, right, sortRole);
-+
-+ if (result != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ // are they identical?
-+ if (left == right)
-+ {
-+ return false;
-+ }
-+
-+ // If left and right equal for first sort order, use a hierarchy of all sort orders
-+ if ( (result = compare(left, right, SortByFileName)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ if ( (result = compare(left, right, SortByCreationDate)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ if ( (result = compare(left, right, SortByModificationDate)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ if ( (result = compare(left, right, SortByFilePath)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ if ( (result = compare(left, right, SortByFileSize)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ if ( (result = compare(left, right, SortBySimilarity)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ return false;
-+}
-+
-+int ImageSortSettings::compare(const ImageInfo& left, const ImageInfo& right) const
-+{
-+ return compare(left, right, sortRole);
-+}
-+
-+int ImageSortSettings::compare(const ImageInfo& left, const ImageInfo& right, SortRole role) const
-+{
-+ switch (role)
-+ {
-+ case SortByFileName:
-+ {
-+ bool versioning = (left.name().contains(QLatin1String("_v"), Qt::CaseInsensitive) ||
-+ right.name().contains(QLatin1String("_v"), Qt::CaseInsensitive));
-+ return naturalCompare(left.name(), right.name(), currentSortOrder, sortCaseSensitivity, strTypeNatural, versioning);
-+ }
-+ case SortByFilePath:
-+ return naturalCompare(left.filePath(), right.filePath(), currentSortOrder, sortCaseSensitivity, strTypeNatural);
-+ case SortByFileSize:
-+ return compareByOrder(left.fileSize(), right.fileSize(), currentSortOrder);
-+ case SortByModificationDate:
-+ return compareByOrder(left.modDateTime(), right.modDateTime(), currentSortOrder);
-+ case SortByCreationDate:
-+ return compareByOrder(left.dateTime(), right.dateTime(), currentSortOrder);
-+ case SortByRating:
-+ // I have the feeling that inverting the sort order for rating is the natural order
-+ return - compareByOrder(left.rating(), right.rating(), currentSortOrder);
-+ case SortByImageSize:
-+ {
-+ QSize leftSize = left.dimensions();
-+ QSize rightSize = right.dimensions();
-+ int leftPixels = leftSize.width() * leftSize.height();
-+ int rightPixels = rightSize.width() * rightSize.height();
-+ return compareByOrder(leftPixels, rightPixels, currentSortOrder);
-+ }
-+ case SortByAspectRatio:
-+ {
-+ QSize leftSize = left.dimensions();
-+ QSize rightSize = right.dimensions();
-+ int leftAR = (double(leftSize.width()) / double(leftSize.height())) * 1000000;
-+ int rightAR = (double(rightSize.width()) / double(rightSize.height())) * 1000000;
-+ return compareByOrder(leftAR, rightAR, currentSortOrder);
-+ }
-+ case SortBySimilarity:
-+ {
-+ qlonglong leftReferenceImageId = left.currentReferenceImage();
-+ qlonglong rightReferenceImageId = right.currentReferenceImage();
-+ // make sure that the original image has always the highest similarity.
-+ double leftSimilarity = left.id() == leftReferenceImageId ? 1.1 : left.currentSimilarity();
-+ double rightSimilarity = right.id() == rightReferenceImageId ? 1.1 : right.currentSimilarity();
-+ return compareByOrder(leftSimilarity, rightSimilarity, currentSortOrder);
-+ }
-+ default:
-+ return 1;
-+ }
-+}
-+
-+bool ImageSortSettings::lessThan(const QVariant& left, const QVariant& right) const
-+{
-+ if (left.type() != right.type())
-+ {
-+ return false;
-+ }
-+
-+ switch (left.type())
-+ {
-+ case QVariant::Int:
-+ return compareByOrder(left.toInt(), right.toInt(), currentSortOrder);
-+ case QVariant::UInt:
-+ return compareByOrder(left.toUInt(), right.toUInt(), currentSortOrder);
-+ case QVariant::LongLong:
-+ return compareByOrder(left.toLongLong(), right.toLongLong(), currentSortOrder);
-+ case QVariant::ULongLong:
-+ return compareByOrder(left.toULongLong(), right.toULongLong(), currentSortOrder);
-+ case QVariant::Double:
-+ return compareByOrder(left.toDouble(), right.toDouble(), currentSortOrder);
-+ case QVariant::Date:
-+ return compareByOrder(left.toDate(), right.toDate(), currentSortOrder);
-+ case QVariant::DateTime:
-+ return compareByOrder(left.toDateTime(), right.toDateTime(), currentSortOrder);
-+ case QVariant::Time:
-+ return compareByOrder(left.toTime(), right.toTime(), currentSortOrder);
-+ case QVariant::Rect:
-+ case QVariant::RectF:
-+ {
-+ QRectF rectLeft = left.toRectF();
-+ QRectF rectRight = right.toRectF();
-+ int result;
-+
-+ if ((result = compareByOrder(rectLeft.top(), rectRight.top(), currentSortOrder)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ if ((result = compareByOrder(rectLeft.left(), rectRight.left(), currentSortOrder)) != 0)
-+ {
-+ return result < 0;
-+ }
-+
-+ QSizeF sizeLeft = rectLeft.size(), sizeRight = rectRight.size();
-+
-+ if ((result = compareByOrder(sizeLeft.width()*sizeLeft.height(), sizeRight.width()*sizeRight.height(), currentSortOrder)) != 0)
-+ {
-+ return result < 0;
-+ }
-+ // FIXME: fall through?? If not, add "break" here
-+ }
-+ default:
-+ return naturalCompare(left.toString(), right.toString(), currentSortOrder, sortCaseSensitivity, strTypeNatural);
-+ }
-+}
-+
-+DatabaseFields::Set ImageSortSettings::watchFlags() const
-+{
-+ DatabaseFields::Set set;
-+
-+ switch (sortRole)
-+ {
-+ case SortByFileName:
-+ set |= DatabaseFields::Name;
-+ break;
-+ case SortByFilePath:
-+ set |= DatabaseFields::Name;
-+ break;
-+ case SortByFileSize:
-+ set |= DatabaseFields::FileSize;
-+ break;
-+ case SortByModificationDate:
-+ set |= DatabaseFields::ModificationDate;
-+ break;
-+ case SortByCreationDate:
-+ set |= DatabaseFields::CreationDate;
-+ break;
-+ case SortByRating:
-+ set |= DatabaseFields::Rating;
-+ break;
-+ case SortByImageSize:
-+ set |= DatabaseFields::Width | DatabaseFields::Height;
-+ break;
-+ case SortByAspectRatio:
-+ set |= DatabaseFields::Width | DatabaseFields::Height;
-+ break;
-+ case SortBySimilarity:
-+ // TODO: Not sure what to do here....
-+ set |= DatabaseFields::Name;
-+ break;
-+ }
-+
-+ switch (categorizationMode)
-+ {
-+ case NoCategories:
-+ case OneCategory:
-+ case CategoryByAlbum:
-+ break;
-+ case CategoryByFormat:
-+ set |= DatabaseFields::Format;
-+ break;
-+ }
-+
-+ return set;
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagesortsettings.h b/libs/database/models/imagesortsettings.h
-new file mode 100644
-index 0000000..2a5fd8c
---- /dev/null
-+++ b/libs/database/models/imagesortsettings.h
-@@ -0,0 +1,225 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-05-31
-+ * Description : Sort settings for use with ImageFilterModel
-+ *
-+ * Copyright (C) 2009 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGESORTSETTINGS_H
-+#define IMAGESORTSETTINGS_H
-+
-+// Qt includes
-+
-+#include <QHash>
-+#include <QList>
-+#include <QMap>
-+#include <QString>
-+#include <QCollator>
-+
-+// Local includes
-+
-+#include "digikam_export.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageInfo;
-+
-+namespace DatabaseFields
-+{
-+ class Set;
-+}
-+
-+class DIGIKAM_DATABASE_EXPORT ImageSortSettings
-+{
-+public:
-+
-+ ImageSortSettings();
-+
-+ bool operator==(const ImageSortSettings& other) const;
-+
-+ /** Compares the categories of left and right.
-+ * Return -1 if left is less than right, 0 if both fall in the same category,
-+ * and 1 if left is greater than right.
-+ * Adheres to set categorization mode and current category sort order.
-+ */
-+ int compareCategories(const ImageInfo& left, const ImageInfo& right) const;
-+
-+ /** Returns true if left is less than right.
-+ * Adheres to current sort role and sort order.
-+ */
-+ bool lessThan(const ImageInfo& left, const ImageInfo& right) const;
-+
-+ /** Compares the ImageInfos left and right.
-+ * Return -1 if left is less than right, 1 if left is greater than right,
-+ * and 0 if left equals right comparing the current sort role's value.
-+ * Adheres to set sort role and sort order.
-+ */
-+ int compare(const ImageInfo& left, const ImageInfo& right) const;
-+
-+ /** Returns true if left QVariant is less than right.
-+ * Adheres to current sort role and sort order.
-+ * Use for extraValue, if necessary.
-+ */
-+ bool lessThan(const QVariant& left, const QVariant& right) const;
-+
-+ enum SortOrder
-+ {
-+ AscendingOrder = Qt::AscendingOrder,
-+ DescendingOrder = Qt::DescendingOrder,
-+ DefaultOrder /// sort order depends on the chosen sort role
-+ };
-+
-+ /// --- Categories ---
-+
-+ enum CategorizationMode
-+ {
-+ NoCategories, /// categorization switched off
-+ OneCategory, /// all items in one global category
-+ CategoryByAlbum,
-+ CategoryByFormat
-+ };
-+
-+ CategorizationMode categorizationMode;
-+ SortOrder categorizationSortOrder;
-+
-+ void setCategorizationMode(CategorizationMode mode);
-+ void setCategorizationSortOrder(SortOrder order);
-+
-+ /// Only Ascending or Descending, never DefaultOrder
-+ Qt::SortOrder currentCategorizationSortOrder;
-+ Qt::CaseSensitivity categorizationCaseSensitivity;
-+
-+ bool isCategorized() const { return categorizationMode >= CategoryByAlbum; }
-+
-+ /// --- Image Sorting ---
-+
-+ enum SortRole
-+ {
-+ // Note: For legacy reasons, the order of the first five entries must remain unchanged
-+ SortByFileName,
-+ SortByFilePath,
-+ SortByCreationDate,
-+ SortByFileSize,
-+ SortByRating,
-+ SortByModificationDate,
-+ SortByImageSize, // pixel number
-+ SortByAspectRatio, // width / height * 100000
-+ SortBySimilarity
-+ };
-+
-+ SortRole sortRole;
-+ SortOrder sortOrder;
-+ bool strTypeNatural;
-+
-+ void setSortRole(SortRole role);
-+ void setSortOrder(SortOrder order);
-+ void setStringTypeNatural(bool natural);
-+
-+ Qt::SortOrder currentSortOrder;
-+ Qt::CaseSensitivity sortCaseSensitivity;
-+
-+ int compare(const ImageInfo& left, const ImageInfo& right, SortRole sortRole) const;
-+
-+ // --- ---
-+
-+ static Qt::SortOrder defaultSortOrderForCategorizationMode(CategorizationMode mode);
-+ static Qt::SortOrder defaultSortOrderForSortRole(SortRole role);
-+
-+ /// --- Change notification ---
-+
-+ /** Returns database fields a change in which would affect the current sorting.
-+ */
-+ DatabaseFields::Set watchFlags() const;
-+
-+ /// --- Utilities ---
-+
-+ /** Returns a < b if sortOrder is Ascending, or b < a if order is descending.
-+ */
-+ template <typename T>
-+ static inline bool lessThanByOrder(const T& a, const T& b, Qt::SortOrder sortOrder)
-+ {
-+ if (sortOrder == Qt::AscendingOrder)
-+ {
-+ return a < b;
-+ }
-+ else
-+ {
-+ return b < a;
-+ }
-+ }
-+
-+ /** Returns the usual compare result of -1, 0, or 1 for lessThan, equals and greaterThan.
-+ */
-+ template <typename T>
-+ static inline int compareValue(const T& a, const T& b)
-+ {
-+ if (a == b)
-+ {
-+ return 0;
-+ }
-+
-+ if (a < b)
-+ {
-+ return -1;
-+ }
-+ else
-+ {
-+ return 1;
-+ }
-+ }
-+
-+ /** Takes a typical result from a compare method (0 is equal, -1 is less than, 1 is greater than)
-+ * and applies the given sort order to it.
-+ */
-+ static inline int compareByOrder(int compareResult, Qt::SortOrder sortOrder)
-+ {
-+ if (sortOrder == Qt::AscendingOrder)
-+ {
-+ return compareResult;
-+ }
-+ else
-+ {
-+ return - compareResult;
-+ }
-+ }
-+
-+ template <typename T>
-+ static inline int compareByOrder(const T& a, const T& b, Qt::SortOrder sortOrder)
-+ {
-+ return compareByOrder(compareValue(a, b), sortOrder);
-+ }
-+
-+ /** Compares the two string by natural comparison and adheres to given sort order
-+ */
-+ static inline int naturalCompare(const QString& a, const QString& b, Qt::SortOrder sortOrder,
-+ Qt::CaseSensitivity caseSensitive = Qt::CaseSensitive,
-+ bool natural = true, bool versioning = false)
-+ {
-+ QCollator collator;
-+ collator.setNumericMode(natural);
-+ collator.setIgnorePunctuation(versioning);
-+ collator.setCaseSensitivity(caseSensitive);
-+ return (compareByOrder(collator.compare(a, b), sortOrder));
-+ }
-+};
-+
-+} // namespace Digikam
-+
-+#endif // IMAGESORTSETTINGS_H
-diff --git a/libs/database/models/imagethumbnailmodel.cpp b/libs/database/models/imagethumbnailmodel.cpp
-new file mode 100644
-index 0000000..b7f5661
---- /dev/null
-+++ b/libs/database/models/imagethumbnailmodel.cpp
-@@ -0,0 +1,323 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries with support for thumbnail loading
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imagethumbnailmodel.h"
-+
-+// Qt includes
-+
-+#include <QHash>
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "thumbnailloadthread.h"
-+#include "digikam_export.h"
-+#include "digikam_globals.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageThumbnailModel::ImageThumbnailModelPriv
-+{
-+public:
-+
-+ ImageThumbnailModelPriv() :
-+ thread(0),
-+ preloadThread(0),
-+ thumbSize(0),
-+ lastGlobalThumbSize(0),
-+ preloadThumbSize(0),
-+ emitDataChanged(true)
-+ {
-+ staticListContainingThumbnailRole << ImageModel::ThumbnailRole;
-+ }
-+
-+ ThumbnailLoadThread* thread;
-+ ThumbnailLoadThread* preloadThread;
-+ ThumbnailSize thumbSize;
-+ ThumbnailSize lastGlobalThumbSize;
-+ ThumbnailSize preloadThumbSize;
-+ QRect detailRect;
-+ QVector<int> staticListContainingThumbnailRole;
-+
-+ bool emitDataChanged;
-+
-+ int preloadThumbnailSize() const
-+ {
-+ if (preloadThumbSize.size())
-+ {
-+ return preloadThumbSize.size();
-+ }
-+
-+ return thumbSize.size();
-+ }
-+};
-+
-+ImageThumbnailModel::ImageThumbnailModel(QObject* parent)
-+ : ImageModel(parent), d(new ImageThumbnailModelPriv)
-+{
-+ setKeepsFilePathCache(true);
-+}
-+
-+ImageThumbnailModel::~ImageThumbnailModel()
-+{
-+ delete d->preloadThread;
-+ delete d;
-+}
-+
-+void ImageThumbnailModel::setThumbnailLoadThread(ThumbnailLoadThread* thread)
-+{
-+ d->thread = thread;
-+
-+ connect(d->thread, SIGNAL(signalThumbnailLoaded(LoadingDescription,QPixmap)),
-+ this, SLOT(slotThumbnailLoaded(LoadingDescription,QPixmap)));
-+}
-+
-+ThumbnailLoadThread* ImageThumbnailModel::thumbnailLoadThread() const
-+{
-+ return d->thread;
-+}
-+
-+ThumbnailSize ImageThumbnailModel::thumbnailSize() const
-+{
-+ return d->thumbSize;
-+}
-+
-+void ImageThumbnailModel::setThumbnailSize(const ThumbnailSize& size)
-+{
-+ d->lastGlobalThumbSize = size;
-+ d->thumbSize = size;
-+}
-+
-+void ImageThumbnailModel::setPreloadThumbnailSize(const ThumbnailSize& size)
-+{
-+ d->preloadThumbSize = size;
-+}
-+
-+void ImageThumbnailModel::setEmitDataChanged(bool emitSignal)
-+{
-+ d->emitDataChanged = emitSignal;
-+}
-+
-+void ImageThumbnailModel::setPreloadThumbnails(bool preload)
-+{
-+ if (preload)
-+ {
-+ if (!d->preloadThread)
-+ {
-+ d->preloadThread = new ThumbnailLoadThread;
-+ d->preloadThread->setPixmapRequested(false);
-+ d->preloadThread->setPriority(QThread::LowestPriority);
-+ }
-+
-+ connect(this, SIGNAL(allRefreshingFinished()),
-+ this, SLOT(preloadAllThumbnails()));
-+ }
-+ else
-+ {
-+ delete d->preloadThread;
-+ d->preloadThread = 0;
-+ disconnect(this, SIGNAL(allRefreshingFinished()),
-+ this, SLOT(preloadAllThumbnails()));
-+ }
-+}
-+
-+void ImageThumbnailModel::prepareThumbnails(const QList<QModelIndex>& indexesToPrepare)
-+{
-+ prepareThumbnails(indexesToPrepare, d->thumbSize);
-+}
-+
-+void ImageThumbnailModel::prepareThumbnails(const QList<QModelIndex>& indexesToPrepare, const ThumbnailSize& thumbSize)
-+{
-+ if (!d->thread)
-+ {
-+ return;
-+ }
-+
-+ QList<ThumbnailIdentifier> ids;
-+ foreach(const QModelIndex& index, indexesToPrepare)
-+ {
-+ ids << imageInfoRef(index).thumbnailIdentifier();
-+ }
-+ d->thread->findGroup(ids, thumbSize.size());
-+}
-+
-+void ImageThumbnailModel::preloadThumbnails(const QList<ImageInfo>& infos)
-+{
-+ if (!d->preloadThread)
-+ {
-+ return;
-+ }
-+
-+ QList<ThumbnailIdentifier> ids;
-+ foreach(const ImageInfo& info, infos)
-+ {
-+ ids << info.thumbnailIdentifier();
-+ }
-+ d->preloadThread->pregenerateGroup(ids, d->preloadThumbnailSize());
-+}
-+
-+void ImageThumbnailModel::preloadThumbnails(const QList<QModelIndex>& indexesToPreload)
-+{
-+ if (!d->preloadThread)
-+ {
-+ return;
-+ }
-+
-+ QList<ThumbnailIdentifier> ids;
-+ foreach(const QModelIndex& index, indexesToPreload)
-+ {
-+ ids << imageInfoRef(index).thumbnailIdentifier();
-+ }
-+ d->preloadThread->stopAllTasks();
-+ d->preloadThread->pregenerateGroup(ids, d->preloadThumbnailSize());
-+}
-+
-+void ImageThumbnailModel::preloadAllThumbnails()
-+{
-+ preloadThumbnails(imageInfos());
-+}
-+
-+void ImageThumbnailModel::imageInfosCleared()
-+{
-+ if (d->preloadThread)
-+ {
-+ d->preloadThread->stopAllTasks();
-+ }
-+}
-+
-+QVariant ImageThumbnailModel::data(const QModelIndex& index, int role) const
-+{
-+ if (role == ThumbnailRole && d->thread && index.isValid())
-+ {
-+ QPixmap thumbnail;
-+ ImageInfo info = imageInfo(index);
-+ QString path = info.filePath();
-+
-+ if (info.isNull())
-+ {
-+ return QVariant(QVariant::Pixmap);
-+ }
-+
-+ if (!d->detailRect.isNull())
-+ {
-+ if (d->thread->find(info.thumbnailIdentifier(), d->detailRect, thumbnail, d->thumbSize.size()))
-+ {
-+ return thumbnail;
-+ }
-+ }
-+ else
-+ {
-+ if (d->thread->find(info.thumbnailIdentifier(), thumbnail, d->thumbSize.size()))
-+ {
-+ return thumbnail;
-+ }
-+ }
-+
-+ return QVariant(QVariant::Pixmap);
-+ }
-+
-+ return ImageModel::data(index, role);
-+}
-+
-+bool ImageThumbnailModel::setData(const QModelIndex& index, const QVariant& value, int role)
-+{
-+ if (role == ThumbnailRole)
-+ {
-+ switch (value.type())
-+ {
-+ case QVariant::Invalid:
-+ d->thumbSize = d->lastGlobalThumbSize;
-+ d->detailRect = QRect();
-+ break;
-+
-+ case QVariant::Int:
-+
-+ if (value.isNull())
-+ {
-+ d->thumbSize = d->lastGlobalThumbSize;
-+ }
-+ else
-+ {
-+ d->thumbSize = value.toInt();
-+ }
-+ break;
-+
-+ case QVariant::Rect:
-+
-+ if (value.isNull())
-+ {
-+ d->detailRect = QRect();
-+ }
-+ else
-+ {
-+ d->detailRect = value.toRect();
-+ }
-+ break;
-+
-+ default:
-+ break;
-+ }
-+ }
-+
-+ return ImageModel::setData(index, value, role);
-+}
-+
-+void ImageThumbnailModel::slotThumbnailLoaded(const LoadingDescription& loadingDescription, const QPixmap& thumb)
-+{
-+ if (thumb.isNull())
-+ {
-+ return;
-+ }
-+
-+ // In case of multiple occurrence, we currently do not know which thumbnail is this. Signal change on all.
-+ QModelIndexList indexes;
-+ ThumbnailIdentifier thumbId = loadingDescription.thumbnailIdentifier();
-+ if (thumbId.filePath.isEmpty())
-+ {
-+ indexes = indexesForImageId(thumbId.id);
-+ }
-+ else
-+ {
-+ indexes = indexesForPath(thumbId.filePath);
-+ }
-+ foreach(const QModelIndex& index, indexes)
-+ {
-+ if (thumb.isNull())
-+ {
-+ emit thumbnailFailed(index, loadingDescription.previewParameters.size);
-+ }
-+ else
-+ {
-+ emit thumbnailAvailable(index, loadingDescription.previewParameters.size);
-+
-+ if (d->emitDataChanged)
-+ {
-+ emit dataChanged(index, index, d->staticListContainingThumbnailRole);
-+ }
-+ }
-+ }
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imagethumbnailmodel.h b/libs/database/models/imagethumbnailmodel.h
-new file mode 100644
-index 0000000..366ca65
---- /dev/null
-+++ b/libs/database/models/imagethumbnailmodel.h
-@@ -0,0 +1,140 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2009-03-05
-+ * Description : Qt item model for database entries with support for thumbnail loading
-+ *
-+ * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-+ * Copyright (C) 2011 by Gilles Caulier <caulier dot gilles at gmail dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGETHUMBNAILMODEL_H
-+#define IMAGETHUMBNAILMODEL_H
-+
-+// Local includes
-+
-+#include "imagemodel.h"
-+#include "thumbnailsize.h"
-+#include "digikam_export.h"
-+
-+namespace Digikam
-+{
-+
-+class LoadingDescription;
-+class ThumbnailLoadThread;
-+
-+class DIGIKAM_DATABASE_EXPORT ImageThumbnailModel : public ImageModel
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ /**
-+ * An ImageModel that supports thumbnail loading.
-+ * You need to set a ThumbnailLoadThread to enable thumbnail loading.
-+ * Adjust the thumbnail size to your needs.
-+ * Note that setKeepsFilePathCache is enabled per default.
-+ */
-+ explicit ImageThumbnailModel(QObject* parent);
-+ ~ImageThumbnailModel();
-+
-+ /** Enable thumbnail loading and set the thread that shall be used.
-+ * The thumbnail size of this thread will be adjusted.
-+ */
-+ void setThumbnailLoadThread(ThumbnailLoadThread* thread);
-+ ThumbnailLoadThread* thumbnailLoadThread() const;
-+
-+ /// Set the thumbnail size to use
-+ void setThumbnailSize(const ThumbnailSize& thumbSize);
-+
-+ /// If you want to fix a size for preloading, do it here.
-+ void setPreloadThumbnailSize(const ThumbnailSize& thumbSize);
-+
-+ void setExifRotate(bool rotate);
-+
-+ /**
-+ * Enable emitting dataChanged() when a thumbnail becomes available.
-+ * The thumbnailAvailable() signal will be emitted in any case.
-+ * Default is true.
-+ */
-+ void setEmitDataChanged(bool emitSignal);
-+
-+ /**
-+ * Enable preloading of thumbnails:
-+ * If preloading is enabled, for every entry in the model a thumbnail generation is started.
-+ * Default: false.
-+ */
-+ void setPreloadThumbnails(bool preload);
-+
-+ ThumbnailSize thumbnailSize() const;
-+
-+ /**
-+ * Handles the ThumbnailRole.
-+ * If the pixmap is available, returns it in the QVariant.
-+ * If it still needs to be loaded, returns a null QVariant and emits
-+ * thumbnailAvailable() as soon as it is available.
-+ */
-+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-+
-+ /**
-+ * You can override the current thumbnail size by giving an integer value for ThumbnailRole.
-+ * Set a null QVariant to use the thumbnail size set by setThumbnailSize() again.
-+ * The index given here is ignored for this purpose.
-+ */
-+ virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::DisplayRole);
-+
-+public Q_SLOTS:
-+
-+ /** Prepare the thumbnail loading for the given indexes
-+ */
-+ void prepareThumbnails(const QList<QModelIndex>& indexesToPrepare);
-+ void prepareThumbnails(const QList<QModelIndex>& indexesToPrepare, const ThumbnailSize& thumbSize);
-+
-+ /**
-+ * Preload thumbnail for the given infos resp. indexes.
-+ * Note: Use setPreloadThumbnails to automatically preload all entries in the model.
-+ * Note: This only ensures thumbnail generation. It is not guaranteed that pixmaps
-+ * are stored in the cache. For thumbnails that are expect to be drawn immediately,
-+ * include them in prepareThumbnails().
-+ * Note: Stops preloading of previously added thumbnails.
-+ */
-+ void preloadThumbnails(const QList<ImageInfo>&);
-+ void preloadThumbnails(const QList<QModelIndex>&);
-+ void preloadAllThumbnails();
-+
-+Q_SIGNALS:
-+
-+ void thumbnailAvailable(const QModelIndex& index, int requestedSize);
-+ void thumbnailFailed(const QModelIndex& index, int requestedSize);
-+
-+protected:
-+
-+ virtual void imageInfosCleared();
-+
-+protected Q_SLOTS:
-+
-+ void slotThumbnailLoaded(const LoadingDescription& loadingDescription, const QPixmap& thumb);
-+
-+private:
-+
-+ class ImageThumbnailModelPriv;
-+ ImageThumbnailModelPriv* const d;
-+};
-+
-+} // namespace Digikam
-+
-+#endif /* IMAGETHUMBNAILMODEL_H */
-diff --git a/libs/database/models/imageversionsmodel.cpp b/libs/database/models/imageversionsmodel.cpp
-new file mode 100644
-index 0000000..e6ba582
---- /dev/null
-+++ b/libs/database/models/imageversionsmodel.cpp
-@@ -0,0 +1,183 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2010-07-13
-+ * Description : Model for image versions
-+ *
-+ * Copyright (C) 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#include "imageversionsmodel.h"
-+
-+// KDE includes
-+
-+#include <klocalizedstring.h>
-+
-+// Local includes
-+
-+#include "digikam_debug.h"
-+#include "workingwidget.h"
-+
-+namespace Digikam
-+{
-+
-+class ImageVersionsModel::Private
-+{
-+public:
-+
-+ Private()
-+ {
-+ data = 0;
-+ paintTree = false;
-+ }
-+
-+ ///Complete paths with filenames and tree level
-+ QList<QPair<QString, int> >* data;
-+ ///This is for delegate to paint it as selected
-+ QString currentSelectedImage;
-+ ///If true, the delegate will paint items as a tree
-+ ///if false, it will be painted as a list
-+ bool paintTree;
-+};
-+
-+ImageVersionsModel::ImageVersionsModel(QObject* parent)
-+ : QAbstractListModel(parent),
-+ d(new Private)
-+{
-+ d->data = new QList<QPair<QString, int> >;
-+}
-+
-+ImageVersionsModel::~ImageVersionsModel()
-+{
-+ //qDeleteAll(d->data);
-+ delete d;
-+}
-+
-+Qt::ItemFlags ImageVersionsModel::flags(const QModelIndex& index) const
-+{
-+ if (!index.isValid())
-+ {
-+ return 0;
-+ }
-+
-+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
-+}
-+
-+QVariant ImageVersionsModel::data(const QModelIndex& index, int role) const
-+{
-+ if (!index.isValid())
-+ {
-+ return QVariant();
-+ }
-+
-+ if (role == Qt::DisplayRole && !d->data->isEmpty())
-+ {
-+ return d->data->at(index.row()).first;
-+ }
-+ else if (role == Qt::UserRole && !d->data->isEmpty())
-+ {
-+ return d->data->at(index.row()).second;
-+ }
-+ else if (role == Qt::DisplayRole && d->data->isEmpty())
-+ {
-+ //TODO: make this text Italic
-+ return QVariant(QString(i18n("No image selected")));
-+ }
-+
-+ return QVariant();
-+}
-+
-+int ImageVersionsModel::rowCount(const QModelIndex& parent) const
-+{
-+ Q_UNUSED(parent)
-+ return d->data->count();
-+}
-+
-+void ImageVersionsModel::setupModelData(QList<QPair<QString, int> >& data)
-+{
-+ beginResetModel();
-+
-+ d->data->clear();
-+
-+ if (!data.isEmpty())
-+ {
-+ d->data->append(data);
-+ }
-+ else
-+ {
-+ d->data->append(qMakePair(QString(i18n("This is the original image")), 0));
-+ }
-+
-+ endResetModel();
-+}
-+
-+void ImageVersionsModel::clearModelData()
-+{
-+ beginResetModel();
-+
-+ if (!d->data->isEmpty())
-+ {
-+ d->data->clear();
-+ }
-+
-+ endResetModel();
-+}
-+
-+void ImageVersionsModel::slotAnimationStep()
-+{
-+ emit dataChanged(createIndex(0, 0), createIndex(rowCount()-1, 1));
-+}
-+
-+QString ImageVersionsModel::currentSelectedImage() const
-+{
-+ return d->currentSelectedImage;
-+}
-+
-+void ImageVersionsModel::setCurrentSelectedImage(const QString& path)
-+{
-+ d->currentSelectedImage = path;
-+}
-+
-+QModelIndex ImageVersionsModel::currentSelectedImageIndex() const
-+{
-+ return index(listIndexOf(d->currentSelectedImage), 0);
-+}
-+
-+bool ImageVersionsModel::paintTree() const
-+{
-+ return d->paintTree;
-+}
-+
-+void ImageVersionsModel::setPaintTree(bool paint)
-+{
-+ d->paintTree = paint;
-+}
-+
-+int ImageVersionsModel::listIndexOf(const QString& item) const
-+{
-+ for (int i = 0; i < d->data->size(); ++i)
-+ {
-+ if (d->data->at(i).first == item)
-+ {
-+ return i;
-+ }
-+ }
-+
-+ return -1;
-+}
-+
-+} // namespace Digikam
-diff --git a/libs/database/models/imageversionsmodel.h b/libs/database/models/imageversionsmodel.h
-new file mode 100644
-index 0000000..ed08529
---- /dev/null
-+++ b/libs/database/models/imageversionsmodel.h
-@@ -0,0 +1,75 @@
-+/* ============================================================
-+ *
-+ * This file is a part of digiKam project
-+ * http://www.digikam.org
-+ *
-+ * Date : 2010-07-13
-+ * Description : Model for image versions
-+ *
-+ * Copyright (C) 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
-+ *
-+ * This program 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, or (at your option)
-+ * any later version.
-+ *
-+ * This program 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.
-+ *
-+ * ============================================================ */
-+
-+#ifndef IMAGEVERSIONSMODEL_H
-+#define IMAGEVERSIONSMODEL_H
-+
-+// Qt includes
-+
-+#include <QModelIndex>
-+#include <QPixmap>
-+
-+// Local includes
-+
-+#include "digikam_export.h"
-+
-+namespace Digikam
-+{
-+
-+class DIGIKAM_DATABASE_EXPORT ImageVersionsModel : public QAbstractListModel
-+{
-+ Q_OBJECT
-+
-+public:
-+
-+ explicit ImageVersionsModel(QObject* parent = 0);
-+ ~ImageVersionsModel();
-+
-+ Qt::ItemFlags flags(const QModelIndex& index) const;
-+ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-+ int rowCount(const QModelIndex& parent = QModelIndex()) const;
-+
-+ void setupModelData(QList<QPair<QString, int> >& data);
-+ void clearModelData();
-+
-+ QString currentSelectedImage() const;
-+ void setCurrentSelectedImage(const QString& path);
-+ QModelIndex currentSelectedImageIndex() const;
-+
-+ bool paintTree() const;
-+ int listIndexOf(const QString& item) const;
-+
-+public Q_SLOTS:
-+
-+ void slotAnimationStep();
-+ void setPaintTree(bool paint);
-+
-+private:
-+
-+ class Private;
-+ Private* const d;
-+};
-+
-+} // namespace Digikam
-+
-+#endif // IMAGEVERSIONSMODEL_H
-diff --git a/libs/models/CMakeLists.txt b/libs/models/CMakeLists.txt
-index cbabfaa..804456b 100644
---- a/libs/models/CMakeLists.txt
-+++ b/libs/models/CMakeLists.txt
-@@ -9,18 +9,6 @@ if (POLICY CMP0063)
- cmake_policy(SET CMP0063 NEW)
- endif (POLICY CMP0063)
-
--set(libdatabasemodels_SRCS
-- imagemodel.cpp
-- imagefiltermodel.cpp
-- imagefiltermodelpriv.cpp
-- imagefiltermodelthreads.cpp
-- imagefiltersettings.cpp
-- imagelistmodel.cpp
-- imagesortsettings.cpp
-- imagethumbnailmodel.cpp
-- imageversionsmodel.cpp
--)
--
- set(libalbummodels_SRCS
- imagealbummodel.cpp
- imagealbumfiltermodel.cpp
-@@ -52,5 +40,4 @@ endif()
- #for digikam core lib
- add_library(digikamgenericmodels_src OBJECT ${libgenericmodels_SRCS})
-
--add_library(digikamdatabasemodels_src OBJECT ${libdatabasemodels_SRCS})
--add_library(digikammodels_src OBJECT ${libalbummodels_SRCS} ${libgenericmodels_SRCS})
-+add_library(digikammodels_src OBJECT ${libalbummodels_SRCS} ${libgenericmodels_SRCS})
-diff --git a/libs/models/imagefiltermodel.cpp b/libs/models/imagefiltermodel.cpp
-deleted file mode 100644
-index 3d57e05..0000000
---- a/libs/models/imagefiltermodel.cpp
-+++ /dev/null
-@@ -1,1116 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-- * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagefiltermodel.h"
--#include "imagefiltermodelpriv.h"
--#include "imagefiltermodelthreads.h"
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "coredbaccess.h"
--#include "coredbchangesets.h"
--#include "coredbwatch.h"
--#include "imageinfolist.h"
--#include "imagemodel.h"
--
--namespace Digikam
--{
--
--ImageSortFilterModel::ImageSortFilterModel(QObject* parent)
-- : DCategorizedSortFilterProxyModel(parent), m_chainedModel(0)
--{
--}
--
--void ImageSortFilterModel::setSourceImageModel(ImageModel* source)
--{
-- if (m_chainedModel)
-- {
-- m_chainedModel->setSourceImageModel(source);
-- }
-- else
-- {
-- setDirectSourceImageModel(source);
-- }
--}
--
--void ImageSortFilterModel::setSourceFilterModel(ImageSortFilterModel* source)
--{
-- if (source)
-- {
-- ImageModel* const model = sourceImageModel();
--
-- if (model)
-- {
-- source->setSourceImageModel(model);
-- }
-- }
--
-- m_chainedModel = source;
-- setSourceModel(source);
--}
--
--void ImageSortFilterModel::setDirectSourceImageModel(ImageModel* model)
--{
-- setSourceModel(model);
--}
--
--void ImageSortFilterModel::setSourceModel(QAbstractItemModel* model)
--{
-- // made it protected, only setSourceImageModel is public
-- DCategorizedSortFilterProxyModel::setSourceModel(model);
--}
--
--ImageModel* ImageSortFilterModel::sourceImageModel() const
--{
-- if (m_chainedModel)
-- {
-- return m_chainedModel->sourceImageModel();
-- }
--
-- return static_cast<ImageModel*>(sourceModel());
--}
--
--ImageSortFilterModel* ImageSortFilterModel::sourceFilterModel() const
--{
-- return m_chainedModel;
--}
--
--ImageFilterModel* ImageSortFilterModel::imageFilterModel() const
--{
-- // reimplemented in ImageFilterModel
-- if (m_chainedModel)
-- {
-- return m_chainedModel->imageFilterModel();
-- }
--
-- return 0;
--}
--
--QModelIndex ImageSortFilterModel::mapToSourceImageModel(const QModelIndex& index) const
--{
-- if (m_chainedModel)
-- {
-- return m_chainedModel->mapToSourceImageModel(mapToSource(index));
-- }
--
-- return mapToSource(index);
--}
--
--QModelIndex ImageSortFilterModel::mapFromSourceImageModel(const QModelIndex& albummodel_index) const
--{
-- if (m_chainedModel)
-- {
-- return mapFromSource(m_chainedModel->mapFromSourceImageModel(albummodel_index));
-- }
--
-- return mapFromSource(albummodel_index);
--}
--
--
--QModelIndex ImageSortFilterModel::mapFromDirectSourceToSourceImageModel(const QModelIndex& sourceModel_index) const
--{
-- if (m_chainedModel)
-- {
-- return m_chainedModel->mapToSourceImageModel(sourceModel_index);
-- }
-- return sourceModel_index;
--}
--
--// -------------- Convenience mappers -------------------------------------------------------------------
--
--QList<QModelIndex> ImageSortFilterModel::mapListToSource(const QList<QModelIndex>& indexes) const
--{
-- QList<QModelIndex> sourceIndexes;
-- foreach(const QModelIndex& index, indexes)
-- {
-- sourceIndexes << mapToSourceImageModel(index);
-- }
-- return sourceIndexes;
--}
--
--QList<QModelIndex> ImageSortFilterModel::mapListFromSource(const QList<QModelIndex>& sourceIndexes) const
--{
-- QList<QModelIndex> indexes;
-- foreach(const QModelIndex& index, sourceIndexes)
-- {
-- indexes << mapFromSourceImageModel(index);
-- }
-- return indexes;
--}
--
--ImageInfo ImageSortFilterModel::imageInfo(const QModelIndex& index) const
--{
-- return sourceImageModel()->imageInfo(mapToSourceImageModel(index));
--}
--
--qlonglong ImageSortFilterModel::imageId(const QModelIndex& index) const
--{
-- return sourceImageModel()->imageId(mapToSourceImageModel(index));
--}
--
--QList<ImageInfo> ImageSortFilterModel::imageInfos(const QList<QModelIndex>& indexes) const
--{
-- QList<ImageInfo> infos;
-- ImageModel* const model = sourceImageModel();
--
-- foreach(const QModelIndex& index, indexes)
-- {
-- infos << model->imageInfo(mapToSourceImageModel(index));
-- }
--
-- return infos;
--}
--
--QList<qlonglong> ImageSortFilterModel::imageIds(const QList<QModelIndex>& indexes) const
--{
-- QList<qlonglong> ids;
-- ImageModel* const model = sourceImageModel();
--
-- foreach(const QModelIndex& index, indexes)
-- {
-- ids << model->imageId(mapToSourceImageModel(index));
-- }
--
-- return ids;
--}
--
--QModelIndex ImageSortFilterModel::indexForPath(const QString& filePath) const
--{
-- return mapFromSourceImageModel(sourceImageModel()->indexForPath(filePath));
--}
--
--QModelIndex ImageSortFilterModel::indexForImageInfo(const ImageInfo& info) const
--{
-- return mapFromSourceImageModel(sourceImageModel()->indexForImageInfo(info));
--}
--
--QModelIndex ImageSortFilterModel::indexForImageId(qlonglong id) const
--{
-- return mapFromSourceImageModel(sourceImageModel()->indexForImageId(id));
--}
--
--QList<ImageInfo> ImageSortFilterModel::imageInfosSorted() const
--{
-- QList<ImageInfo> infos;
-- const int size = rowCount();
-- ImageModel* const model = sourceImageModel();
--
-- for (int i=0; i<size; ++i)
-- {
-- infos << model->imageInfo(mapToSourceImageModel(index(i, 0)));
-- }
--
-- return infos;
--}
--
--// --------------------------------------------------------------------------------------------
--
--ImageFilterModel::ImageFilterModel(QObject* parent)
-- : ImageSortFilterModel(parent),
-- d_ptr(new ImageFilterModelPrivate)
--{
-- d_ptr->init(this);
--}
--
--ImageFilterModel::ImageFilterModel(ImageFilterModelPrivate& dd, QObject* parent)
-- : ImageSortFilterModel(parent),
-- d_ptr(&dd)
--{
-- d_ptr->init(this);
--}
--
--ImageFilterModel::~ImageFilterModel()
--{
-- Q_D(ImageFilterModel);
-- delete d;
--}
--
--void ImageFilterModel::setDirectSourceImageModel(ImageModel* sourceModel)
--{
-- Q_D(ImageFilterModel);
--
-- if (d->imageModel)
-- {
-- d->imageModel->unsetPreprocessor(d);
-- disconnect(d->imageModel, SIGNAL(modelReset()),
-- this, SLOT(slotModelReset()));
-- slotModelReset();
-- }
--
-- d->imageModel = sourceModel;
--
-- if (d->imageModel)
-- {
-- d->imageModel->setPreprocessor(d);
--
-- connect(d->imageModel, SIGNAL(preprocess(QList<ImageInfo>,QList<QVariant>)),
-- d, SLOT(preprocessInfos(QList<ImageInfo>,QList<QVariant>)));
--
-- connect(d->imageModel, SIGNAL(processAdded(QList<ImageInfo>,QList<QVariant>)),
-- d, SLOT(processAddedInfos(QList<ImageInfo>,QList<QVariant>)));
--
-- connect(d, SIGNAL(reAddImageInfos(QList<ImageInfo>,QList<QVariant>)),
-- d->imageModel, SLOT(reAddImageInfos(QList<ImageInfo>,QList<QVariant>)));
--
-- connect(d, SIGNAL(reAddingFinished()),
-- d->imageModel, SLOT(reAddingFinished()));
--
-- connect(d->imageModel, SIGNAL(modelReset()),
-- this, SLOT(slotModelReset()));
--
-- connect(d->imageModel, SIGNAL(imageChange(ImageChangeset,QItemSelection)),
-- this, SLOT(slotImageChange(ImageChangeset)));
--
-- connect(d->imageModel, SIGNAL(imageTagChange(ImageTagChangeset,QItemSelection)),
-- this, SLOT(slotImageTagChange(ImageTagChangeset)));
-- }
--
-- setSourceModel(d->imageModel);
--}
--
--QVariant ImageFilterModel::data(const QModelIndex& index, int role) const
--{
-- Q_D(const ImageFilterModel);
--
-- if (!index.isValid())
-- {
-- return QVariant();
-- }
--
-- switch (role)
-- {
-- // Attention: This breaks should there ever be another filter model between this and the ImageModel
--
-- case DCategorizedSortFilterProxyModel::CategoryDisplayRole:
-- return categoryIdentifier(d->imageModel->imageInfoRef(mapToSource(index)));
-- case CategorizationModeRole:
-- return d->sorter.categorizationMode;
-- case SortOrderRole:
-- return d->sorter.sortRole;
-- //case CategoryCountRole:
-- // return categoryCount(d->imageModel->imageInfoRef(mapToSource(index)));
-- case CategoryAlbumIdRole:
-- return d->imageModel->imageInfoRef(mapToSource(index)).albumId();
-- case CategoryFormatRole:
-- return d->imageModel->imageInfoRef(mapToSource(index)).format();
-- case GroupIsOpenRole:
-- return d->groupFilter.isAllOpen() ||
-- d->groupFilter.isOpen(d->imageModel->imageInfoRef(mapToSource(index)).id());
-- case ImageFilterModelPointerRole:
-- return QVariant::fromValue(const_cast<ImageFilterModel*>(this));
-- }
--
-- return DCategorizedSortFilterProxyModel::data(index, role);
--}
--
--ImageFilterModel* ImageFilterModel::imageFilterModel() const
--{
-- return const_cast<ImageFilterModel*>(this);
--}
--
--DatabaseFields::Set ImageFilterModel::suggestedWatchFlags() const
--{
-- DatabaseFields::Set watchFlags;
-- watchFlags |= DatabaseFields::Name | DatabaseFields::FileSize | DatabaseFields::ModificationDate;
-- watchFlags |= DatabaseFields::Rating | DatabaseFields::CreationDate | DatabaseFields::Orientation |
-- DatabaseFields::Width | DatabaseFields::Height;
-- watchFlags |= DatabaseFields::Comment;
-- watchFlags |= DatabaseFields::ImageRelations;
-- return watchFlags;
--}
--
--// -------------- Filter settings --------------
--
--void ImageFilterModel::setDayFilter(const QList<QDateTime>& days)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setDayFilter(days);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setTagFilter(const QList<int>& includedTags, const QList<int>& excludedTags,
-- ImageFilterSettings::MatchingCondition matchingCond,
-- bool showUnTagged, const QList<int>& clTagIds, const QList<int>& plTagIds)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setTagFilter(includedTags, excludedTags, matchingCond, showUnTagged, clTagIds, plTagIds);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setRatingFilter(int rating, ImageFilterSettings::RatingCondition ratingCond, bool isUnratedExcluded)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setRatingFilter(rating, ratingCond, isUnratedExcluded);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setUrlWhitelist(const QList<QUrl> urlList, const QString& id)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setUrlWhitelist(urlList, id);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setIdWhitelist(const QList<qlonglong>& idList, const QString& id)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setIdWhitelist(idList, id);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setMimeTypeFilter(int mimeTypeFilter)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setMimeTypeFilter(mimeTypeFilter);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setGeolocationFilter(const ImageFilterSettings::GeolocationCondition& condition)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setGeolocationFilter(condition);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setTextFilter(const SearchTextFilterSettings& settings)
--{
-- Q_D(ImageFilterModel);
-- d->filter.setTextFilter(settings);
-- setImageFilterSettings(d->filter);
--}
--
--void ImageFilterModel::setImageFilterSettings(const ImageFilterSettings& settings)
--{
-- Q_D(ImageFilterModel);
--
-- {
-- QMutexLocker lock(&d->mutex);
-- d->version++;
-- d->filter = settings;
-- d->filterCopy = settings;
-- d->versionFilterCopy = d->versionFilter;
-- d->groupFilterCopy = d->groupFilter;
--
-- d->needPrepareComments = settings.isFilteringByText();
-- d->needPrepareTags = settings.isFilteringByTags();
-- d->needPrepareGroups = true;
-- d->needPrepare = d->needPrepareComments || d->needPrepareTags || d->needPrepareGroups;
--
-- d->hasOneMatch = false;
-- d->hasOneMatchForText = false;
-- }
--
-- d->filterResults.clear();
--
-- //d->categoryCountHashInt.clear();
-- //d->categoryCountHashString.clear();
-- if (d->imageModel)
-- {
-- d->infosToProcess(d->imageModel->imageInfos());
-- }
--
-- emit filterSettingsChanged(settings);
--}
--
--void ImageFilterModel::setVersionManagerSettings(const VersionManagerSettings& settings)
--{
-- Q_D(ImageFilterModel);
-- d->versionFilter.setVersionManagerSettings(settings);
-- setVersionImageFilterSettings(d->versionFilter);
--}
--
--void ImageFilterModel::setExceptionList(const QList<qlonglong>& idList, const QString& id)
--{
-- Q_D(ImageFilterModel);
-- d->versionFilter.setExceptionList(idList, id);
-- setVersionImageFilterSettings(d->versionFilter);
--}
--
--void ImageFilterModel::setVersionImageFilterSettings(const VersionImageFilterSettings& settings)
--{
-- Q_D(ImageFilterModel);
-- d->versionFilter = settings;
-- slotUpdateFilter();
--}
--
--bool ImageFilterModel::isGroupOpen(qlonglong group) const
--{
-- Q_D(const ImageFilterModel);
-- return d->groupFilter.isOpen(group);
--}
--
--bool ImageFilterModel::isAllGroupsOpen() const
--{
-- Q_D(const ImageFilterModel);
-- return d->groupFilter.isAllOpen();
--}
--
--void ImageFilterModel::setGroupOpen(qlonglong group, bool open)
--{
-- Q_D(ImageFilterModel);
-- d->groupFilter.setOpen(group, open);
-- setGroupImageFilterSettings(d->groupFilter);
--}
--
--void ImageFilterModel::toggleGroupOpen(qlonglong group)
--{
-- setGroupOpen(group, !isGroupOpen(group));
--}
--
--void ImageFilterModel::setAllGroupsOpen(bool open)
--{
-- Q_D(ImageFilterModel);
-- d->groupFilter.setAllOpen(open);
-- setGroupImageFilterSettings(d->groupFilter);
--}
--
--void ImageFilterModel::setGroupImageFilterSettings(const GroupImageFilterSettings& settings)
--{
-- Q_D(ImageFilterModel);
-- d->groupFilter = settings;
-- slotUpdateFilter();
--}
--
--void ImageFilterModel::slotUpdateFilter()
--{
-- Q_D(ImageFilterModel);
-- setImageFilterSettings(d->filter);
--}
--
--ImageFilterSettings ImageFilterModel::imageFilterSettings() const
--{
-- Q_D(const ImageFilterModel);
-- return d->filter;
--}
--
--ImageSortSettings ImageFilterModel::imageSortSettings() const
--{
-- Q_D(const ImageFilterModel);
-- return d->sorter;
--}
--
--VersionImageFilterSettings ImageFilterModel::versionImageFilterSettings() const
--{
-- Q_D(const ImageFilterModel);
-- return d->versionFilter;
--}
--
--GroupImageFilterSettings ImageFilterModel::groupImageFilterSettings() const
--{
-- Q_D(const ImageFilterModel);
-- return d->groupFilter;
--}
--
--void ImageFilterModel::slotModelReset()
--{
-- Q_D(ImageFilterModel);
-- {
-- QMutexLocker lock(&d->mutex);
-- // discard all packages on the way that are marked as send out for re-add
-- d->lastDiscardVersion = d->version;
-- d->sentOutForReAdd = 0;
-- // discard all packages on the way
-- d->version++;
-- d->sentOut = 0;
--
-- d->hasOneMatch = false;
-- d->hasOneMatchForText = false;
-- }
-- d->filterResults.clear();
--}
--
--bool ImageFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
--{
-- Q_D(const ImageFilterModel);
--
-- if (source_parent.isValid())
-- {
-- return false;
-- }
--
-- qlonglong id = d->imageModel->imageId(source_row);
-- QHash<qlonglong, bool>::const_iterator it = d->filterResults.constFind(id);
--
-- if (it != d->filterResults.constEnd())
-- {
-- return it.value();
-- }
--
-- // usually done in thread and cache, unless source model changed
-- ImageInfo info = d->imageModel->imageInfo(source_row);
-- bool match = d->filter.matches(info);
-- match = match ? d->versionFilter.matches(info) : false;
--
-- return match ? d->groupFilter.matches(info) : false;
--}
--
--void ImageFilterModel::setSendImageInfoSignals(bool sendSignals)
--{
-- if (sendSignals)
-- {
-- connect(this, SIGNAL(rowsInserted(QModelIndex,int,int)),
-- this, SLOT(slotRowsInserted(QModelIndex,int,int)));
--
-- connect(this, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-- this, SLOT(slotRowsAboutToBeRemoved(QModelIndex,int,int)));
-- }
-- else
-- {
-- disconnect(this, SIGNAL(rowsInserted(QModelIndex,int,int)),
-- this, SLOT(slotRowsInserted(QModelIndex,int,int)));
--
-- disconnect(this, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-- this, SLOT(slotRowsAboutToBeRemoved(QModelIndex,int,int)));
-- }
--}
--
--void ImageFilterModel::slotRowsInserted(const QModelIndex& /*parent*/, int start, int end)
--{
-- QList<ImageInfo> infos;
--
-- for (int i=start; i<=end; ++i)
-- {
-- infos << imageInfo(index(i, 0));
-- }
--
-- emit imageInfosAdded(infos);
--}
--
--void ImageFilterModel::slotRowsAboutToBeRemoved(const QModelIndex& /*parent*/, int start, int end)
--{
-- QList<ImageInfo> infos;
--
-- for (int i=start; i<=end; ++i)
-- {
-- infos << imageInfo(index(i, 0));
-- }
--
-- emit imageInfosAboutToBeRemoved(infos);
--}
--
--// -------------- Threaded preparation & filtering --------------
--
--void ImageFilterModel::addPrepareHook(ImageFilterModelPrepareHook* hook)
--{
-- Q_D(ImageFilterModel);
-- QMutexLocker lock(&d->mutex);
-- d->prepareHooks << hook;
--}
--
--void ImageFilterModel::removePrepareHook(ImageFilterModelPrepareHook* hook)
--{
-- Q_D(ImageFilterModel);
-- QMutexLocker lock(&d->mutex);
-- d->prepareHooks.removeAll(hook);
--}
--
--void ImageFilterModelPreparer::process(ImageFilterModelTodoPackage package)
--{
-- if (!checkVersion(package))
-- {
-- emit discarded(package);
-- return;
-- }
--
-- // get thread-local copy
-- bool needPrepareTags, needPrepareComments, needPrepareGroups;
-- QList<ImageFilterModelPrepareHook*> prepareHooks;
-- {
-- QMutexLocker lock(&d->mutex);
-- needPrepareTags = d->needPrepareTags;
-- needPrepareComments = d->needPrepareComments;
-- needPrepareGroups = d->needPrepareGroups;
-- prepareHooks = d->prepareHooks;
-- }
--
-- //TODO: Make efficient!!
-- if (needPrepareComments)
-- {
-- foreach(const ImageInfo& info, package.infos)
-- {
-- info.comment();
-- }
-- }
--
-- if (!checkVersion(package))
-- {
-- emit discarded(package);
-- return;
-- }
--
-- // The downside of QVector: At some point, we may need a QList for an API.
-- // Nonetheless, QList and ImageInfo is fast. We could as well
-- // reimplement ImageInfoList to ImageInfoVector (internally with templates?)
-- ImageInfoList infoList;
--
-- if (needPrepareTags || needPrepareGroups)
-- {
-- infoList = package.infos.toList();
-- }
--
-- if (needPrepareTags)
-- {
-- infoList.loadTagIds();
-- }
--
-- if (needPrepareGroups)
-- {
-- infoList.loadGroupImageIds();
-- }
--
-- foreach(ImageFilterModelPrepareHook* hook, prepareHooks)
-- {
-- hook->prepare(package.infos);
-- }
--
-- emit processed(package);
--}
--
--void ImageFilterModelFilterer::process(ImageFilterModelTodoPackage package)
--{
-- if (!checkVersion(package))
-- {
-- emit discarded(package);
-- return;
-- }
--
-- // get thread-local copy
-- ImageFilterSettings localFilter;
-- VersionImageFilterSettings localVersionFilter;
-- GroupImageFilterSettings localGroupFilter;
-- bool hasOneMatch;
-- bool hasOneMatchForText;
-- {
-- QMutexLocker lock(&d->mutex);
-- localFilter = d->filterCopy;
-- localVersionFilter = d->versionFilterCopy;
-- localGroupFilter = d->groupFilterCopy;
-- hasOneMatch = d->hasOneMatch;
-- hasOneMatchForText = d->hasOneMatchForText;
-- }
--
-- // Actual filtering. The variants to spare checking hasOneMatch over and over again.
-- if (hasOneMatch && hasOneMatchForText)
-- {
-- foreach(const ImageInfo& info, package.infos)
-- {
-- package.filterResults[info.id()] = localFilter.matches(info) &&
-- localVersionFilter.matches(info) &&
-- localGroupFilter.matches(info);
-- }
-- }
-- else if (hasOneMatch)
-- {
-- bool matchForText;
--
-- foreach(const ImageInfo& info, package.infos)
-- {
-- package.filterResults[info.id()] = localFilter.matches(info, &matchForText) &&
-- localVersionFilter.matches(info) &&
-- localGroupFilter.matches(info);
--
-- if (matchForText)
-- {
-- hasOneMatchForText = true;
-- }
-- }
-- }
-- else
-- {
-- bool result, matchForText;
--
-- foreach(const ImageInfo& info, package.infos)
-- {
-- result = localFilter.matches(info, &matchForText) &&
-- localVersionFilter.matches(info) &&
-- localGroupFilter.matches(info);
-- package.filterResults[info.id()] = result;
--
-- if (result)
-- {
-- hasOneMatch = true;
-- }
--
-- if (matchForText)
-- {
-- hasOneMatchForText = true;
-- }
-- }
-- }
--
-- if (checkVersion(package))
-- {
-- QMutexLocker lock(&d->mutex);
-- d->hasOneMatch = hasOneMatch;
-- d->hasOneMatchForText = hasOneMatchForText;
-- }
--
-- emit processed(package);
--}
--
--// -------------- Sorting and Categorization -------------------------------------------------------
--
--void ImageFilterModel::setImageSortSettings(const ImageSortSettings& sorter)
--{
-- Q_D(ImageFilterModel);
-- d->sorter = sorter;
-- setCategorizedModel(d->sorter.categorizationMode != ImageSortSettings::NoCategories);
-- invalidate();
--}
--
--void ImageFilterModel::setCategorizationMode(ImageSortSettings::CategorizationMode mode)
--{
-- Q_D(ImageFilterModel);
-- d->sorter.setCategorizationMode(mode);
-- setImageSortSettings(d->sorter);
--}
--
--void ImageFilterModel::setCategorizationSortOrder(ImageSortSettings::SortOrder order)
--{
-- Q_D(ImageFilterModel);
-- d->sorter.setCategorizationSortOrder(order);
-- setImageSortSettings(d->sorter);
--}
--
--void ImageFilterModel::setSortRole(ImageSortSettings::SortRole role)
--{
-- Q_D(ImageFilterModel);
-- d->sorter.setSortRole(role);
-- setImageSortSettings(d->sorter);
--}
--
--void ImageFilterModel::setSortOrder(ImageSortSettings::SortOrder order)
--{
-- Q_D(ImageFilterModel);
-- d->sorter.setSortOrder(order);
-- setImageSortSettings(d->sorter);
--}
--
--void ImageFilterModel::setStringTypeNatural(bool natural)
--{
-- Q_D(ImageFilterModel);
-- d->sorter.setStringTypeNatural(natural);
-- setImageSortSettings(d->sorter);
--}
--
--int ImageFilterModel::compareCategories(const QModelIndex& left, const QModelIndex& right) const
--{
-- // source indexes
-- Q_D(const ImageFilterModel);
--
-- if (!d->sorter.isCategorized())
-- {
-- return 0;
-- }
--
-- if (!left.isValid() || !right.isValid())
-- {
-- return -1;
-- }
--
-- const ImageInfo& leftInfo = d->imageModel->imageInfoRef(left);
-- const ImageInfo& rightInfo = d->imageModel->imageInfoRef(right);
--
-- // Check grouping
-- qlonglong leftGroupImageId = leftInfo.groupImageId();
-- qlonglong rightGroupImageId = rightInfo.groupImageId();
--
-- return compareInfosCategories(leftGroupImageId == -1 ? leftInfo : ImageInfo(leftGroupImageId),
-- rightGroupImageId == -1 ? rightInfo : ImageInfo(rightGroupImageId));
--}
--
--bool ImageFilterModel::subSortLessThan(const QModelIndex& left, const QModelIndex& right) const
--{
-- // source indexes
-- Q_D(const ImageFilterModel);
--
-- if (!left.isValid() || !right.isValid())
-- {
-- return true;
-- }
--
-- if (left == right)
-- {
-- return false;
-- }
--
-- const ImageInfo& leftInfo = d->imageModel->imageInfoRef(left);
-- const ImageInfo& rightInfo = d->imageModel->imageInfoRef(right);
--
-- if (leftInfo == rightInfo)
-- {
-- return d->sorter.lessThan(left.data(ImageModel::ExtraDataRole), right.data(ImageModel::ExtraDataRole));
-- }
--
-- // Check grouping
-- qlonglong leftGroupImageId = leftInfo.groupImageId();
-- qlonglong rightGroupImageId = rightInfo.groupImageId();
--
-- // Either no grouping (-1), or same group image, or same image
-- if (leftGroupImageId == rightGroupImageId)
-- {
-- return infosLessThan(leftInfo, rightInfo);
-- }
--
-- // We have grouping to handle
--
-- // Is one grouped on the other? Sort behind leader.
-- if (leftGroupImageId == rightInfo.id())
-- {
-- return false;
-- }
-- if (rightGroupImageId == leftInfo.id())
-- {
-- return true;
-- }
--
-- // Use the group leader for sorting
-- return infosLessThan(leftGroupImageId == -1 ? leftInfo : ImageInfo(leftGroupImageId),
-- rightGroupImageId == -1 ? rightInfo : ImageInfo(rightGroupImageId));
--}
--
--int ImageFilterModel::compareInfosCategories(const ImageInfo& left, const ImageInfo& right) const
--{
-- // Note: reimplemented in ImageAlbumFilterModel
-- Q_D(const ImageFilterModel);
-- return d->sorter.compareCategories(left, right);
--}
--
--// Feel free to optimize. QString::number is 3x slower.
--static inline QString fastNumberToString(int id)
--{
-- const int size = sizeof(int) * 2;
-- char c[size+1];
-- c[size] = '\0';
-- char* p = c;
-- int number = id;
--
-- for (int i=0; i<size; ++i)
-- {
-- *p = 'a' + (number & 0xF);
-- number >>= 4;
-- ++p;
-- }
--
-- return QString::fromLatin1(c);
--}
--
--QString ImageFilterModel::categoryIdentifier(const ImageInfo& i) const
--{
-- Q_D(const ImageFilterModel);
--
-- if (!d->sorter.isCategorized())
-- {
-- return QString();
-- }
--
-- qlonglong groupedImageId = i.groupImageId();
-- ImageInfo info = groupedImageId == -1 ? i : ImageInfo(groupedImageId);
--
-- switch (d->sorter.categorizationMode)
-- {
-- case ImageSortSettings::NoCategories:
-- return QString();
-- case ImageSortSettings::OneCategory:
-- return QString();
-- case ImageSortSettings::CategoryByAlbum:
-- return fastNumberToString(info.albumId());
-- case ImageSortSettings::CategoryByFormat:
-- return info.format();
-- default:
-- return QString();
-- }
--}
--
--bool ImageFilterModel::infosLessThan(const ImageInfo& left, const ImageInfo& right) const
--{
-- Q_D(const ImageFilterModel);
-- return d->sorter.lessThan(left, right);
--}
--
--// -------------- Watching changes -----------------------------------------------------------------
--
--void ImageFilterModel::slotImageTagChange(const ImageTagChangeset& changeset)
--{
-- Q_D(ImageFilterModel);
--
-- if (!d->imageModel || d->imageModel->isEmpty())
-- {
-- return;
-- }
--
-- // already scheduled to re-filter?
-- if (d->updateFilterTimer->isActive())
-- {
-- return;
-- }
--
-- // do we filter at all?
-- if (!d->versionFilter.isFilteringByTags() &&
-- !d->filter.isFilteringByTags() &&
-- !d->filter.isFilteringByText())
-- {
-- return;
-- }
--
-- // is one of our images affected?
-- foreach(const qlonglong& id, changeset.ids())
-- {
-- // if one matching image id is found, trigger a refresh
-- if (d->imageModel->hasImage(id))
-- {
-- d->updateFilterTimer->start();
-- return;
-- }
-- }
--}
--
--void ImageFilterModel::slotImageChange(const ImageChangeset& changeset)
--{
-- Q_D(ImageFilterModel);
--
-- if (!d->imageModel || d->imageModel->isEmpty())
-- {
-- return;
-- }
--
-- // already scheduled to re-filter?
-- if (d->updateFilterTimer->isActive())
-- {
-- return;
-- }
--
-- // is one of the values affected that we filter or sort by?
-- DatabaseFields::Set set = changeset.changes();
-- bool sortAffected = (set & d->sorter.watchFlags());
-- bool filterAffected = (set & d->filter.watchFlags()) || (set & d->groupFilter.watchFlags());
--
-- if (!sortAffected && !filterAffected)
-- {
-- return;
-- }
--
-- // is one of our images affected?
-- bool imageAffected = false;
--
-- foreach(const qlonglong& id, changeset.ids())
-- {
-- // if one matching image id is found, trigger a refresh
-- if (d->imageModel->hasImage(id))
-- {
-- imageAffected = true;
-- break;
-- }
-- }
--
-- if (!imageAffected)
-- {
-- return;
-- }
--
-- if (filterAffected)
-- {
-- d->updateFilterTimer->start();
-- }
-- else
-- {
-- invalidate(); // just resort, reuse filter results
-- }
--}
--
--// -------------------------------------------------------------------------------------------------------
--
--NoDuplicatesImageFilterModel::NoDuplicatesImageFilterModel(QObject* parent)
-- : ImageSortFilterModel(parent)
--{
--}
--
--bool NoDuplicatesImageFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
--{
-- QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
--
-- if (index.data(ImageModel::ExtraDataDuplicateCount).toInt() <= 1)
-- {
-- return true;
-- }
--
-- QModelIndex previousIndex = sourceModel()->index(source_row - 1, 0, source_parent);
--
-- if (!previousIndex.isValid())
-- {
-- return true;
-- }
--
-- if (sourceImageModel()->imageId(mapFromDirectSourceToSourceImageModel(index)) == sourceImageModel()->imageId(mapFromDirectSourceToSourceImageModel(previousIndex)))
-- {
-- return false;
-- }
-- return true;
--}
--
--/*
--void NoDuplicatesImageFilterModel::setSourceModel(QAbstractItemModel* model)
--{
-- if (sourceModel())
-- {
-- }
--
-- ImageSortFilterModel::setSourceModel(model);
--
-- if (sourceModel())
-- {
-- connect(sourceModel(), SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int)),
-- this, SLOT(slotRowsAboutToBeRemoved(QModelIndex,int,int)));
-- }
--}
--
--void NoDuplicatesImageFilterModel::slotRowsAboutToBeRemoved(const QModelIndex& parent, int begin, int end)
--{
-- bool needInvalidate = false;
--
-- for (int i = begin; i<=end; ++i)
-- {
-- QModelIndex index = sourceModel()->index(i, 0, parent);
--
-- // filtered out by us?
-- if (!mapFromSource(index).isValid())
-- {
-- continue;
-- }
--
-- QModelIndex sourceIndex = mapFromDirectSourceToSourceImageModel(index);
-- qlonglong id = sourceImageModel()->imageId(sourceIndex);
--
-- if (sourceImageModel()->numberOfIndexesForImageId(id) > 1)
-- {
-- needInvalidate = true;
-- }
-- }
--}*/
--
--} // namespace Digikam
-diff --git a/libs/models/imagefiltermodel.h b/libs/models/imagefiltermodel.h
-deleted file mode 100644
-index d131b3e..0000000
---- a/libs/models/imagefiltermodel.h
-+++ /dev/null
-@@ -1,299 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-- * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGEFILTERMODEL_H
--#define IMAGEFILTERMODEL_H
--
--// Local includes
--
--#include "dcategorizedsortfilterproxymodel.h"
--#include "textfilter.h"
--#include "imagefiltersettings.h"
--#include "imagemodel.h"
--#include "imagesortsettings.h"
--#include "digikam_export.h"
--
--namespace Digikam
--{
--
--class ImageChangeset;
--class ImageFilterModel;
--class ImageTagChangeset;
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterModelPrepareHook
--{
--public:
--
-- virtual ~ImageFilterModelPrepareHook() {};
-- virtual void prepare(const QVector<ImageInfo>& infos) = 0;
--};
--
--// -----------------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT ImageSortFilterModel : public DCategorizedSortFilterProxyModel
--{
-- Q_OBJECT
--
--public:
--
-- explicit ImageSortFilterModel(QObject* parent = 0);
--
-- void setSourceImageModel(ImageModel* model);
-- ImageModel* sourceImageModel() const;
--
-- void setSourceFilterModel(ImageSortFilterModel* model);
-- ImageSortFilterModel* sourceFilterModel() const;
--
-- QModelIndex mapToSourceImageModel(const QModelIndex& index) const;
-- QModelIndex mapFromSourceImageModel(const QModelIndex& imagemodel_index) const;
-- QModelIndex mapFromDirectSourceToSourceImageModel(const QModelIndex& sourceModel_index) const;
--
-- /// Convenience methods mapped to ImageModel.
-- /// Mentioned indexes returned come from the source image model.
-- QList<QModelIndex> mapListToSource(const QList<QModelIndex>& indexes) const;
-- QList<QModelIndex> mapListFromSource(const QList<QModelIndex>& sourceIndexes) const;
--
-- ImageInfo imageInfo(const QModelIndex& index) const;
-- qlonglong imageId(const QModelIndex& index) const;
-- QList<ImageInfo> imageInfos(const QList<QModelIndex>& indexes) const;
-- QList<qlonglong> imageIds(const QList<QModelIndex>& indexes) const;
--
-- QModelIndex indexForPath(const QString& filePath) const;
-- QModelIndex indexForImageInfo(const ImageInfo& info) const;
-- QModelIndex indexForImageId(qlonglong id) const;
--
-- /** Returns a list of all image infos, sorted according to this model.
-- * If you do not need a sorted list, use ImageModel's imageInfos() method.
-- */
-- QList<ImageInfo> imageInfosSorted() const;
--
-- /// Returns this, any chained ImageFilterModel, or 0.
-- virtual ImageFilterModel* imageFilterModel() const;
--
--protected:
--
-- /// Reimplement if needed. Called only when model shall be set as (direct) sourceModel.
-- virtual void setDirectSourceImageModel(ImageModel* model);
--
-- // made protected
-- virtual void setSourceModel(QAbstractItemModel* model);
--
--protected:
--
-- ImageSortFilterModel* m_chainedModel;
--};
--
--// -----------------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterModel : public ImageSortFilterModel
--{
-- Q_OBJECT
--
--public:
--
-- enum ImageFilterModelRoles
-- {
-- /// Returns the current categorization mode
-- CategorizationModeRole = ImageModel::FilterModelRoles + 1,
-- /// Returns the current sort order
-- SortOrderRole = ImageModel::FilterModelRoles + 2,
-- // / Returns the number of items in the index' category
-- //CategoryCountRole = ImageModel::FilterModelRoles + 3,
-- /// Returns the id of the PAlbum of the index which is used for category
-- CategoryAlbumIdRole = ImageModel::FilterModelRoles + 3,
-- /// Returns the format of the index which is used for category
-- CategoryFormatRole = ImageModel::FilterModelRoles + 4,
-- /// Returns true if the given image is a group leader, and the group is opened
-- GroupIsOpenRole = ImageModel::FilterModelRoles + 5,
-- ImageFilterModelPointerRole = ImageModel::FilterModelRoles + 50
-- };
--
--public:
--
-- explicit ImageFilterModel(QObject* parent = 0);
-- ~ImageFilterModel();
--
-- /** Add a hook to get added images for preparation tasks before they are added in the model */
-- void addPrepareHook(ImageFilterModelPrepareHook* hook);
-- void removePrepareHook(ImageFilterModelPrepareHook* hook);
--
-- /** Returns a set of DatabaseFields suggested to set as watch flags on the source ImageModel.
-- * The contained flags will be those that this model can sort or filter by. */
-- DatabaseFields::Set suggestedWatchFlags() const;
--
-- ImageFilterSettings imageFilterSettings() const;
-- VersionImageFilterSettings versionImageFilterSettings() const;
-- GroupImageFilterSettings groupImageFilterSettings() const;
-- ImageSortSettings imageSortSettings() const;
--
-- // group is identified by the id of its group leader
-- bool isGroupOpen(qlonglong group) const;
-- bool isAllGroupsOpen() const;
--
-- /// Enables sending imageInfosAdded and imageInfosAboutToBeRemoved
-- void setSendImageInfoSignals(bool sendSignals);
--
-- virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-- virtual ImageFilterModel* imageFilterModel() const;
--
--public Q_SLOTS:
--
-- /** Changes the current version image filter settings and refilters. */
-- void setVersionImageFilterSettings(const VersionImageFilterSettings& settings);
--
-- /** Changes the current version image filter settings and refilters. */
-- void setGroupImageFilterSettings(const GroupImageFilterSettings& settings);
--
-- /** Adjust the current ImageFilterSettings.
-- * Equivalent to retrieving the current filter settings, adjusting the parameter
-- * and calling setImageFilterSettings.
-- * Provided for convenience.
-- * It is encouraged to use setImageFilterSettings if you change more than one
-- * parameter at a time.
-- */
-- void setDayFilter(const QList<QDateTime>& days);
-- void setTagFilter(const QList<int>& includedTags, const QList<int>& excludedTags,
-- ImageFilterSettings::MatchingCondition matchingCond, bool showUnTagged,
-- const QList<int>& clTagIds, const QList<int>& plTagIds);
-- void setRatingFilter(int rating, ImageFilterSettings::RatingCondition ratingCond, bool isUnratedExcluded);
-- void setMimeTypeFilter(int mimeTypeFilter);
-- void setGeolocationFilter(const ImageFilterSettings::GeolocationCondition& condition);
-- void setTextFilter(const SearchTextFilterSettings& settings);
--
-- void setCategorizationMode(ImageSortSettings::CategorizationMode mode);
-- void setCategorizationSortOrder(ImageSortSettings::SortOrder order);
-- void setSortRole(ImageSortSettings::SortRole role);
-- void setSortOrder(ImageSortSettings::SortOrder order);
-- void setStringTypeNatural(bool natural);
-- void setUrlWhitelist(const QList<QUrl> urlList, const QString& id);
-- void setIdWhitelist(const QList<qlonglong>& idList, const QString& id);
--
-- void setVersionManagerSettings(const VersionManagerSettings& settings);
-- void setExceptionList(const QList<qlonglong>& idlist, const QString& id);
--
-- void setGroupOpen(qlonglong group, bool open);
-- void toggleGroupOpen(qlonglong group);
-- void setAllGroupsOpen(bool open);
--
-- /** Changes the current image filter settings and refilters. */
-- virtual void setImageFilterSettings(const ImageFilterSettings& settings);
--
-- /** Changes the current image sort settings and resorts. */
-- virtual void setImageSortSettings(const ImageSortSettings& settings);
--
--Q_SIGNALS:
--
-- /// Signals that the set filter matches at least one index
-- void filterMatches(bool matches);
--
-- /** Signals that the set text filter matches at least one entry.
-- If no text filter is set, this signal is emitted
-- with 'false' when filterMatches() is emitted.
-- */
-- void filterMatchesForText(bool matchesByText);
--
-- /** Emitted when the filter settings have been changed
-- (the model may not yet have been updated)
-- */
-- void filterSettingsChanged(const ImageFilterSettings& settings);
--
-- /** These signals need to be explicitly enabled with setSendImageInfoSignals()
-- */
-- void imageInfosAdded(const QList<ImageInfo>& infos);
-- void imageInfosAboutToBeRemoved(const QList<ImageInfo>& infos);
--
--public:
--
-- // Declared as public because of use in sub-classes.
-- class ImageFilterModelPrivate;
--
--protected:
--
-- ImageFilterModelPrivate* const d_ptr;
--
--protected:
--
-- ImageFilterModel(ImageFilterModelPrivate& dd, QObject* parent);
--
-- virtual void setDirectSourceImageModel(ImageModel* model);
--
-- virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
--
-- virtual int compareCategories(const QModelIndex& left, const QModelIndex& right) const;
-- virtual bool subSortLessThan(const QModelIndex& left, const QModelIndex& right) const;
-- //virtual int categoryCount(const ImageInfo& info) const;
--
-- /** Reimplement to customize category sorting,
-- * Return negative if category of left < category right,
-- * Return 0 if left and right are in the same category, else return positive.
-- */
-- virtual int compareInfosCategories(const ImageInfo& left, const ImageInfo& right) const;
--
-- /** Reimplement to customize sorting. Do not take categories into account here.
-- */
-- virtual bool infosLessThan(const ImageInfo& left, const ImageInfo& right) const;
--
-- /** Returns a unique identifier for the category if info. The string need not be for user display.
-- */
-- virtual QString categoryIdentifier(const ImageInfo& info) const;
--
--protected Q_SLOTS:
--
-- void slotModelReset();
-- void slotUpdateFilter();
--
-- void slotImageTagChange(const ImageTagChangeset& changeset);
-- void slotImageChange(const ImageChangeset& changeset);
--
-- void slotRowsInserted(const QModelIndex& parent, int start, int end);
-- void slotRowsAboutToBeRemoved(const QModelIndex& parent, int start, int end);
--
--private:
--
-- Q_DECLARE_PRIVATE(ImageFilterModel)
--};
--
--// -----------------------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT NoDuplicatesImageFilterModel : public ImageSortFilterModel
--{
-- Q_OBJECT
--
--public:
--
-- explicit NoDuplicatesImageFilterModel(QObject* parent = 0);
--
--protected:
--
-- virtual bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const;
--};
--
--} // namespace Digikam
--
--Q_DECLARE_METATYPE(Digikam::ImageFilterModel*)
--
--#endif // IMAGEMODEL_H
-diff --git a/libs/models/imagefiltermodelpriv.cpp b/libs/models/imagefiltermodelpriv.cpp
-deleted file mode 100644
-index 07d9e79..0000000
---- a/libs/models/imagefiltermodelpriv.cpp
-+++ /dev/null
-@@ -1,258 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-- * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagefiltermodelpriv.h"
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "imagefiltermodelthreads.h"
--
--namespace Digikam
--{
--
--ImageFilterModel::ImageFilterModelPrivate::ImageFilterModelPrivate()
--{
-- imageModel = 0;
-- version = 0;
-- lastDiscardVersion = 0;
-- sentOut = 0;
-- sentOutForReAdd = 0;
-- updateFilterTimer = 0;
-- needPrepare = false;
-- needPrepareComments = false;
-- needPrepareTags = false;
-- needPrepareGroups = false;
-- preparer = 0;
-- filterer = 0;
-- hasOneMatch = false;
-- hasOneMatchForText = false;
--
-- setupWorkers();
--}
--
--ImageFilterModel::ImageFilterModelPrivate::~ImageFilterModelPrivate()
--{
-- // facilitate thread stopping
-- ++version;
-- preparer->deactivate();
-- filterer->deactivate();
-- delete preparer;
-- delete filterer;
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::init(ImageFilterModel* _q)
--{
-- q = _q;
--
-- updateFilterTimer = new QTimer(this);
-- updateFilterTimer->setSingleShot(true);
-- updateFilterTimer->setInterval(250);
--
-- connect(updateFilterTimer, SIGNAL(timeout()),
-- q, SLOT(slotUpdateFilter()));
--
-- // inter-thread redirection
-- qRegisterMetaType<ImageFilterModelTodoPackage>("ImageFilterModelTodoPackage");
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::preprocessInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- infosToProcess(infos, extraValues, true);
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::processAddedInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- // These have already been added, we just process them afterwards
-- infosToProcess(infos, extraValues, false);
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::setupWorkers()
--{
-- preparer = new ImageFilterModelPreparer(this);
-- filterer = new ImageFilterModelFilterer(this);
--
-- // A package in constructed in infosToProcess.
-- // Normal flow is infosToProcess -> preparer::process -> filterer::process -> packageFinished.
-- // If no preparation is needed, the first step is skipped.
-- // If filter version changes, both will discard old package and send them to packageDiscarded.
--
-- connect(this, SIGNAL(packageToPrepare(ImageFilterModelTodoPackage)),
-- preparer, SLOT(process(ImageFilterModelTodoPackage)));
--
-- connect(this, SIGNAL(packageToFilter(ImageFilterModelTodoPackage)),
-- filterer, SLOT(process(ImageFilterModelTodoPackage)));
--
-- connect(preparer, SIGNAL(processed(ImageFilterModelTodoPackage)),
-- filterer, SLOT(process(ImageFilterModelTodoPackage)));
--
-- connect(filterer, SIGNAL(processed(ImageFilterModelTodoPackage)),
-- this, SLOT(packageFinished(ImageFilterModelTodoPackage)));
--
-- connect(preparer, SIGNAL(discarded(ImageFilterModelTodoPackage)),
-- this, SLOT(packageDiscarded(ImageFilterModelTodoPackage)));
--
-- connect(filterer, SIGNAL(discarded(ImageFilterModelTodoPackage)),
-- this, SLOT(packageDiscarded(ImageFilterModelTodoPackage)));
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::infosToProcess(const QList<ImageInfo>& infos)
--{
-- infosToProcess(infos, QList<QVariant>(), false);
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::infosToProcess(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues, bool forReAdd)
--{
-- if (infos.isEmpty())
-- {
-- return;
-- }
--
-- filterer->schedule();
--
-- if (needPrepare)
-- {
-- preparer->schedule();
-- }
--
-- Q_ASSERT(extraValues.isEmpty() || infos.size() == extraValues.size());
--
-- // prepare and filter in chunks
-- const int size = infos.size();
-- const int maxChunkSize = needPrepare ? PrepareChunkSize : FilterChunkSize;
-- const bool hasExtraValues = !extraValues.isEmpty();
-- QList<ImageInfo>::const_iterator it = infos.constBegin(), end;
-- QList<QVariant>::const_iterator xit = extraValues.constBegin(), xend;
-- int index = 0;
-- QVector<ImageInfo> infoVector;
-- QVector<QVariant> extraValueVector;
--
-- while (it != infos.constEnd())
-- {
-- const int chunkSize = qMin(maxChunkSize, size - index);
-- infoVector.resize(chunkSize);
-- end = it + chunkSize;
-- qCopy(it, end, infoVector.begin());
--
-- if (hasExtraValues)
-- {
-- extraValueVector.resize(chunkSize);
-- xend = xit + chunkSize;
-- qCopy(xit, xend, extraValueVector.begin());
-- xit = xend;
-- }
--
-- it = end;
-- index += chunkSize;
--
-- ++sentOut;
--
-- if (forReAdd)
-- {
-- ++sentOutForReAdd;
-- }
--
-- if (needPrepare)
-- {
-- emit packageToPrepare(ImageFilterModelTodoPackage(infoVector, extraValueVector, version, forReAdd));
-- }
-- else
-- {
-- emit packageToFilter(ImageFilterModelTodoPackage(infoVector, extraValueVector, version, forReAdd));
-- }
-- }
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::packageFinished(const ImageFilterModelTodoPackage& package)
--{
-- // check if it got discarded on the journey
-- if (package.version != version)
-- {
-- packageDiscarded(package);
-- return;
-- }
--
-- // incorporate result
-- QHash<qlonglong, bool>::const_iterator it = package.filterResults.constBegin();
--
-- for (; it != package.filterResults.constEnd(); ++it)
-- {
-- filterResults.insert(it.key(), it.value());
-- }
--
-- // re-add if necessary
-- if (package.isForReAdd)
-- {
-- emit reAddImageInfos(package.infos.toList(), package.extraValues.toList());
--
-- if (sentOutForReAdd == 1) // last package
-- {
-- emit reAddingFinished();
-- }
-- }
--
-- // decrement counters
-- --sentOut;
--
-- if (package.isForReAdd)
-- {
-- --sentOutForReAdd;
-- }
--
-- // If all packages have returned, filtered and readded, and no more are expected,
-- // and there is need to tell the filter result to the view, do that
-- if (sentOut == 0 && sentOutForReAdd == 0 && !imageModel->isRefreshing())
-- {
-- q->invalidate(); // use invalidate, not invalidateFilter only. Sorting may have changed as well.
-- emit (q->filterMatches(hasOneMatch));
-- emit (q->filterMatchesForText(hasOneMatchForText));
-- filterer->deactivate();
-- preparer->deactivate();
-- }
--}
--
--void ImageFilterModel::ImageFilterModelPrivate::packageDiscarded(const ImageFilterModelTodoPackage& package)
--{
-- // Either, the model was reset, or the filter changed
-- // In the former case throw all away, in the latter case, recycle
-- if (package.version > lastDiscardVersion)
-- {
-- // Recycle packages: Send again with current version
-- // Do not increment sentOut or sentOutForReAdd here: it was not decremented!
--
-- if (needPrepare)
-- {
-- emit packageToPrepare(ImageFilterModelTodoPackage(package.infos, package.extraValues, version, package.isForReAdd));
-- }
-- else
-- {
-- emit packageToFilter(ImageFilterModelTodoPackage(package.infos, package.extraValues, version, package.isForReAdd));
-- }
-- }
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagefiltermodelpriv.h b/libs/models/imagefiltermodelpriv.h
-deleted file mode 100644
-index a9e3f22..0000000
---- a/libs/models/imagefiltermodelpriv.h
-+++ /dev/null
-@@ -1,159 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-11
-- * Description : Qt item model for database entries - private shared header
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGEFILTERMODELPRIV_H
--#define IMAGEFILTERMODELPRIV_H
--
--// Qt includes
--
--#include <QHash>
--#include <QMutex>
--#include <QMutexLocker>
--#include <QSet>
--#include <QThread>
--#include <QTimer>
--#include <QWaitCondition>
--
--// Local includes
--
--#include "imageinfo.h"
--#include "imagefiltermodel.h"
--
--#include "digikam_export.h"
--// Yes, we need the EXPORT macro in a private header because
--// this private header is shared across binary objects.
--// This does NOT make this classes here any more public!
--
--namespace Digikam
--{
--
--const int PrepareChunkSize = 101;
--const int FilterChunkSize = 2001;
--
--class ImageFilterModelTodoPackage
--{
--public:
--
-- ImageFilterModelTodoPackage()
-- : version(0), isForReAdd(false)
-- {
-- }
--
-- ImageFilterModelTodoPackage(const QVector<ImageInfo>& infos, const QVector<QVariant>& extraValues, int version, bool isForReAdd)
-- : infos(infos), extraValues(extraValues), version(version), isForReAdd(isForReAdd)
-- {
-- }
--
-- QVector<ImageInfo> infos;
-- QVector<QVariant> extraValues;
-- unsigned int version;
-- bool isForReAdd;
-- QHash<qlonglong, bool> filterResults;
--};
--
--// ------------------------------------------------------------------------------------------------
--
--class ImageFilterModelPreparer;
--class ImageFilterModelFilterer;
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterModel::ImageFilterModelPrivate : public QObject
--{
-- Q_OBJECT
--
--public:
--
-- ImageFilterModelPrivate();
-- ~ImageFilterModelPrivate();
--
-- void init(ImageFilterModel* q);
-- void setupWorkers();
-- void infosToProcess(const QList<ImageInfo>& infos);
-- void infosToProcess(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues, bool forReAdd = true);
--
--public:
--
-- ImageFilterModel* q;
--
-- ImageModel* imageModel;
--
-- ImageFilterSettings filter;
-- ImageSortSettings sorter;
-- VersionImageFilterSettings versionFilter;
-- GroupImageFilterSettings groupFilter;
--
-- volatile unsigned int version;
-- unsigned int lastDiscardVersion;
-- unsigned int lastFilteredVersion;
-- int sentOut;
-- int sentOutForReAdd;
--
-- QTimer* updateFilterTimer;
--
-- bool needPrepare;
-- bool needPrepareComments;
-- bool needPrepareTags;
-- bool needPrepareGroups;
--
-- QMutex mutex;
-- ImageFilterSettings filterCopy;
-- VersionImageFilterSettings versionFilterCopy;
-- GroupImageFilterSettings groupFilterCopy;
-- ImageFilterModelPreparer* preparer;
-- ImageFilterModelFilterer* filterer;
--
-- QHash<qlonglong, bool> filterResults;
-- bool hasOneMatch;
-- bool hasOneMatchForText;
--
-- QList<ImageFilterModelPrepareHook*> prepareHooks;
--
--/*
-- QHash<int, QSet<qlonglong> > categoryCountHashInt;
-- QHash<QString, QSet<qlonglong> > categoryCountHashString;
--
--public:
--
-- void cacheCategoryCount(int id, qlonglong imageid) const
-- { const_cast<ImageFilterModelPrivate*>(this)->categoryCountHashInt[id].insert(imageid); }
-- void cacheCategoryCount(const QString& id, qlonglong imageid) const
-- { const_cast<ImageFilterModelPrivate*>(this)->categoryCountHashString[id].insert(imageid); }
--*/
--
--public Q_SLOTS:
--
-- void preprocessInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void processAddedInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void packageFinished(const ImageFilterModelTodoPackage& package);
-- void packageDiscarded(const ImageFilterModelTodoPackage& package);
--
--Q_SIGNALS:
--
-- void packageToPrepare(const ImageFilterModelTodoPackage& package);
-- void packageToFilter(const ImageFilterModelTodoPackage& package);
-- void reAddImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void reAddingFinished();
--};
--
--} // namespace Digikam
--
--#endif // IMAGEFILTERMODELPRIV_H
-diff --git a/libs/models/imagefiltermodelthreads.cpp b/libs/models/imagefiltermodelthreads.cpp
-deleted file mode 100644
-index aa5c462..0000000
---- a/libs/models/imagefiltermodelthreads.cpp
-+++ /dev/null
-@@ -1,40 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-- * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagefiltermodel.h"
--#include "imagefiltermodelpriv.h"
--#include "imagefiltermodelthreads.h"
--
--namespace Digikam
--{
--
--ImageFilterModelWorker::ImageFilterModelWorker(ImageFilterModel::ImageFilterModelPrivate* const d)
-- : d(d)
--{
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagefiltermodelthreads.h b/libs/models/imagefiltermodelthreads.h
-deleted file mode 100644
-index 83fa987..0000000
---- a/libs/models/imagefiltermodelthreads.h
-+++ /dev/null
-@@ -1,100 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-11
-- * Description : Qt item model for database entries - private header
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGEFILTERMODELTHREADS_H
--#define IMAGEFILTERMODELTHREADS_H
--
--// Qt includes
--
--#include <QThread>
--
--// Local includes
--
--#include "digikam_export.h"
--#include "workerobject.h"
--
--namespace Digikam
--{
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterModelWorker : public WorkerObject
--{
-- Q_OBJECT
--
--public:
--
-- explicit ImageFilterModelWorker(ImageFilterModel::ImageFilterModelPrivate* const d);
--
-- bool checkVersion(const ImageFilterModelTodoPackage& package)
-- {
-- return d->version == package.version;
-- }
--
--public Q_SLOTS:
--
-- virtual void process(ImageFilterModelTodoPackage package) = 0;
--
--Q_SIGNALS:
--
-- void processed(const ImageFilterModelTodoPackage& package);
-- void discarded(const ImageFilterModelTodoPackage& package);
--
--protected:
--
-- ImageFilterModel::ImageFilterModelPrivate* d;
--};
--
--// -----------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterModelPreparer : public ImageFilterModelWorker
--{
-- Q_OBJECT
--
--public:
--
-- explicit ImageFilterModelPreparer(ImageFilterModel::ImageFilterModelPrivate* const d)
-- : ImageFilterModelWorker(d)
-- {
-- }
--
-- void process(ImageFilterModelTodoPackage package);
--};
--
--// ----------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterModelFilterer : public ImageFilterModelWorker
--{
-- Q_OBJECT
--
--public:
--
-- explicit ImageFilterModelFilterer(ImageFilterModel::ImageFilterModelPrivate* const d)
-- : ImageFilterModelWorker(d)
-- {
-- }
--
-- void process(ImageFilterModelTodoPackage package);
--};
--
--} // namespace Digikam
--
--#endif // IMAGEFILTERMODELTHREADS_H
-diff --git a/libs/models/imagefiltersettings.cpp b/libs/models/imagefiltersettings.cpp
-deleted file mode 100644
-index b61e7f9..0000000
---- a/libs/models/imagefiltersettings.cpp
-+++ /dev/null
-@@ -1,952 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Filter values for use with ImageFilterModel
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-- * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagefiltersettings.h"
--
--// C++ includes
--
--#include <cmath>
--
--// Qt includes
--
--#include <QDateTime>
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "coredbfields.h"
--#include "digikam_globals.h"
--#include "imageinfo.h"
--#include "tagscache.h"
--#include "versionmanagersettings.h"
--
--namespace Digikam
--{
--
--ImageFilterSettings::ImageFilterSettings()
--{
-- m_untaggedFilter = false;
-- m_isUnratedExcluded = false;
-- m_ratingFilter = 0;
-- m_mimeTypeFilter = MimeFilter::AllFiles;
-- m_ratingCond = GreaterEqualCondition;
-- m_matchingCond = OrCondition;
-- m_geolocationCondition = GeolocationNoFilter;
--}
--
--DatabaseFields::Set ImageFilterSettings::watchFlags() const
--{
-- DatabaseFields::Set set;
--
-- if (isFilteringByDay())
-- {
-- set |= DatabaseFields::CreationDate;
-- }
--
-- if (isFilteringByText())
-- {
-- set |= DatabaseFields::Name;
-- set |= DatabaseFields::Comment;
-- }
--
-- if (isFilteringByRating())
-- {
-- set |= DatabaseFields::Rating;
-- }
--
-- if (isFilteringByTypeMime())
-- {
-- set |= DatabaseFields::Category;
-- set |= DatabaseFields::Format;
-- }
--
-- if (isFilteringByGeolocation())
-- {
-- set |= DatabaseFields::ImagePositionsAll;
-- }
--
-- if (isFilteringByColorLabels())
-- {
-- set |= DatabaseFields::ColorLabel;
-- }
--
-- if (isFilteringByPickLabels())
-- {
-- set |= DatabaseFields::PickLabel;
-- }
--
-- return set;
--}
--
--bool ImageFilterSettings::isFilteringByDay() const
--{
-- if (!m_dayFilter.isEmpty())
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringByTags() const
--{
-- if (!m_includeTagFilter.isEmpty() || !m_excludeTagFilter.isEmpty() || m_untaggedFilter)
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringByColorLabels() const
--{
-- if (!m_colorLabelTagFilter.isEmpty())
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringByPickLabels() const
--{
-- if (!m_pickLabelTagFilter.isEmpty())
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringByText() const
--{
-- if (!m_textFilterSettings.text.isEmpty())
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringByTypeMime() const
--{
-- if (m_mimeTypeFilter != MimeFilter::AllFiles)
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringByGeolocation() const
--{
-- return (m_geolocationCondition != GeolocationNoFilter);
--}
--
--bool ImageFilterSettings::isFilteringByRating() const
--{
-- if (m_ratingFilter != 0 || m_ratingCond != GreaterEqualCondition || m_isUnratedExcluded)
-- {
-- return true;
-- }
--
-- return false;
--}
--
--bool ImageFilterSettings::isFilteringInternally() const
--{
-- return (isFiltering() || !m_urlWhitelists.isEmpty() || !m_idWhitelists.isEmpty());
--}
--
--bool ImageFilterSettings::isFiltering() const
--{
-- return isFilteringByDay() ||
-- isFilteringByTags() ||
-- isFilteringByText() ||
-- isFilteringByRating() ||
-- isFilteringByTypeMime() ||
-- isFilteringByColorLabels() ||
-- isFilteringByPickLabels() ||
-- isFilteringByGeolocation();
--}
--
--void ImageFilterSettings::setDayFilter(const QList<QDateTime>& days)
--{
-- m_dayFilter.clear();
--
-- for (QList<QDateTime>::const_iterator it = days.constBegin(); it != days.constEnd(); ++it)
-- {
-- m_dayFilter.insert(*it, true);
-- }
--}
--
--void ImageFilterSettings::setTagFilter(const QList<int>& includedTags,
-- const QList<int>& excludedTags,
-- MatchingCondition matchingCondition,
-- bool showUnTagged,
-- const QList<int>& clTagIds,
-- const QList<int>& plTagIds)
--{
-- m_includeTagFilter = includedTags;
-- m_excludeTagFilter = excludedTags;
-- m_matchingCond = matchingCondition;
-- m_untaggedFilter = showUnTagged;
-- m_colorLabelTagFilter = clTagIds;
-- m_pickLabelTagFilter = plTagIds;
--}
--
--void ImageFilterSettings::setRatingFilter(int rating, RatingCondition ratingCondition, bool isUnratedExcluded)
--{
-- m_ratingFilter = rating;
-- m_ratingCond = ratingCondition;
-- m_isUnratedExcluded = isUnratedExcluded;
--}
--
--void ImageFilterSettings::setMimeTypeFilter(int mime)
--{
-- m_mimeTypeFilter = (MimeFilter::TypeMimeFilter)mime;
--}
--
--void ImageFilterSettings::setGeolocationFilter(const GeolocationCondition& condition)
--{
-- m_geolocationCondition = condition;
--}
--
--void ImageFilterSettings::setTextFilter(const SearchTextFilterSettings& settings)
--{
-- m_textFilterSettings = settings;
--}
--
--void ImageFilterSettings::setTagNames(const QHash<int, QString>& hash)
--{
-- m_tagNameHash = hash;
--}
--
--void ImageFilterSettings::setAlbumNames(const QHash<int, QString>& hash)
--{
-- m_albumNameHash = hash;
--}
--
--void ImageFilterSettings::setUrlWhitelist(const QList<QUrl>& urlList, const QString& id)
--{
-- if (urlList.isEmpty())
-- {
-- m_urlWhitelists.remove(id);
-- }
-- else
-- {
-- m_urlWhitelists.insert(id, urlList);
-- }
--}
--
--void ImageFilterSettings::setIdWhitelist(const QList<qlonglong>& idList, const QString& id)
--{
-- if (idList.isEmpty())
-- {
-- m_idWhitelists.remove(id);
-- }
-- else
-- {
-- m_idWhitelists.insert(id, idList);
-- }
--}
--
--template <class ContainerA, class ContainerB>
--bool containsAnyOf(const ContainerA& listA, const ContainerB& listB)
--{
-- foreach (const typename ContainerA::value_type& a, listA)
-- {
-- if (listB.contains(a))
-- {
-- return true;
-- }
-- }
-- return false;
--}
--
--template <class ContainerA, typename Value, class ContainerB>
--bool containsNoneOfExcept(const ContainerA& list, const ContainerB& noneOfList, const Value& exception)
--{
-- foreach (const typename ContainerB::value_type& n, noneOfList)
-- {
-- if (n != exception && list.contains(n))
-- {
-- return false;
-- }
-- }
-- return true;
--}
--
--bool ImageFilterSettings::matches(const ImageInfo& info, bool* const foundText) const
--{
-- if (foundText)
-- {
-- *foundText = false;
-- }
--
-- if (!isFilteringInternally())
-- {
-- return true;
-- }
--
-- bool match = false;
--
-- if (!m_includeTagFilter.isEmpty() || !m_excludeTagFilter.isEmpty())
-- {
-- QList<int> tagIds = info.tagIds();
-- QList<int>::const_iterator it;
--
-- match = m_includeTagFilter.isEmpty();
--
-- if (m_matchingCond == OrCondition)
-- {
-- for (it = m_includeTagFilter.begin(); it != m_includeTagFilter.end(); ++it)
-- {
-- if (tagIds.contains(*it))
-- {
-- match = true;
-- break;
-- }
-- }
--
-- match |= (m_untaggedFilter && tagIds.isEmpty());
-- }
-- else // AND matching condition...
-- {
-- // m_untaggedFilter and non-empty tag filter, combined with AND, is logically no match
-- if (!m_untaggedFilter)
-- {
-- for (it = m_includeTagFilter.begin(); it != m_includeTagFilter.end(); ++it)
-- {
-- if (!tagIds.contains(*it))
-- {
-- break;
-- }
-- }
--
-- if (it == m_includeTagFilter.end())
-- {
-- match = true;
-- }
-- }
-- }
--
-- for (it = m_excludeTagFilter.begin(); it != m_excludeTagFilter.end(); ++it)
-- {
-- if (tagIds.contains(*it))
-- {
-- match = false;
-- break;
-- }
-- }
-- }
-- else if (m_untaggedFilter)
-- {
-- match = !TagsCache::instance()->containsPublicTags(info.tagIds());
-- }
-- else
-- {
-- match = true;
-- }
--
-- //-- Filter by pick labels ------------------------------------------------
--
-- if (!m_pickLabelTagFilter.isEmpty())
-- {
-- QList<int> tagIds = info.tagIds();
-- bool matchPL = false;
--
-- if (containsAnyOf(m_pickLabelTagFilter, tagIds))
-- {
-- matchPL = true;
-- }
-- else if (!matchPL)
-- {
-- int noPickLabelTagId = TagsCache::instance()->tagForPickLabel(NoPickLabel);
--
-- if (m_pickLabelTagFilter.contains(noPickLabelTagId))
-- {
-- // Searching for "has no ColorLabel" requires special handling:
-- // Scan that the tag ids contains none of the ColorLabel tags, except maybe the NoColorLabel tag
-- matchPL = containsNoneOfExcept(tagIds, TagsCache::instance()->pickLabelTags(), noPickLabelTagId);
-- }
-- }
--
-- match &= matchPL;
-- }
--
-- //-- Filter by color labels ------------------------------------------------
--
-- if (!m_colorLabelTagFilter.isEmpty())
-- {
-- QList<int> tagIds = info.tagIds();
-- bool matchCL = false;
--
-- if (containsAnyOf(m_colorLabelTagFilter, tagIds))
-- {
-- matchCL = true;
-- }
-- else if (!matchCL)
-- {
-- int noColorLabelTagId = TagsCache::instance()->tagForColorLabel(NoColorLabel);
--
-- if (m_colorLabelTagFilter.contains(noColorLabelTagId))
-- {
-- // Searching for "has no ColorLabel" requires special handling:
-- // Scan that the tag ids contains none of the ColorLabel tags, except maybe the NoColorLabel tag
-- matchCL = containsNoneOfExcept(tagIds, TagsCache::instance()->colorLabelTags(), noColorLabelTagId);
-- }
-- }
--
-- match &= matchCL;
-- }
--
-- //-- Filter by date -----------------------------------------------------------
--
-- if (!m_dayFilter.isEmpty())
-- {
-- match &= m_dayFilter.contains(QDateTime(info.dateTime().date(), QTime()));
-- }
--
-- //-- Filter by rating ---------------------------------------------------------
--
-- if (m_ratingFilter >= 0)
-- {
-- // for now we treat -1 (no rating) just like a rating of 0.
-- int rating = info.rating();
--
-- if (rating == -1)
-- {
-- rating = 0;
-- }
--
-- if(m_isUnratedExcluded && rating == 0)
-- {
-- match = false;
-- }
-- else
-- {
-- if (m_ratingCond == GreaterEqualCondition)
-- {
-- // If the rating is not >=, i.e it is <, then it does not match.
-- if (rating < m_ratingFilter)
-- {
-- match = false;
-- }
-- }
-- else if (m_ratingCond == EqualCondition)
-- {
-- // If the rating is not =, i.e it is !=, then it does not match.
-- if (rating != m_ratingFilter)
-- {
-- match = false;
-- }
-- }
-- else
-- {
-- // If the rating is not <=, i.e it is >, then it does not match.
-- if (rating > m_ratingFilter)
-- {
-- match = false;
-- }
-- }
-- }
-- }
--
-- // -- Filter by mime type -----------------------------------------------------
--
-- switch (m_mimeTypeFilter)
-- {
-- // info.format is a standardized string: Only one possibility per mime type
-- case MimeFilter::ImageFiles:
-- {
-- if (info.category() != DatabaseItem::Image)
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::JPGFiles:
-- {
-- if (info.format() != QLatin1String("JPG"))
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::PNGFiles:
-- {
-- if (info.format() != QLatin1String("PNG"))
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::TIFFiles:
-- {
-- if (info.format() != QLatin1String("TIFF"))
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::DNGFiles:
-- {
-- if (info.format() != QLatin1String("RAW-DNG"))
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::NoRAWFiles:
-- {
-- if (info.format().startsWith(QLatin1String("RAW")))
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::RAWFiles:
-- {
-- if (!info.format().startsWith(QLatin1String("RAW")))
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::MoviesFiles:
-- {
-- if (info.category() != DatabaseItem::Video)
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::AudioFiles:
-- {
-- if (info.category() != DatabaseItem::Audio)
-- {
-- match = false;
-- }
--
-- break;
-- }
-- case MimeFilter::RasterFiles:
-- {
-- if (info.format() != QLatin1String("PSD") && // Adobe Photoshop Document
-- info.format() != QLatin1String("PSB") && // Adobe Photoshop Big
-- info.format() != QLatin1String("XCF") && // Gimp
-- info.format() != QLatin1String("KRA") && // Krita
-- info.format() != QLatin1String("ORA") // Open Raster
-- )
-- {
-- match = false;
-- }
--
-- break;
-- }
-- default:
-- {
-- // All Files: do nothing...
-- break;
-- }
-- }
--
-- //-- Filter by geolocation ----------------------------------------------------
--
-- if (m_geolocationCondition!=GeolocationNoFilter)
-- {
-- if (m_geolocationCondition==GeolocationNoCoordinates)
-- {
-- if (info.hasCoordinates())
-- {
-- match = false;
-- }
-- }
-- else if (m_geolocationCondition==GeolocationHasCoordinates)
-- {
-- if (!info.hasCoordinates())
-- {
-- match = false;
-- }
-- }
-- }
--
-- //-- Filter by text -----------------------------------------------------------
--
-- if (!m_textFilterSettings.text.isEmpty())
-- {
-- bool textMatch = false;
--
-- // Image name
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageName &&
-- info.name().contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-- {
-- textMatch = true;
-- }
--
-- // Image title
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageTitle &&
-- info.title().contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-- {
-- textMatch = true;
-- }
--
-- // Image comment
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageComment &&
-- info.comment().contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-- {
-- textMatch = true;
-- }
--
-- // Tag names
-- foreach(int id, info.tagIds())
-- {
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::TagName &&
-- m_tagNameHash.value(id).contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-- {
-- textMatch = true;
-- }
-- }
--
-- // Album names
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::AlbumName &&
-- m_albumNameHash.value(info.albumId()).contains(m_textFilterSettings.text, m_textFilterSettings.caseSensitive))
-- {
-- textMatch = true;
-- }
--
-- // Image Aspect Ratio
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImageAspectRatio)
-- {
-- QRegExp expRatio (QLatin1String("^\\d+:\\d+$"));
-- QRegExp expFloat (QLatin1String("^\\d+(.\\d+)?$"));
--
-- if (expRatio.indexIn(m_textFilterSettings.text) > -1 && m_textFilterSettings.text.contains(QRegExp(QLatin1String(":\\d+"))))
-- {
-- QString trimmedTextFilterSettingsText = m_textFilterSettings.text;
-- QStringList numberStringList = trimmedTextFilterSettingsText.split(QLatin1String(":"), QString::SkipEmptyParts);
--
-- if (numberStringList.length() == 2)
-- {
-- QString numString = (QString)numberStringList.at(0), denomString = (QString)numberStringList.at(1);
-- bool canConverseNum = false;
-- bool canConverseDenom = false;
-- int num = numString.toInt(&canConverseNum, 10), denom = denomString.toInt(&canConverseDenom, 10);
--
-- if (canConverseNum && canConverseDenom)
-- {
-- if (fabs(info.aspectRatio() - (double)num / denom) < 0.1)
-- textMatch = true;
-- }
-- }
-- }
-- else if (expFloat.indexIn(m_textFilterSettings.text) > -1)
-- {
-- QString trimmedTextFilterSettingsText = m_textFilterSettings.text;
-- bool canConverse = false;
-- double ratio = trimmedTextFilterSettingsText.toDouble(&canConverse);
--
-- if (canConverse)
-- {
-- if (fabs(info.aspectRatio() - ratio) < 0.1)
-- textMatch = true;
-- }
-- }
-- }
--
-- // Image Pixel Size
-- // See bug #341053 for details.
--
-- if (m_textFilterSettings.textFields & SearchTextFilterSettings::ImagePixelSize)
-- {
-- QSize size = info.dimensions();
-- int pixelSize = size.height()*size.width();
-- QString text = m_textFilterSettings.text;
--
-- if(text.contains(QRegExp(QLatin1String("^>\\d{1,15}$"))) && pixelSize > (text.remove(0,1)).toInt())
-- {
-- textMatch = true;
-- }
-- else if(text.contains(QRegExp(QLatin1String("^<\\d{1,15}$"))) && pixelSize < (text.remove(0,1)).toInt())
-- {
-- textMatch = true;
-- }
-- else if(text.contains(QRegExp(QLatin1String("^\\d+$"))) && pixelSize == text.toInt())
-- {
-- textMatch = true;
-- }
-- }
--
-- match &= textMatch;
--
-- if (foundText)
-- {
-- *foundText = textMatch;
-- }
-- }
--
-- // -- filter by URL-whitelists ------------------------------------------------
-- // NOTE: whitelists are always AND for now.
--
-- if (match)
-- {
-- const QUrl url = info.fileUrl();
--
-- for (QHash<QString, QList<QUrl>>::const_iterator it = m_urlWhitelists.constBegin();
-- it!=m_urlWhitelists.constEnd(); ++it)
-- {
-- match = it->contains(url);
--
-- if (!match)
-- {
-- break;
-- }
-- }
-- }
--
-- if (match)
-- {
-- const qlonglong id = info.id();
--
-- for (QHash<QString, QList<qlonglong> >::const_iterator it = m_idWhitelists.constBegin();
-- it!=m_idWhitelists.constEnd(); ++it)
-- {
-- match = it->contains(id);
--
-- if (!match)
-- {
-- break;
-- }
-- }
-- }
--
-- return match;
--}
--
--// -------------------------------------------------------------------------------------------------
--
--VersionImageFilterSettings::VersionImageFilterSettings()
--{
-- m_includeTagFilter = 0;
-- m_exceptionTagFilter = 0;
--}
--
--VersionImageFilterSettings::VersionImageFilterSettings(const VersionManagerSettings& settings)
--{
-- setVersionManagerSettings(settings);
--}
--
--bool VersionImageFilterSettings::operator==(const VersionImageFilterSettings& other) const
--{
-- return m_excludeTagFilter == other.m_excludeTagFilter &&
-- m_exceptionLists == other.m_exceptionLists;
--}
--
--bool VersionImageFilterSettings::matches(const ImageInfo& info) const
--{
-- if (!isFiltering())
-- {
-- return true;
-- }
--
-- const qlonglong id = info.id();
--
-- for (QHash<QString, QList<qlonglong> >::const_iterator it = m_exceptionLists.constBegin();
-- it != m_exceptionLists.constEnd(); ++it)
-- {
-- if (it->contains(id))
-- {
-- return true;
-- }
-- }
--
-- bool match = true;
-- QList<int> tagIds = info.tagIds();
--
-- if (!tagIds.contains(m_includeTagFilter))
-- {
-- for (QList<int>::const_iterator it = m_excludeTagFilter.begin();
-- it != m_excludeTagFilter.end(); ++it)
-- {
-- if (tagIds.contains(*it))
-- {
-- match = false;
-- break;
-- }
-- }
-- }
--
-- if (!match)
-- {
-- if (tagIds.contains(m_exceptionTagFilter))
-- {
-- match = true;
-- }
-- }
--
-- return match;
--}
--
--bool VersionImageFilterSettings::isHiddenBySettings(const ImageInfo& info) const
--{
-- QList<int> tagIds = info.tagIds();
--
-- foreach(int tagId, m_excludeTagFilter)
-- {
-- if (tagIds.contains(tagId))
-- {
-- return true;
-- }
-- }
--
-- return false;
--}
--
--bool VersionImageFilterSettings::isExemptedBySettings(const ImageInfo& info) const
--{
-- return info.tagIds().contains(m_exceptionTagFilter);
--}
--
--void VersionImageFilterSettings::setVersionManagerSettings(const VersionManagerSettings& settings)
--{
-- m_excludeTagFilter.clear();
--
-- if (!settings.enabled)
-- {
-- return;
-- }
--
-- if (!(settings.showInViewFlags & VersionManagerSettings::ShowOriginal))
-- {
-- m_excludeTagFilter << TagsCache::instance()->getOrCreateInternalTag(InternalTagName::originalVersion());
-- }
--
-- if (!(settings.showInViewFlags & VersionManagerSettings::ShowIntermediates))
-- {
-- m_excludeTagFilter << TagsCache::instance()->getOrCreateInternalTag(InternalTagName::intermediateVersion());
-- }
--
-- m_includeTagFilter = TagsCache::instance()->getOrCreateInternalTag(InternalTagName::currentVersion());
-- m_exceptionTagFilter = TagsCache::instance()->getOrCreateInternalTag(InternalTagName::versionAlwaysVisible());
--}
--
--void VersionImageFilterSettings::setExceptionList(const QList<qlonglong>& idList, const QString& id)
--{
-- if (idList.isEmpty())
-- {
-- m_exceptionLists.remove(id);
-- }
-- else
-- {
-- m_exceptionLists.insert(id, idList);
-- }
--}
--
--bool VersionImageFilterSettings::isFiltering() const
--{
-- return !m_excludeTagFilter.isEmpty();
--}
--
--bool VersionImageFilterSettings::isFilteringByTags() const
--{
-- return isFiltering();
--}
--
--// -------------------------------------------------------------------------------------------------
--
--GroupImageFilterSettings::GroupImageFilterSettings()
-- : m_allOpen(false)
--{
--}
--
--bool GroupImageFilterSettings::operator==(const GroupImageFilterSettings& other) const
--{
-- return (m_allOpen == other.m_allOpen &&
-- m_openGroups == other.m_openGroups);
--}
--
--bool GroupImageFilterSettings::matches(const ImageInfo& info) const
--{
-- if (m_allOpen)
-- {
-- return true;
-- }
--
-- if (info.isGrouped())
-- {
-- return m_openGroups.contains(info.groupImage().id());
-- }
-- return true;
--}
--
--void GroupImageFilterSettings::setOpen(qlonglong group, bool open)
--{
-- if (open)
-- {
-- m_openGroups << group;
-- }
-- else
-- {
-- m_openGroups.remove(group);
-- }
--}
--
--bool GroupImageFilterSettings::isOpen(qlonglong group) const
--{
-- return m_openGroups.contains(group);
--}
--
--void GroupImageFilterSettings::setAllOpen(bool open)
--{
-- m_allOpen = open;
--}
--
--bool GroupImageFilterSettings::isAllOpen() const
--{
-- return m_allOpen;
--}
--
--bool GroupImageFilterSettings::isFiltering() const
--{
-- return !m_allOpen;
--}
--
--DatabaseFields::Set GroupImageFilterSettings::watchFlags() const
--{
-- return DatabaseFields::ImageRelations;
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagefiltersettings.h b/libs/models/imagefiltersettings.h
-deleted file mode 100644
-index 0e7beae..0000000
---- a/libs/models/imagefiltersettings.h
-+++ /dev/null
-@@ -1,349 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Filter values for use with ImageFilterModel
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- * Copyright (C) 2010 by Andi Clemens <andi dot clemens at gmail dot com>
-- * Copyright (C) 2011 by Michael G. Hansen <mike at mghansen dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGEFILTERSETTINGS_H
--#define IMAGEFILTERSETTINGS_H
--
--// Qt includes
--
--#include <QHash>
--#include <QList>
--#include <QMap>
--#include <QString>
--#include <QSet>
--#include <QUrl>
--
--// Local includes
--
--#include "searchtextbar.h"
--#include "mimefilter.h"
--#include "digikam_export.h"
--
--namespace Digikam
--{
--
--class ImageInfo;
--class VersionManagerSettings;
--
--namespace DatabaseFields
--{
-- class Set;
--}
--
--// ---------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT SearchTextFilterSettings : public SearchTextSettings
--{
--
--public:
--
-- enum TextFilterFields
-- {
-- None = 0x00,
-- ImageName = 0x01,
-- ImageTitle = 0x02,
-- ImageComment = 0x04,
-- TagName = 0x08,
-- AlbumName = 0x10,
-- ImageAspectRatio = 0x20,
-- ImagePixelSize = 0x40,
-- All = ImageName | ImageTitle | ImageComment | TagName | AlbumName | ImageAspectRatio | ImagePixelSize
-- };
--
--public:
--
-- SearchTextFilterSettings()
-- {
-- textFields = None;
-- }
--
-- explicit SearchTextFilterSettings(const SearchTextSettings& settings)
-- {
-- caseSensitive = settings.caseSensitive;
-- text = settings.text;
-- textFields = None;
-- }
--
-- TextFilterFields textFields;
--};
--
--// ---------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT ImageFilterSettings
--{
--public:
--
-- ImageFilterSettings();
--
-- /**
-- * Returns true if the given ImageInfo matches the filter criteria.
-- * Optionally, foundText is set to true if it matched by text search.
-- */
-- bool matches(const ImageInfo& info, bool* const foundText = 0) const;
--
--public:
--
-- /// --- Tags filter ---
--
-- /// Possible logical matching condition used to sort tags id.
-- enum MatchingCondition
-- {
-- OrCondition,
-- AndCondition
-- };
--
-- void setTagFilter(const QList<int>& includedTags,
-- const QList<int>& excludedTags,
-- MatchingCondition matchingCond,
-- bool showUnTagged,
-- const QList<int>& clTagIds,
-- const QList<int>& plTagIds);
--
--public:
--
-- /// --- Rating filter ---
--
-- /// Possible conditions used to filter rating: >=, =, <=
-- enum RatingCondition
-- {
-- GreaterEqualCondition,
-- EqualCondition,
-- LessEqualCondition
-- };
--
-- void setRatingFilter(int rating, RatingCondition ratingCond, bool isUnratedExcluded);
--
--public:
--
-- /// --- Date filter ---
-- void setDayFilter(const QList<QDateTime>& days);
--
--public:
--
-- /// --- Text filter ---
-- void setTextFilter(const SearchTextFilterSettings& settings);
-- void setTagNames(const QHash<int, QString>& tagNameHash);
-- void setAlbumNames(const QHash<int, QString>& albumNameHash);
--
--public:
--
-- /// --- Mime filter ---
-- void setMimeTypeFilter(int mimeTypeFilter);
--
--public:
--
-- /// --- Geolocation filter
-- enum GeolocationCondition
-- {
-- GeolocationNoFilter = 0,
-- GeolocationNoCoordinates = 1 << 1,
-- GeolocationHasCoordinates = 1 << 2
-- };
--
-- void setGeolocationFilter(const GeolocationCondition& condition);
--
--public:
--
-- /// Returns if the day is a filter criteria
-- bool isFilteringByDay() const;
--
-- /// Returns if the type mime is a filter criteria
-- bool isFilteringByTypeMime() const;
--
-- /// Returns whether geolocation is a filter criteria
-- bool isFilteringByGeolocation() const;
--
-- /// Returns if the rating is a filter criteria
-- bool isFilteringByRating() const;
--
-- /// Returns if the pick labels is a filter criteria
-- bool isFilteringByPickLabels() const;
--
-- /// Returns if the color labels is a filter criteria
-- bool isFilteringByColorLabels() const;
--
-- /// Returns if the tag is a filter criteria
-- bool isFilteringByTags() const;
--
-- /// Returns if the text (including comment) is a filter criteria
-- bool isFilteringByText() const;
--
-- /// Returns if images will be filtered by these criteria at all
-- bool isFiltering() const;
--
--public:
--
-- /// --- URL whitelist filter
-- void setUrlWhitelist(const QList<QUrl>& urlList, const QString& id);
--
--public:
--
-- /// --- ID whitelist filter
-- void setIdWhitelist(const QList<qlonglong>& idList, const QString& id);
--
--public:
--
-- /// --- Change notification ---
--
-- /** Returns database fields a change in which would affect the current filtering.
-- * To find out if an image tag change affects filtering, test isFilteringByTags().
-- * The text filter will also be affected by changes in tags and album names.
-- */
-- DatabaseFields::Set watchFlags() const;
--
--private:
--
-- /**
-- * @brief Returns whether some internal filtering (whitelist by id or URL) or normal filtering is going on
-- */
-- bool isFilteringInternally() const;
--
--private:
--
-- /// --- Tags filter ---
-- bool m_untaggedFilter;
-- QList<int> m_includeTagFilter;
-- QList<int> m_excludeTagFilter;
-- MatchingCondition m_matchingCond;
-- QList<int> m_colorLabelTagFilter;
-- QList<int> m_pickLabelTagFilter;
--
-- /// --- Rating filter ---
-- int m_ratingFilter;
-- RatingCondition m_ratingCond;
-- bool m_isUnratedExcluded;
--
-- /// --- Date filter ---
-- QMap<QDateTime, bool> m_dayFilter;
--
-- /// --- Text filter ---
-- SearchTextFilterSettings m_textFilterSettings;
--
-- /// Helpers for text search: Set these if you want to search album or tag names with text search
-- QHash<int, QString> m_tagNameHash;
-- QHash<int, QString> m_albumNameHash;
--
-- /// --- Mime filter ---
-- MimeFilter::TypeMimeFilter m_mimeTypeFilter;
--
-- /// --- Geolocation filter
-- GeolocationCondition m_geolocationCondition;
--
-- /// --- URL whitelist filter
-- QHash<QString,QList<QUrl>> m_urlWhitelists;
--
-- /// --- ID whitelist filter
-- QHash<QString,QList<qlonglong> > m_idWhitelists;
--};
--
--// ---------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT VersionImageFilterSettings
--{
--public:
--
-- VersionImageFilterSettings();
-- explicit VersionImageFilterSettings(const VersionManagerSettings& settings);
--
-- bool operator==(const VersionImageFilterSettings& other) const;
--
-- /**
-- * Returns true if the given ImageInfo matches the filter criteria.
-- */
-- bool matches(const ImageInfo& info) const;
--
-- bool isHiddenBySettings(const ImageInfo& info) const;
-- bool isExemptedBySettings(const ImageInfo& info) const;
--
-- /// --- Tags filter ---
--
-- void setVersionManagerSettings(const VersionManagerSettings& settings);
--
-- /**
-- * Add list with exceptions: These images will be exempted from filtering by this filter
-- */
-- void setExceptionList(const QList<qlonglong>& idlist, const QString& id);
--
-- /// Returns if images will be filtered by these criteria at all
-- bool isFiltering() const;
--
-- /// Returns if the tag is a filter criteria
-- bool isFilteringByTags() const;
--
-- /// DatabaseFields::Set watchFlags() const: Would return 0
--
--protected:
--
-- QList<int> m_excludeTagFilter;
-- int m_includeTagFilter;
-- int m_exceptionTagFilter;
-- QHash<QString,QList<qlonglong> > m_exceptionLists;
--};
--
--// ---------------------------------------------------------------------------------------
--
--class DIGIKAM_DATABASE_EXPORT GroupImageFilterSettings
--{
--public:
--
-- GroupImageFilterSettings();
--
-- bool operator==(const GroupImageFilterSettings& other) const;
--
-- /**
-- * Returns true if the given ImageInfo matches the filter criteria.
-- */
-- bool matches(const ImageInfo& info) const;
--
-- /**
-- * Open or close a group.
-- */
-- void setOpen(qlonglong group, bool open);
-- bool isOpen(qlonglong group) const;
--
-- /**
-- * Open all groups
-- */
-- void setAllOpen(bool open);
-- bool isAllOpen() const;
--
-- /// Returns if images will be filtered by these criteria at all
-- bool isFiltering() const;
--
-- DatabaseFields::Set watchFlags() const;
--
--protected:
--
-- bool m_allOpen;
-- QSet<qlonglong> m_openGroups;
--};
--
--} // namespace Digikam
--
--Q_DECLARE_METATYPE(Digikam::ImageFilterSettings::GeolocationCondition)
--
--#endif // IMAGEFILTERSETTINGS_H
-diff --git a/libs/models/imagelistmodel.cpp b/libs/models/imagelistmodel.cpp
-deleted file mode 100644
-index fafce34..0000000
---- a/libs/models/imagelistmodel.cpp
-+++ /dev/null
-@@ -1,70 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2010-12-06
-- * Description : An image model based on a static list
-- *
-- * Copyright (C) 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagelistmodel.h"
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "coredbaccess.h"
--#include "coredbchangesets.h"
--#include "coredbwatch.h"
--#include "imageinfo.h"
--#include "imageinfolist.h"
--
--namespace Digikam
--{
--
--ImageListModel::ImageListModel(QObject* parent)
-- : ImageThumbnailModel(parent)
--{
-- connect(CoreDbAccess::databaseWatch(), SIGNAL(collectionImageChange(CollectionImageChangeset)),
-- this, SLOT(slotCollectionImageChange(CollectionImageChangeset)));
--}
--
--ImageListModel::~ImageListModel()
--{
--}
--
--void ImageListModel::slotCollectionImageChange(const CollectionImageChangeset& changeset)
--{
-- if (isEmpty())
-- {
-- return;
-- }
--
-- switch (changeset.operation())
-- {
-- case CollectionImageChangeset::Added:
-- break;
-- case CollectionImageChangeset::Removed:
-- case CollectionImageChangeset::RemovedAll:
-- removeImageInfos(ImageInfoList(changeset.ids()));
-- break;
--
-- default:
-- break;
-- }
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagelistmodel.h b/libs/models/imagelistmodel.h
-deleted file mode 100644
-index a225b1b..0000000
---- a/libs/models/imagelistmodel.h
-+++ /dev/null
-@@ -1,63 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2010-12-06
-- * Description : An image model based on a static list
-- *
-- * Copyright (C) 2010-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGELISTMODEL_H
--#define IMAGELISTMODEL_H
--
--// Local includes
--
--#include "imagethumbnailmodel.h"
--#include "digikam_export.h"
--
--namespace Digikam
--{
--
--class ImageChangeset;
--class CollectionImageChangeset;
--
--class DIGIKAM_DATABASE_EXPORT ImageListModel : public ImageThumbnailModel
--{
-- Q_OBJECT
--
--public:
--
-- explicit ImageListModel(QObject* parent = 0);
-- ~ImageListModel();
--
-- // NOTE: necessary methods to add and remove ImageInfos to the model are inherited from ImageModel
--
--Q_SIGNALS:
--
-- /**
-- * Emitted when images are removed from the model because they are removed in the database
-- */
-- void imageInfosRemoved(const QList<ImageInfo>& infos);
--
--protected Q_SLOTS:
--
-- void slotCollectionImageChange(const CollectionImageChangeset& changeset);
--};
--
--} // namespace Digikam
--
--#endif // IMAGELISTMODEL_H
-diff --git a/libs/models/imagemodel.cpp b/libs/models/imagemodel.cpp
-deleted file mode 100644
-index 41b43cf..0000000
---- a/libs/models/imagemodel.cpp
-+++ /dev/null
-@@ -1,1368 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagemodel.h"
--
--// Qt includes
--
--#include <QHash>
--#include <QItemSelection>
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "coredbchangesets.h"
--#include "coredbfields.h"
--#include "coredbwatch.h"
--#include "imageinfo.h"
--#include "imageinfolist.h"
--#include "abstractitemdragdrophandler.h"
--
--namespace Digikam
--{
--
--class ImageModel::Private
--{
--public:
--
-- Private()
-- {
-- preprocessor = 0;
-- keepFilePathCache = false;
-- sendRemovalSignals = false;
-- incrementalUpdater = 0;
-- refreshing = false;
-- reAdding = false;
-- incrementalRefreshRequested = false;
-- }
--
-- ImageInfoList infos;
-- QList<QVariant> extraValues;
-- QHash<qlonglong, int> idHash;
--
-- bool keepFilePathCache;
-- QHash<QString, qlonglong> filePathHash;
--
-- bool sendRemovalSignals;
--
-- QObject* preprocessor;
-- bool refreshing;
-- bool reAdding;
-- bool incrementalRefreshRequested;
--
-- DatabaseFields::Set watchFlags;
--
-- class ImageModelIncrementalUpdater* incrementalUpdater;
--
-- ImageInfoList pendingInfos;
-- QList<QVariant> pendingExtraValues;
--
-- inline bool isValid(const QModelIndex& index)
-- {
-- if (!index.isValid())
-- {
-- return false;
-- }
--
-- if (index.row() < 0 || index.row() >= infos.size())
-- {
-- qCDebug(DIGIKAM_GENERAL_LOG) << "Invalid index" << index;
-- return false;
-- }
--
-- return true;
-- }
-- inline bool extraValueValid(const QModelIndex& index)
-- {
-- // we assume isValid() being called before, no duplicate checks
-- if (index.row() >= extraValues.size())
-- {
-- qCDebug(DIGIKAM_GENERAL_LOG) << "Invalid index for extraData" << index;
-- return false;
-- }
--
-- return true;
-- }
--};
--
--typedef QPair<int, int> IntPair; // to make foreach macro happy
--typedef QList<IntPair> IntPairList;
--
--class ImageModelIncrementalUpdater
--{
--public:
--
-- explicit ImageModelIncrementalUpdater(ImageModel::Private* d);
--
-- void appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void aboutToBeRemovedInModel(const IntPairList& aboutToBeRemoved);
-- QList<IntPair> oldIndexes();
--
-- static QList<IntPair> toContiguousPairs(const QList<int>& ids);
--
--public:
--
-- QHash<qlonglong, int> oldIds;
-- QList<QVariant> oldExtraValues;
-- QList<ImageInfo> newInfos;
-- QList<QVariant> newExtraValues;
-- QList<IntPairList> modelRemovals;
--};
--
--ImageModel::ImageModel(QObject* parent)
-- : QAbstractListModel(parent),
-- d(new Private)
--{
-- connect(CoreDbAccess::databaseWatch(), SIGNAL(imageChange(ImageChangeset)),
-- this, SLOT(slotImageChange(ImageChangeset)));
--
-- connect(CoreDbAccess::databaseWatch(), SIGNAL(imageTagChange(ImageTagChangeset)),
-- this, SLOT(slotImageTagChange(ImageTagChangeset)));
--}
--
--ImageModel::~ImageModel()
--{
-- delete d->incrementalUpdater;
-- delete d;
--}
--
--// ------------ Access methods -------------
--
--void ImageModel::setKeepsFilePathCache(bool keepCache)
--{
-- d->keepFilePathCache = keepCache;
--}
--
--bool ImageModel::keepsFilePathCache() const
--{
-- return d->keepFilePathCache;
--}
--
--bool ImageModel::isEmpty() const
--{
-- return d->infos.isEmpty();
--}
--
--void ImageModel::setWatchFlags(const DatabaseFields::Set& set)
--{
-- d->watchFlags = set;
--}
--
--ImageInfo ImageModel::imageInfo(const QModelIndex& index) const
--{
-- if (!d->isValid(index))
-- {
-- return ImageInfo();
-- }
--
-- return d->infos.at(index.row());
--}
--
--ImageInfo& ImageModel::imageInfoRef(const QModelIndex& index) const
--{
-- return d->infos[index.row()];
--}
--
--qlonglong ImageModel::imageId(const QModelIndex& index) const
--{
-- if (!d->isValid(index))
-- {
-- return 0;
-- }
--
-- return d->infos.at(index.row()).id();
--}
--
--QList<ImageInfo> ImageModel::imageInfos(const QList<QModelIndex>& indexes) const
--{
-- QList<ImageInfo> infos;
--
-- foreach(const QModelIndex& index, indexes)
-- {
-- infos << imageInfo(index);
-- }
--
-- return infos;
--}
--
--QList<qlonglong> ImageModel::imageIds(const QList<QModelIndex>& indexes) const
--{
-- QList<qlonglong> ids;
--
-- foreach(const QModelIndex& index, indexes)
-- {
-- ids << imageId(index);
-- }
--
-- return ids;
--}
--
--ImageInfo ImageModel::imageInfo(int row) const
--{
-- if (row >= d->infos.size())
-- {
-- return ImageInfo();
-- }
--
-- return d->infos.at(row);
--}
--
--ImageInfo& ImageModel::imageInfoRef(int row) const
--{
-- return d->infos[row];
--}
--
--qlonglong ImageModel::imageId(int row) const
--{
-- if (row < 0 || row >= d->infos.size())
-- {
-- return -1;
-- }
--
-- return d->infos.at(row).id();
--}
--
--QModelIndex ImageModel::indexForImageInfo(const ImageInfo& info) const
--{
-- return indexForImageId(info.id());
--}
--
--QModelIndex ImageModel::indexForImageInfo(const ImageInfo& info, const QVariant& extraValue) const
--{
-- return indexForImageId(info.id(), extraValue);
--}
--
--QList<QModelIndex> ImageModel::indexesForImageInfo(const ImageInfo& info) const
--{
-- return indexesForImageId(info.id());
--}
--
--QModelIndex ImageModel::indexForImageId(qlonglong id) const
--{
-- int index = d->idHash.value(id, -1);
--
-- if (index != -1)
-- {
-- return createIndex(index, 0);
-- }
--
-- return QModelIndex();
--}
--
--QModelIndex ImageModel::indexForImageId(qlonglong id, const QVariant& extraValue) const
--{
-- if (d->extraValues.isEmpty())
-- return indexForImageId(id);
--
-- QHash<qlonglong, int>::const_iterator it;
--
-- for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-- {
-- if (d->extraValues.at(it.value()) == extraValue)
-- return createIndex(it.value(), 0);
-- }
--
-- return QModelIndex();
--}
--
--QList<QModelIndex> ImageModel::indexesForImageId(qlonglong id) const
--{
-- QList<QModelIndex> indexes;
-- QHash<qlonglong, int>::const_iterator it;
--
-- for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-- {
-- indexes << createIndex(it.value(), 0);
-- }
--
-- return indexes;
--}
--
--int ImageModel::numberOfIndexesForImageInfo(const ImageInfo& info) const
--{
-- return numberOfIndexesForImageId(info.id());
--}
--
--int ImageModel::numberOfIndexesForImageId(qlonglong id) const
--{
-- if (d->extraValues.isEmpty())
-- {
-- return 0;
-- }
--
-- int count = 0;
-- QHash<qlonglong,int>::const_iterator it;
--
-- for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-- {
-- ++count;
-- }
--
-- return count;
--}
--
--// static method
--ImageInfo ImageModel::retrieveImageInfo(const QModelIndex& index)
--{
-- if (!index.isValid())
-- {
-- return ImageInfo();
-- }
--
-- ImageModel* const model = index.data(ImageModelPointerRole).value<ImageModel*>();
-- int row = index.data(ImageModelInternalId).toInt();
--
-- if (!model)
-- {
-- return ImageInfo();
-- }
--
-- return model->imageInfo(row);
--}
--
--// static method
--qlonglong ImageModel::retrieveImageId(const QModelIndex& index)
--{
-- if (!index.isValid())
-- {
-- return 0;
-- }
--
-- ImageModel* const model = index.data(ImageModelPointerRole).value<ImageModel*>();
-- int row = index.data(ImageModelInternalId).toInt();
--
-- if (!model)
-- {
-- return 0;
-- }
--
-- return model->imageId(row);
--}
--
--QModelIndex ImageModel::indexForPath(const QString& filePath) const
--{
-- if (d->keepFilePathCache)
-- {
-- return indexForImageId(d->filePathHash.value(filePath));
-- }
-- else
-- {
-- const int size = d->infos.size();
--
-- for (int i=0; i<size; ++i)
-- {
-- if (d->infos.at(i).filePath() == filePath)
-- {
-- return createIndex(i, 0);
-- }
-- }
-- }
--
-- return QModelIndex();
--}
--
--QList<QModelIndex> ImageModel::indexesForPath(const QString& filePath) const
--{
-- if (d->keepFilePathCache)
-- {
-- return indexesForImageId(d->filePathHash.value(filePath));
-- }
-- else
-- {
-- QList<QModelIndex> indexes;
-- const int size = d->infos.size();
--
-- for (int i=0; i<size; ++i)
-- {
-- if (d->infos.at(i).filePath() == filePath)
-- {
-- indexes << createIndex(i, 0);
-- }
-- }
--
-- return indexes;
-- }
--}
--
--ImageInfo ImageModel::imageInfo(const QString& filePath) const
--{
-- if (d->keepFilePathCache)
-- {
-- qlonglong id = d->filePathHash.value(filePath);
--
-- if (id)
-- {
-- int index = d->idHash.value(id, -1);
--
-- if (index != -1)
-- {
-- return d->infos.at(index);
-- }
-- }
-- }
-- else
-- {
-- foreach(const ImageInfo& info, d->infos)
-- {
-- if (info.filePath() == filePath)
-- {
-- return info;
-- }
-- }
-- }
--
-- return ImageInfo();
--}
--
--QList<ImageInfo> ImageModel::imageInfos(const QString& filePath) const
--{
-- QList<ImageInfo> infos;
--
-- if (d->keepFilePathCache)
-- {
-- qlonglong id = d->filePathHash.value(filePath);
--
-- if (id)
-- {
-- foreach(int index, d->idHash.values(id))
-- {
-- infos << d->infos.at(index);
-- }
-- }
-- }
-- else
-- {
-- foreach(const ImageInfo& info, d->infos)
-- {
-- if (info.filePath() == filePath)
-- {
-- infos << info;
-- }
-- }
-- }
--
-- return infos;
--}
--
--void ImageModel::addImageInfo(const ImageInfo& info)
--{
-- addImageInfos(QList<ImageInfo>() << info, QList<QVariant>());
--}
--
--void ImageModel::addImageInfos(const QList<ImageInfo>& infos)
--{
-- addImageInfos(infos, QList<QVariant>());
--}
--
--void ImageModel::addImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (infos.isEmpty())
-- {
-- return;
-- }
--
-- if (d->incrementalUpdater)
-- {
-- d->incrementalUpdater->appendInfos(infos, extraValues);
-- }
-- else
-- {
-- appendInfos(infos, extraValues);
-- }
--}
--
--void ImageModel::addImageInfoSynchronously(const ImageInfo& info)
--{
-- addImageInfosSynchronously(QList<ImageInfo>() << info, QList<QVariant>());
--}
--
--void ImageModel::addImageInfosSynchronously(const QList<ImageInfo>& infos)
--{
-- addImageInfos(infos, QList<QVariant>());
--}
--
--void ImageModel::addImageInfosSynchronously(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (infos.isEmpty())
-- {
-- return;
-- }
--
-- publiciseInfos(infos, extraValues);
-- emit processAdded(infos, extraValues);
--}
--
--void ImageModel::ensureHasImageInfo(const ImageInfo& info)
--{
-- ensureHasImageInfos(QList<ImageInfo>() << info, QList<QVariant>());
--}
--
--void ImageModel::ensureHasImageInfos(const QList<ImageInfo>& infos)
--{
-- ensureHasImageInfos(infos, QList<QVariant>());
--}
--
--void ImageModel::ensureHasImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (extraValues.isEmpty())
-- {
-- if (!d->pendingExtraValues.isEmpty())
-- {
-- qCDebug(DIGIKAM_GENERAL_LOG) << "ExtraValue / No Extra Value mismatch. Ignoring added infos.";
-- return;
-- }
-- }
-- else
-- {
-- if (d->pendingInfos.size() != d->pendingExtraValues.size())
-- {
-- qCDebug(DIGIKAM_GENERAL_LOG) << "ExtraValue / No Extra Value mismatch. Ignoring added infos.";
-- return;
-- }
-- }
--
-- d->pendingInfos << infos;
-- d->pendingExtraValues << extraValues;
-- cleanSituationChecks();
--}
--
--void ImageModel::clearImageInfos()
--{
-- d->infos.clear();
-- d->extraValues.clear();
-- d->idHash.clear();
-- d->filePathHash.clear();
-- delete d->incrementalUpdater;
-- d->incrementalUpdater = 0;
-- d->pendingInfos.clear();
-- d->pendingExtraValues.clear();
-- d->refreshing = false;
-- d->reAdding = false;
-- d->incrementalRefreshRequested = false;
--
-- beginResetModel();
-- endResetModel();
--
-- imageInfosCleared();
--}
--
--void ImageModel::setImageInfos(const QList<ImageInfo>& infos)
--{
-- clearImageInfos();
-- addImageInfos(infos);
--}
--
--QList<ImageInfo> ImageModel::imageInfos() const
--{
-- return d->infos;
--}
--
--QList<qlonglong> ImageModel::imageIds() const
--{
-- return d->idHash.keys();
--}
--
--bool ImageModel::hasImage(qlonglong id) const
--{
-- return d->idHash.contains(id);
--}
--
--bool ImageModel::hasImage(const ImageInfo& info) const
--{
-- return d->idHash.contains(info.id());
--}
--
--bool ImageModel::hasImage(const ImageInfo& info, const QVariant& extraValue) const
--{
-- return hasImage(info.id(), extraValue);
--}
--
--bool ImageModel::hasImage(qlonglong id, const QVariant& extraValue) const
--{
-- if (d->extraValues.isEmpty())
-- return hasImage(id);
--
-- QHash<qlonglong, int>::const_iterator it;
--
-- for (it = d->idHash.constFind(id); it != d->idHash.constEnd() && it.key() == id; ++it)
-- {
-- if (d->extraValues.at(it.value()) == extraValue)
-- return true;
-- }
--
-- return false;;
--}
--
--QList<ImageInfo> ImageModel::uniqueImageInfos() const
--{
-- if (d->extraValues.isEmpty())
-- {
-- return d->infos;
-- }
--
-- QList<ImageInfo> uniqueInfos;
-- const int size = d->infos.size();
--
-- for (int i=0; i<size; ++i)
-- {
-- const ImageInfo& info = d->infos.at(i);
--
-- if (d->idHash.value(info.id()) == i)
-- {
-- uniqueInfos << info;
-- }
-- }
--
-- return uniqueInfos;
--}
--
--void ImageModel::emitDataChangedForAll()
--{
-- if (d->infos.isEmpty())
-- {
-- return;
-- }
--
-- QModelIndex first = createIndex(0, 0);
-- QModelIndex last = createIndex(d->infos.size() - 1, 0);
-- emit dataChanged(first, last);
--}
--
--void ImageModel::emitDataChangedForSelection(const QItemSelection& selection)
--{
-- if (!selection.isEmpty())
-- {
-- foreach(const QItemSelectionRange& range, selection)
-- {
-- emit dataChanged(range.topLeft(), range.bottomRight());
-- }
-- }
--}
--
--void ImageModel::ensureHasGroupedImages(const ImageInfo& groupLeader)
--{
-- ensureHasImageInfos(groupLeader.groupedImages());
--}
--
--// ------------ Preprocessing -------------
--
--void ImageModel::setPreprocessor(QObject* preprocessor)
--{
-- unsetPreprocessor(d->preprocessor);
-- d->preprocessor = preprocessor;
--}
--
--void ImageModel::unsetPreprocessor(QObject* preprocessor)
--{
-- if (preprocessor && d->preprocessor == preprocessor)
-- {
-- disconnect(this, SIGNAL(preprocess(QList<ImageInfo>,QList<QVariant>)), 0, 0);
-- disconnect(d->preprocessor, 0, this, SLOT(reAddImageInfos(QList<ImageInfo>,QList<QVariant>)));
-- disconnect(d->preprocessor, 0, this, SLOT(reAddingFinished()));
-- }
--}
--
--void ImageModel::appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (infos.isEmpty())
-- {
-- return;
-- }
--
-- if (d->preprocessor)
-- {
-- d->reAdding = true;
-- emit preprocess(infos, extraValues);
-- }
-- else
-- {
-- publiciseInfos(infos, extraValues);
-- }
--}
--
--void ImageModel::appendInfosChecked(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- // This method does deduplication. It is private because in context of readding or refreshing it is of no use.
--
-- if (extraValues.isEmpty())
-- {
-- QList<ImageInfo> checkedInfos;
--
-- foreach (const ImageInfo& info, infos)
-- {
-- if (!hasImage(info))
-- {
-- checkedInfos << info;
-- }
-- }
--
-- appendInfos(checkedInfos, QList<QVariant>());
-- }
-- else
-- {
-- QList<ImageInfo> checkedInfos;
-- QList<QVariant> checkedExtraValues;
-- const int size = infos.size();
--
-- for (int i=0; i<size; i++)
-- {
-- if (!hasImage(infos[i], extraValues[i]))
-- {
-- checkedInfos << infos[i];
-- checkedExtraValues << extraValues[i];
-- }
-- }
--
-- appendInfos(checkedInfos, checkedExtraValues);
-- }
--}
--
--void ImageModel::reAddImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- // addImageInfos -> appendInfos -> preprocessor -> reAddImageInfos
-- publiciseInfos(infos, extraValues);
--}
--
--void ImageModel::reAddingFinished()
--{
-- d->reAdding = false;
-- cleanSituationChecks();
--}
--
--void ImageModel::startRefresh()
--{
-- d->refreshing = true;
--}
--
--void ImageModel::finishRefresh()
--{
-- d->refreshing = false;
-- cleanSituationChecks();
--}
--
--bool ImageModel::isRefreshing() const
--{
-- return d->refreshing;
--}
--
--void ImageModel::cleanSituationChecks()
--{
-- // For starting an incremental refresh we want a clear situation:
-- // Any remaining batches from non-incremental refreshing subclasses have been received in appendInfos(),
-- // any batches sent to preprocessor for re-adding have been re-added.
-- if (d->refreshing || d->reAdding)
-- {
-- return;
-- }
--
-- if (!d->pendingInfos.isEmpty())
-- {
-- appendInfosChecked(d->pendingInfos, d->pendingExtraValues);
-- d->pendingInfos.clear();
-- d->pendingExtraValues.clear();
-- cleanSituationChecks();
-- return;
-- }
--
-- if (d->incrementalRefreshRequested)
-- {
-- d->incrementalRefreshRequested = false;
-- emit readyForIncrementalRefresh();
-- }
-- else
-- {
-- emit allRefreshingFinished();
-- }
--}
--
--void ImageModel::publiciseInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (infos.isEmpty())
-- {
-- return;
-- }
--
-- Q_ASSERT(infos.size() == extraValues.size() || (extraValues.isEmpty() && d->extraValues.isEmpty()));
--
-- emit imageInfosAboutToBeAdded(infos);
-- const int firstNewIndex = d->infos.size();
-- const int lastNewIndex = d->infos.size() + infos.size() - 1;
-- beginInsertRows(QModelIndex(), firstNewIndex, lastNewIndex);
-- d->infos << infos;
-- d->extraValues << extraValues;
--
-- for (int i=firstNewIndex; i<=lastNewIndex; ++i)
-- {
-- const ImageInfo& info = d->infos.at(i);
-- qlonglong id = info.id();
-- d->idHash.insertMulti(id, i);
--
-- if (d->keepFilePathCache)
-- {
-- d->filePathHash[info.filePath()] = id;
-- }
-- }
--
-- endInsertRows();
-- emit imageInfosAdded(infos);
--}
--
--void ImageModel::requestIncrementalRefresh()
--{
-- if (d->reAdding)
-- {
-- d->incrementalRefreshRequested = true;
-- }
-- else
-- {
-- emit readyForIncrementalRefresh();
-- }
--}
--
--bool ImageModel::hasIncrementalRefreshPending() const
--{
-- return d->incrementalRefreshRequested;
--}
--
--void ImageModel::startIncrementalRefresh()
--{
-- delete d->incrementalUpdater;
--
-- d->incrementalUpdater = new ImageModelIncrementalUpdater(d);
--}
--
--void ImageModel::finishIncrementalRefresh()
--{
-- if (!d->incrementalUpdater)
-- {
-- return;
-- }
--
-- // remove old entries
-- QList<QPair<int, int> > pairs = d->incrementalUpdater->oldIndexes();
-- removeRowPairs(pairs);
--
-- // add new indexes
-- appendInfos(d->incrementalUpdater->newInfos, d->incrementalUpdater->newExtraValues);
--
-- delete d->incrementalUpdater;
-- d->incrementalUpdater = 0;
--}
--
--void ImageModel::removeIndex(const QModelIndex& index)
--{
-- removeIndexes(QList<QModelIndex>() << index);
--}
--
--void ImageModel::removeIndexes(const QList<QModelIndex>& indexes)
--{
-- QList<int> listIndexes;
--
-- foreach(const QModelIndex& index, indexes)
-- {
-- if (d->isValid(index))
-- {
-- listIndexes << index.row();
-- }
-- }
--
-- if (listIndexes.isEmpty())
-- {
-- return;
-- }
--
-- removeRowPairsWithCheck(ImageModelIncrementalUpdater::toContiguousPairs(listIndexes));
--}
--
--void ImageModel::removeImageInfo(const ImageInfo& info)
--{
-- removeImageInfos(QList<ImageInfo>() << info);
--}
--
--void ImageModel::removeImageInfos(const QList<ImageInfo>& infos)
--{
-- QList<int> listIndexes;
--
-- foreach(const ImageInfo& info, infos)
-- {
-- QModelIndex index = indexForImageId(info.id());
--
-- if (index.isValid())
-- {
-- listIndexes << index.row();
-- }
-- }
-- removeRowPairsWithCheck(ImageModelIncrementalUpdater::toContiguousPairs(listIndexes));
--}
--
--void ImageModel::removeImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (extraValues.isEmpty())
-- {
-- removeImageInfos(infos);
-- return;
-- }
--
-- QList<int> listIndexes;
--
-- for (int i=0; i<infos.size(); ++i)
-- {
-- QModelIndex index = indexForImageId(infos.at(i).id(), extraValues.at(i));
--
-- if (index.isValid())
-- {
-- listIndexes << index.row();
-- }
-- }
--
-- removeRowPairsWithCheck(ImageModelIncrementalUpdater::toContiguousPairs(listIndexes));
--}
--
--void ImageModel::setSendRemovalSignals(bool send)
--{
-- d->sendRemovalSignals = send;
--}
--
--template <class List, typename T>
--static bool pairsContain(const List& list, T value)
--{
-- typename List::const_iterator middle;
-- typename List::const_iterator begin = list.begin();
-- typename List::const_iterator end = list.end();
-- int n = int(end - begin);
-- int half;
--
-- while (n > 0)
-- {
-- half = n >> 1;
-- middle = begin + half;
--
-- if (middle->first <= value && middle->second >= value)
-- {
-- return true;
-- }
-- else if (middle->second < value)
-- {
-- begin = middle + 1;
-- n -= half + 1;
-- }
-- else
-- {
-- n = half;
-- }
-- }
--
-- return false;
--}
--
--void ImageModel::removeRowPairsWithCheck(const QList<QPair<int, int> >& toRemove)
--{
-- if (d->incrementalUpdater)
-- {
-- d->incrementalUpdater->aboutToBeRemovedInModel(toRemove);
-- }
--
-- removeRowPairs(toRemove);
--}
--
--void ImageModel::removeRowPairs(const QList<QPair<int, int> >& toRemove)
--{
-- if (toRemove.isEmpty())
-- {
-- return;
-- }
--
-- // Remove old indexes
-- // Keep in mind that when calling beginRemoveRows all structures announced to be removed
-- // must still be valid, and this includes our hashes as well, which limits what we can optimize
--
-- int removedRows = 0, offset = 0;
-- typedef QPair<int, int> IntPair; // to make foreach macro happy
--
-- foreach(const IntPair& pair, toRemove)
-- {
-- const int begin = pair.first - offset;
-- const int end = pair.second - offset; // inclusive
-- removedRows = end - begin + 1;
--
-- // when removing from the list, all subsequent indexes are affected
-- offset += removedRows;
--
-- QList<ImageInfo> removedInfos;
--
-- if (d->sendRemovalSignals)
-- {
-- qCopy(d->infos.begin() + begin, d->infos.begin() + end, removedInfos.begin());
-- emit imageInfosAboutToBeRemoved(removedInfos);
-- }
--
-- imageInfosAboutToBeRemoved(begin, end);
-- beginRemoveRows(QModelIndex(), begin, end);
--
-- // update idHash - which points to indexes of d->infos, and these change now!
-- QHash<qlonglong, int>::iterator it;
--
-- for (it = d->idHash.begin(); it != d->idHash.end(); )
-- {
-- if (it.value() >= begin)
-- {
-- if (it.value() > end)
-- {
-- // after the removed interval: adjust index
-- it.value() -= removedRows;
-- }
-- else
-- {
-- // in the removed interval
-- it = d->idHash.erase(it);
-- continue;
-- }
-- }
--
-- ++it;
-- }
--
-- // remove from list
-- d->infos.erase(d->infos.begin() + begin, d->infos.begin() + (end + 1));
--
-- if (!d->extraValues.isEmpty())
-- {
-- d->extraValues.erase(d->extraValues.begin() + begin, d->extraValues.begin() + (end + 1));
-- }
--
-- endRemoveRows();
--
-- if (d->sendRemovalSignals)
-- {
-- emit imageInfosRemoved(removedInfos);
-- }
-- }
--
-- // tidy up: remove old indexes from file path hash now
-- if (d->keepFilePathCache)
-- {
-- QHash<QString, qlonglong>::iterator it;
--
-- for (it = d->filePathHash.begin(); it != d->filePathHash.end(); )
-- {
-- if (pairsContain(toRemove, it.value()))
-- {
-- it = d->filePathHash.erase(it);
-- }
-- else
-- {
-- ++it;
-- }
-- }
-- }
--}
--
--ImageModelIncrementalUpdater::ImageModelIncrementalUpdater(ImageModel::Private* d)
--{
-- oldIds = d->idHash;
-- oldExtraValues = d->extraValues;
--}
--
--void ImageModelIncrementalUpdater::appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues)
--{
-- if (extraValues.isEmpty())
-- {
-- foreach(const ImageInfo& info, infos)
-- {
-- QHash<qlonglong,int>::iterator it = oldIds.find(info.id());
--
-- if (it != oldIds.end())
-- {
-- oldIds.erase(it);
-- }
-- else
-- {
-- newInfos << info;
-- }
-- }
-- }
-- else
-- {
-- for (int i=0; i<infos.size(); ++i)
-- {
-- const ImageInfo& info = infos.at(i);
-- bool found = false;
-- QHash<qlonglong,int>::iterator it;
--
-- for (it = oldIds.find(info.id()); it != oldIds.end() && it.key() == info.id(); ++it)
-- {
-- // first check is for bug #262596. Not sure if needed.
-- if (it.value() < oldExtraValues.size() && extraValues.at(i) == oldExtraValues.at(it.value()))
-- {
-- found = true;
-- break;
-- }
-- }
--
-- if (found)
-- {
-- oldIds.erase(it);
-- // do not erase from oldExtraValues - oldIds is a hash id -> index.
-- }
-- else
-- {
-- newInfos << info;
-- newExtraValues << extraValues.at(i);
-- }
-- }
-- }
--}
--
--void ImageModelIncrementalUpdater::aboutToBeRemovedInModel(const IntPairList& toRemove)
--{
-- modelRemovals << toRemove;
--}
--
--QList<QPair<int, int> > ImageModelIncrementalUpdater::oldIndexes()
--{
-- // first, apply all changes to indexes by direct removal in model
-- // while the updater was active
-- foreach(const IntPairList& list, modelRemovals)
-- {
-- int removedRows = 0, offset = 0;
--
-- foreach(const IntPair& pair, list)
-- {
-- const int begin = pair.first - offset;
-- const int end = pair.second - offset; // inclusive
-- removedRows = end - begin + 1;
--
-- // when removing from the list, all subsequent indexes are affected
-- offset += removedRows;
--
-- // update idHash - which points to indexes of d->infos, and these change now!
-- QHash<qlonglong, int>::iterator it;
--
-- for (it = oldIds.begin(); it != oldIds.end(); )
-- {
-- if (it.value() >= begin)
-- {
-- if (it.value() > end)
-- {
-- // after the removed interval: adjust index
-- it.value() -= removedRows;
-- }
-- else
-- {
-- // in the removed interval
-- it = oldIds.erase(it);
-- continue;
-- }
-- }
--
-- ++it;
-- }
-- }
-- }
--
-- modelRemovals.clear();
--
-- return toContiguousPairs(oldIds.values());
--}
--
--QList<QPair<int, int> > ImageModelIncrementalUpdater::toContiguousPairs(const QList<int>& unsorted)
--{
-- // Take the given indices and return them as contiguous pairs [begin, end]
--
-- QList<QPair<int, int> > pairs;
--
-- if (unsorted.isEmpty())
-- {
-- return pairs;
-- }
--
-- QList<int> indices(unsorted);
-- qSort(indices);
--
-- QPair<int, int> pair(indices.first(), indices.first());
--
-- for (int i=1; i<indices.size(); ++i)
-- {
-- const int &index = indices.at(i);
--
-- if (index == pair.second + 1)
-- {
-- pair.second = index;
-- continue;
-- }
--
-- pairs << pair; // insert last pair
-- pair.first = index;
-- pair.second = index;
-- }
--
-- pairs << pair;
--
-- return pairs;
--}
--
--// ------------ QAbstractItemModel implementation -------------
--
--QVariant ImageModel::data(const QModelIndex& index, int role) const
--{
-- if (!d->isValid(index))
-- {
-- return QVariant();
-- }
--
-- switch (role)
-- {
-- case Qt::DisplayRole:
-- case Qt::ToolTipRole:
-- return d->infos.at(index.row()).name();
--
-- case ImageModelPointerRole:
-- return QVariant::fromValue(const_cast<ImageModel*>(this));
--
-- case ImageModelInternalId:
-- return index.row();
--
-- case CreationDateRole:
-- return d->infos.at(index.row()).dateTime();
--
-- case ExtraDataRole:
--
-- if (d->extraValueValid(index))
-- {
-- return d->extraValues.at(index.row());
-- }
-- else
-- {
-- return QVariant();
-- }
--
-- case ExtraDataDuplicateCount:
-- {
-- qlonglong id = d->infos.at(index.row()).id();
-- return numberOfIndexesForImageId(id);
-- }
-- }
--
-- return QVariant();
--}
--
--QVariant ImageModel::headerData(int section, Qt::Orientation orientation, int role) const
--{
-- Q_UNUSED(section)
-- Q_UNUSED(orientation)
-- Q_UNUSED(role)
-- return QVariant();
--}
--
--int ImageModel::rowCount(const QModelIndex& parent) const
--{
-- if (parent.isValid())
-- {
-- return 0;
-- }
--
-- return d->infos.size();
--}
--
--Qt::ItemFlags ImageModel::flags(const QModelIndex& index) const
--{
-- if (!d->isValid(index))
-- {
-- return 0;
-- }
--
-- Qt::ItemFlags f = Qt::ItemIsSelectable | Qt::ItemIsEnabled;
--
-- f |= dragDropFlags(index);
--
-- return f;
--}
--
--QModelIndex ImageModel::index(int row, int column, const QModelIndex& parent) const
--{
-- if (column != 0 || row < 0 || parent.isValid() || row >= d->infos.size())
-- {
-- return QModelIndex();
-- }
--
-- return createIndex(row, 0);
--}
--
--// ------------ Database watch -------------
--
--void ImageModel::slotImageChange(const ImageChangeset& changeset)
--{
-- if (d->infos.isEmpty())
-- {
-- return;
-- }
--
-- if (d->watchFlags & changeset.changes())
-- {
-- QItemSelection items;
--
-- foreach(const qlonglong& id, changeset.ids())
-- {
-- QModelIndex index = indexForImageId(id);
--
-- if (index.isValid())
-- {
-- items.select(index, index);
-- }
-- }
--
-- if (!items.isEmpty())
-- {
-- emitDataChangedForSelection(items);
-- emit imageChange(changeset, items);
-- }
-- }
--}
--
--void ImageModel::slotImageTagChange(const ImageTagChangeset& changeset)
--{
-- if (d->infos.isEmpty())
-- {
-- return;
-- }
--
-- QItemSelection items;
--
-- foreach(const qlonglong& id, changeset.ids())
-- {
-- QModelIndex index = indexForImageId(id);
--
-- if (index.isValid())
-- {
-- items.select(index, index);
-- }
-- }
--
-- if (!items.isEmpty())
-- {
-- emitDataChangedForSelection(items);
-- emit imageTagChange(changeset, items);
-- }
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagemodel.h b/libs/models/imagemodel.h
-deleted file mode 100644
-index dcf94c2..0000000
---- a/libs/models/imagemodel.h
-+++ /dev/null
-@@ -1,364 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGEMODEL_H
--#define IMAGEMODEL_H
--
--// Qt includes
--
--#include <QAbstractListModel>
--
--// Local includes
--
--#include "dragdropimplementations.h"
--#include "imageinfo.h"
--#include "digikam_export.h"
--
--class QItemSelection;
--
--namespace Digikam
--{
--
--class ImageChangeset;
--class ImageTagChangeset;
--
--namespace DatabaseFields
--{
--class Set;
--}
--
--class DIGIKAM_DATABASE_EXPORT ImageModel : public QAbstractListModel, public DragDropModelImplementation
--{
-- Q_OBJECT
--
--public:
--
-- enum ImageModelRoles
-- {
-- /// An ImageModel* pointer to this model
-- ImageModelPointerRole = Qt::UserRole,
-- ImageModelInternalId = Qt::UserRole + 1,
-- /// Returns a thumbnail pixmap. May be implemented by subclasses.
-- /// Returns either a valid pixmap or a null QVariant.
-- ThumbnailRole = Qt::UserRole + 2,
-- /// Returns a QDateTime with the creation date
-- CreationDateRole = Qt::UserRole + 3,
-- /// Return (optional) extraData field
-- ExtraDataRole = Qt::UserRole + 5,
-- /// Returns the number of duplicate indexes for the same image id
-- ExtraDataDuplicateCount = Qt::UserRole + 6,
--
-- // Roles which are defined here but not implemented by ImageModel
-- /// Returns position of item in Left Light Table preview.
-- LTLeftPanelRole = Qt::UserRole + 50,
-- /// Returns position of item in Right Light Table preview.
-- LTRightPanelRole = Qt::UserRole + 51,
--
-- // For use by subclasses
-- SubclassRoles = Qt::UserRole + 100,
-- // For use by filter models
-- FilterModelRoles = Qt::UserRole + 500
-- };
--
--public:
--
-- explicit ImageModel(QObject* parent = 0);
-- ~ImageModel();
--
-- /** If a cache is kept, lookup by file path is fast,
-- * without a cache it is O(n). Default is false.
-- */
-- void setKeepsFilePathCache(bool keepCache);
-- bool keepsFilePathCache() const;
--
-- /** Set a set of database fields to watch.
-- * If either of these is changed, dataChanged() will be emitted.
-- * Default is no flag (no signal will be emitted).
-- */
-- void setWatchFlags(const DatabaseFields::Set& set);
--
-- /** Returns the ImageInfo object, reference or image id from the underlying data
-- * pointed to by the index.
-- * If the index is not valid, imageInfo will return a null ImageInfo, imageId will
-- * return 0, imageInfoRef must not be called with an invalid index.
-- */
-- ImageInfo imageInfo(const QModelIndex& index) const;
-- ImageInfo& imageInfoRef(const QModelIndex& index) const;
-- qlonglong imageId(const QModelIndex& index) const;
-- QList<ImageInfo> imageInfos(const QList<QModelIndex>& indexes) const;
-- QList<qlonglong> imageIds(const QList<QModelIndex>& indexes) const;
--
-- /** Returns the ImageInfo object, reference or image id from the underlying data
-- * of the given row (parent is the invalid QModelIndex, column is 0).
-- * Note that imageInfoRef will crash if index is invalid.
-- */
-- ImageInfo imageInfo(int row) const;
-- ImageInfo& imageInfoRef(int row) const;
-- qlonglong imageId(int row) const;
--
-- /** Return the index for the given ImageInfo or id, if contained in this model.
-- */
-- QModelIndex indexForImageInfo(const ImageInfo& info) const;
-- QModelIndex indexForImageInfo(const ImageInfo& info, const QVariant& extraValue) const;
-- QModelIndex indexForImageId(qlonglong id) const;
-- QModelIndex indexForImageId(qlonglong id, const QVariant& extraValue) const;
-- QList<QModelIndex> indexesForImageInfo(const ImageInfo& info) const;
-- QList<QModelIndex> indexesForImageId(qlonglong id) const;
--
-- int numberOfIndexesForImageInfo(const ImageInfo& info) const;
-- int numberOfIndexesForImageId(qlonglong id) const;
--
-- /** Returns the index or ImageInfo object from the underlying data
-- * for the given file path. This is fast if keepsFilePathCache is enabled.
-- * The file path is as returned by ImageInfo.filePath().
-- * In case of multiple occurrences of the same file, the simpler variants return
-- * any one found first, use the QList methods to retrieve all occurrences.
-- */
-- QModelIndex indexForPath(const QString& filePath) const;
-- ImageInfo imageInfo(const QString& filePath) const;
-- QList<QModelIndex> indexesForPath(const QString& filePath) const;
-- QList<ImageInfo> imageInfos(const QString& filePath) const;
--
-- /** Main entry point for subclasses adding image infos to the model.
-- * If you list entries not unique per image id, you must add an extraValue
-- * so that every entry is unique by imageId and extraValues.
-- * Please note that these methods do not prevent addition of duplicate entries.
-- */
-- void addImageInfo(const ImageInfo& info);
-- void addImageInfos(const QList<ImageInfo>& infos);
-- void addImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
--
-- /** Clears image infos and resets model.
-- */
-- void clearImageInfos();
--
-- /** Clears and adds the infos.
-- */
-- void setImageInfos(const QList<ImageInfo>& infos);
--
-- /**
-- * Directly remove the given indexes or infos from the model.
-- */
-- void removeIndex(const QModelIndex& indexes);
-- void removeIndexes(const QList<QModelIndex>& indexes);
-- void removeImageInfo(const ImageInfo& info);
-- void removeImageInfos(const QList<ImageInfo>& infos);
-- void removeImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
--
-- /**
-- * addImageInfo() is asynchronous if a prepocessor is set.
-- * This method first adds the info, synchronously.
-- * Only afterwards, the preprocessor will have the opportunity to process it.
-- * This method also bypasses any incremental updates.
-- * Please note that these methods do not prevent addition of duplicate entries.
-- */
-- void addImageInfoSynchronously(const ImageInfo& info);
-- void addImageInfosSynchronously(const QList<ImageInfo>& infos);
-- void addImageInfosSynchronously(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
--
-- /**
-- * Add the given entries. Method returns immediately, the
-- * addition may happen later asynchronously.
-- * These methods prevent the addition of duplicate entries.
-- */
-- void ensureHasImageInfo(const ImageInfo& info);
-- void ensureHasImageInfos(const QList<ImageInfo>& infos);
-- void ensureHasImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
--
-- /**
-- * Ensure that all images grouped on the given leader are contained in the model.
-- */
-- void ensureHasGroupedImages(const ImageInfo& groupLeader);
--
-- QList<ImageInfo> imageInfos() const;
-- QList<qlonglong> imageIds() const;
-- QList<ImageInfo> uniqueImageInfos() const;
--
-- bool hasImage(qlonglong id) const;
-- bool hasImage(const ImageInfo& info) const;
-- bool hasImage(const ImageInfo& info, const QVariant& extraValue) const;
-- bool hasImage(qlonglong id, const QVariant& extraValue) const;
--
-- bool isEmpty() const;
--
-- // Drag and Drop
-- DECLARE_MODEL_DRAG_DROP_METHODS
--
-- /**
-- * Install an object as a preprocessor for ImageInfos added to this model.
-- * For every QList of ImageInfos added to addImageInfo, the signal preprocess()
-- * will be emitted. The preprocessor may process the items and shall then readd
-- * them by calling reAddImageInfos(). It may take some time to process.
-- * It shall discard any held infos when the modelReset() signal is sent.
-- * It shall call readdFinished() when no reset occurred and all infos on the way have been readded.
-- * This means that only after calling this method, you shall make three connections
-- * (preprocess -> your slot, your signal -> reAddImageInfos, your signal -> reAddingFinished)
-- * and make or already hold a connection modelReset() -> your slot.
-- * There is only one preprocessor at a time, a previously set object will be disconnected.
-- */
-- void setPreprocessor(QObject* processor);
-- void unsetPreprocessor(QObject* processor);
--
-- /**
-- * Returns true if this model is currently refreshing.
-- * For a preprocessor this means that, although the preprocessor may currently have
-- * processed all it got, more batches are to be expected.
-- */
-- bool isRefreshing() const;
--
-- /**
-- * Enable sending of imageInfosAboutToBeRemoved and imageInfosRemoved signals.
-- * Default: false
-- */
-- void setSendRemovalSignals(bool send);
--
-- virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-- virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
-- virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
-- virtual Qt::ItemFlags flags(const QModelIndex& index) const;
-- virtual QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const;
--
-- /** Retrieves the imageInfo object from the data() method of the given index.
-- * The index may be from a QSortFilterProxyModel as long as an ImageModel is at the end. */
-- static ImageInfo retrieveImageInfo(const QModelIndex& index);
-- static qlonglong retrieveImageId(const QModelIndex& index);
--
--Q_SIGNALS:
--
-- /** Informs that ImageInfos will be added to the model.
-- * This signal is sent before the model data is changed and views are informed.
-- */
-- void imageInfosAboutToBeAdded(const QList<ImageInfo>& infos);
--
-- /** Informs that ImageInfos have been added to the model.
-- * This signal is sent after the model data is changed and views are informed.
-- */
-- void imageInfosAdded(const QList<ImageInfo>& infos);
--
-- /** Informs that ImageInfos will be removed from the model.
-- * This signal is sent before the model data is changed and views are informed.
-- * Note: You need to explicitly enable sending of this signal. It is not sent
-- * in clearImageInfos().
-- */
-- void imageInfosAboutToBeRemoved(const QList<ImageInfo>& infos);
--
-- /** Informs that ImageInfos have been removed from the model.
-- * This signal is sent after the model data is changed and views are informed. *
-- * Note: You need to explicitly enable sending of this signal. It is not sent
-- * in clearImageInfos().
-- */
-- void imageInfosRemoved(const QList<ImageInfo>& infos);
--
-- /** Connect to this signal only if you are the current preprocessor.
-- */
-- void preprocess(const QList<ImageInfo>& infos, const QList<QVariant>&);
-- void processAdded(const QList<ImageInfo>& infos, const QList<QVariant>&);
--
-- /** If an ImageChangeset affected indexes of this model with changes as set in watchFlags(),
-- * this signal contains the changeset and the affected indexes.
-- */
-- void imageChange(const ImageChangeset&, const QItemSelection&);
--
-- /** If an ImageTagChangeset affected indexes of this model,
-- * this signal contains the changeset and the affected indexes.
-- */
-- void imageTagChange(const ImageTagChangeset&, const QItemSelection&);
--
-- /** Signals that the model is right now ready to start an incremental refresh.
-- * This is guaranteed only for the scope of emitting this signal.
-- */
-- void readyForIncrementalRefresh();
--
-- /** Signals that the model has finished currently with all scheduled
-- * refreshing, full or incremental, and all preprocessing.
-- * The model is in polished, clean situation right now.
-- */
-- void allRefreshingFinished();
--
--public Q_SLOTS:
--
-- void reAddImageInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void reAddingFinished();
--
--protected:
--
-- /** Subclasses that add ImageInfos in batches shall call startRefresh()
-- * when they start sending batches and finishRefresh() when they have finished.
-- * No incremental refreshes will be started while listing.
-- * A clearImageInfos() always stops listing, calling finishRefresh() is then not necessary.
-- */
-- void startRefresh();
-- void finishRefresh();
--
-- /** As soon as the model is ready to start an incremental refresh, the signal
-- * readyForIncrementalRefresh() will be emitted. The signal will be emitted inline
-- * if the model is ready right now.
-- */
-- void requestIncrementalRefresh();
-- bool hasIncrementalRefreshPending() const;
--
-- /** Starts an incremental refresh operation. You shall only call this method from a slot
-- * connected to readyForIncrementalRefresh(). To initiate an incremental refresh,
-- * call requestIncrementalRefresh().
-- */
-- void startIncrementalRefresh();
-- void finishIncrementalRefresh();
--
-- void emitDataChangedForAll();
-- void emitDataChangedForSelection(const QItemSelection& selection);
--
-- // Called when the internal storage is cleared
-- virtual void imageInfosCleared() {};
--
-- // Called before rowsAboutToBeRemoved
-- virtual void imageInfosAboutToBeRemoved(int /*begin*/, int /*end*/) {};
--
--protected Q_SLOTS:
--
-- virtual void slotImageChange(const ImageChangeset& changeset);
-- virtual void slotImageTagChange(const ImageTagChangeset& changeset);
--
--private:
--
-- void appendInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void appendInfosChecked(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void publiciseInfos(const QList<ImageInfo>& infos, const QList<QVariant>& extraValues);
-- void cleanSituationChecks();
-- void removeRowPairsWithCheck(const QList<QPair<int, int> >& toRemove);
-- void removeRowPairs(const QList<QPair<int, int> >& toRemove);
--
--public:
--
-- // Declared public because it's used in ImageModelIncrementalUpdater class
-- class Private;
--
--private:
--
-- Private* const d;
--};
--
--} // namespace Digikam
--
--Q_DECLARE_METATYPE(Digikam::ImageModel*)
--
--#endif // IMAGEMODEL_H
-diff --git a/libs/models/imagesortsettings.cpp b/libs/models/imagesortsettings.cpp
-deleted file mode 100644
-index 39ee6e1..0000000
---- a/libs/models/imagesortsettings.cpp
-+++ /dev/null
-@@ -1,400 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Filter values for use with ImageFilterModel
-- *
-- * Copyright (C) 2009 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2014 by Mohamed Anwer <m dot anwer at gmx dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagesortsettings.h"
--
--// Qt includes
--
--#include <QDateTime>
--#include <QRectF>
--
--// Local includes
--
--#include "coredbfields.h"
--#include "imageinfo.h"
--
--namespace Digikam
--{
--
--ImageSortSettings::ImageSortSettings()
--{
-- categorizationMode = NoCategories;
-- categorizationSortOrder = DefaultOrder;
-- categorizationCaseSensitivity = Qt::CaseSensitive;
-- sortRole = SortByFileName;
-- sortOrder = DefaultOrder;
-- strTypeNatural = true;
-- sortCaseSensitivity = Qt::CaseSensitive;
-- currentCategorizationSortOrder = Qt::AscendingOrder;
-- currentSortOrder = Qt::AscendingOrder;
--}
--
--bool ImageSortSettings::operator==(const ImageSortSettings& other) const
--{
-- return
-- categorizationMode == other.categorizationMode &&
-- categorizationSortOrder == other.categorizationSortOrder &&
-- categorizationCaseSensitivity == other.categorizationCaseSensitivity &&
-- sortRole == other.sortRole &&
-- sortOrder == other.sortOrder &&
-- sortCaseSensitivity == other.sortCaseSensitivity;
--}
--
--void ImageSortSettings::setCategorizationMode(CategorizationMode mode)
--{
-- categorizationMode = mode;
--
-- if (categorizationSortOrder == DefaultOrder)
-- {
-- currentCategorizationSortOrder = defaultSortOrderForCategorizationMode(categorizationMode);
-- }
--}
--
--void ImageSortSettings::setCategorizationSortOrder(SortOrder order)
--{
-- categorizationSortOrder = order;
--
-- if (categorizationSortOrder == DefaultOrder)
-- {
-- currentCategorizationSortOrder = defaultSortOrderForCategorizationMode(categorizationMode);
-- }
-- else
-- {
-- currentCategorizationSortOrder = (Qt::SortOrder)categorizationSortOrder;
-- }
--}
--
--void ImageSortSettings::setSortRole(SortRole role)
--{
-- sortRole = role;
--
-- if (sortOrder == DefaultOrder)
-- {
-- currentSortOrder = defaultSortOrderForSortRole(sortRole);
-- }
--}
--
--void ImageSortSettings::setSortOrder(SortOrder order)
--{
-- sortOrder = order;
--
-- if (sortOrder == DefaultOrder)
-- {
-- currentSortOrder = defaultSortOrderForSortRole(sortRole);
-- }
-- else
-- {
-- currentSortOrder = (Qt::SortOrder)order;
-- }
--}
--
--void ImageSortSettings::setStringTypeNatural(bool natural)
--{
-- strTypeNatural = natural;
--}
--
--Qt::SortOrder ImageSortSettings::defaultSortOrderForCategorizationMode(CategorizationMode mode)
--{
-- switch (mode)
-- {
-- case NoCategories:
-- case OneCategory:
-- case CategoryByAlbum:
-- case CategoryByFormat:
-- default:
-- return Qt::AscendingOrder;
-- }
--}
--
--Qt::SortOrder ImageSortSettings::defaultSortOrderForSortRole(SortRole role)
--{
-- switch (role)
-- {
-- case SortByFileName:
-- case SortByFilePath:
-- return Qt::AscendingOrder;
-- case SortByFileSize:
-- return Qt::DescendingOrder;
-- case SortByModificationDate:
-- case SortByCreationDate:
-- return Qt::AscendingOrder;
-- case SortByRating:
-- case SortByImageSize:
-- return Qt::DescendingOrder;
-- case SortByAspectRatio:
-- return Qt::DescendingOrder;
-- case SortBySimilarity:
-- return Qt::DescendingOrder;
-- default:
-- return Qt::AscendingOrder;
-- }
--}
--
--int ImageSortSettings::compareCategories(const ImageInfo& left, const ImageInfo& right) const
--{
-- switch (categorizationMode)
-- {
-- case NoCategories:
-- case OneCategory:
-- return 0;
-- case CategoryByAlbum:
-- {
-- int leftAlbum = left.albumId();
-- int rightAlbum = right.albumId();
--
-- // return comparation result
-- if (leftAlbum == rightAlbum)
-- {
-- return 0;
-- }
-- else if (lessThanByOrder(leftAlbum, rightAlbum, currentCategorizationSortOrder))
-- {
-- return -1;
-- }
-- else
-- {
-- return 1;
-- }
-- }
-- case CategoryByFormat:
-- {
-- return naturalCompare(left.format(), right.format(),
-- currentCategorizationSortOrder, categorizationCaseSensitivity, strTypeNatural);
-- }
-- default:
-- return 0;
-- }
--}
--
--bool ImageSortSettings::lessThan(const ImageInfo& left, const ImageInfo& right) const
--{
-- int result = compare(left, right, sortRole);
--
-- if (result != 0)
-- {
-- return result < 0;
-- }
--
-- // are they identical?
-- if (left == right)
-- {
-- return false;
-- }
--
-- // If left and right equal for first sort order, use a hierarchy of all sort orders
-- if ( (result = compare(left, right, SortByFileName)) != 0)
-- {
-- return result < 0;
-- }
--
-- if ( (result = compare(left, right, SortByCreationDate)) != 0)
-- {
-- return result < 0;
-- }
--
-- if ( (result = compare(left, right, SortByModificationDate)) != 0)
-- {
-- return result < 0;
-- }
--
-- if ( (result = compare(left, right, SortByFilePath)) != 0)
-- {
-- return result < 0;
-- }
--
-- if ( (result = compare(left, right, SortByFileSize)) != 0)
-- {
-- return result < 0;
-- }
--
-- if ( (result = compare(left, right, SortBySimilarity)) != 0)
-- {
-- return result < 0;
-- }
--
-- return false;
--}
--
--int ImageSortSettings::compare(const ImageInfo& left, const ImageInfo& right) const
--{
-- return compare(left, right, sortRole);
--}
--
--int ImageSortSettings::compare(const ImageInfo& left, const ImageInfo& right, SortRole role) const
--{
-- switch (role)
-- {
-- case SortByFileName:
-- {
-- bool versioning = (left.name().contains(QLatin1String("_v"), Qt::CaseInsensitive) ||
-- right.name().contains(QLatin1String("_v"), Qt::CaseInsensitive));
-- return naturalCompare(left.name(), right.name(), currentSortOrder, sortCaseSensitivity, strTypeNatural, versioning);
-- }
-- case SortByFilePath:
-- return naturalCompare(left.filePath(), right.filePath(), currentSortOrder, sortCaseSensitivity, strTypeNatural);
-- case SortByFileSize:
-- return compareByOrder(left.fileSize(), right.fileSize(), currentSortOrder);
-- case SortByModificationDate:
-- return compareByOrder(left.modDateTime(), right.modDateTime(), currentSortOrder);
-- case SortByCreationDate:
-- return compareByOrder(left.dateTime(), right.dateTime(), currentSortOrder);
-- case SortByRating:
-- // I have the feeling that inverting the sort order for rating is the natural order
-- return - compareByOrder(left.rating(), right.rating(), currentSortOrder);
-- case SortByImageSize:
-- {
-- QSize leftSize = left.dimensions();
-- QSize rightSize = right.dimensions();
-- int leftPixels = leftSize.width() * leftSize.height();
-- int rightPixels = rightSize.width() * rightSize.height();
-- return compareByOrder(leftPixels, rightPixels, currentSortOrder);
-- }
-- case SortByAspectRatio:
-- {
-- QSize leftSize = left.dimensions();
-- QSize rightSize = right.dimensions();
-- int leftAR = (double(leftSize.width()) / double(leftSize.height())) * 1000000;
-- int rightAR = (double(rightSize.width()) / double(rightSize.height())) * 1000000;
-- return compareByOrder(leftAR, rightAR, currentSortOrder);
-- }
-- case SortBySimilarity:
-- {
-- qlonglong leftReferenceImageId = left.currentReferenceImage();
-- qlonglong rightReferenceImageId = right.currentReferenceImage();
-- // make sure that the original image has always the highest similarity.
-- double leftSimilarity = left.id() == leftReferenceImageId ? 1.1 : left.currentSimilarity();
-- double rightSimilarity = right.id() == rightReferenceImageId ? 1.1 : right.currentSimilarity();
-- return compareByOrder(leftSimilarity, rightSimilarity, currentSortOrder);
-- }
-- default:
-- return 1;
-- }
--}
--
--bool ImageSortSettings::lessThan(const QVariant& left, const QVariant& right) const
--{
-- if (left.type() != right.type())
-- {
-- return false;
-- }
--
-- switch (left.type())
-- {
-- case QVariant::Int:
-- return compareByOrder(left.toInt(), right.toInt(), currentSortOrder);
-- case QVariant::UInt:
-- return compareByOrder(left.toUInt(), right.toUInt(), currentSortOrder);
-- case QVariant::LongLong:
-- return compareByOrder(left.toLongLong(), right.toLongLong(), currentSortOrder);
-- case QVariant::ULongLong:
-- return compareByOrder(left.toULongLong(), right.toULongLong(), currentSortOrder);
-- case QVariant::Double:
-- return compareByOrder(left.toDouble(), right.toDouble(), currentSortOrder);
-- case QVariant::Date:
-- return compareByOrder(left.toDate(), right.toDate(), currentSortOrder);
-- case QVariant::DateTime:
-- return compareByOrder(left.toDateTime(), right.toDateTime(), currentSortOrder);
-- case QVariant::Time:
-- return compareByOrder(left.toTime(), right.toTime(), currentSortOrder);
-- case QVariant::Rect:
-- case QVariant::RectF:
-- {
-- QRectF rectLeft = left.toRectF();
-- QRectF rectRight = right.toRectF();
-- int result;
--
-- if ((result = compareByOrder(rectLeft.top(), rectRight.top(), currentSortOrder)) != 0)
-- {
-- return result < 0;
-- }
--
-- if ((result = compareByOrder(rectLeft.left(), rectRight.left(), currentSortOrder)) != 0)
-- {
-- return result < 0;
-- }
--
-- QSizeF sizeLeft = rectLeft.size(), sizeRight = rectRight.size();
--
-- if ((result = compareByOrder(sizeLeft.width()*sizeLeft.height(), sizeRight.width()*sizeRight.height(), currentSortOrder)) != 0)
-- {
-- return result < 0;
-- }
-- // FIXME: fall through?? If not, add "break" here
-- }
-- default:
-- return naturalCompare(left.toString(), right.toString(), currentSortOrder, sortCaseSensitivity, strTypeNatural);
-- }
--}
--
--DatabaseFields::Set ImageSortSettings::watchFlags() const
--{
-- DatabaseFields::Set set;
--
-- switch (sortRole)
-- {
-- case SortByFileName:
-- set |= DatabaseFields::Name;
-- break;
-- case SortByFilePath:
-- set |= DatabaseFields::Name;
-- break;
-- case SortByFileSize:
-- set |= DatabaseFields::FileSize;
-- break;
-- case SortByModificationDate:
-- set |= DatabaseFields::ModificationDate;
-- break;
-- case SortByCreationDate:
-- set |= DatabaseFields::CreationDate;
-- break;
-- case SortByRating:
-- set |= DatabaseFields::Rating;
-- break;
-- case SortByImageSize:
-- set |= DatabaseFields::Width | DatabaseFields::Height;
-- break;
-- case SortByAspectRatio:
-- set |= DatabaseFields::Width | DatabaseFields::Height;
-- break;
-- case SortBySimilarity:
-- // TODO: Not sure what to do here....
-- set |= DatabaseFields::Name;
-- break;
-- }
--
-- switch (categorizationMode)
-- {
-- case NoCategories:
-- case OneCategory:
-- case CategoryByAlbum:
-- break;
-- case CategoryByFormat:
-- set |= DatabaseFields::Format;
-- break;
-- }
--
-- return set;
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagesortsettings.h b/libs/models/imagesortsettings.h
-deleted file mode 100644
-index 2a5fd8c..0000000
---- a/libs/models/imagesortsettings.h
-+++ /dev/null
-@@ -1,225 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-05-31
-- * Description : Sort settings for use with ImageFilterModel
-- *
-- * Copyright (C) 2009 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGESORTSETTINGS_H
--#define IMAGESORTSETTINGS_H
--
--// Qt includes
--
--#include <QHash>
--#include <QList>
--#include <QMap>
--#include <QString>
--#include <QCollator>
--
--// Local includes
--
--#include "digikam_export.h"
--
--namespace Digikam
--{
--
--class ImageInfo;
--
--namespace DatabaseFields
--{
-- class Set;
--}
--
--class DIGIKAM_DATABASE_EXPORT ImageSortSettings
--{
--public:
--
-- ImageSortSettings();
--
-- bool operator==(const ImageSortSettings& other) const;
--
-- /** Compares the categories of left and right.
-- * Return -1 if left is less than right, 0 if both fall in the same category,
-- * and 1 if left is greater than right.
-- * Adheres to set categorization mode and current category sort order.
-- */
-- int compareCategories(const ImageInfo& left, const ImageInfo& right) const;
--
-- /** Returns true if left is less than right.
-- * Adheres to current sort role and sort order.
-- */
-- bool lessThan(const ImageInfo& left, const ImageInfo& right) const;
--
-- /** Compares the ImageInfos left and right.
-- * Return -1 if left is less than right, 1 if left is greater than right,
-- * and 0 if left equals right comparing the current sort role's value.
-- * Adheres to set sort role and sort order.
-- */
-- int compare(const ImageInfo& left, const ImageInfo& right) const;
--
-- /** Returns true if left QVariant is less than right.
-- * Adheres to current sort role and sort order.
-- * Use for extraValue, if necessary.
-- */
-- bool lessThan(const QVariant& left, const QVariant& right) const;
--
-- enum SortOrder
-- {
-- AscendingOrder = Qt::AscendingOrder,
-- DescendingOrder = Qt::DescendingOrder,
-- DefaultOrder /// sort order depends on the chosen sort role
-- };
--
-- /// --- Categories ---
--
-- enum CategorizationMode
-- {
-- NoCategories, /// categorization switched off
-- OneCategory, /// all items in one global category
-- CategoryByAlbum,
-- CategoryByFormat
-- };
--
-- CategorizationMode categorizationMode;
-- SortOrder categorizationSortOrder;
--
-- void setCategorizationMode(CategorizationMode mode);
-- void setCategorizationSortOrder(SortOrder order);
--
-- /// Only Ascending or Descending, never DefaultOrder
-- Qt::SortOrder currentCategorizationSortOrder;
-- Qt::CaseSensitivity categorizationCaseSensitivity;
--
-- bool isCategorized() const { return categorizationMode >= CategoryByAlbum; }
--
-- /// --- Image Sorting ---
--
-- enum SortRole
-- {
-- // Note: For legacy reasons, the order of the first five entries must remain unchanged
-- SortByFileName,
-- SortByFilePath,
-- SortByCreationDate,
-- SortByFileSize,
-- SortByRating,
-- SortByModificationDate,
-- SortByImageSize, // pixel number
-- SortByAspectRatio, // width / height * 100000
-- SortBySimilarity
-- };
--
-- SortRole sortRole;
-- SortOrder sortOrder;
-- bool strTypeNatural;
--
-- void setSortRole(SortRole role);
-- void setSortOrder(SortOrder order);
-- void setStringTypeNatural(bool natural);
--
-- Qt::SortOrder currentSortOrder;
-- Qt::CaseSensitivity sortCaseSensitivity;
--
-- int compare(const ImageInfo& left, const ImageInfo& right, SortRole sortRole) const;
--
-- // --- ---
--
-- static Qt::SortOrder defaultSortOrderForCategorizationMode(CategorizationMode mode);
-- static Qt::SortOrder defaultSortOrderForSortRole(SortRole role);
--
-- /// --- Change notification ---
--
-- /** Returns database fields a change in which would affect the current sorting.
-- */
-- DatabaseFields::Set watchFlags() const;
--
-- /// --- Utilities ---
--
-- /** Returns a < b if sortOrder is Ascending, or b < a if order is descending.
-- */
-- template <typename T>
-- static inline bool lessThanByOrder(const T& a, const T& b, Qt::SortOrder sortOrder)
-- {
-- if (sortOrder == Qt::AscendingOrder)
-- {
-- return a < b;
-- }
-- else
-- {
-- return b < a;
-- }
-- }
--
-- /** Returns the usual compare result of -1, 0, or 1 for lessThan, equals and greaterThan.
-- */
-- template <typename T>
-- static inline int compareValue(const T& a, const T& b)
-- {
-- if (a == b)
-- {
-- return 0;
-- }
--
-- if (a < b)
-- {
-- return -1;
-- }
-- else
-- {
-- return 1;
-- }
-- }
--
-- /** Takes a typical result from a compare method (0 is equal, -1 is less than, 1 is greater than)
-- * and applies the given sort order to it.
-- */
-- static inline int compareByOrder(int compareResult, Qt::SortOrder sortOrder)
-- {
-- if (sortOrder == Qt::AscendingOrder)
-- {
-- return compareResult;
-- }
-- else
-- {
-- return - compareResult;
-- }
-- }
--
-- template <typename T>
-- static inline int compareByOrder(const T& a, const T& b, Qt::SortOrder sortOrder)
-- {
-- return compareByOrder(compareValue(a, b), sortOrder);
-- }
--
-- /** Compares the two string by natural comparison and adheres to given sort order
-- */
-- static inline int naturalCompare(const QString& a, const QString& b, Qt::SortOrder sortOrder,
-- Qt::CaseSensitivity caseSensitive = Qt::CaseSensitive,
-- bool natural = true, bool versioning = false)
-- {
-- QCollator collator;
-- collator.setNumericMode(natural);
-- collator.setIgnorePunctuation(versioning);
-- collator.setCaseSensitivity(caseSensitive);
-- return (compareByOrder(collator.compare(a, b), sortOrder));
-- }
--};
--
--} // namespace Digikam
--
--#endif // IMAGESORTSETTINGS_H
-diff --git a/libs/models/imagethumbnailmodel.cpp b/libs/models/imagethumbnailmodel.cpp
-deleted file mode 100644
-index b7f5661..0000000
---- a/libs/models/imagethumbnailmodel.cpp
-+++ /dev/null
-@@ -1,323 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries with support for thumbnail loading
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011-2017 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imagethumbnailmodel.h"
--
--// Qt includes
--
--#include <QHash>
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "thumbnailloadthread.h"
--#include "digikam_export.h"
--#include "digikam_globals.h"
--
--namespace Digikam
--{
--
--class ImageThumbnailModel::ImageThumbnailModelPriv
--{
--public:
--
-- ImageThumbnailModelPriv() :
-- thread(0),
-- preloadThread(0),
-- thumbSize(0),
-- lastGlobalThumbSize(0),
-- preloadThumbSize(0),
-- emitDataChanged(true)
-- {
-- staticListContainingThumbnailRole << ImageModel::ThumbnailRole;
-- }
--
-- ThumbnailLoadThread* thread;
-- ThumbnailLoadThread* preloadThread;
-- ThumbnailSize thumbSize;
-- ThumbnailSize lastGlobalThumbSize;
-- ThumbnailSize preloadThumbSize;
-- QRect detailRect;
-- QVector<int> staticListContainingThumbnailRole;
--
-- bool emitDataChanged;
--
-- int preloadThumbnailSize() const
-- {
-- if (preloadThumbSize.size())
-- {
-- return preloadThumbSize.size();
-- }
--
-- return thumbSize.size();
-- }
--};
--
--ImageThumbnailModel::ImageThumbnailModel(QObject* parent)
-- : ImageModel(parent), d(new ImageThumbnailModelPriv)
--{
-- setKeepsFilePathCache(true);
--}
--
--ImageThumbnailModel::~ImageThumbnailModel()
--{
-- delete d->preloadThread;
-- delete d;
--}
--
--void ImageThumbnailModel::setThumbnailLoadThread(ThumbnailLoadThread* thread)
--{
-- d->thread = thread;
--
-- connect(d->thread, SIGNAL(signalThumbnailLoaded(LoadingDescription,QPixmap)),
-- this, SLOT(slotThumbnailLoaded(LoadingDescription,QPixmap)));
--}
--
--ThumbnailLoadThread* ImageThumbnailModel::thumbnailLoadThread() const
--{
-- return d->thread;
--}
--
--ThumbnailSize ImageThumbnailModel::thumbnailSize() const
--{
-- return d->thumbSize;
--}
--
--void ImageThumbnailModel::setThumbnailSize(const ThumbnailSize& size)
--{
-- d->lastGlobalThumbSize = size;
-- d->thumbSize = size;
--}
--
--void ImageThumbnailModel::setPreloadThumbnailSize(const ThumbnailSize& size)
--{
-- d->preloadThumbSize = size;
--}
--
--void ImageThumbnailModel::setEmitDataChanged(bool emitSignal)
--{
-- d->emitDataChanged = emitSignal;
--}
--
--void ImageThumbnailModel::setPreloadThumbnails(bool preload)
--{
-- if (preload)
-- {
-- if (!d->preloadThread)
-- {
-- d->preloadThread = new ThumbnailLoadThread;
-- d->preloadThread->setPixmapRequested(false);
-- d->preloadThread->setPriority(QThread::LowestPriority);
-- }
--
-- connect(this, SIGNAL(allRefreshingFinished()),
-- this, SLOT(preloadAllThumbnails()));
-- }
-- else
-- {
-- delete d->preloadThread;
-- d->preloadThread = 0;
-- disconnect(this, SIGNAL(allRefreshingFinished()),
-- this, SLOT(preloadAllThumbnails()));
-- }
--}
--
--void ImageThumbnailModel::prepareThumbnails(const QList<QModelIndex>& indexesToPrepare)
--{
-- prepareThumbnails(indexesToPrepare, d->thumbSize);
--}
--
--void ImageThumbnailModel::prepareThumbnails(const QList<QModelIndex>& indexesToPrepare, const ThumbnailSize& thumbSize)
--{
-- if (!d->thread)
-- {
-- return;
-- }
--
-- QList<ThumbnailIdentifier> ids;
-- foreach(const QModelIndex& index, indexesToPrepare)
-- {
-- ids << imageInfoRef(index).thumbnailIdentifier();
-- }
-- d->thread->findGroup(ids, thumbSize.size());
--}
--
--void ImageThumbnailModel::preloadThumbnails(const QList<ImageInfo>& infos)
--{
-- if (!d->preloadThread)
-- {
-- return;
-- }
--
-- QList<ThumbnailIdentifier> ids;
-- foreach(const ImageInfo& info, infos)
-- {
-- ids << info.thumbnailIdentifier();
-- }
-- d->preloadThread->pregenerateGroup(ids, d->preloadThumbnailSize());
--}
--
--void ImageThumbnailModel::preloadThumbnails(const QList<QModelIndex>& indexesToPreload)
--{
-- if (!d->preloadThread)
-- {
-- return;
-- }
--
-- QList<ThumbnailIdentifier> ids;
-- foreach(const QModelIndex& index, indexesToPreload)
-- {
-- ids << imageInfoRef(index).thumbnailIdentifier();
-- }
-- d->preloadThread->stopAllTasks();
-- d->preloadThread->pregenerateGroup(ids, d->preloadThumbnailSize());
--}
--
--void ImageThumbnailModel::preloadAllThumbnails()
--{
-- preloadThumbnails(imageInfos());
--}
--
--void ImageThumbnailModel::imageInfosCleared()
--{
-- if (d->preloadThread)
-- {
-- d->preloadThread->stopAllTasks();
-- }
--}
--
--QVariant ImageThumbnailModel::data(const QModelIndex& index, int role) const
--{
-- if (role == ThumbnailRole && d->thread && index.isValid())
-- {
-- QPixmap thumbnail;
-- ImageInfo info = imageInfo(index);
-- QString path = info.filePath();
--
-- if (info.isNull())
-- {
-- return QVariant(QVariant::Pixmap);
-- }
--
-- if (!d->detailRect.isNull())
-- {
-- if (d->thread->find(info.thumbnailIdentifier(), d->detailRect, thumbnail, d->thumbSize.size()))
-- {
-- return thumbnail;
-- }
-- }
-- else
-- {
-- if (d->thread->find(info.thumbnailIdentifier(), thumbnail, d->thumbSize.size()))
-- {
-- return thumbnail;
-- }
-- }
--
-- return QVariant(QVariant::Pixmap);
-- }
--
-- return ImageModel::data(index, role);
--}
--
--bool ImageThumbnailModel::setData(const QModelIndex& index, const QVariant& value, int role)
--{
-- if (role == ThumbnailRole)
-- {
-- switch (value.type())
-- {
-- case QVariant::Invalid:
-- d->thumbSize = d->lastGlobalThumbSize;
-- d->detailRect = QRect();
-- break;
--
-- case QVariant::Int:
--
-- if (value.isNull())
-- {
-- d->thumbSize = d->lastGlobalThumbSize;
-- }
-- else
-- {
-- d->thumbSize = value.toInt();
-- }
-- break;
--
-- case QVariant::Rect:
--
-- if (value.isNull())
-- {
-- d->detailRect = QRect();
-- }
-- else
-- {
-- d->detailRect = value.toRect();
-- }
-- break;
--
-- default:
-- break;
-- }
-- }
--
-- return ImageModel::setData(index, value, role);
--}
--
--void ImageThumbnailModel::slotThumbnailLoaded(const LoadingDescription& loadingDescription, const QPixmap& thumb)
--{
-- if (thumb.isNull())
-- {
-- return;
-- }
--
-- // In case of multiple occurrence, we currently do not know which thumbnail is this. Signal change on all.
-- QModelIndexList indexes;
-- ThumbnailIdentifier thumbId = loadingDescription.thumbnailIdentifier();
-- if (thumbId.filePath.isEmpty())
-- {
-- indexes = indexesForImageId(thumbId.id);
-- }
-- else
-- {
-- indexes = indexesForPath(thumbId.filePath);
-- }
-- foreach(const QModelIndex& index, indexes)
-- {
-- if (thumb.isNull())
-- {
-- emit thumbnailFailed(index, loadingDescription.previewParameters.size);
-- }
-- else
-- {
-- emit thumbnailAvailable(index, loadingDescription.previewParameters.size);
--
-- if (d->emitDataChanged)
-- {
-- emit dataChanged(index, index, d->staticListContainingThumbnailRole);
-- }
-- }
-- }
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imagethumbnailmodel.h b/libs/models/imagethumbnailmodel.h
-deleted file mode 100644
-index 366ca65..0000000
---- a/libs/models/imagethumbnailmodel.h
-+++ /dev/null
-@@ -1,140 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2009-03-05
-- * Description : Qt item model for database entries with support for thumbnail loading
-- *
-- * Copyright (C) 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
-- * Copyright (C) 2011 by Gilles Caulier <caulier dot gilles at gmail dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGETHUMBNAILMODEL_H
--#define IMAGETHUMBNAILMODEL_H
--
--// Local includes
--
--#include "imagemodel.h"
--#include "thumbnailsize.h"
--#include "digikam_export.h"
--
--namespace Digikam
--{
--
--class LoadingDescription;
--class ThumbnailLoadThread;
--
--class DIGIKAM_DATABASE_EXPORT ImageThumbnailModel : public ImageModel
--{
-- Q_OBJECT
--
--public:
--
-- /**
-- * An ImageModel that supports thumbnail loading.
-- * You need to set a ThumbnailLoadThread to enable thumbnail loading.
-- * Adjust the thumbnail size to your needs.
-- * Note that setKeepsFilePathCache is enabled per default.
-- */
-- explicit ImageThumbnailModel(QObject* parent);
-- ~ImageThumbnailModel();
--
-- /** Enable thumbnail loading and set the thread that shall be used.
-- * The thumbnail size of this thread will be adjusted.
-- */
-- void setThumbnailLoadThread(ThumbnailLoadThread* thread);
-- ThumbnailLoadThread* thumbnailLoadThread() const;
--
-- /// Set the thumbnail size to use
-- void setThumbnailSize(const ThumbnailSize& thumbSize);
--
-- /// If you want to fix a size for preloading, do it here.
-- void setPreloadThumbnailSize(const ThumbnailSize& thumbSize);
--
-- void setExifRotate(bool rotate);
--
-- /**
-- * Enable emitting dataChanged() when a thumbnail becomes available.
-- * The thumbnailAvailable() signal will be emitted in any case.
-- * Default is true.
-- */
-- void setEmitDataChanged(bool emitSignal);
--
-- /**
-- * Enable preloading of thumbnails:
-- * If preloading is enabled, for every entry in the model a thumbnail generation is started.
-- * Default: false.
-- */
-- void setPreloadThumbnails(bool preload);
--
-- ThumbnailSize thumbnailSize() const;
--
-- /**
-- * Handles the ThumbnailRole.
-- * If the pixmap is available, returns it in the QVariant.
-- * If it still needs to be loaded, returns a null QVariant and emits
-- * thumbnailAvailable() as soon as it is available.
-- */
-- virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
--
-- /**
-- * You can override the current thumbnail size by giving an integer value for ThumbnailRole.
-- * Set a null QVariant to use the thumbnail size set by setThumbnailSize() again.
-- * The index given here is ignored for this purpose.
-- */
-- virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::DisplayRole);
--
--public Q_SLOTS:
--
-- /** Prepare the thumbnail loading for the given indexes
-- */
-- void prepareThumbnails(const QList<QModelIndex>& indexesToPrepare);
-- void prepareThumbnails(const QList<QModelIndex>& indexesToPrepare, const ThumbnailSize& thumbSize);
--
-- /**
-- * Preload thumbnail for the given infos resp. indexes.
-- * Note: Use setPreloadThumbnails to automatically preload all entries in the model.
-- * Note: This only ensures thumbnail generation. It is not guaranteed that pixmaps
-- * are stored in the cache. For thumbnails that are expect to be drawn immediately,
-- * include them in prepareThumbnails().
-- * Note: Stops preloading of previously added thumbnails.
-- */
-- void preloadThumbnails(const QList<ImageInfo>&);
-- void preloadThumbnails(const QList<QModelIndex>&);
-- void preloadAllThumbnails();
--
--Q_SIGNALS:
--
-- void thumbnailAvailable(const QModelIndex& index, int requestedSize);
-- void thumbnailFailed(const QModelIndex& index, int requestedSize);
--
--protected:
--
-- virtual void imageInfosCleared();
--
--protected Q_SLOTS:
--
-- void slotThumbnailLoaded(const LoadingDescription& loadingDescription, const QPixmap& thumb);
--
--private:
--
-- class ImageThumbnailModelPriv;
-- ImageThumbnailModelPriv* const d;
--};
--
--} // namespace Digikam
--
--#endif /* IMAGETHUMBNAILMODEL_H */
-diff --git a/libs/models/imageversionsmodel.cpp b/libs/models/imageversionsmodel.cpp
-deleted file mode 100644
-index e6ba582..0000000
---- a/libs/models/imageversionsmodel.cpp
-+++ /dev/null
-@@ -1,183 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2010-07-13
-- * Description : Model for image versions
-- *
-- * Copyright (C) 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#include "imageversionsmodel.h"
--
--// KDE includes
--
--#include <klocalizedstring.h>
--
--// Local includes
--
--#include "digikam_debug.h"
--#include "workingwidget.h"
--
--namespace Digikam
--{
--
--class ImageVersionsModel::Private
--{
--public:
--
-- Private()
-- {
-- data = 0;
-- paintTree = false;
-- }
--
-- ///Complete paths with filenames and tree level
-- QList<QPair<QString, int> >* data;
-- ///This is for delegate to paint it as selected
-- QString currentSelectedImage;
-- ///If true, the delegate will paint items as a tree
-- ///if false, it will be painted as a list
-- bool paintTree;
--};
--
--ImageVersionsModel::ImageVersionsModel(QObject* parent)
-- : QAbstractListModel(parent),
-- d(new Private)
--{
-- d->data = new QList<QPair<QString, int> >;
--}
--
--ImageVersionsModel::~ImageVersionsModel()
--{
-- //qDeleteAll(d->data);
-- delete d;
--}
--
--Qt::ItemFlags ImageVersionsModel::flags(const QModelIndex& index) const
--{
-- if (!index.isValid())
-- {
-- return 0;
-- }
--
-- return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
--}
--
--QVariant ImageVersionsModel::data(const QModelIndex& index, int role) const
--{
-- if (!index.isValid())
-- {
-- return QVariant();
-- }
--
-- if (role == Qt::DisplayRole && !d->data->isEmpty())
-- {
-- return d->data->at(index.row()).first;
-- }
-- else if (role == Qt::UserRole && !d->data->isEmpty())
-- {
-- return d->data->at(index.row()).second;
-- }
-- else if (role == Qt::DisplayRole && d->data->isEmpty())
-- {
-- //TODO: make this text Italic
-- return QVariant(QString(i18n("No image selected")));
-- }
--
-- return QVariant();
--}
--
--int ImageVersionsModel::rowCount(const QModelIndex& parent) const
--{
-- Q_UNUSED(parent)
-- return d->data->count();
--}
--
--void ImageVersionsModel::setupModelData(QList<QPair<QString, int> >& data)
--{
-- beginResetModel();
--
-- d->data->clear();
--
-- if (!data.isEmpty())
-- {
-- d->data->append(data);
-- }
-- else
-- {
-- d->data->append(qMakePair(QString(i18n("This is the original image")), 0));
-- }
--
-- endResetModel();
--}
--
--void ImageVersionsModel::clearModelData()
--{
-- beginResetModel();
--
-- if (!d->data->isEmpty())
-- {
-- d->data->clear();
-- }
--
-- endResetModel();
--}
--
--void ImageVersionsModel::slotAnimationStep()
--{
-- emit dataChanged(createIndex(0, 0), createIndex(rowCount()-1, 1));
--}
--
--QString ImageVersionsModel::currentSelectedImage() const
--{
-- return d->currentSelectedImage;
--}
--
--void ImageVersionsModel::setCurrentSelectedImage(const QString& path)
--{
-- d->currentSelectedImage = path;
--}
--
--QModelIndex ImageVersionsModel::currentSelectedImageIndex() const
--{
-- return index(listIndexOf(d->currentSelectedImage), 0);
--}
--
--bool ImageVersionsModel::paintTree() const
--{
-- return d->paintTree;
--}
--
--void ImageVersionsModel::setPaintTree(bool paint)
--{
-- d->paintTree = paint;
--}
--
--int ImageVersionsModel::listIndexOf(const QString& item) const
--{
-- for (int i = 0; i < d->data->size(); ++i)
-- {
-- if (d->data->at(i).first == item)
-- {
-- return i;
-- }
-- }
--
-- return -1;
--}
--
--} // namespace Digikam
-diff --git a/libs/models/imageversionsmodel.h b/libs/models/imageversionsmodel.h
-deleted file mode 100644
-index ed08529..0000000
---- a/libs/models/imageversionsmodel.h
-+++ /dev/null
-@@ -1,75 +0,0 @@
--/* ============================================================
-- *
-- * This file is a part of digiKam project
-- * http://www.digikam.org
-- *
-- * Date : 2010-07-13
-- * Description : Model for image versions
-- *
-- * Copyright (C) 2010 by Martin Klapetek <martin dot klapetek at gmail dot com>
-- *
-- * This program 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, or (at your option)
-- * any later version.
-- *
-- * This program 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.
-- *
-- * ============================================================ */
--
--#ifndef IMAGEVERSIONSMODEL_H
--#define IMAGEVERSIONSMODEL_H
--
--// Qt includes
--
--#include <QModelIndex>
--#include <QPixmap>
--
--// Local includes
--
--#include "digikam_export.h"
--
--namespace Digikam
--{
--
--class DIGIKAM_DATABASE_EXPORT ImageVersionsModel : public QAbstractListModel
--{
-- Q_OBJECT
--
--public:
--
-- explicit ImageVersionsModel(QObject* parent = 0);
-- ~ImageVersionsModel();
--
-- Qt::ItemFlags flags(const QModelIndex& index) const;
-- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
-- int rowCount(const QModelIndex& parent = QModelIndex()) const;
--
-- void setupModelData(QList<QPair<QString, int> >& data);
-- void clearModelData();
--
-- QString currentSelectedImage() const;
-- void setCurrentSelectedImage(const QString& path);
-- QModelIndex currentSelectedImageIndex() const;
--
-- bool paintTree() const;
-- int listIndexOf(const QString& item) const;
--
--public Q_SLOTS:
--
-- void slotAnimationStep();
-- void setPaintTree(bool paint);
--
--private:
--
-- class Private;
-- Private* const d;
--};
--
--} // namespace Digikam
--
--#endif // IMAGEVERSIONSMODEL_H
---
-cgit v0.11.2
-
diff --git a/kde/patch/digikam/digikam_imagemagick7.patch b/kde/patch/digikam/digikam_imagemagick7.patch
deleted file mode 100644
index 04a7752..0000000
--- a/kde/patch/digikam/digikam_imagemagick7.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From: Antonio Rojas <arojas@archlinux.org>
-Date: Thu, 7 Nov 2019 09:25:02 +0100
-Subject: Properly initialize ExceptionInfo in libMagick
-
-Otherwise it will crash if some plugins can't be loaded.
-
-diff --git a/core/dplugins/dimg/imagemagick/dimgimagemagickplugin.cpp b/core/dplugins/dimg/imagemagick/dimgimagemagickplugin.cpp
-index 1858b4d..20ef01b 100644
---- a/core/dplugins/dimg/imagemagick/dimgimagemagickplugin.cpp
-+++ b/core/dplugins/dimg/imagemagick/dimgimagemagickplugin.cpp
-@@ -125,7 +125,7 @@ QMap<QString, QString> DImgImageMagickPlugin::extraAboutData() const
- QString mimes = typeMimes();
-
- QMap<QString, QString> map;
-- ExceptionInfo ex;
-+ ExceptionInfo ex = *AcquireExceptionInfo();
- size_t n = 0;
- const MagickInfo** inflst = GetMagickInfoList("*", &n, &ex);
-
-@@ -219,7 +219,7 @@ int DImgImageMagickPlugin::canRead(const QFileInfo& fileInfo, bool magic) const
- int DImgImageMagickPlugin::canWrite(const QString& format) const
- {
- QStringList formats;
-- ExceptionInfo ex;
-+ ExceptionInfo ex = *AcquireExceptionInfo();
- size_t n = 0;
- const MagickInfo** inflst = GetMagickInfoList("*", &n, &ex);
-
-@@ -266,7 +266,7 @@ DImgLoader* DImgImageMagickPlugin::loader(DImg* const image, const DRawDecoding&
- QStringList DImgImageMagickPlugin::decoderFormats() const
- {
- QStringList formats;
-- ExceptionInfo ex;
-+ ExceptionInfo ex = *AcquireExceptionInfo();
- size_t n = 0;
- const MagickInfo** inflst = GetMagickInfoList("*", &n, &ex);
-
---
-cgit v1.1
-
diff --git a/kde/patch/dolphin.patch b/kde/patch/dolphin.patch
index dfe3a2f..02a7950 100644
--- a/kde/patch/dolphin.patch
+++ b/kde/patch/dolphin.patch
@@ -1,3 +1,2 @@
# Let the user decide whether she wants to run Dolphin as root:
cat $CWD/patch/dolphin/dolphin_revert_noroot.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/falkon.patch b/kde/patch/falkon.patch
new file mode 100644
index 0000000..27a4668
--- /dev/null
+++ b/kde/patch/falkon.patch
@@ -0,0 +1,2 @@
+# Fix build against Qt 5.15:
+cat $CWD/patch/falkon/falkon.qt-5.15.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/falkon/falkon.qt-5.15.diff b/kde/patch/falkon/falkon.qt-5.15.diff
new file mode 100644
index 0000000..60f1699
--- /dev/null
+++ b/kde/patch/falkon/falkon.qt-5.15.diff
@@ -0,0 +1,20 @@
+--- ./src/lib/tools/qztools.cpp.orig 2019-03-19 13:06:45.000000000 -0500
++++ ./src/lib/tools/qztools.cpp 2020-07-18 15:00:08.881313780 -0500
+@@ -25,6 +25,7 @@
+ #include <QByteArray>
+ #include <QPixmap>
+ #include <QPainter>
++#include <QPainterPath>
+ #include <QBuffer>
+ #include <QFile>
+ #include <QDir>
+--- ./src/plugins/VerticalTabs/verticaltabsplugin.cpp.orig 2019-03-19 13:06:45.000000000 -0500
++++ ./src/plugins/VerticalTabs/verticaltabsplugin.cpp 2020-07-18 15:03:16.468303404 -0500
+@@ -31,6 +31,7 @@
+ #include "desktopfile.h"
+
+ #include <QSettings>
++#include <QFile>
+
+ VerticalTabsPlugin::VerticalTabsPlugin()
+ : QObject()
diff --git a/kde/patch/gwenview.patch b/kde/patch/gwenview.patch
deleted file mode 100644
index 04dfe50..0000000
--- a/kde/patch/gwenview.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Prevent dataloss when importing pictures;
-# Will be fixed in 17.04.2:
-#cat $CWD/patch/gwenview/gwenview-17.04.1_dataloss.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/gwenview/gwenview-17.04.1_dataloss.patch b/kde/patch/gwenview/gwenview-17.04.1_dataloss.patch
deleted file mode 100644
index fa93428..0000000
--- a/kde/patch/gwenview/gwenview-17.04.1_dataloss.patch
+++ /dev/null
@@ -1,131 +0,0 @@
-From 6ce5d2f8d82f83c5a3d726ee5807ebaf7a6e3c6c Mon Sep 17 00:00:00 2001
-From: Henrik Fehlauer <rkflx@lab12.net>
-Date: Thu, 11 May 2017 22:40:15 +0200
-Subject: Avoid data loss when importing pictures
-
-Summary:
-Fix porting regressions, which left users of Gwenview Importer with:
-- failed import (import destination still empty)
-- additionally (when choosing "Delete" instead of "Keep" after import):
- pictures also removed from import source, with no way to recover
-
-Correct additional problems remaining after fixing the import failure:
-- hang on duplicate filenames
-- identically named files with different content are never imported
-- error dialog when deleting pictures from import source
-
-BUG: 379615
-
-In detail:
-
-1st problem (introduced in 017b4fe5dc7f4b6e876cfd7b108dcebbf609ae94):
-
- Initially, pictures are copied to a temporary folder
- (e.g. "foo/.gwenview_importer-IcQqvo/"), before being moved/renamed
- to the final destination (e.g. "foo/"), which is determined by
- calling "cd .." on the temporary folder.
-
- However, mistakenly this path contains a superfluous '/'
- (e.g. "foo/.gwenview_importer-IcQqvo//"), resulting in the final
- destination reading "foo/.gwenview_importer-IcQqvo/" instead of
- "foo/". On cleanup, the temporary folder is removed, simultaneously
- deleting all new pictures.
-
- Fix: Omit '/' where appropriate.
-
-2nd problem (broken by a3262e9b197ee97323ef8bf3a9dca1e13f61a74c):
-
- When trying to find a unique filename, the while loop "stat"ing the
- file repeats forever.
-
- Fix: Call "KIO::stat" and "KJobWidgets::setWindow"
- also inside the loop.
-
-3rd problem (introduced in 017b4fe5dc7f4b6e876cfd7b108dcebbf609ae94):
-
- If the destination directory already contains an identically named
- file, we try to find a different name by appending a number. For
- this, we need to strip the old filename from the full path.
- Unfortunately, only calling "path()" is incorrect, giving
- "foo/pict0001.jpg/pict0001_1.jpg", rather than "foo/pict0001_1.jpg".
-
- Fix: Use "adjusted(QUrl::RemoveFilename)".
-
-4th problem (broken by a3262e9b197ee97323ef8bf3a9dca1e13f61a74c):
-
- Although deletion works, we show a warning dialog stating failure.
-
- Fix: Invert the logic of "job->exec()", as the error handling should
- be skipped by "break"ing out of the while loop.
-
-Test Plan:
-Steps to reproduce (see https://bugs.kde.org/show_bug.cgi?id=379615) no longer result in data loss.
-
-Autotests for importer (separate review request in D5750) pass. Hopefully, this helps catching any future porting regressions.
-
-Reviewers: ltoscano, sandsmark, gateau
-
-Reviewed By: ltoscano
-
-Differential Revision: https://phabricator.kde.org/D5749
----
- importer/fileutils.cpp | 5 ++++-
- importer/importdialog.cpp | 2 +-
- importer/importer.cpp | 4 ++--
- 3 files changed, 7 insertions(+), 4 deletions(-)
-
-diff --git a/importer/fileutils.cpp b/importer/fileutils.cpp
-index 5293d56..a51a18c 100644
---- a/importer/fileutils.cpp
-+++ b/importer/fileutils.cpp
-@@ -128,7 +128,10 @@ RenameResult rename(const QUrl& src, const QUrl& dst_, QWidget* authWindow)
- }
- result = RenamedUnderNewName;
-
-- dst.setPath(dst.path() + '/' + prefix + QString::number(count) + suffix);
-+ dst.setPath(dst.adjusted(QUrl::RemoveFilename).path() + prefix + QString::number(count) + suffix);
-+ statJob = KIO::stat(dst);
-+ KJobWidgets::setWindow(statJob, authWindow);
-+
- ++count;
- }
-
-diff --git a/importer/importdialog.cpp b/importer/importdialog.cpp
-index ee6f7cd..5e9e847 100644
---- a/importer/importdialog.cpp
-+++ b/importer/importdialog.cpp
-@@ -121,7 +121,7 @@ public:
- QList<QUrl> urls = importedUrls + skippedUrls;
- while (true) {
- KIO::Job* job = KIO::del(urls);
-- if (!job->exec()) {
-+ if (job->exec()) {
- break;
- }
- // Deleting failed
-diff --git a/importer/importer.cpp b/importer/importer.cpp
-index 51c4b96..a7e1d4e 100644
---- a/importer/importer.cpp
-+++ b/importer/importer.cpp
-@@ -98,7 +98,7 @@ struct ImporterPrivate
- }
- mCurrentUrl = mUrlList.takeFirst();
- QUrl dst = mTempImportDirUrl;
-- dst.setPath(dst.path() + '/' + mCurrentUrl.fileName());
-+ dst.setPath(dst.path() + mCurrentUrl.fileName());
- KIO::Job* job = KIO::copy(mCurrentUrl, dst, KIO::HideProgressInfo);
- KJobWidgets::setWindow(job, mAuthWindow);
- QObject::connect(job, SIGNAL(result(KJob*)),
-@@ -122,7 +122,7 @@ struct ImporterPrivate
- } else {
- fileName = src.fileName();
- }
-- dst.setPath(dst.path() + '/' + fileName);
-+ dst.setPath(dst.path() + fileName);
-
- FileUtils::RenameResult result = FileUtils::rename(src, dst, mAuthWindow);
- switch (result) {
---
-cgit v0.11.2
-
-
diff --git a/kde/patch/kaccounts-integration.patch b/kde/patch/kaccounts-integration.patch
deleted file mode 100644
index 26b87d4..0000000
--- a/kde/patch/kaccounts-integration.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# A bug with 15.08.2/.3 breaks KDE Telepathy accounts connection .
-# Will be fixed in 15.12.0:
-#cat $CWD/patch/kaccounts-integration/kaccounts-integration-15.08.3_service.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kaccounts-integration/kaccounts-integration-15.08.3_service.patch b/kde/patch/kaccounts-integration/kaccounts-integration-15.08.3_service.patch
deleted file mode 100644
index e41d58b..0000000
--- a/kde/patch/kaccounts-integration/kaccounts-integration-15.08.3_service.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/src/jobs/createaccount.cpp
-+++ b/src/jobs/createaccount.cpp
-@@ -141,8 +141,8 @@
-
- m_done = true;
-
-+ connect(m_identity, &SignOn::Identity::credentialsStored, m_identity, &SignOn::Identity::queryInfo);
- m_identity->storeCredentials();
-- connect(m_identity, &SignOn::Identity::credentialsStored, m_identity, &SignOn::Identity::queryInfo);
- }
-
- void CreateAccount::pluginError(const QString &error)
-@@ -177,12 +177,12 @@
- return;
- }
-
-+ m_account->selectService();
-+
- if (m_account->displayName().isEmpty()) {
- m_account->setDisplayName(info.userName());
- }
- m_account->setValue("username", info.userName());
--
-- m_account->selectService();
- m_account->setCredentialsId(info.id());
-
- Accounts::AuthData authData = m_accInfo->authData();
-
diff --git a/kde/patch/kalgebra.patch b/kde/patch/kalgebra.patch
index 8365ff3..d17f482 100644
--- a/kde/patch/kalgebra.patch
+++ b/kde/patch/kalgebra.patch
@@ -2,4 +2,3 @@
# on other, it's not, requiring you to link both Curses and Readline libraries
# manually.
cat $CWD/patch/kalgebra/kalgebra_ncurses_linking.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kalzium.patch b/kde/patch/kalzium.patch
deleted file mode 100644
index 6593e9d..0000000
--- a/kde/patch/kalzium.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix build against KF 5.31.0 (repaired in 16.12.3):
-#cat $CWD/patch/kalzium/kalzium_kf_5.31.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kalzium/kalzium_kf_5.31.patch b/kde/patch/kalzium/kalzium_kf_5.31.patch
deleted file mode 100644
index a3d4e00..0000000
--- a/kde/patch/kalzium/kalzium_kf_5.31.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-Patch taken from:
-https://gitweb.gentoo.org/repo/gentoo.git/plain/kde-apps/kalzium/files/kalzium-16.12.2-kf-5.31.patch
-
-From f233d458959548ab371e3faeca7313f746625afc Mon Sep 17 00:00:00 2001
-From: Heiko Becker <heirecka@exherbo.org>
-Date: Sun, 22 Jan 2017 14:46:24 +0100
-Subject: Fix build with extra-cmake-modules > 5.30
-
-Since a5f3a76e14799c68b5e8f74e375baa5f6f6ab4dc in
-extra-cmake-modules.git -fno-operator-names is passed to the build
-(when supported), causing a build error for kalzium.
-
-REVIEW: 129873
----
- src/calculator/titrationCalculator.cpp | 39 +++++++++++++++-------------------
- 1 file changed, 17 insertions(+), 22 deletions(-)
-
-diff --git a/src/calculator/titrationCalculator.cpp b/src/calculator/titrationCalculator.cpp
-index 44ea152..6ea9ac9 100644
---- a/src/calculator/titrationCalculator.cpp
-+++ b/src/calculator/titrationCalculator.cpp
-@@ -41,11 +41,6 @@
-
- using namespace std;
-
--#ifdef _MSC_VER
--#define and &&
--#define or ||
--#endif
--
- titrationCalculator::titrationCalculator(QWidget * parent) : QWidget(parent)
- {
- xmin = 0;
-@@ -112,7 +107,7 @@ void titrationCalculator::plot()
- }
- QString mreporto;
- int iter = 0;
-- if (uid.xaxis->text() == "" or uid.xaxis->text() == " ") {
-+ if (uid.xaxis->text() == "" || uid.xaxis->text() == " ") {
- uid.xaxis->setText(i18n("nothing"));
- }
- if (tmpy == 0) {
-@@ -121,11 +116,11 @@ void titrationCalculator::plot()
- //now we have to solve the system of equations NOTE:yvalue contains the equation of Y-axis variable
- //we iterates the process until you have an equation in one only unknown variable or a numeric expression
- mreporto = solve(yvalue);
-- while (end == 0 or lettere == 1) {
-+ while (end == 0 || lettere == 1) {
- QByteArray ba = mreporto.toLatin1();
- char *tmreport = ba.data();
- ++iter;
-- if (end == 1 or lettere == 0) {
-+ if (end == 1 || lettere == 0) {
- break;
- }
- if (iter > 100) {
-@@ -273,13 +268,13 @@ QString titrationCalculator::solve(char *yvalue)
- QString tempyval;
- QString ptem;
- for (int i = 0; strlen(yvalue) + 1; ++i) {
-- if (!(yvalue[i]=='q' or yvalue[i]=='w' or yvalue[i]=='e' or yvalue[i]=='r' or yvalue[i]=='t' or yvalue[i]=='y' or yvalue[i]=='u' or yvalue[i]=='i' or yvalue[i]=='o' or yvalue[i]=='p' or yvalue[i]=='a' or yvalue[i]=='s' or yvalue[i]=='d' or yvalue[i]=='f' or yvalue[i]=='g' or yvalue[i]=='h' or yvalue[i]=='j' or yvalue[i]=='k' or yvalue[i]=='l' or yvalue[i]=='z' or yvalue[i]=='x' or yvalue[i]=='c' or yvalue[i]=='v' or yvalue[i]=='b' or yvalue[i]=='n' or yvalue[i]=='m' or yvalue[i]=='+' or yvalue[i]=='-' or yvalue[i]=='^' or yvalue[i]=='*' or yvalue[i]=='/' or yvalue[i]=='(' or yvalue[i]==')' or yvalue[i]=='Q' or yvalue[i]=='W' or yvalue[i]=='E' or yvalue[i]=='R' or yvalue[i]=='T' or yvalue[i]=='Y' or yvalue[i]=='U' or yvalue[i]=='I' or yvalue[i]=='O' or yvalue[i]=='P' or yvalue[i]=='A' or yvalue[i]=='S' or yvalue[i]=='D' or yvalue[i]=='F' or yvalue[i]=='G' or yvalue[i]=='H' or yvalue[i]=='J' or yvalue[i]=='K' or yvalue[i]=='L' or yvalue[i]=='Z' or yvalue[i]=='X' or yvalue[i]=='C' or yvalue[i]=='V' or yvalue[i]=='B' or yvalue[i]=='N' or yvalue[i]=='M' or yvalue[i]=='1' or yvalue[i]=='2' or yvalue[i]=='3' or yvalue[i]=='4' or yvalue[i]=='5' or yvalue[i]=='6' or yvalue[i]=='7' or yvalue[i]=='8' or yvalue[i]=='9' or yvalue[i]=='0' or yvalue[i]=='.' or yvalue[i]==',')) {
-+ if (!(yvalue[i]=='q' || yvalue[i]=='w' || yvalue[i]=='e' || yvalue[i]=='r' || yvalue[i]=='t' || yvalue[i]=='y' || yvalue[i]=='u' || yvalue[i]=='i' || yvalue[i]=='o' || yvalue[i]=='p' || yvalue[i]=='a' || yvalue[i]=='s' || yvalue[i]=='d' || yvalue[i]=='f' || yvalue[i]=='g' || yvalue[i]=='h' || yvalue[i]=='j' || yvalue[i]=='k' || yvalue[i]=='l' || yvalue[i]=='z' || yvalue[i]=='x' || yvalue[i]=='c' || yvalue[i]=='v' || yvalue[i]=='b' || yvalue[i]=='n' || yvalue[i]=='m' || yvalue[i]=='+' || yvalue[i]=='-' || yvalue[i]=='^' || yvalue[i]=='*' || yvalue[i]=='/' || yvalue[i]=='(' || yvalue[i]==')' || yvalue[i]=='Q' || yvalue[i]=='W' || yvalue[i]=='E' || yvalue[i]=='R' || yvalue[i]=='T' || yvalue[i]=='Y' || yvalue[i]=='U' || yvalue[i]=='I' || yvalue[i]=='O' || yvalue[i]=='P' || yvalue[i]=='A' || yvalue[i]=='S' || yvalue[i]=='D' || yvalue[i]=='F' || yvalue[i]=='G' || yvalue[i]=='H' || yvalue[i]=='J' || yvalue[i]=='K' || yvalue[i]=='L' || yvalue[i]=='Z' || yvalue[i]=='X' || yvalue[i]=='C' || yvalue[i]=='V' || yvalue[i]=='B' || yvalue[i]=='N' || yvalue[i]=='M' || yvalue[i]=='1' || yvalue[i]=='2' || yvalue[i]=='3' || yvalue[i]=='4' || yvalue[i]=='5' || yvalue[i]=='6' || yvalue[i]=='7' || yvalue[i]=='8' || yvalue[i]=='9' || yvalue[i]=='0' || yvalue[i]=='.' || yvalue[i]==',')) {
- break; //if current value is not a permitted value, this means that something is wrong
- }
-- if (yvalue[i]=='q' or yvalue[i]=='w' or yvalue[i]=='e' or yvalue[i]=='r' or yvalue[i]=='t' or yvalue[i]=='y' or yvalue[i]=='u' or yvalue[i]=='i' or yvalue[i]=='o' or yvalue[i]=='p' or yvalue[i]=='a' or yvalue[i]=='s' or yvalue[i]=='d' or yvalue[i]=='f' or yvalue[i]=='g' or yvalue[i]=='h' or yvalue[i]=='j' or yvalue[i]=='k' or yvalue[i]=='l' or yvalue[i]=='z' or yvalue[i]=='x' or yvalue[i]=='c' or yvalue[i]=='v' or yvalue[i]=='b' or yvalue[i]=='n' or yvalue[i]=='m' or yvalue[i]=='Q' or yvalue[i]=='W' or yvalue[i]=='E' or yvalue[i]=='R' or yvalue[i]=='T' or yvalue[i]=='Y' or yvalue[i]=='U' or yvalue[i]=='I' or yvalue[i]=='O' or yvalue[i]=='P' or yvalue[i]=='A' or yvalue[i]=='S' or yvalue[i]=='D' or yvalue[i]=='F' or yvalue[i]=='G' or yvalue[i]=='H' or yvalue[i]=='J' or yvalue[i]=='K' or yvalue[i]=='L' or yvalue[i]=='Z' or yvalue[i]=='X' or yvalue[i]=='C' or yvalue[i]=='V' or yvalue[i]=='B' or yvalue[i]=='N' or yvalue[i]=='M' or yvalue[i]=='.' or yvalue[i]==',') {
-+ if (yvalue[i]=='q' || yvalue[i]=='w' || yvalue[i]=='e' || yvalue[i]=='r' || yvalue[i]=='t' || yvalue[i]=='y' || yvalue[i]=='u' || yvalue[i]=='i' || yvalue[i]=='o' || yvalue[i]=='p' || yvalue[i]=='a' || yvalue[i]=='s' || yvalue[i]=='d' || yvalue[i]=='f' || yvalue[i]=='g' || yvalue[i]=='h' || yvalue[i]=='j' || yvalue[i]=='k' || yvalue[i]=='l' || yvalue[i]=='z' || yvalue[i]=='x' || yvalue[i]=='c' || yvalue[i]=='v' || yvalue[i]=='b' || yvalue[i]=='n' || yvalue[i]=='m' || yvalue[i]=='Q' || yvalue[i]=='W' || yvalue[i]=='E' || yvalue[i]=='R' || yvalue[i]=='T' || yvalue[i]=='Y' || yvalue[i]=='U' || yvalue[i]=='I' || yvalue[i]=='O' || yvalue[i]=='P' || yvalue[i]=='A' || yvalue[i]=='S' || yvalue[i]=='D' || yvalue[i]=='F' || yvalue[i]=='G' || yvalue[i]=='H' || yvalue[i]=='J' || yvalue[i]=='K' || yvalue[i]=='L' || yvalue[i]=='Z' || yvalue[i]=='X' || yvalue[i]=='C' || yvalue[i]=='V' || yvalue[i]=='B' || yvalue[i]=='N' || yvalue[i]=='M' || yvalue[i]=='.' || yvalue[i]==',') {
- lettere = 1; //if lettere == 0 then the equation contains only mnumbers
- }
-- if (yvalue[i]=='+' or yvalue[i]=='-' or yvalue[i]=='^' or yvalue[i]=='*' or yvalue[i]=='/' or yvalue[i]=='(' or yvalue[i]==')' or yvalue[i]=='1' or yvalue[i]=='2' or yvalue[i]=='3' or yvalue[i]=='4' or yvalue[i]=='5' or yvalue[i]=='6' or yvalue[i]=='7' or yvalue[i]=='8' or yvalue[i]=='9' or yvalue[i]=='0' or yvalue[i]=='.' or yvalue[i]==',') {
-+ if (yvalue[i]=='+' || yvalue[i]=='-' || yvalue[i]=='^' || yvalue[i]=='*' || yvalue[i]=='/' || yvalue[i]=='(' || yvalue[i]==')' || yvalue[i]=='1' || yvalue[i]=='2' || yvalue[i]=='3' || yvalue[i]=='4' || yvalue[i]=='5' || yvalue[i]=='6' || yvalue[i]=='7' || yvalue[i]=='8' || yvalue[i]=='9' || yvalue[i]=='0' || yvalue[i]=='.' || yvalue[i]==',') {
- tempyval = tempyval + QString(yvalue[i]);
- } else {
- tempy = tempy + QString(yvalue[i]);
-@@ -302,7 +297,7 @@ QString titrationCalculator::solve(char *yvalue)
- end = 1;
- }
- if (tempy!=uid.xaxis->text()) {
-- if (yvalue[i]=='+' or yvalue[i]=='-' or yvalue[i]=='^' or yvalue[i]=='*' or yvalue[i]=='/' or yvalue[i]=='(' or yvalue[i]==')' or yvalue[i]=='1' or yvalue[i]=='2' or yvalue[i]=='3' or yvalue[i]=='4' or yvalue[i]=='5' or yvalue[i]=='6' or yvalue[i]=='7' or yvalue[i]=='8' or yvalue[i]=='9' or yvalue[i]=='0' or yvalue[i]=='.' or yvalue[i]==',') {
-+ if (yvalue[i]=='+' || yvalue[i]=='-' || yvalue[i]=='^' || yvalue[i]=='*' || yvalue[i]=='/' || yvalue[i]=='(' || yvalue[i]==')' || yvalue[i]=='1' || yvalue[i]=='2' || yvalue[i]=='3' || yvalue[i]=='4' || yvalue[i]=='5' || yvalue[i]=='6' || yvalue[i]=='7' || yvalue[i]=='8' || yvalue[i]=='9' || yvalue[i]=='0' || yvalue[i]=='.' || yvalue[i]==',') {
- //actually nothing
- } else {
- end = 0;
-@@ -335,13 +330,13 @@ QString titrationCalculator::solvex(char *yvalue, QString dnum) {
- QString tempyval;
- tempy = "";
- for (int i = 0; strlen(yvalue) + 1; ++i) {
-- if (!(yvalue[i]=='q' or yvalue[i]=='w' or yvalue[i]=='e' or yvalue[i]=='r' or yvalue[i]=='t' or yvalue[i]=='y' or yvalue[i]=='u' or yvalue[i]=='i' or yvalue[i]=='o' or yvalue[i]=='p' or yvalue[i]=='a' or yvalue[i]=='s' or yvalue[i]=='d' or yvalue[i]=='f' or yvalue[i]=='g' or yvalue[i]=='h' or yvalue[i]=='j' or yvalue[i]=='k' or yvalue[i]=='l' or yvalue[i]=='z' or yvalue[i]=='x' or yvalue[i]=='c' or yvalue[i]=='v' or yvalue[i]=='b' or yvalue[i]=='n' or yvalue[i]=='m' or yvalue[i]=='+' or yvalue[i]=='-' or yvalue[i]=='^' or yvalue[i]=='*' or yvalue[i]=='/' or yvalue[i]=='(' or yvalue[i]==')' or yvalue[i]=='Q' or yvalue[i]=='W' or yvalue[i]=='E' or yvalue[i]=='R' or yvalue[i]=='T' or yvalue[i]=='Y' or yvalue[i]=='U' or yvalue[i]=='I' or yvalue[i]=='O' or yvalue[i]=='P' or yvalue[i]=='A' or yvalue[i]=='S' or yvalue[i]=='D' or yvalue[i]=='F' or yvalue[i]=='G' or yvalue[i]=='H' or yvalue[i]=='J' or yvalue[i]=='K' or yvalue[i]=='L' or yvalue[i]=='Z' or yvalue[i]=='X' or yvalue[i]=='C' or yvalue[i]=='V' or yvalue[i]=='B' or yvalue[i]=='N' or yvalue[i]=='M' or yvalue[i]=='1' or yvalue[i]=='2' or yvalue[i]=='3' or yvalue[i]=='4' or yvalue[i]=='5' or yvalue[i]=='6' or yvalue[i]=='7' or yvalue[i]=='8' or yvalue[i]=='9' or yvalue[i]=='0' or yvalue[i]=='.' or yvalue[i]==',')) {
-+ if (!(yvalue[i]=='q' || yvalue[i]=='w' || yvalue[i]=='e' || yvalue[i]=='r' || yvalue[i]=='t' || yvalue[i]=='y' || yvalue[i]=='u' || yvalue[i]=='i' || yvalue[i]=='o' || yvalue[i]=='p' || yvalue[i]=='a' || yvalue[i]=='s' || yvalue[i]=='d' || yvalue[i]=='f' || yvalue[i]=='g' || yvalue[i]=='h' || yvalue[i]=='j' || yvalue[i]=='k' || yvalue[i]=='l' || yvalue[i]=='z' || yvalue[i]=='x' || yvalue[i]=='c' || yvalue[i]=='v' || yvalue[i]=='b' || yvalue[i]=='n' || yvalue[i]=='m' || yvalue[i]=='+' || yvalue[i]=='-' || yvalue[i]=='^' || yvalue[i]=='*' || yvalue[i]=='/' || yvalue[i]=='(' || yvalue[i]==')' || yvalue[i]=='Q' || yvalue[i]=='W' || yvalue[i]=='E' || yvalue[i]=='R' || yvalue[i]=='T' || yvalue[i]=='Y' || yvalue[i]=='U' || yvalue[i]=='I' || yvalue[i]=='O' || yvalue[i]=='P' || yvalue[i]=='A' || yvalue[i]=='S' || yvalue[i]=='D' || yvalue[i]=='F' || yvalue[i]=='G' || yvalue[i]=='H' || yvalue[i]=='J' || yvalue[i]=='K' || yvalue[i]=='L' || yvalue[i]=='Z' || yvalue[i]=='X' || yvalue[i]=='C' || yvalue[i]=='V' || yvalue[i]=='B' || yvalue[i]=='N' || yvalue[i]=='M' || yvalue[i]=='1' || yvalue[i]=='2' || yvalue[i]=='3' || yvalue[i]=='4' || yvalue[i]=='5' || yvalue[i]=='6' || yvalue[i]=='7' || yvalue[i]=='8' || yvalue[i]=='9' || yvalue[i]=='0' || yvalue[i]=='.' || yvalue[i]==',')) {
- break; //if current value is not a permitted value, this means that something is wrong
- }
-- if (yvalue[i]=='q' or yvalue[i]=='w' or yvalue[i]=='e' or yvalue[i]=='r' or yvalue[i]=='t' or yvalue[i]=='y' or yvalue[i]=='u' or yvalue[i]=='i' or yvalue[i]=='o' or yvalue[i]=='p' or yvalue[i]=='a' or yvalue[i]=='s' or yvalue[i]=='d' or yvalue[i]=='f' or yvalue[i]=='g' or yvalue[i]=='h' or yvalue[i]=='j' or yvalue[i]=='k' or yvalue[i]=='l' or yvalue[i]=='z' or yvalue[i]=='x' or yvalue[i]=='c' or yvalue[i]=='v' or yvalue[i]=='b' or yvalue[i]=='n' or yvalue[i]=='m' or yvalue[i]=='Q' or yvalue[i]=='W' or yvalue[i]=='E' or yvalue[i]=='R' or yvalue[i]=='T' or yvalue[i]=='Y' or yvalue[i]=='U' or yvalue[i]=='I' or yvalue[i]=='O' or yvalue[i]=='P' or yvalue[i]=='A' or yvalue[i]=='S' or yvalue[i]=='D' or yvalue[i]=='F' or yvalue[i]=='G' or yvalue[i]=='H' or yvalue[i]=='J' or yvalue[i]=='K' or yvalue[i]=='L' or yvalue[i]=='Z' or yvalue[i]=='X' or yvalue[i]=='C' or yvalue[i]=='V' or yvalue[i]=='B' or yvalue[i]=='N' or yvalue[i]=='M' or yvalue[i]=='.' or yvalue[i]==',') {
-+ if (yvalue[i]=='q' || yvalue[i]=='w' || yvalue[i]=='e' || yvalue[i]=='r' || yvalue[i]=='t' || yvalue[i]=='y' || yvalue[i]=='u' || yvalue[i]=='i' || yvalue[i]=='o' || yvalue[i]=='p' || yvalue[i]=='a' || yvalue[i]=='s' || yvalue[i]=='d' || yvalue[i]=='f' || yvalue[i]=='g' || yvalue[i]=='h' || yvalue[i]=='j' || yvalue[i]=='k' || yvalue[i]=='l' || yvalue[i]=='z' || yvalue[i]=='x' || yvalue[i]=='c' || yvalue[i]=='v' || yvalue[i]=='b' || yvalue[i]=='n' || yvalue[i]=='m' || yvalue[i]=='Q' || yvalue[i]=='W' || yvalue[i]=='E' || yvalue[i]=='R' || yvalue[i]=='T' || yvalue[i]=='Y' || yvalue[i]=='U' || yvalue[i]=='I' || yvalue[i]=='O' || yvalue[i]=='P' || yvalue[i]=='A' || yvalue[i]=='S' || yvalue[i]=='D' || yvalue[i]=='F' || yvalue[i]=='G' || yvalue[i]=='H' || yvalue[i]=='J' || yvalue[i]=='K' || yvalue[i]=='L' || yvalue[i]=='Z' || yvalue[i]=='X' || yvalue[i]=='C' || yvalue[i]=='V' || yvalue[i]=='B' || yvalue[i]=='N' || yvalue[i]=='M' || yvalue[i]=='.' || yvalue[i]==',') {
- tempy = tempy + yvalue[i]; //if lettere == 0 then the equation contains only mnumbers
- }
-- if (yvalue[i]=='+' or yvalue[i]=='-' or yvalue[i]=='^' or yvalue[i]=='*' or yvalue[i]=='/' or yvalue[i]=='(' or yvalue[i]==')' or yvalue[i]=='1' or yvalue[i]=='2' or yvalue[i]=='3' or yvalue[i]=='4' or yvalue[i]=='5' or yvalue[i]=='6' or yvalue[i]=='7' or yvalue[i]=='8' or yvalue[i]=='9' or yvalue[i]=='0' or yvalue[i]=='.' or yvalue[i]==',') {
-+ if (yvalue[i]=='+' || yvalue[i]=='-' || yvalue[i]=='^' || yvalue[i]=='*' || yvalue[i]=='/' || yvalue[i]=='(' || yvalue[i]==')' || yvalue[i]=='1' || yvalue[i]=='2' || yvalue[i]=='3' || yvalue[i]=='4' || yvalue[i]=='5' || yvalue[i]=='6' || yvalue[i]=='7' || yvalue[i]=='8' || yvalue[i]=='9' || yvalue[i]=='0' || yvalue[i]=='.' || yvalue[i]==',') {
- if (!tempyolda.isEmpty()) {
- tempy = tempy + yvalue[i];
- if (tempyolda == uid.xaxis->text()) {
-@@ -359,7 +354,7 @@ QString titrationCalculator::solvex(char *yvalue, QString dnum) {
- tempyolda = tempyold;
- } else {
- tempyold = "";
-- if (((olda != 1) and (yvalue[i + 1] != '^')) or (yvalue[i] == '+' or yvalue[i] == '-' or yvalue[i] == '^' or yvalue[i] == '*' or yvalue[i] == '/' or yvalue[i] == '(' or yvalue[i] == ')')) {
-+ if (((olda != 1) && (yvalue[i + 1] != '^')) || (yvalue[i] == '+' || yvalue[i] == '-' || yvalue[i] == '^' || yvalue[i] == '*' || yvalue[i] == '/' || yvalue[i] == '(' || yvalue[i] == ')')) {
- tempyval = tempyval + QString(yvalue[i]);
- }
- }
-@@ -374,7 +369,7 @@ QString titrationCalculator::solvex(char *yvalue, QString dnum) {
- tempyold = "";
- olda = 1;
- }
-- if ((tempy==uid.xaxis->text()) and (!tempyolda.isEmpty())) {
-+ if ((tempy==uid.xaxis->text()) && (!tempyolda.isEmpty())) {
- if (yvalue[i + 1] != '^') {
- tempyval = tempyval + dnum;
- }
-@@ -611,7 +606,7 @@ void titrationCalculator::on_actionOpen_triggered()
- if (tmpchr != '|') {
- tempyval = tempyval + tmpchr;
- } else {
-- if ((tablea == 1) and (tempyval != QString("table1")) and (tempyval != QString("table2")) and (tempyval != QString("xaxis")) and (tempyval != QString("yaxis")) and (tempyval != QString("note"))) {
-+ if ((tablea == 1) && (tempyval != QString("table1")) && (tempyval != QString("table2")) && (tempyval != QString("xaxis")) && (tempyval != QString("yaxis")) && (tempyval != QString("note"))) {
- if ((i % 2) != 0) {
- QTableWidgetItem *titemo = uid.tableWidget->item((i - 1) / 2, 1);
- if (titemo) {
-@@ -626,7 +621,7 @@ void titrationCalculator::on_actionOpen_triggered()
- ++i;
- }
-
-- if ((tableb == 1) and (tempyval != QString("table1")) and (tempyval != QString("table2")) and (tempyval != QString("xaxis")) and (tempyval != QString("yaxis")) and (tempyval != QString("note"))) {
-+ if ((tableb == 1) && (tempyval != QString("table1")) && (tempyval != QString("table2")) && (tempyval != QString("xaxis")) && (tempyval != QString("yaxis")) && (tempyval != QString("note"))) {
- if ((i % 2) != 0) {
- QTableWidgetItem *titemo = uid.tableWidget_2->item((i - 1) / 2, 1);
- if (titemo) {
-@@ -641,13 +636,13 @@ void titrationCalculator::on_actionOpen_triggered()
- }
- ++i;
- }
-- if ((xax == 1) and (tempyval != QString("table1")) and (tempyval != QString("table2")) and (tempyval != QString("xaxis")) and (tempyval != QString("yaxis")) and (tempyval != QString("note"))) {
-+ if ((xax == 1) && (tempyval != QString("table1")) && (tempyval != QString("table2")) && (tempyval != QString("xaxis")) && (tempyval != QString("yaxis")) && (tempyval != QString("note"))) {
- uid.xaxis->setText(tempyval);
- }
-- if ((yax == 1) and (tempyval != QString("table1")) and (tempyval != QString("table2")) and (tempyval != QString("xaxis")) and (tempyval != QString("yaxis")) and (tempyval != QString("note"))) {
-+ if ((yax == 1) && (tempyval != QString("table1")) && (tempyval != QString("table2")) && (tempyval != QString("xaxis")) && (tempyval != QString("yaxis")) && (tempyval != QString("note"))) {
- uid.yaxis->setText(tempyval);
- }
-- if ((notea == 1) and (tempyval != QString("table1")) and (tempyval != QString("table2")) and (tempyval != QString("xaxis")) and (tempyval != QString("yaxis")) and (tempyval != QString("note"))) {
-+ if ((notea == 1) && (tempyval != QString("table1")) && (tempyval != QString("table2")) && (tempyval != QString("xaxis")) && (tempyval != QString("yaxis")) && (tempyval != QString("note"))) {
- uid.note->setText(tempyval);
- }
-
---
-cgit v0.11.2
-
-
diff --git a/kde/patch/kate.patch b/kde/patch/kate.patch
index 45c2f53..59df062 100644
--- a/kde/patch/kate.patch
+++ b/kde/patch/kate.patch
@@ -1,8 +1,3 @@
-# Last-minute fixes for opening and closing files:
-# Should be fixed after 15.12.0.
-#cat $CWD/patch/kate/kate-15.12.0.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
# Allow Kate to be started by the root user; disallowing this is not
# a decision that a developer should make for the user, it is patronizing:
cat $CWD/patch/kate/kate_runasroot.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kate/kate-15.12.0.patch b/kde/patch/kate/kate-15.12.0.patch
deleted file mode 100644
index 25067f4..0000000
--- a/kde/patch/kate/kate-15.12.0.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From: Michal Humpula <michal.humpula@hudrydum.cz>
-Date: Sun, 29 Nov 2015 10:24:42 +0000
-Subject: fix opening new files trough dbus
-X-Git-Url: http://quickgit.kde.org/?p=kate.git&a=commitdiff&h=d61b121264d7b43d41c1c6417a18bbfb9078eb9d
----
-fix opening new files trough dbus
-
-REVIEW: 126197
----
-
-
---- a/urlinfo.h
-+++ b/urlinfo.h
-@@ -33,7 +33,7 @@
- : cursor(KTextEditor::Cursor::invalid())
- {
- // convert to an url
-- const QRegularExpression withProtocol(QStringLiteral("^[a-zA-Z]+:")); // TODO: remove after Qt supports this on its own
-+ const QRegularExpression withProtocol(QStringLiteral("^[a-zA-Z]+://")); // TODO: remove after Qt supports this on its own
- if (withProtocol.match(path).hasMatch()) {
- url = QUrl::fromUserInput(path);
- } else {
-@@ -50,7 +50,7 @@
- int line = match.captured(1).toInt() - 1;
- // don't use an invalid column when the line is valid
- int column = qMax(0, match.captured(2).toInt() - 1);
-- url = QUrl::fromLocalFile(path);
-+ url = QUrl::fromLocalFile(QDir::current().absoluteFilePath(path));
- cursor = {line, column};
- }
- }
diff --git a/kde/patch/kcalc.patch b/kde/patch/kcalc.patch
deleted file mode 100644
index 8cc3873..0000000
--- a/kde/patch/kcalc.patch
+++ /dev/null
@@ -1,5 +0,0 @@
-# Fix issue where kcalc has a zero-sized window and appears not to start,
-# in combination with Qt 5.6.
-# Should be fixed after 16.04.0.
-#cat $CWD/patch/kcalc/kcalc-kdebug_360105.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kcalc/kcalc-kdebug_360105.patch b/kde/patch/kcalc/kcalc-kdebug_360105.patch
deleted file mode 100644
index a2ff272..0000000
--- a/kde/patch/kcalc/kcalc-kdebug_360105.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Fix issue where kcalc has a zero-sized window and appears not to start.
-
-Patch-by: Rex Dieter <rdieter@math.unl.edu>
-Gentoo-bug: 577782
-KDE-bug: 360105
-
---- a/kcalc.cpp
-+++ b/kcalc.cpp
-@@ -124,5 +124,5 @@ KCalculator::KCalculator(QWidget *parent
- updateGeometry();
-
-- setFixedSize(minimumSize());
-+ if ( ! minimumSize().isEmpty() ) setFixedSize(minimumSize());
-
- updateDisplay(UPDATE_FROM_CORE);
diff --git a/kde/patch/kcalcore.patch b/kde/patch/kcalcore.patch
deleted file mode 100644
index 051150d..0000000
--- a/kde/patch/kcalcore.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix compile error against new libical 3:
-# Fixed in Applications 17.12.0:
-#cat $CWD/patch/kcalcore/kcalcore_libical3.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kcalcore/kcalcore_libical3.patch b/kde/patch/kcalcore/kcalcore_libical3.patch
deleted file mode 100644
index 0a5155f..0000000
--- a/kde/patch/kcalcore/kcalcore_libical3.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From 27eaa211b23a6bb0bcba5a91cf7cadfc1e888e21 Mon Sep 17 00:00:00 2001
-From: Allen Winter <winter@kde.org>
-Date: Fri, 6 Oct 2017 10:39:20 -0400
-Subject: icalformat_p.cpp, icaltimezones.cpp - follow API changes in libical3
-
----
- src/icalformat_p.cpp | 11 ++++++-----
- src/icaltimezones.cpp | 10 ++++------
- 2 files changed, 10 insertions(+), 11 deletions(-)
-
-diff --git a/src/icalformat_p.cpp b/src/icalformat_p.cpp
-index bd1d8a3..c2e4548 100644
---- a/src/icalformat_p.cpp
-+++ b/src/icalformat_p.cpp
-@@ -2355,7 +2355,6 @@ icaltimetype ICalFormatImpl::writeICalDate(const QDate &date)
- t.second = 0;
-
- t.is_date = 1;
-- t.is_utc = 0;
- t.zone = nullptr;
-
- return t;
-@@ -2377,7 +2376,9 @@ icaltimetype ICalFormatImpl::writeICalDateTime(const QDateTime &datetime, bool d
- t.second = datetime.time().second();
- }
- t.zone = nullptr; // zone is NOT set
-- t.is_utc = datetime.isUtc() ? 1 : 0;
-+ if ( datetime.isUtc() ) {
-+ t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone());
-+ }
-
- // _dumpIcaltime( t );
-
-@@ -2450,7 +2452,7 @@ icalproperty *ICalFormatImpl::writeICalDateTimeProperty(const icalproperty_kind
- }
-
- KTimeZone ktz;
-- if (!t.is_utc) {
-+ if (!icaltime_is_utc(t)) {
- ktz = dt.timeZone();
- }
-
-@@ -2483,7 +2484,7 @@ QDateTime ICalFormatImpl::readICalDateTime(icalproperty *p, const icaltimetype &
- // _dumpIcaltime( t );
-
- KDateTime::Spec timeSpec;
-- if (t.is_utc || t.zone == icaltimezone_get_utc_timezone()) {
-+ if (icaltime_is_utc(t) || t.zone == icaltimezone_get_utc_timezone()) {
- timeSpec = KDateTime::UTC; // the time zone is UTC
- utc = false; // no need to convert to UTC
- } else {
-diff --git a/src/icaltimezones.cpp b/src/icaltimezones.cpp
-index 2f6d42f..f8f8d5d 100644
---- a/src/icaltimezones.cpp
-+++ b/src/icaltimezones.cpp
-@@ -54,7 +54,7 @@ static QDateTime toQDateTime(const icaltimetype &t)
- {
- return QDateTime(QDate(t.year, t.month, t.day),
- QTime(t.hour, t.minute, t.second),
-- (t.is_utc ? Qt::UTC : Qt::LocalTime));
-+ (icaltime_is_utc(t) ? Qt::UTC : Qt::LocalTime));
- }
-
- // Maximum date for time zone data.
-@@ -81,7 +81,6 @@ static icaltimetype writeLocalICalDateTime(const QDateTime &utc, int offset)
- t.second = local.time().second();
- t.is_date = 0;
- t.zone = nullptr;
-- t.is_utc = 0;
- return t;
- }
-
-@@ -888,7 +887,7 @@
- }
- case ICAL_LASTMODIFIED_PROPERTY: {
- const icaltimetype t = icalproperty_get_lastmodified(p);
-- if (t.is_utc) {
-+ if (icaltime_is_utc(t)) {
- data->d->lastModified = toQDateTime(t);
- } else {
- qCDebug(KCALCORE_LOG) << "LAST-MODIFIED not UTC";
-@@ -1261,7 +1260,7 @@ bool ICalTimeZoneParser::parsePhase(icalcomponent *c, ICalTimeZonePhase &phase)
- // Convert DTSTART to QDateTime, and from local time to UTC
- const QDateTime localStart = toQDateTime(dtstart); // local time
- dtstart.second -= prevOffset;
-- dtstart.is_utc = 1;
-+ dtstart = icaltime_convert_to_zone(dtstart, icaltimezone_get_utc_timezone());
- const QDateTime utcStart = toQDateTime(icaltime_normalize(dtstart)); // UTC
-
- transitions += utcStart;
-@@ -1286,13 +1285,12 @@ bool ICalTimeZoneParser::parsePhase(icalcomponent *c, ICalTimeZonePhase &phase)
- t.minute = dtstart.minute;
- t.second = dtstart.second;
- t.is_date = 0;
-- t.is_utc = 0; // dtstart is in local time
- }
- // RFC2445 states that RDATE must be in local time,
- // but we support UTC as well to be safe.
-- if (!t.is_utc) {
-+ if (!icaltime_is_utc(t)) {
- t.second -= prevOffset; // convert to UTC
-- t.is_utc = 1;
-+ t = icaltime_convert_to_zone(t, icaltimezone_get_utc_timezone());
- t = icaltime_normalize(t);
- }
- transitions += toQDateTime(t);
---
-cgit v0.11.2
-
diff --git a/kde/patch/kcoreaddons.patch b/kde/patch/kcoreaddons.patch
deleted file mode 100644
index 5cd190c..0000000
--- a/kde/patch/kcoreaddons.patch
+++ /dev/null
@@ -1,5 +0,0 @@
-# KDEBUG #362161 (fixed in Frameworks 5.22.0):
-# Fixes regression introduced in 9ae6d765b37135bbfe3a8b936e5a88b8a435e424
-# Since the rand() was not seeded, the numbers generated were predictable.
-#cat $CWD/patch/kcoreaddons/kcoreaddons.kdebug_362161.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kcoreaddons/kcoreaddons.kdebug_362161.patch b/kde/patch/kcoreaddons/kcoreaddons.kdebug_362161.patch
deleted file mode 100644
index 31bbcf7..0000000
--- a/kde/patch/kcoreaddons/kcoreaddons.kdebug_362161.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From: Albert Astals Cid <aacid@kde.org>
-Date: Tue, 26 Apr 2016 21:41:27 +0000
-Subject: Missing rand() -> qrand
-X-Git-Url: http://quickgit.kde.org/?p=kcoreaddons.git&a=commitdiff&h=78212436643af95779facd9593c82fb149c2213d
----
-Missing rand() -> qrand
-
-Fixes regression introduced in 9ae6d765b37135bbfe3a8b936e5a88b8a435e424
-
-Reviewed by Aleix
-
-BUGS: 362161
----
-
-
---- a/src/lib/randomness/krandom.cpp
-+++ b/src/lib/randomness/krandom.cpp
-@@ -51,7 +51,7 @@
- }
- qsrand(seed);
- }
-- return rand();
-+ return qrand();
- }
-
- QString KRandom::randomString(int length)
-
diff --git a/kde/patch/kde-baseapps.patch b/kde/patch/kde-baseapps.patch
deleted file mode 100644
index 988504d..0000000
--- a/kde/patch/kde-baseapps.patch
+++ /dev/null
@@ -1,5 +0,0 @@
-# Fix for bug https://bugs.kde.org/show_bug.cgi?id=327224
-# "Regression: Dolphin doesn't accept URLs containing a kio-slave as parameter"
-# Fixed in KDE 4.11.4.
-#cat $CWD/patch/kde-baseapps/dolphin_kdebug_327224.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kde-baseapps/dolphin_kdebug_327224.patch b/kde/patch/kde-baseapps/dolphin_kdebug_327224.patch
deleted file mode 100644
index 8210d87..0000000
--- a/kde/patch/kde-baseapps/dolphin_kdebug_327224.patch
+++ /dev/null
@@ -1,57 +0,0 @@
-Revert "Files passed as arguments: Ignore unsupported files"
-
-This reverts commit cd9e50ae4f3ded5a78d0cfb09a67684a9c15d726.
-
-See bug#327224 for details.
-
---- a/dolphin/src/dolphinmainwindow.cpp
-+++ b/dolphin/src/dolphinmainwindow.cpp
-@@ -31,7 +31,6 @@
- #include "panels/information/informationpanel.h"
- #include "settings/dolphinsettingsdialog.h"
- #include "statusbar/dolphinstatusbar.h"
--#include "views/dolphinview.h"
- #include "views/dolphinviewactionhandler.h"
- #include "views/dolphinremoteencoding.h"
- #include "views/draganddrophelper.h"
-@@ -244,20 +243,8 @@
- return;
- }
-
-- // dirs could contain URLs that actually point to archives or other files.
-- // Replace them by URLs we can open where possible and filter the rest out.
-- QList<KUrl> urlsToOpen;
-- foreach (const KUrl& rawUrl, dirs) {
-- const KFileItem& item = KFileItem(KFileItem::Unknown, KFileItem::Unknown, rawUrl);
-- item.determineMimeType();
-- const KUrl& url = DolphinView::openItemAsFolderUrl(item);
-- if (!url.isEmpty()) {
-- urlsToOpen.append(url);
-- }
-- }
--
-- if (urlsToOpen.count() == 1) {
-- m_activeViewContainer->setUrl(urlsToOpen.first());
-+ if (dirs.count() == 1) {
-+ m_activeViewContainer->setUrl(dirs.first());
- return;
- }
-
-@@ -267,12 +254,12 @@
-
- // Open each directory inside a new tab. If the "split view" option has been enabled,
- // always show two directories within one tab.
-- QList<KUrl>::const_iterator it = urlsToOpen.begin();
-- while (it != urlsToOpen.end()) {
-+ QList<KUrl>::const_iterator it = dirs.begin();
-+ while (it != dirs.end()) {
- openNewTab(*it);
- ++it;
-
-- if (hasSplitView && (it != urlsToOpen.end())) {
-+ if (hasSplitView && (it != dirs.end())) {
- const int tabIndex = m_viewTab.count() - 1;
- m_viewTab[tabIndex].secondaryView->setUrl(*it);
- ++it;
-
-
diff --git a/kde/patch/kde-cli-tools.patch b/kde/patch/kde-cli-tools.patch
deleted file mode 100644
index a76227d..0000000
--- a/kde/patch/kde-cli-tools.patch
+++ /dev/null
@@ -1,6 +0,0 @@
-# Remove CONFIG argument from find_package(KF5);
-# This is no longer wanted, since ECM has a FindKF5 module.
-#cat $CWD/patch/kde-cli-tools/kde-cli-tools_ecm.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Adjust for the change in KAboutData:
-#cat $CWD/patch/kde-cli-tools/kde-cli-tools_kaboutdata.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/kde-cli-tools/kde-cli-tools_ecm.patch b/kde/patch/kde-cli-tools/kde-cli-tools_ecm.patch
deleted file mode 100644
index 1ff1f84..0000000
--- a/kde/patch/kde-cli-tools/kde-cli-tools_ecm.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- kde-cli-tools-20140602git/CMakeLists.txt.orig 2014-06-02 13:45:49.000000000 +0200
-+++ kde-cli-tools-20140602git/CMakeLists.txt 2014-06-02 23:45:22.337682384 +0200
-@@ -21,7 +21,7 @@
- Test
- )
-
--find_package(KF5 CONFIG REQUIRED COMPONENTS
-+find_package(KF5 REQUIRED COMPONENTS
- Config
- Init
- KCMUtils
diff --git a/kde/patch/kde-cli-tools/kde-cli-tools_kaboutdata.diff b/kde/patch/kde-cli-tools/kde-cli-tools_kaboutdata.diff
deleted file mode 100644
index e88a512..0000000
--- a/kde/patch/kde-cli-tools/kde-cli-tools_kaboutdata.diff
+++ /dev/null
@@ -1,59 +0,0 @@
-diff -uar kde-cli-tools-20140602git.orig/kdesu/kdesu.cpp kde-cli-tools-20140602git/kdesu/kdesu.cpp
---- kde-cli-tools-20140602git.orig/kdesu/kdesu.cpp 2014-06-02 13:45:49.000000000 +0200
-+++ kde-cli-tools-20140602git/kdesu/kdesu.cpp 2014-06-03 00:41:16.998697492 +0200
-@@ -81,9 +81,9 @@
- if (duser.isEmpty())
- duser = "root";
-
-- KAboutData aboutData("kdesu", 0, i18n("KDE su"),
-+ KAboutData aboutData("kdesu", i18n("KDE su"),
- Version, i18n("Runs a program with elevated privileges."),
-- KAboutData::License_Artistic,
-+ KAboutLicense::Artistic,
- i18n("Copyright (c) 1998-2000 Geert Jansen, Pietro Iglio"));
- aboutData.addAuthor(i18n("Geert Jansen"), i18n("Maintainer"),
- "jansen@kde.org", "http://www.stack.nl/~geertj/");
-diff -uar kde-cli-tools-20140602git.orig/kioclient/kioclient.cpp kde-cli-tools-20140602git/kioclient/kioclient.cpp
---- kde-cli-tools-20140602git.orig/kioclient/kioclient.cpp 2014-06-02 13:45:49.000000000 +0200
-+++ kde-cli-tools-20140602git/kioclient/kioclient.cpp 2014-06-03 00:41:50.446696159 +0200
-@@ -133,7 +133,7 @@
- QString programName = i18n("KIO Client");
- QString description = i18n("Command-line tool for network-transparent operations");
- QString version = "2.0";
-- KAboutData data(appName, appName, programName, version, description, KAboutData::License_LGPL_V2);
-+ KAboutData data(appName, programName, version, description, KAboutLicense::LGPL_V2);
-
- QCommandLineParser parser;
- parser.addOption(QCommandLineOption("noninteractive", i18n("Non-interactive use: no message boxes. If you don't want a"
-diff -uar kde-cli-tools-20140602git.orig/kreadconfig/kreadconfig.cpp kde-cli-tools-20140602git/kreadconfig/kreadconfig.cpp
---- kde-cli-tools-20140602git.orig/kreadconfig/kreadconfig.cpp 2014-06-02 13:45:49.000000000 +0200
-+++ kde-cli-tools-20140602git/kreadconfig/kreadconfig.cpp 2014-06-03 00:40:33.820702023 +0200
-@@ -53,10 +53,10 @@
- int main(int argc, char **argv)
- {
- QCoreApplication app(argc, argv);
-- KAboutData aboutData("kreadconfig", 0, i18n("KReadConfig"),
-+ KAboutData aboutData("kreadconfig", i18n("KReadConfig"),
- "1.0.1",
- i18n("Read KConfig entries - for use in shell scripts"),
-- KAboutData::License_GPL,
-+ KAboutLicense::GPL,
- i18n("(c) 2001 Red Hat, Inc."));
- aboutData.addAuthor(i18n("Bernhard Rosenkraenzer"), QString(), "bero@redhat.com");
-
-diff -uar kde-cli-tools-20140602git.orig/kreadconfig/kwriteconfig.cpp kde-cli-tools-20140602git/kreadconfig/kwriteconfig.cpp
---- kde-cli-tools-20140602git.orig/kreadconfig/kwriteconfig.cpp 2014-06-02 13:45:49.000000000 +0200
-+++ kde-cli-tools-20140602git/kreadconfig/kwriteconfig.cpp 2014-06-03 00:39:54.811701204 +0200
-@@ -31,10 +31,10 @@
- int main(int argc, char **argv)
- {
- QCoreApplication app(argc, argv);
-- KAboutData aboutData("kwriteconfig", 0, i18n("KWriteConfig"),
-+ KAboutData aboutData("kwriteconfig", i18n("KWriteConfig"),
- "1.0.0",
- i18n("Write KConfig entries - for use in shell scripts"),
-- KAboutData::License_GPL,
-+ KAboutLicense::GPL,
- i18n("(c) 2001 Red Hat, Inc. & Luís Pedro Coelho"));
- aboutData.addAuthor("Luís Pedro Coelho", QString(), "luis_pedro@netcabo.pt");
- aboutData.addAuthor("Bernhard Rosenkraenzer", i18n("Wrote kreadconfig on which this is based"), "bero@redhat.com");
diff --git a/kde/patch/kde-dev-utils.patch b/kde/patch/kde-dev-utils.patch
deleted file mode 100644
index c5cbc92..0000000
--- a/kde/patch/kde-dev-utils.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix build against KF 5.48.0 (only relevant for 18.04.3):
-#cat $CWD/patch/kde-dev-utils/build_with_kf548.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kde-dev-utils/build_with_kf548.patch b/kde/patch/kde-dev-utils/build_with_kf548.patch
deleted file mode 100644
index e75838d..0000000
--- a/kde/patch/kde-dev-utils/build_with_kf548.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 369699a..00e1413 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,15 +1,18 @@
- cmake_minimum_required(VERSION 2.8.12)
-
- find_package(ECM 5.14 REQUIRED NO_MODULE)
- set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
-
- include(FeatureSummary)
- include(ECMInstallIcons)
- include(KDEInstallDirs)
- include(KDECMakeSettings)
- include(KDECompilerSettings NO_POLICY_SCOPE)
- include(ECMQtDeclareLoggingCategory)
-
-+# Required for ki18n_install(po) added on tarball generation
-+find_package(KF5 REQUIRED COMPONENTS I18n)
-+
- add_subdirectory(kpartloader)
- add_subdirectory(kuiviewer)
- ki18n_install(po)
-diff --git a/kpartloader/CMakeLists.txt b/kpartloader/CMakeLists.txt
-index 4e54d94..1fe4136 100644
---- a/kpartloader/CMakeLists.txt
-+++ b/kpartloader/CMakeLists.txt
-@@ -1,27 +1,26 @@
- project(kpartloader)
- ########### kpartloader ###############
-
- set(QT_MIN_VERSION "5.5.0")
-
- find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE
- COMPONENTS
- Core
- )
-
- find_package(KF5 REQUIRED
- COMPONENTS
- CoreAddons
-- I18n
- Parts
- WidgetsAddons
- )
-
- set(kpartloader_SRCS
- kpartloader.cpp
- )
-
- add_executable(kpartloader ${kpartloader_SRCS})
- target_link_libraries(kpartloader KF5::Parts)
- install(TARGETS kpartloader ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
- install(FILES kpartloaderui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kpartloader)
-
-diff --git a/kuiviewer/CMakeLists.txt b/kuiviewer/CMakeLists.txt
-index fa72c59..3fe987e 100644
---- a/kuiviewer/CMakeLists.txt
-+++ b/kuiviewer/CMakeLists.txt
-@@ -1,96 +1,95 @@
- project(kuiviewer)
-
- set(QT_MIN_VERSION "5.5.0")
-
- include(ECMAddAppIcon)
-
- find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE
- COMPONENTS
- Core
- Designer
- UiTools
- )
-
- find_package(KF5 REQUIRED
- COMPONENTS
- CoreAddons
- KIO
-- I18n
- Parts
- )
-
- add_definitions(
- -DQT_DEPRECATED_WARNINGS
- -DQT_DISABLE_DEPRECATED_BEFORE=0x050500
- -DQT_NO_SIGNALS_SLOTS_KEYWORDS
- -DQT_STRICT_ITERATORS
- -DQT_USE_QSTRINGBUILDER
- -DQT_NO_CAST_TO_ASCII
- -DQT_NO_CAST_FROM_ASCII
- -DQT_NO_CAST_FROM_BYTEARRAY
- -DQT_NO_URL_CAST_FROM_STRING
- )
-
- ########### next target ###############
-
- set(kuiviewer_SRCS main.cpp kuiviewer.cpp )
-
- file(GLOB ICONS_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/*-apps-kuiviewer.png")
- ecm_add_app_icon(kuiviewer_SRCS ICONS ${ICONS_SRCS})
-
- add_executable(kuiviewer ${kuiviewer_SRCS})
-
- target_link_libraries(kuiviewer KF5::Parts )
-
- install(TARGETS kuiviewer ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} )
-
-
- ########### next target ###############
-
- set(kuiviewerpart_PART_SRCS kuiviewer_part.cpp )
-
- ecm_qt_declare_logging_category(kuiviewerpart_PART_SRCS
- HEADER kuiviewer_part_debug.h
- IDENTIFIER KUIVIEWERPART
- CATEGORY_NAME "kuiviewerpart"
- )
-
- add_library(kuiviewerpart MODULE ${kuiviewerpart_PART_SRCS})
-
- target_link_libraries(kuiviewerpart KF5::Parts Qt5::Designer Qt5::UiTools)
-
- install(TARGETS kuiviewerpart DESTINATION ${KDE_INSTALL_PLUGINDIR} )
-
-
- ########### next target ###############
-
- set(quithumbnail_PART_SRCS quicreator.cpp )
-
- add_library(quithumbnail MODULE ${quithumbnail_PART_SRCS})
-
- target_link_libraries(quithumbnail
- KF5::KIOWidgets
- Qt5::Designer
- Qt5::UiTools
- )
-
- install(TARGETS quithumbnail DESTINATION ${KDE_INSTALL_PLUGINDIR} )
-
-
- ########### install files ###############
-
- install( PROGRAMS org.kde.kuiviewer.desktop DESTINATION ${KDE_INSTALL_APPDIR} )
- install( FILES designerthumbnail.desktop kuiviewer_part.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR} )
- install( FILES kuiviewer_part.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kuiviewerpart )
- install( FILES kuiviewerui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kuiviewer )
-
- ecm_install_icons(ICONS
- 16-apps-kuiviewer.png
- 32-apps-kuiviewer.png
- 48-apps-kuiviewer.png
- 64-apps-kuiviewer.png
- 128-apps-kuiviewer.png
- sc-apps-kuiviewer.svg
- DESTINATION ${KDE_INSTALL_ICONDIR}
- THEME hicolor
- )
diff --git a/kde/patch/kde-gtk-config.patch b/kde/patch/kde-gtk-config.patch
deleted file mode 100644
index a62e649..0000000
--- a/kde/patch/kde-gtk-config.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Make the kde-gtk-config load the current config first:
-# Fixed in 5.11.2
-#cat $CWD/patch/kde-gtk-config/kde-gtk-config_loadcurrentsettings.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kde-gtk-config/kde-gtk-config_loadcurrentsettings.patch b/kde/patch/kde-gtk-config/kde-gtk-config_loadcurrentsettings.patch
deleted file mode 100644
index b5b074d..0000000
--- a/kde/patch/kde-gtk-config/kde-gtk-config_loadcurrentsettings.patch
+++ /dev/null
@@ -1,622 +0,0 @@
-From 0d0f812a1704c62c014bc87162b1280224b64f93 Mon Sep 17 00:00:00 2001
-From: Fabian Vogt <fabian@ritter-vogt.de>
-Date: Tue, 24 Oct 2017 13:25:32 +0200
-Subject: Revert "Make the kde-gtk-config kcm better at checking global gtk
- settings"
-
-Summary:
-This reverts commit 34357f74ee2d98128ff423b0ec6ddcbf4232c475.
-
-Reverting this fixes loading of the actually used GTK settings.
-
-BUG: 382291
-
-Test Plan:
-Opened kcmshell5 kde-gtk-config with and without this revert.
-Without, it shows Adwaita as theme, with it shows breeze.
-GTK uses breeze, so the behaviour with the revert is correct.
-
-Reviewers: #plasma, apol
-
-Subscribers: plasma-devel
-
-Tags: #plasma
-
-Differential Revision: https://phabricator.kde.org/D8443
----
- CMakeLists.txt | 2 +-
- src/abstractappearance.h | 5 +-
- src/appearancegtk2.cpp | 103 +++++++++++++---------------------
- src/appearancegtk2.h | 11 +---
- src/appearancegtk3.cpp | 143 +++++++++++++++++++++--------------------------
- src/appearancegtk3.h | 10 +---
- src/appearencegtk.cpp | 4 +-
- tests/CMakeLists.txt | 2 +-
- tests/configsavetest.cpp | 75 ++++++++++---------------
- tests/configsavetest.h | 8 +--
- 10 files changed, 144 insertions(+), 219 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 181cfc9..bf1ba29 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -51,7 +51,7 @@ ki18n_wrap_ui(kcm_SRCS
- )
- add_library(kcm_kdegtkconfig MODULE ${kcm_SRCS})
- target_compile_definitions(kcm_kdegtkconfig PRIVATE -DPROJECT_VERSION="${PROJECT_VERSION}")
--target_link_libraries(kcm_kdegtkconfig ${X11_Xcursor_LIB} KF5::ConfigCore KF5::I18n KF5::KIOWidgets KF5::NewStuff KF5::Archive KF5::NewStuff KF5::ConfigWidgets KF5::IconThemes)
-+target_link_libraries(kcm_kdegtkconfig ${X11_Xcursor_LIB} KF5::I18n KF5::KIOWidgets KF5::NewStuff KF5::Archive KF5::NewStuff KF5::ConfigWidgets KF5::IconThemes)
-
- kcoreaddons_desktop_to_json(kcm_kdegtkconfig kde-gtk-config.desktop)
-
-diff --git a/src/abstractappearance.h b/src/abstractappearance.h
-index 208342e..2961a09 100644
---- a/src/abstractappearance.h
-+++ b/src/abstractappearance.h
-@@ -30,11 +30,10 @@ class AbstractAppearance
- {
- public:
- virtual ~AbstractAppearance() {}
-- virtual bool loadSettings() = 0;
-- virtual bool saveSettings() const = 0;
-+ virtual QString defaultConfigFile() const = 0;
- virtual bool loadSettings(const QString& path) = 0;
- virtual bool saveSettings(const QString& path) const = 0;
--
-+
- /** @returns the installed themes' paths*/
- virtual QStringList installedThemes() const = 0;
-
-diff --git a/src/appearancegtk2.cpp b/src/appearancegtk2.cpp
-index 92cbee3..44a2239 100644
---- a/src/appearancegtk2.cpp
-+++ b/src/appearancegtk2.cpp
-@@ -30,38 +30,48 @@
- #include <QStandardPaths>
- #include <config.h>
-
--bool AppearanceGTK2::loadSettingsPrivate(const QString& path)
-+bool AppearanceGTK2::loadSettings(const QString& path)
- {
- QFile configFile(path);
-
-- if (!configFile.open(QIODevice::ReadOnly | QIODevice::Text))
-- return false;
-+ bool canRead = configFile.open(QIODevice::ReadOnly | QIODevice::Text);
-
-- const QMap<QString, QString> foundSettings = readSettingsTuples(&configFile);
--
-- for(auto it = foundSettings.constBegin(), itEnd = foundSettings.constEnd(); it!=itEnd; ++it) {
-- if (it.key() == "gtk-theme-name")
-- m_settings["theme"] = *it;
-- else if (it.key() == "gtk-icon-theme-name")
-- m_settings["icon"] = *it;
-- else if (it.key() == "gtk-fallback-icon-theme")
-- m_settings["icon_fallback"] = *it;
-- else if (it.key() == "gtk-cursor-theme-name")
-- m_settings["cursor"] = *it;
-- else if (it.key() == "gtk-font-name")
-- m_settings["font"] = *it;
-- else if (it.key() == "gtk-toolbar-style")
-- m_settings["toolbar_style"] = *it;
-- else if (it.key() == "gtk-button-images")
-- m_settings["show_icons_buttons"] = *it;
-- else if(it.key() == "gtk-menu-images")
-- m_settings["show_icons_menus"] = *it;
-- else if (it.key() == "gtk-primary-button-warps-slider")
-- m_settings["primary_button_warps_slider"] = *it;
-- else
-- qWarning() << "unknown field" << it.key();
-+ if(canRead) {
-+// qDebug() << "The gtk2 config file exists...";
-+ const QMap<QString, QString> foundSettings = readSettingsTuples(&configFile);
-+ m_settings = QMap<QString, QString> {
-+ {"toolbar_style", "GTK_TOOLBAR_ICONS"},
-+ {"show_icons_buttons", "0"},
-+ {"show_icons_menus", "0"},
-+ {"primary_button_warps_slider", "false"}
-+ };
-+
-+ for(auto it = foundSettings.constBegin(), itEnd = foundSettings.constEnd(); it!=itEnd; ++it) {
-+ if (it.key() == "gtk-theme-name")
-+ m_settings["theme"] = *it;
-+ else if (it.key() == "gtk-icon-theme-name")
-+ m_settings["icon"] = *it;
-+ else if (it.key() == "gtk-fallback-icon-theme")
-+ m_settings["icon_fallback"] = *it;
-+ else if (it.key() == "gtk-cursor-theme-name")
-+ m_settings["cursor"] = *it;
-+ else if (it.key() == "gtk-font-name")
-+ m_settings["font"] = *it;
-+ else if (it.key() == "gtk-toolbar-style")
-+ m_settings["toolbar_style"] = *it;
-+ else if (it.key() == "gtk-button-images")
-+ m_settings["show_icons_buttons"] = *it;
-+ else if(it.key() == "gtk-menu-images")
-+ m_settings["show_icons_menus"] = *it;
-+ else if (it.key() == "gtk-primary-button-warps-slider")
-+ m_settings["primary_button_warps_slider"] = *it;
-+ else
-+ qWarning() << "unknown field" << it.key();
-+ }
-+
- }
-- return true;
-+
-+ return canRead;
- }
-
- QString AppearanceGTK2::themesGtkrcFile(const QString& themeName) const
-@@ -82,7 +92,7 @@ QString AppearanceGTK2::themesGtkrcFile(const QString& themeName) const
- return QString();
- }
-
--bool AppearanceGTK2::saveSettingsPrivate(const QString& gtkrcFile) const
-+bool AppearanceGTK2::saveSettings(const QString& gtkrcFile) const
- {
- QFile gtkrc(gtkrcFile);
- gtkrc.remove();
-@@ -107,14 +117,14 @@ bool AppearanceGTK2::saveSettingsPrivate(const QString& gtkrcFile) const
- flow << "include \"/etc/gtk-2.0/gtkrc\"\n"; //We include the /etc's config file
-
- int nameEnd = m_settings["font"].lastIndexOf(QRegExp(" ([0-9]+|bold|italic)"));
-- const auto fontFamily = m_settings["font"].leftRef(nameEnd);
-+ QString fontFamily = m_settings["font"].left(nameEnd);
-
- //TODO: is this really needed?
- flow << "style \"user-font\" \n"
- << "{\n"
- << "\tfont_name=\""<< fontFamily << "\"\n"
- << "}\n";
--
-+
- flow << "widget_class \"*\" style \"user-font\"\n";
- flow << "gtk-font-name=\"" << m_settings["font"] << "\"\n";
- flow << "gtk-theme-name=\"" << m_settings["theme"] << "\"\n";
-@@ -144,16 +154,6 @@ bool AppearanceGTK2::saveSettingsPrivate(const QString& gtkrcFile) const
- return true;
- }
-
--void AppearanceGTK2::reset()
--{
-- m_settings = QMap<QString, QString> {
-- {"toolbar_style", "GTK_TOOLBAR_ICONS"},
-- {"show_icons_buttons", "0"},
-- {"show_icons_menus", "0"},
-- {"primary_button_warps_slider", "false"}
-- };
--}
--
- QString AppearanceGTK2::defaultConfigFile() const
- {
- return QDir::homePath()+"/.gtkrc-2.0";
-@@ -183,26 +183,3 @@ QStringList AppearanceGTK2::installedThemes() const
-
- return paths;
- }
--
--bool AppearanceGTK2::loadSettings()
--{
-- reset();
--
-- return loadSettingsPrivate("/etc/gtk-2.0/gtkrc") && loadSettingsPrivate(defaultConfigFile());
--}
--
--bool AppearanceGTK2::saveSettings() const
--{
-- return saveSettings(defaultConfigFile());
--}
--
--bool AppearanceGTK2::loadSettings(const QString& gtkrcFile)
--{
-- reset();
-- return loadSettingsPrivate(gtkrcFile);
--}
--
--bool AppearanceGTK2::saveSettings(const QString& gtkrcFile) const
--{
-- return saveSettingsPrivate(gtkrcFile);
--}
-diff --git a/src/appearancegtk2.h b/src/appearancegtk2.h
-index 7df49bf..8bc28ee 100644
---- a/src/appearancegtk2.h
-+++ b/src/appearancegtk2.h
-@@ -29,17 +29,10 @@ class AppearanceGTK2 : public AbstractAppearance
- {
- bool loadSettings(const QString& path) override;
- bool saveSettings(const QString& path) const override;
-- bool loadSettings() override;
-- bool saveSettings() const override;
-+ QString defaultConfigFile() const override;
- QStringList installedThemes() const override;
--
-+
- QString themesGtkrcFile(const QString& themeName) const;
--
--private:
-- void reset();
-- QString defaultConfigFile() const;
-- bool loadSettingsPrivate(const QString& path);
-- bool saveSettingsPrivate(const QString& path) const;
- };
-
- #endif // APPEARANCEGTK2_H
-diff --git a/src/appearancegtk3.cpp b/src/appearancegtk3.cpp
-index 7df48c3..fa1bde5 100644
---- a/src/appearancegtk3.cpp
-+++ b/src/appearancegtk3.cpp
-@@ -25,8 +25,6 @@
- #include <QDir>
- #include <QDebug>
- #include <QStandardPaths>
--#include <KSharedConfig>
--#include <KConfigGroup>
-
- QStringList AppearanceGTK3::installedThemes() const
- {
-@@ -53,65 +51,76 @@ QStringList AppearanceGTK3::installedThemes() const
- return themes;
- }
-
--bool AppearanceGTK3::saveSettings(const KSharedConfig::Ptr& file) const
--{
-- KConfigGroup group(file, "Settings");
--
-- group.writeEntry("gtk-font-name", m_settings["font"]);
-- group.writeEntry("gtk-theme-name", m_settings["theme"]);
-- group.writeEntry("gtk-icon-theme-name", m_settings["icon"]);
-- group.writeEntry("gtk-fallback-icon-theme", m_settings["icon_fallback"]);
-- group.writeEntry("gtk-cursor-theme-name", m_settings["cursor"]);
-- group.writeEntry("gtk-toolbar-style", m_settings["toolbar_style"]);
-- group.writeEntry("gtk-menu-images", m_settings["show_icons_menus"]);
-- group.writeEntry("gtk-button-images", m_settings["show_icons_buttons"]);
-- group.writeEntry("gtk-primary-button-warps-slider", m_settings["primary_button_warps_slider"]);
-- group.writeEntry("gtk-application-prefer-dark-theme", m_settings["application_prefer_dark_theme"]);
--
-- const bool sync = group.sync();
-- Q_ASSERT(sync);
-- return true;
--}
--
--bool AppearanceGTK3::loadSettings(const KSharedConfig::Ptr& file)
-+bool AppearanceGTK3::saveSettings(const QString& file) const
- {
-- KConfigGroup group(file, "Settings");
--
-- if (!file || !group.isValid()) {
-- qWarning() << "Cannot open the GTK3 config file" << file;
-+ //Opening GTK3 config file $ENV{XDG_CONFIG_HOME}/gtk-3.0/m_settings.ini
-+ QDir::home().mkpath(file.left(file.lastIndexOf('/'))); //we make sure the path exists
-+ QFile file_gtk3(file);
-+
-+ if(!file_gtk3.open(QIODevice::WriteOnly | QIODevice::Text)) {
-+ qWarning() << "Couldn't open GTK3 config file for writing at:" << file_gtk3.fileName();
- return false;
- }
-+ QTextStream flow3(&file_gtk3);
-+ flow3 << "[Settings]\n";
-+ flow3 << "gtk-font-name=" << m_settings["font"] << "\n";
-+ flow3 << "gtk-theme-name=" << m_settings["theme"] << "\n";
-+ flow3 << "gtk-icon-theme-name="<< m_settings["icon"] << "\n";
-+ flow3 << "gtk-fallback-icon-theme=" << m_settings["icon_fallback"] << "\n";
-+ flow3 << "gtk-cursor-theme-name=" << m_settings["cursor"] << "\n";
-+ flow3 << "gtk-toolbar-style=" << m_settings["toolbar_style"] << "\n";
-+ flow3 << "gtk-menu-images=" << m_settings["show_icons_menus"] << "\n";
-+ flow3 << "gtk-button-images=" << m_settings["show_icons_buttons"] << "\n";
-+ flow3 << "gtk-primary-button-warps-slider=" << m_settings["primary_button_warps_slider"] << "\n";
-+ flow3 << "gtk-application-prefer-dark-theme=" << m_settings["application_prefer_dark_theme"] << "\n";
-
-- m_settings = QMap<QString, QString> {
-- {"toolbar_style", "GTK_TOOLBAR_ICONS"},
-- {"show_icons_buttons", "0"},
-- {"show_icons_menus", "0"},
-- {"primary_button_warps_slider", "false"},
-- {"application_prefer_dark_theme", "false"}
-- };
--
-- m_settings["theme"] = group.readEntry("gtk-theme-name");
-- m_settings["icon"] = group.readEntry("gtk-icon-theme-name");
-- m_settings["icon_fallback"] = group.readEntry("gtk-fallback-icon-theme");
-- m_settings["cursor"] = group.readEntry("gtk-cursor-theme-name");
-- m_settings["font"] = group.readEntry("gtk-font-name");
-- m_settings["toolbar_style"] = group.readEntry("gtk-toolbar-style");
-- m_settings["show_icons_buttons"] = group.readEntry("gtk-button-images");
-- m_settings["show_icons_menus"] = group.readEntry("gtk-menu-images");
-- m_settings["primary_button_warps_slider"] = group.readEntry("gtk-primary-button-warps-slider");
-- m_settings["application_prefer_dark_theme"] = group.readEntry("gtk-application-prefer-dark-theme");
-- for(auto it = m_settings.begin(); it != m_settings.end(); ) {
-- if (it.value().isEmpty())
-- it = m_settings.erase(it);
-- else
-- ++it;
-- }
- return true;
- }
-
--QString AppearanceGTK3::configFileName() const
-+bool AppearanceGTK3::loadSettings(const QString& path)
- {
-- return QStringLiteral("gtk-3.0/settings.ini");
-+ QFile fileGtk3(path);
-+ bool canRead=fileGtk3.open(QIODevice::ReadOnly | QIODevice::Text);
-+
-+ if(canRead) {
-+ const QMap<QString, QString> foundSettings = readSettingsTuples(&fileGtk3);
-+
-+ m_settings = QMap<QString, QString> {
-+ {"toolbar_style", "GTK_TOOLBAR_ICONS"},
-+ {"show_icons_buttons", "0"},
-+ {"show_icons_menus", "0"},
-+ {"primary_button_warps_slider", "false"},
-+ {"application_prefer_dark_theme", "false"}
-+ };
-+
-+ for(auto it = foundSettings.constBegin(), itEnd = foundSettings.constEnd(); it!=itEnd; ++it) {
-+ if (it.key() == "gtk-theme-name")
-+ m_settings["theme"] = *it;
-+ else if (it.key() == "gtk-icon-theme-name")
-+ m_settings["icon"] = *it;
-+ else if (it.key() == "gtk-fallback-icon-theme")
-+ m_settings["icon_fallback"] = *it;
-+ else if (it.key() == "gtk-cursor-theme-name")
-+ m_settings["cursor"] = *it;
-+ else if (it.key() == "gtk-font-name")
-+ m_settings["font"] = *it;
-+ else if (it.key() == "gtk-toolbar-style")
-+ m_settings["toolbar_style"] = *it;
-+ else if (it.key() == "gtk-button-images")
-+ m_settings["show_icons_buttons"] = *it;
-+ else if (it.key() == "gtk-menu-images")
-+ m_settings["show_icons_menus"] = *it;
-+ else if (it.key() == "gtk-primary-button-warps-slider")
-+ m_settings["primary_button_warps_slider"] = *it;
-+ else if (it.key() == "gtk-application-prefer-dark-theme")
-+ m_settings["application_prefer_dark_theme"] = *it;
-+ else
-+ qWarning() << "unknown field" << it.key();
-+ }
-+ } else
-+ qWarning() << "Cannot open the GTK3 config file" << path;
-+
-+ return canRead;
- }
-
- QString AppearanceGTK3::defaultConfigFile() const
-@@ -120,7 +129,7 @@ QString AppearanceGTK3::defaultConfigFile() const
- if(root.isEmpty())
- root = QFileInfo(QDir::home(), ".config").absoluteFilePath();
-
-- return root + '/' + configFileName();
-+ return root+"/gtk-3.0/settings.ini";
- }
-
- bool AppearanceGTK3::getApplicationPreferDarkTheme() const
-@@ -132,29 +141,3 @@ void AppearanceGTK3::setApplicationPreferDarkTheme(const bool& enable)
- {
- m_settings["application_prefer_dark_theme"] = enable ? "true" : "false";
- }
--
--bool AppearanceGTK3::saveSettings(const QString& file) const
--{
-- auto cfg = KSharedConfig::openConfig(file);
-- return saveSettings(cfg);
--}
--
--bool AppearanceGTK3::loadSettings(const QString& path)
--{
-- auto cfg = KSharedConfig::openConfig(path);
-- return loadSettings(cfg);
--}
--
--bool AppearanceGTK3::loadSettings()
--{
-- auto cfg = KSharedConfig::openConfig(configFileName());
-- cfg->setReadDefaults(true);
-- return loadSettings(cfg);
--}
--
--bool AppearanceGTK3::saveSettings() const
--{
-- auto cfg = KSharedConfig::openConfig(configFileName());
-- cfg->setReadDefaults(true);
-- return saveSettings(cfg);
--}
-diff --git a/src/appearancegtk3.h b/src/appearancegtk3.h
-index 3ce5a05..d4562b1 100644
---- a/src/appearancegtk3.h
-+++ b/src/appearancegtk3.h
-@@ -23,7 +23,6 @@
- #ifndef APPEARANCEGTK3_H
- #define APPEARANCEGTK3_H
-
--#include <KSharedConfig>
- #include "abstractappearance.h"
-
- class AppearanceGTK3 : public AbstractAppearance
-@@ -31,18 +30,11 @@ class AppearanceGTK3 : public AbstractAppearance
-
- public:
- QStringList installedThemes() const override;
-- bool saveSettings() const override;
-- bool loadSettings() override;
- bool saveSettings(const QString& file) const override;
- bool loadSettings(const QString& path) override;
-+ QString defaultConfigFile() const override;
- bool getApplicationPreferDarkTheme() const;
- void setApplicationPreferDarkTheme(const bool& enable);
--
--private:
-- QString defaultConfigFile() const;
-- QString configFileName() const;
-- bool saveSettings(const KSharedConfig::Ptr& file) const;
-- bool loadSettings(const KSharedConfig::Ptr& file);
- };
-
- #endif // APPEARANCEGTK3_H
-diff --git a/src/appearencegtk.cpp b/src/appearencegtk.cpp
-index 95a6604..2e26a5a 100644
---- a/src/appearencegtk.cpp
-+++ b/src/appearencegtk.cpp
-@@ -64,7 +64,7 @@ bool AppearenceGTK::loadFileConfig()
- {
- bool correct = false;
- foreach(AbstractAppearance* app, m_app) {
-- bool c = app->loadSettings();
-+ bool c = app->loadSettings(app->defaultConfigFile());
- correct = correct || c;
- }
- // qDebug() << "loading..." << correct;
-@@ -75,7 +75,7 @@ bool AppearenceGTK::saveFileConfig()
- {
- bool correct = true;
- foreach(AbstractAppearance* app, m_app) {
-- bool c = app->saveSettings();
-+ bool c = app->saveSettings(app->defaultConfigFile());
- correct = correct && c;
- }
- // qDebug() << "saving..." << correct;
-diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
-index 151725d..05bf8f1 100644
---- a/tests/CMakeLists.txt
-+++ b/tests/CMakeLists.txt
-@@ -2,7 +2,7 @@ macro(add_kgc_test name)
- add_executable(${name} ${name}.cpp ${ARGV})
- add_test(${name} ${name})
- ecm_mark_as_test(${name})
-- target_link_libraries(${name} Qt5::Core Qt5::Gui Qt5::Test KF5::ConfigCore)
-+ target_link_libraries(${name} Qt5::Core Qt5::Gui Qt5::Test)
- target_include_directories(${name} PRIVATE ${CMAKE_BINARY_DIR})
- endmacro(add_kgc_test)
-
-diff --git a/tests/configsavetest.cpp b/tests/configsavetest.cpp
-index 1fe8f4f..d5d8460 100644
---- a/tests/configsavetest.cpp
-+++ b/tests/configsavetest.cpp
-@@ -9,40 +9,33 @@
-
- QTEST_GUILESS_MAIN(ConfigSaveTest);
-
--ConfigSaveTest::ConfigSaveTest()
--{
-- QStandardPaths::setTestModeEnabled(true);
--}
--
--static void fillValues(QScopedPointer<AbstractAppearance>& a)
-+void ConfigSaveTest::fillValues(AbstractAppearance* a)
- {
- a->setFont("a");
- a->setIcon("a");
- a->setTheme("a");
- a->setToolbarStyle("a");
- a->setIconFallback("a");
-- a->setCursor("a");
- a->setShowIconsInButtons(true);
- a->setShowIconsInMenus(true);
- a->setPrimaryButtonWarpsSlider(true);
-
-- auto a3 = dynamic_cast<AppearanceGTK3*>(a.data());
-+ auto a3 = dynamic_cast<AppearanceGTK3*>(a);
- if (a3) {
- a3->setApplicationPreferDarkTheme(false);
- }
- }
-
--void compareAppearances(QScopedPointer<AbstractAppearance>& reloaded, QScopedPointer<AbstractAppearance>& instance)
-+bool compareAppearances(AbstractAppearance* a, AbstractAppearance* b)
- {
-- QCOMPARE(reloaded->getFont(), instance->getFont());
-- QCOMPARE(reloaded->getIcon(), instance->getIcon());
-- QCOMPARE(reloaded->getTheme(), instance->getTheme());
-- QCOMPARE(reloaded->getCursor(), instance->getCursor());
-- QCOMPARE(reloaded->getToolbarStyle(), instance->getToolbarStyle());
-- QCOMPARE(reloaded->getIconFallback(), instance->getIconFallback());
-- QCOMPARE(reloaded->getShowIconsInButtons(), instance->getShowIconsInButtons());
-- QCOMPARE(reloaded->getShowIconsInMenus(), instance->getShowIconsInMenus());
-- QCOMPARE(reloaded->getPrimaryButtonWarpsSlider(), instance->getPrimaryButtonWarpsSlider());
-+ return a->getFont() == b->getFont()
-+ && a->getIcon() == b->getIcon()
-+ && a->getTheme() == b->getTheme()
-+ && a->getToolbarStyle() == b->getToolbarStyle()
-+ && a->getIconFallback() == b->getIconFallback()
-+ && a->getShowIconsInButtons() == b->getShowIconsInButtons()
-+ && a->getShowIconsInMenus() == b->getShowIconsInMenus()
-+ && a->getPrimaryButtonWarpsSlider() == b->getPrimaryButtonWarpsSlider();
- }
-
- QByteArray readFile(const QString& path)
-@@ -53,35 +46,23 @@ QByteArray readFile(const QString& path)
- return f.readAll();
- }
-
--void ConfigSaveTest::testGtk2()
-+void ConfigSaveTest::testOpen()
- {
-- const QString pathA = QDir::current().absoluteFilePath("test-gtk2")
-- , pathB = QDir::current().absoluteFilePath("testB-gtk2");
--
-- QScopedPointer<AbstractAppearance> instance(new AppearanceGTK2);
-- fillValues(instance);
-- QVERIFY(instance->saveSettings(pathA));
--
-- QScopedPointer<AbstractAppearance> reloaded(new AppearanceGTK2);
-- QVERIFY(reloaded->loadSettings(pathA));
-- compareAppearances(reloaded, instance);
-- QVERIFY(reloaded->saveSettings(pathB));
-- QCOMPARE(readFile(pathA), readFile(pathB));
--}
--
--void ConfigSaveTest::testGtk3()
--{
-- QScopedPointer<AbstractAppearance> instance(new AppearanceGTK3);
-- fillValues(instance);
-- const QString pathA = QDir::current().absoluteFilePath("test-gtk3")
-- , pathB = QDir::current().absoluteFilePath("testB-gtk3");
-- QVERIFY(instance->saveSettings(pathA));
--
-- QScopedPointer<AbstractAppearance> reloaded(new AppearanceGTK3);
-- QVERIFY(QFile::exists(pathA));
-- QVERIFY(reloaded->loadSettings(pathA));
-- compareAppearances(reloaded, instance);
-- QVERIFY(reloaded->saveSettings(pathB));
-+ QVector<AbstractAppearance*> instances;
-+ instances << new AppearanceGTK2 << new AppearanceGTK3;
-+ fillValues(instances[0]);
-+ fillValues(instances[1]);
-+ QVERIFY(instances[0]->saveSettings("test-gtk2"));
-+ QVERIFY(instances[1]->saveSettings("test-gtk3"));
-
-- QCOMPARE(readFile(pathA), readFile(pathB));
-+ QVector<AbstractAppearance*> reloaded;
-+ reloaded << new AppearanceGTK2 << new AppearanceGTK3;
-+ QVERIFY(reloaded[0]->loadSettings("test-gtk2"));
-+ QVERIFY(reloaded[1]->loadSettings("test-gtk3"));
-+ QVERIFY(compareAppearances(reloaded[0], instances[0]));
-+ QVERIFY(compareAppearances(reloaded[1], instances[1]));
-+ QVERIFY(reloaded[0]->saveSettings("testB-gtk2"));
-+ QVERIFY(reloaded[1]->saveSettings("testB-gtk3"));
-+ QCOMPARE(readFile("test-gtk2"), readFile("testB-gtk2"));
-+ QCOMPARE(readFile("test-gtk3"), readFile("testB-gtk3"));
- }
-diff --git a/tests/configsavetest.h b/tests/configsavetest.h
-index 342b408..39fb4c2 100644
---- a/tests/configsavetest.h
-+++ b/tests/configsavetest.h
-@@ -11,11 +11,11 @@ class AbstractAppearance;
- class ConfigSaveTest : public QObject
- {
- Q_OBJECT
--public:
-- ConfigSaveTest();
- private slots:
-- void testGtk2();
-- void testGtk3();
-+ void testOpen();
-+
-+private:
-+ void fillValues(AbstractAppearance* a);
- };
-
- #endif // CONFIGSAVETEST_H
---
-cgit v0.11.2
-
diff --git a/kde/patch/kde-runtime.patch b/kde/patch/kde-runtime.patch
index c3b6101..3201d76 100644
--- a/kde/patch/kde-runtime.patch
+++ b/kde/patch/kde-runtime.patch
@@ -1,10 +1,2 @@
-# Fix KDE bug 324470 - solved in KDE 4.11.2.
-# - Minimize/maximize by clicking taskbar entries requires double click.
-#cat $CWD/patch/kde-runtime/kde-runtime.kdebug324470.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
# Fix compilation against NetworkManager 1.0.6:
cat $CWD/patch/kde-runtime/kde-runtime_networkmanager.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-## Fix compilation against gpgme 1.7+:
-#cat $CWD/patch/kde-runtime/kde-runtime_gpgme.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kde-runtime/kde-runtime.kdebug324470.diff b/kde/patch/kde-runtime/kde-runtime.kdebug324470.diff
deleted file mode 100644
index 4269df8..0000000
--- a/kde/patch/kde-runtime/kde-runtime.kdebug324470.diff
+++ /dev/null
@@ -1,49 +0,0 @@
-commit be1a5d484c70f4f6a383150810afbfbb367db2ac
-Author: Eike Hein <hein@kde.org>
-Date: Tue Sep 3 20:29:23 2013 +0200
-
- Discard the recorded events in the item-local handlers.
-
- Solves problems with identical events being ignored due to
- QGraphicsView's reuse of QGraphicsSceneMouseEvent instances.
-
- CCMAIL:rdieter@fedoraproject.org
- BUG:324470
- BUG:324471
-
-diff --git a/plasma/declarativeimports/qtextracomponents/mouseeventlistener.cpp b/plasma/declarativeimports/qtextracomponents/mouseeventlistener.cpp
-index b534845..36530e0 100644
---- a/plasma/declarativeimports/qtextracomponents/mouseeventlistener.cpp
-+++ b/plasma/declarativeimports/qtextracomponents/mouseeventlistener.cpp
-@@ -90,6 +90,7 @@ bool MouseEventListener::containsMouse() const
- void MouseEventListener::mousePressEvent(QGraphicsSceneMouseEvent *me)
- {
- if (m_lastEvent == me) {
-+ m_lastEvent = 0;
- return;
- }
-
-@@ -112,6 +113,7 @@ void MouseEventListener::mousePressEvent(QGraphicsSceneMouseEvent *me)
- void MouseEventListener::mouseMoveEvent(QGraphicsSceneMouseEvent *me)
- {
- if (m_lastEvent == me) {
-+ m_lastEvent = 0;
- return;
- }
-
-@@ -122,6 +124,7 @@ void MouseEventListener::mouseMoveEvent(QGraphicsSceneMouseEvent *me)
- void MouseEventListener::mouseReleaseEvent(QGraphicsSceneMouseEvent *me)
- {
- if (m_lastEvent == me) {
-+ m_lastEvent = 0;
- return;
- }
-
-@@ -138,6 +141,7 @@ void MouseEventListener::mouseReleaseEvent(QGraphicsSceneMouseEvent *me)
- void MouseEventListener::wheelEvent(QGraphicsSceneWheelEvent *we)
- {
- if (m_lastEvent == we) {
-+ m_lastEvent = 0;
- return;
- }
-
diff --git a/kde/patch/kde-runtime/kde-runtime_gpgme.patch b/kde/patch/kde-runtime/kde-runtime_gpgme.patch
deleted file mode 100644
index b1703ed..0000000
--- a/kde/patch/kde-runtime/kde-runtime_gpgme.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-commit 1b80d1d0b961f8e28186928ede2b87af292c3de4
-Author: Antonio Rojas <arojas@archlinux.org>
-Date: Thu Nov 10 16:58:10 2016 +0100
-
- Allow building kwalletd against gpgme++ from gpgme 1.7
-
- REVIEW: 129339
-
-diff --git a/kwalletd/CMakeLists.txt b/kwalletd/CMakeLists.txt
-index 73aec82..ae8c745 100644
---- a/kwalletd/CMakeLists.txt
-+++ b/kwalletd/CMakeLists.txt
-@@ -5,11 +5,18 @@ find_package(Gpgme) # Called by FindQGpgme, but since we call some gpgme
- # functions ourselves we need to link against it directly.
- find_package(QGpgme) # provided by kdepimlibs
-
--if (GPGME_FOUND AND QGPGME_FOUND)
-+if (NOT QGPGME_FOUND)
-+find_package(Gpgmepp) # provided by gpgme 1.7
-+endif (NOT QGPGME_FOUND)
-+
-+if ((GPGME_FOUND AND QGPGME_FOUND) OR Gpgmepp_FOUND)
- add_definitions(-DHAVE_QGPGME)
-- include_directories(${GPGME_INCLUDES} ${QGPGME_INCLUDE_DIR})
-+ include_directories(${GPGME_INCLUDES})
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${KDE4_ENABLE_EXCEPTIONS}")
--endif(GPGME_FOUND AND QGPGME_FOUND)
-+endif((GPGME_FOUND AND QGPGME_FOUND) OR Gpgmepp_FOUND)
-+if (GPGME_FOUND AND QGPGME_FOUND)
-+ include_directories(${QGPGME_INCLUDE_DIR})
-+endif (GPGME_FOUND AND QGPGME_FOUND)
-
- ########### build backends #########
- add_subdirectory(backend)
-@@ -37,7 +44,7 @@ kde4_add_ui_files(kwalletd_KDEINIT_SRCS
- kwalletwizardpagepassword.ui
- )
-
--if (GPGME_FOUND AND QGPGME_FOUND)
-+if ((GPGME_FOUND AND QGPGME_FOUND) OR Gpgmepp_FOUND)
- set(kwalletd_KDEINIT_SRCS
- ${kwalletd_KDEINIT_SRCS}
- knewwalletdialog.cpp
-@@ -48,7 +55,7 @@ if (GPGME_FOUND AND QGPGME_FOUND)
- knewwalletdialogintro.ui
- knewwalletdialoggpg.ui
- )
--endif(GPGME_FOUND AND QGPGME_FOUND)
-+endif((GPGME_FOUND AND QGPGME_FOUND) OR Gpgmepp_FOUND)
-
- find_file(kwallet_xml org.kde.KWallet.xml HINTS ${KDE4_DBUS_INTERFACES_DIR} )
-
-@@ -57,8 +64,12 @@ qt4_add_dbus_adaptor( kwalletd_KDEINIT_SRCS ${kwallet_xml} kwalletd.h KWalletD )
- kde4_add_kdeinit_executable( kwalletd NOGUI ${kwalletd_KDEINIT_SRCS} )
-
- target_link_libraries(kdeinit_kwalletd ${KDE4_KDEUI_LIBS} kwalletbackend )
--if (GPGME_FOUND AND QGPGME_FOUND)
-- target_link_libraries(kdeinit_kwalletd ${QGPGME_LIBRARIES} )
-+if(GPGME_FOUND AND QGPGME_FOUND)
-+target_link_libraries(kdeinit_kwalletd ${QGPGME_LIBRARIES} )
-+else(GPGME_FOUND AND QGPGME_FOUND)
-+if(Gpgmepp_FOUND)
-+target_link_libraries(kdeinit_kwalletd Gpgmepp)
-+endif(Gpgmepp_FOUND)
- endif(GPGME_FOUND AND QGPGME_FOUND)
-
- install(TARGETS kdeinit_kwalletd ${INSTALL_TARGETS_DEFAULT_ARGS})
-@@ -73,4 +84,4 @@ install( FILES kwalletd.notifyrc DESTINATION ${DATA_INSTALL_DIR}/kwalletd )
- install( FILES kwallet-4.13.upd DESTINATION ${DATA_INSTALL_DIR}/kconf_update)
-
- add_subdirectory(tests)
--add_subdirectory(autotests)
-\ No newline at end of file
-+add_subdirectory(autotests)
-diff --git a/kwalletd/backend/CMakeLists.txt b/kwalletd/backend/CMakeLists.txt
-index 4db348f..7347b12 100644
---- a/kwalletd/backend/CMakeLists.txt
-+++ b/kwalletd/backend/CMakeLists.txt
-@@ -22,6 +22,10 @@ kde4_add_library(kwalletbackend SHARED ${kwalletbackend_LIB_SRCS})
- target_link_libraries(kwalletbackend ${KDE4_KDEUI_LIBS} ${LIBGCRYPT_LIBRARIES})
- if(QGPGME_FOUND)
- target_link_libraries(kwalletbackend ${QGPGME_LIBRARIES} )
-+else(QGPGME_FOUND)
-+if(Gpgmepp_FOUND)
-+target_link_libraries(kwalletbackend Gpgmepp)
-+endif(Gpgmepp_FOUND)
- endif(QGPGME_FOUND)
-
- # link with advapi32 on windows
-diff --git a/kwalletd/backend/backendpersisthandler.cpp b/kwalletd/backend/backendpersisthandler.cpp
-index b7f63f8..9608af0 100644
---- a/kwalletd/backend/backendpersisthandler.cpp
-+++ b/kwalletd/backend/backendpersisthandler.cpp
-@@ -33,6 +33,7 @@
- #include <gpgme++/data.h>
- #include <gpgme++/encryptionresult.h>
- #include <gpgme++/decryptionresult.h>
-+#include <boost/shared_ptr.hpp>
- #endif
- #include "backendpersisthandler.h"
- #include "kwalletbackend.h"
-diff --git a/kwalletd/kwalletwizard.cpp b/kwalletd/kwalletwizard.cpp
-index 78de78d..821b666 100644
---- a/kwalletd/kwalletwizard.cpp
-+++ b/kwalletd/kwalletwizard.cpp
-@@ -40,6 +40,7 @@
- #include <kdebug.h>
- #include <kmessagebox.h>
- #include <gpgme.h>
-+#include <boost/shared_ptr.hpp>
- #endif
-
- class PageIntro : public QWizardPage
-commit cf28801cd34730da07a2c01704ca3114630f4fe7
-Author: Antonio Rojas <arojas@archlinux.org>
-Date: Thu Nov 10 18:54:41 2016 +0100
-
- Compiling against gmgpe 1.7 requires c++11
-
-diff --git a/kwalletd/CMakeLists.txt b/kwalletd/CMakeLists.txt
-index ae8c745..88d944e 100644
---- a/kwalletd/CMakeLists.txt
-+++ b/kwalletd/CMakeLists.txt
-@@ -17,6 +17,9 @@ endif((GPGME_FOUND AND QGPGME_FOUND) OR Gpgmepp_FOUND)
- if (GPGME_FOUND AND QGPGME_FOUND)
- include_directories(${QGPGME_INCLUDE_DIR})
- endif (GPGME_FOUND AND QGPGME_FOUND)
-+if (Gpgmepp_FOUND)
-+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
-+endif (Gpgmepp_FOUND)
-
- ########### build backends #########
- add_subdirectory(backend)
diff --git a/kde/patch/kde-workspace.patch b/kde/patch/kde-workspace.patch
index 4a355d1..bebecfe 100644
--- a/kde/patch/kde-workspace.patch
+++ b/kde/patch/kde-workspace.patch
@@ -4,9 +4,5 @@ cat $CWD/patch/kde-workspace/kde-workspace.kdm.server.timeout.diff | patch -p1 -
# Always show 'remaining time' in the popup of the battery plasmoid:
cat $CWD/patch/kde-workspace/kde-workspace.batteryapplet.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-# Fix crash when DesktopNames isn't set (fixed in 4.11.10):
-#cat $CWD/patch/kde-workspace/kde-workspace.desktopnames.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
# In Plasma 5 we do not need the Plasma 4 core apps, they conflict.
cat $CWD/patch/kde-workspace/kde-workspace.no.plasma4.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kde-workspace/kde-workspace.desktopnames.diff b/kde/patch/kde-workspace/kde-workspace.desktopnames.diff
deleted file mode 100644
index 59aef1c..0000000
--- a/kde/patch/kde-workspace/kde-workspace.desktopnames.diff
+++ /dev/null
@@ -1,34 +0,0 @@
-commit e1724800ecf3c6a7035dfa7bcaa50b2a8f48688f
-Author: David Faure <faure@kde.org>
-Date: Fri May 2 10:26:38 2014 +0200
-
- Fix crash when DesktopNames isn't set
-
- BUG: 334159
- FIXED-IN: 4.11.10
-
-diff --git a/kdm/backend/client.c b/kdm/backend/client.c
-index 335cc3e..a2d06c2 100644
---- a/kdm/backend/client.c
-+++ b/kdm/backend/client.c
-@@ -1810,12 +1810,14 @@ startClient(volatile int *pid)
- !(sessargs = iniEntry(str, "Desktop Entry", "Exec", 0)))
- sessargs = "";
- buf = iniEntry(str, "Desktop Entry", "DesktopNames", 0);
-- for (buf2 = buf; *buf2; ++buf2) {
-- if (*buf2 == ';')
-- *buf2 = ':';
-+ if (buf) {
-+ for (buf2 = buf; *buf2; ++buf2) {
-+ if (*buf2 == ';')
-+ *buf2 = ':';
-+ }
-+ userEnviron = setEnv(userEnviron, "XDG_CURRENT_DESKTOP", buf);
-+ free(buf);
- }
-- userEnviron = setEnv(userEnviron, "XDG_CURRENT_DESKTOP", buf);
-- free(buf);
- free(str);
- free(fname);
- goto gotit;
-
diff --git a/kde/patch/kdeconnect-framework.patch b/kde/patch/kdeconnect-framework.patch
deleted file mode 100644
index 835a0de..0000000
--- a/kde/patch/kdeconnect-framework.patch
+++ /dev/null
@@ -1,5 +0,0 @@
-# We now use Qca-qt5, not Qca.
-# Change the lines with #include <QtCrypto> to #include <QtCrypto/QtCrypto> :
-# No longer needed for kdeconnect-kde 5.2.0:
-#cat $CWD/patch/kdeconnect-framework/kdeconnect-kde_qca.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdeconnect-framework/kdeconnect-kde_qca.diff b/kde/patch/kdeconnect-framework/kdeconnect-kde_qca.diff
deleted file mode 100644
index 6b63821..0000000
--- a/kde/patch/kdeconnect-framework/kdeconnect-kde_qca.diff
+++ /dev/null
@@ -1,72 +0,0 @@
-diff -uar kdeconnect-kde-c7c1974_20150111git.orig/CMakeLists.txt kdeconnect-kde-c7c1974_20150111git/CMakeLists.txt
---- kdeconnect-kde-c7c1974_20150111git.orig/CMakeLists.txt 2015-01-11 05:14:01.000000000 +0100
-+++ kdeconnect-kde-c7c1974_20150111git/CMakeLists.txt 2015-01-13 19:35:36.186346803 +0100
-@@ -7,7 +7,7 @@
-
- find_package(Qt5 5.2 REQUIRED COMPONENTS Quick Test)
- find_package(KF5 REQUIRED COMPONENTS I18n KIO Notifications ConfigWidgets DBusAddons KCMUtils IconThemes)
--find_package(Qca REQUIRED)
-+find_package(Qca-qt5 REQUIRED)
-
- include(KDEInstallDirs)
- include(KDECompilerSettings)
-diff -uar kdeconnect-kde-c7c1974_20150111git.orig/core/backends/devicelink.h kdeconnect-kde-c7c1974_20150111git/core/backends/devicelink.h
---- kdeconnect-kde-c7c1974_20150111git.orig/core/backends/devicelink.h 2015-01-11 05:14:01.000000000 +0100
-+++ kdeconnect-kde-c7c1974_20150111git/core/backends/devicelink.h 2015-01-13 19:37:54.472349672 +0100
-@@ -22,7 +22,7 @@
- #define DEVICELINK_H
-
- #include <QObject>
--#include <QtCrypto>
-+#include <QtCrypto/QtCrypto>
-
- #include "../networkpackage.h"
-
-diff -uar kdeconnect-kde-c7c1974_20150111git.orig/core/daemon.cpp kdeconnect-kde-c7c1974_20150111git/core/daemon.cpp
---- kdeconnect-kde-c7c1974_20150111git.orig/core/daemon.cpp 2015-01-11 05:14:01.000000000 +0100
-+++ kdeconnect-kde-c7c1974_20150111git/core/daemon.cpp 2015-01-13 19:36:20.832347218 +0100
-@@ -27,7 +27,7 @@
- #include <QDBusConnection>
- #include <QNetworkSession>
- #include <QNetworkConfigurationManager>
--#include <QtCrypto>
-+#include <QtCrypto/QtCrypto>
- #include <QStandardPaths>
- #include <QNetworkAccessManager>
-
-diff -uar kdeconnect-kde-c7c1974_20150111git.orig/core/device.h kdeconnect-kde-c7c1974_20150111git/core/device.h
---- kdeconnect-kde-c7c1974_20150111git.orig/core/device.h 2015-01-11 05:14:01.000000000 +0100
-+++ kdeconnect-kde-c7c1974_20150111git/core/device.h 2015-01-13 19:36:48.824345985 +0100
-@@ -27,7 +27,7 @@
- #include <QSet>
- #include <QSslKey>
- #include <QTimer>
--#include <QtCrypto>
-+#include <QtCrypto/QtCrypto>
-
- #include "networkpackage.h"
-
-diff -uar kdeconnect-kde-c7c1974_20150111git.orig/core/networkpackage.cpp kdeconnect-kde-c7c1974_20150111git/core/networkpackage.cpp
---- kdeconnect-kde-c7c1974_20150111git.orig/core/networkpackage.cpp 2015-01-11 05:14:01.000000000 +0100
-+++ kdeconnect-kde-c7c1974_20150111git/core/networkpackage.cpp 2015-01-13 19:37:33.492347812 +0100
-@@ -32,7 +32,7 @@
- #include <QSslKey>
- #include <QDateTime>
- #include <qjsondocument.h>
--#include <QtCrypto>
-+#include <QtCrypto/QtCrypto>
- #include <QDebug>
-
- #include "dbushelper.h"
-diff -uar kdeconnect-kde-c7c1974_20150111git.orig/core/networkpackage.h kdeconnect-kde-c7c1974_20150111git/core/networkpackage.h
---- kdeconnect-kde-c7c1974_20150111git.orig/core/networkpackage.h 2015-01-11 05:14:01.000000000 +0100
-+++ kdeconnect-kde-c7c1974_20150111git/core/networkpackage.h 2015-01-13 19:35:36.224346806 +0100
-@@ -28,7 +28,7 @@
- #include <QVariant>
- #include <QStringList>
- #include <QIODevice>
--#include <QtCrypto>
-+#include <QtCrypto/QtCrypto>
- #include <QSharedPointer>
- #include <QUrl>
-
diff --git a/kde/patch/kdeconnect-kde.patch b/kde/patch/kdeconnect-kde.patch
new file mode 100644
index 0000000..122440d
--- /dev/null
+++ b/kde/patch/kdeconnect-kde.patch
@@ -0,0 +1,2 @@
+# Fix remote device browsing with openssh 8.2:
+cat $CWD/patch/kdeconnect-kde/kdeconnect-kde_openssh-8.2.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/kdeconnect-kde/kdeconnect-kde_openssh-8.2.diff b/kde/patch/kdeconnect-kde/kdeconnect-kde_openssh-8.2.diff
new file mode 100644
index 0000000..ff067aa
--- /dev/null
+++ b/kde/patch/kdeconnect-kde/kdeconnect-kde_openssh-8.2.diff
@@ -0,0 +1,12 @@
+diff --git a/plugins/sftp/mounter.cpp b/plugins/sftp/mounter.cpp
+index fca9907c..f673c9f7 100644
+--- a/plugins/sftp/mounter.cpp
++++ b/plugins/sftp/mounter.cpp
+@@ -145,6 +145,7 @@ void Mounter::onPackageReceived(const NetworkPacket& np)
+ << QStringLiteral("-o") << QStringLiteral("reconnect")
+ << QStringLiteral("-o") << QStringLiteral("ServerAliveInterval=30")
+ << QStringLiteral("-o") << QStringLiteral("password_stdin")
++ << QStringLiteral("-o") << QStringLiteral("KexAlgorithms=+diffie-hellman-group14-sha1")
+ ;
+
+ m_proc->setProgram(program, arguments);
diff --git a/kde/patch/kdelibs.patch b/kde/patch/kdelibs.patch
index 44e201e..4f1fc45 100644
--- a/kde/patch/kdelibs.patch
+++ b/kde/patch/kdelibs.patch
@@ -25,3 +25,6 @@ cat $CWD/patch/kdelibs/kdelibs.2c3762feddf7e66cf6b64d9058f625a715694a00.patch |
# Support TLS v1.1 and TLS v1.2:
cat $CWD/patch/kdelibs/kde4libs-4.14.26.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Fix for the relocated grantlee-qt4 includes:
+cat $CWD/patch/kdelibs/kdelibs.grantlee-qt4.include.path.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/kdelibs/fixbic-4.14.6.patch b/kde/patch/kdelibs/fixbic-4.14.6.patch
deleted file mode 100644
index 585ce51..0000000
--- a/kde/patch/kdelibs/fixbic-4.14.6.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff --git a/khtml/dom/dom_string.h b/khtml/dom/dom_string.h
-index 087f697..b269213 100644
---- a/khtml/dom/dom_string.h
-+++ b/khtml/dom/dom_string.h
-@@ -124,10 +124,23 @@ public:
- bool endsWith(const DOMString& str) const;
- bool startsWith(const DOMString& str) const;
-
-- // http://www.w3.org/TR/html/infrastructure.html#urls
-+ /**
-+ * Return a parsed url.
-+ * Used to parse SRC url attribute,
-+ * see http://www.w3.org/TR/html/infrastructure.html#urls
-+ *
-+ * @since 4.14.6
-+ */
- DOMString parsedUrl() const;
-
- /**
-+ * @deprecated, use parsedUrl()
-+ */
-+#ifndef KDE_NO_DEPRECATED
-+ KDE_DEPRECATED DOMString trimSpaces() const;
-+#endif
-+
-+ /**
- * @internal get a handle to the imlementation of the DOMString
- * Use at own risk!!!
- */
-diff --git a/khtml/dom/dom_string.cpp b/khtml/dom/dom_string.cpp
-index a3c4abd..4da676b 100644
---- a/khtml/dom/dom_string.cpp
-+++ b/khtml/dom/dom_string.cpp
-@@ -336,6 +336,13 @@ DOMString DOMString::parsedUrl() const
- return out;
- }
-
-+#ifndef KDE_NO_DEPRECATED
-+DOMString DOMString::trimSpaces() const
-+{
-+ return parsedUrl();
-+}
-+#endif
-+
- // ------------------------------------------------------------------------
-
- bool DOM::strcasecmp( const DOMString &as, const DOMString &bs )
diff --git a/kde/patch/kdelibs/kdelibs.grantlee-qt4.include.path.patch b/kde/patch/kdelibs/kdelibs.grantlee-qt4.include.path.patch
new file mode 100644
index 0000000..fd7375f
--- /dev/null
+++ b/kde/patch/kdelibs/kdelibs.grantlee-qt4.include.path.patch
@@ -0,0 +1,11 @@
+--- ./kdeui/tests/proxymodeltestsuite/modeleventlogger.cpp.orig 2017-11-04 20:51:22.000000000 -0500
++++ ./kdeui/tests/proxymodeltestsuite/modeleventlogger.cpp 2020-07-12 14:19:32.175099684 -0500
+@@ -30,7 +30,7 @@
+ #include <QDebug>
+
+ #ifdef Grantlee_FOUND
+-#include <grantlee_core.h>
++#include <grantlee-qt4/grantlee_core.h>
+ #include "grantlee_paths.h"
+
+ /**
diff --git a/kde/patch/kdelibs4support.patch b/kde/patch/kdelibs4support.patch
index 8e9fe7b..7d6626e 100644
--- a/kde/patch/kdelibs4support.patch
+++ b/kde/patch/kdelibs4support.patch
@@ -1,6 +1,2 @@
-# Make FindGettext compatible with the one provided by CMake:
-# Fixed in 5.1.0.
-#cat $CWD/patch/kdelibs4support/update-FindGettext.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
# Allow cmake to find our doctools:
cat $CWD/patch/kdelibs4support/FindDocBookXML4.cmake.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/kdelibs4support/update-FindGettext.patch b/kde/patch/kdelibs4support/update-FindGettext.patch
deleted file mode 100644
index 1b75cd8..0000000
--- a/kde/patch/kdelibs4support/update-FindGettext.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From: Alex Merry <alex.merry@kde.org>
-Date: Fri, 04 Jul 2014 10:10:27 +0000
-Subject: Make FindGettext compatible with the one provided by CMake
-X-Git-Url: http://quickgit.kde.org/?p=kdelibs4support.git&a=commitdiff&h=581ee6b370d8b5627196c8d6d8760d3655f6daea
----
-Make FindGettext compatible with the one provided by CMake
-
-This version will accept the old GETTEXT_PROCESS_PO_FILES() syntax (no
-PO_FILES argument), but will also accept the new syntax required by
-CMake's version of this file. It will also warn when PO_FILES is not
-given.
-
-REVIEW: 119111
----
-
-
---- a/cmake/modules/FindGettext.cmake
-+++ b/cmake/modules/FindGettext.cmake
-@@ -212,7 +212,16 @@
- LIST(REMOVE_AT _args 0 1)
- ENDIF("${_tmp}" STREQUAL "INSTALL_DESTINATION")
-
--# message(STATUS "2 all ${_addToAll} dest ${_installDest} args: ${_args}")
-+ LIST(GET _args 0 _tmp)
-+ IF("${_tmp}" STREQUAL "PO_FILES")
-+ LIST(REMOVE_AT _args 0)
-+ ELSE()
-+ SET(_deprecation_arg DEPRECATION)
-+ IF(CMAKE_VERSION VERSION_LESS 3.0.0)
-+ SET(_deprecation_arg AUTHOR_WARNING)
-+ ENDIF()
-+ MESSAGE(${_deprecation_arg} "GETTEXT_PROCESS_PO_FILES without a PO_FILES argument is deprecated")
-+ ENDIF()
-
- FOREACH(_current_PO_FILE ${_args})
- GET_FILENAME_COMPONENT(_name ${_current_PO_FILE} NAME)
diff --git a/kde/patch/kdenlive.patch b/kde/patch/kdenlive.patch
deleted file mode 100644
index 9065c4d..0000000
--- a/kde/patch/kdenlive.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix compilation with gcc7.
-# Should have been fixed in 17.04.2...
-#cat $CWD/patch/kdenlive/kdenlive_gcc7.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdenlive/kdenlive_gcc7.patch b/kde/patch/kdenlive/kdenlive_gcc7.patch
deleted file mode 100644
index a7ddb90..0000000
--- a/kde/patch/kdenlive/kdenlive_gcc7.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-# Make kdenlive compile with gcc7
-
---- kdenlive-17.04.1/src/profiles/tree/profiletreemodel.cpp.orig 2017-05-08 19:52:35.000000000 +0200
-+++ kdenlive-17.04.1/src/profiles/tree/profiletreemodel.cpp 2017-05-19 08:09:04.986909338 +0200
-@@ -27,6 +27,7 @@
- #include <QVector>
- #include <array>
- #include <KLocalizedString>
-+#include <functional>
-
-
- class ProfileItem
---- kdenlive-17.04.1/src/scopes/audioscopes/spectrogram.cpp.orig 2017-05-08 19:52:35.000000000 +0200
-+++ kdenlive-17.04.1/src/scopes/audioscopes/spectrogram.cpp 2017-05-19 08:09:04.993910503 +0200
-@@ -241,7 +241,7 @@
- x = leftDist + (m_innerScopeRect.width() - 1) * ((float)hz) / m_freqMax;
-
- // Hide text if it would overlap with the text drawn at the mouse position
-- hideText = m_aTrackMouse->isChecked() && m_mouseWithinWidget && abs(x - (leftDist + mouseX + 20)) < (int) minDistX + 16
-+ hideText = m_aTrackMouse->isChecked() && m_mouseWithinWidget && abs(x - ((int)leftDist + mouseX + 20)) < (int) minDistX + 16
- && mouseX < m_innerScopeRect.width() && mouseX >= 0;
-
- if (x <= rightBorder) {
-@@ -268,7 +268,7 @@
- }
- // Draw the line at the very right (maximum frequency)
- x = leftDist + m_innerScopeRect.width() - 1;
-- hideText = m_aTrackMouse->isChecked() && m_mouseWithinWidget && abs(x - (leftDist + mouseX + 30)) < (int) minDistX
-+ hideText = m_aTrackMouse->isChecked() && m_mouseWithinWidget && abs(x - ((int)leftDist + mouseX + 30)) < (int) minDistX
- && mouseX < m_innerScopeRect.width() && mouseX >= 0;
- davinci.drawLine(x, topDist, x, topDist + m_innerScopeRect.height() + 6);
- if (!hideText) {
diff --git a/kde/patch/kdepim.patch b/kde/patch/kdepim.patch
deleted file mode 100644
index c5aeb9c..0000000
--- a/kde/patch/kdepim.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Install Kleopatra headers, needed by kopete-cryptography:
-# This used to be fixed?
-#cat $CWD/patch/kdepim/kdepim-install_kleopatra_headers.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch b/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch
deleted file mode 100644
index 18662fd..0000000
--- a/kde/patch/kdepim/kdepim-install_kleopatra_headers.patch
+++ /dev/null
@@ -1,129 +0,0 @@
-diff -uarN kdepim-15.08.0.orig/kleopatra/libkleopatraclient/CMakeLists.txt kdepim-15.08.0/kleopatra/libkleopatraclient/CMakeLists.txt
---- kdepim-15.08.0.orig/kleopatra/libkleopatraclient/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
-+++ kdepim-15.08.0/kleopatra/libkleopatraclient/CMakeLists.txt 2015-08-24 23:05:07.650076668 +0200
-@@ -4,6 +4,11 @@
- add_subdirectory(core)
- add_subdirectory(gui)
-
-+install(
-+ FILES kleopatraclient_export.h
-+ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient
-+ )
-+
- if(BUILD_TESTING)
- add_subdirectory(tests)
- endif()
-diff -uarN kdepim-15.08.0.orig/kleopatra/libkleopatraclient/core/CMakeLists.txt kdepim-15.08.0/kleopatra/libkleopatraclient/core/CMakeLists.txt
---- kdepim-15.08.0.orig/kleopatra/libkleopatraclient/core/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
-+++ kdepim-15.08.0/kleopatra/libkleopatraclient/core/CMakeLists.txt 2015-08-24 22:52:15.613045160 +0200
-@@ -67,3 +67,13 @@
- target_link_libraries(kleopatraclientcore Qt5::Widgets KF5::I18n)
-
- install(TARGETS kleopatraclientcore ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
-+
-+install(
-+ FILES
-+ initialization.h
-+ command.h
-+ selectcertificatecommand.h
-+ signencryptfilescommand.h
-+ decryptverifyfilescommand.h
-+ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient/core
-+ )
-diff -uarN kdepim-15.08.0.orig/kleopatra/libkleopatraclient/gui/CMakeLists.txt kdepim-15.08.0/kleopatra/libkleopatraclient/gui/CMakeLists.txt
---- kdepim-15.08.0.orig/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
-+++ kdepim-15.08.0/kleopatra/libkleopatraclient/gui/CMakeLists.txt 2015-08-24 22:52:15.613045160 +0200
-@@ -16,3 +16,9 @@
- )
-
- install(TARGETS kleopatraclientgui ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
-+
-+install(
-+ FILES
-+ certificaterequester.h
-+ DESTINATION ${INCLUDE_INSTALL_DIR}/libkleopatraclient/gui
-+ )
-diff -uarN kdepim-15.08.0.orig/libkleo/CMakeLists.txt kdepim-15.08.0/libkleo/CMakeLists.txt
---- kdepim-15.08.0.orig/libkleo/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
-+++ kdepim-15.08.0/libkleo/CMakeLists.txt 2015-08-24 22:52:15.613045160 +0200
-@@ -126,3 +126,61 @@
- else ()
- install ( FILES libkleopatrarc.desktop DESTINATION ${KDE_INSTALL_CONFDIR} RENAME libkleopatrarc )
- endif ()
-+
-+install( FILES
-+ kleo/kleo_export.h
-+ kleo/enum.h
-+ kleo/oidmap.h
-+ kleo/cryptobackend.h
-+ kleo/cryptobackendfactory.h
-+ kleo/cryptoconfig.h
-+ kleo/dn.h
-+ kleo/job.h
-+ kleo/keylistjob.h
-+ kleo/keygenerationjob.h
-+ kleo/abstractimportjob.h
-+ kleo/importjob.h
-+ kleo/importfromkeyserverjob.h
-+ kleo/exportjob.h
-+ kleo/changeexpiryjob.h
-+ kleo/changeownertrustjob.h
-+ kleo/downloadjob.h
-+ kleo/deletejob.h
-+ kleo/encryptjob.h
-+ kleo/decryptjob.h
-+ kleo/signjob.h
-+ kleo/specialjob.h
-+ kleo/verifydetachedjob.h
-+ kleo/verifyopaquejob.h
-+ kleo/decryptverifyjob.h
-+ kleo/signencryptjob.h
-+ kleo/signkeyjob.h
-+ kleo/adduseridjob.h
-+ kleo/refreshkeysjob.h
-+ kleo/multideletejob.h
-+ kleo/hierarchicalkeylistjob.h
-+ kleo/keyfilter.h
-+ kleo/keyfiltermanager.h
-+ kleo/changepasswdjob.h
-+ kleo/checksumdefinition.h
-+ kleo/exception.h
-+ kleo/kconfigbasedkeyfilter.h
-+ kleo/listallkeysjob.h
-+ kleo/stl_util.h
-+ DESTINATION ${INCLUDE_INSTALL_DIR}/kleo COMPONENT Devel)
-+
-+install ( FILES
-+ ui/kdhorizontalline.h
-+ ui/messagebox.h
-+ ui/progressbar.h
-+ ui/progressdialog.h
-+ ui/keylistview.h
-+ ui/keyselectiondialog.h
-+ ui/keyrequester.h
-+ ui/keyapprovaldialog.h
-+ ui/dnattributeorderconfigwidget.h
-+ ui/cryptoconfigmodule.h
-+ ui/cryptoconfigdialog.h
-+ ui/directoryserviceswidget.h
-+ ui/filenamerequester.h
-+ DESTINATION ${INCLUDE_INSTALL_DIR}/kleo/ui COMPONENT Devel)
-diff -uarN kdepim-15.08.0.orig/libkpgp/CMakeLists.txt kdepim-15.08.0/libkpgp/CMakeLists.txt
---- kdepim-15.08.0.orig/libkpgp/CMakeLists.txt 2015-08-10 21:56:00.000000000 +0200
-+++ kdepim-15.08.0/libkpgp/CMakeLists.txt 2015-08-24 23:04:02.505074051 +0200
-@@ -44,6 +44,15 @@
- set_target_properties(kpgp PROPERTIES VERSION ${KDEPIM_LIB_VERSION} SOVERSION ${KDEPIM_LIB_SOVERSION})
- install(TARGETS kpgp ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
-
-+install(FILES
-+ kpgp.h
-+ kpgpbase.h
-+ kpgpblock.h
-+ kpgpkey.h
-+ kpgpui.h
-+ libkpgp_export.h
-+ DESTINATION ${INCLUDE_INSTALL_DIR}/kpgp COMPONENT Devel )
-+
- if(BUILD_TESTING)
- add_subdirectory( tests )
- endif()
diff --git a/kde/patch/kdepimlibs.patch b/kde/patch/kdepimlibs.patch
deleted file mode 100644
index 05e5dfe..0000000
--- a/kde/patch/kdepimlibs.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix a crash in kmail (fixed in 15.12.1):
-#cat $CWD/patch/kdepimlibs/kdepimlibs_kmail_crash.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdepimlibs/kdepimlibs_kmail_crash.patch b/kde/patch/kdepimlibs/kdepimlibs_kmail_crash.patch
deleted file mode 100644
index 1614e07..0000000
--- a/kde/patch/kdepimlibs/kdepimlibs_kmail_crash.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-From: Weng Xuetian <wengxt@gmail.com>
-Date: Thu, 17 Dec 2015 16:19:36 +0000
-Subject: Fix possible crash upon application exits (e.g. kmail)
-X-Git-Url: http://quickgit.kde.org/?p=kdepimlibs.git&a=commitdiff&h=c6bf33a9018587e96a350bfd0b2bffde1859db27
----
-Fix possible crash upon application exits (e.g. kmail)
-
-Qt lambda connection will not automatically disconnect if no context
-qobject is provided. Since SessionPrivate is not a qobject, disconnect
-the connection in the destructor to prevent accessing deleted object.
-
-REVIEW: 126395
----
-
-
---- a/akonadi/src/core/session.cpp
-+++ b/akonadi/src/core/session.cpp
-@@ -301,15 +301,16 @@
- // Shutdown the thread before QApplication event loop quits - the
- // thread()->wait() mechanism in ConnectionThread dtor crashes sometimes
- // when called from QApplication destructor
-- QObject::connect(qApp, &QCoreApplication::aboutToQuit,
-- [this]() {
-- delete connThread;
-- connThread = Q_NULLPTR;
-- });
-+ connThreadCleanUp = QObject::connect(qApp, &QCoreApplication::aboutToQuit,
-+ [this]() {
-+ delete connThread;
-+ connThread = Q_NULLPTR;
-+ });
- }
-
- SessionPrivate::~SessionPrivate()
- {
-+ QObject::disconnect(connThreadCleanUp);
- delete connThread;
- }
-
-
---- a/akonadi/src/core/session_p.h
-+++ b/akonadi/src/core/session_p.h
-@@ -29,6 +29,7 @@
-
- #include <QtCore/QQueue>
- #include <QtCore/QThreadStorage>
-+#include <QtCore/QMetaObject>
- #include <QFile>
-
- class QIODevice;
-@@ -125,6 +126,7 @@
- Session *mParent;
- QThread *thread;
- ConnectionThread *connThread;
-+ QMetaObject::Connection connThreadCleanUp;
- QByteArray sessionId;
- bool connected;
- qint64 theNextTag;
-
diff --git a/kde/patch/kdepimlibs4.patch b/kde/patch/kdepimlibs4.patch
deleted file mode 100644
index 91a7d15..0000000
--- a/kde/patch/kdepimlibs4.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix a compilation issue with new libical:
-cat $CWD/patch/kdepimlibs4/kdepimlibs.libical3.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdepimlibs4/kdepimlibs.libical3.diff b/kde/patch/kdepimlibs4/kdepimlibs.libical3.diff
deleted file mode 100644
index c3b8caf..0000000
--- a/kde/patch/kdepimlibs4/kdepimlibs.libical3.diff
+++ /dev/null
@@ -1,184 +0,0 @@
---- ./kcalcore/icalformat_p.cpp.orig 2015-06-24 07:43:14.000000000 -0500
-+++ ./kcalcore/icalformat_p.cpp 2017-12-05 23:03:44.742261940 -0600
-@@ -2301,7 +2301,6 @@
- t.second = 0;
-
- t.is_date = 1;
-- t.is_utc = 0;
- t.zone = 0;
-
- return t;
-@@ -2322,8 +2321,7 @@
- t.minute = datetime.time().minute();
- t.second = datetime.time().second();
- }
-- t.zone = 0; // zone is NOT set
-- t.is_utc = datetime.isUtc() ? 1 : 0;
-+ t.zone = datetime.isUtc() ? icaltimezone_get_utc_timezone() : 0; // zone is NOT set
-
- // _dumpIcaltime( t );
-
-@@ -2398,7 +2396,7 @@
- }
-
- KTimeZone ktz;
-- if (!t.is_utc) {
-+ if (!icaltime_is_utc( t )) {
- ktz = dt.timeZone();
- }
-
-@@ -2431,7 +2429,7 @@
- // _dumpIcaltime( t );
-
- KDateTime::Spec timeSpec;
-- if (t.is_utc || t.zone == icaltimezone_get_utc_timezone()) {
-+ if (icaltime_is_utc( t ) || t.zone == icaltimezone_get_utc_timezone()) {
- timeSpec = KDateTime::UTC; // the time zone is UTC
- utc = false; // no need to convert to UTC
- } else {
---- ./kcalcore/icaltimezones.cpp.orig 2015-06-24 07:43:14.000000000 -0500
-+++ ./kcalcore/icaltimezones.cpp 2017-12-05 23:03:55.482262829 -0600
-@@ -54,7 +54,7 @@
- {
- return QDateTime(QDate(t.year, t.month, t.day),
- QTime(t.hour, t.minute, t.second),
-- (t.is_utc ? Qt::UTC : Qt::LocalTime));
-+ (icaltime_is_utc( t ) ? Qt::UTC : Qt::LocalTime));
- }
-
- // Maximum date for time zone data.
-@@ -81,7 +81,6 @@
- t.second = local.time().second();
- t.is_date = 0;
- t.zone = 0;
-- t.is_utc = 0;
- return t;
- }
-
-@@ -886,7 +885,7 @@
- case ICAL_LASTMODIFIED_PROPERTY:
- {
- const icaltimetype t = icalproperty_get_lastmodified(p);
-- if (t.is_utc) {
-+ if (icaltime_is_utc( t )) {
- data->d->lastModified = toQDateTime(t);
- } else {
- kDebug() << "LAST-MODIFIED not UTC";
-@@ -1259,7 +1258,7 @@
- // Convert DTSTART to QDateTime, and from local time to UTC
- const QDateTime localStart = toQDateTime(dtstart); // local time
- dtstart.second -= prevOffset;
-- dtstart.is_utc = 1;
-+ dtstart.zone = icaltimezone_get_utc_timezone();
- const QDateTime utcStart = toQDateTime(icaltime_normalize(dtstart)); // UTC
-
- transitions += utcStart;
-@@ -1286,13 +1285,13 @@
- t.minute = dtstart.minute;
- t.second = dtstart.second;
- t.is_date = 0;
-- t.is_utc = 0; // dtstart is in local time
-+ t.zone = 0; // dtstart is in local time
- }
- // RFC2445 states that RDATE must be in local time,
- // but we support UTC as well to be safe.
-- if (!t.is_utc) {
-+ if (!icaltime_is_utc( t )) {
- t.second -= prevOffset; // convert to UTC
-- t.is_utc = 1;
-+ t.zone = icaltimezone_get_utc_timezone();
- t = icaltime_normalize(t);
- }
- transitions += toQDateTime(t);
---- ./kcal/icalformat_p.cpp.orig 2015-06-24 07:43:14.000000000 -0500
-+++ ./kcal/icalformat_p.cpp 2017-12-05 23:04:01.670263342 -0600
-@@ -2087,7 +2087,6 @@
- t.second = 0;
-
- t.is_date = 1;
-- t.is_utc = 0;
- t.zone = 0;
-
- return t;
-@@ -2106,8 +2105,7 @@
- t.second = datetime.time().second();
-
- t.is_date = 0;
-- t.zone = 0; // zone is NOT set
-- t.is_utc = datetime.isUtc() ? 1 : 0;
-+ t.zone = datetime.isUtc() ? icaltimezone_get_utc_timezone() : 0;
-
- // _dumpIcaltime( t );
-
-@@ -2174,7 +2172,7 @@
- }
-
- KTimeZone ktz;
-- if ( !t.is_utc ) {
-+ if ( !icaltime_is_utc( t ) ) {
- ktz = dt.timeZone();
- }
-
-@@ -2207,7 +2205,7 @@
- // _dumpIcaltime( t );
-
- KDateTime::Spec timeSpec;
-- if ( t.is_utc || t.zone == icaltimezone_get_utc_timezone() ) {
-+ if ( icaltime_is_utc( t ) || t.zone == icaltimezone_get_utc_timezone() ) {
- timeSpec = KDateTime::UTC; // the time zone is UTC
- utc = false; // no need to convert to UTC
- } else {
---- ./kcal/icaltimezones.cpp.orig 2015-06-24 07:43:14.000000000 -0500
-+++ ./kcal/icaltimezones.cpp 2017-12-05 23:04:07.385263815 -0600
-@@ -50,7 +50,7 @@
- {
- return QDateTime( QDate( t.year, t.month, t.day ),
- QTime( t.hour, t.minute, t.second ),
-- ( t.is_utc ? Qt::UTC : Qt::LocalTime ) );
-+ ( icaltime_is_utc( t ) ? Qt::UTC : Qt::LocalTime ) );
- }
-
- // Maximum date for time zone data.
-@@ -77,7 +77,6 @@
- t.second = local.time().second();
- t.is_date = 0;
- t.zone = 0;
-- t.is_utc = 0;
- return t;
- }
-
-@@ -787,7 +786,7 @@
- case ICAL_LASTMODIFIED_PROPERTY:
- {
- icaltimetype t = icalproperty_get_lastmodified(p);
-- if ( t.is_utc ) {
-+ if ( icaltime_is_utc( t ) ) {
- data->d->lastModified = toQDateTime( t );
- } else {
- kDebug() << "LAST-MODIFIED not UTC";
-@@ -972,7 +971,7 @@
- // Convert DTSTART to QDateTime, and from local time to UTC
- QDateTime localStart = toQDateTime( dtstart ); // local time
- dtstart.second -= prevOffset;
-- dtstart.is_utc = 1;
-+ dtstart.zone = icaltimezone_get_utc_timezone();
- QDateTime utcStart = toQDateTime( icaltime_normalize( dtstart ) ); // UTC
-
- transitions += utcStart;
-@@ -999,13 +998,13 @@
- t.minute = dtstart.minute;
- t.second = dtstart.second;
- t.is_date = 0;
-- t.is_utc = 0; // dtstart is in local time
-+ t.zone = 0; // dtstart is in local time
- }
- // RFC2445 states that RDATE must be in local time,
- // but we support UTC as well to be safe.
-- if ( !t.is_utc ) {
-+ if ( !icaltime_is_utc( t ) ) {
- t.second -= prevOffset; // convert to UTC
-- t.is_utc = 1;
-+ t.zone = icaltimezone_get_utc_timezone();
- t = icaltime_normalize( t );
- }
- transitions += toQDateTime( t );
diff --git a/kde/patch/kdeplasma-addons.patch b/kde/patch/kdeplasma-addons.patch
deleted file mode 100644
index 8c997b2..0000000
--- a/kde/patch/kdeplasma-addons.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# CVE 2013-2120: paste widget "password" generator uses insecure randomness:
-# Fixed in KDE 4.11.
-#cat $CWD/patch/kdeplasma-addons/random_generator_cve-2013-2120.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdeplasma-addons/random_generator_cve-2013-2120.patch b/kde/patch/kdeplasma-addons/random_generator_cve-2013-2120.patch
deleted file mode 100644
index 7a394a5..0000000
--- a/kde/patch/kdeplasma-addons/random_generator_cve-2013-2120.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From: Aaron Seigo <aseigo@kde.org>
-Date: Mon, 03 Jun 2013 17:16:32 +0000
-Subject: use KRandom, avoid modulo bias
-X-Git-Url: http://quickgit.kde.org/?p=kdeplasma-addons.git&a=commitdiff&h=36a1fe49cb70f717c4a6e9eeee2c9186503a8dce
----
-use KRandom, avoid modulo bias
----
-
-
---- a/applets/paste/pastemacroexpander.cpp
-+++ b/applets/paste/pastemacroexpander.cpp
-@@ -27,6 +27,7 @@
- #include <KDebug>
- #include <KLocale>
- #include <KMessageBox>
-+#include <KRandom>
-
- class PasteMacroExpanderSingleton
- {
-@@ -142,35 +143,49 @@
- << "01234567890"
- << "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
-
-- int charCount;
-+ int charCount = 8;
- QString chars;
- QString result;
-
- if (a.count() > 0) {
-- charCount = qMax(a[0].trimmed().toInt(), 1);
-- } else {
-- charCount = 8;
-+ charCount = qMax(a[0].trimmed().toInt(), 8);
- }
-+
- if (a.count() < 2) {
- chars = characterSets.join("");
- }
-+
- if (a.count() > 1) {
- chars += (a[1].trimmed() == "true") ? characterSets[0] : "";
- }
-+
- if (a.count() > 2) {
- chars += (a[2].trimmed() == "true") ? characterSets[1] : "";
- }
-+
- if (a.count() > 3) {
- chars += (a[3].trimmed() == "true") ? characterSets[2] : "";
- }
-+
- if (a.count() > 4) {
- chars += (a[4].trimmed() == "true") ? characterSets[3] : "";
- }
-
-- QDateTime now = QDateTime::currentDateTime();
-- qsrand(now.toTime_t() / now.time().msec());
-+ const int setSize = chars.count();
-+ const int top = (RAND_MAX / setSize) * setSize;
-+ kDebug() << "topping out at " << setSize << RAND_MAX << top;
- for (int i = 0; i < charCount; ++i) {
-- result += chars[qrand() % chars.count()];
-+ // to prevent modulo bias, discard random numbers at the
-+ // 'top end' of INT_MAX
-+ int rand = -1;
-+ do {
-+ if (rand > 0) {
-+ kDebug() << "Ha!" << rand;
-+ }
-+ rand = KRandom::random();
-+ } while (rand >= top);
-+
-+ result += chars[rand % setSize];
- }
- //kDebug() << result;
- return result;
diff --git a/kde/patch/kdesdk-kioslaves.patch b/kde/patch/kdesdk-kioslaves.patch
deleted file mode 100644
index da2f885..0000000
--- a/kde/patch/kdesdk-kioslaves.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix compilation against svn > 1.8.
-#cat $CWD/patch/kdesdk-kioslaves/svn19.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdesdk-kioslaves/svn19.patch b/kde/patch/kdesdk-kioslaves/svn19.patch
deleted file mode 100644
index dbd057d..0000000
--- a/kde/patch/kdesdk-kioslaves/svn19.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-Subversion 1.9 and more recent versions have removed some interfaces, which
-the Subversion developers consider to serve only svn-internal purposes, from
-the header files installed by the package.
-
-The following patch (orignally from pkgsrc) provides an own sort mechanism
-to replace the no longer available svn_sort__hash functionality.
-
---- kdesdk-kioslaves-15.08.3/svn/svn.cpp.orig 2015-09-20 17:51:35.000000000 +0000
-+++ kdesdk-kioslaves-15.08.3/svn/svn.cpp
-@@ -54,6 +54,8 @@
- #include "svn.h"
- #include <apr_portable.h>
-
-+#include <algorithm>
-+
- using namespace KIO;
-
- typedef struct
-@@ -107,11 +109,6 @@ static svn_error_t *write_to_string(void
- return SVN_NO_ERROR;
- }
-
--static int
--compare_items_as_paths (const svn_sort__item_t*a, const svn_sort__item_t*b) {
-- return svn_path_compare_paths ((const char *)a->key, (const char *)b->key);
--}
--
- kio_svnProtocol::kio_svnProtocol(const QByteArray &pool_socket, const QByteArray &app_socket)
- : SlaveBase("kio_svn", pool_socket, app_socket) {
- kDebug(7128) << "kio_svnProtocol::kio_svnProtocol()";
-@@ -515,6 +512,11 @@ void kio_svnProtocol::stat(const KUrl &
- svn_pool_destroy( subpool );
- }
-
-+static bool
-+sort_by_path(const std::pair<const char *, svn_dirent_t *> &a, const std::pair<const char *, svn_dirent_t *> &b) {
-+ return svn_path_compare_paths(a.first, b.first) < 0;
-+}
-+
- void kio_svnProtocol::listDir(const KUrl& url) {
- kDebug(7128) << "kio_svn::listDir(const KUrl& url) : " << url.url();
-
-@@ -547,23 +549,23 @@ void kio_svnProtocol::listDir(const KUrl
- return;
- }
-
-- apr_array_header_t *array;
-- int i;
--
-- array = svn_sort__hash (dirents, compare_items_as_paths, subpool);
-+ std::vector<std::pair<const char *, svn_dirent_t *> > array;
-+ for (apr_hash_index_t *hi = apr_hash_first(subpool, dirents); hi; hi = apr_hash_next(hi)) {
-+ const void *key;
-+ void *data;
-+ apr_hash_this(hi, &key, NULL, &data);
-+ array.push_back(std::make_pair(reinterpret_cast<const char *>(key), reinterpret_cast<svn_dirent_t *>(data)));
-+ }
-+ std::sort(array.begin(), array.end(), sort_by_path);
-
-- UDSEntry entry;
-- for (i = 0; i < array->nelts; ++i) {
-+ UDSEntry entry;
-+ for (size_t i = 0; i < array.size(); ++i) {
- entry.clear();
- const char *utf8_entryname, *native_entryname;
- svn_dirent_t *dirent;
-- svn_sort__item_t *item;
-
-- item = &APR_ARRAY_IDX (array, i, svn_sort__item_t);
--
-- utf8_entryname = (const char*)item->key;
--
-- dirent = (svn_dirent_t*)apr_hash_get (dirents, utf8_entryname, item->klen);
-+ utf8_entryname = array[i].first;
-+ dirent = array[i].second;
-
- svn_utf_cstring_from_utf8 (&native_entryname, utf8_entryname, subpool);
- const char *native_author = NULL;
-@@ -577,7 +579,7 @@ void kio_svnProtocol::listDir(const KUrl
- if ( createUDSEntry(QString( native_entryname ), QString( native_author ), dirent->size,
- dirent->kind==svn_node_dir ? true : false, mtime, entry) )
- listEntry( entry, false );
-- }
-+ }
- listEntry( entry, true );
-
- finished();
diff --git a/kde/patch/kdev-python.patch b/kde/patch/kdev-python.patch
deleted file mode 100644
index 4b754ce..0000000
--- a/kde/patch/kdev-python.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix compilation against Python 3.8.
-# Fixed in 5.5.0.
-cat $CWD/patch/kdev-python/kdev-python-5.4.4_python38.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdev-python/kdev-python-5.4.4_python38.patch b/kde/patch/kdev-python/kdev-python-5.4.4_python38.patch
deleted file mode 100644
index 572c9da..0000000
--- a/kde/patch/kdev-python/kdev-python-5.4.4_python38.patch
+++ /dev/null
@@ -1,560 +0,0 @@
-From e23fa8f15af89a8bd4bd84dd96b5fd7017457516 Mon Sep 17 00:00:00 2001
-From: Francis Herne <mail@flherne.uk>
-Date: Fri, 20 Sep 2019 00:41:29 +0100
-Subject: [PATCH] Initial Python 3.8 support.
-
-This allows kdev-python to be built and run against CPython 3.8,
- and if so to parse files containing 3.8 syntax.
-
-BUG: 411956
-FIXED-IN: 5.5.0
----
- CMakeLists.txt | 4 +-
- duchain/declarationbuilder.cpp | 10 ++++-
- duchain/declarationbuilder.h | 1 +
- duchain/expressionvisitor.cpp | 4 ++
- duchain/expressionvisitor.h | 1 +
- duchain/tests/pyduchaintest.cpp | 19 +++++++++
- parser/ast.cpp | 7 +++-
- parser/ast.h | 9 ++++
- parser/astbuilder.cpp | 6 +++
- parser/astdefaultvisitor.cpp | 6 +++
- parser/astdefaultvisitor.h | 2 +
- parser/astvisitor.cpp | 1 +
- parser/astvisitor.h | 1 +
- parser/conversionGenerator.py | 11 +++--
- parser/generated.h | 36 ++++++++++++++++
- parser/{python36.sdef => python38.sdef} | 55 ++++++++++++++++++++++---
- parser/tests/pyasttest.cpp | 5 +++
- 17 files changed, 164 insertions(+), 14 deletions(-)
- rename parser/{python36.sdef => python38.sdef} (82%)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 6f9e465b..09b089dd 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -31,7 +31,7 @@ add_definitions( -DTRANSLATION_DOMAIN=\"kdevpython\" )
-
- # CMake looks for exactly the specified version first and ignores newer versions.
- # To avoid that, start looking for the newest supported version and work down.
--set(Python_ADDITIONAL_VERSIONS 3.7 3.6 3.5 3.4)
-+set(Python_ADDITIONAL_VERSIONS 3.8 3.7 3.6 3.5 3.4)
- foreach(_PYTHON_V ${Python_ADDITIONAL_VERSIONS})
- find_package(PythonInterp ${_PYTHON_V})
- if ( PYTHONINTERP_FOUND )
-@@ -49,7 +49,7 @@ if ( PYTHONINTERP_FOUND AND PYTHON_VERSION_STRING VERSION_GREATER "3.4" )
- endif()
-
- if ( NOT PYTHONLIBS_FOUND OR PYTHONLIBS_VERSION_STRING VERSION_LESS "3.4.3" )
-- message(FATAL_ERROR "Python >= 3.4.3 but < 3.8 with --enable-shared is required to build kdev-python")
-+ message(FATAL_ERROR "Python >= 3.4.3 but < 3.9 with --enable-shared is required to build kdev-python")
- endif()
-
- configure_file(kdevpythonversion.h.cmake "${CMAKE_CURRENT_BINARY_DIR}/kdevpythonversion.h" @ONLY)
-diff --git a/duchain/declarationbuilder.cpp b/duchain/declarationbuilder.cpp
-index e3cb2b9c..61e144c5 100644
---- a/duchain/declarationbuilder.cpp
-+++ b/duchain/declarationbuilder.cpp
-@@ -1354,6 +1354,14 @@ void DeclarationBuilder::visitAnnotationAssignment(AnnotationAssignmentAst* node
- assignToUnknown(node->target, assignType);
- }
-
-+void DeclarationBuilder::visitAssignmentExpression(AssignmentExpressionAst* node) {
-+ AstDefaultVisitor::visitAssignmentExpression(node);
-+
-+ ExpressionVisitor v(currentContext());
-+ v.visitNode(node->value);
-+ assignToUnknown(node->target, v.lastType());
-+}
-+
- void DeclarationBuilder::visitClassDefinition( ClassDefinitionAst* node )
- {
- visitNodeList(node->decorators);
-@@ -1745,7 +1753,7 @@ void DeclarationBuilder::visitArguments( ArgumentsAst* node )
- int parametersCount = node->arguments.length();
- int firstDefaultParameterOffset = parametersCount - defaultParametersCount;
- int currentIndex = 0;
-- foreach ( ArgAst* arg, node->arguments + node->kwonlyargs ) {
-+ foreach ( ArgAst* arg, node->posonlyargs + node->arguments + node->kwonlyargs ) {
- // Iterate over all the function's arguments, create declarations, and add the arguments
- // to the functions FunctionType.
- currentIndex += 1;
-diff --git a/duchain/declarationbuilder.h b/duchain/declarationbuilder.h
-index adee6d6d..1992b781 100644
---- a/duchain/declarationbuilder.h
-+++ b/duchain/declarationbuilder.h
-@@ -90,6 +90,7 @@ class KDEVPYTHONDUCHAIN_EXPORT DeclarationBuilder: public DeclarationBuilderBase
- void visitFunctionDefinition(FunctionDefinitionAst* node) override;
- void visitAssignment(AssignmentAst* node) override;
- void visitAnnotationAssignment(AnnotationAssignmentAst* node) override;
-+ void visitAssignmentExpression(AssignmentExpressionAst* node) override;
- void visitFor(ForAst* node) override;
- void visitImport(ImportAst* node) override;
- void visitImportFrom(ImportFromAst* node) override;
-diff --git a/duchain/expressionvisitor.cpp b/duchain/expressionvisitor.cpp
-index 5c5286ae..055c5b49 100644
---- a/duchain/expressionvisitor.cpp
-+++ b/duchain/expressionvisitor.cpp
-@@ -757,5 +757,9 @@ void ExpressionVisitor::visitBooleanOperation(Python::BooleanOperationAst* node)
- encounter(result);
- }
-
-+void ExpressionVisitor::visitAssignmentExpression(Python::AssignmentExpressionAst* node) {
-+ visitNode(node->value);
-+}
-+
- }
-
-diff --git a/duchain/expressionvisitor.h b/duchain/expressionvisitor.h
-index 25ca2319..a56481ad 100644
---- a/duchain/expressionvisitor.h
-+++ b/duchain/expressionvisitor.h
-@@ -81,6 +81,7 @@ class KDEVPYTHONDUCHAIN_EXPORT ExpressionVisitor : public AstDefaultVisitor, pub
- void visitSetComprehension(SetComprehensionAst* node) override;
- void visitIfExpression(IfExpressionAst* node) override;
- void visitNameConstant(NameConstantAst* node) override;
-+ void visitAssignmentExpression(AssignmentExpressionAst* node) override;
-
- /**
- * @brief Checks for magic docstrings that override a call's return type.
-diff --git a/duchain/tests/pyduchaintest.cpp b/duchain/tests/pyduchaintest.cpp
-index 7142ed2b..17ba34e5 100644
---- a/duchain/tests/pyduchaintest.cpp
-+++ b/duchain/tests/pyduchaintest.cpp
-@@ -838,6 +838,7 @@ void PyDUChainTest::testTypes()
- QEXPECT_FAIL("init_class_no_decl", "aliasing info lost", Continue);
- QEXPECT_FAIL("property_wrong", "visitCall uses declaration if no type", Continue);
- QEXPECT_FAIL("property_setter", "very basic property support", Continue);
-+ QEXPECT_FAIL("assignment_expr_context", "not implemented", Continue);
- QCOMPARE(visitor->found, true);
- }
-
-@@ -1302,6 +1303,21 @@ void PyDUChainTest::testTypes_data()
- " def foo(self, ccc=aaa, ddd=bbb):\n" // self.bbb is visible here, Foo().aaa isn't.
- " return ccc, ddd\n"
- "checkme = Foo().Bar().foo()\n" << "tuple of (str, int)";
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ QTest::newRow("assignment_expr_while") <<
-+ "file = open('foo.txt')\n"
-+ "while q := file.readline():\n"
-+ " checkme = q\n" << "str";
-+ QTest::newRow("assignment_expr_comprehension") <<
-+ "checkme = [z for q in (1, 2, 3) if (z := q % 2)]" << "list of int";
-+ QTest::newRow("assignment_expr_context") <<
-+ "a = [z for q in (1, 2, 3) if (z := q % 2)]\n"
-+ "checkme = z" << "int";
-+ QTest::newRow("positional_params") <<
-+ "def foo(a, b, /, c, d):\n"
-+ " return a, b, c, d\n"
-+ "checkme = foo(10, 'x', 2.3, d='y')\n" << "tuple of (int, str, float, str)";
-+#endif
- }
-
- typedef QPair<Declaration*, int> pair;
-@@ -1780,6 +1796,9 @@ void PyDUChainTest::testVariableCreation_data()
- << QStringList{"int", "int", "float"};
- QTest::newRow("for_loop_tuple") << "for a in 1, 2: pass" << QStringList{"a"} << QStringList{"int"};
- QTest::newRow("for_loop_dict") << "for a in {'foo': 1}: pass" << QStringList{"a"} << QStringList{"str"};
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ QTest::newRow("assignment_expr") << "a = (b := 10)" << QStringList{"a", "b"} << QStringList{"int", "int"};
-+#endif
- }
-
- void PyDUChainTest::testCleanupMultiplePasses()
-diff --git a/parser/ast.cpp b/parser/ast.cpp
-index 9892b184..cd570d36 100644
---- a/parser/ast.cpp
-+++ b/parser/ast.cpp
-@@ -163,6 +163,11 @@ ExpressionAst::ExpressionAst(Ast* parent, AstType type): Ast(parent, type), valu
-
- }
-
-+AssignmentExpressionAst::AssignmentExpressionAst(Ast* parent): ExpressionAst(parent, Ast::AssignmentExpressionAstType), value(nullptr)
-+{
-+
-+}
-+
- YieldFromAst::YieldFromAst(Ast* parent) : ExpressionAst(parent, Ast::YieldFromAstType)
- {
-
-@@ -248,7 +253,7 @@ NameConstantAst::NameConstantAst(Ast* parent): ExpressionAst(parent, Ast::NameCo
-
- }
-
--NumberAst::NumberAst(Ast* parent): ExpressionAst(parent, Ast::NumberAstType), value(0)
-+NumberAst::NumberAst(Ast* parent): ExpressionAst(parent, Ast::NumberAstType), value(0), isInt(false)
- {
-
- }
-diff --git a/parser/ast.h b/parser/ast.h
-index 378af0bd..65fef1cd 100644
---- a/parser/ast.h
-+++ b/parser/ast.h
-@@ -131,6 +131,7 @@ class KDEVPYTHONPARSER_EXPORT Ast
- SliceAstType,
- EllipsisAstType,
- IndexAstType,
-+ AssignmentExpressionAstType,
- LastExpressionType, // keep this at the end of the expr ast list
-
- CodeAstType,
-@@ -457,6 +458,13 @@ class KDEVPYTHONPARSER_EXPORT ExpressionAst : public Ast {
- ExpressionAst* value; // WARNING this is not set in most cases!
- };
-
-+class KDEVPYTHONPARSER_EXPORT AssignmentExpressionAst : public ExpressionAst {
-+public:
-+ AssignmentExpressionAst(Ast* parent);
-+ ExpressionAst* target;
-+ ExpressionAst* value;
-+};
-+
- class KDEVPYTHONPARSER_EXPORT AwaitAst : public ExpressionAst {
- public:
- AwaitAst(Ast* parent);
-@@ -743,6 +751,7 @@ class KDEVPYTHONPARSER_EXPORT ArgumentsAst : public Ast {
- ArgumentsAst(Ast* parent);
- QList<ArgAst*> arguments;
- QList<ArgAst*> kwonlyargs;
-+ QList<ArgAst*> posonlyargs;
- QList<ExpressionAst*> defaultValues;
- ArgAst* vararg;
- ArgAst* kwarg;
-diff --git a/parser/astbuilder.cpp b/parser/astbuilder.cpp
-index a1ccd68d..ad2e0dce 100644
---- a/parser/astbuilder.cpp
-+++ b/parser/astbuilder.cpp
-@@ -101,7 +101,13 @@ CodeAst::Ptr AstBuilder::parse(const QUrl& filename, QString &contents)
- PythonInitializer pyIniter(pyInitLock);
- PyArena* arena = pyIniter.arena;
-
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ PyCompilerFlags flags;
-+ flags.cf_flags = PyCF_SOURCE_IS_UTF8 | PyCF_IGNORE_COOKIE | PyCF_ONLY_AST;
-+ flags.cf_feature_version = 7;
-+#else
- PyCompilerFlags flags = {PyCF_SOURCE_IS_UTF8 | PyCF_IGNORE_COOKIE};
-+#endif
-
- CythonSyntaxRemover cythonSyntaxRemover;
-
-diff --git a/parser/astdefaultvisitor.cpp b/parser/astdefaultvisitor.cpp
-index 5db1f6f1..cdd31bbf 100644
---- a/parser/astdefaultvisitor.cpp
-+++ b/parser/astdefaultvisitor.cpp
-@@ -292,6 +292,12 @@ void AstDefaultVisitor::visitAnnotationAssignment(AnnotationAssignmentAst* node)
- visitNode(node->value);
- }
-
-+void AstDefaultVisitor::visitAssignmentExpression(AssignmentExpressionAst* node)
-+{
-+ visitNode(node->target);
-+ visitNode(node->value);
-+}
-+
- void AstDefaultVisitor::visitBinaryOperation(BinaryOperationAst* node)
- {
- visitNode(node->lhs);
-diff --git a/parser/astdefaultvisitor.h b/parser/astdefaultvisitor.h
-index e8e0d3de..aa1f540c 100644
---- a/parser/astdefaultvisitor.h
-+++ b/parser/astdefaultvisitor.h
-@@ -49,6 +49,7 @@ class KDEVPYTHONPARSER_EXPORT AstDefaultVisitor : public AstVisitor
- void visitAssignment(AssignmentAst* node) override;
- void visitAugmentedAssignment(AugmentedAssignmentAst* node) override;
- void visitAnnotationAssignment(AnnotationAssignmentAst* node) override;
-+ void visitAssignmentExpression(AssignmentExpressionAst* node) override;
- void visitFor(ForAst* node) override;
- void visitWhile(WhileAst* node) override;
- void visitIf(IfAst* node) override;
-@@ -122,6 +123,7 @@ class KDEVPYTHONPARSER_EXPORT AstFreeVisitor : public AstDefaultVisitor {
- void visitAssignment(AssignmentAst* node) override { AstDefaultVisitor::visitAssignment(node); delete node; }
- void visitAugmentedAssignment(AugmentedAssignmentAst* node) override { AstDefaultVisitor::visitAugmentedAssignment(node); delete node; }
- void visitAnnotationAssignment(AnnotationAssignmentAst* node) override { AstDefaultVisitor::visitAnnotationAssignment(node); delete node; }
-+ void visitAssignmentExpression(AssignmentExpressionAst* node) override { AstDefaultVisitor::visitAssignmentExpression(node); delete node; }
- void visitFor(ForAst* node) override { AstDefaultVisitor::visitFor(node); delete node; }
- void visitWhile(WhileAst* node) override { AstDefaultVisitor::visitWhile(node); delete node; }
- void visitIf(IfAst* node) override { AstDefaultVisitor::visitIf(node); delete node; }
-diff --git a/parser/astvisitor.cpp b/parser/astvisitor.cpp
-index ace7d619..51c5a1c5 100644
---- a/parser/astvisitor.cpp
-+++ b/parser/astvisitor.cpp
-@@ -47,6 +47,7 @@ void AstVisitor::visitNode(Ast* node)
- case Ast::AssignmentAstType: this->visitAssignment(static_cast<AssignmentAst*>(node)); break;
- case Ast::AugmentedAssignmentAstType: this->visitAugmentedAssignment(static_cast<AugmentedAssignmentAst*>(node)); break;
- case Ast::AnnotationAssignmentAstType: this->visitAnnotationAssignment(static_cast<AnnotationAssignmentAst*>(node)); break;
-+ case Ast::AssignmentExpressionAstType: this->visitAssignmentExpression(static_cast<AssignmentExpressionAst*>(node)); break;
- case Ast::ForAstType: this->visitFor(static_cast<ForAst*>(node)); break;
- case Ast::WhileAstType: this->visitWhile(static_cast<WhileAst*>(node)); break;
- case Ast::IfAstType: this->visitIf(static_cast<IfAst*>(node)); break;
-diff --git a/parser/astvisitor.h b/parser/astvisitor.h
-index 1908e9dd..51aa47b4 100644
---- a/parser/astvisitor.h
-+++ b/parser/astvisitor.h
-@@ -61,6 +61,7 @@ class KDEVPYTHONPARSER_EXPORT AstVisitor
- virtual void visitAssignment(AssignmentAst* node) { Q_UNUSED(node); };
- virtual void visitAugmentedAssignment(AugmentedAssignmentAst* node) { Q_UNUSED(node); };
- virtual void visitAnnotationAssignment(AnnotationAssignmentAst* node) { Q_UNUSED(node); };
-+ virtual void visitAssignmentExpression(AssignmentExpressionAst* node) { Q_UNUSED(node); };
- virtual void visitFor(ForAst* node) { Q_UNUSED(node); };
- virtual void visitWhile(WhileAst* node) { Q_UNUSED(node); };
- virtual void visitIf(IfAst* node) { Q_UNUSED(node); };
-diff --git a/parser/conversionGenerator.py b/parser/conversionGenerator.py
-index 9d65cc0d..66055953 100644
---- a/parser/conversionGenerator.py
-+++ b/parser/conversionGenerator.py
-@@ -9,7 +9,7 @@
-
- import sys
-
--contents = open('python36.sdef').read().replace("\n", "").split(';;')
-+contents = open('python38.sdef').read().replace("\n", "").split(';;')
-
- func_structure = '''
- Ast* visitNode(%{RULE_FOR}* node) {
-@@ -45,7 +45,6 @@
-
- switch_line = ''' case %{KIND}: {
- %{ACTIONS}
-- result = v;
- break;
- }'''
-
-@@ -139,6 +138,7 @@ def pluginAstToPythonAstType(plugintypestr):
- results[rule_for] = list()
-
- current_actions = list()
-+ created_v = False
- for action in actions:
- command = action.split('|')[0]
- try:
-@@ -204,14 +204,17 @@ def pluginAstToPythonAstType(plugintypestr):
- elif command == 'create':
- astType = arguments
- current_actions.append(create_ast_line.replace('%{AST_TYPE}', astType))
--
-+ created_v = True
-+
- if code:
- current_actions.append(code);
--
-+
- current_actions = "\n".join(current_actions)
- if kind == 'any':
- current_stmt = current_actions
- else:
-+ if created_v:
-+ current_actions += "\n result = v;"
- current_stmt = switch_line.replace('%{KIND}', kind).replace('%{ACTIONS}', current_actions)
- if before_version:
- version_cpp_if = ("#if PYTHON_VERSION < QT_VERSION_CHECK(%d, %d, 0)\n"
-diff --git a/parser/generated.h b/parser/generated.h
-index 9061deb0..e1136f84 100644
---- a/parser/generated.h
-+++ b/parser/generated.h
-@@ -76,12 +76,23 @@ class PythonAstTransformer {
- Ast* visitNode(_arguments* node) {
- bool ranges_copied = false; Q_UNUSED(ranges_copied);
- if ( ! node ) return nullptr;
-+#if PYTHON_VERSION < QT_VERSION_CHECK(3, 8, 0)
- ArgumentsAst* v = new ArgumentsAst(parent());
- nodeStack.push(v); v->vararg = static_cast<ArgAst*>(visitNode(node->vararg)); nodeStack.pop();
- nodeStack.push(v); v->kwarg = static_cast<ArgAst*>(visitNode(node->kwarg)); nodeStack.pop();
- nodeStack.push(v); v->arguments = visitNodeList<_arg, ArgAst>(node->args); nodeStack.pop();
- nodeStack.push(v); v->defaultValues = visitNodeList<_expr, ExpressionAst>(node->defaults); nodeStack.pop();
- nodeStack.push(v); v->kwonlyargs = visitNodeList<_arg, ArgAst>(node->kwonlyargs); nodeStack.pop();
-+#endif
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ ArgumentsAst* v = new ArgumentsAst(parent());
-+ nodeStack.push(v); v->vararg = static_cast<ArgAst*>(visitNode(node->vararg)); nodeStack.pop();
-+ nodeStack.push(v); v->kwarg = static_cast<ArgAst*>(visitNode(node->kwarg)); nodeStack.pop();
-+ nodeStack.push(v); v->arguments = visitNodeList<_arg, ArgAst>(node->args); nodeStack.pop();
-+ nodeStack.push(v); v->defaultValues = visitNodeList<_expr, ExpressionAst>(node->defaults); nodeStack.pop();
-+ nodeStack.push(v); v->kwonlyargs = visitNodeList<_arg, ArgAst>(node->kwonlyargs); nodeStack.pop();
-+ nodeStack.push(v); v->posonlyargs = visitNodeList<_arg, ArgAst>(node->posonlyargs); nodeStack.pop();
-+#endif
- return v;
- }
-
-@@ -280,18 +291,22 @@ class PythonAstTransformer {
- break;
- }
- #endif
-+#if PYTHON_VERSION < QT_VERSION_CHECK(3, 8, 0)
- case Num_kind: {
- NumberAst* v = new NumberAst(parent());
- v->isInt = PyLong_Check(node->v.Num.n); v->value = PyLong_AsLong(node->v.Num.n);
- result = v;
- break;
- }
-+#endif
-+#if PYTHON_VERSION < QT_VERSION_CHECK(3, 8, 0)
- case Str_kind: {
- StringAst* v = new StringAst(parent());
- v->value = PyUnicodeObjectToQString(node->v.Str.s);
- result = v;
- break;
- }
-+#endif
- #if PYTHON_VERSION >= QT_VERSION_CHECK(3, 6, 0)
- case JoinedStr_kind: {
- JoinedStringAst* v = new JoinedStringAst(parent());
-@@ -310,12 +325,14 @@ class PythonAstTransformer {
- break;
- }
- #endif
-+#if PYTHON_VERSION < QT_VERSION_CHECK(3, 8, 0)
- case Bytes_kind: {
- BytesAst* v = new BytesAst(parent());
- v->value = PyUnicodeObjectToQString(node->v.Bytes.s);
- result = v;
- break;
- }
-+#endif
- case Attribute_kind: {
- AttributeAst* v = new AttributeAst(parent());
- v->attribute = node->v.Attribute.attr ? new Python::Identifier(PyUnicodeObjectToQString(node->v.Attribute.attr)) : nullptr;
-@@ -374,23 +391,42 @@ class PythonAstTransformer {
- result = v;
- break;
- }
-+#if PYTHON_VERSION < QT_VERSION_CHECK(3, 8, 0)
- case Ellipsis_kind: {
- EllipsisAst* v = new EllipsisAst(parent());
- result = v;
- break;
- }
-+#endif
-+#if PYTHON_VERSION < QT_VERSION_CHECK(3, 8, 0)
- case NameConstant_kind: {
- NameConstantAst* v = new NameConstantAst(parent());
- v->value = node->v.NameConstant.value == Py_None ? NameConstantAst::None : node->v.NameConstant.value == Py_False ? NameConstantAst::False : NameConstantAst::True;
- result = v;
- break;
- }
-+#endif
- case YieldFrom_kind: {
- YieldFromAst* v = new YieldFromAst(parent());
- nodeStack.push(v); v->value = static_cast<ExpressionAst*>(visitNode(node->v.YieldFrom.value)); nodeStack.pop();
- result = v;
- break;
- }
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ case Constant_kind: {
-+PyObject *value = node->v.Constant.value;if (value == Py_None) { NameConstantAst* v = new NameConstantAst(parent()); v->value = NameConstantAst::None; result = v;}else if (value == Py_True) { NameConstantAst* v = new NameConstantAst(parent()); v->value = NameConstantAst::True; result = v;}else if (value == Py_False) { NameConstantAst* v = new NameConstantAst(parent()); v->value = NameConstantAst::False; result = v;}else if (value->ob_type == &PyLong_Type) { NumberAst* v = new NumberAst(parent()); v->isInt = true; v->value = PyLong_AsLong(value); result = v;}else if (value->ob_type == &PyFloat_Type || value->ob_type == &PyComplex_Type) { result = new NumberAst(parent());}else if (value->ob_type == &PyUnicode_Type) { StringAst* v = new StringAst(parent()); v->value = PyUnicodeObjectToQString(value); result = v;}else if (value->ob_type == &PyBytes_Type) { result = new BytesAst(parent());}else if (value->ob_type == &PyEllipsis_Type) { result = new EllipsisAst(parent());}else { qWarning() << "Unhandled constant type: " << value->ob_type->tp_name; Q_ASSERT(false);};
-+ break;
-+ }
-+#endif
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ case NamedExpr_kind: {
-+ AssignmentExpressionAst* v = new AssignmentExpressionAst(parent());
-+ nodeStack.push(v); v->target = static_cast<ExpressionAst*>(visitNode(node->v.NamedExpr.target)); nodeStack.pop();
-+ nodeStack.push(v); v->value = static_cast<ExpressionAst*>(visitNode(node->v.NamedExpr.value)); nodeStack.pop();
-+ result = v;
-+ break;
-+ }
-+#endif
- default:
- qWarning() << "Unsupported _expr AST type: " << node->kind;
- Q_ASSERT(false);
-diff --git a/parser/python36.sdef b/parser/python38.sdef
-similarity index 82%
-rename from parser/python36.sdef
-rename to parser/python38.sdef
-index f53ff1c7..30d9f95a 100644
---- a/parser/python36.sdef
-+++ b/parser/python38.sdef
-@@ -73,20 +73,62 @@ if (node->v.Call.kwargs) {
- v->keywords.append(kwargs);
- nodeStack.pop();
- };;
--RULE_FOR _expr;KIND Num_kind;ACTIONS create|NumberAst;CODE v->isInt = PyLong_Check(node->v.Num.n); v->value = PyLong_AsLong(node->v.Num.n);;
--RULE_FOR _expr;KIND Str_kind;ACTIONS create|StringAst set|value$>s;;
-+RULE_FOR _expr;KIND Num_kind;ACTIONS create|NumberAst;BEFORE 3.8;CODE v->isInt = PyLong_Check(node->v.Num.n); v->value = PyLong_AsLong(node->v.Num.n);;
-+RULE_FOR _expr;KIND Str_kind;ACTIONS create|StringAst set|value$>s;BEFORE 3.8;;
- RULE_FOR _expr;KIND JoinedStr_kind;ACTIONS create|JoinedStringAst set|values=>ExpressionAst,values;SINCE 3.6;;
- RULE_FOR _expr;KIND FormattedValue_kind;ACTIONS create|FormattedValueAst set|value->ExpressionAst,value set|conversion:>conversion set|formatSpec->ExpressionAst,format_spec;SINCE 3.6;;
--RULE_FOR _expr;KIND Bytes_kind;ACTIONS create|BytesAst set|value$>s;;
-+RULE_FOR _expr;KIND Bytes_kind;ACTIONS create|BytesAst set|value$>s;BEFORE 3.8;;
- RULE_FOR _expr;KIND Attribute_kind;ACTIONS create|AttributeAst set|attribute~>attr set|value->ExpressionAst,value set|context*>Context,ctx;;
- RULE_FOR _expr;KIND Subscript_kind;ACTIONS create|SubscriptAst set|value->ExpressionAst,value set|slice->SliceAst,slice set|context*>Context,ctx;;
- RULE_FOR _expr;KIND Starred_kind;ACTIONS create|StarredAst set|value->ExpressionAst,value set|context*>Context,ctx;;
- RULE_FOR _expr;KIND Name_kind;ACTIONS create|NameAst set|identifier~>id set|context*>Context,ctx;;
- RULE_FOR _expr;KIND List_kind;ACTIONS create|ListAst set|elements=>ExpressionAst,elts set|context*>Context,ctx;;
- RULE_FOR _expr;KIND Tuple_kind;ACTIONS create|TupleAst set|elements=>ExpressionAst,elts set|context*>Context,ctx;;
--RULE_FOR _expr;KIND Ellipsis_kind;ACTIONS create|EllipsisAst;;
--RULE_FOR _expr;KIND NameConstant_kind;ACTIONS create|NameConstantAst set|value_>value;;
-+RULE_FOR _expr;KIND Ellipsis_kind;ACTIONS create|EllipsisAst;BEFORE 3.8;;
-+RULE_FOR _expr;KIND NameConstant_kind;ACTIONS create|NameConstantAst set|value_>value;BEFORE 3.8;;
- RULE_FOR _expr;KIND YieldFrom_kind;ACTIONS create|YieldFromAst set|value->ExpressionAst,value;;
-+RULE_FOR _expr;KIND Constant_kind;ACTIONS;SINCE 3.8;CODE
-+PyObject *value = node->v.Constant.value;
-+if (value == Py_None) {
-+ NameConstantAst* v = new NameConstantAst(parent());
-+ v->value = NameConstantAst::None;
-+ result = v;
-+}
-+else if (value == Py_True) {
-+ NameConstantAst* v = new NameConstantAst(parent());
-+ v->value = NameConstantAst::True;
-+ result = v;
-+}
-+else if (value == Py_False) {
-+ NameConstantAst* v = new NameConstantAst(parent());
-+ v->value = NameConstantAst::False;
-+ result = v;
-+}
-+else if (value->ob_type == &PyLong_Type) {
-+ NumberAst* v = new NumberAst(parent());
-+ v->isInt = true;
-+ v->value = PyLong_AsLong(value);
-+ result = v;
-+}
-+else if (value->ob_type == &PyFloat_Type || value->ob_type == &PyComplex_Type) {
-+ result = new NumberAst(parent());
-+}
-+else if (value->ob_type == &PyUnicode_Type) {
-+ StringAst* v = new StringAst(parent());
-+ v->value = PyUnicodeObjectToQString(value);
-+ result = v;
-+}
-+else if (value->ob_type == &PyBytes_Type) {
-+ result = new BytesAst(parent());
-+}
-+else if (value->ob_type == &PyEllipsis_Type) {
-+ result = new EllipsisAst(parent());
-+}
-+else {
-+ qWarning() << "Unhandled constant type: " << value->ob_type->tp_name;
-+ Q_ASSERT(false);
-+};;
-+RULE_FOR _expr;KIND NamedExpr_kind;ACTIONS create|AssignmentExpressionAst set|target->ExpressionAst,target set|value->ExpressionAst,value;SINCE 3.8;;
-
- RULE_FOR _slice;KIND Slice_kind;ACTIONS create|SliceAst set|lower->ExpressionAst,lower set|upper->ExpressionAst,upper set|step->ExpressionAst,step;;
- RULE_FOR _slice;KIND ExtSlice_kind;ACTIONS create|ExtendedSliceAst set|dims=>SliceAst,dims;;
-@@ -95,7 +137,8 @@ RULE_FOR _slice;KIND Index_kind;ACTIONS create|IndexAst set|value->ExpressionAst
-
- RULE_FOR _comprehension;KIND any;ACTIONS create|ComprehensionAst set|target->ExpressionAst,target set|iterator->ExpressionAst,iter set|conditions=>ExpressionAst,ifs;;
- RULE_FOR _excepthandler;KIND ExceptHandler_kind;ACTIONS create|ExceptionHandlerAst set|type->ExpressionAst,type set|name~>name set|body=>Ast,body;;
--RULE_FOR _arguments;KIND any;ACTIONS create|ArgumentsAst set|vararg->ArgAst,vararg set|kwarg->ArgAst,kwarg set|arguments=>ArgAst,args set|defaultValues=>ExpressionAst,defaults set|kwonlyargs=>ArgAst,kwonlyargs;;
-+RULE_FOR _arguments;KIND any;ACTIONS create|ArgumentsAst set|vararg->ArgAst,vararg set|kwarg->ArgAst,kwarg set|arguments=>ArgAst,args set|defaultValues=>ExpressionAst,defaults set|kwonlyargs=>ArgAst,kwonlyargs;BEFORE 3.8;;
-+RULE_FOR _arguments;KIND any;ACTIONS create|ArgumentsAst set|vararg->ArgAst,vararg set|kwarg->ArgAst,kwarg set|arguments=>ArgAst,args set|defaultValues=>ExpressionAst,defaults set|kwonlyargs=>ArgAst,kwonlyargs set|posonlyargs=>ArgAst,posonlyargs;SINCE 3.8;;
- RULE_FOR _arg;KIND any;ACTIONS create|ArgAst set|argumentName~>arg set|annotation->ExpressionAst,annotation;;
- RULE_FOR _keyword;KIND any;ACTIONS create|KeywordAst set|argumentName~>arg set|value->ExpressionAst,value;;
- RULE_FOR _alias;KIND any;ACTIONS create|AliasAst set|name~>name set|asName~>asname;;
-diff --git a/parser/tests/pyasttest.cpp b/parser/tests/pyasttest.cpp
-index 4fd5f4eb..c28f6fce 100644
---- a/parser/tests/pyasttest.cpp
-+++ b/parser/tests/pyasttest.cpp
-@@ -238,6 +238,11 @@ void PyAstTest::testExpressions_data()
- " **{ext: self.res_extension for ext in self._rc_extensions + self._mc_extensions},\n"
- "}";
- #endif
-+#if PYTHON_VERSION >= QT_VERSION_CHECK(3, 8, 0)
-+ QTest::newRow("assignment_expr_1") << "a = (b := 10)";
-+ QTest::newRow("assignment_expr_2") << "a = [q for z in (1, 2, 3) if (q := 2*z)]";
-+ QTest::newRow("positional_params") << "def foo(a, b, /, c, d, *, e): pass";
-+#endif
- }
-
- void PyAstTest::testCorrectedFuncRanges()
diff --git a/kde/patch/kdewebdev.patch b/kde/patch/kdewebdev.patch
deleted file mode 100644
index 4bbe65b..0000000
--- a/kde/patch/kdewebdev.patch
+++ /dev/null
@@ -1,6 +0,0 @@
-# Make it find tidy:
-cat $CWD/patch/kdewebdev/include-tidy.patch \
- | sed -e "s#/tmp/package-kdewebdev#${SLACK_KDE_BUILD_DIR}/$(echo ${module} |cut -f1 -d:)/package-kdewebdev#" \
- | patch -p0 --verbose \
- || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kdewebdev/include-tidy.patch b/kde/patch/kdewebdev/include-tidy.patch
deleted file mode 100644
index fd4de94..0000000
--- a/kde/patch/kdewebdev/include-tidy.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- klinkstatus/src/tidy/tidyx.h.orig 2009-09-03 09:55:38.886267704 -0500
-+++ klinkstatus/src/tidy/tidyx.h 2009-09-03 09:57:29.032269520 -0500
-@@ -48,8 +48,8 @@
- Created 2002-07-11 by Charles Reitzel
- */
-
--#include <tidy.h>
--#include <buffio.h>
-+#include "/tmp/package-kdewebdev/usr/include/tidy/tidy.h"
-+#include "/tmp/package-kdewebdev/usr/include/tidy/buffio.h"
-
- #include <config-tidy.h>
-
diff --git a/kde/patch/kholidays.patch b/kde/patch/kholidays.patch
deleted file mode 100644
index ec8ad80..0000000
--- a/kde/patch/kholidays.patch
+++ /dev/null
@@ -1,8 +0,0 @@
-# Fix for "error: isnan was not declared in this scope"
-# Fixed post Plasma 5.5.5.
-#cat $CWD/patch/kholidays/kholidays_isnan.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Revert depfreeze breaking merges (KF5_VERSION, cmake, PIM_VERSION).
-# Should be fixed in Applications > 16.12.3.
-#cat $CWD/patch/kholidays/kholidays_depfreeze_revert.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kholidays/kholidays_depfreeze_revert.patch b/kde/patch/kholidays/kholidays_depfreeze_revert.patch
deleted file mode 100644
index 316403a..0000000
--- a/kde/patch/kholidays/kholidays_depfreeze_revert.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-From 506bd08a6faf61c776beecb05f1acbe04223827a Mon Sep 17 00:00:00 2001
-From: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
-Date: Fri, 10 Mar 2017 13:33:10 +0100
-Subject: Revert depfreeze breaking merges (KF5_VERSION, cmake, PIM_VERSION)
-
----
- CMakeLists.txt | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 05164db..e0b67b8 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -1,28 +1,28 @@
--cmake_minimum_required(VERSION 3.0)
--set(PIM_VERSION "5.4.40")
-+cmake_minimum_required(VERSION 2.8.12)
-
--project(KHolidays VERSION ${PIM_VERSION})
-+project(KHolidays)
-
- # ECM setup
--set(KF5_VERSION "5.31.0")
-+set(KF5_VERSION "5.28.0")
- find_package(ECM ${KF5_VERSION} CONFIG REQUIRED)
- set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
-
- include(GenerateExportHeader)
- include(ECMGenerateHeaders)
- include(ECMGeneratePriFile)
--include(CMakePackageConfigHelpers)
-+include(ECMPackageConfigHelpers)
- include(ECMSetupVersion)
- include(ECMPoQmTools)
- include(FeatureSummary)
- include(KDEInstallDirs)
- include(KDECMakeSettings)
- include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
--include(ECMCoverageOption)
-+
-+set(PIM_VERSION "5.4.3")
-
- set(KHOLIDAYS_LIB_VERSION ${PIM_VERSION})
-
--ecm_setup_version(PROJECT VARIABLE_PREFIX KHOLIDAYS
-+ecm_setup_version(${KHOLIDAYS_LIB_VERSION} VARIABLE_PREFIX KHOLIDAYS
- VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/kholidays_version.h"
- PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5HolidaysConfigVersion.cmake"
- SOVERSION 5
-@@ -50,7 +50,7 @@ endif()
- ########### CMake Config Files ###########
- set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5Holidays")
-
--configure_package_config_file(
-+ecm_configure_package_config_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/KF5HolidaysConfig.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/KF5HolidaysConfig.cmake"
- INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
---
-cgit v0.11.2
-
diff --git a/kde/patch/kholidays/kholidays_isnan.patch b/kde/patch/kholidays/kholidays_isnan.patch
deleted file mode 100644
index 55e79aa..0000000
--- a/kde/patch/kholidays/kholidays_isnan.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Milian Wolff <milian.wolff@kdab.com>
-Date: Mon, 07 Mar 2016 09:58:37 +0000
-Subject: Fix compile with clang: isnan is in the std namespace when including cmath.
-X-Git-Url: http://quickgit.kde.org/?p=kholidays.git&a=commitdiff&h=488aa158f7a0a99604a13a897a11388c02f8d39e
----
-Fix compile with clang: isnan is in the std namespace when including cmath.
----
-
-
---- a/src/sunriseset.cpp
-+++ b/src/sunriseset.cpp
-@@ -180,7 +180,7 @@
- double hourAngle = calcHourAngleSunrise(latitude, solarDec);
- double delta = longitude + radToDeg(hourAngle);
- QTime timeUTC(0, 0);
-- if (isnan(delta))
-+ if (std::isnan(delta))
- return timeUTC;
- timeUTC = timeUTC.addSecs((720 - (4.0 * delta) - eqTime) * 60);
- return QTime(timeUTC.hour(),
-@@ -199,7 +199,7 @@
- double hourAngle = -calcHourAngleSunrise(latitude, solarDec);
- double delta = longitude + radToDeg(hourAngle);
- QTime timeUTC(0, 0);
-- if (isnan(delta))
-+ if (std::isnan(delta))
- return timeUTC;
- timeUTC = timeUTC.addSecs((720 - (4.0 * delta) - eqTime) * 60);
- return QTime(timeUTC.hour(),
-
diff --git a/kde/patch/kinfocenter.patch b/kde/patch/kinfocenter.patch
index 5a65977..b57d434 100644
--- a/kde/patch/kinfocenter.patch
+++ b/kde/patch/kinfocenter.patch
@@ -1,3 +1,2 @@
# Fix linking error :
cat $CWD/patch/kinfocenter/kinfocenter_libpci.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kio.patch b/kde/patch/kio.patch
deleted file mode 100644
index e943096..0000000
--- a/kde/patch/kio.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-# Add search paths for kdelibs4 documentation to khelpcenter.
-# Patch taken from kubuntu:
-#cat $CWD/patch/kio/kio_kdelibs4_docpatch.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# KDEBUG #350769 (fixed in Frameworks 5.16.0):
-# Move konqpopupmenuplugin.desktop from kde-baseapps (kdelibs4 based)
-# to kio (kf5 based) to make service menus visible in dolphin (kf5 based):
-#cat $CWD/patch/kio/kio_dolphin_servicemenus.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Qt >= 5.9.3 breaks creation of folders in kio, which affects e.g.
-# Dolphin and Plasma Folder View.
-# Fixed in KIO 5.41:
-#cat $CWD/patch/kio/kio_fix_url_setpath.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix crash when accessing help://
-# Fixed in KIO 5.52:
-#cat $CWD/patch/kio/kio_KDEBUG_399709.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kio/kio_KDEBUG_399709.patch b/kde/patch/kio/kio_KDEBUG_399709.patch
deleted file mode 100644
index 0a8cfdc..0000000
--- a/kde/patch/kio/kio_KDEBUG_399709.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From cf3b0d102855a4a90db3fb65a99e0009fcdd3755 Mon Sep 17 00:00:00 2001
-From: Michael Pyne <mpyne@kde.org>
-Date: Sat, 13 Oct 2018 19:09:50 -0400
-Subject: kio_help: Fix crash in QCoreApplication when accessing help://.
-
-A recent commit d428fc8e6447ede81f1e1911d0b66b39265672f3 removed old
-custom crash handling code in favor of KCrash. But this actually adds a
-dependency on there being a valid QCoreApplication object.
-
-I took from the example of the similar kio_file to simply create the
-QCoreApplication here.
-
-BUG:399709
-
-Differential Revision: https://phabricator.kde.org/D16189
----
- src/ioslaves/help/main.cpp | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/src/ioslaves/help/main.cpp b/src/ioslaves/help/main.cpp
-index f09987a..f800a9d 100644
---- a/src/ioslaves/help/main.cpp
-+++ b/src/ioslaves/help/main.cpp
-@@ -10,6 +10,7 @@ extern "C" int xmlLoadExtDtdDefaultValue;
-
- #include <QDebug>
-
-+#include <QCoreApplication>
- #include <QString>
-
- #include <stdlib.h>
-@@ -40,6 +41,9 @@ extern "C"
- {
- Q_DECL_EXPORT int kdemain(int argc, char **argv)
- {
-+ QCoreApplication app(argc, argv); // needed for KCrash
-+ app.setApplicationName(QStringLiteral("kio_help"));
-+
- KDocTools::setupStandardDirs();
-
- //qDebug() << "Starting " << getpid();
---
-cgit v0.11.2
-
diff --git a/kde/patch/kio/kio_dolphin_servicemenus.patch b/kde/patch/kio/kio_dolphin_servicemenus.patch
deleted file mode 100644
index 811bfea..0000000
--- a/kde/patch/kio/kio_dolphin_servicemenus.patch
+++ /dev/null
@@ -1,126 +0,0 @@
-From: Frank Reininghaus <frank78ac@googlemail.com>
-Date: Sat, 03 Oct 2015 07:26:33 +0000
-Subject: Move konqpopupmenuplugin.desktop from kde-baseapps to kio
-X-Git-Url: http://quickgit.kde.org/?p=kio.git&a=commitdiff&h=4b24b70c93523c5bc56c90c04a5a666331e96a1b
----
-Move konqpopupmenuplugin.desktop from kde-baseapps to kio
-
-This ensures that service menu entries are shown if the unreleased
-KF5-based version of lib/konq from kde-baseapps is not installed
-
-It would be great if the translations from lib/konq in kde-baseapps
-could be merged. Thanks!
-
-BUG: 350769
-Change-Id: Id2c9a73ce95a6c8b704f3a1000c0292d1864a352
-REVIEW: 125425
-CCMAIL: luigi.toscano@tiscali.it
----
-Slightly modified by Eric Hameleers <alien@slackware.com>
----
-diff -uarN kio-5.15.0.orig/src/widgets/CMakeLists.txt kio-5.15.0/src/widgets/CMakeLists.txt
---- kio-5.15.0.orig/src/widgets/CMakeLists.txt 2015-10-05 10:11:41.000000000 +0200
-+++ kio-5.15.0/src/widgets/CMakeLists.txt 2015-10-18 14:14:15.461196097 +0200
-@@ -184,6 +184,7 @@
- kfileitemactionplugin.desktop
- kpropertiesdialogplugin.desktop
- kurifilterplugin.desktop
-+ konqpopupmenuplugin.desktop
- kiodndpopupmenuplugin.desktop
- DESTINATION ${KDE_INSTALL_KSERVICETYPES5DIR} )
-
-diff -uarN kio-5.15.0.orig/src/widgets/konqpopupmenuplugin.desktop kio-5.15.0/src/widgets/konqpopupmenuplugin.desktop
---- kio-5.15.0.orig/src/widgets/konqpopupmenuplugin.desktop 1970-01-01 01:00:00.000000000 +0100
-+++ kio-5.15.0/src/widgets/konqpopupmenuplugin.desktop 2015-10-18 14:17:09.078193339 +0200
-@@ -0,0 +1,89 @@
-+[Desktop Entry]
-+Type=ServiceType
-+X-KDE-ServiceType=KonqPopupMenu/Plugin
-+Comment=Plugin for the Konqueror Popup Menu
-+Comment[af]=Inplak vir die Konqueror Opspring Kieslys
-+Comment[ar]=ملحق لقائمة كونكيورر المنبثقة
-+Comment[as]=Konqueror প'প-আপ তালিকাৰ কাৰণে পà§à¦²à¦¾à¦—-ইন
-+Comment[ast]=Complementu pal menú emerxente de Konqueror
-+Comment[be]=Утулка Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð»Ñ‹ÑžÐ½Ð°Ð³Ð° меню Konqueror
-+Comment[be@latin]=Plugin dla vypÅ‚yÅ­noha menu prahramy „Konquerorâ€
-+Comment[bg]=ПриÑтавка за контекÑтното меню на браузъра
-+Comment[bn]=কনকরার পপ-আপ মেনà§à¦° জনà§à¦¯ পà§à¦²à¦¾à¦—-ইন
-+Comment[bn_IN]=Konqueror পপ-আপ মেনà§à¦° পà§à¦²à¦¾à¦—-ইন
-+Comment[bs]=PrikljuÄak za K‑osvajaÄev iskaÄući meni
-+Comment[ca]=Connector per al menú emergent del Konqueror
-+Comment[ca@valencia]=Connector per al menú emergent del Konqueror
-+Comment[cs]=Modul pro kontextovou nabídku Konqueroru
-+Comment[csb]=Wtëkôcz do menu (òtmëkô knąpą mëszë) Konquerora
-+Comment[cy]=Ategyn i Naidlen Konqueror
-+Comment[da]=Plugin for Konquerors popop-menu
-+Comment[de]=Erweiterung für das Aufklapp-Menü von Konqueror
-+Comment[el]=ΠÏόσθετο για το αναδυόμενο Î¼ÎµÎ½Î¿Ï Ï„Î¿Ï… Konqueror
-+Comment[en_GB]=Plugin for the Konqueror Popup Menu
-+Comment[eo]=Kromprogrameto por la spruĉmenuo de Konkeranto
-+Comment[es]=Complemento para el menú emergente de Konqueror
-+Comment[et]=Konquerori hüpikmenüü plugin
-+Comment[eu]=Konquerorren laster-menuetarako plugina
-+Comment[fa]=وصله برای گزینگان بالاپر Konqueror
-+Comment[fi]=Konquerorin ponnahdusvalikkoliitännäinen
-+Comment[fr]=Module externe pour le menu contextuel de Konqueror
-+Comment[fy]=Plugin foar Konqueror's fluesmenu
-+Comment[ga]=Breiseán le haghaidh Roghchláir Aníos Konqueror
-+Comment[gl]=Complemento para o menú contextual de Konqueror
-+Comment[gu]=કોનà«àª•àª°àª° પોપઅપ મેનૠમાટે પà«àª²àª—ઇન
-+Comment[he]=תוסף לתפריט המוקפץ של Konqueror
-+Comment[hi]=कॉनà¥à¤•à¤°à¤° पॉपअप मेनà¥à¤¯à¥‚ के लिठपà¥à¤²à¤—इन
-+Comment[hne]=कानà¥à¤•à¤°à¤° पापअप मेनà¥à¤¯à¥‚ बर पà¥à¤²à¤—इन
-+Comment[hr]=Dodatak za Konqueror pop-up izbornik
-+Comment[hsb]=zašćěpka za popup-meni w konqueroru
-+Comment[hu]=Bővítőmodul a Konqueror felbukkanó menühöz
-+Comment[ia]=Plugin pro le Menu de Popup de Konqueror
-+Comment[id]=Plugin untuk Menu Popup Konqueror
-+Comment[is]=Ãforrit fyrir sprettvalmynd Konqueror Popup Menu
-+Comment[it]=Estensione per il menu a comparsa di Konqueror
-+Comment[ja]=Konqueror ãƒãƒƒãƒ—アップメニューã®ãƒ—ラグイン
-+Comment[ka]=Konqueror-ის ჩáƒáƒ›áƒáƒ¨áƒšáƒáƒ“ი მენიუს პლáƒáƒ’ინი
-+Comment[kk]=Konqueror баптау қалқымалы мәзір плагині
-+Comment[km]=កម្មវិធី​ជំនួយ​សម្រាប់​ម៉ឺនុយ​លáŸáž…​ឡើង​របស់​ Konqueror
-+Comment[kn]=ಕಾಂಕರೠಪà³à²Ÿà²¿à²•à³† (ಪಾಪಪà³) ಪರಿವಿಡಿಗೆ ಮಿಳಿತಾನà³à²µà²¯ (ಪà³à²²à²—ಿನà³)
-+Comment[ko]=Konqueror íŒì—… 메뉴 플러그ì¸
-+Comment[ku]=Pêveka ji bo Pêşeka Hilpekîn a Konquerorê
-+Comment[lt]=Priedas pasirodanÄiam Konqueror meniu
-+Comment[lv]=Konqueror izlecoÅ¡Äs izvÄ“lnes spraudnis
-+Comment[mai]=कानà¥à¤•à¤°à¤° पापअप मेनू क' लेल पà¥à¤²à¤—इन
-+Comment[mk]=Приклучок за контекÑтното мени на Konqueror
-+Comment[ml]=കോണàµâ€à´•àµà´µà´±à´±à´¿à´¨àµà´±àµ† പൊങàµà´™à´¿à´µà´°àµà´¨àµà´¨ മെനàµà´µà´¿à´¨àµà´³àµà´³ സംയോജകം
-+Comment[mr]=कॉनà¥à¤•à¤°à¤° पॉपअप मेनà¥à¤¯à¥‚ करिता पà¥à¤²à¤—इन
-+Comment[ms]=Plugin untuk Menu Popuo Konqueror
-+Comment[nds]=Plugin för dat Konqueror-Opdukmenü
-+Comment[ne]=कनà¥à¤•à¥à¤µà¥‡à¤°à¤° पपअप मेनà¥à¤•à¤¾ लागि पà¥à¤²à¤—इन
-+Comment[nl]=Plugin voor Konqueror's contextmenu
-+Comment[or]=Konqueror ପପଅପ ତାଲିକା ପାଇଠପà­à¬²à¬—ଇନ
-+Comment[pa]=ਕੋਨਕਿਉਰੋਰ ਪਾਪਅੱਪ ਮੇਨੂ ਲਈ ਪਲੱਗਇਨ
-+Comment[pl]=Wtyczka do menu (otwieranego przyciskiem myszy) Konquerora
-+Comment[pt]='Plugin' para o Menu do Konqueror
-+Comment[pt_BR]=Plugin do Konqueror para menus de contexto
-+Comment[ro]=Extensie pentru meniul popup Konqueror
-+Comment[ru]=РаÑширение контекÑтного меню Konqueror
-+Comment[si]=Konqueror පොප් අප් මෙනුව සඳහ෠ප්ලගිනය
-+Comment[sk]=Modul pre kontextové menu Konquerora
-+Comment[sl]=Vstavek za Konquerorjev pojavni meni
-+Comment[sr]=Прикључак за К‑оÑвајачев иÑкачући мени
-+Comment[sr@ijekavian]=Прикључак за К‑оÑвајачев иÑкачући мени
-+Comment[sr@ijekavianlatin]=PrikljuÄak za K‑osvajaÄev iskaÄući meni
-+Comment[sr@latin]=PrikljuÄak za K‑osvajaÄev iskaÄući meni
-+Comment[sv]=Insticksprogram för Konquerors popupmeny
-+Comment[ta]=கானà¯à®•à¯Šà®°à®°à¯ தோனà¯à®±à¯à®®à¯ படà¯à®Ÿà®¿à®•à¯à®•à®¾à®© செரà¯à®•à®²à¯à®•à®³à¯
-+Comment[te]=Konqueror పాపà±à°…పౠమెనూకొరకౠపà±à°²à°—à±à°‡à°¨à±
-+Comment[tg]=Плагин барои менюи пайдошавии Konqueror
-+Comment[th]=ส่วนเสริมà¸à¸²à¸£à¸—ำงานสำหรับเมนูผุดของคอนเควอร์เรอร์
-+Comment[tr]=Konqueror Açılabilir Menüsü İçin Eklenti
-+Comment[ug]=Konqueror قاڭقىش تىزىملىكىنىڭ قىستۇرمىسى
-+Comment[uk]=Додаток контекÑтного меню Konqueror
-+Comment[vi]=Trình bổ sung cho Trình đơn Bật lên của Konqueror
-+Comment[wa]=Tchôke-divins po l' aspitant menu di Konqueror
-+Comment[xh]=Iplagi efakiweyo ye Konqueror ye Popup Menu
-+Comment[x-test]=xxPlugin for the Konqueror Popup Menuxx
-+Comment[zh_CN]=Konqueror 弹出èœå•æ’件
-+Comment[zh_TW]=Konqueror 彈出å¼é¸å–®çš„外掛程å¼
-
-
diff --git a/kde/patch/kio/kio_fix_url_setpath.patch b/kde/patch/kio/kio_fix_url_setpath.patch
deleted file mode 100644
index d9cf740..0000000
--- a/kde/patch/kio/kio_fix_url_setpath.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-From 2353119aae8f03565bc7779ed1d597d266f5afda Mon Sep 17 00:00:00 2001
-From: Elvis Angelaccio <elvis.angelaccio@kde.org>
-Date: Thu, 16 Nov 2017 10:41:19 +0100
-Subject: Fix KIO::mkpath with qtbase 5.10 beta 4
-
-Summary:
-The latest Qt 5.10 beta includes [1] which breaks a bunch of unit tests,
-since `url.setPath("//foo")` will now result in an invalid (empty) QUrl.
-
-This patch fixes the KIO::mkpath() case.
-
-[1]: http://code.qt.io/cgit/qt/qtbase.git/commit/?id=f62768d046528636789f901ac79e2cfa1843a7b7
-
-Test Plan:
-
-* I can now create folders from dolphin and plasma.
-* fileundomanagertest and mkpathjobtest no longer fail
-
-Reviewers: #frameworks, dfaure
-
-Tags: #frameworks
-
-Differential Revision: https://phabricator.kde.org/D8836
----
- src/core/mkpathjob.cpp | 17 ++++++++++++++---
- 1 file changed, 14 insertions(+), 3 deletions(-)
-
-diff --git a/src/core/mkpathjob.cpp b/src/core/mkpathjob.cpp
-index bff46ca..a177805 100644
---- a/src/core/mkpathjob.cpp
-+++ b/src/core/mkpathjob.cpp
-@@ -43,8 +43,13 @@ public:
- m_url.setPath(QStringLiteral("/"));
- int i = 0;
- for (; i < basePathComponents.count() && i < m_pathComponents.count(); ++i) {
-- if (m_pathComponents.at(i) == basePathComponents.at(i)) {
-- m_url.setPath(m_url.path() + '/' + m_pathComponents.at(i));
-+ const QString pathComponent = m_pathComponents.at(i);
-+ if (pathComponent == basePathComponents.at(i)) {
-+ if (m_url.path() == QLatin1Char('/')) {
-+ m_url.setPath(m_url.path() + pathComponent);
-+ } else {
-+ m_url.setPath(m_url.path() + '/' + pathComponent);
-+ }
- } else {
- break;
- }
-@@ -57,7 +62,13 @@ public:
- if (m_url.isLocalFile()) {
- i = 0;
- for (; i < m_pathComponents.count(); ++i) {
-- QString testDir = m_url.toLocalFile() + '/' + m_pathComponents.at(i);
-+ const QString localFile = m_url.toLocalFile();
-+ QString testDir;
-+ if (localFile == QLatin1Char('/')) {
-+ testDir = localFile + m_pathComponents.at(i);
-+ } else {
-+ testDir = localFile + '/' + m_pathComponents.at(i);
-+ }
- if (QFileInfo(testDir).isDir()) {
- m_url.setPath(testDir);
- } else {
---
-cgit v0.11.2
-
diff --git a/kde/patch/kio/kio_kdelibs4_docpatch.patch b/kde/patch/kio/kio_kdelibs4_docpatch.patch
deleted file mode 100644
index 9549d31..0000000
--- a/kde/patch/kio/kio_kdelibs4_docpatch.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Description: add search paths for kdelibs4 docs
-Author: Jonathan Riddell
-Origin: me
-Forwarded: no, kdelibs4 path was set in debian/kubuntu packages
-Applied-Upstream: nope
-Reviewed-by: Jonathan Riddell
-Last-Update: 2015-03-01
----
-This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
---- kio/src/ioslaves/help/kio_help.cpp 2015-03-07 15:45:21.000000000 +0100
-+++ kio/src/ioslaves/help/kio_help.cpp 2015-04-02 17:15:39.687828131 +0200
-@@ -49,7 +49,8 @@
- QStringList search;
-
- // assemble the local search paths
-- const QStringList localDoc = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "doc/HTML", QStandardPaths::LocateDirectory);
-+ QStringList localDoc = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "doc/HTML", QStandardPaths::LocateDirectory);
-+ localDoc << QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "doc/kde/HTML", QStandardPaths::LocateDirectory);
-
- QStringList langs = QLocale().uiLanguages();
- langs.append("en");
-
diff --git a/kde/patch/kirigami2.patch b/kde/patch/kirigami2.patch
deleted file mode 100644
index 4dc70bb..0000000
--- a/kde/patch/kirigami2.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix crashes in systemsettings5 when visiting the second icon.
-# Should be fixed post kirigami2 5.64.0):
-#cat $CWD/patch/kirigami2/kirigami_iconview_crash.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kirigami2/kirigami_iconview_crash.patch b/kde/patch/kirigami2/kirigami_iconview_crash.patch
deleted file mode 100644
index 79a35ed..0000000
--- a/kde/patch/kirigami2/kirigami_iconview_crash.patch
+++ /dev/null
@@ -1,143 +0,0 @@
-diff --git a/src/columnview.cpp b/src/columnview.cpp
---- a/src/columnview.cpp
-+++ b/src/columnview.cpp
-@@ -37,23 +37,37 @@
- public:
- QmlComponentsPoolSingleton()
- {}
--
-- QmlComponentsPool self;
-+ static QmlComponentsPool *instance(QQmlEngine *engine);
-+private:
-+ QHash<QQmlEngine*, QmlComponentsPool*> m_instances;
- };
-
- Q_GLOBAL_STATIC(QmlComponentsPoolSingleton, privateQmlComponentsPoolSelf)
-
-
--QmlComponentsPool::QmlComponentsPool(QObject *parent)
-- : QObject(parent)
--{}
--
--void QmlComponentsPool::initialize(QQmlEngine *engine)
-+QmlComponentsPool *QmlComponentsPoolSingleton::instance(QQmlEngine *engine)
- {
-- if (!engine || m_instance) {
-- return;
-+ Q_ASSERT(engine);
-+ auto componentPool = privateQmlComponentsPoolSelf->m_instances.value(engine);
-+
-+ if (componentPool) {
-+ return componentPool;
- }
-
-+ componentPool = new QmlComponentsPool(engine);
-+
-+ QObject::connect(componentPool, &QObject::destroyed, [engine]() {
-+ if (privateQmlComponentsPoolSelf) {
-+ privateQmlComponentsPoolSelf->m_instances.remove(engine);
-+ }
-+ });
-+ privateQmlComponentsPoolSelf->m_instances[engine] = componentPool;
-+ return componentPool;
-+}
-+
-+QmlComponentsPool::QmlComponentsPool(QQmlEngine *engine)
-+ : QObject(engine)
-+{
- QQmlComponent *component = new QQmlComponent(engine, this);
-
- component->setData(QByteArrayLiteral("import QtQuick 2.7\n"
-@@ -572,12 +586,12 @@
- QQuickItem *separatorItem = m_separators.value(item);
-
- if (!separatorItem) {
-- separatorItem = qobject_cast<QQuickItem *>(privateQmlComponentsPoolSelf->self.m_separatorComponent->beginCreate(QQmlEngine::contextForObject(item)));
-+ separatorItem = qobject_cast<QQuickItem *>(privateQmlComponentsPoolSelf->instance(qmlEngine(item))->m_separatorComponent->beginCreate(QQmlEngine::contextForObject(item)));
- if (separatorItem) {
- separatorItem->setParentItem(item);
- separatorItem->setZ(9999);
- separatorItem->setProperty("column", QVariant::fromValue(item));
-- privateQmlComponentsPoolSelf->self.m_separatorComponent->completeCreate();
-+ QmlComponentsPoolSingleton::instance(qmlEngine(item))->m_separatorComponent->completeCreate();
- m_separators[item] = separatorItem;
- }
- }
-@@ -590,12 +604,12 @@
- QQuickItem *separatorItem = m_rightSeparators.value(item);
-
- if (!separatorItem) {
-- separatorItem = qobject_cast<QQuickItem *>(privateQmlComponentsPoolSelf->self.m_rightSeparatorComponent->beginCreate(QQmlEngine::contextForObject(item)));
-+ separatorItem = qobject_cast<QQuickItem *>(QmlComponentsPoolSingleton::instance(qmlEngine(item))->m_rightSeparatorComponent->beginCreate(QQmlEngine::contextForObject(item)));
- if (separatorItem) {
- separatorItem->setParentItem(item);
- separatorItem->setZ(9999);
- separatorItem->setProperty("column", QVariant::fromValue(item));
-- privateQmlComponentsPoolSelf->self.m_rightSeparatorComponent->completeCreate();
-+ QmlComponentsPoolSingleton::instance(qmlEngine(item))->m_rightSeparatorComponent->completeCreate();
- m_rightSeparators[item] = separatorItem;
- }
- }
-@@ -759,7 +773,7 @@
- void ColumnView::setColumnWidth(qreal width)
- {
- // Always forget the internal binding when the user sets anything, even the same value
-- disconnect(&privateQmlComponentsPoolSelf->self, &QmlComponentsPool::gridUnitChanged, this, nullptr);
-+ disconnect(QmlComponentsPoolSingleton::instance(qmlEngine(this)), &QmlComponentsPool::gridUnitChanged, this, nullptr);
-
- if (m_contentItem->m_columnWidth == width) {
- return;
-@@ -902,7 +916,7 @@
-
- void ColumnView::setScrollDuration(int duration)
- {
-- disconnect(&privateQmlComponentsPoolSelf->self, &QmlComponentsPool::longDurationChanged, this, nullptr);
-+ disconnect(QmlComponentsPoolSingleton::instance(qmlEngine(this)), &QmlComponentsPool::longDurationChanged, this, nullptr);
-
- if (m_contentItem->m_slideAnim->duration() == duration) {
- return;
-@@ -1392,22 +1406,20 @@
-
- void ColumnView::classBegin()
- {
-- privateQmlComponentsPoolSelf->self.initialize(qmlEngine(this));
--
- auto syncColumnWidth = [this]() {
-- m_contentItem->m_columnWidth = privateQmlComponentsPoolSelf->self.m_units->property("gridUnit").toInt() * 20;
-+ m_contentItem->m_columnWidth = privateQmlComponentsPoolSelf->instance(qmlEngine(this))->m_units->property("gridUnit").toInt() * 20;
- emit columnWidthChanged();
- };
-
-- connect(&privateQmlComponentsPoolSelf->self, &QmlComponentsPool::gridUnitChanged, this, syncColumnWidth);
-+ connect(QmlComponentsPoolSingleton::instance(qmlEngine(this)), &QmlComponentsPool::gridUnitChanged, this, syncColumnWidth);
- syncColumnWidth();
-
- auto syncDuration = [this]() {
-- m_contentItem->m_slideAnim->setDuration(privateQmlComponentsPoolSelf->self.m_units->property("longDuration").toInt());
-+ m_contentItem->m_slideAnim->setDuration(QmlComponentsPoolSingleton::instance(qmlEngine(this))->m_units->property("longDuration").toInt());
- emit scrollDurationChanged();
- };
-
-- connect(&privateQmlComponentsPoolSelf->self, &QmlComponentsPool::longDurationChanged, this, syncDuration);
-+ connect(QmlComponentsPoolSingleton::instance(qmlEngine(this)), &QmlComponentsPool::longDurationChanged, this, syncDuration);
- syncDuration();
-
- QQuickItem::classBegin();
-diff --git a/src/columnview_p.h b/src/columnview_p.h
---- a/src/columnview_p.h
-+++ b/src/columnview_p.h
-@@ -32,11 +32,9 @@
- Q_OBJECT
-
- public:
-- QmlComponentsPool(QObject *parent = nullptr);
-+ QmlComponentsPool(QQmlEngine *engine);
- ~QmlComponentsPool();
-
-- void initialize(QQmlEngine *engine);
--
- QQmlComponent *m_separatorComponent = nullptr;
- QQmlComponent *m_rightSeparatorComponent = nullptr;
- QObject *m_units = nullptr;
-
-
diff --git a/kde/patch/kmail.patch b/kde/patch/kmail.patch
deleted file mode 100644
index 0cbf394..0000000
--- a/kde/patch/kmail.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix kontact crash on logout (KDEBUG 404881).
-# Fixed post 19.04.2.
-#cat $CWD/patch/kmail/kmail_kontact_kdebug_404881.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kmail/kmail_kontact_kdebug_404881.patch b/kde/patch/kmail/kmail_kontact_kdebug_404881.patch
deleted file mode 100644
index f2704aa..0000000
--- a/kde/patch/kmail/kmail_kontact_kdebug_404881.patch
+++ /dev/null
@@ -1,75 +0,0 @@
-From 97e165dcf5a851ee10526631d24f9af7736da2e6 Mon Sep 17 00:00:00 2001
-From: David Faure <faure@kde.org>
-Date: Thu, 6 Jun 2019 18:10:42 +0200
-Subject: Fix kontact crash on logout.
-
-Summary:
-KMail was creating new Akonadi jobs during mainwindow destruction,
-due to not testing the bool in GuiActivateEvent.
-
-Same bt in bug 404881, apparently quitting from the akregator tray icon
-[which quits all of kontact... separate issue...] gave the same crash.
-
-BUG: 404881
-FIXED-IN: 19.04.2
-
-Test Plan: Run kontact, logout. Hello Drkonqi.
-
-Reviewers: mlaurent, winterz
-
-Reviewed By: mlaurent, winterz
-
-Subscribers: kde-pim
-
-Tags: #kde_pim
-
-Differential Revision: https://phabricator.kde.org/D21626
----
- src/kmail_part.cpp | 23 ++++++++++++-----------
- 1 file changed, 12 insertions(+), 11 deletions(-)
-
-diff --git a/src/kmail_part.cpp b/src/kmail_part.cpp
-index 703a1ee..96c4c07 100644
---- a/src/kmail_part.cpp
-+++ b/src/kmail_part.cpp
-@@ -33,6 +33,7 @@
-
- #include <QVBoxLayout>
-
-+#include <KParts/GUIActivateEvent>
- #include <kparts/statusbarextension.h>
- #include <kparts/mainwindow.h>
- #include <kpluginfactory.h>
-@@ -129,18 +130,18 @@ bool KMailPart::openFile()
- void KMailPart::guiActivateEvent(KParts::GUIActivateEvent *e)
- {
- KParts::ReadOnlyPart::guiActivateEvent(e);
-- mainWidget->initializeFilterActions();
-- mainWidget->tagActionManager()->createActions();
-- mainWidget->folderShortcutActionManager()->createActions();
-- mainWidget->populateMessageListStatusFilterCombo();
-- mainWidget->initializePluginActions();
-- /*
-- FIXME it doesn't work when we switch component.
-- const QString title = mainWidget->fullCollectionPath();
-- if (!title.isEmpty()) {
-- Q_EMIT setWindowCaption(title);
-+ if (e->activated()) {
-+ mainWidget->initializeFilterActions();
-+ mainWidget->tagActionManager()->createActions();
-+ mainWidget->folderShortcutActionManager()->createActions();
-+ mainWidget->populateMessageListStatusFilterCombo();
-+ mainWidget->initializePluginActions();
-+
-+ const QString title = mainWidget->fullCollectionPath();
-+ if (!title.isEmpty()) {
-+ Q_EMIT setWindowCaption(title);
-+ }
- }
-- */
- }
-
- void KMailPart::exit()
---
-cgit v1.1
-
diff --git a/kde/patch/kmplot.patch b/kde/patch/kmplot.patch
deleted file mode 100644
index aee60a5..0000000
--- a/kde/patch/kmplot.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix for "error: isnan was not declared in this scope"
-#cat $CWD/patch/kmplot/kmplot_isnan.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kmplot/kmplot_isnan.patch b/kde/patch/kmplot/kmplot_isnan.patch
deleted file mode 100644
index 691ff89..0000000
--- a/kde/patch/kmplot/kmplot_isnan.patch
+++ /dev/null
@@ -1,42 +0,0 @@
---- kmplot-15.12.3/kmplot/view.cpp.0 2016-03-11 21:19:48.011194225 +0000
-+++ kmplot-15.12.3/kmplot/view.cpp 2016-03-11 21:20:37.341056493 +0000
-@@ -476,7 +476,7 @@
- double x = pixel.x();
- double y = pixel.y();
-
-- if ( isnan(x) )
-+ if ( std::isnan(x) )
- {
- xclipflg = true;
- x = pixelIfNaN.x();
-@@ -496,14 +496,14 @@
- }
- else
- {
-- if ( isinf(x) == -1 )
-+ if ( std::isinf(x) == -1 )
- x = 0;
-
-- else if ( isinf(x) == 1 )
-+ else if ( std::isinf(x) == 1 )
- x = m_clipRect.right();
- }
-
-- if ( isnan(y) )
-+ if ( std::isnan(y) )
- {
- yclipflg = true;
- y = pixelIfNaN.y();
-@@ -523,10 +523,10 @@
- }
- else
- {
-- if ( isinf(y) == -1 )
-+ if ( std::isinf(y) == -1 )
- y = 0;
-
-- else if ( isinf(y) == 1 )
-+ else if ( std::isinf(y) == 1 )
- y = m_clipRect.bottom();
- }
-
diff --git a/kde/patch/konsole.patch b/kde/patch/konsole.patch
deleted file mode 100644
index 36e64e6..0000000
--- a/kde/patch/konsole.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-# Set TERM to 'konsole' instead of the default 'xterm-256color'
-# to prevent garbled text under certain conditions:
-# Reverted to default behaviour in 18.04.0 after Slackware did the same:
-#cat $CWD/patch/konsole/konsole.term.is.konsole.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix rendering of cursor if non-default theme is selected
-# (fixed post 18.12.3):
-#cat $CWD/patch/konsole/konsole.cursor.antialias.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/konsole/konsole.cursor.antialias.patch b/kde/patch/konsole/konsole.cursor.antialias.patch
deleted file mode 100644
index 596ccaa..0000000
--- a/kde/patch/konsole/konsole.cursor.antialias.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From eccfb1f62bbf67ebffee11e241bd05757b826ff1 Mon Sep 17 00:00:00 2001
-From: Wolfgang Bauer <wbauer@tmo.at>
-Date: Mon, 4 Mar 2019 09:59:45 -0500
-Subject: [PATCH] Fix ibeam and underline cursor rendering
-
-Summary:
-Since anti-aliasing was enabled in the painter, coordinates need to
-be shifted half a pixel so that they align with the pixel grid,
-otherwise the result gets "blurred" due to the anti-aliasing.
-And as parts of the blurred shape leak outside the cursor rectangle,
-this also leaves artifacts when the cursor moves or blinks as these
-parts are not cleared.
-
-This is basically the same as commit
-e7085310d6d594823d0ed491fa8bdbd99dec4932 for the
-standard block cursor.
-
-BUG: 402589
-
-Test Plan:
-- Switch cursor shape to "I-Beam" or "Underline" in the "Advanced"
-profile settings
-
-The cursors are a single line again now, before they were blurred by
-anti-aliasing.
-
-Screenshots:
-Before:
-{F6656366}
-{F6656370}
-
-After:
-{F6656371}
-{F6656373}
-
-Also, there are no more artifacts when the cursor is moved or
-cursor blinking is enabled.
-
-Reviewers: #konsole, hindenburg
-
-Reviewed By: #konsole, hindenburg
-
-Subscribers: hindenburg, konsole-devel
-
-Tags: #konsole
-
-Differential Revision: https://phabricator.kde.org/D19513
----
- src/TerminalDisplay.cpp | 18 ++++++++++--------
- 1 file changed, 10 insertions(+), 8 deletions(-)
-
-diff --git a/src/TerminalDisplay.cpp b/src/TerminalDisplay.cpp
-index 543b8970..397422c4 100644
---- a/src/TerminalDisplay.cpp
-+++ b/src/TerminalDisplay.cpp
-@@ -716,16 +716,18 @@ void TerminalDisplay::drawCursor(QPainter& painter,
- }
- }
- } else if (_cursorShape == Enum::UnderlineCursor) {
-- painter.drawLine(cursorRect.left(),
-- cursorRect.bottom(),
-- cursorRect.right(),
-- cursorRect.bottom());
-+ QLineF line(cursorRect.left() + 0.5,
-+ cursorRect.bottom() - 0.5,
-+ cursorRect.right() - 0.5,
-+ cursorRect.bottom() - 0.5);
-+ painter.drawLine(line);
-
- } else if (_cursorShape == Enum::IBeamCursor) {
-- painter.drawLine(cursorRect.left(),
-- cursorRect.top(),
-- cursorRect.left(),
-- cursorRect.bottom());
-+ QLineF line(cursorRect.left() + 0.5,
-+ cursorRect.top() + 0.5,
-+ cursorRect.left() + 0.5,
-+ cursorRect.bottom() - 0.5);
-+ painter.drawLine(line);
- }
- }
-
-
diff --git a/kde/patch/konsole/konsole.term.is.konsole.patch b/kde/patch/konsole/konsole.term.is.konsole.patch
deleted file mode 100644
index 443b9f1..0000000
--- a/kde/patch/konsole/konsole.term.is.konsole.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff -uar konsole-17.12.3.orig/src/Profile.cpp konsole-17.12.3/src/Profile.cpp
---- konsole-17.12.3.orig/src/Profile.cpp 2018-03-01 23:54:01.000000000 +0100
-+++ konsole-17.12.3/src/Profile.cpp 2018-04-03 21:17:11.897873304 +0200
-@@ -157,7 +157,7 @@
- // See Pty.cpp on why Arguments is populated
- setProperty(Arguments, QStringList() << QString::fromUtf8(qgetenv("SHELL")));
- setProperty(Icon, QStringLiteral("utilities-terminal"));
-- setProperty(Environment, QStringList() << QStringLiteral("TERM=xterm-256color") << QStringLiteral("COLORTERM=truecolor"));
-+ setProperty(Environment, QStringList() << QStringLiteral("TERM=konsole") << QStringLiteral("COLORTERM=truecolor"));
- setProperty(LocalTabTitleFormat, QStringLiteral("%d : %n"));
- setProperty(RemoteTabTitleFormat, QStringLiteral("(%u) %H"));
- setProperty(ShowTerminalSizeHint, true);
-diff -uar konsole-17.12.3.orig/src/Pty.cpp konsole-17.12.3/src/Pty.cpp
---- konsole-17.12.3.orig/src/Pty.cpp 2018-03-01 23:54:01.000000000 +0100
-+++ konsole-17.12.3/src/Pty.cpp 2018-04-03 21:18:18.898007801 +0200
-@@ -229,7 +229,7 @@
-
- // extra safeguard to make sure $TERM is always set
- if (!isTermEnvAdded) {
-- setEnv(QStringLiteral("TERM"), QStringLiteral("xterm-256color"));
-+ setEnv(QStringLiteral("TERM"), QStringLiteral("konsole"));
- }
- }
-
diff --git a/kde/patch/kopete.patch b/kde/patch/kopete.patch
deleted file mode 100644
index 64e8238..0000000
--- a/kde/patch/kopete.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-# Fix for jabber protocol vulnerability in Kopete: CVE-2017-5593
-# (User Impersonation Vulnerability)
-# Fixed in 16.12.3.
-# cat $CWD/patch/kopete/kopete_kdebug376348.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Make 18.04.0 compile.
-# Fixed in 18.04.1.
-#cat $CWD/patch/kopete/kopete_kdebug393372.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kopete/kopete_kdebug376348.patch b/kde/patch/kopete/kopete_kdebug376348.patch
deleted file mode 100644
index d9bb057..0000000
--- a/kde/patch/kopete/kopete_kdebug376348.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From 6243764c4fd0985320d4a10b48051cc418d584ad Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com>
-Date: Sat, 11 Feb 2017 13:24:59 +0100
-Subject: Fix CVE 2017-5593 (User Impersonation Vulnerability) in jabber
- protocol
-
-BUG: 376348
-FIXED-IN: 16.12.3
----
- .../jabber/libiris/patches/01_cve_2017-5593.patch | 52 ++++++++++++++++++++++
- .../jabber/libiris/src/xmpp/xmpp-im/xmpp_tasks.cpp | 14 +++---
- 2 files changed, 61 insertions(+), 5 deletions(-)
- create mode 100644 protocols/jabber/libiris/patches/01_cve_2017-5593.patch
-
-diff --git a/protocols/jabber/libiris/patches/01_cve_2017-5593.patch b/protocols/jabber/libiris/patches/01_cve_2017-5593.patch
-new file mode 100644
-index 0000000..573ca66
---- /dev/null
-+++ b/protocols/jabber/libiris/patches/01_cve_2017-5593.patch
-@@ -0,0 +1,52 @@
-+diff --git a/src/xmpp/xmpp-im/xmpp_tasks.cpp b/src/xmpp/xmpp-im/xmpp_tasks.cpp
-+index 0e74b71..0837548 100644
-+--- a/src/xmpp/xmpp-im/xmpp_tasks.cpp
-++++ b/src/xmpp/xmpp-im/xmpp_tasks.cpp
-+@@ -888,14 +888,18 @@ bool JT_PushMessage::take(const QDomElement &e)
-+ QDomElement forward;
-+ Message::CarbonDir cd = Message::NoCarbon;
-+
-++ Jid fromJid = Jid(e1.attribute(QLatin1String("from")));
-+ // Check for Carbon
-+ QDomNodeList list = e1.childNodes();
-+ for (int i = 0; i < list.size(); ++i) {
-+ QDomElement el = list.at(i).toElement();
-+
-+- if (el.attribute("xmlns") == QLatin1String("urn:xmpp:carbons:2") && (el.tagName() == QLatin1String("received") || el.tagName() == QLatin1String("sent"))) {
-++ if (el.attribute("xmlns") == QLatin1String("urn:xmpp:carbons:2")
-++ && (el.tagName() == QLatin1String("received") || el.tagName() == QLatin1String("sent"))
-++ && fromJid.compare(Jid(e1.attribute(QLatin1String("to"))), false)) {
-+ QDomElement el1 = el.firstChildElement();
-+- if (el1.tagName() == QLatin1String("forwarded") && el1.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
-++ if (el1.tagName() == QLatin1String("forwarded")
-++ && el1.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
-+ QDomElement el2 = el1.firstChildElement(QLatin1String("message"));
-+ if (!el2.isNull()) {
-+ forward = el2;
-+@@ -904,7 +908,8 @@ bool JT_PushMessage::take(const QDomElement &e)
-+ }
-+ }
-+ }
-+- else if (el.tagName() == QLatin1String("forwarded") && el.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
-++ else if (el.tagName() == QLatin1String("forwarded")
-++ && el.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
-+ forward = el.firstChildElement(QLatin1String("message")); // currently only messages are supportted
-+ // TODO <delay> element support
-+ if (!forward.isNull()) {
-+@@ -913,7 +918,6 @@ bool JT_PushMessage::take(const QDomElement &e)
-+ }
-+ }
-+
-+- QString from = e1.attribute(QLatin1String("from"));
-+ Stanza s = client()->stream().createStanza(addCorrectNS(forward.isNull()? e1 : forward));
-+ if(s.isNull()) {
-+ //printf("take: bad stanza??\n");
-+@@ -926,7 +930,7 @@ bool JT_PushMessage::take(const QDomElement &e)
-+ return false;
-+ }
-+ if (!forward.isNull()) {
-+- m.setForwardedFrom(Jid(from));
-++ m.setForwardedFrom(fromJid);
-+ m.setCarbonDirection(cd);
-+ }
-+
-diff --git a/protocols/jabber/libiris/src/xmpp/xmpp-im/xmpp_tasks.cpp b/protocols/jabber/libiris/src/xmpp/xmpp-im/xmpp_tasks.cpp
-index 0e74b71..0837548 100644
---- a/protocols/jabber/libiris/src/xmpp/xmpp-im/xmpp_tasks.cpp
-+++ b/protocols/jabber/libiris/src/xmpp/xmpp-im/xmpp_tasks.cpp
-@@ -888,14 +888,18 @@ bool JT_PushMessage::take(const QDomElement &e)
- QDomElement forward;
- Message::CarbonDir cd = Message::NoCarbon;
-
-+ Jid fromJid = Jid(e1.attribute(QLatin1String("from")));
- // Check for Carbon
- QDomNodeList list = e1.childNodes();
- for (int i = 0; i < list.size(); ++i) {
- QDomElement el = list.at(i).toElement();
-
-- if (el.attribute("xmlns") == QLatin1String("urn:xmpp:carbons:2") && (el.tagName() == QLatin1String("received") || el.tagName() == QLatin1String("sent"))) {
-+ if (el.attribute("xmlns") == QLatin1String("urn:xmpp:carbons:2")
-+ && (el.tagName() == QLatin1String("received") || el.tagName() == QLatin1String("sent"))
-+ && fromJid.compare(Jid(e1.attribute(QLatin1String("to"))), false)) {
- QDomElement el1 = el.firstChildElement();
-- if (el1.tagName() == QLatin1String("forwarded") && el1.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
-+ if (el1.tagName() == QLatin1String("forwarded")
-+ && el1.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
- QDomElement el2 = el1.firstChildElement(QLatin1String("message"));
- if (!el2.isNull()) {
- forward = el2;
-@@ -904,7 +908,8 @@ bool JT_PushMessage::take(const QDomElement &e)
- }
- }
- }
-- else if (el.tagName() == QLatin1String("forwarded") && el.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
-+ else if (el.tagName() == QLatin1String("forwarded")
-+ && el.attribute(QLatin1String("xmlns")) == QLatin1String("urn:xmpp:forward:0")) {
- forward = el.firstChildElement(QLatin1String("message")); // currently only messages are supportted
- // TODO <delay> element support
- if (!forward.isNull()) {
-@@ -913,7 +918,6 @@ bool JT_PushMessage::take(const QDomElement &e)
- }
- }
-
-- QString from = e1.attribute(QLatin1String("from"));
- Stanza s = client()->stream().createStanza(addCorrectNS(forward.isNull()? e1 : forward));
- if(s.isNull()) {
- //printf("take: bad stanza??\n");
-@@ -926,7 +930,7 @@ bool JT_PushMessage::take(const QDomElement &e)
- return false;
- }
- if (!forward.isNull()) {
-- m.setForwardedFrom(Jid(from));
-+ m.setForwardedFrom(fromJid);
- m.setCarbonDirection(cd);
- }
-
---
-cgit v0.11.2
-
diff --git a/kde/patch/kopete/kopete_kdebug393372.patch b/kde/patch/kopete/kopete_kdebug393372.patch
deleted file mode 100644
index 2d1b1f0..0000000
--- a/kde/patch/kopete/kopete_kdebug393372.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From b1f4fa1401cba2e359e5a4b3ea2bafd119fca62b Mon Sep 17 00:00:00 2001
-From: Pino Toscano <pino@kde.org>
-Date: Tue, 24 Apr 2018 06:30:19 +0200
-Subject: oscar: include buffer.h
-
-This header uses Buffer as by-value parameter, so make sure it knows
-about it.
-
-BUG: 393372
-FIXED-IN: 18.04.1
----
- protocols/oscar/liboscar/tasks/messagereceivertask.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/protocols/oscar/liboscar/tasks/messagereceivertask.h b/protocols/oscar/liboscar/tasks/messagereceivertask.h
-index 8f52cd7..908e903 100644
---- a/protocols/oscar/liboscar/tasks/messagereceivertask.h
-+++ b/protocols/oscar/liboscar/tasks/messagereceivertask.h
-@@ -21,6 +21,7 @@
- #include <QByteArray>
- #include "oscarmessage.h"
- #include "oscartypeclasses.h"
-+#include "buffer.h"
-
- class QTextCodec;
-
---
-cgit v0.11.2
-
-
diff --git a/kde/patch/korundum.patch b/kde/patch/korundum.patch
deleted file mode 100644
index 10deb29..0000000
--- a/kde/patch/korundum.patch
+++ /dev/null
@@ -1,5 +0,0 @@
-# Build against Ruby 1.9.3.
-# See also https://bugs.kde.org/show_bug.cgi?id=287057
-# No longer needed in KDE 4.11.
-#cat $CWD/patch/korundum/korundum_ruby19.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/korundum/korundum_ruby19.patch b/kde/patch/korundum/korundum_ruby19.patch
deleted file mode 100644
index 561d8de..0000000
--- a/kde/patch/korundum/korundum_ruby19.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-diff -up korundum-4.8.0/src/krubypluginfactory.cpp.ruby19 korundum-4.8.0/src/krubypluginfactory.cpp
---- korundum-4.8.0/src/krubypluginfactory.cpp.ruby19 2011-07-27 13:37:29.000000000 -0500
-+++ korundum-4.8.0/src/krubypluginfactory.cpp 2012-02-17 08:30:38.785635819 -0600
-@@ -39,7 +39,7 @@
- extern "C" {
- extern VALUE rb_load_path;
- extern VALUE qt_internal_module;
--void Init_prelude(void);
-+// void Init_prelude(void);
- }
-
- //
-@@ -165,7 +165,7 @@ QObject *KRubyPluginFactory::create(cons
- #if RUBY_VERSION >= 0x10900
- VALUE gem = rb_define_module("Gem");
- rb_const_set(gem, rb_intern("Enable"), Qtrue);
-- Init_prelude();
-+// Init_prelude();
- #endif
-
- ruby_incpush(QFile::encodeName(program.path()));
-@@ -342,7 +342,7 @@ int kdemain(int argc, char **argv)
- #if RUBY_VERSION >= 0x10900
- VALUE gem = rb_define_module("Gem");
- rb_const_set(gem, rb_intern("Enable"), Qtrue);
-- Init_prelude();
-+// Init_prelude();
- #endif
-
- ruby_incpush(QFile::encodeName(program.path()));
-
diff --git a/kde/patch/kpat.patch b/kde/patch/kpat.patch
deleted file mode 100644
index 5bda77a..0000000
--- a/kde/patch/kpat.patch
+++ /dev/null
@@ -1,6 +0,0 @@
-# Commit https://cgit.kde.org/kpat.git/patch/?id=fc1d54ced6a727382599d767e55879b6843c3456
-# Introduces a hard dependency on fc-solver which in turn has new dependencies
-# So, we revert this commit to avoid dropping kpat altogether in 18.08.0.
-# For 18.12.0 we will have to add freecell-solver anyway.
-#cat $CWD/patch/kpat/kpat_no_freecell_solver_dep.patch | patch -p1 --reverse --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kpat/kpat_no_freecell_solver_dep.patch b/kde/patch/kpat/kpat_no_freecell_solver_dep.patch
deleted file mode 100644
index 06aedca..0000000
--- a/kde/patch/kpat/kpat_no_freecell_solver_dep.patch
+++ /dev/null
@@ -1,1475 +0,0 @@
-Commit https://cgit.kde.org/kpat.git/patch/?id=fc1d54ced6a727382599d767e55879b6843c3456
-Introduces a hard dependency on fc-solver which in turn has new dependencies
-So, we revert this commit to avoid dropping kpat altogether
-
-From ed0e53e0888da7123f4a0d2097f8da7fb105ca18 Mon Sep 17 00:00:00 2001
-From: Fabian Kosmale <0inkane@googlemail.com>
-Date: Sun, 13 May 2018 15:14:53 +0200
-Subject: Use Freecell Solver for FreeCell and Simple Simon
-
-Summary: This uses http://fc-solve.shlomifish.org/ and prevents the looping in the existing solvers.
-
-Test Plan: Test that the solvers are working.
-
-Reviewers: #kde_games, fabiank
-
-Subscribers: kde-games-devel, aacid, #kde_games
-
-Tags: #kde_games
-
-Differential Revision: https://phabricator.kde.org/D12415
----
- CMakeLists.txt | 6 +-
- dealer.cpp | 4 +
- freecell.cpp | 35 ++++
- freecell.h | 1 +
- patsolve/abstract_fc_solve_solver.cpp | 239 ++++++++++++++++++++++++++
- patsolve/abstract_fc_solve_solver.h | 52 ++++++
- patsolve/freecellsolver.cpp | 310 +++++++++++++++++-----------------
- patsolve/freecellsolver.h | 23 ++-
- patsolve/patsolve.h | 12 +-
- patsolve/simonsolver.cpp | 129 +++++++++++++-
- patsolve/simonsolver.h | 20 ++-
- patsolve/solverinterface.h | 2 +
- pileutils.cpp | 61 +++++++
- pileutils.h | 4 +
- simon.cpp | 56 +++++-
- simon.h | 1 +
- 16 files changed, 779 insertions(+), 176 deletions(-)
- create mode 100644 patsolve/abstract_fc_solve_solver.cpp
- create mode 100644 patsolve/abstract_fc_solve_solver.h
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 8f738bf..c043c45 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -4,6 +4,8 @@ cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR)
- set (QT_MIN_VERSION "5.7.0")
- set (KF5_MIN_VERSION "5.30.0")
-
-+include(FindPkgConfig)
-+pkg_check_modules(FC_SOLVE REQUIRED libfreecell-solver)
- find_package(ECM ${KF5_MIN_VERSION} REQUIRED CONFIG)
- set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
-
-@@ -45,7 +47,7 @@ add_subdirectory(sounds)
- add_subdirectory(themes)
- add_subdirectory(doc)
-
--set(kpat_SRCS
-+set(kpat_SRCS ${libfcs_SRCS}
- main.cpp
- dealer.cpp
- dealerinfo.cpp
-@@ -59,6 +61,7 @@ set(kpat_SRCS
- soundengine.cpp
- statisticsdialog.cpp
- view.cpp
-+ patsolve/abstract_fc_solve_solver.cpp
- patsolve/memory.cpp
- patsolve/patsolve.cpp
-
-@@ -101,6 +104,7 @@ target_link_libraries(kpat
- KF5::KIOCore
- KF5KDEGames
- kcardgame
-+ ${FC_SOLVE_LDFLAGS}
- )
-
- install(TARGETS kpat ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
-diff --git a/dealer.cpp b/dealer.cpp
-index 7c03ebf..a2558fc 100644
---- a/dealer.cpp
-+++ b/dealer.cpp
-@@ -1724,6 +1724,10 @@ void DealerScene::startSolver()
-
- bool DealerScene::isGameLost() const
- {
-+ if (! m_winningMoves.isEmpty())
-+ {
-+ return false;
-+ }
- if ( solver() )
- {
- if ( m_solverThread && m_solverThread->isRunning() )
-diff --git a/freecell.cpp b/freecell.cpp
-index f870cdb..9a7c278 100644
---- a/freecell.cpp
-+++ b/freecell.cpp
-@@ -111,6 +111,41 @@ void Freecell::restart( const QList<KCard*> & cards )
- }
-
-
-+QString Freecell::solverFormat() const
-+{
-+ QString output;
-+ QString tmp;
-+ for (int i = 0; i < 4 ; i++) {
-+ if (target[i]->isEmpty())
-+ continue;
-+ tmp += suitToString(target[i]->topCard()->suit()) + '-' + rankToString(target[i]->topCard()->rank()) + ' ';
-+ }
-+ if (!tmp.isEmpty())
-+ output += QString::fromLatin1("Foundations: %1\n").arg(tmp);
-+
-+ tmp.truncate(0);
-+ for (int i = 0; i < 4 ; i++) {
-+ if (freecell[i]->isEmpty())
-+ tmp += "- ";
-+ else
-+ tmp += rankToString(freecell[i]->topCard()->rank()) + suitToString(freecell[i]->topCard()->suit()) + ' ';
-+ }
-+ if (!tmp.isEmpty())
-+ {
-+ QString a = QString::fromLatin1("Freecells: %1\n");
-+ output += a.arg(tmp);
-+ }
-+
-+ for (int i = 0; i < 8 ; i++)
-+ {
-+ QList<KCard*> cards = store[i]->cards();
-+ for (QList<KCard*>::ConstIterator it = cards.begin(); it != cards.end(); ++it)
-+ output += rankToString((*it)->rank()) + suitToString((*it)->suit()) + ' ';
-+ output += '\n';
-+ }
-+ return output;
-+}
-+
- void Freecell::cardsDroppedOnPile( const QList<KCard*> & cards, KCardPile * pile )
- {
- if ( cards.size() <= 1 )
-diff --git a/freecell.h b/freecell.h
-index 7b0b2cb..9f7d84b 100644
---- a/freecell.h
-+++ b/freecell.h
-@@ -62,6 +62,7 @@ protected slots:
- private:
- bool canPutStore( const KCardPile * pile, const QList<KCard*> & cards ) const;
-
-+ virtual QString solverFormat() const;
- PatPile* store[8];
- PatPile* freecell[4];
- PatPile* target[4];
-diff --git a/patsolve/abstract_fc_solve_solver.cpp b/patsolve/abstract_fc_solve_solver.cpp
-new file mode 100644
-index 0000000..11e5baa
---- /dev/null
-+++ b/patsolve/abstract_fc_solve_solver.cpp
-@@ -0,0 +1,239 @@
-+/*
-+ * Copyright (C) 2006-2009 Stephan Kulow <coolo@kde.org>
-+ *
-+ * This program 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) any later version.
-+ *
-+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "freecell-solver/fcs_user.h"
-+#include "freecell-solver/fcs_cl.h"
-+
-+#include "abstract_fc_solve_solver.h"
-+
-+const int CHUNKSIZE = 100;
-+const long int MAX_ITERS_LIMIT = 200000;
-+
-+#define PRINT 0
-+
-+/* These two routines make and unmake moves. */
-+
-+void FcSolveSolver::make_move(MOVE *)
-+{
-+ return;
-+}
-+
-+void FcSolveSolver::undo_move(MOVE *)
-+{
-+ return;
-+}
-+
-+/* Get the possible moves from a position, and store them in Possible[]. */
-+SolverInterface::ExitStatus FcSolveSolver::patsolve( int _max_positions )
-+{
-+ int current_iters_count;
-+ max_positions = (_max_positions < 0) ? MAX_ITERS_LIMIT : _max_positions;
-+
-+ init();
-+
-+ if (!solver_instance)
-+ {
-+ {
-+ solver_instance = freecell_solver_user_alloc();
-+
-+ solver_ret = FCS_STATE_NOT_BEGAN_YET;
-+
-+ char * error_string;
-+ int error_arg;
-+ const char * known_parameters[1] = {NULL};
-+ /* A "char *" copy instead of "const char *". */
-+
-+ int parse_args_ret_code = freecell_solver_user_cmd_line_parse_args(
-+ solver_instance,
-+ get_cmd_line_arg_count() ,
-+ get_cmd_line_args(),
-+ 0,
-+ known_parameters,
-+ NULL,
-+ NULL,
-+ &error_string,
-+ &error_arg
-+ );
-+
-+ Q_ASSERT(!parse_args_ret_code);
-+ }
-+
-+ /* Not needed for Simple Simon because it's already specified in
-+ * freecell_solver_cmd_line_args. TODO : abstract .
-+ *
-+ * Shlomi Fish
-+ * */
-+ setFcSolverGameParams();
-+
-+ current_iters_count = CHUNKSIZE;
-+ freecell_solver_user_limit_iterations(solver_instance, current_iters_count);
-+ }
-+
-+ if (solver_instance)
-+ {
-+ bool continue_loop = true;
-+ while (continue_loop &&
-+ ( (solver_ret == FCS_STATE_NOT_BEGAN_YET)
-+ || (solver_ret == FCS_STATE_SUSPEND_PROCESS))
-+ &&
-+ (current_iters_count < MAX_ITERS_LIMIT)
-+ )
-+ {
-+ current_iters_count += CHUNKSIZE;
-+ freecell_solver_user_limit_iterations(solver_instance, current_iters_count);
-+
-+ if (solver_ret == FCS_STATE_NOT_BEGAN_YET)
-+ {
-+ solver_ret =
-+ freecell_solver_user_solve_board(
-+ solver_instance,
-+ board_as_string
-+ );
-+ }
-+ else
-+ {
-+ solver_ret = freecell_solver_user_resume_solution(solver_instance);
-+ }
-+ {
-+ // QMutexLocker lock( &endMutex );
-+ if ( m_shouldEnd )
-+ {
-+ continue_loop = false;
-+ }
-+ }
-+ }
-+ }
-+
-+ switch (solver_ret)
-+ {
-+ case FCS_STATE_IS_NOT_SOLVEABLE:
-+ if (solver_instance)
-+ {
-+ freecell_solver_user_free(solver_instance);
-+ solver_instance = NULL;
-+ }
-+ return Solver::NoSolutionExists;
-+
-+ case FCS_STATE_WAS_SOLVED:
-+ {
-+ if (solver_instance)
-+ {
-+ m_winMoves.clear();
-+ while (freecell_solver_user_get_moves_left(solver_instance))
-+ {
-+ fcs_move_t move;
-+ MOVE new_move;
-+ const int verdict = !freecell_solver_user_get_next_move(
-+ solver_instance, &move)
-+ ;
-+
-+ Q_ASSERT (verdict);
-+
-+ new_move.fcs = move;
-+
-+ m_winMoves.append( new_move );
-+ }
-+
-+ freecell_solver_user_free(solver_instance);
-+ solver_instance = NULL;
-+ }
-+ return Solver::SolutionExists;
-+ }
-+
-+ case FCS_STATE_SUSPEND_PROCESS:
-+ return Solver::UnableToDetermineSolvability;
-+
-+ default:
-+ if (solver_instance)
-+ {
-+ freecell_solver_user_free(solver_instance);
-+ solver_instance = NULL;
-+ }
-+ return Solver::NoSolutionExists;
-+ }
-+}
-+
-+/* Get the possible moves from a position, and store them in Possible[]. */
-+
-+int FcSolveSolver::get_possible_moves(int *, int *)
-+{
-+ return 0;
-+}
-+
-+bool FcSolveSolver::isWon()
-+{
-+ return true;
-+}
-+
-+int FcSolveSolver::getOuts()
-+{
-+ return 0;
-+}
-+
-+FcSolveSolver::FcSolveSolver()
-+ : Solver()
-+ , solver_instance(NULL)
-+ , solver_ret(FCS_STATE_NOT_BEGAN_YET)
-+ , board_as_string("")
-+{
-+}
-+
-+unsigned int FcSolveSolver::getClusterNumber()
-+{
-+ return 0;
-+}
-+
-+void FcSolveSolver::print_layout()
-+{
-+#if 0
-+ int i, w, o;
-+
-+ fprintf(stderr, "print-layout-begin\n");
-+ for (w = 0; w < 10; ++w) {
-+ Q_ASSERT( Wp[w] == &W[w][Wlen[w]-1] );
-+ fprintf( stderr, "Play%d: ", w );
-+ for (i = 0; i < Wlen[w]; ++i) {
-+ printcard(W[w][i], stderr);
-+ }
-+ fputc('\n', stderr);
-+ }
-+ fprintf( stderr, "Off: " );
-+ for (o = 0; o < 4; ++o) {
-+ if ( O[o] != -1 )
-+ printcard( O[o] + PS_KING, stderr);
-+ }
-+ fprintf(stderr, "\nprint-layout-end\n");
-+#endif
-+}
-+
-+void FcSolveSolver::unpack_cluster( unsigned int)
-+{
-+ return;
-+}
-+
-+FcSolveSolver::~FcSolveSolver()
-+{
-+ if (solver_instance)
-+ {
-+ freecell_solver_user_free(solver_instance);
-+ solver_instance = NULL;
-+ }
-+}
-+
-diff --git a/patsolve/abstract_fc_solve_solver.h b/patsolve/abstract_fc_solve_solver.h
-new file mode 100644
-index 0000000..d2d072d
---- /dev/null
-+++ b/patsolve/abstract_fc_solve_solver.h
-@@ -0,0 +1,52 @@
-+/*
-+ * Copyright (C) 2006-2009 Stephan Kulow <coolo@kde.org>
-+ *
-+ * This program 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) any later version.
-+ *
-+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef ABSTRACT_FC_SOLVE_SOLVER_H
-+#define ABSTRACT_FC_SOLVE_SOLVER_H
-+
-+#include "patsolve.h"
-+
-+struct FcSolveSolver : public Solver<10>
-+{
-+public:
-+ FcSolveSolver();
-+ virtual ~FcSolveSolver();
-+ virtual int get_possible_moves(int *a, int *numout);
-+ virtual bool isWon();
-+ virtual void make_move(MOVE *m);
-+ virtual void undo_move(MOVE *m);
-+ virtual int getOuts();
-+ virtual unsigned int getClusterNumber();
-+ virtual void translate_layout() = 0;
-+ virtual void unpack_cluster( unsigned int k );
-+ virtual MoveHint translateMove(const MOVE &m) = 0;
-+ virtual SolverInterface::ExitStatus patsolve( int _max_positions = -1);
-+ virtual void setFcSolverGameParams() = 0;
-+
-+ virtual void print_layout();
-+
-+ virtual int get_cmd_line_arg_count() = 0;
-+ virtual const char * * get_cmd_line_args() = 0;
-+/* Names of the cards. The ordering is defined in pat.h. */
-+
-+ void * solver_instance;
-+ int solver_ret;
-+ // More than enough space for two decks.
-+ char board_as_string[4 * 13 * 2 * 4 * 3];
-+};
-+
-+#endif // ABSTRACT_FC_SOLVE_SOLVER_H
-diff --git a/patsolve/freecellsolver.cpp b/patsolve/freecellsolver.cpp
-index 39eff50..e92000f 100644
---- a/patsolve/freecellsolver.cpp
-+++ b/patsolve/freecellsolver.cpp
-@@ -16,12 +16,18 @@
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "freecell-solver/fcs_user.h"
-+#include "freecell-solver/fcs_cl.h"
-+
- #include "freecellsolver.h"
-
- #include "../freecell.h"
-
--
--/* Some macros used in get_possible_moves(). */
-+const int CHUNKSIZE = 100;
-+const long int MAX_ITERS_LIMIT = 200000;
-
- /* The following function implements
- (Same_suit ? (suit(a) == suit(b)) : (color(a) != color(b)))
-@@ -32,10 +38,13 @@ namespace {
-
- /* Statistics. */
-
-+#if 0
- int FreecellSolver::Xparam[] = { 4, 1, 8, -1, 7, 11, 4, 2, 2, 1, 2 };
-+#endif
-
- /* These two routines make and unmake moves. */
-
-+#if 0
- void FreecellSolver::make_move(MOVE *m)
- {
- int from, to;
-@@ -85,7 +94,9 @@ void FreecellSolver::undo_move(MOVE *m)
- Wlen[from]++;
- hashpile(from);
- }
-+#endif
-
-+#if 0
- /* Move prioritization. Given legal, pruned moves, there are still some
- that are a waste of time, especially in the endgame where there are lots of
- possible moves, but few productive ones. Note that we also prioritize
-@@ -178,9 +189,11 @@ void FreecellSolver::prioritize(MOVE *mp0, int n)
- }
- }
- }
-+#endif
-
- /* Automove logic. Freecell games must avoid certain types of automoves. */
-
-+#if 0
- int FreecellSolver::good_automove(int o, int r)
- {
- int i;
-@@ -220,148 +233,43 @@ int FreecellSolver::good_automove(int o, int r)
-
- return true;
- }
-+#endif
-
--/* Get the possible moves from a position, and store them in Possible[]. */
-+#define CMD_LINE_ARGS_NUM 2
-
--int FreecellSolver::get_possible_moves(int *a, int *numout)
-+static const char * freecell_solver_cmd_line_args[CMD_LINE_ARGS_NUM] =
- {
-- int i, n, t, w, o, empty, emptyw;
-- card_t card;
-- MOVE *mp;
--
-- /* Check for moves from W to O. */
--
-- n = 0;
-- mp = Possible;
-- for (w = 0; w < Nwpiles + Ntpiles; ++w) {
-- if (Wlen[w] > 0) {
-- card = *Wp[w];
-- o = SUIT(card);
-- empty = (O[o] == NONE);
-- if ((empty && (RANK(card) == PS_ACE)) ||
-- (!empty && (RANK(card) == O[o] + 1))) {
-- mp->card_index = 0;
-- mp->from = w;
-- mp->to = o;
-- mp->totype = O_Type;
-- mp->turn_index = -1;
-- mp->pri = 0; /* unused */
-- n++;
-- mp++;
--
-- /* If it's an automove, just do it. */
--
-- if (good_automove(o, RANK(card))) {
-- *a = true;
-- mp[-1].pri = 127;
-- if (n != 1) {
-- Possible[0] = mp[-1];
-- return 1;
-- }
-- return n;
-- }
-- }
-- }
-- }
--
-- /* No more automoves, but remember if there were any moves out. */
--
-- *a = false;
-- *numout = n;
--
-- /* Check for moves from non-singleton W cells to one of any
-- empty W cells. */
-+ "--load-config", "video-editing"
-+};
-
-- emptyw = -1;
-- for (w = 0; w < Nwpiles; ++w) {
-- if (Wlen[w] == 0) {
-- emptyw = w;
-- break;
-- }
-- }
-- if (emptyw >= 0) {
-- for (i = 0; i < Nwpiles + Ntpiles; ++i) {
-- if (i == emptyw || Wlen[i] == 0) {
-- continue;
-- }
-- bool allowed = false;
-- if ( i < Nwpiles)
-- allowed = true;
-- if ( i >= Nwpiles )
-- allowed = true;
-- if ( allowed ) {
-- card = *Wp[i];
-- mp->card_index = 0;
-- mp->from = i;
-- mp->to = emptyw;
-- mp->totype = W_Type;
-- mp->turn_index = -1;
-- if ( i >= Nwpiles )
-- mp->pri = Xparam[6];
-- else
-- mp->pri = Xparam[3];
-- n++;
-- mp++;
-- }
-- }
-- }
--
-- /* Check for moves from W to non-empty W cells. */
--
-- for (i = 0; i < Nwpiles + Ntpiles; ++i) {
-- if (Wlen[i] > 0) {
-- card = *Wp[i];
-- for (w = 0; w < Nwpiles; ++w) {
-- if (i == w) {
-- continue;
-- }
-- if (Wlen[w] > 0 &&
-- (RANK(card) == RANK(*Wp[w]) - 1 &&
-- suitable(card, *Wp[w]))) {
-- mp->card_index = 0;
-- mp->from = i;
-- mp->to = w;
-- mp->totype = W_Type;
-- mp->turn_index = -1;
-- if ( i >= Nwpiles )
-- mp->pri = Xparam[5];
-- else
-- mp->pri = Xparam[4];
-- n++;
-- mp++;
-- }
-- }
-- }
-- }
--
-- /* Check for moves from W to one of any empty T cells. */
--
-- for (t = 0; t < Ntpiles; ++t) {
-- if (!Wlen[t+Nwpiles]) {
-- break;
-- }
-- }
-+int FreecellSolver::get_cmd_line_arg_count()
-+{
-+ return CMD_LINE_ARGS_NUM;
-+}
-
-- if (t < Ntpiles) {
-- for (w = 0; w < Nwpiles; ++w) {
-- if (Wlen[w] > 0) {
-- card = *Wp[w];
-- mp->card_index = 0;
-- mp->from = w;
-- mp->turn_index = -1;
-- mp->to = t+Nwpiles;
-- mp->totype = W_Type;
-- mp->pri = Xparam[7];
-- n++;
-- mp++;
-- }
-- }
-- }
-+const char * * FreecellSolver::get_cmd_line_args()
-+{
-+ return freecell_solver_cmd_line_args;
-+}
-
-
-- return n;
-+void FreecellSolver::setFcSolverGameParams()
-+{
-+ /*
-+ * I'm using the more standard interface instead of the depracated
-+ * user_set_game one. I'd like that each function will have its
-+ * own dedicated purpose.
-+ *
-+ * Shlomi Fish
-+ * */
-+ freecell_solver_user_set_num_freecells(solver_instance,4);
-+ freecell_solver_user_set_num_stacks(solver_instance,8);
-+ freecell_solver_user_set_num_decks(solver_instance,1);
-+ freecell_solver_user_set_sequences_are_built_by_type(solver_instance, FCS_SEQ_BUILT_BY_ALTERNATE_COLOR);
-+ freecell_solver_user_set_sequence_move(solver_instance, 0);
-+ freecell_solver_user_set_empty_stacks_filled_by(solver_instance, FCS_ES_FILLED_BY_ANY_CARD);
- }
--
-+#if 0
- void FreecellSolver::unpack_cluster( unsigned int k )
- {
- /* Get the Out cells from the cluster number. */
-@@ -373,27 +281,13 @@ void FreecellSolver::unpack_cluster( unsigned int k )
- k >>= 4;
- O[3] = k & 0xF;
- }
-+#endif
-
--bool FreecellSolver::isWon()
--{
-- // maybe won?
-- for (int o = 0; o < 4; ++o) {
-- if (O[o] != PS_KING) {
-- return false;
-- }
-- }
--
-- return true;
--}
--
--int FreecellSolver::getOuts()
--{
-- return O[0] + O[1] + O[2] + O[3];
--}
-
- FreecellSolver::FreecellSolver(const Freecell *dealer)
-- : Solver()
-+ : FcSolveSolver()
- {
-+#if 0
- Osuit[0] = PS_DIAMOND;
- Osuit[1] = PS_CLUB;
- Osuit[2] = PS_HEART;
-@@ -402,12 +296,15 @@ FreecellSolver::FreecellSolver(const Freecell *dealer)
- Nwpiles = 8;
- Ntpiles = 4;
-
-+#endif
-+
- deal = dealer;
- }
-
- /* Read a layout file. Format is one pile per line, bottom to top (visible
- card). Temp cells and Out on the last two lines, if any. */
-
-+#if 0
- void FreecellSolver::translate_layout()
- {
- /* Read the workspace. */
-@@ -447,9 +344,78 @@ void FreecellSolver::translate_layout()
- }
- }
- }
-+#endif
-
- MoveHint FreecellSolver::translateMove( const MOVE &m )
- {
-+ fcs_move_t move = m.fcs;
-+ int cards = fcs_move_get_num_cards_in_seq(move);
-+ PatPile *from = 0;
-+ PatPile *to = 0;
-+
-+ switch(fcs_move_get_type(move))
-+ {
-+ case FCS_MOVE_TYPE_STACK_TO_STACK:
-+ from = deal->store[fcs_move_get_src_stack(move)];
-+ to = deal->store[fcs_move_get_dest_stack(move)];
-+ break;
-+
-+ case FCS_MOVE_TYPE_FREECELL_TO_STACK:
-+ from = deal->freecell[fcs_move_get_src_freecell(move)];
-+ to = deal->store[fcs_move_get_dest_stack(move)];
-+ cards = 1;
-+ break;
-+
-+ case FCS_MOVE_TYPE_FREECELL_TO_FREECELL:
-+ from = deal->freecell[fcs_move_get_src_freecell(move)];
-+ to = deal->freecell[fcs_move_get_dest_freecell(move)];
-+ cards = 1;
-+ break;
-+
-+ case FCS_MOVE_TYPE_STACK_TO_FREECELL:
-+ from = deal->store[fcs_move_get_src_stack(move)];
-+ to = deal->freecell[fcs_move_get_dest_freecell(move)];
-+ cards = 1;
-+ break;
-+
-+ case FCS_MOVE_TYPE_STACK_TO_FOUNDATION:
-+ from = deal->store[fcs_move_get_src_stack(move)];
-+ cards = 1;
-+ to = 0;
-+ break;
-+
-+ case FCS_MOVE_TYPE_FREECELL_TO_FOUNDATION:
-+ from = deal->freecell[fcs_move_get_src_freecell(move)];
-+ cards = 1;
-+ to = 0;
-+ }
-+ Q_ASSERT(from);
-+ Q_ASSERT(cards <= from->cards().count());
-+ Q_ASSERT(to || cards == 1);
-+ KCard *card = from->cards()[from->cards().count() - cards];
-+
-+ if (!to)
-+ {
-+ PatPile *target = 0;
-+ PatPile *empty = 0;
-+ for (int i = 0; i < 4; ++i) {
-+ KCard *c = deal->target[i]->topCard();
-+ if (c) {
-+ if ( c->suit() == card->suit() )
-+ {
-+ target = deal->target[i];
-+ break;
-+ }
-+ } else if ( !empty )
-+ empty = deal->target[i];
-+ }
-+ to = target ? target : empty;
-+ }
-+ Q_ASSERT(to);
-+
-+ return MoveHint(card, to, 0);
-+
-+#if 0
- // this is tricky as we need to want to build the "meta moves"
-
- PatPile *frompile = nullptr;
-@@ -486,8 +452,43 @@ MoveHint FreecellSolver::translateMove( const MOVE &m )
-
- return MoveHint( card, target, m.pri );
- }
-+#endif
- }
-
-+void FreecellSolver::translate_layout()
-+{
-+ strcpy(board_as_string, deal->solverFormat().toLatin1());
-+
-+ if (solver_instance)
-+ {
-+ freecell_solver_user_recycle(solver_instance);
-+ solver_ret = FCS_STATE_NOT_BEGAN_YET;
-+ }
-+#if 0
-+ /* Read the workspace. */
-+ int total = 0;
-+
-+ for ( int w = 0; w < 10; ++w ) {
-+ int i = translate_pile(deal->store[w], W[w], 52);
-+ Wp[w] = &W[w][i - 1];
-+ Wlen[w] = i;
-+ total += i;
-+ }
-+
-+ for (int i = 0; i < 4; ++i) {
-+ O[i] = -1;
-+ KCard *c = deal->target[i]->top();
-+ if (c) {
-+ total += 13;
-+ O[i] = translateSuit( c->suit() );
-+ }
-+ }
-+#endif
-+}
-+
-+
-+
-+#if 0
- unsigned int FreecellSolver::getClusterNumber()
- {
- int i = O[0] + (O[1] << 4);
-@@ -496,7 +497,9 @@ unsigned int FreecellSolver::getClusterNumber()
- k |= i << 8;
- return k;
- }
-+#endif
-
-+#if 0
- void FreecellSolver::print_layout()
- {
- int i, t, w, o;
-@@ -519,3 +522,4 @@ void FreecellSolver::print_layout()
- }
- fprintf(stderr, "\nprint-layout-end\n");
- }
-+#endif
-diff --git a/patsolve/freecellsolver.h b/patsolve/freecellsolver.h
-index 45ca063..99d1dbb 100644
---- a/patsolve/freecellsolver.h
-+++ b/patsolve/freecellsolver.h
-@@ -19,16 +19,17 @@
- #ifndef FREECELLSOLVER_H
- #define FREECELLSOLVER_H
-
--class Freecell;
--#include "patsolve.h"
-+#include "abstract_fc_solve_solver.h"
-
- constexpr auto Nwpiles = 8;
- constexpr auto Ntpiles = 4;
-+class Freecell;
-
--class FreecellSolver : public Solver<Nwpiles + Ntpiles>
-+class FreecellSolver : public FcSolveSolver
- {
- public:
- explicit FreecellSolver(const Freecell *dealer);
-+#if 0
- int good_automove(int o, int r);
- int get_possible_moves(int *a, int *numout) Q_DECL_OVERRIDE;
- bool isWon() Q_DECL_OVERRIDE;
-@@ -40,8 +41,17 @@ public:
- void translate_layout() Q_DECL_OVERRIDE;
- void unpack_cluster( unsigned int k ) Q_DECL_OVERRIDE;
- MoveHint translateMove(const MOVE &m) Q_DECL_OVERRIDE;
--
-- void print_layout() Q_DECL_OVERRIDE;
-+#endif
-+ virtual void translate_layout();
-+#if 0
-+ virtual void unpack_cluster( unsigned int k );
-+#endif
-+ virtual MoveHint translateMove(const MOVE &m);
-+ virtual void setFcSolverGameParams();
-+ virtual int get_cmd_line_arg_count();
-+ virtual const char * * get_cmd_line_args();
-+#if 0
-+ virtual void print_layout();
-
- int Nwpiles; /* the numbers we're actually using */
- int Ntpiles;
-@@ -51,10 +61,11 @@ public:
- card_t O[4]; /* output piles store only the rank or NONE */
- card_t Osuit[4];
-
-- const Freecell *deal;
-
- static int Xparam[];
-+#endif
-
-+ const Freecell *deal;
- };
-
- #endif // FREECELLSOLVER_H
-diff --git a/patsolve/patsolve.h b/patsolve/patsolve.h
-index 03285d4..1c3a7c6 100644
---- a/patsolve/patsolve.h
-+++ b/patsolve/patsolve.h
-@@ -33,6 +33,10 @@
-
- #include <cstdio>
-
-+/* A card is represented as ( down << 6 ) + (suit << 4) + rank. */
-+
-+typedef quint8 card_t;
-+
- struct POSITION {
- POSITION *queue; /* next position in the queue */
- POSITION *parent; /* point back up the move stack */
-@@ -48,14 +52,15 @@ class MemoryManager;
- template<size_t NumberPiles>
- class Solver : public SolverInterface
- {
-+
- public:
-
- Solver();
- virtual ~Solver();
-- ExitStatus patsolve( int max_positions = -1) final;
-+ virtual ExitStatus patsolve( int max_positions = -1);
-+ bool recursive(POSITION *pos = nullptr);
- virtual void translate_layout() = 0;
- virtual MoveHint translateMove(const MOVE &m ) = 0;
--
- void stopExecution() final;
- QList<MOVE> firstMoves() const final;
- QList<MOVE> winMoves() const final;
-@@ -126,8 +131,7 @@ protected:
- POSITION *Stack = nullptr;
- QMap<qint32,bool> recu_pos;
- int max_positions;
--
--private:
-+protected:
- QList<MOVE> m_firstMoves;
- QList<MOVE> m_winMoves;
- std::atomic_bool m_shouldEnd;
-diff --git a/patsolve/simonsolver.cpp b/patsolve/simonsolver.cpp
-index a9d640c..e75dcaa 100644
---- a/patsolve/simonsolver.cpp
-+++ b/patsolve/simonsolver.cpp
-@@ -15,17 +15,26 @@
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "freecell-solver/fcs_user.h"
-+#include "freecell-solver/fcs_cl.h"
-+
- #include "simonsolver.h"
-
- #include "../simon.h"
-
- #include <QDebug>
-
-+const int CHUNKSIZE = 100;
-+const long int MAX_ITERS_LIMIT = 200000;
-
- #define PRINT 0
-
- /* These two routines make and unmake moves. */
-
-+#if 0
- void SimonSolver::make_move(MOVE *m)
- {
- #if PRINT
-@@ -136,13 +145,62 @@ void SimonSolver::undo_move(MOVE *m)
- print_layout();
- #endif
- }
-+#endif
-+
-+#define CMD_LINE_ARGS_NUM 4
-+static const char * freecell_solver_cmd_line_args[CMD_LINE_ARGS_NUM] =
-+{
-+ "-g", "simple_simon", "--load-config", "the-last-mohican"
-+};
-+
-+int SimonSolver::get_cmd_line_arg_count()
-+{
-+ return CMD_LINE_ARGS_NUM;
-+}
-+
-+const char * * SimonSolver::get_cmd_line_args()
-+{
-+ return freecell_solver_cmd_line_args;
-+}
-+
-+void SimonSolver::setFcSolverGameParams()
-+{
-+ freecell_solver_user_apply_preset(solver_instance, "simple_simon");
-+}
-
-+#if 0
- /* Get the possible moves from a position, and store them in Possible[]. */
-
- int SimonSolver::get_possible_moves(int *a, int *numout)
- {
- MOVE *mp;
-+ int n;
-+
-+ mp = Possible;
-+ n = 0;
-+ *a = 1;
-+
-+ while (freecell_solver_user_get_moves_left(solver_instance))
-+ {
-+ fcs_move_t move;
-+ fcs_move_t * move_ptr;
-+ if (!freecell_solver_user_get_next_move(solver_instance, &move)) {
-+ move_ptr = new fcs_move_t;
-+ *move_ptr = move;
-+ mp->ptr = (void *)move_ptr;
-+ mp++;
-+ n++;
-+ }
-+ else
-+ {
-+ Q_ASSERT(0);
-+ }
-+ }
-+
-+ *numout = n;
-+ return n;
-
-+#if 0
- /* Check for moves from W to O. */
-
- int n = 0;
-@@ -301,8 +359,11 @@ int SimonSolver::get_possible_moves(int *a, int *numout)
- }
-
- return n;
-+#endif
- }
-+#endif
-
-+#if 0
- void SimonSolver::unpack_cluster( unsigned int k )
- {
- // TODO: this only works for easy
-@@ -314,7 +375,9 @@ void SimonSolver::unpack_cluster( unsigned int k )
- O[i] = -1;
- }
- }
-+#endif
-
-+#if 0
- bool SimonSolver::isWon()
- {
- // maybe won?
-@@ -324,7 +387,9 @@ bool SimonSolver::isWon()
-
- return true;
- }
-+#endif
-
-+#if 0
- int SimonSolver::getOuts()
- {
- int k = 0;
-@@ -334,9 +399,10 @@ int SimonSolver::getOuts()
-
- return k;
- }
-+#endif
-
- SimonSolver::SimonSolver(const Simon *dealer)
-- : Solver()
-+ : FcSolveSolver()
- {
- deal = dealer;
- }
-@@ -346,6 +412,14 @@ card). Temp cells and Out on the last two lines, if any. */
-
- void SimonSolver::translate_layout()
- {
-+ strcpy(board_as_string, deal->solverFormat().toLatin1());
-+
-+ if (solver_instance)
-+ {
-+ freecell_solver_user_recycle(solver_instance);
-+ solver_ret = FCS_STATE_NOT_BEGAN_YET;
-+ }
-+#if 0
- /* Read the workspace. */
- int total = 0;
-
-@@ -364,8 +438,10 @@ void SimonSolver::translate_layout()
- O[i] = translateSuit( c->suit() );
- }
- }
-+#endif
- }
-
-+#if 0
- unsigned int SimonSolver::getClusterNumber()
- {
- unsigned int k = 0;
-@@ -376,7 +452,9 @@ unsigned int SimonSolver::getClusterNumber()
- }
- return k;
- }
-+#endif
-
-+#if 0
- void SimonSolver::print_layout()
- {
- int i, w, o;
-@@ -397,9 +475,57 @@ void SimonSolver::print_layout()
- }
- fprintf(stderr, "\nprint-layout-end\n");
- }
-+#endif
-
- MoveHint SimonSolver::translateMove( const MOVE &m )
- {
-+ fcs_move_t move = m.fcs;
-+ int cards = fcs_move_get_num_cards_in_seq(move);
-+ PatPile *from = 0;
-+ PatPile *to = 0;
-+
-+ switch(fcs_move_get_type(move))
-+ {
-+ case FCS_MOVE_TYPE_STACK_TO_STACK:
-+ from = deal->store[fcs_move_get_src_stack(move)];
-+ to = deal->store[fcs_move_get_dest_stack(move)];
-+ break;
-+
-+ case FCS_MOVE_TYPE_SEQ_TO_FOUNDATION:
-+ from = deal->store[fcs_move_get_src_stack(move)];
-+ cards = 13;
-+ to = deal->target[fcs_move_get_foundation(move)];
-+ break;
-+
-+ }
-+ Q_ASSERT(from);
-+ Q_ASSERT(cards <= from->cards().count());
-+ Q_ASSERT(to || cards == 1);
-+ KCard *card = from->cards()[from->cards().count() - cards];
-+
-+ if (!to)
-+ {
-+ PatPile *target = 0;
-+ PatPile *empty = 0;
-+ for (int i = 0; i < 4; ++i) {
-+ KCard *c = deal->target[i]->topCard();
-+ if (c) {
-+ if ( c->suit() == card->suit() )
-+ {
-+ target = deal->target[i];
-+ break;
-+ }
-+ } else if ( !empty )
-+ empty = deal->target[i];
-+ }
-+ to = target ? target : empty;
-+ }
-+
-+ Q_ASSERT(to);
-+
-+ return MoveHint(card, to, 0);
-+
-+#if 0
- Q_ASSERT( m.from < 10 && m.to < 10 );
-
- PatPile *frompile = deal->store[m.from];
-@@ -414,4 +540,5 @@ MoveHint SimonSolver::translateMove( const MOVE &m )
-
- Q_ASSERT( m.to < 10 );
- return MoveHint( card, deal->store[m.to], m.pri );
-+#endif
- }
-diff --git a/patsolve/simonsolver.h b/patsolve/simonsolver.h
-index 2d57dda..4a417b1 100644
---- a/patsolve/simonsolver.h
-+++ b/patsolve/simonsolver.h
-@@ -18,29 +18,37 @@
- #ifndef SIMONSOLVER_H
- #define SIMONSOLVER_H
-
--#include "patsolve.h"
-+#include "abstract_fc_solve_solver.h"
-+#include "simon.h"
- class Simon;
-
-
--class SimonSolver : public Solver<10>
-+class SimonSolver : public FcSolveSolver
- {
- public:
- explicit SimonSolver(const Simon *dealer);
-+#if 0
- int get_possible_moves(int *a, int *numout) Q_DECL_OVERRIDE;
- bool isWon() Q_DECL_OVERRIDE;
- void make_move(MOVE *m) Q_DECL_OVERRIDE;
- void undo_move(MOVE *m) Q_DECL_OVERRIDE;
- int getOuts() Q_DECL_OVERRIDE;
- unsigned int getClusterNumber() Q_DECL_OVERRIDE;
-- void translate_layout() Q_DECL_OVERRIDE;
-+#endif
-+ virtual void translate_layout() Q_DECL_OVERRIDE;
-+ virtual MoveHint translateMove(const MOVE &m) Q_DECL_OVERRIDE;
-+#if 0
- void unpack_cluster( unsigned int k ) Q_DECL_OVERRIDE;
-- MoveHint translateMove(const MOVE &m) Q_DECL_OVERRIDE;
--
- void print_layout() Q_DECL_OVERRIDE;
-+#endif
-+ virtual void setFcSolverGameParams();
-
-+ virtual int get_cmd_line_arg_count();
-+ virtual const char * * get_cmd_line_args();
-+#if 0
- /* Names of the cards. The ordering is defined in pat.h. */
--
- int O[4];
-+#endif
- const Simon *deal;
- };
-
-diff --git a/patsolve/solverinterface.h b/patsolve/solverinterface.h
-index d99d3b8..77fd410 100644
---- a/patsolve/solverinterface.h
-+++ b/patsolve/solverinterface.h
-@@ -4,6 +4,7 @@
- #include <QList>
-
- #include "../hint.h"
-+#include "freecell-solver/fcs_user.h"
-
-
- /* A card is represented as ( down << 6 ) + (suit << 4) + rank. */
-@@ -22,6 +23,7 @@ public:
- PileType totype;
- signed char pri; /* move priority (low priority == low value) */
- int turn_index; /* turn the card index */
-+ fcs_move_t fcs; /* A Freecell Solver move. */
-
- bool operator<( const MOVE &m) const
- {
-diff --git a/pileutils.cpp b/pileutils.cpp
-index 1e3da3e..609c716 100644
---- a/pileutils.cpp
-+++ b/pileutils.cpp
-@@ -48,6 +48,33 @@ bool isSameSuitAscending( const QList<KCard*> & cards )
- return true;
- }
-
-+int countSameSuitDescendingSequences( const QList<KCard*> & cards )
-+{
-+ if ( cards.size() <= 1 )
-+ return 0;
-+
-+ int suit = cards.first()->suit();
-+ int lastRank = cards.first()->rank();
-+
-+ int count = 1;
-+
-+ for( int i = 1; i < cards.size(); ++i )
-+ {
-+ --lastRank;
-+
-+ if ( cards[i]->rank() != lastRank )
-+ return -1;
-+
-+ if ( cards[i]->suit() != suit )
-+ {
-+ count++;
-+ suit = cards[i]->suit();
-+ }
-+ }
-+ return count;
-+}
-+
-+
-
- bool isSameSuitDescending( const QList<KCard*> & cards )
- {
-@@ -121,3 +148,37 @@ bool checkAddAlternateColorDescendingFromKing( const QList<KCard*> & oldCards, c
- && newCards.first()->rank() == oldCards.last()->rank() - 1;
- }
-
-+QString suitToString(int s) {
-+ switch (s) {
-+ case KCardDeck::Clubs:
-+ return "C";
-+ case KCardDeck::Hearts:
-+ return "H";
-+ case KCardDeck::Diamonds:
-+ return "D";
-+ case KCardDeck::Spades:
-+ return "S";
-+ default:
-+ exit(-1);
-+ }
-+ return QString();
-+}
-+
-+QString rankToString(int r)
-+{
-+ switch (r) {
-+ case KCardDeck::King:
-+ return "K";
-+ case KCardDeck::Ace:
-+ return "A";
-+ case KCardDeck::Jack:
-+ return "J";
-+ case KCardDeck::Queen:
-+ return "Q";
-+ case KCardDeck::Ten:
-+ return "T";
-+ default:
-+ return QString::number(r);
-+ }
-+}
-+
-diff --git a/pileutils.h b/pileutils.h
-index 2fa1657..faa8c40 100644
---- a/pileutils.h
-+++ b/pileutils.h
-@@ -26,9 +26,13 @@ class KCard;
- bool isSameSuitAscending( const QList<KCard*> & cards );
- bool isSameSuitDescending( const QList<KCard*> & cards );
- bool isAlternateColorDescending( const QList<KCard*> & cards );
-+int countSameSuitDescendingSequences( const QList<KCard*> & cards );
-
- bool checkAddSameSuitAscendingFromAce( const QList<KCard*> & oldCards, const QList<KCard*> & newCards );
- bool checkAddAlternateColorDescending( const QList<KCard*> & oldCards, const QList<KCard*> & newCards );
- bool checkAddAlternateColorDescendingFromKing( const QList<KCard*> & oldCards, const QList<KCard*> & newCards );
-
-+extern QString suitToString(int s);
-+extern QString rankToString(int r);
-+
- #endif
-diff --git a/simon.cpp b/simon.cpp
-index 8e3ef10..834dd55 100644
---- a/simon.cpp
-+++ b/simon.cpp
-@@ -111,24 +111,70 @@ bool Simon::checkAdd(const PatPile * pile, const QList<KCard*> & oldCards, const
- {
- if (pile->pileRole() == PatPile::Tableau)
- {
-- return oldCards.isEmpty()
-- || oldCards.last()->rank() == newCards.first()->rank() + 1;
-+ if (! (oldCards.isEmpty()
-+ || oldCards.last()->rank() == newCards.first()->rank() + 1 ))
-+ {
-+ return false;
-+ }
-+
-+ int seqs_count = countSameSuitDescendingSequences(newCards);
-+
-+ if (seqs_count < 0)
-+ return false;
-+
-+ // This is similar to the supermoves of Freecell - we can use empty
-+ // columns to temporarily hold intermediate sub-sequences which are
-+ // not the same suit - only a "false" parent.
-+ // Shlomi Fish
-+
-+ int empty_piles_count = 0;
-+
-+ for (int i = 0; i < 10; ++i )
-+ if (store[i]->isEmpty() && ( store[i]->index() != pile->index() ))
-+ empty_piles_count++;
-+
-+ return (seqs_count <= (1 << empty_piles_count));
- }
- else
- {
- return oldCards.isEmpty()
- && newCards.first()->rank() == KCardDeck::King
-- && newCards.last()->rank() == KCardDeck::Ace;
-+ && newCards.last()->rank() == KCardDeck::Ace
-+ && isSameSuitDescending(newCards);
- }
- }
-
- bool Simon::checkRemove(const PatPile * pile, const QList<KCard*> & cards) const
- {
-- return pile->pileRole() == PatPile::Tableau
-- && isSameSuitDescending(cards);
-+ if (pile->pileRole() != PatPile::Tableau)
-+ return false;
-+
-+ int seqs_count = countSameSuitDescendingSequences(cards);
-+
-+ return (seqs_count >= 0);
- }
-
-+QString Simon::solverFormat() const
-+{
-+ QString output;
-+ QString tmp;
-+ for (int i = 0; i < 4 ; i++) {
-+ if (target[i]->isEmpty())
-+ continue;
-+ tmp += suitToString(target[i]->topCard()->suit()) + "-K ";
-+ }
-+ if (!tmp.isEmpty())
-+ output += QString::fromLatin1("Foundations: %1\n").arg(tmp);
-
-+ for (int i = 0; i < 10 ; i++)
-+ {
-+ QList<KCard*> cards = store[i]->cards();
-+ for (QList<KCard*>::ConstIterator it = cards.begin(); it != cards.end(); ++it)
-+ output += rankToString((*it)->rank()) + suitToString((*it)->suit()) + ' ';
-+ output += '\n';
-+ }
-+ return output;
-+}
-
- static class SimonDealerInfo : public DealerInfo
- {
-diff --git a/simon.h b/simon.h
-index 83d10ab..d816f27 100644
---- a/simon.h
-+++ b/simon.h
-@@ -57,6 +57,7 @@ private:
- PatPile* store[10];
- PatPile* target[4];
-
-+ virtual QString solverFormat() const;
- friend class SimonSolver;
- };
-
---
-cgit v0.11.2
-
diff --git a/kde/patch/krita.patch b/kde/patch/krita.patch
deleted file mode 100644
index 247bbd7..0000000
--- a/kde/patch/krita.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Fix compilation of Krita against Qt 5.9:
-#cat $CWD/patch/krita/krita_qt59.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Hack around tablet issues with un-patched Qt 5.12:
-#cat $CWD/patch/krita/krita_qtabletevents.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-
diff --git a/kde/patch/krita/krita_qt512.patch b/kde/patch/krita/krita_qt512.patch
deleted file mode 100644
index 765d232..0000000
--- a/kde/patch/krita/krita_qt512.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From 98aab8f2942cdc78dda8cfeba3580bd9d57e00a2 Mon Sep 17 00:00:00 2001
-From: Boudewijn Rempt <boud@valdyas.org>
-Date: Fri, 5 Oct 2018 11:16:26 +0200
-Subject: [PATCH] Add a cmake option to disable our own tablet support
-
-Off by default, this makes it easier to check whether bugs are
-caused by our fork of Qt's classes or to check whether Qt's tablet
-support has improved.
-
-CCBUG:399379
----
- CMakeLists.txt | 4 ++++
- config_use_qt_xcb.h.cmake | 6 ++++++
- krita/main.cc | 8 +++++++-
- libs/ui/CMakeLists.txt | 12 ++++++++----
- libs/ui/input/wintab/qxcbconnection.cpp | 1 -
- 5 files changed, 25 insertions(+), 6 deletions(-)
- create mode 100644 config_use_qt_xcb.h.cmake
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 17c9cd2d7..3199ae4da 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -168,6 +168,10 @@ if (WIN32)
- endif (MINGW)
- endif ()
-
-+option(USE_QT_XCB "Do not use Krita's forked XCB connection and tablet support on X11, but leave everything to Qt." OFF)
-+configure_file(config_use_qt_xcb.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_use_qt_xcb.h)
-+add_feature_info("Use Qt's XCB and Tablet support on X11" USE_QT_XCB "Do not use Krita's forked XCB connection and tablet support on X11, but leave everything to Qt.")
-+
- option(HIDE_SAFE_ASSERTS "Don't show message box for \"safe\" asserts, just ignore them automatically and dump a message to the terminal." ON)
- configure_file(config-hide-safe-asserts.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-hide-safe-asserts.h)
- add_feature_info("Hide Safe Asserts" HIDE_SAFE_ASSERTS "Don't show message box for \"safe\" asserts, just ignore them automatically and dump a message to the terminal.")
-diff --git a/config_use_qt_xcb.h.cmake b/config_use_qt_xcb.h.cmake
-new file mode 100644
-index 000000000..9fe3360cc
---- /dev/null
-+++ b/config_use_qt_xcb.h.cmake
-@@ -0,0 +1,6 @@
-+/* config_use_qt_xcb.h. Generated from config_use_qt_xcb.h.cmake */
-+
-+#cmakedefine USE_QT_XCB 1
-+
-+
-+
-diff --git a/krita/main.cc b/krita/main.cc
-index dca2ee170..398fa3384 100644
---- a/krita/main.cc
-+++ b/krita/main.cc
-@@ -63,8 +63,11 @@
- #include <QLibrary>
-
- #elif defined HAVE_X11
-+#include "config_use_qt_xcb.h"
-+#ifndef USE_QT_XCB
- #include <kis_xi2_event_filter.h>
- #endif
-+#endif
-
- #if defined HAVE_KCRASH
- #include <kcrash.h>
-@@ -336,8 +339,11 @@ extern "C" int main(int argc, char **argv)
- }
-
- #if defined HAVE_X11
-- app.installNativeEventFilter(KisXi2EventFilter::instance());
-+ #ifndef USE_QT_XCB
-+ app.installNativeEventFilter(KisXi2EventFilter::instance());
-+ #endif
- #endif
-+
- app.installEventFilter(KisQtWidgetsTweaker::instance());
-
-
-diff --git a/libs/ui/CMakeLists.txt b/libs/ui/CMakeLists.txt
-index 2909398ab..b4673ca92 100644
---- a/libs/ui/CMakeLists.txt
-+++ b/libs/ui/CMakeLists.txt
-@@ -425,14 +425,18 @@ endif()
- input/wintab/drawpile_tablettester/tablettest.cpp
- )
-
--if(UNIX)
-+if (UNIX)
- set(kritaui_LIB_SRCS
- ${kritaui_LIB_SRCS}
-- input/kis_tablet_event.cpp
-- input/wintab/kis_tablet_support.cpp
- qtlockedfile/qtlockedfile_unix.cpp
- )
-- if(NOT APPLE)
-+ if(NOT USE_QT_XCB)
-+ set(kritaui_LIB_SRCS
-+ ${kritaui_LIB_SRCS}
-+ input/wintab/kis_tablet_support.cpp
-+ )
-+ endif()
-+ if(NOT APPLE AND NOT USE_QT_XCB)
- set(kritaui_LIB_SRCS
- ${kritaui_LIB_SRCS}
- input/wintab/qxcbconnection_xi2.cpp
-diff --git a/libs/ui/input/wintab/qxcbconnection.cpp b/libs/ui/input/wintab/qxcbconnection.cpp
-index 5991bc187..c062d05e0 100644
---- a/libs/ui/input/wintab/qxcbconnection.cpp
-+++ b/libs/ui/input/wintab/qxcbconnection.cpp
-@@ -41,7 +41,6 @@
- #include <QGuiApplication>
- #include <QApplication>
-
--
- #include <X11/extensions/XI2proto.h>
- #include <xcb/xproto.h>
-
---
-2.17.1
-
diff --git a/kde/patch/krita/krita_qt59.patch b/kde/patch/krita/krita_qt59.patch
deleted file mode 100644
index f517995..0000000
--- a/kde/patch/krita/krita_qt59.patch
+++ /dev/null
@@ -1,26 +0,0 @@
-Source: https://github.com/KDE/krita/commit/2f59d0d1.patch
-
-From 2f59d0d1d91e3f79342c20d0df68aa9a51817e8d Mon Sep 17 00:00:00 2001
-From: Luca Beltrame <lbeltrame@kde.org>
-Date: Sat, 6 May 2017 16:00:21 +0200
-Subject: [PATCH] Drop QForeachContainer include and fix Qt 5.9 build
-
-It's not used anywhere.
-
-Acked by boud.
----
- libs/ui/KisResourceBundleManifest.cpp | 1 -
- 1 file changed, 1 deletion(-)
-
-diff --git a/libs/ui/KisResourceBundleManifest.cpp b/libs/ui/KisResourceBundleManifest.cpp
-index e4f94ca788..83761657d8 100644
---- a/libs/ui/KisResourceBundleManifest.cpp
-+++ b/libs/ui/KisResourceBundleManifest.cpp
-@@ -22,7 +22,6 @@
- #include <QDomElement>
- #include <QDomNode>
- #include <QDomNodeList>
--#include <QForeachContainer>
-
- #include <KoXmlNS.h>
- #include <KoXmlReader.h>
diff --git a/kde/patch/krita/krita_qtabletevents.patch b/kde/patch/krita/krita_qtabletevents.patch
deleted file mode 100644
index a1d3869..0000000
--- a/kde/patch/krita/krita_qtabletevents.patch
+++ /dev/null
@@ -1,67 +0,0 @@
-# NOTE: original patch: https://cgit.kde.org/krita.git/commit/?id=a3193fe2
-# But first part (patch to ext_qt)) has been removed due to failure to apply.
-# -- Eric Hameleers
-
-From a3193fe273c3f2c3b5493f77724a4bc099ae5e36 Mon Sep 17 00:00:00 2001
-From: Dmitry Kazakov <dimula73@gmail.com>
-Date: Mon, 11 Mar 2019 16:49:31 +0300
-Subject: Add a hacky patch that ensures QTabletEvents to be ignored in
- distribution builds
-
-If we ensure that all the tablet events are ignored, then Qt
-will always generate synthesized mouse events, avoiding the
-problem of lost Enter/Leave events.
-
-We also mark our own build of Qt about the presence of the fix
-(therefore, it doesn't need this hack).
----
- libs/ui/input/kis_input_manager.cpp | 20 ++++++++++++++++
-
-index 30a4677..d173543 100644
---- a/libs/ui/input/kis_input_manager.cpp
-+++ b/libs/ui/input/kis_input_manager.cpp
-@@ -496,6 +496,13 @@ bool KisInputManager::eventFilterImpl(QEvent * event)
- //Reset signal compressor to prevent processing events before press late
- d->resetCompressor();
- d->eatOneMousePress();
-+
-+#if defined Q_OS_LINUX && !defined QT_HAS_ENTER_LEAVE_PATCH
-+ // remove this hack when this patch is integrated:
-+ // https://codereview.qt-project.org/#/c/255384/
-+ event->setAccepted(false);
-+#endif
-+
- break;
- }
- case QEvent::TabletMove: {
-@@ -517,6 +524,12 @@ bool KisInputManager::eventFilterImpl(QEvent * event)
- */
- d->blockMouseEvents();
-
-+#if defined Q_OS_LINUX && !defined QT_HAS_ENTER_LEAVE_PATCH
-+ // remove this hack when this patch is integrated:
-+ // https://codereview.qt-project.org/#/c/255384/
-+ event->setAccepted(false);
-+#endif
-+
- break;
- }
- case QEvent::TabletRelease: {
-@@ -529,6 +542,13 @@ bool KisInputManager::eventFilterImpl(QEvent * event)
- retval = d->matcher.buttonReleased(tabletEvent->button(), tabletEvent);
- retval = true;
- event->setAccepted(true);
-+
-+#if defined Q_OS_LINUX && !defined QT_HAS_ENTER_LEAVE_PATCH
-+ // remove this hack when this patch is integrated:
-+ // https://codereview.qt-project.org/#/c/255384/
-+ event->setAccepted(false);
-+#endif
-+
- break;
- }
-
---
-cgit v1.1
-
-
diff --git a/kde/patch/krunner.patch b/kde/patch/krunner.patch
new file mode 100644
index 0000000..2cafdc6
--- /dev/null
+++ b/kde/patch/krunner.patch
@@ -0,0 +1,4 @@
+# KDEBUG 423003: prevent crash when at least PIM Contacts plugin is enabled.
+# Fixed in Frameworks 5.73.
+cat $CWD/patch/krunner/krunner_KDEBUG_423003.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/kde/patch/krunner/krunner_KDEBUG_423003.patch b/kde/patch/krunner/krunner_KDEBUG_423003.patch
new file mode 100644
index 0000000..88f6297
--- /dev/null
+++ b/kde/patch/krunner/krunner_KDEBUG_423003.patch
@@ -0,0 +1,54 @@
+From 8f7ce559b84ee0c21de0256e6591793e4b95f411 Mon Sep 17 00:00:00 2001
+From: David Redondo <kde@david-redondo.de>
+Date: Tue, 14 Jul 2020 13:02:51 +0200
+Subject: [PATCH] Do not remove virtual method from build
+
+Method was deprecated in fc5738ab7c4025a87e2bbd656914b6187df7a9eb. Removing the
+method when building without deprecated methods (for example the pim runner
+does this) changes the vtable leading to crashes.
+BUG: 423003
+---
+ src/abstractrunner.cpp | 2 --
+ src/abstractrunner.h | 2 --
+ 2 files changed, 4 deletions(-)
+
+diff --git a/src/abstractrunner.cpp b/src/abstractrunner.cpp
+index 378c73d..34c44d1 100644
+--- a/src/abstractrunner.cpp
++++ b/src/abstractrunner.cpp
+@@ -244,12 +244,10 @@ void AbstractRunner::setHasRunOptions(bool hasRunOptions)
+ }
+ #endif
+
+-#if KRUNNER_BUILD_DEPRECATED_SINCE(5, 71)
+ void AbstractRunner::createRunOptions(QWidget *parent)
+ {
+ Q_UNUSED(parent)
+ }
+-#endif
+
+ AbstractRunner::Speed AbstractRunner::speed() const
+ {
+diff --git a/src/abstractrunner.h b/src/abstractrunner.h
+index cb4e32a..ae9558d 100644
+--- a/src/abstractrunner.h
++++ b/src/abstractrunner.h
+@@ -161,7 +161,6 @@ class KRUNNER_EXPORT AbstractRunner : public QObject
+ bool hasRunOptions();
+ #endif
+
+-#if KRUNNER_ENABLE_DEPRECATED_SINCE(5, 71)
+ /**
+ * If hasRunOptions() returns true, this method may be called to get
+ * a widget displaying the options the user can interact with to modify
+@@ -172,7 +171,6 @@ class KRUNNER_EXPORT AbstractRunner : public QObject
+ */
+ KRUNNER_DEPRECATED_VERSION_BELATED(5, 71, 5, 0, "No longer use, feature removed")
+ virtual void createRunOptions(QWidget *widget);
+-#endif
+
+ /**
+ * Called whenever an exact or possible match associated with this
+--
+GitLab
+
diff --git a/kde/patch/kscreenlocker.patch b/kde/patch/kscreenlocker.patch
deleted file mode 100644
index d1b51ea..0000000
--- a/kde/patch/kscreenlocker.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-# KDEBUG #358125, also CVE-2016-2312 (fixed in Plasma 5.5.5):
-# Dont quit the Greeter when last window closes.
-#cat $CWD/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Backport two important stability fixes from 5.14 -
-# Force software rendering when greeter crashed:
-#cat $CWD/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-# Load QtQuickSettings for software rendering (KDEBUG #347772):
-# Applied in Plasma 5.13.5:
-#cat $CWD/patch/kscreenlocker/kscreenlocker_rendersettings.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-
-
diff --git a/kde/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch b/kde/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch
deleted file mode 100644
index 492ef80..0000000
--- a/kde/patch/kscreenlocker/kscreenlocker_CVE-2016-2312.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From: Martin Gräßlin <mgraesslin@kde.org>
-Date: Fri, 05 Feb 2016 09:30:19 +0000
-Subject: [greeter] Dont quit when last window closes
-X-Git-Url: http://quickgit.kde.org/?p=kscreenlocker.git&a=commitdiff&h=fae65f1cdd6446042b31ccd0eafd7a4c0b6623e3
----
-[greeter] Dont quit when last window closes
-
-Qt allows to have no screens. If all XRandR screens are disconnected
-there are also no QScreens. This is from an X11 perspective wrong, but
-we have to deal with it. No QScreens means that all views are destroyed
-and no new ones are created. Thus all windows close and the greeter
-exited successfully which in turn unlocked the screen.
-
-This change ensures that the greeter doesn't exit when all windows close.
-
-Funnily this was not a problem with the well known issue of Qt
-crashing when all screens are disconnected. The lock screen handles
-crashes gracefully and just restarts or more likely Qt also crashes
-the application using KSld and thus taking down the complete session.
-
-BUG: 358125
-FIXED-IN: 5.5.5
----
-
-
---- a/greeter/main.cpp
-+++ b/greeter/main.cpp
-@@ -59,6 +59,7 @@
- qputenv("QT_IM_MODULE", QByteArrayLiteral("compose"));
- }
- ScreenLocker::UnlockApp app(argc, argv);
-+ app.setQuitOnLastWindowClosed(false);
- QCoreApplication::setApplicationName(QStringLiteral("kscreenlocker_greet"));
- QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
- QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
-
diff --git a/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch b/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch
deleted file mode 100644
index 06045d7..0000000
--- a/kde/patch/kscreenlocker/kscreenlocker_crash_force_softrender.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-From 875e44f56d4597ba3b65f5bf4ff2b315376c05a4 Mon Sep 17 00:00:00 2001
-From: Kai Uwe Broulik <kde@privat.broulik.de>
-Date: Wed, 11 Jul 2018 18:01:41 +0200
-Subject: Force software rendering when greeter crashed
-
-We have a fallback QML theme for when the look and feel package is broken but when the
-graphics driver is broken (e.g. proprietary graphics driver update) the lock screen would
-stop working. When the greeter crashed, better play safe and force software rendering
-
-Reviewed-By: d_ed
----
- ksldapp.cpp | 13 +++++++++++--
- ksldapp.h | 9 +++++++++
- 2 files changed, 20 insertions(+), 2 deletions(-)
-
-diff --git a/ksldapp.cpp b/ksldapp.cpp
-index 892826f..5fe28ea 100644
---- a/ksldapp.cpp
-+++ b/ksldapp.cpp
-@@ -66,6 +66,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
- namespace ScreenLocker
- {
-
-+static const QString s_qtQuickBackend = QStringLiteral("QT_QUICK_BACKEND");
-+
- static KSldApp * s_instance = nullptr;
-
- KSldApp* KSldApp::self()
-@@ -226,6 +228,8 @@ void KSldApp::initialize()
- // failure, restart lock process
- m_greeterCrashedCounter++;
- if (m_greeterCrashedCounter < 4) {
-+ // Perhaps it crashed due to a graphics driver issue, force software rendering now
-+ setForceSoftwareRendering(true);
- startLockProcess(EstablishLock::Immediate);
- } else if (m_lockWindow) {
- m_lockWindow->emergencyShow();
-@@ -385,6 +389,7 @@ void KSldApp::lock(EstablishLock establishLock)
-
- m_lockState = AcquiringLock;
-
-+ setForceSoftwareRendering(false);
- // start unlock screen process
- startLockProcess(establishLock);
- emit lockStateChanged();
-@@ -546,6 +551,8 @@ bool KSldApp::isFdoPowerInhibited() const
-
- void KSldApp::startLockProcess(EstablishLock establishLock)
- {
-+ QProcessEnvironment env = m_greeterEnv;
-+
- if (m_isWayland && m_waylandDisplay) {
- int sx[2];
- if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sx) < 0) {
-@@ -566,9 +573,7 @@ void KSldApp::startLockProcess(EstablishLock establishLock)
- emit greeterClientConnectionChanged();
- int socket = dup(sx[1]);
- if (socket >= 0) {
-- QProcessEnvironment env = m_greeterEnv;
- env.insert("WAYLAND_SOCKET", QByteArray::number(socket));
-- m_lockProcess->setProcessEnvironment(env);
- }
- }
- QStringList args;
-@@ -587,6 +592,9 @@ void KSldApp::startLockProcess(EstablishLock establishLock)
- if (m_lockGrace == -1) {
- args << QStringLiteral("--nolock");
- }
-+ if (m_forceSoftwareRendering) {
-+ env.insert(s_qtQuickBackend, QStringLiteral("software"));
-+ }
-
- // start the Wayland server
- int fd = m_waylandServer->start();
-@@ -598,6 +606,7 @@ void KSldApp::startLockProcess(EstablishLock establishLock)
- args << QStringLiteral("--ksldfd");
- args << QString::number(fd);
-
-+ m_lockProcess->setProcessEnvironment(env);
- m_lockProcess->start(QStringLiteral(KSCREENLOCKER_GREET_BIN), args);
- close(fd);
- }
-diff --git a/ksldapp.h b/ksldapp.h
-index 4849588..b6d6703 100644
---- a/ksldapp.h
-+++ b/ksldapp.h
-@@ -127,6 +127,14 @@ public:
- m_lockGrace = msec;
- }
-
-+ bool forceSoftwareRendering() const {
-+ return m_forceSoftwareRendering;
-+ }
-+
-+ void setForceSoftwareRendering(bool force) {
-+ m_forceSoftwareRendering = force;
-+ }
-+
- Q_SIGNALS:
- void locked();
- void unlocked();
-@@ -179,6 +187,7 @@ private:
- LogindIntegration *m_logind;
- GlobalAccel *m_globalAccel = nullptr;
- bool m_hasXInput2 = false;
-+ bool m_forceSoftwareRendering = false;
-
- bool m_isX11;
- bool m_isWayland;
---
-cgit v0.11.2
-
diff --git a/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch b/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch
deleted file mode 100644
index 2802a1a..0000000
--- a/kde/patch/kscreenlocker/kscreenlocker_rendersettings.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 3f104cbb0a34024dc1aa45538d2ef2403a7a45f0 Mon Sep 17 00:00:00 2001
-From: David Edmundson <kde@davidedmundson.co.uk>
-Date: Fri, 10 Aug 2018 01:18:42 +0200
-Subject: Load QtQuickSettings for software rendering
-
-We had support for falling back on errors yet somehow
-the initial basic loading was missing.
-
-Summary: BUG: 347772
-
-Test Plan: Compiles
-
-Reviewers: #plasma, broulik
-
-Reviewed By: #plasma, broulik
-
-Subscribers: plasma-devel
-
-Tags: #plasma
-
-Differential Revision: https://phabricator.kde.org/D14708
----
- greeter/main.cpp | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/greeter/main.cpp b/greeter/main.cpp
-index ff64a55..6db87e1 100644
---- a/greeter/main.cpp
-+++ b/greeter/main.cpp
-@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
- *********************************************************************/
- #include <KLocalizedString>
-+#include <KQuickAddons/QtQuickSettings>
-
- #include <QDateTime>
- #include <QCommandLineParser>
-@@ -85,6 +86,8 @@ int main(int argc, char* argv[])
- QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
- QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
-
-+ KQuickAddons::QtQuickSettings::init();
-+
- // disable session management for the greeter
- auto disableSessionManagement = [](QSessionManager &sm) {
- sm.setRestartHint(QSessionManager::RestartNever);
---
-cgit v0.11.2
-
diff --git a/kde/patch/kstars.patch b/kde/patch/kstars.patch
deleted file mode 100644
index 8367818..0000000
--- a/kde/patch/kstars.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix for "error: isnan was not declared in this scope"
-#cat $CWD/patch/kstars/kstars_isnan.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kstars/kstars_isnan.patch b/kde/patch/kstars/kstars_isnan.patch
deleted file mode 100644
index 1c4aef3..0000000
--- a/kde/patch/kstars/kstars_isnan.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From: Christian Dersch <lupinix@mailbox.org>
-Date: Wed, 03 Feb 2016 10:19:55 +0000
-Subject: Fix compilation with gcc 6.x (namespace std has to be used explicitly in some cases, e.g. when ambiguous)
-X-Git-Url: http://quickgit.kde.org/?p=kstars.git&a=commitdiff&h=7d34e52f4dd6e15b871596b3c64d4c7cdba599b4
----
-Fix compilation with gcc 6.x (namespace std has to be used explicitly in some cases, e.g. when ambiguous)
-REVIEW:126976
----
-
-
---- a/kstars/fitsviewer/fitsdata.cpp
-+++ b/kstars/fitsviewer/fitsdata.cpp
-@@ -548,7 +548,7 @@
- int diff_x=s1->x - s2->x;
- int diff_y=s1->y - s2->y;
-
-- dis = abs( sqrt( diff_x*diff_x + diff_y*diff_y));
-+ dis = std::abs( sqrt( diff_x*diff_x + diff_y*diff_y));
- dis -= s1->width/2;
- dis -= s2->width/2;
-
-
---- a/kstars/tools/horizonmanager.cpp
-+++ b/kstars/tools/horizonmanager.cpp
-@@ -192,7 +192,7 @@
- az = dms::fromString(regionItem->child(i, 1)->data(Qt::DisplayRole).toString(), true);
- alt = dms::fromString(regionItem->child(i, 2)->data(Qt::DisplayRole).toString(), true);
-
-- if (isnan(az.Degrees()) || isnan(alt.Degrees()))
-+ if (std::isnan(az.Degrees()) || std::isnan(alt.Degrees()))
- return false;
-
- p.setAz(az);
-@@ -534,9 +534,9 @@
- dms azAngle = dms::fromString(parent->child(item->row(),1)->data(Qt::DisplayRole).toString(), true);
- dms altAngle = dms::fromString(parent->child(item->row(),2)->data(Qt::DisplayRole).toString(), true);
-
-- if (isnan(azAngle.Degrees()))
-+ if (std::isnan(azAngle.Degrees()))
- azOK = false;
-- if (isnan(altAngle.Degrees()))
-+ if (std::isnan(altAngle.Degrees()))
- altOK = false;
-
- if ( (item->column() == 1 && azOK == false) || (item->column() == 2 && altOK == false) )
-
diff --git a/kde/patch/ksudoku.patch b/kde/patch/ksudoku.patch
deleted file mode 100644
index d379585..0000000
--- a/kde/patch/ksudoku.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Qt5 apps accept qwindowtitle, not caption. KDEBUG 381087,
-# however ksudoku-17.04.x is still kdelibs4 based:
-#cat $CWD/patch/ksudoku/ksudoku_qwindowtitle.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/ksudoku/ksudoku_qwindowtitle.patch b/kde/patch/ksudoku/ksudoku_qwindowtitle.patch
deleted file mode 100644
index 3417b34..0000000
--- a/kde/patch/ksudoku/ksudoku_qwindowtitle.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-Qt5 .desktop files for apps accept qwindowtitle, not caption.
-However, the 17.04 branch of ksudoku is still kdelibs4 based, and the
-patch applied to KDE BUG 381087 broke the launch of ksudoku here:
-
---- a/src/gui/org.kde.ksudoku.desktop 2017-06-13 02:44:11.000000000 +0200
-+++ b/src/gui/org.kde.ksudoku.desktop 2017-07-15 11:58:32.027477614 +0200
-@@ -50,7 +50,7 @@
- Name[x-test]=xxKSudokuxx
- Name[zh_CN]=KSudoku
- Name[zh_TW]=KSudoku
--Exec=ksudoku %i -qwindowtitle %c
-+Exec=ksudoku %i -caption %c
- Icon=ksudoku
- Type=Application
- X-DocPath=ksudoku/index.html
diff --git a/kde/patch/ktexteditor.patch b/kde/patch/ktexteditor.patch
deleted file mode 100644
index a4f0aad..0000000
--- a/kde/patch/ktexteditor.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Fix indentation for some languages (e.g. Python) in Kate and KDevelop:
-#cat $CWD/patch/ktexteditor/ktexteditor_fix_indentation.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/ktexteditor/ktexteditor_fix_indentation.patch b/kde/patch/ktexteditor/ktexteditor_fix_indentation.patch
deleted file mode 100644
index fc5d9d9..0000000
--- a/kde/patch/ktexteditor/ktexteditor_fix_indentation.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From aeebeadb5f5955995c17de56cf83ba7166a132dd Mon Sep 17 00:00:00 2001
-From: Sven Brauch <mail@svenbrauch.de>
-Date: Mon, 16 Oct 2017 18:35:50 +0200
-Subject: fix some indenters from indenting on random characters
-
-If triggerCharacters was not set, toString() would return "undefined",
-making indenters trigger on u, n, d, e, f, i and n.
-
-Differential Revision: https://phabricator.kde.org/D8333
----
- src/script/kateindentscript.cpp | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/src/script/kateindentscript.cpp b/src/script/kateindentscript.cpp
-index 15ce387..380bd45 100644
---- a/src/script/kateindentscript.cpp
-+++ b/src/script/kateindentscript.cpp
-@@ -46,7 +46,10 @@ const QString &KateIndentScript::triggerCharacters()
-
- m_triggerCharactersSet = true;
-
-- m_triggerCharacters = global(QStringLiteral("triggerCharacters")).toString();
-+ auto triggerCharacters = global(QStringLiteral("triggerCharacters"));
-+ if ( !triggerCharacters.isUndefined() ) {
-+ m_triggerCharacters = triggerCharacters.toString();
-+ }
-
- //qCDebug(LOG_KTE) << "trigger chars: '" << m_triggerCharacters << "'";
-
---
-cgit v0.11.2
-
diff --git a/kde/patch/ktorrent.patch b/kde/patch/ktorrent.patch
index 123f3af..0fdb4aa 100644
--- a/kde/patch/ktorrent.patch
+++ b/kde/patch/ktorrent.patch
@@ -1,3 +1,10 @@
# Embed a copy of the GeoIP database since the download link no longer works.
cat $CWD/patch/ktorrent/ktorrent.use.package.geoip.database.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+# Fix linking against taglib (ktorrent 5.2),
+# Thanks to Gentoo.
+cat $CWD/patch/ktorrent/ktorrent_taglib_linking.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
+# Fix showing ktorrent in the system tray,
+# Thanks to Gentoo.
+cat $CWD/patch/ktorrent/ktorrent_systray.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/ktorrent/ktorrent_systray.patch b/kde/patch/ktorrent/ktorrent_systray.patch
new file mode 100644
index 0000000..50049af
--- /dev/null
+++ b/kde/patch/ktorrent/ktorrent_systray.patch
@@ -0,0 +1,24 @@
+From 9747a8f524942b57e2fd42254c3de73f9d42918c Mon Sep 17 00:00:00 2001
+From: Matt Scheirer <matt.scheirer@gmail.com>
+Date: Sun, 17 May 2020 02:36:09 -0400
+Subject: [PATCH] Fix starting in tray by removing redundant show() in main
+
+---
+ ktorrent/main.cpp | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/ktorrent/main.cpp b/ktorrent/main.cpp
+index b5866c22..8e532c9c 100644
+--- a/ktorrent/main.cpp
++++ b/ktorrent/main.cpp
+@@ -208,7 +208,6 @@ int main(int argc, char** argv)
+ bt::InitLog(kt::DataDir(kt::CreateIfNotExists) + QLatin1String("log"), true, true, logToStdout);
+
+ kt::GUI widget;
+- widget.show();
+
+ auto handleCmdLine = [&widget, &parser](const QStringList &arguments, const QString &workingDirectory)
+ {
+--
+GitLab
+
diff --git a/kde/patch/ktorrent/ktorrent_taglib_linking.patch b/kde/patch/ktorrent/ktorrent_taglib_linking.patch
new file mode 100644
index 0000000..7f612c8
--- /dev/null
+++ b/kde/patch/ktorrent/ktorrent_taglib_linking.patch
@@ -0,0 +1,248 @@
+From f4c1c91d9b091941ebb4dae6aef95bcf9bc1c388 Mon Sep 17 00:00:00 2001
+From: David Faure <faure@kde.org>
+Date: Sun, 21 Jun 2020 14:19:49 +0200
+Subject: [PATCH] Update FindTaglib from ECM.
+
+This fixes linking for me, there was just nothing in TAGLIB_LIBRARIES
+on my system (taglib in the same custom prefix as KDE code)
+---
+ cmake/modules/FindTaglib.cmake | 191 +++++++++++------------------
+ plugins/mediaplayer/CMakeLists.txt | 3 +-
+ 2 files changed, 74 insertions(+), 120 deletions(-)
+
+diff --git a/cmake/modules/FindTaglib.cmake b/cmake/modules/FindTaglib.cmake
+index 13db60b2..1e1b9075 100644
+--- a/cmake/modules/FindTaglib.cmake
++++ b/cmake/modules/FindTaglib.cmake
+@@ -1,135 +1,90 @@
+-# - Try to find the Taglib library
+-# Once done this will define
++#.rst:
++# FindTaglib
++#-----------
+ #
+-# TAGLIB_FOUND - system has the taglib library
+-# TAGLIB_CFLAGS - the taglib cflags
+-# TAGLIB_LIBRARIES - The libraries needed to use taglib
+-
+-# Copyright (c) 2006, Laurent Montel, <montel@kde.org>
++# Try to find the Taglib library.
+ #
+-# Redistribution and use is allowed according to the terms of the BSD license.
+-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
+-
+-if(NOT TAGLIB_MIN_VERSION)
+- set(TAGLIB_MIN_VERSION "1.6")
+-endif()
+-
+-if(NOT WIN32)
+- find_program(TAGLIBCONFIG_EXECUTABLE NAMES taglib-config PATHS
+- ${BIN_INSTALL_DIR}
+- )
+-endif()
+-
+-#reset vars
+-set(TAGLIB_LIBRARIES)
+-set(TAGLIB_CFLAGS)
+-
+-# if taglib-config has been found
+-if(TAGLIBCONFIG_EXECUTABLE)
+-
+- exec_program(${TAGLIBCONFIG_EXECUTABLE} ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB_VERSION)
+-
+- if("${TAGLIB_MIN_VERSION}" VERSION_GREATER TAGLIB_VERSION)
+- message(STATUS "TagLib version too old: version searched :${TAGLIB_MIN_VERSION}, found ${TAGLIB_VERSION}")
+- set(TAGLIB_FOUND FALSE)
+- else()
+-
+- exec_program(${TAGLIBCONFIG_EXECUTABLE} ARGS --libs RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB_LIBRARIES)
+-
+- exec_program(${TAGLIBCONFIG_EXECUTABLE} ARGS --cflags RETURN_VALUE _return_VALUE OUTPUT_VARIABLE TAGLIB_CFLAGS)
++# This will define the following variables:
++#
++# ``Taglib_FOUND``
++# True if the system has the taglib library of at least the minimum
++# version specified by the version parameter to find_package()
++# ``Taglib_INCLUDE_DIRS``
++# The taglib include dirs for use with target_include_directories
++# ``Taglib_LIBRARIES``
++# The taglib libraries for use with target_link_libraries()
++# ``Taglib_VERSION``
++# The version of taglib that was found
++#
++# If ``Taglib_FOUND is TRUE, it will also define the following imported
++# target:
++#
++# ``Taglib::Taglib``
++# The Taglib library
++#
++# Since 5.72.0
++#
++# SPDX-FileCopyrightText: 2006 Laurent Montel <montel@kde.org>
++# SPDX-FileCopyrightText: 2019 Heiko Becker <heirecka@exherbo.org>
++# SPDX-FileCopyrightText: 2020 Elvis Angelaccio <elvis.angelaccio@kde.org>
++# SPDX-License-Identifier: BSD-3-Clause
+
+- if(TAGLIB_LIBRARIES AND TAGLIB_CFLAGS)
+- set(TAGLIB_FOUND TRUE)
+- endif()
+- string(REGEX REPLACE " *-I" ";" TAGLIB_INCLUDES "${TAGLIB_CFLAGS}")
+- endif()
+- mark_as_advanced(TAGLIB_CFLAGS TAGLIB_LIBRARIES TAGLIB_INCLUDES)
++find_package(PkgConfig QUIET)
+
+-else()
++pkg_search_module(PC_TAGLIB QUIET taglib)
+
+- find_path(TAGLIB_INCLUDES
+- NAMES
+- tag.h
++find_path(Taglib_INCLUDE_DIRS
++ NAMES tag.h
+ PATH_SUFFIXES taglib
+- PATHS
+- ${KDE4_INCLUDE_DIR}
+- ${INCLUDE_INSTALL_DIR}
+- )
+-
+- if(NOT WIN32)
+- # on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX
++ HINTS ${PC_TAGLIB_INCLUDEDIR}
++)
+
+- find_library(TAGLIB_LIBRARIES tag PATHS ${KDE4_LIB_DIR} ${LIB_INSTALL_DIR})
++find_library(Taglib_LIBRARIES
++ NAMES tag
++ HINTS ${PC_TAGLIB_LIBDIR}
++)
+
+- else()
++set(Taglib_VERSION ${PC_TAGLIB_VERSION})
+
+- # 1. get all possible libnames
+- set(args PATHS ${KDE4_LIB_DIR} ${LIB_INSTALL_DIR})
+- set(newargs "")
+- set(libnames_release "")
+- set(libnames_debug "")
++if (Taglib_INCLUDE_DIRS AND NOT Taglib_VERSION)
++ if(EXISTS "${Taglib_INCLUDE_DIRS}/taglib.h")
++ file(READ "${Taglib_INCLUDE_DIRS}/taglib.h" TAGLIB_H)
+
+- list(LENGTH args listCount)
++ string(REGEX MATCH "#define TAGLIB_MAJOR_VERSION[ ]+[0-9]+" TAGLIB_MAJOR_VERSION_MATCH ${TAGLIB_H})
++ string(REGEX MATCH "#define TAGLIB_MINOR_VERSION[ ]+[0-9]+" TAGLIB_MINOR_VERSION_MATCH ${TAGLIB_H})
++ string(REGEX MATCH "#define TAGLIB_PATCH_VERSION[ ]+[0-9]+" TAGLIB_PATCH_VERSION_MATCH ${TAGLIB_H})
+
+- # just one name
+- list(APPEND libnames_release "tag")
+- list(APPEND libnames_debug "tagd")
+-
+- set(newargs ${args})
+-
+- # search the release lib
+- find_library(TAGLIB_LIBRARIES_RELEASE
+- NAMES ${libnames_release}
+- ${newargs}
+- )
+-
+- # search the debug lib
+- find_library(TAGLIB_LIBRARIES_DEBUG
+- NAMES ${libnames_debug}
+- ${newargs}
+- )
+-
+- if(TAGLIB_LIBRARIES_RELEASE AND TAGLIB_LIBRARIES_DEBUG)
+-
+- # both libs found
+- set(TAGLIB_LIBRARIES optimized ${TAGLIB_LIBRARIES_RELEASE}
+- debug ${TAGLIB_LIBRARIES_DEBUG})
+-
+- else()
+-
+- if(TAGLIB_LIBRARIES_RELEASE)
+-
+- # only release found
+- set(TAGLIB_LIBRARIES ${TAGLIB_LIBRARIES_RELEASE})
+-
+- else()
+-
+- # only debug (or nothing) found
+- set(TAGLIB_LIBRARIES ${TAGLIB_LIBRARIES_DEBUG})
+-
+- endif()
+-
+- endif()
+-
+- mark_as_advanced(TAGLIB_LIBRARIES_RELEASE)
+- mark_as_advanced(TAGLIB_LIBRARIES_DEBUG)
++ string(REGEX REPLACE ".*_MAJOR_VERSION[ ]+(.*)" "\\1" TAGLIB_MAJOR_VERSION "${TAGLIB_MAJOR_VERSION_MATCH}")
++ string(REGEX REPLACE ".*_MINOR_VERSION[ ]+(.*)" "\\1" TAGLIB_MINOR_VERSION "${TAGLIB_MINOR_VERSION_MATCH}")
++ string(REGEX REPLACE ".*_PATCH_VERSION[ ]+(.*)" "\\1" TAGLIB_PATCH_VERSION "${TAGLIB_PATCH_VERSION_MATCH}")
+
++ set(Taglib_VERSION "${TAGLIB_MAJOR_VERSION}.${TAGLIB_MINOR_VERSION}.${TAGLIB_PATCH_VERSION}")
+ endif()
+-
+- include(FindPackageMessage)
+- include(FindPackageHandleStandardArgs)
+- find_package_handle_standard_args(Taglib DEFAULT_MSG TAGLIB_INCLUDES TAGLIB_LIBRARIES)
+-
+ endif()
+
+-
+-if(TAGLIB_FOUND)
+- if(NOT Taglib_FIND_QUIETLY AND TAGLIBCONFIG_EXECUTABLE)
+- message(STATUS "Taglib found: ${TAGLIB_LIBRARIES}")
+- endif()
+-else()
+- if(Taglib_FIND_REQUIRED)
+- message(FATAL_ERROR "Could not find Taglib")
+- endif()
++include(FindPackageHandleStandardArgs)
++find_package_handle_standard_args(Taglib
++ FOUND_VAR
++ Taglib_FOUND
++ REQUIRED_VARS
++ Taglib_LIBRARIES
++ Taglib_INCLUDE_DIRS
++ VERSION_VAR
++ Taglib_VERSION
++)
++
++if (Taglib_FOUND AND NOT TARGET Taglib::Taglib)
++ add_library(Taglib::Taglib UNKNOWN IMPORTED)
++ set_target_properties(Taglib::Taglib PROPERTIES
++ IMPORTED_LOCATION "${Taglib_LIBRARIES}"
++ INTERFACE_INCLUDE_DIRECTORIES "${Taglib_INCLUDE_DIRS}"
++ )
+ endif()
+
++mark_as_advanced(Taglib_LIBRARIES Taglib_INCLUDE_DIRS)
++
++include(FeatureSummary)
++set_package_properties(Taglib PROPERTIES
++ URL "https://taglib.org/"
++ DESCRIPTION "A library for reading and editing the meta-data of audio formats"
++)
+diff --git a/plugins/mediaplayer/CMakeLists.txt b/plugins/mediaplayer/CMakeLists.txt
+index 8bbeeb74..5fbe056f 100644
+--- a/plugins/mediaplayer/CMakeLists.txt
++++ b/plugins/mediaplayer/CMakeLists.txt
+@@ -1,5 +1,4 @@
+ find_package(Taglib REQUIRED)
+-include_directories(${TAGLIB_INCLUDES})
+ #find_package(Qt5 ${QT_MIN_VERSION} CONFIG REQUIRED Multimedia MultimediaWidgets)
+ #include_directories(${Qt5Multimedia_INCLUDE_DIRS})
+ include_directories(${PHONON_INCLUDES})
+@@ -34,7 +33,7 @@ kcoreaddons_desktop_to_json(ktorrent_mediaplayer ktorrent_mediaplayer.desktop)
+ target_link_libraries(
+ ktorrent_mediaplayer
+ ktcore
+- ${TAGLIB_LIBRARIES}
++ Taglib::Taglib
+ Phonon::phonon4qt5
+ KF5::Torrent
+ KF5::I18n
+--
+GitLab
+
+
diff --git a/kde/patch/ktp-accounts-kcm.patch b/kde/patch/ktp-accounts-kcm.patch
deleted file mode 100644
index ea37b9e..0000000
--- a/kde/patch/ktp-accounts-kcm.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix a crash in KDE Telepathy which was supposed to be fixed in 15.08.2:
-# See also https://bugs.kde.org/show_bug.cgi?id=351785
-#cat $CWD/patch/ktp-accounts-kcm/ktp-accounts-kcm_kdebug_351785.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/ktp-accounts-kcm/ktp-accounts-kcm_kdebug_351785.patch b/kde/patch/ktp-accounts-kcm/ktp-accounts-kcm_kdebug_351785.patch
deleted file mode 100644
index aa77aae..0000000
--- a/kde/patch/ktp-accounts-kcm/ktp-accounts-kcm_kdebug_351785.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From: Martin Klapetek <mklapetek@kde.org>
-Date: Thu, 17 Sep 2015 16:11:30 +0000
-Subject: [kaccounts] Emit configUiReady() when config UI is ready
-X-Git-Url: http://quickgit.kde.org/?p=ktp-accounts-kcm.git&a=commitdiff&h=07c7cc5309e11171b2e552678d58257ccfc44e42
----
-[kaccounts] Emit configUiReady() when config UI is ready
-
-Should prevent the crash when clicking the Configure button
-
-(requires kaccounts-integration 15.08.2)
-
-BUG: 351785
-FIXED-IN: 15.08.2
----
-
-
---- a/plugins/kaccounts/kaccounts-ui-provider.cpp
-+++ b/plugins/kaccounts/kaccounts-ui-provider.cpp
-@@ -106,10 +106,10 @@
-
- if (d->type == KAccountsUiPlugin::ConfigureAccountDialog) {
- if (d->accountManager->isReady()) {
-- Q_EMIT uiReady();
-+ Q_EMIT configUiReady();
- } else {
- // let's wait for AM to become ready first
-- connect(d->accountManager->becomeReady(), &Tp::PendingOperation::finished, this, &KAccountsUiProvider::uiReady);
-+ connect(d->accountManager->becomeReady(), &Tp::PendingOperation::finished, this, &KAccountsUiProvider::configUiReady);
- }
- }
- }
-
diff --git a/kde/patch/kwin.patch b/kde/patch/kwin.patch
deleted file mode 100644
index 9f05f30..0000000
--- a/kde/patch/kwin.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-# Trivial patch for testing the CK2 session controller interface
-# as a replacement for systemd-logind;
-#cat $CWD/patch/kwin/kwin_replace_logind_with_ck2.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Workaround Qt regression no longer delivering events for the root window.
-# Fixed in kwin 5.10.3.
-#cat $CWD/patch/kwin/kwin_qt59_rootwindow_events.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix compilation with cmake 3.10 (fixed in 5.12.0):
-#cat $CWD/patch/kwin/kwin_cmake310.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/kwin/kwin_cmake310.patch b/kde/patch/kwin/kwin_cmake310.patch
deleted file mode 100644
index 5675ba5..0000000
--- a/kde/patch/kwin/kwin_cmake310.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-Taken from:
-https://gitweb.gentoo.org/repo/gentoo.git/tree/kde-plasma/kwin/files/kwin-5.11.5-cmake-3.10.patch
-
-From cd544890ced4192d07467c89e23adbb62d8cea5c Mon Sep 17 00:00:00 2001
-From: Milian Wolff <mail@milianw.de>
-Date: Mon, 18 Dec 2017 11:40:35 +0100
-Subject: Fix build with CMake 3.10
-
-Looks like a classic false-positive, but this makes the compile
-pass for me without making the code harder to read:
-
-AutoMoc error
--------------
- "/ssd/milian/projects/kf5/src/kde/workspace/kwin/kcmkwin/kwinscripts/main.cpp"
-The file contains a K_PLUGIN_FACTORY macro, but does not include "main.moc"!
-Consider to
- - add #include "main.moc"
- - enable SKIP_AUTOMOC for this file
-
-So we just add the include and then get rid of the duplicate
-definition of the plugin factory and the problem is resolved.
----
- kcmkwin/kwinscripts/main.cpp | 2 ++
- kcmkwin/kwinscripts/module.cpp | 2 --
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/kcmkwin/kwinscripts/main.cpp b/kcmkwin/kwinscripts/main.cpp
-index f5ee04b..baa5175 100644
---- a/kcmkwin/kwinscripts/main.cpp
-+++ b/kcmkwin/kwinscripts/main.cpp
-@@ -22,3 +22,5 @@
-
- K_PLUGIN_FACTORY(KcmKWinScriptsFactory,
- registerPlugin<Module>("kwin-scripts");)
-+
-+#include "main.moc"
-diff --git a/kcmkwin/kwinscripts/module.cpp b/kcmkwin/kwinscripts/module.cpp
-index a0d698e..ccf7d41 100644
---- a/kcmkwin/kwinscripts/module.cpp
-+++ b/kcmkwin/kwinscripts/module.cpp
-@@ -40,8 +40,6 @@
-
- #include "version.h"
-
--K_PLUGIN_FACTORY_DECLARATION(KcmKWinScriptsFactory)
--
- Module::Module(QWidget *parent, const QVariantList &args) :
- KCModule(parent, args),
- ui(new Ui::Module),
---
-cgit v0.11.2
-
diff --git a/kde/patch/kwin/kwin_qt59_rootwindow_events.patch b/kde/patch/kwin/kwin_qt59_rootwindow_events.patch
deleted file mode 100644
index 178d081..0000000
--- a/kde/patch/kwin/kwin_qt59_rootwindow_events.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From a6dee74ee455d1da47dd5c9d55a84adbb5e1426a Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Martin=20Fl=C3=B6ser?= <mgraesslin@kde.org>
-Date: Sun, 18 Jun 2017 14:23:33 +0200
-Subject: Workaround Qt regression of no longer delivering events for the root
- window
-
-Summary:
-With qtbase 2b34aefcf02f09253473b096eb4faffd3e62b5f4 we do no longer get
-events reported for the X11 root window. Our keyboard handling in effects
-like PresentWindows and DesktopGrid relied on that.
-
-This change works around the regression by calling winId() on
-qApp->desktop() as suggested in the change. This is a short term solution
-for the 5.10 branch.
-
-This needs to be addressed properly by no longer relying on Qt in this
-area. KWin already does not rely on Qt for Wayland in that area and is
-able to compose the QKeyEvents. This should also be done on X11. It just
-needs some more hook up code for xkb, but that's needed anyway to improve
-modifier only shortcuts and friends.
-
-BUG: 360841
-FIXED-IN: 5.10.3
-
-Reviewers: #kwin, #plasma
-
-Subscribers: plasma-devel, kwin
-
-Tags: #kwin
-
-Differential Revision: https://phabricator.kde.org/D6258
----
- effects.cpp | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/effects.cpp b/effects.cpp
-index d2c4768..8155de6 100644
---- a/effects.cpp
-+++ b/effects.cpp
-@@ -48,6 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
- #include "kwinglutils.h"
-
- #include <QDebug>
-+#include <QDesktopWidget>
-
- #include <Plasma/Theme>
-
-@@ -599,6 +600,11 @@ bool EffectsHandlerImpl::grabKeyboard(Effect* effect)
- bool ret = grabXKeyboard();
- if (!ret)
- return false;
-+ // Workaround for Qt 5.9 regression introduced with 2b34aefcf02f09253473b096eb4faffd3e62b5f4
-+ // we no longer get any events for the root window, one needs to call winId() on the desktop window
-+ // TODO: change effects event handling to create the appropriate QKeyEvent without relying on Qt
-+ // as it's done already in the Wayland case.
-+ qApp->desktop()->winId();
- }
- keyboard_grab_effect = effect;
- return true;
---
-cgit v0.11.2
-
-
diff --git a/kde/patch/kwin/kwin_replace_logind_with_ck2.patch b/kde/patch/kwin/kwin_replace_logind_with_ck2.patch
deleted file mode 100644
index 294a691..0000000
--- a/kde/patch/kwin/kwin_replace_logind_with_ck2.patch
+++ /dev/null
@@ -1,85 +0,0 @@
-From: Eric Koegel <eric.koegel@gmail.com>
-Date: Sun, 24 Jul 2016 14:37:26 +0300
-
-Trivial patch for testing the CK2 session controller interface
-as a replacement for systemd-logind;
-Eric Koegel's original patch was rebased to kwin-5.10.2 by Eric Hameleers
-
-diff -uar kwin-5.10.2.orig/logind.cpp kwin-5.10.2/logind.cpp
---- kwin-5.10.2.orig/logind.cpp 2017-06-13 20:19:37.000000000 +0200
-+++ kwin-5.10.2/logind.cpp 2017-06-18 20:49:56.018661568 +0200
-@@ -58,10 +58,10 @@
- namespace KWin
- {
-
--const static QString s_login1Service = QStringLiteral("org.freedesktop.login1");
--const static QString s_login1Path = QStringLiteral("/org/freedesktop/login1");
--const static QString s_login1ManagerInterface = QStringLiteral("org.freedesktop.login1.Manager");
--const static QString s_login1SessionInterface = QStringLiteral("org.freedesktop.login1.Session");
-+const static QString s_login1Service = QStringLiteral("org.freedesktop.ConsoleKit");
-+const static QString s_login1Path = QStringLiteral("/org/freedesktop/ConsoleKit/Manager");
-+const static QString s_login1ManagerInterface = QStringLiteral("org.freedesktop.ConsoleKit.Manager");
-+const static QString s_login1SessionInterface = QStringLiteral("org.freedesktop.ConsoleKit.Session");
- const static QString s_dbusPropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties");
-
- LogindIntegration *LogindIntegration::s_self = nullptr;
-@@ -151,7 +151,7 @@
- return;
- }
- if (!reply.isValid()) {
-- qCDebug(KWIN_CORE) << "The session is not registered with logind" << reply.error().message();
-+ qCDebug(KWIN_CORE) << "The session is not registered with ConsoleKit2" << reply.error().message();
- return;
- }
- m_sessionPath = reply.value().path();
-@@ -199,7 +199,7 @@
- m_sessionPath,
- s_dbusPropertiesInterface,
- QStringLiteral("Get"));
-- message.setArguments(QVariantList({s_login1SessionInterface, QStringLiteral("Active")}));
-+ message.setArguments(QVariantList({s_login1SessionInterface, QStringLiteral("active")}));
- QDBusPendingReply<QVariant> reply = m_bus.asyncCall(message);
- QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this);
- connect(watcher, &QDBusPendingCallWatcher::finished, this,
-@@ -207,7 +207,7 @@
- QDBusPendingReply<QVariant> reply = *self;
- self->deleteLater();
- if (!reply.isValid()) {
-- qCDebug(KWIN_CORE) << "Failed to get Active Property of logind session:" << reply.error().message();
-+ qCDebug(KWIN_CORE) << "Failed to get Active Property of ConsoleKit2 session:" << reply.error().message();
- return;
- }
- const bool active = reply.value().toBool();
-@@ -236,7 +236,7 @@
- QDBusPendingReply<QVariant> reply = *self;
- self->deleteLater();
- if (!reply.isValid()) {
-- qCDebug(KWIN_CORE) << "Failed to get VTNr Property of logind session:" << reply.error().message();
-+ qCDebug(KWIN_CORE) << "Failed to get VTNr Property of ConsoleKit2 session:" << reply.error().message();
- return;
- }
- const int vt = reply.value().toUInt();
-@@ -365,12 +365,12 @@
- QDBusPendingReply<QVariant> reply = *self;
- self->deleteLater();
- if (!reply.isValid()) {
-- qCDebug(KWIN_CORE) << "Failed to get Seat Property of logind session:" << reply.error().message();
-+ qCDebug(KWIN_CORE) << "Failed to get Seat Property of ConsoleKit2 session:" << reply.error().message();
- return;
- }
- DBusLogindSeat seat = qdbus_cast<DBusLogindSeat>(reply.value().value<QDBusArgument>());
- const QString seatPath = seat.path.path();
-- qCDebug(KWIN_CORE) << "Logind seat:" << seat.name << "/" << seatPath;
-+ qCDebug(KWIN_CORE) << "ConsoleKit2 seat:" << seat.name << "/" << seatPath;
- if (m_seatPath != seatPath) {
- m_seatPath = seatPath;
- }
-@@ -385,7 +385,7 @@
- }
- QDBusMessage message = QDBusMessage::createMethodCall(s_login1Service,
- m_seatPath,
-- QStringLiteral("org.freedesktop.login1.Seat"),
-+ QStringLiteral("org.freedesktop.ConsoleKit.Seat"),
- QStringLiteral("SwitchTo"));
- message.setArguments(QVariantList{vtNr});
- m_bus.asyncCall(message);
diff --git a/kde/patch/libkdcraw.patch b/kde/patch/libkdcraw.patch
deleted file mode 100644
index fd8cf51..0000000
--- a/kde/patch/libkdcraw.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Backport a patch from git to support our newer cmake:
-#cat $CWD/patch/libkdcraw/libkdcraw_cmake_minver.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/libkdcraw/libkdcraw_cmake_minver.patch b/kde/patch/libkdcraw/libkdcraw_cmake_minver.patch
deleted file mode 100644
index 3446a19..0000000
--- a/kde/patch/libkdcraw/libkdcraw_cmake_minver.patch
+++ /dev/null
@@ -1,7 +0,0 @@
---- libkdcraw-15.08.0.orig/CMakeLists.txt 2015-05-14 22:54:16.000000000 +0200
-+++ libkdcraw-15.08.0/CMakeLists.txt 2015-08-25 13:37:50.880746449 +0200
-@@ -1,3 +1,4 @@
-+cmake_minimum_required(VERSION 2.8.9)
- #
- # Copyright (c) 2010-2014, Gilles Caulier, <caulier dot gilles at gmail dot com>
- #
diff --git a/kde/patch/libkexiv2.patch b/kde/patch/libkexiv2.patch
deleted file mode 100644
index 5a61c23..0000000
--- a/kde/patch/libkexiv2.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Backport a patch from git to support our newer cmake:
-#cat $CWD/patch/libkexiv2/libkexiv2_cmake_minver.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/libkexiv2/libkexiv2_cmake_minver.patch b/kde/patch/libkexiv2/libkexiv2_cmake_minver.patch
deleted file mode 100644
index a83861c..0000000
--- a/kde/patch/libkexiv2/libkexiv2_cmake_minver.patch
+++ /dev/null
@@ -1,7 +0,0 @@
---- libkexiv2-15.08.0.orig/CMakeLists.txt 2015-04-30 21:04:22.000000000 +0200
-+++ libkexiv2-15.08.0/CMakeLists.txt 2015-08-25 13:14:34.093738317 +0200
-@@ -1,3 +1,4 @@
-+cmake_minimum_required(VERSION 2.8.9)
- #
- # Copyright (c) 2010-2014, Gilles Caulier, <caulier dot gilles at gmail dot com>
- #
diff --git a/kde/patch/libkface.patch b/kde/patch/libkface.patch
index 9775e82..f488cf6 100644
--- a/kde/patch/libkface.patch
+++ b/kde/patch/libkface.patch
@@ -1,3 +1,2 @@
# Compile libkface against opencv 3.2:
cat $CWD/patch/libkface/libkface_opencv3.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/libkleo.patch b/kde/patch/libkleo.patch
deleted file mode 100644
index 9c1cef3..0000000
--- a/kde/patch/libkleo.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Compile libkleo with gcc7:
-# Fixed in Applications 17.04.2:
-#cat $CWD/patch/libkleo/libkleo_gcc7.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/libkleo/libkleo_gcc7.patch b/kde/patch/libkleo/libkleo_gcc7.patch
deleted file mode 100644
index 40e0616..0000000
--- a/kde/patch/libkleo/libkleo_gcc7.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 675ce908a33d16f3b78d3fc741b0ff45790e4770 Mon Sep 17 00:00:00 2001
-From: Fabian Vogt <fabian@ritter-vogt.de>
-Date: Wed, 17 May 2017 17:05:41 +0200
-Subject: Fix compilation with GCC 7
-
-std::bind is part of functional, and GCC 7 requires an explicit include.
----
- src/kleo/enum.cpp | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/src/kleo/enum.cpp b/src/kleo/enum.cpp
-index 15ea1fd..829d4fd 100644
---- a/src/kleo/enum.cpp
-+++ b/src/kleo/enum.cpp
-@@ -33,6 +33,9 @@
- #include "enum.h"
- #include "libkleo_debug.h"
- #include "models/keycache.h"
-+
-+#include <functional>
-+
- #include <KLocalizedString>
-
- #include <gpgme++/key.h>
---
-cgit v0.11.2
-
diff --git a/kde/patch/libksysguard.patch b/kde/patch/libksysguard.patch
deleted file mode 100644
index d45baac..0000000
--- a/kde/patch/libksysguard.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Fix for "error: isnan was not declared in this scope"
-# Fixed post Plasma 5.5.5.
-#cat $CWD/patch/libksysguard/libksysguard_isnan.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/libksysguard/libksysguard_isnan.patch b/kde/patch/libksysguard/libksysguard_isnan.patch
deleted file mode 100644
index c6ce1e9..0000000
--- a/kde/patch/libksysguard/libksysguard_isnan.patch
+++ /dev/null
@@ -1,176 +0,0 @@
-From: David Rosca <nowrep@gmail.com>
-Date: Tue, 23 Feb 2016 16:32:35 +0000
-Subject: signalplotter: Use std namespaced isnan and isinf
-X-Git-Tag: v5.5.95
-X-Git-Url: http://quickgit.kde.org/?p=libksysguard.git&a=commitdiff&h=b0578798eb3f5bdad0a25ea9b4a52c53ebcfc020
----
-signalplotter: Use std namespaced isnan and isinf
-
-Test Plan: Fixes build for me.
-
-Reviewers: #plasma, ivan
-
-Reviewed By: ivan
-
-Subscribers: ivan, plasma-devel
-
-Projects: #plasma
-
-Differential Revision: https://phabricator.kde.org/D1010
----
-
-
---- a/signalplotter/ksignalplotter.cpp
-+++ b/signalplotter/ksignalplotter.cpp
-@@ -32,8 +32,6 @@
- #include "ksignalplotter_p.h"
- #include "processcore/processcore_debug.h"
-
--#include <math.h> //For floor, ceil, log10 etc for calculating ranges
--
- #include <QPainter>
- #include <QPixmap>
- #include <QPainterPath>
-@@ -49,7 +47,7 @@
-
- #include <klocalizedstring.h>
- #include <kiconloader.h>
--#include <math.h>
-+#include <cmath>
- #include <limits>
-
- #ifdef SVG_SUPPORT
-@@ -485,20 +483,20 @@
- qreal value=0;
- for(int i = sampleBuf.count()-1; i>= 0; i--) {
- qreal newValue = sampleBuf[i];
-- if( !isinf(newValue) && !isnan(newValue) )
-+ if( !std::isinf(newValue) && !std::isnan(newValue) )
- value += newValue;
- }
-- if(isnan(mMinValue) || mMinValue > value) mMinValue = value;
-- if(isnan(mMaxValue) || mMaxValue < value) mMaxValue = value;
-+ if(std::isnan(mMinValue) || mMinValue > value) mMinValue = value;
-+ if(std::isnan(mMaxValue) || mMaxValue < value) mMaxValue = value;
- if(value > 0.7*mMaxValue)
- mRescaleTime = time;
- } else {
- qreal value;
- for(int i = sampleBuf.count()-1; i>= 0; i--) {
- value = sampleBuf[i];
-- if( !isinf(value) && !isnan(value) ) {
-- if(isnan(mMinValue) || mMinValue > value) mMinValue = value;
-- if(isnan(mMaxValue) || mMaxValue < value) mMaxValue = value;
-+ if( !std::isinf(value) && !std::isnan(value) ) {
-+ if(std::isnan(mMinValue) || mMinValue > value) mMinValue = value;
-+ if(std::isnan(mMaxValue) || mMaxValue < value) mMaxValue = value;
- if(value > 0.7*mMaxValue)
- mRescaleTime = time;
- }
-@@ -789,9 +787,9 @@
- qreal max = mUserMaxValue;
- qreal min = mUserMinValue;
- if( mUseAutoRange ) {
-- if(!isnan(mMaxValue) && mMaxValue * 0.99 > max) //Allow max value to go very slightly over the given max, for rounding reasons
-+ if(!std::isnan(mMaxValue) && mMaxValue * 0.99 > max) //Allow max value to go very slightly over the given max, for rounding reasons
- max = mMaxValue;
-- if(!isnan(mMinValue) && mMinValue * 0.99 < min) {
-+ if(!std::isnan(mMinValue) && mMinValue * 0.99 < min) {
- min = mMinValue;
- }
- }
-@@ -920,23 +918,23 @@
- bool firstLine = true;
- for (int j = 0; j < count; ++j) {
- qreal point0 = datapoints[j];
-- if( isnan(point0) )
-+ if( std::isnan(point0) )
- continue; //Just do not draw points with nans. skip them
-
- qreal point1 = prev_datapoints[j];
- qreal point2 = prev_prev_datapoints[j];
-
-- if(isnan(point1))
-+ if(std::isnan(point1))
- point1 = point0;
-- else if(mSmoothGraph && !isinf(point1)) {
-+ else if(mSmoothGraph && !std::isinf(point1)) {
- // Apply a weighted average just to smooth the graph out a bit
- // Do not try to smooth infinities or nans
- point0 = (2*point0 + point1)/3;
-- if(!isnan(point2) && !isinf(point2))
-+ if(!std::isnan(point2) && !std::isinf(point2))
- point1 = (2*point1 + point2)/3;
- // We don't bother to average out y2. This will introduce slight inaccuracies in the gradients, but they aren't really noticeable.
- }
-- if(isnan(point2))
-+ if(std::isnan(point2))
- point2 = point1;
-
- if (mStackBeams) {
-@@ -1046,12 +1044,12 @@
- }
- QString KSignalPlotter::lastValueAsString( int i, int precision) const
- {
-- if(d->mBeamData.isEmpty() || d->mBeamData.first().size() <= i || isnan(d->mBeamData.first().at(i))) return QString();
-+ if(d->mBeamData.isEmpty() || d->mBeamData.first().size() <= i || std::isnan(d->mBeamData.first().at(i))) return QString();
- return valueAsString(d->mBeamData.first().at(i), precision); //retrieve the newest value for this beam
- }
- QString KSignalPlotter::valueAsString( qreal value, int precision) const
- {
-- if(isnan(value))
-+ if(std::isnan(value))
- return QString();
- value = value / d->mScaleDownBy; // scale the value. E.g. from Bytes to KiB
- return d->scaledValueAsString(value, precision);
-
---- a/tests/signalplottertest.cpp
-+++ b/tests/signalplottertest.cpp
-@@ -56,8 +56,8 @@
- s->addBeam(Qt::blue);
- s->addBeam(Qt::red);
-
-- QVERIFY( isnan(s->lastValue(0)) ); //unset, so should default to NaN
-- QVERIFY( isnan(s->lastValue(1)) ); //unset, so should default to NaN
-+ QVERIFY( std::isnan(s->lastValue(0)) ); //unset, so should default to NaN
-+ QVERIFY( std::isnan(s->lastValue(1)) ); //unset, so should default to NaN
- QCOMPARE(s->numBeams(), 2);
- QVERIFY(s->beamColor(0) == Qt::blue);
- QVERIFY(s->beamColor(1) == Qt::red);
-@@ -92,7 +92,7 @@
- QVERIFY(s->beamColor(0) == Qt::blue);
- QVERIFY(s->beamColor(1) == Qt::red);
- QCOMPARE(s->lastValue(0), 1.0);
-- QVERIFY( isnan(s->lastValue(1)) ); //unset, so should default to NaN
-+ QVERIFY( std::isnan(s->lastValue(1)) ); //unset, so should default to NaN
- }
-
- void TestSignalPlotter::testReorderBeams()
-@@ -153,8 +153,8 @@
- s->addBeam(Qt::blue);
- s->addBeam(Qt::red);
- QCOMPARE(s->numBeams(), 2);
-- QVERIFY(isnan(s->lastValue(0))); //unset, so should default to NaN
-- QVERIFY(isnan(s->lastValue(1))); //unset, so should default to NaN
-+ QVERIFY(std::isnan(s->lastValue(0))); //unset, so should default to NaN
-+ QVERIFY(std::isnan(s->lastValue(1))); //unset, so should default to NaN
- //Add some data
- QList<qreal> data;
- data << 1.0 << 2.0;
-@@ -189,13 +189,13 @@
- QCOMPARE(s->numBeams(), 3);
- QCOMPARE(s->lastValue(0), 2.0);
- QCOMPARE(s->lastValue(1), 1.0);
-- QVERIFY(isnan(s->lastValue(2))); //unset, so should default to NaN
-+ QVERIFY(std::isnan(s->lastValue(2))); //unset, so should default to NaN
-
- newOrder.clear();
- newOrder << 2 << 0 << 1;
- s->reorderBeams(newOrder);
- QCOMPARE(s->numBeams(), 3);
-- QVERIFY(isnan(s->lastValue(0))); //unset, so should default to NaN
-+ QVERIFY(std::isnan(s->lastValue(0))); //unset, so should default to NaN
- QCOMPARE(s->lastValue(1), 2.0);
- QCOMPARE(s->lastValue(2), 1.0);
- }
-
diff --git a/kde/patch/marble.patch b/kde/patch/marble.patch
deleted file mode 100644
index eb2b7fc..0000000
--- a/kde/patch/marble.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# Ensure marble bindings for Qt4 get compiled:
-# No longer needed in Applications 15.12.0, libkface was ported to KF5.
-#cat $CWD/patch/marble/marble_qt4.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/marble/marble_qt4.patch b/kde/patch/marble/marble_qt4.patch
deleted file mode 100644
index e497023..0000000
--- a/kde/patch/marble/marble_qt4.patch
+++ /dev/null
@@ -1,47 +0,0 @@
---- marble-15.08.0.orig/CMakeLists.txt 2015-08-12 13:14:02.000000000 +0200
-+++ marble-15.08.0/CMakeLists.txt 2015-08-29 00:24:00.767298683 +0200
-@@ -45,6 +45,8 @@
- ####################################################
- # Specific options for building with Qt 4 vs 5
-
-+option(QT5BUILD "Build for Qt5" ON)
-+
- if(ANDROID)
- if (NOT DEFINED ENV{Qt5_host})
- message(FATAL_ERROR "Configure the env variable Qt5_host to point to your host Qt5 installation.")
-@@ -79,6 +81,7 @@
- include_directories(SYSTEM "$ENV{ANDROID_NDK}/platforms/$ENV{ANDROID_PLATFORM}/arch-arm/usr/include")
- message(STATUS "Include directories: " "$ENV{ANDROID_NDK}/platforms/$ENV{ANDROID_PLATFORM}/arch-arm/usr/include")
- else()
-+ if(QT5BUILD)
- find_package(Qt5WebKit)
- find_package(Qt5WebKitWidgets)
- find_package(Qt5DBus)
-@@ -86,8 +89,10 @@
- if ( NOT Qt5WebKit_FOUND )
- set ( MARBLE_NO_WEBKIT TRUE )
- endif()
-+ endif()
- endif()
-
-+if(QT5BUILD)
- find_package(Qt5Core)
- find_package(Qt5Xml)
- find_package(Qt5Network)
-@@ -100,6 +105,7 @@
- find_package(Qt5Quick)
- find_package(Qt5OpenGL)
- find_package(Qt5PrintSupport)
-+endif()
-
- if(QTONLY)
- # Forward the old QTONLY=TRUE option to the new WITH_KDE=FALSE
-@@ -111,8 +117,6 @@
- unset(QTONLY)
- endif()
-
--option(QT5BUILD "Build for Qt5" ON)
--
- if(QT5BUILD AND Qt5Core_FOUND)
- cmake_minimum_required(VERSION 2.8.12)
- set(QT4BUILD FALSE)
diff --git a/kde/patch/messagelib.patch b/kde/patch/messagelib.patch
deleted file mode 100644
index a76851e..0000000
--- a/kde/patch/messagelib.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# CVE-2018-19516: HTML email can open browser window automatically.
-# Fixed in messagelib of KDE Applications 18.12.0.
-#cat $CWD/patch/messagelib/messagelib_CVE-2018-19516.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/messagelib/messagelib_CVE-2018-19516.patch b/kde/patch/messagelib/messagelib_CVE-2018-19516.patch
deleted file mode 100644
index 599dd39..0000000
--- a/kde/patch/messagelib/messagelib_CVE-2018-19516.patch
+++ /dev/null
@@ -1,20 +0,0 @@
-From 34765909cdf8e55402a8567b48fb288839c61612 Mon Sep 17 00:00:00 2001
-From: Laurent Montel <montel@kde.org>
-Date: Fri, 23 Nov 2018 07:37:02 +0100
-Subject: Exclude Refresh from MetaData (Not necessary)
-
-diff -uar messagelib-18.08.3.orig/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp messagelib-18.08.3/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp
---- messagelib-18.08.3.orig/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp 2018-10-31 07:56:07.000000000 +0100
-+++ messagelib-18.08.3/messageviewer/src/messagepartthemes/default/defaultrenderer.cpp 2018-12-09 23:38:11.009130622 +0100
-@@ -308,6 +308,11 @@
- return htmlSource;
- }
- extraHead = s.mid(startIndex + 6 , endIndex - startIndex - 6);
-+ //Don't authorize to refresh content.
-+ if (s.contains(QStringLiteral("http-equiv=\"REFRESH\""), Qt::CaseInsensitive)) {
-+ extraHead.clear();
-+ }
-+
- s = s.mid(endIndex + 7).trimmed();
- }
-
diff --git a/kde/patch/oxygen-gtk2.patch b/kde/patch/oxygen-gtk2.patch
index 4ca11e9..a2dd03e 100644
--- a/kde/patch/oxygen-gtk2.patch
+++ b/kde/patch/oxygen-gtk2.patch
@@ -1,3 +1,2 @@
# Add more firefox-derived browsers as supported by the theme:
cat $CWD/patch/oxygen-gtk2/oxygen-gtk2_KDEBUG_341181.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/oxygen-gtk3.patch b/kde/patch/oxygen-gtk3.patch
deleted file mode 100644
index 1f0f0aa..0000000
--- a/kde/patch/oxygen-gtk3.patch
+++ /dev/null
@@ -1,3 +0,0 @@
-# Compile against Slackware's older version of gtk+3:
-cat $CWD/patch/oxygen-gtk3/oxygen-gtk3-1.3.1_gtk3.8.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/oxygen-gtk3/oxygen-gtk3-1.3.1_gtk3.8.patch b/kde/patch/oxygen-gtk3/oxygen-gtk3-1.3.1_gtk3.8.patch
deleted file mode 100644
index 075cd08..0000000
--- a/kde/patch/oxygen-gtk3/oxygen-gtk3-1.3.1_gtk3.8.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff -urN oxygen-gtk3-1.3.1/src/oxygenthemingengine.cpp oxygen-gtk3-1.3.1-patched/src/oxygenthemingengine.cpp
---- oxygen-gtk3-1.3.1/src/oxygenthemingengine.cpp 2013-12-11 23:38:20.000000000 +1100
-+++ oxygen-gtk3-1.3.1-patched/src/oxygenthemingengine.cpp 2013-12-17 23:11:11.684864006 +1100
-@@ -493,13 +493,6 @@
-
- }
-
-- } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_LIST_ROW ) ) {
--
-- GtkStateFlags state( gtk_theming_engine_get_state( engine ) );
-- StyleOptions options( widget, state );
-- if( options & (Selected|Hover) )
-- { Style::instance().renderSelection( context, x, y, w, h, TileSet::Horizontal, options ); }
--
- } else if(
- gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_SPINBUTTON ) &&
- !gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_ENTRY ) )
-@@ -507,10 +500,7 @@
-
- return;
-
-- } else if(
-- gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_TOOLBAR ) ||
-- gtk_widget_path_is_type( path, GTK_TYPE_HEADER_BAR ) )
-- {
-+ } else if( gtk_theming_engine_has_class( engine, GTK_STYLE_CLASS_TOOLBAR ) ) {
-
- // render background
- if( !Gtk::gtk_widget_is_applet( widget ) )
diff --git a/kde/patch/perlqt.patch b/kde/patch/perlqt.patch
index 1cdd7db..669a723 100644
--- a/kde/patch/perlqt.patch
+++ b/kde/patch/perlqt.patch
@@ -1,3 +1,2 @@
# Fix build:
cat $CWD/patch/perlqt/perlqt.gcc6.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/plasma-browser-integration.patch b/kde/patch/plasma-browser-integration.patch
index c82fee9..38642df 100644
--- a/kde/patch/plasma-browser-integration.patch
+++ b/kde/patch/plasma-browser-integration.patch
@@ -1,3 +1,2 @@
# Fix hardcoded mozilla 'lib' libdir:
cat $CWD/patch/plasma-browser-integration/plasma-browser-integration_KDEBUG-113461.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/plasma-desktop.patch b/kde/patch/plasma-desktop.patch
deleted file mode 100644
index e2fc54e..0000000
--- a/kde/patch/plasma-desktop.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-# Fix errors in translation strings for bs and sr:
-#cat $CWD/patch/plasma-desktop/plasma-desktop-4.99.0_kfontinst_po.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Forgotten includes:
-#cat $CWD/patch/plasma-desktop/plasma-desktop_kdelibs4support.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix for Plasma 5.5.0 (KDEBUG #356398):
-#cat $CWD/patch/plasma-desktop//plasma-desktop_kickoff_kdebug_356398.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix for Plasma 5.14.4 (KDEBUG #401508):
-#cat $CWD/patch/plasma-desktop/plasma-desktop_kdebug_401508.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/plasma-desktop/plasma-desktop-4.99.0_kfontinst_po.diff b/kde/patch/plasma-desktop/plasma-desktop-4.99.0_kfontinst_po.diff
deleted file mode 100755
index 3b96d54..0000000
--- a/kde/patch/plasma-desktop/plasma-desktop-4.99.0_kfontinst_po.diff
+++ /dev/null
@@ -1,60 +0,0 @@
-diff -U 3 -H -d -p -r -N -x .svn -x .git -- a/po/bs/kfontinst.po b/po/bs/kfontinst.po
---- a/po/bs/kfontinst.po 2014-05-09 17:23:01.000000000 +0200
-+++ b/po/bs/kfontinst.po 2014-05-18 18:38:26.513853094 +0200
-@@ -1169,7 +1169,7 @@ msgstr "abcÄćdÄ‘efghijklmnoprsÅ¡tuvzž
- #: lib/FcEngine.cpp:1004
- msgctxt "Numbers and characters"
- msgid "0123456789.:,;(*!?'/\\\")£$€%^&-+@~#<>{}[]"
--msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@
-+msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@~#<>{}[]"
-
- #: lib/FcEngine.cpp:1401
- msgid "ERROR: Could not determine font's name."
-diff -U 3 -H -d -p -r -N -x .svn -x .git -- a/po/sr/kfontinst.po b/po/sr/kfontinst.po
---- a/po/sr/kfontinst.po 2014-05-09 17:27:16.000000000 +0200
-+++ b/po/sr/kfontinst.po 2014-05-18 18:38:40.837414520 +0200
-@@ -1221,7 +1221,7 @@ msgstr "абвгдђежзијклљмн
- #: lib/FcEngine.cpp:1004
- msgctxt "Numbers and characters"
- msgid "0123456789.:,;(*!?'/\\\")£$€%^&-+@~#<>{}[]"
--msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@
-+msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@~#<>{}[]"
-
- #: lib/FcEngine.cpp:1401
- msgid "ERROR: Could not determine font's name."
-diff -U 3 -H -d -p -r -N -x .svn -x .git -- a/po/sr@ijekavian/kfontinst.po b/po/sr@ijekavian/kfontinst.po
---- a/po/sr@ijekavian/kfontinst.po 2014-05-09 17:27:20.000000000 +0200
-+++ b/po/sr@ijekavian/kfontinst.po 2014-05-18 18:38:54.049932456 +0200
-@@ -1221,7 +1221,7 @@ msgstr "абвгдђежзијклљмн
- #: lib/FcEngine.cpp:1004
- msgctxt "Numbers and characters"
- msgid "0123456789.:,;(*!?'/\\\")£$€%^&-+@~#<>{}[]"
--msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@
-+msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@~#<>{}[]"
-
- #: lib/FcEngine.cpp:1401
- msgid "ERROR: Could not determine font's name."
-diff -U 3 -H -d -p -r -N -x .svn -x .git -- a/po/sr@ijekavianlatin/kfontinst.po b/po/sr@ijekavianlatin/kfontinst.po
---- a/po/sr@ijekavianlatin/kfontinst.po 2014-05-09 17:27:24.000000000 +0200
-+++ b/po/sr@ijekavianlatin/kfontinst.po 2014-05-18 18:39:09.884553255 +0200
-@@ -1224,7 +1224,7 @@ msgstr "abcÄćdÄ‘efghijklmnoprsÅ¡tuvzž
- #: lib/FcEngine.cpp:1004
- msgctxt "Numbers and characters"
- msgid "0123456789.:,;(*!?'/\\\")£$€%^&-+@~#<>{}[]"
--msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@
-+msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@~#<>{}[]"
-
- #: lib/FcEngine.cpp:1401
- msgid "ERROR: Could not determine font's name."
-diff -U 3 -H -d -p -r -N -x .svn -x .git -- a/po/sr@latin/kfontinst.po b/po/sr@latin/kfontinst.po
---- a/po/sr@latin/kfontinst.po 2014-05-09 17:27:27.000000000 +0200
-+++ b/po/sr@latin/kfontinst.po 2014-05-18 18:39:21.351002849 +0200
-@@ -1223,7 +1223,7 @@ msgstr "abcÄćdÄ‘efghijklmnoprsÅ¡tuvzž
- #: lib/FcEngine.cpp:1004
- msgctxt "Numbers and characters"
- msgid "0123456789.:,;(*!?'/\\\")£$€%^&-+@~#<>{}[]"
--msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@
-+msgstr "0123456789.:,;(*!?'/\\\")£$€%^&amp;-+@~#<>{}[]"
-
- #: lib/FcEngine.cpp:1401
- msgid "ERROR: Could not determine font's name." \ No newline at end of file
diff --git a/kde/patch/plasma-desktop/plasma-desktop_kdebug_401508.patch b/kde/patch/plasma-desktop/plasma-desktop_kdebug_401508.patch
deleted file mode 100644
index 2e4a099..0000000
--- a/kde/patch/plasma-desktop/plasma-desktop_kdebug_401508.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From ed34cc5f181e61d1fc98872866c5d7300a90af86 Mon Sep 17 00:00:00 2001
-From: Eike Hein <hein@kde.org>
-Date: Thu, 29 Nov 2018 00:22:17 +0900
-Subject: Fix group popup dialog
-
-Summary:
-Fixes regression introduced with ab26ebb18b74: That diff contained
-a change unrelated to the original submission, swapping a || out for
-&& in response to a review note. This turns out to have broken things.
-
-BUG:401508
-
-Reviewers: davidedmundson
-
-Subscribers: plasma-devel
-
-Tags: #plasma
-
-Differential Revision: https://phabricator.kde.org/D17219
----
- applets/taskmanager/package/contents/ui/GroupDialog.qml | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/applets/taskmanager/package/contents/ui/GroupDialog.qml b/applets/taskmanager/package/contents/ui/GroupDialog.qml
-index 6f59275..28238dc 100644
---- a/applets/taskmanager/package/contents/ui/GroupDialog.qml
-+++ b/applets/taskmanager/package/contents/ui/GroupDialog.qml
-@@ -262,7 +262,7 @@ PlasmaCore.Dialog {
- // Setting VisualDataModel.rootIndex drops groupRepeater.count to 0
- // before the actual row count. updateSize is therefore invoked twice;
- // only update size once the repeater count matches the model role.
-- } else if (!groupRepeater.aboutToPopulate && visualParent.childCount == groupRepeater.count) {
-+ } else if (!groupRepeater.aboutToPopulate || visualParent.childCount == groupRepeater.count) {
- var task;
- var maxWidth = 0;
- var maxHeight = 0;
---
-cgit v1.1
-
diff --git a/kde/patch/plasma-desktop/plasma-desktop_kdelibs4support.diff b/kde/patch/plasma-desktop/plasma-desktop_kdelibs4support.diff
deleted file mode 100644
index 74d541c..0000000
--- a/kde/patch/plasma-desktop/plasma-desktop_kdelibs4support.diff
+++ /dev/null
@@ -1,88 +0,0 @@
---- plasma-desktop-20140602git/kcms/kfontinst/lib/CMakeLists.txt.orig 2014-06-03 16:08:19.294297273 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/lib/CMakeLists.txt 2014-06-03 16:09:12.420293700 +0200
-@@ -15,6 +15,6 @@
- set_target_properties(kfontinst PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION 5 )
-
- add_library(kfontinstui SHARED ${kfontinstui_LIB_SRCS})
--target_link_libraries(kfontinstui Qt5::X11Extras KF5::KIOCore KF5::KIOWidgets ${FREETYPE_LIBRARIES} ${FONTCONFIG_LIBRARIES} ${X11_X11_LIB} ${X11_Xft_LIB} kfontinst )
-+target_link_libraries(kfontinstui Qt5::X11Extras KF5::KIOCore KF5::KIOWidgets KF5::KDELibs4Support XCB::XCB XCB::IMAGE ${FREETYPE_LIBRARIES} ${FONTCONFIG_LIBRARIES} ${X11_X11_LIB} ${X11_Xft_LIB} kfontinst )
- set_target_properties(kfontinstui PROPERTIES VERSION ${GENERIC_LIB_VERSION} SOVERSION 5 )
- install(TARGETS kfontinst kfontinstui ${INSTALL_TARGETS_DEFAULT_ARGS} )
---- plasma-desktop-20140602git/kcms/kfontinst/dbus/CMakeLists.txt.orig 2014-06-02 13:47:27.000000000 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/dbus/CMakeLists.txt 2014-06-03 17:17:01.382378586 +0200
-@@ -14,11 +14,11 @@
-
- set_target_properties(fontinst_bin PROPERTIES OUTPUT_NAME fontinst)
- target_link_libraries(fontinst_bin
-- Qt5::DBus Qt5::Xml ${FONTCONFIG_LIBRARIES} kfontinst)
-+ Qt5::DBus Qt5::Xml Qt5::X11Extras KF5::KDELibs4Support XCB::XCB XCB::IMAGE ${FONTCONFIG_LIBRARIES} kfontinst)
-
- set_target_properties(fontinst_helper PROPERTIES OUTPUT_NAME fontinst_helper)
- target_link_libraries(fontinst_helper
-- Qt5::DBus Qt5::Xml ${FONTCONFIG_LIBRARIES} kfontinst)
-+ Qt5::DBus Qt5::Xml Qt5::X11Extras KF5::KDELibs4Support XCB::XCB XCB::IMAGE ${FONTCONFIG_LIBRARIES} kfontinst)
-
- install(TARGETS fontinst_bin DESTINATION ${LIBEXEC_INSTALL_DIR} )
- install(TARGETS fontinst_helper DESTINATION ${LIBEXEC_INSTALL_DIR} )
---- plasma-desktop-20140602git/kcms/kfontinst/kcmfontinst/CMakeLists.txt.orig 2014-06-02 13:47:27.000000000 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/kcmfontinst/CMakeLists.txt 2014-06-03 19:19:00.376164975 +0200
-@@ -10,6 +10,7 @@
- add_library(kcm_fontinst MODULE ${kcm_fontinst_PART_SRCS})
-
- target_link_libraries(kcm_fontinst
-+ Qt5::X11Extras
- KF5::Archive
- KF5::KCMUtils
- KF5::Su
---- plasma-desktop-20140602git/kcms/kfontinst/apps/CMakeLists.txt.orig 2014-06-02 13:47:27.000000000 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/apps/CMakeLists.txt 2014-06-03 19:27:47.209175028 +0200
-@@ -31,6 +31,7 @@
- )
- target_link_libraries(kfontprint_bin
- Qt5::PrintSupport
-+ Qt5::X11Extras
- KF5::IconThemes
- KF5::KDELibs4Support
- ${X11_X11_LIB}
-@@ -38,7 +39,7 @@
- kfontinstui
- kfontinst
- )
--target_link_libraries(kfontview_bin KF5::Parts KF5::XmlGui kfontinstui kfontinst )
-+target_link_libraries(kfontview_bin KF5::Parts KF5::XmlGui KF5::KDELibs4Support kfontinstui kfontinst )
-
- install(TARGETS kfontinst_bin ${INSTALL_TARGETS_DEFAULT_ARGS} )
- install(TARGETS kfontprint_bin DESTINATION ${LIBEXEC_INSTALL_DIR} )
---- plasma-desktop-20140602git/kcms/kfontinst/kio/CMakeLists.txt.orig 2014-06-02 13:47:27.000000000 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/kio/CMakeLists.txt 2014-06-03 19:31:34.379189708 +0200
-@@ -5,7 +5,7 @@
- set(kio_fonts_PART_SRCS FontInstInterface.cpp KioFonts.cpp ${libkfontinstdbusiface_SRCS})
- # qt5_add_dbus_interface(kio_fonts_PART_SRCS ../dbus/org.kde.fontinst.xml FontinstIface)
- add_library(kio_fonts MODULE ${kio_fonts_PART_SRCS} ${KFI_FONTINST_AUTH_SRC} )
--target_link_libraries(kio_fonts Qt5::DBus Qt5::X11Extras Qt5::Xml KF5::Archive KF5::KIOCore KF5::KIOWidgets kfontinst )
-+target_link_libraries(kio_fonts Qt5::DBus Qt5::X11Extras Qt5::Xml KF5::Archive KF5::KIOCore KF5::KIOWidgets KF5::KDELibs4Support kfontinst )
- install(TARGETS kio_fonts DESTINATION ${PLUGIN_INSTALL_DIR} )
- install( FILES fonts.desktop DESTINATION ${DATA_INSTALL_DIR}/konqsidebartng/virtual_folders/services )
- install( FILES fonts.protocol DESTINATION ${SERVICES_INSTALL_DIR} )
---- plasma-desktop-20140602git/kcms/kfontinst/thumbnail/CMakeLists.txt.orig 2014-06-02 13:47:27.000000000 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/thumbnail/CMakeLists.txt 2014-06-03 19:34:23.357198688 +0200
-@@ -7,7 +7,7 @@
-
- add_library(fontthumbnail MODULE ${fontthumbnail_PART_SRCS})
-
--target_link_libraries(fontthumbnail KF5::Archive KF5::KIOCore KF5::KIOWidgets kfontinstui kfontinst )
-+target_link_libraries(fontthumbnail KF5::Archive KF5::KIOCore KF5::KIOWidgets KF5::KDELibs4Support kfontinstui kfontinst )
-
- install(TARGETS fontthumbnail DESTINATION ${PLUGIN_INSTALL_DIR} )
- install( FILES fontthumbnail.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
---- plasma-desktop-20140602git/kcms/kfontinst/viewpart/CMakeLists.txt.orig 2014-06-02 13:47:27.000000000 +0200
-+++ plasma-desktop-20140602git/kcms/kfontinst/viewpart/CMakeLists.txt 2014-06-03 19:42:35.590219674 +0200
-@@ -8,7 +8,7 @@
-
- add_library(kfontviewpart MODULE ${kfontviewpart_PART_SRCS})
-
--target_link_libraries(kfontviewpart KF5::Archive KF5::Parts KF5::XmlGui ${FONTCONFIG_LIBRARIES} kfontinstui kfontinst )
-+target_link_libraries(kfontviewpart KF5::Archive KF5::Parts KF5::XmlGui KF5::KDELibs4Support ${FONTCONFIG_LIBRARIES} kfontinstui kfontinst )
-
- install(TARGETS kfontviewpart DESTINATION ${PLUGIN_INSTALL_DIR} )
- install( FILES kfontviewpart.rc DESTINATION ${DATA_INSTALL_DIR}/kfontinst )
diff --git a/kde/patch/plasma-desktop/plasma-desktop_kickoff_kdebug_356398.patch b/kde/patch/plasma-desktop/plasma-desktop_kickoff_kdebug_356398.patch
deleted file mode 100644
index a4d8d9f..0000000
--- a/kde/patch/plasma-desktop/plasma-desktop_kickoff_kdebug_356398.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From: Eike Hein <hein@kde.org>
-Date: Tue, 08 Dec 2015 19:26:26 +0000
-Subject: Fix migration of multiple favorites.
-X-Git-Url: http://quickgit.kde.org/?p=plasma-desktop.git&a=commitdiff&h=97ced66da372737ae5d36d86c9bc0c6fe684d842
----
-Fix migration of multiple favorites.
-
-BUG:356398
----
-
-
---- a/desktoppackage/contents/updates/obsolete_kickoffrc.js
-+++ b/desktoppackage/contents/updates/obsolete_kickoffrc.js
-@@ -1,7 +1,7 @@
- var kickoffConfig = ConfigFile("kickoffrc");
-
- kickoffConfig.group = "Favorites";
--var favorites = kickoffConfig.readEntry("FavoriteURLs");
-+var favorites = kickoffConfig.readEntry("FavoriteURLs").split(',');
-
- kickoffConfig.group = "SystemApplications";
- var systemApplications = kickoffConfig.readEntry("DesktopFiles").split(',');
-
-
diff --git a/kde/patch/plasma-framework.patch b/kde/patch/plasma-framework.patch
index c74f454..cca9a13 100644
--- a/kde/patch/plasma-framework.patch
+++ b/kde/patch/plasma-framework.patch
@@ -1,8 +1,3 @@
-# KDE Plasma with KF 5.18 crash, if mouse repeatedly hovers over TaskManager
-# KDEBUG 357895; fixed in Frameworks 5.20.
-#cat $CWD/patch/plasma-framework/plasma-framework_KDEBUG_357895.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Icons for SNI Qt apps not appearing
-# KDEBUG 359388; fixed in Frameworks 5.20.
-#cat $CWD/patch/plasma-framework/plasma-framework_KDEBUG_359388.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
+# Password is asked twice when connecting to a new WiFi network,
+# KDEBUG 423093; fixed in Frameworks 5.72 and Plasma 5.20.
+#cat $CWD/patch/plasma-framework/plasma-framework_KDEBUG_423093.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/plasma-framework/plasma-framework_KDEBUG_357895.patch b/kde/patch/plasma-framework/plasma-framework_KDEBUG_357895.patch
deleted file mode 100644
index 9480314..0000000
--- a/kde/patch/plasma-framework/plasma-framework_KDEBUG_357895.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-From: David Rosca <nowrep@gmail.com>
-Date: Mon, 15 Feb 2016 18:05:26 +0000
-Subject: WindowThumbnail: Discard glx pixmap in stopRedirecting()
-X-Git-Url: http://quickgit.kde.org/?p=plasma-framework.git&a=commitdiff&h=1e196fdfb2a6eaf1664e1155c086616d55c6712b
----
-WindowThumbnail: Discard glx pixmap in stopRedirecting()
-
-BUG: 357895
-FIXED-IN: 5.20
-REVIEW: 127072
----
-
-
---- a/src/declarativeimports/core/windowthumbnail.cpp
-+++ b/src/declarativeimports/core/windowthumbnail.cpp
-@@ -584,6 +584,7 @@
- return;
- }
- xcb_composite_unredirect_window(c, m_winId, XCB_COMPOSITE_REDIRECT_AUTOMATIC);
-+ discardPixmap();
- if (m_damage == XCB_NONE) {
- return;
- }
-
diff --git a/kde/patch/plasma-framework/plasma-framework_KDEBUG_359388.patch b/kde/patch/plasma-framework/plasma-framework_KDEBUG_359388.patch
deleted file mode 100644
index 078dbfd..0000000
--- a/kde/patch/plasma-framework/plasma-framework_KDEBUG_359388.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From: Dan Vrátil <dvratil@kde.org>
-Date: Tue, 16 Feb 2016 16:59:32 +0000
-Subject: Fix IconItem not loading non-theme icons with name
-X-Git-Url: http://quickgit.kde.org/?p=plasma-framework.git&a=commitdiff&h=525bf2d377c21b41971a72d694a507bf2af0ada6
----
-Fix IconItem not loading non-theme icons with name
-
-Commit 5184ac introduced a small regression that caused IconItem
-to no longer load non-theme icons with name set, for instance icons
-coming from sni-qt, causing sni-qt apps to not show in systray.
-
-BUG: 359388
-FIXED-IN: 5.20
-REVIEW: 127091
----
-
-
---- a/src/declarativeimports/core/iconitem.cpp
-+++ b/src/declarativeimports/core/iconitem.cpp
-@@ -148,6 +148,10 @@
- //fail, use QIcon
- } else {
- m_icon = QIcon::fromTheme(sourceString);
-+ if (m_icon.isNull()) {
-+ // fallback for non-theme icons
-+ m_icon = source.value<QIcon>();
-+ }
- delete m_svgIcon;
- m_svgIcon = 0;
- m_imageIcon = QImage();
-
diff --git a/kde/patch/plasma-framework/plasma-framework_KDEBUG_423093.patch b/kde/patch/plasma-framework/plasma-framework_KDEBUG_423093.patch
new file mode 100644
index 0000000..ba1b35a
--- /dev/null
+++ b/kde/patch/plasma-framework/plasma-framework_KDEBUG_423093.patch
@@ -0,0 +1,29 @@
+From 7f9e189d87c040a952533713ff48d32872e0eadd Mon Sep 17 00:00:00 2001
+From: Nate Graham <nate@kde.org>
+Date: Sun, 7 Jun 2020 08:46:39 -0600
+Subject: [PATCH] Add property to access the ExpandableListItem loader's item
+
+---
+ .../plasmaextracomponents/qml/ExpandableListItem.qml | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml b/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml
+index d9d0662ee..ed21ab8e4 100644
+--- a/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml
++++ b/src/declarativeimports/plasmaextracomponents/qml/ExpandableListItem.qml
+@@ -261,6 +261,12 @@ Item {
+ */
+ property var customExpandedViewContent: actionsListComponent
+
++ /*
++ * The actual instance of the custom view content, if loaded
++ * @since 5.72
++ */
++ property alias customExpandedViewContentItem: expandedView.item
++
+ /*
+ * isBusy: bool
+ * Whether or not to display a busy indicator on the list item. Set to true
+--
+2.27.0
+
diff --git a/kde/patch/plasma-nm.patch b/kde/patch/plasma-nm.patch
deleted file mode 100644
index e86bcd1..0000000
--- a/kde/patch/plasma-nm.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-# Patches that address reported bugs in plasma-nm 0.9.3.1:
-#cat $CWD/patch/plasma-nm/plasma-nm-fixes.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# The plasma-nm-5.2.2 needs a patch to work with the new modemmanager-qt in
-# frameworks 5.9.0. This patch is no longer needed for plasma-nm-5.3.0:
-#cat $CWD/patch/plasma-nm/plasma-nm_modemmanager-qt_api.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix compilation against NetworkManager 1.0.6:
-cat $CWD/patch/plasma-nm/plasma-nm_networkmanager.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/plasma-nm/plasma-nm-fixes.patch b/kde/patch/plasma-nm/plasma-nm-fixes.patch
deleted file mode 100644
index d98448d..0000000
--- a/kde/patch/plasma-nm/plasma-nm-fixes.patch
+++ /dev/null
@@ -1,322 +0,0 @@
-diff --git a/applet/declarative/contents/ui/main.qml b/applet/declarative/contents/ui/main.qml
-index 8ea88cc..aa81707 100644
---- a/applet/declarative/contents/ui/main.qml
-+++ b/applet/declarative/contents/ui/main.qml
-@@ -19,6 +19,7 @@
- */
-
- import QtQuick 1.1
-+import org.kde.plasma.extras 0.1 as PlasmaExtras
- import org.kde.plasma.components 0.1 as PlasmaComponents
- import org.kde.plasma.core 0.1 as PlasmaCore
- import org.kde.networkmanagement 0.1 as PlasmaNM
-@@ -77,16 +78,7 @@ Item {
- anchors.fill: parent
- }
-
-- ListView {
-- id: connectionView;
--
-- property bool expandedItem: false;
-- property string previouslyExpandedItem: "";
--
-- property bool activeExpanded: true;
-- property bool previousExpanded: true;
-- property bool unknownExpanded: true;
--
-+ PlasmaExtras.ScrollArea {
- anchors {
- left: parent.left;
- right: parent.right;
-@@ -95,50 +87,64 @@ Item {
- topMargin: padding.margins.top;
- bottomMargin: padding.margins.bottom
- }
-- clip: true
-- model: connectionSortModel;
-- currentIndex: -1;
-- interactive: true;
-- boundsBehavior: Flickable.StopAtBounds;
-- section.property: "itemSection";
-- section.delegate: SectionHeader {
-- onHideSection: {
-- if (section == i18n("Active connections")) {
-- connectionView.activeExpanded = false;
-- } else if (section == i18n("Previous connections")) {
-- connectionView.previousExpanded = false;
-- } else {
-- connectionView.unknownExpanded = false;
-+
-+ ListView {
-+ id: connectionView;
-+
-+ property bool expandedItem: false;
-+ property string previouslyExpandedItem: "";
-+
-+ property bool activeExpanded: true;
-+ property bool previousExpanded: true;
-+ property bool unknownExpanded: true;
-+
-+ anchors.fill: parent;
-+
-+ clip: true
-+ model: connectionSortModel;
-+ currentIndex: -1;
-+ interactive: true;
-+ boundsBehavior: Flickable.StopAtBounds;
-+ section.property: "itemSection";
-+ section.delegate: SectionHeader {
-+ onHideSection: {
-+ if (section == i18n("Active connections")) {
-+ connectionView.activeExpanded = false;
-+ } else if (section == i18n("Previous connections")) {
-+ connectionView.previousExpanded = false;
-+ } else {
-+ connectionView.unknownExpanded = false;
-+ }
- }
-- }
-
-- onShowSection: {
-- if (section == i18n("Active connections")) {
-- connectionView.activeExpanded = true;
-- } else if (section == i18n("Previous connections")) {
-- connectionView.previousExpanded = true;
-- } else {
-- connectionView.unknownExpanded = true;
-+ onShowSection: {
-+ if (section == i18n("Active connections")) {
-+ connectionView.activeExpanded = true;
-+ } else if (section == i18n("Previous connections")) {
-+ connectionView.previousExpanded = true;
-+ } else {
-+ connectionView.unknownExpanded = true;
-+ }
- }
- }
-- }
-
-- delegate: ConnectionItem {
-- expanded: connectionView.expandedItem && connectionView.previouslyExpandedItem == itemUni;
-- onItemExpanded: {
-- if (itemExpanded) {
-- connectionView.expandedItem = true;
-- connectionView.previouslyExpandedItem = itemUni;;
-- connectionView.currentIndex = index;
-- } else {
-- connectionView.expandedItem = false;
-- connectionView.previouslyExpandedItem = "";
-+ delegate: ConnectionItem {
-+ expanded: connectionView.expandedItem && connectionView.previouslyExpandedItem == itemUni;
-+ onItemExpanded: {
-+ if (itemExpanded) {
-+ connectionView.expandedItem = true;
-+ connectionView.previouslyExpandedItem = itemUni;;
-+ connectionView.currentIndex = index;
-+ } else {
-+ connectionView.expandedItem = false;
-+ connectionView.previouslyExpandedItem = "";
-+ }
- }
-- }
-
-- ListView.onRemove: {
-- if (ListView.isCurrentItem) {
-- connectionView.previouslyExpandedItem = "";
-+ ListView.onRemove: {
-+ if (ListView.isCurrentItem) {
-+ connectionView.previouslyExpandedItem = "";
-+ }
- }
- }
- }
-diff --git a/declarative-plugins/applet/connectionicon.cpp b/declarative-plugins/applet/connectionicon.cpp
-index c3f8540..76bdca0 100644
---- a/declarative-plugins/applet/connectionicon.cpp
-+++ b/declarative-plugins/applet/connectionicon.cpp
-@@ -166,12 +166,24 @@ void ConnectionIcon::setIcons()
-
- foreach (const NetworkManager::ActiveConnection::Ptr & active, actives) {
- if (((active->default4() || active->default6()) && active->state() == NetworkManager::ActiveConnection::Activated) || !defaultRouteExists) {
-+ NetworkManager::ActiveConnection::Ptr activeConnection;
-+ if (active->vpn()) {
-+ NetworkManager::ActiveConnection::Ptr activeTmp;
-+ activeTmp = NetworkManager::findActiveConnection(active->specificObject());
-+ if (activeTmp) {
-+ activeConnection = activeTmp;
-+ }
-
-- if (active->vpn() || active->devices().isEmpty()) {
-+ vpnFound = true;
-+ NMAppletDebug() << "Emit signal setHoverIcon(object-locked)";
-+ Q_EMIT setHoverIcon("object-locked");
-+ } else {
-+ activeConnection = active;
-+ }
-+ if (activeConnection->devices().isEmpty()) {
- continue;
- }
--
-- NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(active->devices().first());
-+ NetworkManager::Device::Ptr device = NetworkManager::findNetworkInterface(activeConnection->devices().first());
- if (device) {
- NetworkManager::Device::Type type = device->type();
-
-@@ -184,7 +196,7 @@ void ConnectionIcon::setIcons()
- setWirelessIconForSignalStrength(100);
- connectionFound = true;
- } else {
-- NetworkManager::AccessPoint::Ptr ap = wifiDevice->findAccessPoint(active->specificObject());
-+ NetworkManager::AccessPoint::Ptr ap = wifiDevice->findAccessPoint(activeConnection->specificObject());
- if (ap) {
- setWirelessIcon(device, ap->ssid());
- connectionFound = true;
-@@ -222,9 +234,7 @@ void ConnectionIcon::setIcons()
- }
- }
- }
-- }
--
-- if (active->vpn() && active->state() == NetworkManager::ActiveConnection::Activated) {
-+ } else if (active->vpn() && active->state() == NetworkManager::ActiveConnection::Activated) {
- vpnFound = true;
- NMAppletDebug() << "Emit signal setHoverIcon(object-locked)";
- Q_EMIT setHoverIcon("object-locked");
-diff --git a/declarative-plugins/applet/networkstatus.cpp b/declarative-plugins/applet/networkstatus.cpp
-index d63066d..8149da9 100644
---- a/declarative-plugins/applet/networkstatus.cpp
-+++ b/declarative-plugins/applet/networkstatus.cpp
-@@ -129,8 +129,8 @@ void NetworkStatus::changeTooltip()
- }
-
- QString tooltip = "<qt>";
-- QString format = "<b>%1 - %2</b><br>%3<br><br>";
-- QString formatDefault = "<b>%1 - %2</b><br><b>%3</b><br><br>";
-+ const QString format = "<b>%1 - %2</b><br>%3<br><br>";
-+ const QString formatDefault = "<b>%1 - %2</b><br><b>%3</b><br><br>";
-
- foreach (const NetworkManager::ActiveConnection::Ptr & active, NetworkManager::activeConnections()) {
- if (!active->devices().isEmpty()) {
-@@ -145,7 +145,6 @@ void NetworkStatus::changeTooltip()
- } else {
- devName = device->ipInterfaceName();
- }
--// conType = NetworkManager::ConnectionSettings::typeAsString(active->connection()->settings()->connectionType());
- if (active->vpn()) {
- conType = i18n("VPN Connection");
- } else {
-diff --git a/declarative-plugins/model/model.cpp b/declarative-plugins/model/model.cpp
-index 1b3f4c3..bb88362 100644
---- a/declarative-plugins/model/model.cpp
-+++ b/declarative-plugins/model/model.cpp
-@@ -230,7 +230,7 @@ void Model::addConnection(const QString& connection, const QString& device)
- {
- NetworkManager::Connection::Ptr con = NetworkManager::findConnection(connection);
-
-- if (con->settings()->isSlave()) {
-+ if (con->settings()->isSlave() || con->name().isEmpty() || con->uuid().isEmpty()) {
- return;
- }
-
-@@ -395,7 +395,11 @@ void Model::removeWirelessNetwork(const QString& ssid, const QString& device)
- if (wirelessDevice) {
- accessPoint = wirelessDevice->findAccessPoint(item->specificPath());
- }
-- if (accessPoint && accessPoint->mode() == NetworkManager::AccessPoint::Adhoc &&
-+
-+ // When accesspoint in ad-hoc mode dissapears, we should remove the item only when there is no connection. Similar case is when
-+ // a wireless device is in AP mode, but in this case there could be only one visible AP and this should always be associated with some connection.
-+ if (accessPoint && ((accessPoint->mode() == NetworkManager::AccessPoint::Adhoc && !item->connectionPath().isEmpty()) ||
-+ wirelessDevice->mode() == NetworkManager::WirelessDevice::ApMode) &&
- NetworkManager::isWirelessEnabled() && NetworkManager::isWirelessHardwareEnabled()) {
- item->setWirelessNetwork(QString());
- if (updateItem(item)) {
-diff --git a/declarative-plugins/model/modelitem.cpp b/declarative-plugins/model/modelitem.cpp
-index 9a5931f..58d5c42 100644
---- a/declarative-plugins/model/modelitem.cpp
-+++ b/declarative-plugins/model/modelitem.cpp
-@@ -151,6 +151,17 @@ QString ModelItem::icon() const
- break;
- case NetworkManager::ConnectionSettings::Wireless:
- if (m_signal == 0 ) {
-+ if (!m_connectionPath.isEmpty()) {
-+ NetworkManager::Connection::Ptr con = NetworkManager::findConnection(m_connectionPath);
-+ if (con) {
-+ NetworkManager::WirelessSetting::Ptr wirelessSetting;
-+ wirelessSetting = con->settings()->setting(NetworkManager::Setting::Wireless).dynamicCast<NetworkManager::WirelessSetting>();
-+ if (wirelessSetting && (wirelessSetting->mode() == NetworkManager::WirelessSetting::Adhoc ||
-+ wirelessSetting->mode() == NetworkManager::WirelessSetting::Ap)) {
-+ return "network-wireless-100";
-+ }
-+ }
-+ }
- return "network-wireless-00";
- } else if (m_signal < 20) {
- return "network-wireless-20";
-diff --git a/kded/bluetoothmonitor.cpp b/kded/bluetoothmonitor.cpp
-index 2221d09..5d0218b 100644
---- a/kded/bluetoothmonitor.cpp
-+++ b/kded/bluetoothmonitor.cpp
-@@ -220,6 +220,7 @@ void BluetoothMonitor::init()
-
- mDunDevice = reply.value();
- }
-+
- #if WITH_MODEMMANAGER_SUPPORT
- void BluetoothMonitor::modemAdded(const QString &udi)
- {
-diff --git a/lib/editor/bridgewidget.cpp b/lib/editor/bridgewidget.cpp
-index 8815eb2..95344c4 100644
---- a/lib/editor/bridgewidget.cpp
-+++ b/lib/editor/bridgewidget.cpp
-@@ -216,5 +216,5 @@ void BridgeWidget::populateBridges()
-
- bool BridgeWidget::isValid() const
- {
-- return !m_ui->ifaceName->text().isEmpty() && m_ui->bridges->count() > 0;
-+ return !m_ui->ifaceName->text().isEmpty();
- }
-diff --git a/vpn/vpnc/vpnc.cpp b/vpn/vpnc/vpnc.cpp
-index d4a511d..645249d 100644
---- a/vpn/vpnc/vpnc.cpp
-+++ b/vpn/vpnc/vpnc.cpp
-@@ -145,7 +145,6 @@ NMVariantMapMap VpncUiPlugin::importConnectionSettings(const QString &fileName)
- KConfigGroup cg(config, "main"); // Keys&Values are stored under [main]
- if (cg.exists()) {
- // Setup cisco-decrypt binary to decrypt the passwords
-- QStringList decrArgs;
- const QString ciscoDecryptBinary = KStandardDirs::findExe("cisco-decrypt", QString::fromLocal8Bit(qgetenv("PATH")) + ":/usr/lib/vpnc");
- if (ciscoDecryptBinary.isEmpty()) {
- mErrorMessage = i18n("Needed executable cisco-decrypt could not be found.");
-@@ -174,11 +173,11 @@ NMVariantMapMap VpncUiPlugin::importConnectionSettings(const QString &fileName)
- }
- else if (!decrPlugin->readStringKeyValue(cg,"enc_UserPassword").isEmpty() && !ciscoDecryptBinary.isEmpty()) {
- // Decrypt the password and insert into map
-- decrArgs.clear();
-- decrArgs << decrPlugin->readStringKeyValue(cg,"enc_UserPassword");
-- decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary, decrArgs);
-+ decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary);
- decrPlugin->ciscoDecrypt->start();
-- if (decrPlugin->ciscoDecrypt->waitForStarted() && decrPlugin->ciscoDecrypt->waitForFinished()) {
-+ decrPlugin->ciscoDecrypt->waitForStarted();
-+ decrPlugin->ciscoDecrypt->write(decrPlugin->readStringKeyValue(cg,"enc_UserPassword").toUtf8());
-+ if (decrPlugin->ciscoDecrypt->waitForFinished()) {
- secretData.insert(NM_VPNC_KEY_XAUTH_PASSWORD, decrPlugin->decryptedPasswd);
- }
- }
-@@ -203,11 +202,11 @@ NMVariantMapMap VpncUiPlugin::importConnectionSettings(const QString &fileName)
- }
- else if (!decrPlugin->readStringKeyValue(cg,"enc_GroupPwd").isEmpty() && !ciscoDecryptBinary.isEmpty()) {
- //Decrypt the password and insert into map
-- decrArgs.clear();
-- decrArgs << decrPlugin->readStringKeyValue(cg,"enc_GroupPwd");
-- decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary, decrArgs);
-+ decrPlugin->ciscoDecrypt->setProgram(ciscoDecryptBinary);
- decrPlugin->ciscoDecrypt->start();
-- if (decrPlugin->ciscoDecrypt->waitForStarted() && decrPlugin->ciscoDecrypt->waitForFinished()) {
-+ decrPlugin->ciscoDecrypt->waitForStarted();
-+ decrPlugin->ciscoDecrypt->write(decrPlugin->readStringKeyValue(cg,"enc_GroupPwd").toUtf8());
-+ if (decrPlugin->ciscoDecrypt->waitForFinished()) {
- secretData.insert(NM_VPNC_KEY_SECRET, decrPlugin->decryptedPasswd);
- data.insert(NM_VPNC_KEY_SECRET"-flags", QString::number(NetworkManager::Setting::AgentOwned));
- }
diff --git a/kde/patch/plasma-nm/plasma-nm_modemmanager-qt_api.patch b/kde/patch/plasma-nm/plasma-nm_modemmanager-qt_api.patch
deleted file mode 100644
index 4c59f4c..0000000
--- a/kde/patch/plasma-nm/plasma-nm_modemmanager-qt_api.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-From: Jan Grulich <jgrulich@redhat.com>
-Date: Tue, 31 Mar 2015 12:37:16 +0000
-Subject: Adapt to modemmanager-qt API changes
-X-Git-Url: http://quickgit.kde.org/?p=plasma-nm.git&a=commitdiff&h=4d72cb7966edda33bc72c77fc2a126844fc1f134
----
-Adapt to modemmanager-qt API changes
----
-
-
---- a/libs/models/networkmodel.cpp
-+++ b/libs/models/networkmodel.cpp
-@@ -246,10 +246,10 @@
- if (modem->hasInterface(ModemManager::ModemDevice::ModemInterface)) {
- ModemManager::Modem::Ptr modemNetwork = modem->interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>();
- if (modemNetwork) {
-- connect(modemNetwork.data(), SIGNAL(signalQualityChanged(uint)),
-- SLOT(gsmNetworkSignalQualityChanged(uint)), Qt::UniqueConnection);
-- connect(modemNetwork.data(), SIGNAL(accessTechnologyChanged(ModemManager::Modem::AccessTechnologies)),
-- SLOT(gsmNetworkAccessTechnologyChanged(ModemManager::Modem::AccessTechnologies)), Qt::UniqueConnection);
-+ connect(modemNetwork.data(), SIGNAL(signalQualityChanged(ModemManager::SignalQualityPair)),
-+ SLOT(gsmNetworkSignalQualityChanged(ModemManager::SignalQualityPair)), Qt::UniqueConnection);
-+ connect(modemNetwork.data(), SIGNAL(accessTechnologiesChanged(QFlags<MMModemAccessTechnology>)),
-+ SLOT(gsmNetworkAccessTechnologiesChanged(QFlags<MMModemAccessTechnology>)), Qt::UniqueConnection);
- connect(modemNetwork.data(), SIGNAL(currentModesChanged()),
- SLOT(gsmNetworkCurrentModesChanged()), Qt::UniqueConnection);
- }
-@@ -847,9 +847,9 @@
- }
-
- #if WITH_MODEMMANAGER_SUPPORT
--void NetworkModel::gsmNetworkAccessTechnologyChanged(ModemManager::Modem::AccessTechnologies technology)
--{
-- Q_UNUSED(technology);
-+void NetworkModel::gsmNetworkAccessTechnologiesChanged(QFlags<MMModemAccessTechnology> accessTechnologies)
-+{
-+ Q_UNUSED(accessTechnologies);
- ModemManager::Modem * gsmNetwork = qobject_cast<ModemManager::Modem*>(sender());
- if (gsmNetwork) {
- Q_FOREACH (const NetworkManager::Device::Ptr & dev, NetworkManager::networkInterfaces()) {
-@@ -893,7 +893,7 @@
- }
- }
-
--void NetworkModel::gsmNetworkSignalQualityChanged(uint signal)
-+void NetworkModel::gsmNetworkSignalQualityChanged(const ModemManager::SignalQualityPair &signalQuality)
- {
- ModemManager::Modem * gsmNetwork = qobject_cast<ModemManager::Modem*>(sender());
- if (gsmNetwork) {
-@@ -905,7 +905,7 @@
- ModemManager::Modem::Ptr modemNetwork = modem->interface(ModemManager::ModemDevice::ModemInterface).objectCast<ModemManager::Modem>();
- if (modemNetwork && modemNetwork->device() == gsmNetwork->device()) {
- Q_FOREACH (NetworkModelItem * item, m_list.returnItems(NetworkItemsList::Device, dev->uni())) {
-- item->setSignal(signal);
-+ item->setSignal(signalQuality.signal);
- updateItem(item);
- }
- }
-
---- a/libs/models/networkmodel.h
-+++ b/libs/models/networkmodel.h
-@@ -94,9 +94,9 @@
- void deviceRemoved(const QString& device);
- void deviceStateChanged(NetworkManager::Device::State state, NetworkManager::Device::State oldState, NetworkManager::Device::StateChangeReason reason);
- #if WITH_MODEMMANAGER_SUPPORT
-- void gsmNetworkAccessTechnologyChanged(ModemManager::Modem::AccessTechnologies technology);
-+ void gsmNetworkAccessTechnologiesChanged(QFlags<MMModemAccessTechnology> accessTechnologies);
- void gsmNetworkCurrentModesChanged();
-- void gsmNetworkSignalQualityChanged(uint signal);
-+ void gsmNetworkSignalQualityChanged(const ModemManager::SignalQualityPair &signalQuality);
- #endif
- void ipConfigChanged();
- void ipInterfaceChanged();
-
diff --git a/kde/patch/plasma-nm/plasma-nm_networkmanager.patch b/kde/patch/plasma-nm/plasma-nm_networkmanager.patch
deleted file mode 100644
index e635954..0000000
--- a/kde/patch/plasma-nm/plasma-nm_networkmanager.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Patch taken from gentoo:
-https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bd7dad9ddb35e1e3e68ad43176c5e48fbb25338d
-
-Fixes build with networkmanager-1.0.6.
-
-Triggered by http://cgit.freedesktop.org/NetworkManager/NetworkManager/commit/?h=nm-1-0&id=6f616d4c4b04d5478f60d0311317bc84c5459ea4.
-
---- CMakeLists.txt
-+++ CMakeLists.txt
-@@ -49,6 +49,7 @@
- ${CMAKE_CURRENT_SOURCE_DIR}/libs
- ${CMAKE_CURRENT_SOURCE_DIR}/libs/editor/
- ${NETWORKMANAGER_INCLUDE_DIRS}
-+ ${NM-UTIL_INCLUDE_DIRS}
- ${NETWORKMANAGERQT_INCLUDE_DIRS}
- ${KDE4_INCLUDES})
-
diff --git a/kde/patch/plasma-pa.patch b/kde/patch/plasma-pa.patch
deleted file mode 100644
index 2349f09..0000000
--- a/kde/patch/plasma-pa.patch
+++ /dev/null
@@ -1,5 +0,0 @@
-# Port from gconf to gsettings (wait until post 5.13.4)
-# because PA 12 dropped support for gconf and this broke the advanced settings
-# in the PA audio configuration:
-#cat $CWD/patch/plasma-pa/plasma-pa_enable_gsettings.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/plasma-pa/plasma-pa_enable_gsettings.patch b/kde/patch/plasma-pa/plasma-pa_enable_gsettings.patch
deleted file mode 100644
index ef212d5..0000000
--- a/kde/patch/plasma-pa/plasma-pa_enable_gsettings.patch
+++ /dev/null
@@ -1,583 +0,0 @@
-# https://phabricator.kde.org/D14147
-# Port from gconf to gsettings
-# Step 1 was to make gconf optional in 5.13.4
-# ----------------------------------
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -22,9 +22,6 @@
- include(FindPkgConfig)
- pkg_check_modules(GCONF gconf-2.0)
- pkg_check_modules(GOBJECT gobject-2.0)
--if (GCONF_FOUND AND GOBJECT_FOUND)
-- set(HAVE_GCONF TRUE)
--endif()
-
- find_package(Qt5 ${QT_MIN_VERSION} REQUIRED COMPONENTS
- Core
-@@ -44,6 +41,21 @@
- find_package(PulseAudio 5.0.0 REQUIRED)
- find_package(Canberra REQUIRED)
- find_package(GLIB2 REQUIRED)
-+find_package(GIO)
-+
-+if(USE_GCONF AND USE_GSETTINGS)
-+ message(FATAL_ERROR "USE_GCONF and USE_GSETTINGS cannot be used at the same time")
-+endif()
-+
-+# if GSetting is available and user does not force GConf build use GSettings
-+if(GIO_FOUND AND GLIB2_FOUND AND NOT USE_GCONF)
-+ set(USE_GSETTINGS TRUE)
-+endif()
-+
-+# don't use GConf if not availabe
-+if (NOT GCONF_FOUND OR NOT GOBJECT_FOUND)
-+ set(USE_GCONF FALSE)
-+endif()
-
- configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
-
-diff --git a/cmake/FindGIO.cmake b/cmake/FindGIO.cmake
-new file mode 100644
---- /dev/null
-+++ b/cmake/FindGIO.cmake
-@@ -0,0 +1,72 @@
-+# - Try to find the GIO libraries
-+# Once done this will define
-+#
-+# GIO_FOUND - system has GIO
-+# GIO_INCLUDE_DIR - the GIO include directory
-+# GIO_LIBRARIES - GIO library
-+#
-+# Copyright (c) 2010 Dario Freddi <drf@kde.org>
-+#
-+# Redistribution and use is allowed according to the terms of the BSD license.
-+# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-+
-+if(GIO_INCLUDE_DIR AND GIO_LIBRARIES)
-+ # Already in cache, be silent
-+ set(GIO_FIND_QUIETLY TRUE)
-+endif(GIO_INCLUDE_DIR AND GIO_LIBRARIES)
-+
-+if (NOT WIN32)
-+ include(UsePkgConfig)
-+ pkgconfig(gio-2.0 _LibGIOIncDir _LibGIOLinkDir _LibGIOLinkFlags _LibGIOCflags)
-+endif(NOT WIN32)
-+
-+MESSAGE(STATUS "gio include dir: ${_LibGIOIncDir}")
-+
-+# first try without default paths to respect PKG_CONFIG_PATH
-+
-+find_path(GIO_MAIN_INCLUDE_DIR glib.h
-+ PATH_SUFFIXES glib-2.0
-+ PATHS ${_LibGIOIncDir}
-+ NO_DEFAULT_PATH)
-+
-+find_path(GIO_MAIN_INCLUDE_DIR glib.h
-+ PATH_SUFFIXES glib-2.0
-+ PATHS ${_LibGIOIncDir} )
-+
-+MESSAGE(STATUS "found gio main include dir: ${GIO_MAIN_INCLUDE_DIR}")
-+
-+# search the glibconfig.h include dir under the same root where the library is found
-+find_library(GIO_LIBRARIES
-+ NAMES gio-2.0
-+ PATHS ${_LibGIOLinkDir}
-+ NO_DEFAULT_PATH)
-+
-+find_library(GIO_LIBRARIES
-+ NAMES gio-2.0
-+ PATHS ${_LibGIOLinkDir})
-+
-+
-+get_filename_component(GIOLibDir "${GIO_LIBRARIES}" PATH)
-+
-+find_path(GIO_INTERNAL_INCLUDE_DIR glibconfig.h
-+ PATH_SUFFIXES glib-2.0/include
-+ PATHS ${_LibGIOIncDir} "${GIOLibDir}" ${CMAKE_SYSTEM_LIBRARY_PATH}
-+ NO_DEFAULT_PATH)
-+
-+find_path(GIO_INTERNAL_INCLUDE_DIR glibconfig.h
-+ PATH_SUFFIXES glib-2.0/include
-+ PATHS ${_LibGIOIncDir} "${GIOLibDir}" ${CMAKE_SYSTEM_LIBRARY_PATH})
-+
-+set(GIO_INCLUDE_DIR "${GIO_MAIN_INCLUDE_DIR}")
-+
-+# not sure if this include dir is optional or required
-+# for now it is optional
-+if(GIO_INTERNAL_INCLUDE_DIR)
-+ set(GIO_INCLUDE_DIR ${GIO_INCLUDE_DIR} "${GIO_INTERNAL_INCLUDE_DIR}")
-+endif(GIO_INTERNAL_INCLUDE_DIR)
-+
-+include(FindPackageHandleStandardArgs)
-+find_package_handle_standard_args(GIO DEFAULT_MSG GIO_LIBRARIES GIO_MAIN_INCLUDE_DIR)
-+
-+mark_as_advanced(GIO_INCLUDE_DIR GIO_LIBRARIES)
-+
-diff --git a/config.h.cmake b/config.h.cmake
---- a/config.h.cmake
-+++ b/config.h.cmake
-@@ -1,3 +1,4 @@
- /* config.h. Generated by cmake from config.h.cmake */
-
--#cmakedefine01 HAVE_GCONF
-+#cmakedefine01 USE_GSETTINGS
-+#cmakedefine01 USE_GCONF
-diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
---- a/src/CMakeLists.txt
-+++ b/src/CMakeLists.txt
-@@ -37,11 +37,16 @@
- set_property(SOURCE qml/dbus/osdService.xml APPEND PROPERTY CLASSNAME OsdServiceInterface)
- qt5_add_dbus_interface(dbus_SRCS qml/dbus/osdService.xml osdservice)
-
--if (HAVE_GCONF)
-+if (USE_GCONF)
- include_directories(${GCONF_INCLUDE_DIRS} ${GOBJECT_INCLUDE_DIRS})
- set(cpp_SRCS ${cpp_SRCS} gconfitem.cpp)
- endif()
-
-+if (USE_GSETTINGS)
-+ include_directories(${GIO_INCLUDE_DIRS} ${GOBJECT_INCLUDE_DIRS})
-+ set(cpp_SRCS ${cpp_SRCS} gsettingsitem.cpp)
-+endif()
-+
- add_library(plasma-volume-declarative SHARED ${dbus_SRCS} ${cpp_SRCS} ${qml_SRCS})
- target_link_libraries(plasma-volume-declarative
- Qt5::Core
-@@ -52,12 +57,18 @@
- ${PULSEAUDIO_LIBRARY}
- ${PULSEAUDIO_MAINLOOP_LIBRARY}
- ${CANBERRA_LIBRARIES}
-+ ${GOBJECT_LIBRARIES}
- )
-
--if (HAVE_GCONF)
-+if (USE_GCONF)
- target_link_libraries(plasma-volume-declarative
- ${GCONF_LDFLAGS}
-- ${GOBJECT_LDFLAGS}
-+ )
-+endif()
-+
-+if (USE_GSETTINGS)
-+ target_link_libraries(plasma-volume-declarative
-+ ${GIO_LIBRARIES}
- )
- endif()
-
-diff --git a/src/gsettingsitem.h b/src/gsettingsitem.h
-new file mode 100644
---- /dev/null
-+++ b/src/gsettingsitem.h
-@@ -0,0 +1,59 @@
-+/*
-+ * Copyright (C) 2018 Nicolas Fella <nicolas.fella@gmx.de>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public License
-+ * version 2.1 as published by the Free Software Foundation.
-+ *
-+ * 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ *
-+ */
-+
-+#ifndef GSETTINGSITEM_H
-+#define GSETTINGSITEM_H
-+
-+#include <QVariant>
-+#include <QStringList>
-+#include <QObject>
-+
-+#include <gio/gio.h>
-+
-+class GSettingsItem : public QObject
-+{
-+ Q_OBJECT
-+
-+ public:
-+
-+ explicit GSettingsItem(const QString &key, QObject *parent = nullptr);
-+ virtual ~GSettingsItem() override;
-+
-+ QVariant value(const QString &key) const;
-+ void set(const QString &key, const QVariant &val);
-+
-+
-+Q_SIGNALS:
-+ void subtreeChanged();
-+
-+private:
-+ GSettings *m_settings;
-+
-+static void settingChanged(GSettings *settings, const gchar *key, gpointer data)
-+{
-+ Q_UNUSED(settings)
-+ Q_UNUSED(key)
-+
-+ GSettingsItem *self = static_cast<GSettingsItem *>(data);
-+ Q_EMIT self->subtreeChanged();
-+}
-+
-+};
-+
-+#endif // GCONFITEM_H
-diff --git a/src/gsettingsitem.cpp b/src/gsettingsitem.cpp
-new file mode 100644
---- /dev/null
-+++ b/src/gsettingsitem.cpp
-@@ -0,0 +1,93 @@
-+/*
-+ * Copyright (C) 2018 Nicolas Fella <nicolas.fella@gmx.de>
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public License
-+ * version 2.1 as published by the Free Software Foundation.
-+ *
-+ * 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-+ * 02110-1301 USA
-+ *
-+ */
-+
-+#include <QString>
-+#include <QVariant>
-+#include <QDebug>
-+
-+#include <gio/gio.h>
-+
-+#include "gsettingsitem.h"
-+#include "debug.h"
-+
-+QVariant GSettingsItem::value(const QString &key) const
-+{
-+ GVariant *gvalue = g_settings_get_value(m_settings, key.toLatin1().data());
-+
-+ QVariant toReturn;
-+
-+ switch (g_variant_classify(gvalue)) {
-+ case G_VARIANT_CLASS_BOOLEAN:
-+ toReturn = QVariant((bool)g_variant_get_boolean(gvalue));
-+ break;
-+ case G_VARIANT_CLASS_STRING:
-+ toReturn = QVariant(QString::fromUtf8(g_variant_get_string(gvalue, NULL)));
-+ break;
-+ default:
-+ qCDebug(PLASMAPA()) << "Unhandled variant type in value()";
-+ }
-+
-+ g_variant_unref(gvalue);
-+
-+ return toReturn;
-+}
-+
-+void GSettingsItem::set(const QString &key, const QVariant &val)
-+{
-+
-+ // It might be hard to detect the right GVariant type from
-+ // complext QVariant types such as string lists or more detailed
-+ // types such as integers (GVariant has different sizes),
-+ // therefore we get the current value for the key and convert
-+ // to QVariant using the GVariant type
-+ GVariant *oldValue = g_settings_get_value(m_settings, key.toLatin1().data());
-+ GVariant *newValue;
-+
-+ switch (g_variant_type_peek_string(g_variant_get_type(oldValue))[0]) {
-+ case G_VARIANT_CLASS_BOOLEAN:
-+ newValue = g_variant_new_boolean(val.toBool());
-+ break;
-+ case G_VARIANT_CLASS_STRING:
-+ newValue = g_variant_new_string(val.toString().toUtf8().constData());
-+ break;
-+ default:
-+ qCDebug(PLASMAPA()) << "Unhandled variant type in set()";
-+ }
-+
-+ if (newValue)
-+ g_settings_set_value(m_settings, key.toLatin1().data(), newValue);
-+
-+ g_variant_unref(oldValue);
-+}
-+
-+GSettingsItem::GSettingsItem(const QString &key, QObject *parent)
-+ : QObject (parent)
-+{
-+
-+ m_settings = g_settings_new_with_path("org.freedesktop.pulseaudio.module-group", key.toLatin1().data());
-+
-+ g_signal_connect(m_settings, "changed", G_CALLBACK(GSettingsItem::settingChanged), this);
-+}
-+
-+GSettingsItem::~GSettingsItem()
-+{
-+ g_settings_sync();
-+ if (m_settings)
-+ g_object_unref(m_settings);
-+}
-diff --git a/src/kcm/package/contents/ui/Advanced.qml b/src/kcm/package/contents/ui/Advanced.qml
---- a/src/kcm/package/contents/ui/Advanced.qml
-+++ b/src/kcm/package/contents/ui/Advanced.qml
-@@ -73,7 +73,7 @@
- text: i18n("Add virtual output device for simultaneous output on all local sound cards")
- checked: moduleManager.combineSinks
- onCheckedChanged: moduleManager.combineSinks = checked;
-- enabled: moduleManager.loadedModules.indexOf("module-gconf") != -1
-+ enabled: moduleManager.configModuleLoaded
- visible: moduleManager.settingsSupported
- }
-
-@@ -84,16 +84,16 @@
- text: i18n("Automatically switch all running streams when a new output becomes available")
- checked: moduleManager.switchOnConnect
- onCheckedChanged: moduleManager.switchOnConnect = checked;
-- enabled: moduleManager.loadedModules.indexOf("module-gconf") != -1
-+ enabled: moduleManager.configModuleLoaded
- visible: moduleManager.settingsSupported
- }
-
- Label {
- Layout.alignment: Qt.AlignHCenter
- enabled: false
- font.italic: true
-- text: i18n("Requires 'module-gconf' PulseAudio module")
-- visible: moduleManager.settingsSupported && moduleManager.loadedModules.indexOf("module-gconf") == -1
-+ text: i18n("Requires %1 PulseAudio module", moduleManager.configModuleName)
-+ visible: moduleManager.settingsSupported && !moduleManager.configModuleLoaded
- }
-
- Header {
-diff --git a/src/modulemanager.h b/src/modulemanager.h
---- a/src/modulemanager.h
-+++ b/src/modulemanager.h
-@@ -29,18 +29,18 @@
- // Properties need fully qualified classes even with pointers.
- #include "client.h"
-
--class GConfItem;
--
- namespace QPulseAudio
- {
--class GConfModule;
-+class ConfigModule;
-
- class ModuleManager : public QObject
- {
- Q_OBJECT
- Q_PROPERTY(bool settingsSupported READ settingsSupported CONSTANT)
- Q_PROPERTY(bool combineSinks READ combineSinks WRITE setCombineSinks NOTIFY combineSinksChanged)
- Q_PROPERTY(bool switchOnConnect READ switchOnConnect WRITE setSwitchOnConnect NOTIFY switchOnConnectChanged)
-+ Q_PROPERTY(bool configModuleLoaded READ configModuleLoaded NOTIFY loadedModulesChanged)
-+ Q_PROPERTY(QString configModuleName READ configModuleName CONSTANT)
- Q_PROPERTY(QStringList loadedModules READ loadedModules NOTIFY loadedModulesChanged)
- public:
- explicit ModuleManager(QObject *parent = nullptr);
-@@ -52,6 +52,8 @@
- bool switchOnConnect() const;
- void setSwitchOnConnect(bool switchOnConnect);
- QStringList loadedModules() const;
-+ bool configModuleLoaded() const;
-+ QString configModuleName() const;
-
- Q_SIGNALS:
- void combineSinksChanged();
-@@ -61,9 +63,9 @@
- private:
- void updateLoadedModules();
-
-- GConfModule *m_combineSinks;
-- GConfModule *m_switchOnConnect;
-- GConfModule *m_deviceManager;
-+ ConfigModule *m_combineSinks;
-+ ConfigModule *m_switchOnConnect;
-+ ConfigModule *m_deviceManager;
- QStringList m_loadedModules;
- };
-
-diff --git a/src/modulemanager.cpp b/src/modulemanager.cpp
---- a/src/modulemanager.cpp
-+++ b/src/modulemanager.cpp
-@@ -23,40 +23,54 @@
- #include "module.h"
- #include "../config.h"
-
--#if HAVE_GCONF
-+#if USE_GSETTINGS
-+#include "gsettingsitem.h"
-+
-+#define PA_SETTINGS_PATH_MODULES "/org/freedesktop/pulseaudio/module-groups"
-+#endif
-+
-+#if USE_GCONF
- #include "gconfitem.h"
--#define PA_GCONF_ROOT "/system/pulseaudio"
--#define PA_GCONF_PATH_MODULES PA_GCONF_ROOT"/modules"
-+#define PA_SETTINGS_PATH_MODULES "/system/pulseaudio/modules"
- #endif
-
- #include <QTimer>
-
- namespace QPulseAudio
- {
-
--#if HAVE_GCONF
--class GConfModule : public GConfItem
-+#if USE_GCONF || USE_GSETTINGS
-+
-+#if USE_GSETTINGS
-+class ConfigModule : public GSettingsItem
-+#elif USE_GCONF
-+class ConfigModule : public GConfItem
-+#endif
- {
- public:
-- GConfModule(const QString &configName, const QString &moduleName, QObject *parent);
-+ ConfigModule(const QString &configName, const QString &moduleName, QObject *parent);
- bool isEnabled() const;
- void setEnabled(bool enabled, const QVariant &args=QVariant());
- private:
- QString m_moduleName;
- };
-
--GConfModule::GConfModule(const QString &configName, const QString &moduleName, QObject *parent) :
-- GConfItem(QStringLiteral(PA_GCONF_PATH_MODULES"/") + configName, parent),
-+ConfigModule::ConfigModule(const QString &configName, const QString &moduleName, QObject *parent) :
-+#if USE_GSETTINGS
-+ GSettingsItem(QStringLiteral(PA_SETTINGS_PATH_MODULES"/") + configName + QStringLiteral("/"), parent),
-+#elif USE_GCONF
-+ GConfItem(QStringLiteral(PA_SETTINGS_PATH_MODULES"/") + configName, parent),
-+#endif
- m_moduleName(moduleName)
- {
- }
-
--bool GConfModule::isEnabled() const
-+bool ConfigModule::isEnabled() const
- {
- return value(QStringLiteral("enabled")).toBool();
- }
-
--void GConfModule::setEnabled(bool enabled, const QVariant &args)
-+void ConfigModule::setEnabled(bool enabled, const QVariant &args)
- {
- set(QStringLiteral("locked"), true);
-
-@@ -69,20 +83,21 @@
- }
- set(QStringLiteral("locked"), false);
- }
--#endif
-
-+#endif
-
- ModuleManager::ModuleManager(QObject *parent) :
- QObject(parent)
- {
--#if HAVE_GCONF
-- m_combineSinks = new GConfModule(QStringLiteral("combine"), QStringLiteral("module-combine"), this);
-- m_switchOnConnect = new GConfModule(QStringLiteral("switch-on-connect"), QStringLiteral("module-switch-on-connect"), this);
-- m_deviceManager = new GConfModule(QStringLiteral("device-manager"), QStringLiteral("module-device-manager"), this);
-+#if USE_GCONF || USE_GSETTINGS
-
-- connect(m_combineSinks, &GConfItem::subtreeChanged, this, &ModuleManager::combineSinksChanged);
-- connect(m_switchOnConnect, &GConfItem::subtreeChanged, this, &ModuleManager::switchOnConnectChanged);
-- connect(m_deviceManager, &GConfItem::subtreeChanged, this, &ModuleManager::switchOnConnectChanged);
-+ m_combineSinks = new ConfigModule(QStringLiteral("combine"), QStringLiteral("module-combine"), this);
-+ m_switchOnConnect = new ConfigModule(QStringLiteral("switch-on-connect"), QStringLiteral("module-switch-on-connect"), this);
-+ m_deviceManager = new ConfigModule(QStringLiteral("device-manager"), QStringLiteral("module-device-manager"), this);
-+
-+ connect(m_combineSinks, &ConfigModule::subtreeChanged, this, &ModuleManager::combineSinksChanged);
-+ connect(m_switchOnConnect, &ConfigModule::subtreeChanged, this, &ModuleManager::switchOnConnectChanged);
-+ connect(m_deviceManager, &ConfigModule::subtreeChanged, this, &ModuleManager::switchOnConnectChanged);
- #endif
-
- QTimer *updateModulesTimer = new QTimer(this);
-@@ -100,48 +115,48 @@
-
- bool ModuleManager::settingsSupported() const
- {
--#if HAVE_GCONF
-+#if USE_GCONF || USE_GSETTINGS
- return true;
- #else
- return false;
- #endif
- }
-
- bool ModuleManager::combineSinks() const
- {
--#if HAVE_GCONF
-+#if USE_GCONF || USE_GSETTINGS
- return m_combineSinks->isEnabled();
- #else
- return false;
- #endif
- }
-
- void ModuleManager::setCombineSinks(bool combineSinks)
- {
--#if HAVE_GCONF
-+#if USE_GCONF || USE_GSETTINGS
- m_combineSinks->setEnabled(combineSinks);
- #else
-- Q_UNUSED(combineSinks)
-+ Q_UNUSED(combineSinks()
- #endif
- }
-
- bool ModuleManager::switchOnConnect() const
- {
-+#if USE_GCONF || USE_GSETTINGS
- //switch on connect and device-manager do the same task. Only one should be enabled
-
- //Note on the first run m_deviceManager will appear to be disabled even though it's actually running
- //because there is no gconf entry, however m_switchOnConnect will only exist if set by Plasma PA
- //hence only check this entry
--#if HAVE_GCONF
- return m_switchOnConnect->isEnabled() ;
- #else
- return false;
- #endif
- }
-
- void ModuleManager::setSwitchOnConnect(bool switchOnConnect)
- {
--#if HAVE_GCONF
-+#if USE_GCONF || USE_GSETTINGS
- m_deviceManager->setEnabled(!switchOnConnect);
- m_switchOnConnect->setEnabled(switchOnConnect);
- #else
-@@ -164,4 +179,19 @@
- Q_EMIT loadedModulesChanged();
- }
-
-+bool ModuleManager::configModuleLoaded() const
-+{
-+ return m_loadedModules.contains(configModuleName());
-+}
-+
-+QString ModuleManager::configModuleName() const
-+{
-+#if USE_GCONF
-+ return QStringLiteral("module-gconf");
-+#elif USE_GSETTINGS
-+ return QStringLiteral("module-gsettings");
-+#else
-+ return QString();
-+#endif
-+}
- }
-
diff --git a/kde/patch/plasma-wayland-protocols.patch b/kde/patch/plasma-wayland-protocols.patch
new file mode 100644
index 0000000..77ba5d6
--- /dev/null
+++ b/kde/patch/plasma-wayland-protocols.patch
@@ -0,0 +1,2 @@
+# Add the missing 'since="13"' to event name "window_with_uuid":
+cat $CWD/patch/plasma-wayland-protocols/plasma-wayland-protocols_add.missing.since.13.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/plasma-wayland-protocols/plasma-wayland-protocols_add.missing.since.13.patch b/kde/patch/plasma-wayland-protocols/plasma-wayland-protocols_add.missing.since.13.patch
new file mode 100644
index 0000000..2450b1c
--- /dev/null
+++ b/kde/patch/plasma-wayland-protocols/plasma-wayland-protocols_add.missing.since.13.patch
@@ -0,0 +1,60 @@
+From 404ae95bc6c2e0a06f09bdcc81bedabcd5c720de Mon Sep 17 00:00:00 2001
+From: Aleix Pol <aleixpol@kde.org>
+Date: Mon, 27 Jul 2020 15:19:56 +0200
+Subject: [PATCH] plasma-window-management: add missing since
+
+---
+ src/protocols/plasma-window-management.xml | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/src/protocols/plasma-window-management.xml b/src/protocols/plasma-window-management.xml
+index e2fe6303..40e1252f 100644
+--- a/src/protocols/plasma-window-management.xml
++++ b/src/protocols/plasma-window-management.xml
+@@ -6,7 +6,7 @@
+ SPDX-License-Identifier: LGPL-2.1-or-later
+ ]]></copyright>
+
+- <interface name="org_kde_plasma_window_management" version="12">
++ <interface name="org_kde_plasma_window_management" version="13">
+ <description summary="application windows management">
+ This interface manages application windows.
+ It provides requests to show and hide the desktop and emits
+@@ -78,14 +78,6 @@
+ <arg name="id" type="uint" summary="Deprecated: internal window Id"/>
+ </event>
+
+- <event name="window_with_uuid">
+- <description summary="notify the client that a window was mapped">
+- This event will be sent immediately after a window is mapped.
+- </description>
+- <arg name="id" type="uint" summary="Deprecated: internal window Id"/>
+- <arg name="uuid" type="string" summary="internal window uuid"/>
+- </event>
+-
+ <event name="stacking_order_changed" since="11">
+ <description summary="notify the client when stacking order changed">
+ This event will be sent when stacking order changed and on bind
+@@ -99,9 +91,17 @@
+ </description>
+ <arg name="uuids" type="string" summary="internal windows id ;-separated"/>
+ </event>
++
++ <event name="window_with_uuid" since="13">
++ <description summary="notify the client that a window was mapped">
++ This event will be sent immediately after a window is mapped.
++ </description>
++ <arg name="id" type="uint" summary="Deprecated: internal window Id"/>
++ <arg name="uuid" type="string" summary="internal window uuid"/>
++ </event>
+ </interface>
+
+- <interface name="org_kde_plasma_window" version="12">
++ <interface name="org_kde_plasma_window" version="13">
+ <description summary="interface to control application windows">
+ Manages and control an application window.
+
+--
+GitLab
+
+
diff --git a/kde/patch/plasma-workspace.patch b/kde/patch/plasma-workspace.patch
deleted file mode 100644
index 8671c65..0000000
--- a/kde/patch/plasma-workspace.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-# Add ConsoleKit2 support for screenlocker (ConsoleKit2 has implemented the
-# systemd-logind API for Lock, Unlock, PrepareForSleep and Inhibit.
-# This functionality has been incorporated into kscreenlocker-5.5.0.
-#cat $CWD/patch/plasma-workspace/plasma-workspace_consolekit2.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Apply commit that fixes compilation of 5.6.5:
-#cat $CWD/patch/plasma-workspace/plasma-workspace_apply_767aa57.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Systray: Move all icon resolution to dataengine, preventing high CPU usage,
-# see https://phabricator.kde.org/D2986 :
-# Fixed in 5.9.0
-#cat $CWD/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix vulnerability (CVE-2018-6791 - KDEBUG_389815)
-# (already fixed in Plasma 5.12.0):
-#cat $CWD/patch/plasma-workspace/plasma-workspace_kdebug389815.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch b/kde/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch
deleted file mode 100644
index 4ad3c07..0000000
--- a/kde/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-https://phabricator.kde.org/D2986
-Systray: Move all icon resolution to dataengine
-
-diff --git a/applets/systemtray/package/contents/ui/ConfigEntries.qml b/applets/systemtray/package/contents/ui/ConfigEntries.qml
---- a/applets/systemtray/package/contents/ui/ConfigEntries.qml
-+++ b/applets/systemtray/package/contents/ui/ConfigEntries.qml
-@@ -75,7 +75,7 @@
- "index": i,
- "taskId": item.Id,
- "name": item.Title,
-- "iconName": plasmoid.nativeInterface.resolveIcon(item.IconName, item.IconThemePath),
-+ "iconName": item.IconName,
- "icon": item.Icon
- });
- }
-diff --git a/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml b/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml
---- a/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml
-+++ b/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml
-@@ -28,7 +28,7 @@
- text: Title
- mainText: ToolTipTitle != "" ? ToolTipTitle : Title
- subText: ToolTipSubTitle
-- icon: ToolTipIcon != "" ? ToolTipIcon : plasmoid.nativeInterface.resolveIcon(IconName != "" ? IconName : Icon, IconThemePath)
-+ icon: ToolTipIcon != "" ? ToolTipIcon : Icon ? Icon : IconName
- textFormat: Text.AutoText
- category: Category
-
-@@ -48,7 +48,7 @@
-
- PlasmaCore.IconItem {
- id: iconItem
-- source: plasmoid.nativeInterface.resolveIcon(IconName != "" ? IconName : Icon, IconThemePath)
-+ source: Icon ? Icon : IconName
- width: Math.min(parent.width, parent.height)
- height: width
- active: taskIcon.containsMouse
-diff --git a/applets/systemtray/systemtray.h b/applets/systemtray/systemtray.h
---- a/applets/systemtray/systemtray.h
-+++ b/applets/systemtray/systemtray.h
-@@ -60,12 +60,6 @@
-
- //Invokable utilities
- /**
-- * returns either a simple icon name or a custom path if the app is
-- * using a custom theme
-- */
-- Q_INVOKABLE QVariant resolveIcon(const QVariant &variant, const QString &iconThemePath);
--
-- /**
- * Given an AppletInterface pointer, shows a proper context menu for it
- */
- Q_INVOKABLE void showPlasmoidMenu(QQuickItem *appletInterface, int x, int y);
-diff --git a/applets/systemtray/systemtray.cpp b/applets/systemtray/systemtray.cpp
---- a/applets/systemtray/systemtray.cpp
-+++ b/applets/systemtray/systemtray.cpp
-@@ -37,37 +37,11 @@
- #include <Plasma/PluginLoader>
- #include <Plasma/ServiceJob>
-
--#include <KIconLoader>
--#include <KIconEngine>
- #include <KActionCollection>
- #include <KLocalizedString>
-
- #include <plasma_version.h>
-
--/*
-- * An app may also load icons from their own directories, so we need a new iconloader that takes this into account
-- * This is wrapped into a subclass of iconengine so the iconloader lifespan matches the icon object
-- */
--class AppIconEngine : public KIconEngine
--{
--public:
-- AppIconEngine(const QString &variant, const QString &path, const QString &appName);
-- ~AppIconEngine();
--private:
-- KIconLoader* m_loader;
--};
--
--AppIconEngine::AppIconEngine(const QString &variant, const QString &path, const QString &appName) :
-- KIconEngine(variant, m_loader = new KIconLoader(appName, QStringList()))
--{
-- m_loader->addAppDir(appName, path);
--}
--
--AppIconEngine::~AppIconEngine()
--{
-- delete m_loader;
--}
--
- class PlasmoidModel: public QStandardItemModel
- {
- public:
-@@ -169,32 +143,6 @@
- }
- }
-
--QVariant SystemTray::resolveIcon(const QVariant &variant, const QString &iconThemePath)
--{
-- if (variant.canConvert<QString>()) {
-- if (!iconThemePath.isEmpty()) {
-- const QString path = iconThemePath;
-- if (!path.isEmpty()) {
-- // FIXME: If last part of path is not "icons", this won't work!
-- auto tokens = path.splitRef('/', QString::SkipEmptyParts);
-- if (tokens.length() >= 3 && tokens.takeLast() == QLatin1String("icons")) {
-- const QString appName = tokens.takeLast().toString();
--
-- return QVariant(QIcon(new AppIconEngine(variant.toString(), path, appName)));
-- } else {
-- qCWarning(SYSTEM_TRAY) << "Wrong IconThemePath" << path << ": too short or does not end with 'icons'";
-- }
-- }
--
-- //return just the string hoping that IconItem will know how to interpret it anyways as either a normal icon or a SVG from the theme
-- return variant;
-- }
-- }
--
-- // Most importantly QIcons. Nothing to do for those.
-- return variant;
--}
--
- void SystemTray::showPlasmoidMenu(QQuickItem *appletInterface, int x, int y)
- {
- if (!appletInterface) {
-diff --git a/dataengines/statusnotifieritem/statusnotifieritemsource.cpp b/dataengines/statusnotifieritem/statusnotifieritemsource.cpp
---- a/dataengines/statusnotifieritem/statusnotifieritemsource.cpp
-+++ b/dataengines/statusnotifieritem/statusnotifieritemsource.cpp
-@@ -240,14 +240,19 @@
- if (!m_customIconLoader) {
- m_customIconLoader = new KIconLoader(QString(), QStringList(), this);
- }
-+ // FIXME: If last part of path is not "icons", this won't work!
-+ QString appName;
-+ auto tokens = path.splitRef('/', QString::SkipEmptyParts);
-+ if (tokens.length() >= 3 && tokens.takeLast() == QLatin1String("icons"))
-+ appName = tokens.takeLast().toString();
-
- //icons may be either in the root directory of the passed path or in a appdir format
- //i.e hicolor/32x32/iconname.png
-
-- m_customIconLoader->reconfigure(QString(), QStringList(path));
-+ m_customIconLoader->reconfigure(appName, QStringList(path));
-
- //add app dir requires an app name, though this is completely unused in this context
-- m_customIconLoader->addAppDir(QStringLiteral("unused"), path);
-+ m_customIconLoader->addAppDir(appName.size() ? appName : QStringLiteral("unused"), path);
- }
- setData(QStringLiteral("IconThemePath"), path);
-
-
diff --git a/kde/patch/plasma-workspace/plasma-workspace_apply_767aa57.patch b/kde/patch/plasma-workspace/plasma-workspace_apply_767aa57.patch
deleted file mode 100644
index 4f22b8e..0000000
--- a/kde/patch/plasma-workspace/plasma-workspace_apply_767aa57.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Kai Uwe Broulik <kde@privat.broulik.de>
-Date: Mon, 13 Jun 2016 18:36:17 +0000
-Subject: [PanelView] Fix build...
-X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=767aa574400276b872aa0495f9af096784a8ed66
----
-[PanelView] Fix build...
-
-CCMAIL: notmart@gmail.com
----
-
-
---- a/shell/panelview.cpp
-+++ b/shell/panelview.cpp
-@@ -995,7 +995,7 @@
- {
- if (status == Plasma::Types::NeedsAttentionStatus) {
- showTemporarily();
-- } else if (status == Plasma::AcceptingInputStatus) {
-+ } else if (status == Plasma::Types::AcceptingInputStatus) {
- KWindowSystem::forceActiveWindow(winId());
- } else {
- restoreAutoHide();
-
diff --git a/kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch b/kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch
deleted file mode 100644
index 6131c90..0000000
--- a/kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch
+++ /dev/null
@@ -1,189 +0,0 @@
-From: Eric Koegel <eric.koegel@gmail.com>
-Date: Wed, 12 Aug 2015 08:33:39 +0000
-Subject: ConsoleKit2 support for screenlocker
-X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=72578284a1fda5f012cafcaccad6069fadbf9a25
----
-ConsoleKit2 support for screenlocker
-
-ConsoleKit2 has the same API as systemd-logind for Lock, Unlock,
-PrepareForSleep, and Inhibit. This patch adds the functionality
-for ConsoleKit2 while attempting to minimize code duplication.
-
-REVIEW: 124469
----
-
-
---- a/ksmserver/screenlocker/logind.cpp
-+++ b/ksmserver/screenlocker/logind.cpp
-@@ -25,13 +25,17 @@
- #include <QDebug>
- #include <QDBusConnection>
- #include <QDBusConnectionInterface>
--#include <QDBusPendingCallWatcher>
- #include <QDBusServiceWatcher>
-
- const static QString s_login1Service = QStringLiteral("org.freedesktop.login1");
- const static QString s_login1Path = QStringLiteral("/org/freedesktop/login1");
- const static QString s_login1ManagerInterface = QStringLiteral("org.freedesktop.login1.Manager");
- const static QString s_login1SessionInterface = QStringLiteral("org.freedesktop.login1.Session");
-+
-+const static QString s_consolekitService = QStringLiteral("org.freedesktop.ConsoleKit");
-+const static QString s_consolekitPath = QStringLiteral("/org/freedesktop/ConsoleKit/Manager");
-+const static QString s_consolekitManagerInterface = QStringLiteral("org.freedesktop.ConsoleKit.Manager");
-+const static QString s_consolekitSessionInterface = QStringLiteral("org.freedesktop.ConsoleKit.Session");
-
- LogindIntegration::LogindIntegration(const QDBusConnection &connection, QObject *parent)
- : QObject(parent)
-@@ -42,6 +46,10 @@
- this))
- , m_connected(false)
- , m_inhibitFileDescriptor()
-+ , m_service(nullptr)
-+ , m_path(nullptr)
-+ , m_managerInterface(nullptr)
-+ , m_sessionInterface(nullptr)
- {
- connect(m_logindServiceWatcher, &QDBusServiceWatcher::serviceRegistered, this, &LogindIntegration::logindServiceRegistered);
- connect(m_logindServiceWatcher, &QDBusServiceWatcher::serviceUnregistered, this,
-@@ -67,6 +75,11 @@
- }
- if (reply.value().contains(s_login1Service)) {
- logindServiceRegistered();
-+ // Don't register ck if we have logind
-+ return;
-+ }
-+ if (reply.value().contains(s_consolekitService)) {
-+ consolekitServiceRegistered();
- }
- }
- );
-@@ -89,6 +102,40 @@
- message.setArguments(QVariantList() << (quint32) QCoreApplication::applicationPid());
- QDBusPendingReply<QDBusObjectPath> session = m_bus.asyncCall(message);
- QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(session, this);
-+
-+ m_service = &s_login1Service;
-+ m_path = &s_login1Path;
-+ m_managerInterface = &s_login1ManagerInterface;
-+ m_sessionInterface = &s_login1SessionInterface;
-+
-+ commonServiceRegistered(watcher);
-+}
-+
-+void LogindIntegration::consolekitServiceRegistered()
-+{
-+ // Don't try to register with ck if we have logind
-+ if (m_connected) {
-+ return;
-+ }
-+
-+ // get the current session
-+ QDBusMessage message = QDBusMessage::createMethodCall(s_consolekitService,
-+ s_consolekitPath,
-+ s_consolekitManagerInterface,
-+ QStringLiteral("GetCurrentSession"));
-+ QDBusPendingReply<QDBusObjectPath> session = m_bus.asyncCall(message);
-+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(session, this);
-+
-+ m_service = &s_consolekitService;
-+ m_path = &s_consolekitPath;
-+ m_managerInterface = &s_consolekitManagerInterface;
-+ m_sessionInterface = &s_consolekitSessionInterface;
-+
-+ commonServiceRegistered(watcher);
-+}
-+
-+void LogindIntegration::commonServiceRegistered(QDBusPendingCallWatcher *watcher)
-+{
- connect(watcher, &QDBusPendingCallWatcher::finished, this,
- [this](QDBusPendingCallWatcher *self) {
- QDBusPendingReply<QDBusObjectPath> reply = *self;
-@@ -97,7 +144,7 @@
- return;
- }
- if (!reply.isValid()) {
-- qDebug() << "The session is not registered with logind" << reply.error().message();
-+ qDebug() << "The session is not registered: " << reply.error().message();
- return;
- }
- const QString sessionPath = reply.value().path();
-@@ -105,15 +152,15 @@
-
- // connections need to be done this way as the object exposes both method and signal
- // with name "Lock"/"Unlock". Qt is not able to automatically handle this.
-- m_bus.connect(s_login1Service,
-+ m_bus.connect(*m_service,
- sessionPath,
-- s_login1SessionInterface,
-+ *m_sessionInterface,
- QStringLiteral("Lock"),
- this,
- SIGNAL(requestLock()));
-- m_bus.connect(s_login1Service,
-+ m_bus.connect(*m_service,
- sessionPath,
-- s_login1SessionInterface,
-+ *m_sessionInterface,
- QStringLiteral("Unlock"),
- this,
- SIGNAL(requestUnlock()));
-@@ -123,9 +170,9 @@
- );
-
- // connect to manager object's signals we need
-- m_bus.connect(s_login1Service,
-- s_login1Path,
-- s_login1ManagerInterface,
-+ m_bus.connect(*m_service,
-+ *m_path,
-+ *m_managerInterface,
- QStringLiteral("PrepareForSleep"),
- this,
- SIGNAL(prepareForSleep(bool)));
-@@ -136,9 +183,14 @@
- if (m_inhibitFileDescriptor.isValid()) {
- return;
- }
-- QDBusMessage message = QDBusMessage::createMethodCall(s_login1Service,
-- s_login1Path,
-- s_login1ManagerInterface,
-+
-+ if (!m_connected) {
-+ return;
-+ }
-+
-+ QDBusMessage message = QDBusMessage::createMethodCall(*m_service,
-+ *m_path,
-+ *m_managerInterface,
- QStringLiteral("Inhibit"));
- message.setArguments(QVariantList({QStringLiteral("sleep"),
- i18n("Screen Locker"),
-
---- a/ksmserver/screenlocker/logind.h
-+++ b/ksmserver/screenlocker/logind.h
-@@ -23,6 +23,7 @@
- #include <QDBusConnection>
- #include <QDBusUnixFileDescriptor>
- #include <QObject>
-+#include <QDBusPendingCallWatcher>
-
- class QDBusServiceWatcher;
-
-@@ -59,10 +60,16 @@
- **/
- explicit LogindIntegration(const QDBusConnection &connection, QObject *parent = nullptr);
- void logindServiceRegistered();
-+ void consolekitServiceRegistered();
-+ void commonServiceRegistered(QDBusPendingCallWatcher *watcher);
- QDBusConnection m_bus;
- QDBusServiceWatcher *m_logindServiceWatcher;
- bool m_connected;
- QDBusUnixFileDescriptor m_inhibitFileDescriptor;
-+ const QString *m_service;
-+ const QString *m_path;
-+ const QString *m_managerInterface;
-+ const QString *m_sessionInterface;
- };
-
- #endif
-
diff --git a/kde/patch/plasma-workspace/plasma-workspace_kdebug389815.patch b/kde/patch/plasma-workspace/plasma-workspace_kdebug389815.patch
deleted file mode 100644
index e2f1e48..0000000
--- a/kde/patch/plasma-workspace/plasma-workspace_kdebug389815.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From f32002ce50edc3891f1fa41173132c820b917d57 Mon Sep 17 00:00:00 2001
-From: Marco Martin <notmart@gmail.com>
-Date: Mon, 5 Feb 2018 13:12:51 +0100
-Subject: Make sure device paths are quoted
-
-in the case a vfat removable device has $() or `` in its label,
-such as $(touch foo) the quoted command may get executed,
-leaving an attack vector. Use KMacroExpander::expandMacrosShellQuote
-to make sure everything is quoted and not interpreted as a command
-
-BUG:389815
----
- soliduiserver/deviceserviceaction.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/soliduiserver/deviceserviceaction.cpp b/soliduiserver/deviceserviceaction.cpp
-index f49c967..738b27c 100644
---- a/soliduiserver/deviceserviceaction.cpp
-+++ b/soliduiserver/deviceserviceaction.cpp
-@@ -158,7 +158,7 @@ void DelayedExecutor::delayedExecute(const QString &udi)
-
- QString exec = m_service.exec();
- MacroExpander mx(device);
-- mx.expandMacros(exec);
-+ mx.expandMacrosShellQuote(exec);
-
- KRun::runCommand(exec, QString(), m_service.icon(), 0);
- deleteLater();
---
-cgit v0.11.2
-
-
diff --git a/kde/patch/powerdevil.patch b/kde/patch/powerdevil.patch
deleted file mode 100644
index b7e2bae..0000000
--- a/kde/patch/powerdevil.patch
+++ /dev/null
@@ -1,4 +0,0 @@
-# PowerDevil fails to setup power settings on a fresh install.
-# Fixed in 5.12.5.
-#cat $CWD/patch/powerdevil/powerdevil-5.12.4_firstrun.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/powerdevil/powerdevil-5.12.4_firstrun.patch b/kde/patch/powerdevil/powerdevil-5.12.4_firstrun.patch
deleted file mode 100644
index 165e67b..0000000
--- a/kde/patch/powerdevil/powerdevil-5.12.4_firstrun.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From be91abe7fc8cc731b57bec4cf2c004c07b0fd79b Mon Sep 17 00:00:00 2001
-From: Kai Uwe Broulik <kde@privat.broulik.de>
-Date: Wed, 25 Apr 2018 10:56:16 +0200
-Subject: Ignore "migration" key for determining whether the config is empty
-
-Otherwise we would never generate the default power management configuration
-leading to it not suspending on lid close, not handling power buttons etc etc
-
-CHANGELOG: Fixed bug that caused power management system to not work on a fresh install
-
-Reviewed-By: David Edmundson
-
-BUG: 391782
-FIXED-IN: 5.12.5
----
- daemon/powerdevilcore.cpp | 8 +++++++-
- 1 file changed, 7 insertions(+), 1 deletion(-)
-
-diff --git a/daemon/powerdevilcore.cpp b/daemon/powerdevilcore.cpp
-index 2cf936e..53b7521 100644
---- a/daemon/powerdevilcore.cpp
-+++ b/daemon/powerdevilcore.cpp
-@@ -108,9 +108,15 @@ void Core::onBackendReady()
-
- m_profilesConfig = KSharedConfig::openConfig("powermanagementprofilesrc", KConfig::CascadeConfig);
-
-+ QStringList groups = m_profilesConfig->groupList();
-+ // the "migration" key is for shortcuts migration in added by migratePre512KeyboardShortcuts
-+ // and as such our configuration would never be considered empty, ignore it!
-+ groups.removeOne(QStringLiteral("migration"));
-+
- // Is it brand new?
-- if (m_profilesConfig->groupList().isEmpty()) {
-+ if (groups.isEmpty()) {
- // Generate defaults
-+ qCDebug(POWERDEVIL) << "Generating a default configuration";
- bool toRam = m_backend->supportedSuspendMethods() & PowerDevil::BackendInterface::ToRam;
- bool toDisk = m_backend->supportedSuspendMethods() & PowerDevil::BackendInterface::ToDisk;
- ProfileGenerator::generateProfiles(toRam, toDisk);
---
-cgit v0.11.2
-
diff --git a/kde/patch/pykde4.patch b/kde/patch/pykde4.patch
index 48073d4..d5eb044 100644
--- a/kde/patch/pykde4.patch
+++ b/kde/patch/pykde4.patch
@@ -2,4 +2,3 @@
cat $CWD/patch/pykde4/0001-use-LIB_PYTHON-realpath.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
cat $CWD/patch/pykde4/0002-Add-some-missing-link-libraries.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
cat $CWD/patch/pykde4/0003-Fix-build-with-sip-4.19.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/sddm-qt5.patch b/kde/patch/sddm-qt5.patch
index d57fb12..5919925 100644
--- a/kde/patch/sddm-qt5.patch
+++ b/kde/patch/sddm-qt5.patch
@@ -1,26 +1,21 @@
-# Add missing consolekit support
-# (brings back the switch_user functionality in KDE):
-cat $CWD/patch/sddm-qt5/sddm_consolekit.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+if [ "$SLKELOGIND" == "no" ]; then
+ # Add missing consolekit support
+ # (brings back the switch_user functionality in KDE):
+ cat $CWD/patch/sddm-qt5/sddm_consolekit.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-# Don't assume that ConsoleKit2 exposes a login1 dbus interface:
-cat $CWD/patch/sddm-qt5/sddm_ck2_revert.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+ # Don't assume that ConsoleKit2 exposes a login1 dbus interface:
+ cat $CWD/patch/sddm-qt5/sddm_ck2_revert.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+fi
+
+# Properly honor supplemental groups, https://github.com/sddm/sddm/issues/1159 :
+cat $CWD/patch/sddm-qt5/sddm_revert-honor-PAM-supplemental-groups.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+cat $CWD/patch/sddm-qt5/sddm_honor-PAM-supplemental-groups-v2.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
# SDDM 0.14 sources $HOME/.xsession which in Slackware will override the
# session selection you make in SDDM. We fix that unwanted side effect by
# reverting the change:
cat $CWD/patch/sddm-qt5/sddm_userxsession.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-# Fix display of user avatars ($HOME/.face.icon file)
-# (fixed in sddm-0.15.0).
-#cat $CWD//patch/sddm-qt5/sddm_avatars.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix a compilation error on passwd backend:
-#cat $CWD/patch/sddm-qt5/sddm_auth.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix a compilation error on passwd backend:
-# (fixed in sddm-0.12.0).
-#cat $CWD/patch/sddm-qt5/sddm_qstring.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
# Add the dutch translation:
if ! grep -q nl.ts data/translations/CMakeLists.txt ; then
sed -e '/set(TRANSLATION_FILES/s/TRANSLATION_FILES/&\n nl.ts/' \
diff --git a/kde/patch/sddm-qt5/sddm_honor-PAM-supplemental-groups-v2.patch b/kde/patch/sddm-qt5/sddm_honor-PAM-supplemental-groups-v2.patch
new file mode 100644
index 0000000..bf3bfd2
--- /dev/null
+++ b/kde/patch/sddm-qt5/sddm_honor-PAM-supplemental-groups-v2.patch
@@ -0,0 +1,183 @@
+From 75e6e00d9e1ecf25e3a9c8332530a1e40d737cdb Mon Sep 17 00:00:00 2001
+From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
+Date: Thu, 9 May 2019 03:06:48 +0200
+Subject: [PATCH] Honor PAM's supplemental groups (v2) (#834, #1159)
+
+This moves the supplemental group initialization step from
+UserSession.cpp to the Backend system, so that the Pam Backend can
+inject additional supplemental groups via modules like pam_group.so.
+
+pam_setcred(3) assumes that it operates on an already initialized
+supplemental group list. However, PamBackend calls
+pam_setcred(PAM_ESTABLISH_CRED) earlier, at the start
+PamBackend::openSession, so a pam_setcred(PAM_REINITIALIZE_CRED) call
+must be issued to repeat the injection of PAM's supplemental groups.
+---
+ src/helper/Backend.cpp | 5 +++++
+ src/helper/Backend.h | 3 +++
+ src/helper/HelperApp.cpp | 4 ++++
+ src/helper/HelperApp.h | 1 +
+ src/helper/UserSession.cpp | 13 ++++++++-----
+ src/helper/backend/PamBackend.cpp | 18 ++++++++++++++++++
+ src/helper/backend/PamBackend.h | 2 ++
+ 7 files changed, 41 insertions(+), 5 deletions(-)
+
+diff --git a/src/helper/Backend.cpp b/src/helper/Backend.cpp
+index d6bb4d0a..35ae2bdf 100644
+--- a/src/helper/Backend.cpp
++++ b/src/helper/Backend.cpp
+@@ -29,6 +29,7 @@
+ #include <QtCore/QProcessEnvironment>
+
+ #include <pwd.h>
++#include <grp.h>
+
+ namespace SDDM {
+ Backend::Backend(HelperApp* parent)
+@@ -79,4 +80,8 @@ namespace SDDM {
+ bool Backend::closeSession() {
+ return true;
+ }
++
++ bool Backend::setupSupplementalGroups(struct passwd *pw) {
++ return !initgroups(pw->pw_name, pw->pw_gid);
++ }
+ }
+diff --git a/src/helper/Backend.h b/src/helper/Backend.h
+index b790e001..3caf1592 100644
+--- a/src/helper/Backend.h
++++ b/src/helper/Backend.h
+@@ -22,6 +22,7 @@
+ #define BACKEND_H
+
+ #include <QtCore/QObject>
++#include <pwd.h>
+
+ namespace SDDM {
+ class HelperApp;
+@@ -38,6 +39,8 @@ namespace SDDM {
+ void setAutologin(bool on = true);
+ void setGreeter(bool on = true);
+
++ virtual bool setupSupplementalGroups(struct passwd *pw);
++
+ public slots:
+ virtual bool start(const QString &user = QString()) = 0;
+ virtual bool authenticate() = 0;
+diff --git a/src/helper/HelperApp.cpp b/src/helper/HelperApp.cpp
+index cad93bd8..d0891d75 100644
+--- a/src/helper/HelperApp.cpp
++++ b/src/helper/HelperApp.cpp
+@@ -253,6 +253,10 @@ namespace SDDM {
+ return m_session;
+ }
+
++ Backend *HelperApp::backend() {
++ return m_backend;
++ }
++
+ const QString& HelperApp::user() const {
+ return m_user;
+ }
+diff --git a/src/helper/HelperApp.h b/src/helper/HelperApp.h
+index 3742df12..cb5959a7 100644
+--- a/src/helper/HelperApp.h
++++ b/src/helper/HelperApp.h
+@@ -39,6 +39,7 @@ namespace SDDM {
+ virtual ~HelperApp();
+
+ UserSession *session();
++ Backend *backend();
+ const QString &user() const;
+ const QString &cookie() const;
+
+diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
+index f71fd358..62fd4d70 100644
+--- a/src/helper/UserSession.cpp
++++ b/src/helper/UserSession.cpp
+@@ -19,6 +19,7 @@
+ *
+ */
+
++#include "Backend.h"
+ #include "Configuration.h"
+ #include "UserSession.h"
+ #include "HelperApp.h"
+@@ -129,7 +130,8 @@ namespace SDDM {
+ #endif
+
+ // switch user
+- const QByteArray username = qobject_cast<HelperApp*>(parent())->user().toLocal8Bit();
++ HelperApp* app = qobject_cast<HelperApp*>(parent());
++ const QByteArray username = app->user().toLocal8Bit();
+ struct passwd pw;
+ struct passwd *rpw;
+ long bufsize = sysconf(_SC_GETPW_R_SIZE_MAX);
+@@ -146,12 +148,13 @@ namespace SDDM {
+ qCritical() << "getpwnam_r(" << username << ") failed with error: " << strerror(err);
+ exit(Auth::HELPER_OTHER_ERROR);
+ }
+- if (setgid(pw.pw_gid) != 0) {
+- qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
++
++ if (!app->backend()->setupSupplementalGroups(&pw)) {
++ qCritical() << "failed to set up supplemental groups for user: " << username;
+ exit(Auth::HELPER_OTHER_ERROR);
+ }
+- if (initgroups(pw.pw_name, pw.pw_gid) != 0) {
+- qCritical() << "initgroups(" << pw.pw_name << ", " << pw.pw_gid << ") failed for user: " << username;
++ if (setgid(pw.pw_gid) != 0) {
++ qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
+ exit(Auth::HELPER_OTHER_ERROR);
+ }
+ if (setuid(pw.pw_uid) != 0) {
+diff --git a/src/helper/backend/PamBackend.cpp b/src/helper/backend/PamBackend.cpp
+index f86d77d6..cccfa258 100644
+--- a/src/helper/backend/PamBackend.cpp
++++ b/src/helper/backend/PamBackend.cpp
+@@ -289,6 +289,24 @@ namespace SDDM {
+ return QString::fromLocal8Bit((const char*) m_pam->getItem(PAM_USER));
+ }
+
++ bool PamBackend::setupSupplementalGroups(struct passwd *pw) {
++ if (!Backend::setupSupplementalGroups(pw))
++ return false;
++
++ // pam_setcred(3) may inject additional groups into the user's
++ // list of supplemental groups, and assumes that the user's
++ // supplemental groups have already been initialized before
++ // its invocation. Since pam_setcred was already called at the
++ // start of openSession, we need to repeat this step here as
++ // the user's groups have only just now been initialized.
++
++ if (!m_pam->setCred(PAM_REINITIALIZE_CRED)) {
++ m_app->error(m_pam->errorString(), Auth::ERROR_AUTHENTICATION);
++ return false;
++ }
++ return true;
++ }
++
+ int PamBackend::converse(int n, const struct pam_message **msg, struct pam_response **resp) {
+ qDebug() << "[PAM] Conversation with" << n << "messages";
+
+diff --git a/src/helper/backend/PamBackend.h b/src/helper/backend/PamBackend.h
+index 4c8b4b35..5b079099 100644
+--- a/src/helper/backend/PamBackend.h
++++ b/src/helper/backend/PamBackend.h
+@@ -28,6 +28,7 @@
+ #include <QtCore/QObject>
+
+ #include <security/pam_appl.h>
++#include <pwd.h>
+
+ namespace SDDM {
+ class PamHandle;
+@@ -61,6 +62,7 @@ namespace SDDM {
+ explicit PamBackend(HelperApp *parent);
+ virtual ~PamBackend();
+ int converse(int n, const struct pam_message **msg, struct pam_response **resp);
++ virtual bool setupSupplementalGroups(struct passwd *pw);
+
+ public slots:
+ virtual bool start(const QString &user = QString());
+
diff --git a/kde/patch/sddm-qt5/sddm_revert-honor-PAM-supplemental-groups.patch b/kde/patch/sddm-qt5/sddm_revert-honor-PAM-supplemental-groups.patch
new file mode 100644
index 0000000..2391c80
--- /dev/null
+++ b/kde/patch/sddm-qt5/sddm_revert-honor-PAM-supplemental-groups.patch
@@ -0,0 +1,88 @@
+From d3953e88a94ec25a87d3c5136517b3d1009cb1fd Mon Sep 17 00:00:00 2001
+From: "J. Konrad Tegtmeier-Rottach" <jktr@0x16.de>
+Date: Wed, 8 May 2019 18:58:53 +0200
+Subject: [PATCH] Revert "Honor PAM's ambient supplemental groups. (#834)"
+
+This reverts commit 1bc813d08b8130e458a6550ec47fb2bfbe6de080, which
+misuses PAM and leads to pulling in all of root's supplemental groups
+during session initialization instead of only adding PAM's extra
+groups. The problem was masked due to the root user not having any
+supplemental groups in some common contexts, like running sddm from a
+systemd unit.
+---
+ src/helper/UserSession.cpp | 57 --------------------------------------
+ 1 file changed, 57 deletions(-)
+
+diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp
+index b3aec356..f71fd358 100644
+--- a/src/helper/UserSession.cpp
++++ b/src/helper/UserSession.cpp
+@@ -150,67 +150,10 @@ namespace SDDM {
+ qCritical() << "setgid(" << pw.pw_gid << ") failed for user: " << username;
+ exit(Auth::HELPER_OTHER_ERROR);
+ }
+-
+-#ifdef USE_PAM
+-
+- // fetch ambient groups from PAM's environment;
+- // these are set by modules such as pam_groups.so
+- int n_pam_groups = getgroups(0, NULL);
+- gid_t *pam_groups = NULL;
+- if (n_pam_groups > 0) {
+- pam_groups = new gid_t[n_pam_groups];
+- if ((n_pam_groups = getgroups(n_pam_groups, pam_groups)) == -1) {
+- qCritical() << "getgroups() failed to fetch supplemental"
+- << "PAM groups for user:" << username;
+- exit(Auth::HELPER_OTHER_ERROR);
+- }
+- } else {
+- n_pam_groups = 0;
+- }
+-
+- // fetch session's user's groups
+- int n_user_groups = 0;
+- gid_t *user_groups = NULL;
+- if (-1 == getgrouplist(username.constData(), pw.pw_gid,
+- NULL, &n_user_groups)) {
+- user_groups = new gid_t[n_user_groups];
+- if ((n_user_groups = getgrouplist(username.constData(),
+- pw.pw_gid, user_groups,
+- &n_user_groups)) == -1 ) {
+- qCritical() << "getgrouplist(" << username << ", " << pw.pw_gid
+- << ") failed";
+- exit(Auth::HELPER_OTHER_ERROR);
+- }
+- }
+-
+- // set groups to concatenation of PAM's ambient
+- // groups and the session's user's groups
+- int n_groups = n_pam_groups + n_user_groups;
+- if (n_groups > 0) {
+- gid_t *groups = new gid_t[n_groups];
+- memcpy(groups, pam_groups, (n_pam_groups * sizeof(gid_t)));
+- memcpy((groups + n_pam_groups), user_groups,
+- (n_user_groups * sizeof(gid_t)));
+-
+- // setgroups(2) handles duplicate groups
+- if (setgroups(n_groups, groups) != 0) {
+- qCritical() << "setgroups() failed for user: " << username;
+- exit (Auth::HELPER_OTHER_ERROR);
+- }
+- delete[] groups;
+- }
+- delete[] pam_groups;
+- delete[] user_groups;
+-
+-#else
+-
+ if (initgroups(pw.pw_name, pw.pw_gid) != 0) {
+ qCritical() << "initgroups(" << pw.pw_name << ", " << pw.pw_gid << ") failed for user: " << username;
+ exit(Auth::HELPER_OTHER_ERROR);
+ }
+-
+-#endif /* USE_PAM */
+-
+ if (setuid(pw.pw_uid) != 0) {
+ qCritical() << "setuid(" << pw.pw_uid << ") failed for user: " << username;
+ exit(Auth::HELPER_OTHER_ERROR);
+
diff --git a/kde/patch/sddm-theme-breeze.patch b/kde/patch/sddm-theme-breeze.patch
deleted file mode 100644
index c500dba..0000000
--- a/kde/patch/sddm-theme-breeze.patch
+++ /dev/null
@@ -1,2 +0,0 @@
-# SDDM changed its location for the themes:
-#cat $CWD/patch/sddm-theme-breeze/sddm-theme-breeze_path.diff | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
diff --git a/kde/patch/sddm-theme-breeze/sddm-theme-breeze_path.diff b/kde/patch/sddm-theme-breeze/sddm-theme-breeze_path.diff
deleted file mode 100644
index 96817ad..0000000
--- a/kde/patch/sddm-theme-breeze/sddm-theme-breeze_path.diff
+++ /dev/null
@@ -1,10 +0,0 @@
-diff -uar sddm-theme-breeze-20140601.orig/CMakeLists.txt sddm-theme-breeze-20140601/CMakeLists.txt
---- sddm-theme-breeze-20140601.orig/CMakeLists.txt 2014-06-01 05:19:59.000000000 +0200
-+++ sddm-theme-breeze-20140601/CMakeLists.txt 2014-09-15 14:08:36.883149093 +0200
-@@ -3,5 +3,5 @@
- message("This cmake file does some weird stuff for the neon ISO")
- message("unless you are Rohan or Harold turn back now and revert this commit")
-
--INSTALL(DIRECTORY breeze DESTINATION ${CMAKE_INSTALL_PREFIX}/share/apps/sddm/themes/)
-+INSTALL(DIRECTORY breeze DESTINATION ${CMAKE_INSTALL_PREFIX}/share/sddm/themes/)
- INSTALL(FILES plasmarc DESTINATION /var/lib/sddm/.config)
diff --git a/kde/patch/spectacle.patch b/kde/patch/spectacle.patch
deleted file mode 100644
index 9ab4616..0000000
--- a/kde/patch/spectacle.patch
+++ /dev/null
@@ -1,7 +0,0 @@
-# Fix for broken HiDPI support.
-# Fixed post Applications 16.04.0:
-#cat $CWD/patch/spectacle/spectacle_hidpi.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-# Fix for broken rectangular image capture on Nvidia GPU (KDEBUG 362241):
-# Fixed post Applications 16.04.0:
-#cat $CWD/patch/spectacle/spectacle_rect_capture.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/spectacle/spectacle_hidpi.patch b/kde/patch/spectacle/spectacle_hidpi.patch
deleted file mode 100644
index 19cf923..0000000
--- a/kde/patch/spectacle/spectacle_hidpi.patch
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/src/QuickEditor/EditorRoot.qml
-+++ b/src/QuickEditor/EditorRoot.qml
-@@ -36,10 +36,10 @@
- }
-
- selection = cropRectangle.createObject(parent, {
-- "x": xx,
-- "y": yy,
-+ "x": xx,
-+ "y": yy,
- "height": hh,
-- "width": ww
-+ "width": ww
- });
-
- cropDisplayCanvas.requestPaint();
-@@ -73,8 +73,8 @@
- source: "image://snapshot/rawimage";
- cache: false;
-
-- height: Window.height;
-- width: Window.width;
-+ height: Window.height / Screen.devicePixelRatio;
-+ width: Window.width / Screen.devicePixelRatio;
- fillMode: Image.PreserveAspectFit;
- }
-
-
diff --git a/kde/patch/spectacle/spectacle_rect_capture.patch b/kde/patch/spectacle/spectacle_rect_capture.patch
deleted file mode 100644
index 8556674..0000000
--- a/kde/patch/spectacle/spectacle_rect_capture.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From: Boudhayan Gupta <me@BaloneyGeek.com>
-Date: Mon, 25 Apr 2016 18:27:49 +0000
-Subject: Unbreak rectangular image grabs for nvidia users.
-X-Git-Url: http://quickgit.kde.org/?p=spectacle.git&a=commitdiff&h=abbbe6d13de870f9e9349acc2542cffc5d41b76d
----
-Unbreak rectangular image grabs for nvidia users.
-
-BUG: 362241
-FIXED-IN: 16.04.1
-Patch rebased for Slackware (did not apply cleanly)
----
-
-
-diff -uar spectacle-16.04.0.orig/src/QuickEditor/QuickEditor.cpp spectacle-16.04.0/src/QuickEditor/QuickEditor.cpp
---- spectacle-16.04.0.orig/src/QuickEditor/QuickEditor.cpp 2016-04-13 18:54:34.000000000 +0200
-+++ spectacle-16.04.0/src/QuickEditor/QuickEditor.cpp 2016-05-02 12:25:49.554524405 +0200
-@@ -138,23 +138,6 @@
- d->mGrabRect = QRect(x, y, width, height);
- SpectacleConfig::instance()->setCropRegion(d->mGrabRect);
-
-- QQuickItem *target = d->mQuickView->rootObject()->findChild<QQuickItem *>(QStringLiteral("imageBackground"));
-- d->mCurrentGrabResult = target->grabToImage();
-- if (d->mCurrentGrabResult.isNull()) {
-- emit grabCancelled();
-- return;
-- }
--
-- connect(d->mCurrentGrabResult.data(), &QQuickItemGrabResult::ready, this, &QuickEditor::grabReadyHandler);
--}
--
--void QuickEditor::grabReadyHandler()
--{
-- Q_D(QuickEditor);
--
-- QImage croppedImage = d->mCurrentGrabResult->image().copy(d->mGrabRect);
-- QPixmap croppedPixmap = QPixmap::fromImage(croppedImage);
--
- d->mQuickView->hide();
-- emit grabDone(croppedPixmap, d->mGrabRect);
-+ emit grabDone(mImageStore->mPixmap.copy(d->mGrabRect), d->mGrabRect);
- }
-diff -uar spectacle-16.04.0.orig/src/QuickEditor/QuickEditor.h spectacle-16.04.0/src/QuickEditor/QuickEditor.h
---- spectacle-16.04.0.orig/src/QuickEditor/QuickEditor.h 2016-04-13 18:54:34.000000000 +0200
-+++ spectacle-16.04.0/src/QuickEditor/QuickEditor.h 2016-05-02 12:22:48.124516811 +0200
-@@ -39,7 +39,6 @@
- private slots:
-
- void acceptImageHandler(int x, int y, int width, int height);
-- void grabReadyHandler();
-
- private:
-
diff --git a/kde/patch/strigi-multimedia.patch b/kde/patch/strigi-multimedia.patch
index aebad0d..77b9424 100644
--- a/kde/patch/strigi-multimedia.patch
+++ b/kde/patch/strigi-multimedia.patch
@@ -1,3 +1,2 @@
# Fix build:
cat $CWD/patch/strigi-multimedia/strigi-multimedia_port.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/umbrello.patch b/kde/patch/umbrello.patch
deleted file mode 100644
index 641688c..0000000
--- a/kde/patch/umbrello.patch
+++ /dev/null
@@ -1,10 +0,0 @@
-# Fix compilation error (undefined listitem in classifierlistpage.cpp)
-# Fixed post KDE 4.11.4 in
-# http://quickgit.kde.org/?p=umbrello.git&a=commit&h=5f9f6a68716a8aced2c5f962247d9b05b326fcf5
-#cat $CWD/patch/umbrello/umbrello-4.11.4_listitem.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
-# Fix compilation error "specialization of template<class T> struct QMetaTypeId in different namespace [-fpermissive]".
-# Fixed in Applications 18.12.0
-# https://cgit.kde.org/umbrello.git/patch/?id=62a9e5e6afdd920779f1211afb0381857659e578
-#cat $CWD/patch/umbrello/umbrello_qt510_kaboutdata_h.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
-
diff --git a/kde/patch/umbrello/umbrello-4.11.4_listitem.patch b/kde/patch/umbrello/umbrello-4.11.4_listitem.patch
deleted file mode 100644
index f5cb615..0000000
--- a/kde/patch/umbrello/umbrello-4.11.4_listitem.patch
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/umbrello/dialogs/classifierlistpage.cpp
-+++ b/umbrello/dialogs/classifierlistpage.cpp
-@@ -346,7 +346,7 @@
- }
-
- if (itemIndex >= 0 && (itemIndex < getItemList().size())) {
-- listItem = getItemList().at( itemIndex );
-+ UMLClassifierListItem* listItem = getItemList().at( itemIndex );
-
- //now update screen
- m_docTE->setText( listItem->doc() );
-
-
diff --git a/kde/patch/umbrello/umbrello_qt510_kaboutdata_h.patch b/kde/patch/umbrello/umbrello_qt510_kaboutdata_h.patch
deleted file mode 100644
index a27b0ed..0000000
--- a/kde/patch/umbrello/umbrello_qt510_kaboutdata_h.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-From 62a9e5e6afdd920779f1211afb0381857659e578 Mon Sep 17 00:00:00 2001
-From: Ralf Habacker <ralf.habacker@freenet.de>
-Date: Thu, 6 Dec 2018 13:36:34 +0100
-Subject: Fix KDE CI compile error with Qt 5.10 on linux
-
-The error was "specialization of template<class T>
-struct QMetaTypeId in different namespace [-fpermissive]"
-
-The Qt 5.10 related issue is fixed by using another approach
-to exclude KF5 class KAboutData.
----
- umbrello/main.cpp | 5 ++---
- 1 file changed, 2 insertions(+), 3 deletions(-)
-
-diff --git a/umbrello/main.cpp b/umbrello/main.cpp
-index e3315fa..9d2acd8 100644
---- a/umbrello/main.cpp
-+++ b/umbrello/main.cpp
-@@ -19,9 +19,8 @@
-
- // kde includes
- #if QT_VERSION > 0x050000
--namespace dummy {
--#include <kaboutdata.h>
--}
-+// prevent including of <kaboutdata.h>
-+#define KABOUTDATA_H
- #include <k4aboutdata.h>
- #define KAboutData K4AboutData
- #include <KCrash>
---
-cgit v0.11.2
-
diff --git a/kde/pkgsrc/kdeconnect-framework b/kde/pkgsrc/kdeconnect-framework
deleted file mode 100644
index 6e9a21c..0000000
--- a/kde/pkgsrc/kdeconnect-framework
+++ /dev/null
@@ -1 +0,0 @@
-plasma-extra/kdeconnect-kde
diff --git a/kde/pkgsrc/polkit-kde-kcmodules-framework b/kde/pkgsrc/polkit-kde-kcmodules-framework
deleted file mode 100644
index eeede40..0000000
--- a/kde/pkgsrc/polkit-kde-kcmodules-framework
+++ /dev/null
@@ -1,2 +0,0 @@
-plasma-extra/polkit-kde-kcmodules-1
-
diff --git a/kde/post-install/kscreenlocker.post-install b/kde/post-install/kscreenlocker.post-install
index 6d9b558..203cff0 100644
--- a/kde/post-install/kscreenlocker.post-install
+++ b/kde/post-install/kscreenlocker.post-install
@@ -1,3 +1,4 @@
-# For shadow, this file needs to be setuid root just like the KDE4 version:
-chmod +s $PKG/usr/lib$LIBDIRSUFFIX/kcheckpass
-
+if [ "$SLACKPAM" == "no" ]; then
+ # For shadow, this file needs to be setuid root:
+ chmod +s $PKG/usr/lib$LIBDIRSUFFIX/kcheckpass
+fi
diff --git a/kde/post-install/plasma-workspace.post-install b/kde/post-install/plasma-workspace.post-install
index 19e5c71..437a897 100644
--- a/kde/post-install/plasma-workspace.post-install
+++ b/kde/post-install/plasma-workspace.post-install
@@ -1,21 +1,19 @@
-# Use ck-launch-session in runlevel 3,
+# Use ck-launch-session in runlevel 3 if that is available,
# to start and attach a ConsoleKit session to the X session:
mkdir -p $PKG/etc/X11/xinit
cat $CWD/post-install/plasma-workspace/xinit/xinitrc.plasma \
| sed -e "s/@LIBDIRSUFFIX@/$LIBDIRSUFFIX/g" \
> $PKG/etc/X11/xinit/xinitrc.plasma
chmod 0755 $PKG/etc/X11/xinit/xinitrc.plasma
+
+# Add a script that launches a Plasma Wayland session from the commandline:
mkdir -p $PKG/usr/bin
cat $CWD/post-install/plasma-workspace/scripts/startkwayland \
| sed -e "s/@LIBDIRSUFFIX@/$LIBDIRSUFFIX/g" \
> $PKG/usr/bin/startkwayland
chmod 0755 $PKG/usr/bin/startkwayland
-# ck-launch-session is needed for a Wayland session, since we do not have PAM:
-sed -e 's/^Exec=dbus-launch/Exec=ck-launch-session dbus-launch --sh-syntax/' \
- -i $PKG/usr/share/wayland-sessions/plasmawayland.desktop
-
# Add a "fail-safe" version of KDE Plasma desktop session.
# Prefix the name with "z_" because SDDM is braindead:
mkdir -p $PKG/usr/share/xsessions
@@ -29,10 +27,25 @@ rmdir $PKG/usr/lib$LIBDIRSUFFIX/qt5/plugins/plugins
# Move the polkit dbus configuration files to the proper place:
mkdir -p $PKG/etc
-mv $PKG//etc/kde/dbus-1 $PKG/etc/
+mv $PKG/etc/kde/dbus-1 $PKG/etc/
-# For shadow, this file needs to be setuid root just like the KDE4 version:
-if [ -f $PKG/usr/lib$LIBDIRSUFFIX/kcheckpass ]; then
- chmod +s $PKG/usr/lib$LIBDIRSUFFIX/kcheckpass
+if [ "$SLACKPAM" == "no" ]; then
+ # For shadow, this file needs to be setuid root just like the KDE4 version:
+ if [ -f $PKG/usr/lib$LIBDIRSUFFIX/kcheckpass ]; then
+ chmod +s $PKG/usr/lib$LIBDIRSUFFIX/kcheckpass
+ fi
+
+ # ck-launch-session is needed for a Wayland session, since we do not have PAM:
+ sed -e 's/^Exec=dbus-launch/Exec=ck-launch-session dbus-launch --sh-syntax/' \
+ -i $PKG/usr/share/wayland-sessions/plasmawayland.desktop
+else
+ # Install a PAM file for Plasma5 workspace:
+ install -Dm644 $CWD/post-install/plasma-workspace/pam.d/kde $PKG/etc/pam.d/kde
fi
+if [ "$SLKELOGIND" == "yes" ]; then
+ # Since elogind does not set DBUS_SESSION_BUS_ADDRESS we need to start
+ # Plasma X11 session through dbus-run-session like Wayland is launched:
+ sed -i $PKG/usr/share/xsessions/plasma.desktop \
+ -e "s,^Exec=/,Exec=dbus-run-session /,"
+fi
diff --git a/kde/post-install/plasma-workspace/pam.d/kde b/kde/post-install/plasma-workspace/pam.d/kde
new file mode 100644
index 0000000..50e0f53
--- /dev/null
+++ b/kde/post-install/plasma-workspace/pam.d/kde
@@ -0,0 +1,10 @@
+#%PAM-1.0
+auth include system-auth
+auth include postlogin
+account include system-auth
+password include system-auth
+session include system-auth
+session required pam_loginuid.so
+-session optional pam_ck_connector.so nox11
+-session optional pam_elogind.so
+session include postlogin
diff --git a/kde/post-install/plasma-workspace/scripts/startkwayland b/kde/post-install/plasma-workspace/scripts/startkwayland
index 506e276..2d8cf55 100644
--- a/kde/post-install/plasma-workspace/scripts/startkwayland
+++ b/kde/post-install/plasma-workspace/scripts/startkwayland
@@ -1,4 +1,4 @@
#!/bin/sh
# Start KWin as a Plasma 5 Wayland session
-ck-launch-session dbus-launch --sh-syntax --exit-with-session /usr/bin/startplasmacompositor
+dbus-launch --sh-syntax --exit-with-session /usr/bin/startplasma-wayland
diff --git a/kde/post-install/plasma-workspace/xsession/plasma-safe.desktop b/kde/post-install/plasma-workspace/xsession/plasma-safe.desktop
index f82cda4..e166414 100644
--- a/kde/post-install/plasma-workspace/xsession/plasma-safe.desktop
+++ b/kde/post-install/plasma-workspace/xsession/plasma-safe.desktop
@@ -1,7 +1,7 @@
[Desktop Entry]
Encoding=UTF-8
Type=XSession
-Exec=/usr/bin/startplasma-x11 --failsafe
+Exec=dbus-run-session /usr/bin/startplasma-x11 --failsafe
TryExec=/usr/bin/startplasma-x11
DesktopNames=KDE
Name=Plasma (Failsafe)
diff --git a/kde/post-install/powerdevil.post-install b/kde/post-install/powerdevil.post-install
index 9eb14f2..4d6b9f8 100644
--- a/kde/post-install/powerdevil.post-install
+++ b/kde/post-install/powerdevil.post-install
@@ -3,21 +3,28 @@ mkdir -p $PKG/etc
mv $PKG/etc/kde/dbus-1 $PKG/etc/
mkdir -p $PKG/etc/polkit-1/rules.d
-mkdir -p $PKG/etc/polkit-1/localauthority/50-local.d
-chmod 700 $PKG/etc/polkit-1/localauthority
-# Add polkit policy file that brings back suspend/hibernate options:
+# Add upower policy allowing users in the 'power' group
+# to suspend/hibernate the computer:
install -m 0644 -o root \
- $CWD/post-install/powerdevil/10-enable-suspend.rules \
- $PKG/etc/polkit-1/rules.d/10-enable-suspend.rules.new
-install -m 0660 -o root \
- $CWD/post-install/powerdevil/30-org.freedesktop.upower.pkla \
- $PKG/etc/polkit-1/localauthority/50-local.d/30-org.freedesktop.upower.pkla.new
-# Add polkit policy files that bring back shutdown/reboot:
-install -m 0660 -o root \
- $CWD/post-install/powerdevil/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla \
- $PKG/etc/polkit-1/localauthority/50-local.d/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla.new
-install -m 0660 -o root \
- $CWD/post-install/powerdevil/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla \
- $PKG/etc/polkit-1/localauthority/50-local.d/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla.new
+ $CWD/post-install/powerdevil/10-enable-upower-suspend.rules \
+ $PKG/etc/polkit-1/rules.d/10-enable-upower-suspend.rules.new
+if [ "$SLKELOGIND" == "no" ]; then
+ # Add ConsoleKit2 policy file that allows users in the 'power' group
+ # to shutdown/reboot the computer:
+ install -m 0644 -o root \
+ $CWD/post-install/powerdevil/10-enable-ck2-power.rules \
+ $PKG/etc/polkit-1/rules.d/10-enable-session-power.rules.new
+else
+ # Add login1 policy file that allows users in the 'power' group
+ # to shutdown/reboot the computer:
+ install -m 0644 -o root \
+ $CWD/post-install/powerdevil/10-enable-elogind-power.rules \
+ $PKG/etc/polkit-1/rules.d/10-enable-session-power.rules.new
+ # Add powerdevil policy file that allows users in the 'power' group
+ # to check for existence of a discrete gpu:
+ install -m 0644 -o root \
+ $CWD/post-install/powerdevil/10-enable-powerdevil-discrete-gpu.rules \
+ $PKG/etc/polkit-1/rules.d/10-enable-powerdevil-discrete-gpu.rules.new
+fi
diff --git a/kde/post-install/powerdevil/10-enable-ck2-power.rules b/kde/post-install/powerdevil/10-enable-ck2-power.rules
new file mode 100644
index 0000000..2a8a5a7
--- /dev/null
+++ b/kde/post-install/powerdevil/10-enable-ck2-power.rules
@@ -0,0 +1,12 @@
+polkit.addRule(
+ function(action, subject) {
+ if ( (action.id == "org.freedesktop.consolekit.system.restart" ||
+ action.id == "org.freedesktop.consolekit.system.restart-multiple-users" ||
+ action.id == "org.freedesktop.consolekit.system.stop" ||
+ action.id == "org.freedesktop.consolekit.system.stop-multiple-users")
+ && subject.isInGroup("power") ) {
+ return polkit.Result.YES;
+ }
+ }
+);
+
diff --git a/kde/post-install/powerdevil/10-enable-elogind-power.rules b/kde/post-install/powerdevil/10-enable-elogind-power.rules
new file mode 100644
index 0000000..db49920
--- /dev/null
+++ b/kde/post-install/powerdevil/10-enable-elogind-power.rules
@@ -0,0 +1,12 @@
+polkit.addRule(
+ function(action, subject) {
+ if ( (action.id == "org.freedesktop.login1.reboot" ||
+ action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
+ action.id == "org.freedesktop.login1.power-off" ||
+ action.id == "org.freedesktop.login1.power-off-multiple-sessions")
+ && subject.isInGroup("power") ) {
+ return polkit.Result.YES;
+ }
+ }
+);
+
diff --git a/kde/post-install/powerdevil/10-enable-powerdevil-discrete-gpu.rules b/kde/post-install/powerdevil/10-enable-powerdevil-discrete-gpu.rules
new file mode 100644
index 0000000..f001848
--- /dev/null
+++ b/kde/post-install/powerdevil/10-enable-powerdevil-discrete-gpu.rules
@@ -0,0 +1,9 @@
+polkit.addRule(
+ function(action, subject) {
+ if ( action.id == "org.kde.powerdevil.discretegpuhelper.hasdualgpu" &&
+ subject.isInGroup("power") ) {
+ return polkit.Result.YES;
+ }
+ }
+);
+
diff --git a/kde/post-install/powerdevil/10-enable-suspend.rules b/kde/post-install/powerdevil/10-enable-suspend.rules
deleted file mode 100644
index 5ef58ac..0000000
--- a/kde/post-install/powerdevil/10-enable-suspend.rules
+++ /dev/null
@@ -1,10 +0,0 @@
-polkit.addRule(
- function(action, subject) {
- if ((action.id == "org.freedesktop.upower.suspend" ||
- action.id == "org.freedesktop.upower.hibernate") &&
- subject.isInGroup("power"))
- {
- return polkit.Result.YES;
- }
- }
-);
diff --git a/kde/post-install/powerdevil/10-enable-upower-suspend.rules b/kde/post-install/powerdevil/10-enable-upower-suspend.rules
new file mode 100644
index 0000000..4bccfb0
--- /dev/null
+++ b/kde/post-install/powerdevil/10-enable-upower-suspend.rules
@@ -0,0 +1,9 @@
+polkit.addRule(
+ function(action, subject) {
+ if ( (action.id == "org.freedesktop.upower.suspend" ||
+ action.id == "org.freedesktop.upower.hibernate")
+ && subject.isInGroup("power") ) {
+ return polkit.Result.YES;
+ }
+ }
+);
diff --git a/kde/post-install/powerdevil/30-org.freedesktop.upower.pkla b/kde/post-install/powerdevil/30-org.freedesktop.upower.pkla
deleted file mode 100644
index b3b5dd2..0000000
--- a/kde/post-install/powerdevil/30-org.freedesktop.upower.pkla
+++ /dev/null
@@ -1,9 +0,0 @@
-# /etc/polkit-1/localauthority/50-local.d/30-org.freedesktop.upower.pkla
-# Allow all power users to suspend/hibernate the computer:
-[Power Users]
-Identity=unix-group:power
-Action=org.freedesktop.upower.suspend;org.freedesktop.upower.hibernate
-ResultAny=yes
-ResultInactive=no
-ResultActive=yes
-
diff --git a/kde/post-install/powerdevil/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla b/kde/post-install/powerdevil/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla
deleted file mode 100644
index 1fae73a..0000000
--- a/kde/post-install/powerdevil/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla
+++ /dev/null
@@ -1,8 +0,0 @@
-# /etc/polkit-1/localauthority/50-local.d/40-org.freedesktop.consolekit.system.stop-multiple-users.pkla
-[Allow power users to shutdown]
-Identity=unix-group:power
-Action=org.freedesktop.consolekit.system.stop-multiple-users;org.freedesktop.consolekit.system.stop
-ResultAny=yes
-ResultInactive=no
-ResultActive=yes
-
diff --git a/kde/post-install/powerdevil/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla b/kde/post-install/powerdevil/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla
deleted file mode 100644
index db17c63..0000000
--- a/kde/post-install/powerdevil/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla
+++ /dev/null
@@ -1,7 +0,0 @@
-# /etc/polkit-1/localauthority/50-local.d/41-org.freedesktop.consolekit.system.restart-multiple-users.pkla
-[Allow power users to restart]
-Identity=unix-group:power
-Action=org.freedesktop.consolekit.system.restart-multiple-users;org.freedesktop.consolekit.system.restart
-ResultAny=yes
-ResultInactive=no
-ResultActive=yes
diff --git a/kde/post-install/sddm-qt5.post-install b/kde/post-install/sddm-qt5.post-install
index 1a39fd0..3d168b1 100644
--- a/kde/post-install/sddm-qt5.post-install
+++ b/kde/post-install/sddm-qt5.post-install
@@ -1,9 +1,36 @@
-# Remove PAM related stuff:
-rm -rf $PKG/etc/pam.d
+if [ "$SLACKPAM" == "no" ]; then
+ # Remove PAM related stuff:
+ rm -rf $PKG/etc/pam.d
+else
+ # Replace systemd-centric files with ours:
+ rm -f $PKG/etc/pam.d/sddm*
+ for FILE in sddm sddm-autologin sddm-greeter ; do
+ install -Dm644 $CWD/post-install/sddm-qt5/pam.d/$FILE $PKG/etc/pam.d/$FILE
+ done
+fi
# Remove the sddm.conf file because we will generate our own in doinst.sh:
rm -f $PKG/etc/sddm.conf
+# Make sure that Plasma and SDDM work on older GPUs,
+# by forcing Qt5 to use software GL rendering:
+cat <<"EOGL" >> $PKG/usr/share/sddm/scripts/Xsetup
+
+# Make sure that Plasma and SDDM work on older GPUs,
+# by forcing Qt5 to use software GL rendering:
+OPENGL_VERSION=$(LANG=C glxinfo |grep '^OpenGL version string: ' |head -n 1 |sed -e 's/^OpenGL version string: \([0-9]\).*$/\1/g')
+if [ "$OPENGL_VERSION" -lt 2 ]; then
+ QT_XCB_FORCE_SOFTWARE_OPENGL=1
+ export QT_XCB_FORCE_SOFTWARE_OPENGL
+fi
+EOGL
+
+# Ensure that user customizations to the session files are not lost:
+mv $PKG/usr/share/sddm/scripts/Xsession{,.new}
+mv $PKG/usr/share/sddm/scripts/Xsetup{,.new}
+mv $PKG/usr/share/sddm/scripts/Xstop{,.new}
+mv $PKG/usr/share/sddm/scripts/wayland-session{,.new}
+
# Add a wrapper for the sddm binary, to enable a custom environment:
mv $PKG/usr/bin/sddm $PKG/usr/bin/sddm.bin
cat <<"EOT" > $PKG/usr/bin/sddm
diff --git a/kde/post-install/sddm-qt5/pam.d/sddm b/kde/post-install/sddm-qt5/pam.d/sddm
new file mode 100644
index 0000000..df016a7
--- /dev/null
+++ b/kde/post-install/sddm-qt5/pam.d/sddm
@@ -0,0 +1,26 @@
+#%PAM-1.0
+
+auth substack system-auth
+
+# Uncomment this line to restrict login to users with a UID greater
+# than 999 (in other words, don't allow login for root):
+#auth required pam_succeed_if.so uid >= 1000 quiet
+
+-auth optional pam_gnome_keyring.so
+-auth optional pam_kwallet5.so
+auth include postlogin
+
+account include system-auth
+
+password substack system-auth
+-password optional pam_gnome_keyring.so use_authtok
+-password optional pam_kwallet5.so use_authtok
+
+session optional pam_keyinit.so force revoke
+session substack system-auth
+session required pam_loginuid.so
+-session optional pam_ck_connector.so nox11
+-session optional pam_elogind.so
+-session optional pam_gnome_keyring.so auto_start
+-session optional pam_kwallet5.so auto_start
+session include postlogin
diff --git a/kde/post-install/sddm-qt5/pam.d/sddm-autologin b/kde/post-install/sddm-qt5/pam.d/sddm-autologin
new file mode 100644
index 0000000..3602395
--- /dev/null
+++ b/kde/post-install/sddm-qt5/pam.d/sddm-autologin
@@ -0,0 +1,25 @@
+#%PAM-1.0
+auth requisite pam_nologin.so
+auth required pam_env.so
+auth required pam_shells.so
+
+# Uncomment this line to restrict autologin to users with a UID greater
+# than 999 (in other words, don't allow autologin for root):
+#auth required pam_succeed_if.so uid >= 1000 quiet
+
+auth required pam_permit.so
+-auth optional pam_gnome_keyring.so
+-auth optional pam_kwallet5.so
+
+account include system-auth
+
+password include system-auth
+
+session substack system-auth
+session required pam_loginuid.so
+-session optional pam_ck_connector.so nox11
+-session optional pam_elogind.so
+-session optional pam_gnome_keyring.so auto_start
+-session optional pam_kwallet5.so auto_start
+session include postlogin
+
diff --git a/kde/post-install/sddm-qt5/pam.d/sddm-greeter b/kde/post-install/sddm-qt5/pam.d/sddm-greeter
new file mode 100644
index 0000000..fe30e60
--- /dev/null
+++ b/kde/post-install/sddm-qt5/pam.d/sddm-greeter
@@ -0,0 +1,19 @@
+#%PAM-1.0
+
+# Load environment from /etc/environment and ~/.pam_environment
+auth required pam_env.so
+
+# Always let the greeter start without authentication
+auth required pam_permit.so
+
+# No action required for account management
+account required pam_permit.so
+
+# Can't change password
+password required pam_deny.so
+
+# Setup session
+session required pam_unix.so
+-session optional pam_systemd.so
+-session optional pam_ck_connector.so nox11
+-session optional pam_elogind.so
diff --git a/kde/pre-install/alkimia.pre-install b/kde/pre-install/alkimia.pre-install
new file mode 100644
index 0000000..a9a19c7
--- /dev/null
+++ b/kde/pre-install/alkimia.pre-install
@@ -0,0 +1,2 @@
+# https://bugs.kde.org/show_bug.cgi?id=415868
+sed -e '/set(QML_INSTALL_DIR/d' -i qml/CMakeLists.txt
diff --git a/kde/slack-desc/akonadi b/kde/slack-desc/akonadi
index 14a0d1b..f0c8da9 100644
--- a/kde/slack-desc/akonadi
+++ b/kde/slack-desc/akonadi
@@ -13,7 +13,7 @@ akonadi: and meta data providing concurrent read, write, and query access.
akonadi: It will provide a unique desktop wide object identification and
akonadi: retrieval.
akonadi:
+akonadi: Homepage: http://www.kdepim.org/akonadi/
akonadi:
akonadi:
-akonadi: Homepage: http://www.kdepim.org/akonadi/
akonadi:
diff --git a/kde/slack-desc/akonadi-calendar b/kde/slack-desc/akonadi-calendar
index 712ec19..5a8b58f 100644
--- a/kde/slack-desc/akonadi-calendar
+++ b/kde/slack-desc/akonadi-calendar
@@ -15,5 +15,5 @@ akonadi-calendar:
akonadi-calendar:
akonadi-calendar:
akonadi-calendar:
-akonadi-calendar: Home page: http://www.kde.org/
+akonadi-calendar:
akonadi-calendar:
diff --git a/kde/slack-desc/akonadi-calendar-tools b/kde/slack-desc/akonadi-calendar-tools
index e018173..dead865 100644
--- a/kde/slack-desc/akonadi-calendar-tools
+++ b/kde/slack-desc/akonadi-calendar-tools
@@ -15,5 +15,5 @@ akonadi-calendar-tools:
akonadi-calendar-tools:
akonadi-calendar-tools:
akonadi-calendar-tools:
-akonadi-calendar-tools: Home page: http://www.kde.org/
+akonadi-calendar-tools:
akonadi-calendar-tools:
diff --git a/kde/slack-desc/akonadi-contacts b/kde/slack-desc/akonadi-contacts
index 872802c..068b9f9 100644
--- a/kde/slack-desc/akonadi-contacts
+++ b/kde/slack-desc/akonadi-contacts
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
akonadi-contacts: akonadi-contacts (implement contact management in akonadi)
akonadi-contacts:
-akonadi-contacts: akonadi-contacts contains libraries and daemons to implement
-akonadi-contacts: Contact Management in Akonadi.
+akonadi-contacts: akonadi-contacts contains libraries and daemons to implement Contact
+akonadi-contacts: Management in Akonadi.
+akonadi-contacts:
akonadi-contacts:
akonadi-contacts:
akonadi-contacts:
akonadi-contacts:
akonadi-contacts:
-akonadi-contacts: Home page: http://www.kde.org/
akonadi-contacts:
diff --git a/kde/slack-desc/akonadi-import-wizard b/kde/slack-desc/akonadi-import-wizard
index 4f0e90a..83d47e8 100644
--- a/kde/slack-desc/akonadi-import-wizard
+++ b/kde/slack-desc/akonadi-import-wizard
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-akonadi-import-wizard: akonadi-import-wizard (import data from other mail clients to KMail)
+akonadi-import-wizard: akonadi-import-wizard (import data to KMail)
akonadi-import-wizard:
akonadi-import-wizard: Import data from other mail clients to KMail.
akonadi-import-wizard:
@@ -15,5 +15,5 @@ akonadi-import-wizard:
akonadi-import-wizard:
akonadi-import-wizard:
akonadi-import-wizard:
-akonadi-import-wizard: Home page: http://www.kde.org/
+akonadi-import-wizard:
akonadi-import-wizard:
diff --git a/kde/slack-desc/akonadi-mime b/kde/slack-desc/akonadi-mime
index 80aa41d..295f57a 100644
--- a/kde/slack-desc/akonadi-mime
+++ b/kde/slack-desc/akonadi-mime
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
akonadi-mime: akonadi-mime (implement mimeing in akonadi)
akonadi-mime:
-akonadi-mime: akonadi-mime contains libraries and daemons to implement
-akonadi-mime: basic email handling in Akonadi.
+akonadi-mime: akonadi-mime contains libraries and daemons to implement basic email
+akonadi-mime: handling in Akonadi.
+akonadi-mime:
akonadi-mime:
akonadi-mime:
akonadi-mime:
akonadi-mime:
akonadi-mime:
-akonadi-mime: Home page: http://www.kde.org/
akonadi-mime:
diff --git a/kde/slack-desc/akonadi-notes b/kde/slack-desc/akonadi-notes
index 2893b64..d9be735 100644
--- a/kde/slack-desc/akonadi-notes
+++ b/kde/slack-desc/akonadi-notes
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
akonadi-notes: akonadi-notes (implement management of notes in akonadi)
akonadi-notes:
-akonadi-notes: akonadi-notes contains libraries and daemons to implement
-akonadi-notes: management of notes in Akonadi.
+akonadi-notes: akonadi-notes contains libraries and daemons to implement management
+akonadi-notes: of notes in Akonadi.
+akonadi-notes:
akonadi-notes:
akonadi-notes:
akonadi-notes:
akonadi-notes:
akonadi-notes:
-akonadi-notes: Home page: http://www.kde.org/
akonadi-notes:
diff --git a/kde/slack-desc/akonadi-search b/kde/slack-desc/akonadi-search
index 9d345b4..86a1e69 100644
--- a/kde/slack-desc/akonadi-search
+++ b/kde/slack-desc/akonadi-search
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
akonadi-search: akonadi-search (implement searching in akonadi)
akonadi-search:
-akonadi-search: akonadi-search contains libraries and daemons to implement
-akonadi-search: searching in Akonadi.
+akonadi-search: akonadi-search contains libraries and daemons to implement searching
+akonadi-search: in Akonadi.
+akonadi-search:
akonadi-search:
akonadi-search:
akonadi-search:
akonadi-search:
akonadi-search:
-akonadi-search: Home page: http://www.kde.org/
akonadi-search:
diff --git a/kde/slack-desc/akonadiconsole b/kde/slack-desc/akonadiconsole
index 9ac1808..cb08cb3 100644
--- a/kde/slack-desc/akonadiconsole
+++ b/kde/slack-desc/akonadiconsole
@@ -15,5 +15,5 @@ akonadiconsole:
akonadiconsole:
akonadiconsole:
akonadiconsole:
-akonadiconsole: Home page: http://www.kde.org/
+akonadiconsole:
akonadiconsole:
diff --git a/kde/slack-desc/akregator b/kde/slack-desc/akregator
index b3b466a..b4e46c4 100644
--- a/kde/slack-desc/akregator
+++ b/kde/slack-desc/akregator
@@ -15,5 +15,5 @@ akregator:
akregator:
akregator:
akregator:
-akregator: Home page: http://www.kde.org/
+akregator:
akregator:
diff --git a/kde/slack-desc/alkimia b/kde/slack-desc/alkimia
index 9230682..803af97 100644
--- a/kde/slack-desc/alkimia
+++ b/kde/slack-desc/alkimia
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-alkimia: alkimia (Library used by KDE Finance applications)
+alkimia: alkimia (KDE Finance library)
alkimia:
alkimia: Alkimia is a library used by KDE Finance applications, like Kmymoney.
alkimia:
@@ -15,5 +15,5 @@ alkimia:
alkimia:
alkimia:
alkimia:
-alkimia: Home page: http://www.kde.org/
+alkimia:
alkimia:
diff --git a/kde/slack-desc/analitza b/kde/slack-desc/analitza
index 84123be..793ac3a 100644
--- a/kde/slack-desc/analitza
+++ b/kde/slack-desc/analitza
@@ -6,7 +6,7 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-analitza: analitza (library to add mathematical features to programs)
+analitza: analitza (KDE mathematical library)
analitza:
analitza: The analitza library will let you add mathematical features
analitza: to your program.
diff --git a/kde/slack-desc/ark b/kde/slack-desc/ark
index 93dd1c8..89db562 100644
--- a/kde/slack-desc/ark
+++ b/kde/slack-desc/ark
@@ -10,7 +10,7 @@ ark: ark (KDE archiver tool)
ark:
ark: This is KDE's application to work with compressed archives.
ark:
-ark: Ark's home page is: http://kde.org
+ark:
ark:
ark:
ark:
diff --git a/kde/slack-desc/artikulate b/kde/slack-desc/artikulate
index be00419..36479ff 100644
--- a/kde/slack-desc/artikulate
+++ b/kde/slack-desc/artikulate
@@ -9,11 +9,11 @@
artikulate: artikulate (pronunciation trainer)
artikulate:
artikulate: Artikulate is a pronunciation trainer, which helps in improving and
-artikulate: perfecting pronunciation skills. Learners train their pronunciation
+artikulate: perfecting pronunciation skills. Learners train their pronunciation
artikulate: by recording their own voices and comparing them to native speaker
-artikulate: recordings.
-artikulate: Artikulate is part of the KDE Education Project.
+artikulate: recordings. Artikulate is part of the KDE Education Project.
+artikulate:
+artikulate:
artikulate:
artikulate:
-artikulate: For more information, visit: http://www.kde.org
artikulate:
diff --git a/kde/slack-desc/attica-framework b/kde/slack-desc/attica-framework
index ad9b478..36d9080 100644
--- a/kde/slack-desc/attica-framework
+++ b/kde/slack-desc/attica-framework
@@ -16,4 +16,4 @@ attica-framework:
attica-framework:
attica-framework:
attica-framework:
-attica-framework: Homepage: http://kde.org/
+attica-framework:
diff --git a/kde/slack-desc/audiocd-kio b/kde/slack-desc/audiocd-kio
index a82bd28..56e1944 100644
--- a/kde/slack-desc/audiocd-kio
+++ b/kde/slack-desc/audiocd-kio
@@ -15,5 +15,5 @@ audiocd-kio:
audiocd-kio:
audiocd-kio:
audiocd-kio:
-audiocd-kio: For more information, visit: http://www.kde.org
+audiocd-kio:
audiocd-kio:
diff --git a/kde/slack-desc/baloo5 b/kde/slack-desc/baloo5
index d275b83..d4ffebd 100644
--- a/kde/slack-desc/baloo5
+++ b/kde/slack-desc/baloo5
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
baloo5: baloo5 (framework for searching and managing metadata)
baloo5:
-baloo5: Baloo is a framework for searching and managing metadata.
-baloo5: Baloo focuses on providing a very small memory footprint along
-baloo5: with with extremely fast searching.
-baloo5: It also supports storing additional file based metadata via
-baloo5: extended attributes.
+baloo5: Baloo is a framework for searching and managing metadata. Baloo
+baloo5: focuses on providing a very small memory footprint along with
+baloo5: extremely fast searching. It also supports storing additional file
+baloo5: based metadata via extended attributes.
+baloo5:
+baloo5:
baloo5:
baloo5:
-baloo5: For more information, visit: http://www.kde.org
baloo5:
diff --git a/kde/slack-desc/baloo5-widgets b/kde/slack-desc/baloo5-widgets
index e4d4a86..010def6 100644
--- a/kde/slack-desc/baloo5-widgets
+++ b/kde/slack-desc/baloo5-widgets
@@ -9,11 +9,11 @@
baloo5-widgets: baloo5-widgets (widgets for baloo)
baloo5-widgets:
baloo5-widgets: Baloo is a framework for searching and managing metadata.
-baloo5-widgets: Balooo-widgets contains widgets for use with Baloo.
+baloo5-widgets: Baloo5-widgets contains widgets for use with Baloo.
+baloo5-widgets:
baloo5-widgets:
baloo5-widgets:
baloo5-widgets:
baloo5-widgets:
baloo5-widgets:
-baloo5-widgets: For more information, visit: http://www.kde.org
baloo5-widgets:
diff --git a/kde/slack-desc/blinken b/kde/slack-desc/blinken
index 72773dd..edcb442 100644
--- a/kde/slack-desc/blinken
+++ b/kde/slack-desc/blinken
@@ -10,7 +10,7 @@ blinken: blinken (a memory enhancement game)
blinken:
blinken: Blinken is a memory enhancement game for KDE.
blinken:
-blinken: For more information, visit: http://edu.kde.org/
+blinken:
blinken:
blinken:
blinken:
diff --git a/kde/slack-desc/bluez-qt b/kde/slack-desc/bluez-qt
index 2848c69..bae4410 100644
--- a/kde/slack-desc/bluez-qt
+++ b/kde/slack-desc/bluez-qt
@@ -9,11 +9,11 @@
bluez-qt: bluez-qt (Qt wrapper for BlueZ 5 DBus API)
bluez-qt:
bluez-qt: BluezQt is a library for communication with BlueZ system and session
-bluez-qt: daemons.
-bluez-qt: * Manager class is used to communicate with system daemon
-bluez-qt: - org.bluez
-bluez-qt: * ObexManager class is used to communicate with session daemon
-bluez-qt: - org.bluez.obex
+bluez-qt: daemons. Manager class is used to communicate with system daemon
+bluez-qt: org.bluez. ObexManager class is used to communicate with session
+bluez-qt: daemon org.bluez.obex.
bluez-qt:
bluez-qt: Homepage: https://projects.kde.org/projects/frameworks/bluez-qt
bluez-qt:
+bluez-qt:
+bluez-qt:
diff --git a/kde/slack-desc/bomber b/kde/slack-desc/bomber
index cae9a73..2777aea 100644
--- a/kde/slack-desc/bomber
+++ b/kde/slack-desc/bomber
@@ -9,11 +9,11 @@
bomber: bomber (arcade bombing game for KDE)
bomber:
bomber: Bomber is a single player arcade game. The player is invading various
-bomber: cities in a plane that is decreasing in height. The goal of the game
-bomber: is to destroy all the buildings and advance to the next level.
-bomber: Each level gets a bit harder by increasing the speed of the plane
-bomber: and the height of the buildings.
+bomber: cities in a plane that is decreasing in height. The goal of the game
+bomber: is to destroy all the buildings and advance to the next level. Each
+bomber: level gets a bit harder by increasing the speed of the plane and the
+bomber: height of the buildings.
+bomber:
bomber:
bomber:
-bomber: For more information, visit: http://www.kde.org
bomber:
diff --git a/kde/slack-desc/bovo b/kde/slack-desc/bovo
index 8ccebb3..508eda9 100644
--- a/kde/slack-desc/bovo
+++ b/kde/slack-desc/bovo
@@ -10,10 +10,10 @@ bovo: bovo (five-in-a-row board game)
bovo:
bovo: Bovo is a Gomoku ("five points" in Japanese) like game for two
bovo: players, where the opponents alternate in placing their respective
-bovo: pictogram on the game board. Also known as: Connect Five,
-bovo: Five in a row, X and O, Naughts and Crosses.
+bovo: pictogram on the game board. Also known as: Connect Five, Five in a
+bovo: row, X and O, Naughts and Crosses.
+bovo:
bovo:
bovo:
bovo:
-bovo: For more information, visit: http://www.kde.org
bovo:
diff --git a/kde/slack-desc/breeze b/kde/slack-desc/breeze
index 6c30973..91c3779 100644
--- a/kde/slack-desc/breeze
+++ b/kde/slack-desc/breeze
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
breeze: breeze (artwork for Plasma)
breeze:
-breeze: Artwork, styles and assets for the Breeze visual style for
-breeze: the Plasma Desktop.
+breeze: Artwork, styles and assets for the Breeze visual style for the Plasma
+breeze: Desktop.
+breeze:
breeze:
breeze:
breeze:
breeze:
breeze:
breeze:
-breeze: Homepage: http://kde.org/
diff --git a/kde/slack-desc/breeze-grub b/kde/slack-desc/breeze-grub
index 34daf09..b4c5095 100644
--- a/kde/slack-desc/breeze-grub
+++ b/kde/slack-desc/breeze-grub
@@ -15,5 +15,5 @@ breeze-grub:
breeze-grub:
breeze-grub:
breeze-grub:
-breeze-grub: For more information, visit: http://www.kde.org
+breeze-grub:
breeze-grub:
diff --git a/kde/slack-desc/breeze-gtk b/kde/slack-desc/breeze-gtk
index f81c0ca..c4c2ed5 100644
--- a/kde/slack-desc/breeze-gtk
+++ b/kde/slack-desc/breeze-gtk
@@ -5,7 +5,7 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
- |-----handy-ruler------------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
breeze-gtk: breeze-gtk (Breeze widget theme for GTK 2 and 3)
breeze-gtk:
breeze-gtk: Breeze widget theme for GTK 2 and 3.
@@ -16,4 +16,4 @@ breeze-gtk:
breeze-gtk:
breeze-gtk:
breeze-gtk:
-breeze-gtk: Homepage: http://kde.org/
+breeze-gtk:
diff --git a/kde/slack-desc/breeze-icons b/kde/slack-desc/breeze-icons
index 3c8788d..a23df6f 100644
--- a/kde/slack-desc/breeze-icons
+++ b/kde/slack-desc/breeze-icons
@@ -10,10 +10,10 @@ breeze-icons: breeze-icons (Breeze icon themes for KDE Plasma)
breeze-icons:
breeze-icons: Breeze icon themes for KDE Plasma.
breeze-icons:
+breeze-icons: For more information, visit:
+breeze-icons: https://projects.kde.org/projects/kde/workspace/breeze
breeze-icons:
breeze-icons:
breeze-icons:
breeze-icons:
-breeze-icons: For more information, visit:
-breeze-icons: https://projects.kde.org/projects/kde/workspace/breeze
breeze-icons:
diff --git a/kde/slack-desc/calendarsupport b/kde/slack-desc/calendarsupport
index e868865..4bd87a4 100644
--- a/kde/slack-desc/calendarsupport
+++ b/kde/slack-desc/calendarsupport
@@ -15,5 +15,5 @@ calendarsupport:
calendarsupport:
calendarsupport:
calendarsupport:
-calendarsupport: Home page: http://www.kde.org/
+calendarsupport:
calendarsupport:
diff --git a/kde/slack-desc/calligra b/kde/slack-desc/calligra
index a1f5261..fbce9db 100644
--- a/kde/slack-desc/calligra
+++ b/kde/slack-desc/calligra
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
calligra: calligra (KDE office productivity suite)
calligra:
-calligra: Calligra office productivity applications. Included are a word
+calligra: Calligra office productivity applications. Included are a word
calligra: processor, spreadsheet, presentation program, chart and graph creator,
calligra: vector graphics tool, database report creator, flowcharting program,
-calligra: integrated data management program, a pixel graphics editor,
-calligra: a mathematical formula editor, and Calligra Workspace
-calligra: (a combination of all of the above).
+calligra: integrated data management program, a pixel graphics editor, a
+calligra: mathematical formula editor, and Calligra Workspace (a combination of
+calligra: all of the above).
calligra:
-calligra: For more information, see: http://calligra-suite.org/
+calligra: Homepage: http://calligra-suite.org/
calligra:
diff --git a/kde/slack-desc/calligraplan b/kde/slack-desc/calligraplan
index f092af2..cb3e4d6 100644
--- a/kde/slack-desc/calligraplan
+++ b/kde/slack-desc/calligraplan
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
calligraplan: calligraplan (project planner)
calligraplan:
-calligraplan: Calligra Plan is a project management application.
-calligraplan: It is intended for managing moderately large projects
-calligraplan: with multiple resources.
+calligraplan: Calligra Plan is a project management application. It is intended for
+calligraplan: managing moderately large projects with multiple resources.
+calligraplan:
+calligraplan: Homepage: http://www.calligra-suite.org/
calligraplan:
calligraplan:
calligraplan:
calligraplan:
-calligraplan: Home page: http://www.calligra-suite.org/
calligraplan:
diff --git a/kde/slack-desc/cantor b/kde/slack-desc/cantor
index 34cf867..7e9e65e 100644
--- a/kde/slack-desc/cantor
+++ b/kde/slack-desc/cantor
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
cantor: cantor (front-end to mathematics software)
cantor:
-cantor: Cantor is a frontend to several existing mathematical software
-cantor: such as R, Sage and Maxima: Cantor.
-cantor: Cantor offers a worksheet as a nice GUI for all those backends
-cantor: and is not targeted to kids but to scientists.
+cantor: Cantor is a frontend to several existing mathematical software such as
+cantor: R, Sage and Maxima. Cantor offers a worksheet as a nice GUI for all
+cantor: those backends and is not targeted to kids but to scientists.
+cantor:
+cantor:
cantor:
-cantor: For more information, visit: http://edu.kde.org/
cantor:
cantor:
cantor:
diff --git a/kde/slack-desc/cervisia b/kde/slack-desc/cervisia
index 2f6de97..141da3d 100644
--- a/kde/slack-desc/cervisia
+++ b/kde/slack-desc/cervisia
@@ -15,5 +15,5 @@ cervisia:
cervisia:
cervisia:
cervisia:
-cervisia: For more information, visit: http://www.kde.org
+cervisia:
cervisia:
diff --git a/kde/slack-desc/digikam b/kde/slack-desc/digikam
index 607801e..0f1c812 100644
--- a/kde/slack-desc/digikam
+++ b/kde/slack-desc/digikam
@@ -5,15 +5,15 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
-digikam: digiKam (KDE Photo Management Application)
+ |-----handy-ruler------------------------------------------------------|
+digikam: digikam (KDE Photo Management Application)
digikam:
digikam: digiKam is a simple digital photo management application for KDE,
-digikam: which makes importing and organizing digital photos a "snap". The
-digikam: photos can be organized in albums which can be sorted
-digikam: chronologically, by directory layout, or by custom collections. An
-digikam: easy to use interface enables you to connect to your camera and
-digikam: preview, download, and/or delete your images.
+digikam: which makes importing and organizing digital photos a snap. The photos
+digikam: can be organized in albums which can be sorted chronologically, by
+digikam: directory layout, or by custom collections. An easy to use interface
+digikam: enables you to connect to your camera and preview, download, and/or
+digikam: delete your images.
digikam:
digikam: Homepage: http://www.digikam.org/
digikam:
diff --git a/kde/slack-desc/discover b/kde/slack-desc/discover
index 6d659c5..7f11c78 100644
--- a/kde/slack-desc/discover
+++ b/kde/slack-desc/discover
@@ -10,10 +10,10 @@ discover: discover (KDE package management tools)
discover:
discover: A collection of package management tools for KDE.
discover:
+discover: For more information, visit:
+discover: https://projects.kde.org/projects/kde/workspace/discover
discover:
discover:
discover:
discover:
-discover: For more information, visit:
-discover: https://projects.kde.org/projects/kde/workspace/discover
discover:
diff --git a/kde/slack-desc/dolphin b/kde/slack-desc/dolphin
index 27d3b1e..99a5173 100644
--- a/kde/slack-desc/dolphin
+++ b/kde/slack-desc/dolphin
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
dolphin: dolphin (KDE file manager)
dolphin:
-dolphin: Dolphin is a lightweight file manager.
-dolphin: It has been designed with ease of use and simplicity in mind,
-dolphin: while still allowing flexibility and customisation.
+dolphin: Dolphin is a lightweight file manager. It has been designed with ease
+dolphin: of use and simplicity in mind, while still allowing flexibility and
+dolphin: customization.
dolphin:
+dolphin: Homepage: https://www.kde.org/applications/system/dolphin/
dolphin:
dolphin:
dolphin:
-dolphin: For more information, visit https://www.kde.org/applications/system/dolphin/
dolphin:
diff --git a/kde/slack-desc/dolphin-plugins b/kde/slack-desc/dolphin-plugins
index ef2c5b1..5309de8 100644
--- a/kde/slack-desc/dolphin-plugins
+++ b/kde/slack-desc/dolphin-plugins
@@ -15,5 +15,5 @@ dolphin-plugins:
dolphin-plugins:
dolphin-plugins:
dolphin-plugins:
-dolphin-plugins: For more information, visit: http://www.kde.org
+dolphin-plugins:
dolphin-plugins:
diff --git a/kde/slack-desc/dragon b/kde/slack-desc/dragon
index 115fda1..b9b2002 100644
--- a/kde/slack-desc/dragon
+++ b/kde/slack-desc/dragon
@@ -9,11 +9,11 @@
dragon: dragon (KDE multimedia player)
dragon:
dragon: Dragon Player is a multimedia player where the focus is on simplicity,
-dragon: instead of features. Dragon Player does one thing, and only one
+dragon: instead of features. Dragon Player does one thing, and only one
dragon: thing, which is playing multimedia files.
dragon:
dragon:
dragon:
dragon:
-dragon: For more information, visit: http://www.kde.org
+dragon:
dragon:
diff --git a/kde/slack-desc/drkonqi b/kde/slack-desc/drkonqi
index 7469ce6..abdec03 100644
--- a/kde/slack-desc/drkonqi
+++ b/kde/slack-desc/drkonqi
@@ -15,5 +15,5 @@ drkonqi:
drkonqi:
drkonqi:
drkonqi:
-drkonqi: Home page: http://www.kde.org/
+drkonqi:
drkonqi:
diff --git a/kde/slack-desc/elisa b/kde/slack-desc/elisa
index 0d2e502..b17d990 100644
--- a/kde/slack-desc/elisa
+++ b/kde/slack-desc/elisa
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
elisa: elisa (music player)
elisa:
-elisa: Elisa is a simple music player that should be easy to use.
-elisa: It does not require any configuration before one can use it.
+elisa: Elisa is a simple music player that should be easy to use. It does not
+elisa: require any configuration before one can use it.
elisa:
+elisa: Homepage: https://community.kde.org/Elisa
elisa:
elisa:
elisa:
elisa:
-elisa: Home page: https://community.kde.org/Elisa
elisa:
diff --git a/kde/slack-desc/eventviews b/kde/slack-desc/eventviews
index e21a2d9..d9c2a08 100644
--- a/kde/slack-desc/eventviews
+++ b/kde/slack-desc/eventviews
@@ -15,5 +15,5 @@ eventviews:
eventviews:
eventviews:
eventviews:
-eventviews: Home page: http://www.kde.org/
+eventviews:
eventviews:
diff --git a/kde/slack-desc/extra-cmake-modules b/kde/slack-desc/extra-cmake-modules
index 6fdc90c..265838b 100644
--- a/kde/slack-desc/extra-cmake-modules
+++ b/kde/slack-desc/extra-cmake-modules
@@ -6,10 +6,10 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-extra-cmake-modules: CMake extra modules (extra cmake modules for compiling KDE Frameworks
+extra-cmake-modules: extra-cmake-modules (extra KDE CMake modules)
extra-cmake-modules:
-extra-cmake-modules: This package contains additional cmake modules required for
-extra-cmake-modules: compiling KDE Frameworks 5.
+extra-cmake-modules: This package contains additional CMake modules required for compiling
+extra-cmake-modules: KDE Frameworks 5.
extra-cmake-modules:
extra-cmake-modules:
extra-cmake-modules:
diff --git a/kde/slack-desc/falkon b/kde/slack-desc/falkon
index 14cf33e..ecac825 100644
--- a/kde/slack-desc/falkon
+++ b/kde/slack-desc/falkon
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-falkon: falkon (short description here)
+falkon: falkon (KDE web browser)
falkon:
falkon: Falkon is a QtWebEngine based cross-platform web browser.
falkon:
@@ -15,5 +15,5 @@ falkon:
falkon:
falkon:
falkon:
-falkon: Home page: http://www.kde.org/
+falkon:
falkon:
diff --git a/kde/slack-desc/ffmpegthumbs b/kde/slack-desc/ffmpegthumbs
index 6ff665f..54f96f4 100644
--- a/kde/slack-desc/ffmpegthumbs
+++ b/kde/slack-desc/ffmpegthumbs
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ffmpegthumbs: ffmpegthumbs (video thumbnail generator using ffmpeg)
ffmpegthumbs:
-ffmpegthumbs: FFMpegThumbs is a video thumbnail generator for KDE file managers
-ffmpegthumbs: like Dolphin and Konqueror. It enables them to show preview
-ffmpegthumbs: images of video files using FFMpeg.
+ffmpegthumbs: FFMpegThumbs is a video thumbnail generator for KDE file managers like
+ffmpegthumbs: Dolphin and Konqueror. It enables them to show preview images of
+ffmpegthumbs: video files using FFMpeg.
+ffmpegthumbs:
ffmpegthumbs:
ffmpegthumbs:
ffmpegthumbs:
ffmpegthumbs:
-ffmpegthumbs: For more information, visit: http://www.kde.org
ffmpegthumbs:
diff --git a/kde/slack-desc/filelight b/kde/slack-desc/filelight
index f86e2f0..bef21ee 100644
--- a/kde/slack-desc/filelight
+++ b/kde/slack-desc/filelight
@@ -11,7 +11,7 @@ filelight:
filelight: Filelight allows you to quickly understand exactly where your
filelight: diskspace is being used by graphically representing your file system.
filelight:
-filelight: filelight's home page is: http://utils.kde.org/projects/filelight
+filelight: Homepage: http://utils.kde.org/projects/filelight
filelight:
filelight:
filelight:
diff --git a/kde/slack-desc/frameworkintegration b/kde/slack-desc/frameworkintegration
index da17f75..815225c 100644
--- a/kde/slack-desc/frameworkintegration
+++ b/kde/slack-desc/frameworkintegration
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-frameworkintegration: frameworkintegration (applications integration with KDE Workspaces)
+frameworkintegration: frameworkintegration (applications integration with KDE)
frameworkintegration:
frameworkintegration: Framework providing components to allow applications to integrate
frameworkintegration: with a KDE Workspace.
frameworkintegration:
+frameworkintegration: Homepage: https://community.kde.org/Frameworks
frameworkintegration:
frameworkintegration:
frameworkintegration:
frameworkintegration:
-frameworkintegration: Homepage: https://community.kde.org/Frameworks
frameworkintegration:
diff --git a/kde/slack-desc/granatier b/kde/slack-desc/granatier
index 6eb3695..646b7ee 100644
--- a/kde/slack-desc/granatier
+++ b/kde/slack-desc/granatier
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
granatier: granatier (bomberman clone for KDE)
granatier:
-granatier: Granatier is a clone of the classic Bomberman game, inspired by
-granatier: the work of the Clanbomber clone.
+granatier: Granatier is a clone of the classic Bomberman game, inspired by the
+granatier: work of the Clanbomber clone.
+granatier:
granatier:
granatier:
granatier:
granatier:
granatier:
-granatier: For more information, visit: http://www.kde.org
granatier:
diff --git a/kde/slack-desc/grantlee-editor b/kde/slack-desc/grantlee-editor
index 9ef75e7..71b375c 100644
--- a/kde/slack-desc/grantlee-editor
+++ b/kde/slack-desc/grantlee-editor
@@ -15,5 +15,5 @@ grantlee-editor:
grantlee-editor:
grantlee-editor:
grantlee-editor:
-grantlee-editor: Home page: http://www.kde.org/
+grantlee-editor:
grantlee-editor:
diff --git a/kde/slack-desc/grantleetheme b/kde/slack-desc/grantleetheme
index 0364e1f..4a9edb4 100644
--- a/kde/slack-desc/grantleetheme
+++ b/kde/slack-desc/grantleetheme
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-grantleetheme: grantleetheme (library for Grantlee theming support)
+grantleetheme: grantleetheme (Grantlee theming support)
grantleetheme:
grantleetheme: grantleetheme is a library for Grantlee theming support.
grantleetheme:
@@ -15,5 +15,5 @@ grantleetheme:
grantleetheme:
grantleetheme:
grantleetheme:
-grantleetheme: Home page: http://www.kde.org/
+grantleetheme:
grantleetheme:
diff --git a/kde/slack-desc/gwenview b/kde/slack-desc/gwenview
index bc56b12..73cc58d 100644
--- a/kde/slack-desc/gwenview
+++ b/kde/slack-desc/gwenview
@@ -8,11 +8,11 @@
|-----handy-ruler------------------------------------------------------|
gwenview: gwenview (image viewer for KDE)
gwenview:
-gwenview: Gwenview is a simple image viewer for KDE. It features a folder tree
+gwenview: Gwenview is a simple image viewer for KDE. It features a folder tree
gwenview: window and a file list window, providing easy navigation of your file
gwenview: hierarchy.
gwenview:
-gwenview: For more information, visit: http://www.kde.org
+gwenview:
gwenview:
gwenview:
gwenview:
diff --git a/kde/slack-desc/incidenceeditor b/kde/slack-desc/incidenceeditor
index d3929c2..67050f5 100644
--- a/kde/slack-desc/incidenceeditor
+++ b/kde/slack-desc/incidenceeditor
@@ -15,5 +15,5 @@ incidenceeditor:
incidenceeditor:
incidenceeditor:
incidenceeditor:
-incidenceeditor: Home page: http://www.kde.org/
+incidenceeditor:
incidenceeditor:
diff --git a/kde/slack-desc/juk b/kde/slack-desc/juk
index bad97bd..1830bd6 100644
--- a/kde/slack-desc/juk
+++ b/kde/slack-desc/juk
@@ -9,11 +9,11 @@
juk: juk (audio jukebox application)
juk:
juk: JuK is an audio jukebox application, supporting collections of MP3,
-juk: Ogg Vorbis, and FLAC audio files. It allows you to edit the "tags"
-juk: of your audio files, and manage your collection and playlists.
-juk: It's main focus, in fact, is on music management.
+juk: Ogg Vorbis, and FLAC audio files. It allows you to edit the tags of
+juk: your audio files and manage your collection and playlists. In fact,
+juk: its main focus is on music management.
+juk:
juk:
juk:
juk:
-juk: For more information, visit: http://www.kde.org
juk:
diff --git a/kde/slack-desc/k3b b/kde/slack-desc/k3b
index 032bbb8..c3e71fc 100644
--- a/kde/slack-desc/k3b
+++ b/kde/slack-desc/k3b
@@ -15,5 +15,5 @@ k3b:
k3b: K3b was written by Sebastian Trueg, Thomas Froescher,
k3b: Christian Kvasny, and Klaus-Dieter Krannich.
k3b:
-k3b: For more information, visit: http://www.k3b.org
+k3b: Homepage: http://www.k3b.org
k3b:
diff --git a/kde/slack-desc/kaccounts-integration b/kde/slack-desc/kaccounts-integration
index 33d7857..dc1d35f 100644
--- a/kde/slack-desc/kaccounts-integration
+++ b/kde/slack-desc/kaccounts-integration
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kaccounts-integration: kaccounts-integration (web account administration)
kaccounts-integration:
-kaccounts-integration: Tools to administer web accounts for the sites and services
-kaccounts-integration: across the KDE desktop, including:
-kaccounts-integration: Google, Facebook, Owncloud, IMAP, Jabber and others.
+kaccounts-integration: Tools to administer web accounts for the sites and services across the
+kaccounts-integration: KDE desktop, including Google, Facebook, Owncloud, IMAP, Jabber, and
+kaccounts-integration: others.
+kaccounts-integration:
kaccounts-integration:
kaccounts-integration:
kaccounts-integration:
kaccounts-integration:
-kaccounts-integration: For more information, visit: http://www.kde.org
kaccounts-integration:
diff --git a/kde/slack-desc/kaccounts-providers b/kde/slack-desc/kaccounts-providers
index 3818bcf..3c09475 100644
--- a/kde/slack-desc/kaccounts-providers
+++ b/kde/slack-desc/kaccounts-providers
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kaccounts-providers: kaccounts-providers (administer web accounts)
kaccounts-providers:
-kaccounts-providers: Tools to administer web accounts for the sites and services
-kaccounts-providers: across the KDE desktop, including:
-kaccounts-providers: Google, Facebook, Owncloud, IMAP, Jabber and others.
+kaccounts-providers: Tools to administer web accounts for the sites and services across the
+kaccounts-providers: KDE desktop, including Google, Facebook, Owncloud, IMAP, Jabber, and
+kaccounts-providers: others.
+kaccounts-providers:
kaccounts-providers:
kaccounts-providers:
kaccounts-providers:
kaccounts-providers:
-kaccounts-providers: For more information, visit: http://www.kde.org
kaccounts-providers:
diff --git a/kde/slack-desc/kactivities b/kde/slack-desc/kactivities
index 2ca504a..d82cbe5 100644
--- a/kde/slack-desc/kactivities
+++ b/kde/slack-desc/kactivities
@@ -6,12 +6,12 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kactivities: kactivities (API for using and interacting with Activities)
+kactivities: kactivities (API for using Activities)
kactivities:
kactivities: API for using and interacting with Activities as a consumer,
-kactivities: application adding information to them or as an activity manager.
+kactivities: application adding information to them, or as an activity manager.
+kactivities:
kactivities:
-kactivities: For more information, visit: http://www.kde.org
kactivities:
kactivities:
kactivities:
diff --git a/kde/slack-desc/kactivities-framework b/kde/slack-desc/kactivities-framework
index c3a1bbc..9f27990 100644
--- a/kde/slack-desc/kactivities-framework
+++ b/kde/slack-desc/kactivities-framework
@@ -6,12 +6,12 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kactivities-framework: kactivities-framework (API for using and interacting with Activities)
+kactivities-framework: kactivities-framework (API for using Activities)
kactivities-framework:
kactivities-framework: API for using and interacting with Activities as a consumer,
-kactivities-framework: application adding information to them or as an activity manager.
+kactivities-framework: application adding information to them, or as an activity manager.
+kactivities-framework:
kactivities-framework:
-kactivities-framework: For more information, visit: http://www.kde.org
kactivities-framework:
kactivities-framework:
kactivities-framework:
diff --git a/kde/slack-desc/kactivities-stats b/kde/slack-desc/kactivities-stats
index b2e2337..70e58db 100644
--- a/kde/slack-desc/kactivities-stats
+++ b/kde/slack-desc/kactivities-stats
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kactivities-stats: kactivities-stats (component of KDE activities)
+kactivities-stats: kactivities-stats (component of KDE Activities)
+kactivities-stats:
+kactivities-stats: kactivities-stats is library for accessing the usage data collected by
+kactivities-stats: the Activities system.
kactivities-stats:
-kactivities-stats: kactivities-stats is library for accessing the usage dat
-kactivities-stats:a collected by the activities system.
kactivities-stats:
kactivities-stats:
kactivities-stats:
kactivities-stats:
kactivities-stats:
-kactivities-stats: For more information, visit: http://www.kde.org
kactivities-stats:
diff --git a/kde/slack-desc/kactivitymanagerd b/kde/slack-desc/kactivitymanagerd
index 17d1fe9..a8650de 100644
--- a/kde/slack-desc/kactivitymanagerd
+++ b/kde/slack-desc/kactivitymanagerd
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kactivitymanagerd: kactivitymanagerd (manage and track user activities)
kactivitymanagerd:
-kactivitymanagerd: System service to manage user activities
-kactivitymanagerd: and track the usage patterns.
-kactivitymanagerd: Transient package for the period between the upgrade
-kactivitymanagerd: to KDE Frameworks 5.20 and upgrade to Plasma 5.6.
-kactivitymanagerd:
+kactivitymanagerd: System service to manage user activities and track the usage patterns.
+kactivitymanagerd: Transient package for the period between the upgrade to KDE Frameworks
+kactivitymanagerd: 5.20 and upgrade to Plasma 5.6.
kactivitymanagerd:
kactivitymanagerd: For more information, visit:
kactivitymanagerd: https://projects.kde.org/projects/kde/workspace/kactivitymanagerd
kactivitymanagerd:
+kactivitymanagerd:
+kactivitymanagerd:
diff --git a/kde/slack-desc/kaddressbook b/kde/slack-desc/kaddressbook
index d07f372..e686692 100644
--- a/kde/slack-desc/kaddressbook
+++ b/kde/slack-desc/kaddressbook
@@ -15,5 +15,5 @@ kaddressbook:
kaddressbook:
kaddressbook:
kaddressbook:
-kaddressbook: Home page: http://www.kde.org/
+kaddressbook:
kaddressbook:
diff --git a/kde/slack-desc/kajongg b/kde/slack-desc/kajongg
index eb317ef..1486eb0 100644
--- a/kde/slack-desc/kajongg
+++ b/kde/slack-desc/kajongg
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kajongg: kajongg (Mah Jongg for KDE)
kajongg:
-kajongg: Kajongg is the ancient Chinese board game for 4 players.
-kajongg: Kajongg can be used in two different ways: Scoring a manual game where
-kajongg: you play as always and use Kajongg for the computation of scores and
-kajongg: for bookkeeping. Or you can use Kajongg to play against any
-kajongg: combination of other human players or computer players.
+kajongg: Kajongg is the ancient Chinese board game for 4 players. Kajongg can
+kajongg: be used in two different ways: Scoring a manual game where you play as
+kajongg: always and use Kajongg for the computation of scores and for
+kajongg: bookkeeping. Or you can use Kajongg to play against any combination
+kajongg: of other human players or computer players.
+kajongg:
kajongg:
kajongg:
-kajongg: For more information, visit: http://www.kde.org
kajongg:
diff --git a/kde/slack-desc/kalarm b/kde/slack-desc/kalarm
index e142866..c6d3c94 100644
--- a/kde/slack-desc/kalarm
+++ b/kde/slack-desc/kalarm
@@ -15,5 +15,5 @@ kalarm:
kalarm:
kalarm:
kalarm:
-kalarm: Home page: http://www.kde.org/
+kalarm:
kalarm:
diff --git a/kde/slack-desc/kalarmcal b/kde/slack-desc/kalarmcal
index cdb84aa..6a9ab91 100644
--- a/kde/slack-desc/kalarmcal
+++ b/kde/slack-desc/kalarmcal
@@ -15,5 +15,5 @@ kalarmcal:
kalarmcal:
kalarmcal:
kalarmcal:
-kalarmcal: Home page: http://www.kde.org/
+kalarmcal:
kalarmcal:
diff --git a/kde/slack-desc/kalgebra b/kde/slack-desc/kalgebra
index aefc3cc..606862e 100644
--- a/kde/slack-desc/kalgebra
+++ b/kde/slack-desc/kalgebra
@@ -8,11 +8,11 @@
|-----handy-ruler------------------------------------------------------|
kalgebra: kalgebra (a graph calculator)
kalgebra:
-kalgebra: KAlgebra is a MathML-based graph calculator. It was initially mathml
-kalgebra: oriented, but now it can be used by anyone with a little mathematic
+kalgebra: KAlgebra is a MathML-based graph calculator. It was initially MathML
+kalgebra: oriented, but now it can be used by anyone with a little mathematical
kalgebra: knowledge.
kalgebra:
-kalgebra: For more information, visit: http://edu.kde.org/
+kalgebra:
kalgebra:
kalgebra:
kalgebra:
diff --git a/kde/slack-desc/kalzium b/kde/slack-desc/kalzium
index b96c7bc..d757f95 100644
--- a/kde/slack-desc/kalzium
+++ b/kde/slack-desc/kalzium
@@ -10,7 +10,7 @@ kalzium: kalzium (periodic table of the elements)
kalzium:
kalzium: Kalzium shows a periodic table of the elements.
kalzium:
-kalzium: For more information, visit: http://edu.kde.org/
+kalzium:
kalzium:
kalzium:
kalzium:
diff --git a/kde/slack-desc/kamera b/kde/slack-desc/kamera
index 8d86f1d..0244544 100644
--- a/kde/slack-desc/kamera
+++ b/kde/slack-desc/kamera
@@ -5,12 +5,12 @@
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
- |-----handy-ruler------------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kamera: kamera (digital camera support for KDE)
kamera:
kamera: Digital camera support for KDE.
kamera:
-kamera: For more information, visit: http://www.kde.org
+kamera:
kamera:
kamera:
kamera:
diff --git a/kde/slack-desc/kamoso b/kde/slack-desc/kamoso
index 3e787d1..6527dd0 100644
--- a/kde/slack-desc/kamoso
+++ b/kde/slack-desc/kamoso
@@ -13,7 +13,7 @@ kamoso: videos. It probably should be the best webcam recorder for Linux.
kamoso:
kamoso: Kamoso can make photos from your webcam and upload them to Facebook.
kamoso: It also allows to record videos from your webcam and upload them
-kamoso: to YouTube
+kamoso: to YouTube.
kamoso:
-kamoso: Home page: https://userbase.kde.org/Kamoso
+kamoso: Homepage: https://userbase.kde.org/Kamoso
kamoso:
diff --git a/kde/slack-desc/kanagram b/kde/slack-desc/kanagram
index 98288f5..13443f0 100644
--- a/kde/slack-desc/kanagram
+++ b/kde/slack-desc/kanagram
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kanagram: kanagram (letter game)
kanagram:
-kanagram: Kanagram is a replacement for KMessedWords. Kanagram mixes up the
-kanagram: letters of a word to create an anagram, and you have to guess what
-kanagram: the mixed up word is. Kanagram features several built-in word lists,
-kanagram: hints, and a cheat feature which reveals the original word.
-kanagram: Kanagram also has a vocabulary editor.
+kanagram: Kanagram is a replacement for KMessedWords. Kanagram mixes up the
+kanagram: letters of a word to create an anagram, and you have to guess what the
+kanagram: mixed up word is. Kanagram features several built-in word lists,
+kanagram: hints, and a cheat feature which reveals the original word. Kanagram
+kanagram: also has a vocabulary editor.
+kanagram:
kanagram:
-kanagram: For more information, visit: http://edu.kde.org/
kanagram:
kanagram:
diff --git a/kde/slack-desc/kapidox b/kde/slack-desc/kapidox
index 56ab0e7..961780b 100644
--- a/kde/slack-desc/kapidox
+++ b/kde/slack-desc/kapidox
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kapidox: kapidox (kapidox)
+kapidox: kapidox (KDE Doxygen Tools)
kapidox:
+kapidox: This framework contains scripts and data for building API
+kapidox: documentation (dox) in a standard format and style.
kapidox:
kapidox:
kapidox:
@@ -15,5 +17,3 @@ kapidox:
kapidox:
kapidox:
kapidox:
-kapidox:
-kapidox: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kapman b/kde/slack-desc/kapman
index 750a4ef..a7fc186 100644
--- a/kde/slack-desc/kapman
+++ b/kde/slack-desc/kapman
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kapman: kapman (KDE version of Pac-Man)
kapman:
-kapman: Kapman is a clone of the well known game Pac-Man.
-kapman: You must run through the maze to eat all pills without being captured
-kapman: by a ghost. By eating an energizer, Kapman gets the ability to eat
-kapman: ghosts for a few seconds. When a stage is cleared of pills and
-kapman: energizer the player is taken to the next stage with slightly
-kapman: increased game speed.
+kapman: Kapman is a clone of the well known game Pac-Man. You must run through
+kapman: the maze to eat all pills without being captured by a ghost. By eating
+kapman: an energizer, Kapman gets the ability to eat ghosts for a few seconds.
+kapman: When a stage is cleared of pills and energizers the player is taken to
+kapman: the next stage with slightly increased game speed.
+kapman:
+kapman:
kapman:
-kapman: For more information, visit: http://www.kde.org
kapman:
diff --git a/kde/slack-desc/kapptemplate b/kde/slack-desc/kapptemplate
index 092cd66..5de2077 100644
--- a/kde/slack-desc/kapptemplate
+++ b/kde/slack-desc/kapptemplate
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kapptemplate: kapptemplate (application template generator)
kapptemplate:
-kapptemplate: KAppTemplate is a shell script to create the necessary framework
-kapptemplate: to develop KDE applications.
+kapptemplate: KAppTemplate is a shell script to create the necessary framework to
+kapptemplate: develop KDE applications.
+kapptemplate:
kapptemplate:
kapptemplate:
kapptemplate:
kapptemplate:
kapptemplate:
-kapptemplate: For more information, visit: http://www.kde.org
kapptemplate:
diff --git a/kde/slack-desc/karchive b/kde/slack-desc/karchive
index 25268e4..3b98274 100644
--- a/kde/slack-desc/karchive
+++ b/kde/slack-desc/karchive
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-karchive: karchive (karchive)
+karchive: karchive (Read, create, and manipulate archives)
karchive:
+karchive: KArchive provides classes for easy reading, creation and manipulation
+karchive: of archive formats like ZIP and TAR. It also provides transparent
+karchive: compression and decompression of data, like the GZip format, via a
+karchive: subclass of QIODevice.
karchive:
karchive:
karchive:
karchive:
karchive:
-karchive:
-karchive:
-karchive:
-karchive: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kate b/kde/slack-desc/kate
index 9b19944..a1bf3ed 100644
--- a/kde/slack-desc/kate
+++ b/kde/slack-desc/kate
@@ -5,15 +5,15 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kate: kate (an advanced text editor for KDE)
kate:
-kate: The Kate project develops two main products:
-kate: KatePart, the advanced editor component which is used in numerous KDE
-kate: applications requiring a text editing component, and Kate, a MDI text
-kate: editor application. In addition, we provide KWrite, a simple SDI
-kate: editor shell which allows the user to select his/her favorite editor
-kate: component.
+kate: The Kate project develops two main products: KatePart, the advanced
+kate: editor component which is used in numerous KDE applications requiring
+kate: a text editing component, and Kate, a MDI text editor application.
+kate: In addition, it provides KWrite, a simple SDI editor shell which
+kate: allows the user to select his/her favorite editor component.
kate:
kate: Homepage: http://kate-editor.org
kate:
+kate:
diff --git a/kde/slack-desc/katomic b/kde/slack-desc/katomic
index de76b51..3af6ae0 100644
--- a/kde/slack-desc/katomic
+++ b/kde/slack-desc/katomic
@@ -9,11 +9,11 @@
katomic: katomic (re-assemble molecules from compound atoms)
katomic:
katomic: Katomic is both fun and educational game built around molecular
-katomic: geometry. It employs simplistic two-dimensional looks at different
-katomic: chemical elements. You can also play an online demo version
-katomic: of this game.
+katomic: geometry. It employs simplistic two-dimensional looks at different
+katomic: chemical elements. You can also play an online demo version of this
+katomic: game.
+katomic:
katomic:
katomic:
katomic:
-katomic: For more information, visit: http://www.kde.org
katomic:
diff --git a/kde/slack-desc/kaudiocreator b/kde/slack-desc/kaudiocreator
index 3de3772..4340fc1 100644
--- a/kde/slack-desc/kaudiocreator
+++ b/kde/slack-desc/kaudiocreator
@@ -5,11 +5,11 @@
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kaudiocreator: kaudiocreator (CD ripper and audio encoder)
kaudiocreator:
-kaudiocreator: kaudiocreater is a KDE frontend for ripping and encoding audio
-kaudiocreator: to/from optical media.
+kaudiocreator: kaudiocreater is a KDE frontend for ripping and encoding audio to/from
+kaudiocreator: optical media.
kaudiocreator:
kaudiocreator:
kaudiocreator:
diff --git a/kde/slack-desc/kauth b/kde/slack-desc/kauth
index 7b5e651..d7a5825 100644
--- a/kde/slack-desc/kauth
+++ b/kde/slack-desc/kauth
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kauth: kauth (kauth)
+kauth: kauth (Execute actions as privileged user)
kauth:
+kauth: KAuth provides a convenient, system-integrated way to offload actions
+kauth: that need to be performed as a privileged user (root, for example) to
+kauth: small (hopefully secure) helper utilities.
kauth:
kauth:
kauth:
kauth:
kauth:
kauth:
-kauth:
-kauth:
-kauth: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kbackup b/kde/slack-desc/kbackup
index eaebf28..f89e2d4 100644
--- a/kde/slack-desc/kbackup
+++ b/kde/slack-desc/kbackup
@@ -10,10 +10,10 @@ kbackup: kbackup (KDE backup program)
kbackup:
kbackup: KBackup is an application that lets you back up any folders or files
kbackup: in a tar archive to a local folder, e.g. a locally mounted device
-kbackup: like a ZIP drive, USB stick, etc. or a remote URL.
-kbackup: KBackup can run automated backups without using a graphical
-kbackup: user interface.
+kbackup: like a ZIP drive, USB stick, etc. or a remote URL. KBackup can also
+kbackup: run automated backups without using a graphical user interface.
+kbackup:
+kbackup: Homepage: https://www.kde.org/applications/utilities/kbackup/
kbackup:
kbackup:
-kbackup: Home page: https://www.kde.org/applications/utilities/kbackup/
kbackup:
diff --git a/kde/slack-desc/kblackbox b/kde/slack-desc/kblackbox
index a4525a2..3a0713d 100644
--- a/kde/slack-desc/kblackbox
+++ b/kde/slack-desc/kblackbox
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kblackbox: kblackbox (a game of hide and seek)
kblackbox:
-kblackbox: KBlackbox is a game of hide and seek played on a grid of boxes
-kblackbox: where the computer has hidden several balls.
+kblackbox: KBlackbox is a game of hide and seek played on a grid of boxes where
+kblackbox: the computer has hidden several balls.
+kblackbox:
kblackbox:
kblackbox:
kblackbox:
kblackbox:
kblackbox:
-kblackbox: For more information, visit: http://www.kde.org
kblackbox:
diff --git a/kde/slack-desc/kblocks b/kde/slack-desc/kblocks
index bdbfdfa..ed3b827 100644
--- a/kde/slack-desc/kblocks
+++ b/kde/slack-desc/kblocks
@@ -15,5 +15,5 @@ kblocks:
kblocks:
kblocks:
kblocks:
-kblocks: For more information, visit: http://www.kde.org
+kblocks:
kblocks:
diff --git a/kde/slack-desc/kblog b/kde/slack-desc/kblog
index 266d97e..b6516fe 100644
--- a/kde/slack-desc/kblog
+++ b/kde/slack-desc/kblog
@@ -9,11 +9,11 @@
kblog: kblog (blogging library for KDE)
kblog:
kblog: KBlog is a library for calling functions on Blogger 1.0, MetaWeblog,
-kblog: MovableType and GData compatible blogs.
-kblog: It calls the APIs using KXmlRpcClient and Syndication.
-kblog: It supports asynchronous sending and fetching of posts and,
-kblog: if supported on the server, multimedia files.
+kblog: MovableType and GData compatible blogs. It calls the APIs using
+kblog: KXmlRpcClient and Syndication. It supports asynchronous sending and
+kblog: fetching of posts and, if supported on the server, multimedia files.
kblog: Almost every modern blogging web application that provides an XML data
kblog: interface supports one of the APIs mentioned above.
kblog:
-kblog: Home page: http://www.kde.org/
+kblog:
+kblog:
diff --git a/kde/slack-desc/kbookmarks b/kde/slack-desc/kbookmarks
index 7f3f949..00c7c8b 100644
--- a/kde/slack-desc/kbookmarks
+++ b/kde/slack-desc/kbookmarks
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kbookmarks: kbookmarks (kbookmarks)
+kbookmarks: kbookmarks (Bookmarks management library)
kbookmarks:
+kbookmarks: KBookmarks lets you access and manipulate bookmarks stored using the
+kbookmarks: XBEL format. The most common use for bookmarks is web browsers, but
+kbookmarks: this can also be useful in any application where local files or URLs
+kbookmarks: can be saved as bookmarks.
kbookmarks:
+kbookmarks: For more information on the XBEL format, see:
+kbookmarks: http://pyxml.sourceforge.net/topics/xbel/
kbookmarks:
kbookmarks:
-kbookmarks:
-kbookmarks:
-kbookmarks:
-kbookmarks:
-kbookmarks:
-kbookmarks: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kbounce b/kde/slack-desc/kbounce
index 2a98326..a5aa9a1 100644
--- a/kde/slack-desc/kbounce
+++ b/kde/slack-desc/kbounce
@@ -10,10 +10,10 @@ kbounce: kbounce (KDE Bounce Ball Game)
kbounce:
kbounce: KBounce is a single player arcade game with the elements of puzzle.
kbounce: It is played on a field, surrounded by wall, with two or more balls
-kbounce: that move about in the field bouncing off of walls.
-kbounce: The player can build new walls, decreasing the size of active field.
+kbounce: that move about in the field bouncing off of walls. The player can
+kbounce: build new walls, decreasing the size of active field.
+kbounce:
kbounce:
kbounce:
kbounce:
-kbounce: For more information, visit: http://www.kde.org
kbounce:
diff --git a/kde/slack-desc/kbreakout b/kde/slack-desc/kbreakout
index e9b53a1..d060800 100644
--- a/kde/slack-desc/kbreakout
+++ b/kde/slack-desc/kbreakout
@@ -15,5 +15,5 @@ kbreakout:
kbreakout:
kbreakout:
kbreakout:
-kbreakout: For more information, visit: http://www.kde.org
+kbreakout:
kbreakout:
diff --git a/kde/slack-desc/kbruch b/kde/slack-desc/kbruch
index 43a2aa3..2b9bdb6 100644
--- a/kde/slack-desc/kbruch
+++ b/kde/slack-desc/kbruch
@@ -10,7 +10,7 @@ kbruch: kbruch (calculate fractions)
kbruch:
kbruch: KBruch is a small program to practice calculating with fractions.
kbruch:
-kbruch: For more information, visit: http://edu.kde.org/
+kbruch:
kbruch:
kbruch:
kbruch:
diff --git a/kde/slack-desc/kcachegrind b/kde/slack-desc/kcachegrind
index e47d7d9..9fe0153 100644
--- a/kde/slack-desc/kcachegrind
+++ b/kde/slack-desc/kcachegrind
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kcachegrind: kcachegrind (GUI to profilers such as Valgrind)
kcachegrind:
-kcachegrind: kcachegrind is a graphical browser for data produced by
-kcachegrind: profiling tools such as Valgrind.
+kcachegrind: kcachegrind is a graphical browser for data produced by profiling
+kcachegrind: tools such as Valgrind.
+kcachegrind:
kcachegrind:
kcachegrind:
kcachegrind:
kcachegrind:
kcachegrind:
-kcachegrind: For more information, visit: http://www.kde.org
kcachegrind:
diff --git a/kde/slack-desc/kcalc b/kde/slack-desc/kcalc
index f5144c5..fd72f12 100644
--- a/kde/slack-desc/kcalc
+++ b/kde/slack-desc/kcalc
@@ -11,7 +11,7 @@ kcalc:
kcalc: KCalc is a calculator which offers many more mathematical functions
kcalc: than meet the eye on a first glance.
kcalc:
-kcalc: kcalc's home page is: http://utils.kde.org/projects/kcalc
+kcalc: Homepage: http://utils.kde.org/projects/kcalc
kcalc:
kcalc:
kcalc:
diff --git a/kde/slack-desc/kcalcore b/kde/slack-desc/kcalcore
index 44c4147..7a45093 100644
--- a/kde/slack-desc/kcalcore
+++ b/kde/slack-desc/kcalcore
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kcalcore: kcalcore (KDE calendar access library)
kcalcore:
-kcalcore: This library provides access to and handling of calendar data.
-kcalcore: It supports the standard formats iCalendar and vCalendar and the
-kcalcore: group scheduling standard iTIP.
+kcalcore: This library provides access to and handling of calendar data. It
+kcalcore: supports the standard formats iCalendar and vCalendar and the group
+kcalcore: scheduling standard iTIP.
+kcalcore:
kcalcore:
kcalcore:
kcalcore:
kcalcore:
-kcalcore: Home page: http://www.kde.org/
kcalcore:
diff --git a/kde/slack-desc/kcalendarcore b/kde/slack-desc/kcalendarcore
index 12a2961..7106b56 100644
--- a/kde/slack-desc/kcalendarcore
+++ b/kde/slack-desc/kcalendarcore
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kcalendarcore: kcalendarcore (KDE calendar access library)
kcalendarcore:
-kcalendarcore: This library provides access to and handling of calendar data.
-kcalendarcore: It supports the standard formats iCalendar and vCalendar and the
-kcalendarcore: group scheduling standard iTIP.
+kcalendarcore: This library provides access to and handling of calendar data. It
+kcalendarcore: supports the standard formats iCalendar and vCalendar and the group
+kcalendarcore: scheduling standard iTIP.
+kcalendarcore:
kcalendarcore:
kcalendarcore:
kcalendarcore:
kcalendarcore:
-kcalendarcore: Home page: http://www.kde.org/
kcalendarcore:
diff --git a/kde/slack-desc/kcalutils b/kde/slack-desc/kcalutils
index fa95cc1..3ec2f34 100644
--- a/kde/slack-desc/kcalutils
+++ b/kde/slack-desc/kcalutils
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kcalutils: kcalutils (utility functions for the handling of calendar data)
+kcalutils: kcalutils (calendar data utilities)
kcalutils:
kcalutils: This library provides a set of utility functions that help
kcalutils: applications access and use calendar data via the KCalCore library.
@@ -15,5 +15,5 @@ kcalutils:
kcalutils:
kcalutils:
kcalutils:
-kcalutils: Home page: http://www.kde.org/
+kcalutils:
kcalutils:
diff --git a/kde/slack-desc/kcharselect b/kde/slack-desc/kcharselect
index 3c937dd..50a2524 100644
--- a/kde/slack-desc/kcharselect
+++ b/kde/slack-desc/kcharselect
@@ -8,10 +8,10 @@
|-----handy-ruler------------------------------------------------------|
kcharselect: kcharselect (character picker)
kcharselect:
-kcharselect: KCharSelect is a tool to select special characters from all
-kcharselect: installed fonts and copy them into the clipboard.
+kcharselect: KCharSelect is a tool to select special characters from all installed
+kcharselect: fonts and copy them into the clipboard.
kcharselect:
-kcharselect: kcharselect's home page: http://utils.kde.org/projects/kcharselect
+kcharselect: Homepage: http://utils.kde.org/projects/kcharselect
kcharselect:
kcharselect:
kcharselect:
diff --git a/kde/slack-desc/kcmutils b/kde/slack-desc/kcmutils
index 504aa27..2236849 100644
--- a/kde/slack-desc/kcmutils
+++ b/kde/slack-desc/kcmutils
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kcmutils: kcmutils (kcmutils)
+kcmutils: kcmutils (KDE System Settings utilities)
kcmutils:
+kcmutils: KCMUtils provides various classes to work with KCModules. KCModules
+kcmutils: can be created with the KConfigWidgets framework.
kcmutils:
kcmutils:
kcmutils:
@@ -15,5 +17,3 @@ kcmutils:
kcmutils:
kcmutils:
kcmutils:
-kcmutils:
-kcmutils: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kcodecs b/kde/slack-desc/kcodecs
index b3d461e..ea4b170 100644
--- a/kde/slack-desc/kcodecs
+++ b/kde/slack-desc/kcodecs
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kcodecs: kcodecs (kcodecs)
+kcodecs: kcodecs (String encoding library)
kcodecs:
+kcodecs: KCodecs provide a collection of methods to manipulate strings using
+kcodecs: various encodings. It can automatically determine the charset of a
+kcodecs: string, translate XML entities, validate email addresses, and find
+kcodecs: encodings by name in a more tolerant way than QTextCodec (useful e.g.
+kcodecs: for data coming from the Internet).
kcodecs:
kcodecs:
kcodecs:
kcodecs:
-kcodecs:
-kcodecs:
-kcodecs:
-kcodecs:
-kcodecs: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kcolorchooser b/kde/slack-desc/kcolorchooser
index 61e356d..b5219c5 100644
--- a/kde/slack-desc/kcolorchooser
+++ b/kde/slack-desc/kcolorchooser
@@ -10,7 +10,7 @@ kcolorchooser: kcolorchooser (color chooser)
kcolorchooser:
kcolorchooser: A color chooser application for KDE.
kcolorchooser:
-kcolorchooser: For more information, visit: http://www.kde.org
+kcolorchooser:
kcolorchooser:
kcolorchooser:
kcolorchooser:
diff --git a/kde/slack-desc/kcompletion b/kde/slack-desc/kcompletion
index 00b6ce2..d66ccb3 100644
--- a/kde/slack-desc/kcompletion
+++ b/kde/slack-desc/kcompletion
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kcompletion: kcompletion (kcompletion)
+kcompletion: kcompletion (Powerful completion framework)
kcompletion:
+kcompletion: When typing filenames, email addresses and other text where the user
+kcompletion: often wants to select from existing data (including what they
+kcompletion: previously typed) rather than enter anything wholly original, users
+kcompletion: often find it helpful if they only need to type the first few
+kcompletion: characters, and then have the application offer them a set of choices
+kcompletion: or attempt to finish off what they were typing. This framework helps
+kcompletion: implement this in Qt-based applications.
kcompletion:
kcompletion:
-kcompletion:
-kcompletion:
-kcompletion:
-kcompletion:
-kcompletion:
-kcompletion:
-kcompletion: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kconfig b/kde/slack-desc/kconfig
index 7cefad3..058549d 100644
--- a/kde/slack-desc/kconfig
+++ b/kde/slack-desc/kconfig
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kconfig: kconfig (kconfig)
+kconfig: kconfig (Persistent application settings)
kconfig:
+kconfig: KConfig provides an advanced configuration system. It is made of two
+kconfig: parts: KConfigCore and KConfigGui. KConfigCore provides access to the
+kconfig: configuration files themselves. KConfigGui provides a way to hook
+kconfig: widgets to the configuration so that they are automatically
+kconfig: initialized from the configuration and automatically propagate their
+kconfig: changes to their respective configuration files.
kconfig:
kconfig:
kconfig:
-kconfig:
-kconfig:
-kconfig:
-kconfig:
-kconfig:
-kconfig: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kconfigwidgets b/kde/slack-desc/kconfigwidgets
index 647a404..683097a 100644
--- a/kde/slack-desc/kconfigwidgets
+++ b/kde/slack-desc/kconfigwidgets
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kconfigwidgets: kconfigwidgets (kconfigwidgets)
+kconfigwidgets: kconfigwidgets (Widgets for configuration dialogs)
kconfigwidgets:
+kconfigwidgets: KConfigWidgets provides easy-to-use classes to create configuration
+kconfigwidgets: dialogs, as well as a set of widgets which uses KConfig to store their
+kconfigwidgets: settings.
kconfigwidgets:
kconfigwidgets:
kconfigwidgets:
kconfigwidgets:
kconfigwidgets:
kconfigwidgets:
-kconfigwidgets:
-kconfigwidgets:
-kconfigwidgets: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kcontacts b/kde/slack-desc/kcontacts
index 6dcf4fc..b04c192 100644
--- a/kde/slack-desc/kcontacts
+++ b/kde/slack-desc/kcontacts
@@ -11,9 +11,9 @@ kcontacts:
kcontacts: kcontacts contains an address book API for KDE. This can be used by
kcontacts: all KDE applications using data of this type, e.g. KAddressBook,
kcontacts: KMail, KOrganizer, KPilot etc.
-kcontacts: It is meant as replacement for libkab (in kdebase/kab).
kcontacts:
kcontacts:
kcontacts:
-kcontacts: Home page: http://www.kde.org/
+kcontacts:
+kcontacts:
kcontacts:
diff --git a/kde/slack-desc/kcoreaddons b/kde/slack-desc/kcoreaddons
index 54d736a..e21417c 100644
--- a/kde/slack-desc/kcoreaddons
+++ b/kde/slack-desc/kcoreaddons
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kcoreaddons: kcoreaddons (kcoreaddons)
+kcoreaddons: kcoreaddons (QtCore addon library)
kcoreaddons:
+kcoreaddons: KCoreAddons provides classes built on top of QtCore to perform various
+kcoreaddons: tasks such as manipulating mime types, autosaving files, creating
+kcoreaddons: backup files, generating random sequences, performing text
+kcoreaddons: manipulations such as macro replacement, accessing user information
+kcoreaddons: and many more.
kcoreaddons:
kcoreaddons:
kcoreaddons:
kcoreaddons:
-kcoreaddons:
-kcoreaddons:
-kcoreaddons:
-kcoreaddons:
-kcoreaddons: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kcrash b/kde/slack-desc/kcrash
index 0d0bfb8..7324a80 100644
--- a/kde/slack-desc/kcrash
+++ b/kde/slack-desc/kcrash
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kcrash: kcrash (kcrash)
+kcrash: kcrash (Crash handler)
kcrash:
+kcrash: KCrash provides support for intercepting and handling application
+kcrash: crashes.
kcrash:
kcrash:
kcrash:
@@ -15,5 +17,3 @@ kcrash:
kcrash:
kcrash:
kcrash:
-kcrash:
-kcrash: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kcron b/kde/slack-desc/kcron
index 109ccfa..d4be744 100644
--- a/kde/slack-desc/kcron
+++ b/kde/slack-desc/kcron
@@ -15,5 +15,5 @@ kcron:
kcron:
kcron:
kcron:
-kcron: For more information, visit: http://www.kde.org
+kcron:
kcron:
diff --git a/kde/slack-desc/kdav b/kde/slack-desc/kdav
index 5e09f66..7abe02a 100644
--- a/kde/slack-desc/kdav
+++ b/kde/slack-desc/kdav
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdav: kdav (KDE DAV protocol implementation)
kdav:
-kdav: A DAV protocol implemention with KJobs.
+kdav: The DAV protocol extends HTTP with new methods that allow a DAV client
+kdav: to create, modify, and update files and directories in the server.
+kdav: KDAV provides a DAV protocol implemention with KJobs. Calendars and
+kdav: todos are supported, using either GroupDAV or CalDAV, and contacts are
+kdav: supported using GroupDAV or CardDAV.
kdav:
kdav:
kdav:
kdav:
-kdav:
-kdav:
-kdav: For more information, visit: http://pim.kde.org
-kdav:
diff --git a/kde/slack-desc/kdbusaddons b/kde/slack-desc/kdbusaddons
index 1912355..29332b5 100644
--- a/kde/slack-desc/kdbusaddons
+++ b/kde/slack-desc/kdbusaddons
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kdbusaddons: kdbusaddons (kdbusaddons)
+kdbusaddons: kdbusaddons (Convenience classes for D-Bus)
kdbusaddons:
+kdbusaddons: KDBusAddons provides convenience classes on top of QtDBus, as well as
+kdbusaddons: an API to create KDED modules.
kdbusaddons:
kdbusaddons:
kdbusaddons:
@@ -15,5 +17,3 @@ kdbusaddons:
kdbusaddons:
kdbusaddons:
kdbusaddons:
-kdbusaddons:
-kdbusaddons: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kde-cli-tools b/kde/slack-desc/kde-cli-tools
index 0c4fc04..5f29d16 100644
--- a/kde/slack-desc/kde-cli-tools
+++ b/kde/slack-desc/kde-cli-tools
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kde-cli-tools: kde-cli-tools (KDE commandline tools)
+kde-cli-tools: kde-cli-tools (KDE command-line tools)
+kde-cli-tools:
+kde-cli-tools: Tools based on KDE Frameworks 5 to better interact with the system.
+kde-cli-tools:
kde-cli-tools:
-kde-cli-tools: Tools based on KDE Frameworks 5 to better interact
-kde-cli-tools: with the system.
kde-cli-tools:
kde-cli-tools:
kde-cli-tools:
kde-cli-tools:
kde-cli-tools:
kde-cli-tools:
-kde-cli-tools: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kde-dev-scripts b/kde/slack-desc/kde-dev-scripts
index df28666..296127e 100644
--- a/kde/slack-desc/kde-dev-scripts
+++ b/kde/slack-desc/kde-dev-scripts
@@ -15,5 +15,5 @@ kde-dev-scripts:
kde-dev-scripts:
kde-dev-scripts:
kde-dev-scripts:
-kde-dev-scripts: For more information, visit: http://www.kde.org
+kde-dev-scripts:
kde-dev-scripts:
diff --git a/kde/slack-desc/kde-dev-utils b/kde/slack-desc/kde-dev-utils
index 55d3ad3..cc8f350 100644
--- a/kde/slack-desc/kde-dev-utils
+++ b/kde/slack-desc/kde-dev-utils
@@ -15,5 +15,5 @@ kde-dev-utils:
kde-dev-utils:
kde-dev-utils:
kde-dev-utils:
-kde-dev-utils: For more information, visit: http://www.kde.org
+kde-dev-utils:
kde-dev-utils:
diff --git a/kde/slack-desc/kde-gtk-config b/kde/slack-desc/kde-gtk-config
index d59bfb6..162a411 100644
--- a/kde/slack-desc/kde-gtk-config
+++ b/kde/slack-desc/kde-gtk-config
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kde-gtk-config: kde-gtk-config (configure GTK application look & feel in KDE)
+kde-gtk-config: kde-gtk-config (configure GTK appearance)
kde-gtk-config:
-kde-gtk-config: KDE systemsettings kcm to set GTK application look and feel.
+kde-gtk-config: System settings kcm to set GTK application look and feel in KDE.
kde-gtk-config:
+kde-gtk-config: Homepage: http://projects.kde.org/kde-gtk-config
kde-gtk-config:
kde-gtk-config:
kde-gtk-config:
kde-gtk-config:
kde-gtk-config:
-kde-gtk-config: For more information, visit: http://projects.kde.org/kde-gtk-config
kde-gtk-config:
diff --git a/kde/slack-desc/kde-wallpapers b/kde/slack-desc/kde-wallpapers
index e78fbfb..5c14a8a 100644
--- a/kde/slack-desc/kde-wallpapers
+++ b/kde/slack-desc/kde-wallpapers
@@ -5,7 +5,7 @@
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
- |-----handy-ruler-------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kde-wallpapers: kde-wallpapers (Wallpapers for KDE)
kde-wallpapers:
kde-wallpapers: Additional wallpapers for KDE.
diff --git a/kde/slack-desc/kdeaccessibility b/kde/slack-desc/kdeaccessibility
index 91669ef..e176b38 100644
--- a/kde/slack-desc/kdeaccessibility
+++ b/kde/slack-desc/kdeaccessibility
@@ -17,4 +17,3 @@ kdeaccessibility:
kdeaccessibility:
kdeaccessibility:
kdeaccessibility:
-kdeaccessibility:
diff --git a/kde/slack-desc/kdeadmin b/kde/slack-desc/kdeadmin
index cef4307..515abd9 100644
--- a/kde/slack-desc/kdeadmin
+++ b/kde/slack-desc/kdeadmin
@@ -6,7 +6,7 @@
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
- |-----handy-ruler---------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kdeadmin: kdeadmin (System Administration tools)
kdeadmin:
kdeadmin: KDE system administration tools.
diff --git a/kde/slack-desc/kdebugsettings b/kde/slack-desc/kdebugsettings
index df5771f..bc4921f 100644
--- a/kde/slack-desc/kdebugsettings
+++ b/kde/slack-desc/kdebugsettings
@@ -15,5 +15,5 @@ kdebugsettings:
kdebugsettings:
kdebugsettings:
kdebugsettings:
-kdebugsettings: For more information, visit: http://www.kde.org
+kdebugsettings:
kdebugsettings:
diff --git a/kde/slack-desc/kdeclarative b/kde/slack-desc/kdeclarative
index bd82c61..09cd5cd 100644
--- a/kde/slack-desc/kdeclarative
+++ b/kde/slack-desc/kdeclarative
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kdeclarative: kdeclarative (kdeclarative)
+kdeclarative: kdeclarative (Integration of QML and KDE workspaces)
kdeclarative:
+kdeclarative: KDeclarative provides integration of QML and KDE work spaces. It
+kdeclarative: comprises two parts: a library used by the C++ part of your
+kdeclarative: application to intergrate QML with KDE Frameworks specific features,
+kdeclarative: and a series of QML imports that offer bindings to some of the
+kdeclarative: frameworks.
kdeclarative:
kdeclarative:
kdeclarative:
kdeclarative:
-kdeclarative:
-kdeclarative:
-kdeclarative:
-kdeclarative:
-kdeclarative: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kdeconnect-framework b/kde/slack-desc/kdeconnect-framework
deleted file mode 100644
index 4efa154..0000000
--- a/kde/slack-desc/kdeconnect-framework
+++ /dev/null
@@ -1,19 +0,0 @@
-# HOW TO EDIT THIS FILE:
-# The "handy ruler" below makes it easier to edit a package description. Line
-# up the first '|' above the ':' following the base package name, and the '|' on
-# the right side marks the last column you can put a character in. You must make
-# exactly 11 lines for the formatting to be correct. It's also customary to
-# leave one space after the ':'.
-
- |-----handy-ruler------------------------------------------------------|
-kdeconnect-framework: kdeconnect-framework (Integrate Android with the Plasma Desktop)
-kdeconnect-framework:
-kdeconnect-framework: KDE Connect is a module to connect KDE with your smartphone.
-kdeconnect-framework: Prominent features are: clipboard share, notifications sync,
-kdeconnect-framework: multimedia remote control over secured network connections.
-kdeconnect-framework: Please note you will need to install KDE Connect on Android
-kdeconnect-framework: for this app to work:
-kdeconnect-framework: https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp
-kdeconnect-framework:
-kdeconnect-framework: See also:
-kdeconnect-framework: https://albertvaka.wordpress.com/2013/08/05/introducing-kde-connect/
diff --git a/kde/slack-desc/kdeconnect-kde b/kde/slack-desc/kdeconnect-kde
new file mode 100644
index 0000000..1eb21b9
--- /dev/null
+++ b/kde/slack-desc/kdeconnect-kde
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|' on
+# the right side marks the last column you can put a character in. You must make
+# exactly 11 lines for the formatting to be correct. It's also customary to
+# leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+kdeconnect-kde: kdeconnect-kde (Integrate Android with the Plasma Desktop)
+kdeconnect-kde:
+kdeconnect-kde: KDE Connect is a module to connect KDE with your smartphone.
+kdeconnect-kde: Prominent features are: clipboard share, notifications sync,
+kdeconnect-kde: multimedia remote control over secured network connections.
+kdeconnect-kde: Please note you will need to install KDE Connect on Android
+kdeconnect-kde: for this app to work:
+kdeconnect-kde:
+kdeconnect-kde: https://play.google.com/store/apps/details?id=org.kde.kdeconnect_tp
+kdeconnect-kde:
+kdeconnect-kde:
diff --git a/kde/slack-desc/kdecoration b/kde/slack-desc/kdecoration
index 499a27b..79481ca 100644
--- a/kde/slack-desc/kdecoration
+++ b/kde/slack-desc/kdecoration
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdecoration: kdecoration (library to create themes for kwin)
kdecoration:
-kdecoration: This library makes it easier and more reliable to make themes
-kdecoration: for KWin, Plasma's window manager.
-kdecoration: It has impressive memory, performance and stability improvements.
+kdecoration: This library makes it easier and more reliable to make themes for
+kdecoration: KWin, Plasma's window manager. It has impressive memory, performance
+kdecoration: and stability improvements.
+kdecoration:
kdecoration:
kdecoration:
kdecoration:
kdecoration:
-kdecoration: For more information, visit: http://www.kde.org
kdecoration:
diff --git a/kde/slack-desc/kded b/kde/slack-desc/kded
index 98a2b88..4767063 100644
--- a/kde/slack-desc/kded
+++ b/kde/slack-desc/kded
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kded: kded (kded)
+kded: kded (Central daemon of KDE workspaces)
kded:
+kded: KDED stands for KDE Daemon. KDED runs in the background and performs a
+kded: number of small tasks. Some of these tasks are built in, others are
+kded: started on demand. Examples include checking for newly installed
+kded: software and checking for newly installed update files.
kded:
kded:
kded:
kded:
kded:
-kded:
-kded:
-kded:
-kded: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kdeedu-data b/kde/slack-desc/kdeedu-data
index a55d9a6..b22384f 100644
--- a/kde/slack-desc/kdeedu-data
+++ b/kde/slack-desc/kdeedu-data
@@ -15,5 +15,5 @@ kdeedu-data:
kdeedu-data:
kdeedu-data:
kdeedu-data:
-kdeedu-data: For more information, visit: http://www.kde.org
+kdeedu-data:
kdeedu-data:
diff --git a/kde/slack-desc/kdegraphics-mobipocket b/kde/slack-desc/kdegraphics-mobipocket
index 2704d36..fedd14d 100644
--- a/kde/slack-desc/kdegraphics-mobipocket
+++ b/kde/slack-desc/kdegraphics-mobipocket
@@ -10,7 +10,7 @@ kdegraphics-mobipocket: kdegraphics-mobipocket (Mobipocket support for Okular)
kdegraphics-mobipocket:
kdegraphics-mobipocket: Mobipocket support for Okular.
kdegraphics-mobipocket:
-kdegraphics-mobipocket: For more information, visit: http://www.kde.org/
+kdegraphics-mobipocket:
kdegraphics-mobipocket:
kdegraphics-mobipocket:
kdegraphics-mobipocket:
diff --git a/kde/slack-desc/kdegraphics-thumbnailers b/kde/slack-desc/kdegraphics-thumbnailers
index 1f781d5..c6807f1 100644
--- a/kde/slack-desc/kdegraphics-thumbnailers
+++ b/kde/slack-desc/kdegraphics-thumbnailers
@@ -6,12 +6,12 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kdegraphics-thumbnailers: kdegraphics-thumbnailers (thumbnailers for various graphics formats)
+kdegraphics-thumbnailers: kdegraphics-thumbnailers (image thumbnailers)
+kdegraphics-thumbnailers:
+kdegraphics-thumbnailers: These plugins allow KDE software to create thumbnails for several
+kdegraphics-thumbnailers: graphic file formats.
kdegraphics-thumbnailers:
-kdegraphics-thumbnailers: These plugins allow KDE software to create thumbnails for
-kdegraphics-thumbnailers: several advanced graphic file formats.
kdegraphics-thumbnailers:
-kdegraphics-thumbnailers: For more information, visit: http://www.kde.org
kdegraphics-thumbnailers:
kdegraphics-thumbnailers:
kdegraphics-thumbnailers:
diff --git a/kde/slack-desc/kdelibs4support b/kde/slack-desc/kdelibs4support
index 13c929e..684a2bc 100644
--- a/kde/slack-desc/kdelibs4support
+++ b/kde/slack-desc/kdelibs4support
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdelibs4support: kdelibs4support (KDE 4 support)
kdelibs4support:
+kdelibs4support: kdelibs4support provides legacy support for kdelibs 4 compatibility
+kdelibs4support: such as code and utilities to ease the transition from kdelibs 4 to
+kdelibs4support: KDE Frameworks 5. This includes CMake macros and C++ classes whose
+kdelibs4support: functionality has been replaced by code in CMake, Qt and other
+kdelibs4support: frameworks.
kdelibs4support:
kdelibs4support:
kdelibs4support:
kdelibs4support:
-kdelibs4support:
-kdelibs4support:
-kdelibs4support:
-kdelibs4support:
-kdelibs4support: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kdenetwork-filesharing b/kde/slack-desc/kdenetwork-filesharing
index 1233eed..02cfcfe 100644
--- a/kde/slack-desc/kdenetwork-filesharing
+++ b/kde/slack-desc/kdenetwork-filesharing
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdenetwork-filesharing: kdenetwork-filesharing (share a directory with the local network)
kdenetwork-filesharing:
-kdenetwork-filesharing: Konqueror properties dialog plugin to share a directory
-kdenetwork-filesharing: with the local network.
+kdenetwork-filesharing: Konqueror properties dialog plugin to share a directory with the local
+kdenetwork-filesharing: network.
+kdenetwork-filesharing:
kdenetwork-filesharing:
kdenetwork-filesharing:
kdenetwork-filesharing:
kdenetwork-filesharing:
kdenetwork-filesharing:
-kdenetwork-filesharing: For more information, visit: http://www.kde.org
kdenetwork-filesharing:
diff --git a/kde/slack-desc/kdenlive b/kde/slack-desc/kdenlive
index 7d1b619..4900af6 100644
--- a/kde/slack-desc/kdenlive
+++ b/kde/slack-desc/kdenlive
@@ -10,10 +10,10 @@ kdenlive: kdenlive (non-linear video editor)
kdenlive:
kdenlive: A non-linear video editor for Linux using the MLT video framework.
kdenlive:
+kdenlive: Homepage: http://www.kdenlive.org
kdenlive:
kdenlive:
kdenlive:
kdenlive:
kdenlive:
-kdenlive: For more information, visit: http://www.kdenlive.org
kdenlive:
diff --git a/kde/slack-desc/kdepim b/kde/slack-desc/kdepim
index 7a66c17..08e3bbb 100644
--- a/kde/slack-desc/kdepim
+++ b/kde/slack-desc/kdepim
@@ -5,7 +5,7 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kdepim: kdepim (KDE Personal Information Management applications)
kdepim:
kdepim: The KDE-PIM project aims to bring together those who wish to help
diff --git a/kde/slack-desc/kdepim-addons b/kde/slack-desc/kdepim-addons
index ac3e2d3..28e4778 100644
--- a/kde/slack-desc/kdepim-addons
+++ b/kde/slack-desc/kdepim-addons
@@ -15,5 +15,5 @@ kdepim-addons:
kdepim-addons:
kdepim-addons:
kdepim-addons:
-kdepim-addons: Home page: http://www.kde.org/
+kdepim-addons:
kdepim-addons:
diff --git a/kde/slack-desc/kdepim-apps-libs b/kde/slack-desc/kdepim-apps-libs
index d20bb3b..28be245 100644
--- a/kde/slack-desc/kdepim-apps-libs
+++ b/kde/slack-desc/kdepim-apps-libs
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdepim-apps-libs: kdepim-apps-libs (KDE PIM mail related libraries)
kdepim-apps-libs:
-kdepim-apps-libs: kdepim-apps-libs package contains KDE PIM mail
-kdepim-apps-libs: related libraries.
+kdepim-apps-libs: The kdepim-apps-libs package contains KDE PIM mail related libraries.
+kdepim-apps-libs:
+kdepim-apps-libs:
kdepim-apps-libs:
kdepim-apps-libs:
kdepim-apps-libs:
kdepim-apps-libs:
kdepim-apps-libs:
-kdepim-apps-libs: Home page: http://www.kde.org/
kdepim-apps-libs:
diff --git a/kde/slack-desc/kdepim-runtime b/kde/slack-desc/kdepim-runtime
index cb0ac6e..a3d90b2 100644
--- a/kde/slack-desc/kdepim-runtime
+++ b/kde/slack-desc/kdepim-runtime
@@ -5,7 +5,7 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kdepim-runtime: kdepim-runtime (KDE Personal Information Management runtime)
kdepim-runtime:
kdepim-runtime: The KDE-PIM project aims to bring together those who wish to help
diff --git a/kde/slack-desc/kdesdk b/kde/slack-desc/kdesdk
index f954a27..5a8b267 100644
--- a/kde/slack-desc/kdesdk
+++ b/kde/slack-desc/kdesdk
@@ -5,11 +5,11 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kdesdk: kdesdk (KDE SDK)
kdesdk:
-kdesdk: KDE Software Development Kit. This is a collection of applications
-kdesdk: and tools used to develop on the KDE Platform. It also contains
+kdesdk: KDE Software Development Kit. This is a collection of applications
+kdesdk: and tools used to develop on the KDE Platform. It also contains
kdesdk: example code for use in learning KDE programming or starting a new
kdesdk: KDE application.
kdesdk:
diff --git a/kde/slack-desc/kdesdk-kioslaves b/kde/slack-desc/kdesdk-kioslaves
index 124fa29..2128872 100644
--- a/kde/slack-desc/kdesdk-kioslaves
+++ b/kde/slack-desc/kdesdk-kioslaves
@@ -15,5 +15,5 @@ kdesdk-kioslaves:
kdesdk-kioslaves:
kdesdk-kioslaves:
kdesdk-kioslaves:
-kdesdk-kioslaves: For more information, visit: http://www.kde.org
+kdesdk-kioslaves:
kdesdk-kioslaves:
diff --git a/kde/slack-desc/kdesdk-thumbnailers b/kde/slack-desc/kdesdk-thumbnailers
index 4ff1066..99f75f1 100644
--- a/kde/slack-desc/kdesdk-thumbnailers
+++ b/kde/slack-desc/kdesdk-thumbnailers
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdesdk-thumbnailers: kdesdk-thumbnailers (thumbnailers for KDE)
kdesdk-thumbnailers:
-kdesdk-thumbnailers: Thumbnailers for KDE, including gnu gettext po translation
-kdesdk-thumbnailers: files and gettext translation templates.
+kdesdk-thumbnailers: Thumbnailers for KDE, including gnu gettext po translation files and
+kdesdk-thumbnailers: gettext translation templates.
+kdesdk-thumbnailers:
kdesdk-thumbnailers:
kdesdk-thumbnailers:
kdesdk-thumbnailers:
kdesdk-thumbnailers:
kdesdk-thumbnailers:
-kdesdk-thumbnailers: For more information, visit: http://www.kde.org
kdesdk-thumbnailers:
diff --git a/kde/slack-desc/kdesignerplugin b/kde/slack-desc/kdesignerplugin
index a008191..08d1f04 100644
--- a/kde/slack-desc/kdesignerplugin
+++ b/kde/slack-desc/kdesignerplugin
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kdesignerplugin: kdesignerplugin (kdesignerplugin)
+kdesignerplugin: kdesignerplugin (Integrate custom widgets with Qt Designer)
kdesignerplugin:
+kdesignerplugin: This framework provides a utility (kgendesignerplugin) that can be
+kdesignerplugin: used to generate plugins for Qt Designer from ini-style description
+kdesignerplugin: files.
kdesignerplugin:
kdesignerplugin:
kdesignerplugin:
kdesignerplugin:
kdesignerplugin:
kdesignerplugin:
-kdesignerplugin:
-kdesignerplugin:
-kdesignerplugin: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kdesu b/kde/slack-desc/kdesu
index 91a372c..994ee4f 100644
--- a/kde/slack-desc/kdesu
+++ b/kde/slack-desc/kdesu
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kdesu: kdesu (kdesu)
+kdesu: kdesu (run shell commands as root)
kdesu:
+kdesu: KDESU provides functionality for building GUI front ends for (password
+kdesu: asking) console mode programs. For example, kdesu and kdessh use it to
+kdesu: interface with su and ssh respectively.
kdesu:
kdesu:
kdesu:
kdesu:
kdesu:
kdesu:
-kdesu:
-kdesu:
-kdesu: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kdeutils b/kde/slack-desc/kdeutils
index 927ac43..91f09b9 100644
--- a/kde/slack-desc/kdeutils
+++ b/kde/slack-desc/kdeutils
@@ -5,7 +5,7 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler---------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kdeutils: kdeutils (KDE Utilities)
kdeutils:
kdeutils: This package includes utilities for the KDE Software Compilation.
diff --git a/kde/slack-desc/kdewebdev b/kde/slack-desc/kdewebdev
index 294ef22..66b1cc6 100644
--- a/kde/slack-desc/kdewebdev
+++ b/kde/slack-desc/kdewebdev
@@ -5,11 +5,11 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler--------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kdewebdev: kdewebdev (web development package for the KDE Platform)
kdewebdev:
-kdewebdev: The kdewebdev package contains applications which are useful for
-kdewebdev: web development.
+kdewebdev: The kdewebdev package contains applications which are useful for web
+kdewebdev: development.
kdewebdev:
kdewebdev:
kdewebdev:
diff --git a/kde/slack-desc/kdewebkit b/kde/slack-desc/kdewebkit
index 7bf1eae..d3f30f4 100644
--- a/kde/slack-desc/kdewebkit
+++ b/kde/slack-desc/kdewebkit
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kdewebkit: kdewebkit (kdewebkit)
+kdewebkit: kdewebkit (WebKit rendering engine for KDE)
kdewebkit:
+kdewebkit: This library provides KDE integration of the QtWebKit library. If you
+kdewebkit: are using QtWebKit in your KDE application, you are encouraged to use
+kdewebkit: this layer instead of using the QtWebKit classes directly. In
+kdewebkit: particular, you should use KWebView in place of QWebView,
+kdewebkit: KGraphicsWebView in place of QGraphicsWebView and KWebPage in place of
+kdewebkit: QWebPage. See the documentation for more information.
kdewebkit:
kdewebkit:
kdewebkit:
-kdewebkit:
-kdewebkit:
-kdewebkit:
-kdewebkit:
-kdewebkit:
-kdewebkit: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kdf b/kde/slack-desc/kdf
index 896ade4..cb5a935 100644
--- a/kde/slack-desc/kdf
+++ b/kde/slack-desc/kdf
@@ -12,7 +12,7 @@ kdf: kdf (KDiskFree) displays the available file devices (hard drive
kdf: partitions, floppy and CD/DVD drives, etc.) along with information on
kdf: their capacity, free space, type and mount point.
kdf:
-kdf: kdf's home page is: http://utils.kde.org/projects/kdf
+kdf: Homepage: http://utils.kde.org/projects/kdf
kdf:
kdf:
kdf:
diff --git a/kde/slack-desc/kdiagram b/kde/slack-desc/kdiagram
index 7cc07d1..602b4f0 100644
--- a/kde/slack-desc/kdiagram
+++ b/kde/slack-desc/kdiagram
@@ -10,10 +10,10 @@ kdiagram: kdiagram (libraries for creating business diagrams)
kdiagram:
kdiagram: Powerful libraries (KChart, KGantt) for creating business diagrams.
kdiagram:
+kdiagram: Homepage: https://github.com/KDE/kdiagram
kdiagram:
kdiagram:
kdiagram:
kdiagram:
kdiagram:
-kdiagram: For more information, visit: https://github.com/KDE/kdiagram
kdiagram:
diff --git a/kde/slack-desc/kdialog b/kde/slack-desc/kdialog
index a15c57b..43a21c4 100644
--- a/kde/slack-desc/kdialog
+++ b/kde/slack-desc/kdialog
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kdialog: kdialog (utility for displaying dialog boxes from shell scripts)
+kdialog: kdialog (shell dialog box utility)
kdialog:
kdialog: A utility for displaying dialog boxes from shell scripts.
kdialog:
@@ -15,5 +15,5 @@ kdialog:
kdialog:
kdialog:
kdialog:
-kdialog: Home page: http://www.kde.org/
+kdialog:
kdialog:
diff --git a/kde/slack-desc/kdiamond b/kde/slack-desc/kdiamond
index 4c2c7cc..d98f5c9 100644
--- a/kde/slack-desc/kdiamond
+++ b/kde/slack-desc/kdiamond
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kdiamond: kdiamond (three-in-a-row game for KDE)
kdiamond:
-kdiamond: KDiamond is a single player puzzle game. The object of the game is
-kdiamond: to build and remove lines of three similar diamonds.
+kdiamond: KDiamond is a single player puzzle game. The object of the game is to
+kdiamond: build and remove lines of three similar diamonds.
+kdiamond:
kdiamond:
kdiamond:
kdiamond:
kdiamond:
kdiamond:
-kdiamond: For more information, visit: http://www.kde.org
kdiamond:
diff --git a/kde/slack-desc/kdnssd b/kde/slack-desc/kdnssd
index 109946e..0a87fba 100644
--- a/kde/slack-desc/kdnssd
+++ b/kde/slack-desc/kdnssd
@@ -15,5 +15,5 @@ kdnssd:
kdnssd:
kdnssd:
kdnssd:
-kdnssd: For more information, visit: http://www.kde.org
+kdnssd:
kdnssd:
diff --git a/kde/slack-desc/kdoctools b/kde/slack-desc/kdoctools
index 15dbb7a..d558b39 100644
--- a/kde/slack-desc/kdoctools
+++ b/kde/slack-desc/kdoctools
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kdoctools: kdoctools (kdoctools)
+kdoctools: kdoctools (Create documentation from DocBook)
kdoctools:
+kdoctools: KDocTools provides tools to generate documentation in various formats
+kdoctools: from DocBook files.
kdoctools:
kdoctools:
kdoctools:
@@ -15,5 +17,3 @@ kdoctools:
kdoctools:
kdoctools:
kdoctools:
-kdoctools:
-kdoctools: Homepage: http://kde.org/
diff --git a/kde/slack-desc/keditbookmarks b/kde/slack-desc/keditbookmarks
index 343b621..5f31428 100644
--- a/kde/slack-desc/keditbookmarks
+++ b/kde/slack-desc/keditbookmarks
@@ -15,5 +15,5 @@ keditbookmarks:
keditbookmarks:
keditbookmarks:
keditbookmarks:
-keditbookmarks: Home page: http://www.kde.org/
+keditbookmarks:
keditbookmarks:
diff --git a/kde/slack-desc/kemoticons b/kde/slack-desc/kemoticons
index 7f8ca76..ad2c780 100644
--- a/kde/slack-desc/kemoticons
+++ b/kde/slack-desc/kemoticons
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kemoticons: kemoticons (kemoticons)
+kemoticons: kemoticons (Convert text emoticons to graphical emoticons)
kemoticons:
+kemoticons: KEmoticons converts emoticons from text to a graphical representation
+kemoticons: with images in HTML. It supports setting different themes for
+kemoticons: emoticons coming from different providers.
kemoticons:
kemoticons:
kemoticons:
kemoticons:
kemoticons:
kemoticons:
-kemoticons:
-kemoticons:
-kemoticons: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kfilemetadata5 b/kde/slack-desc/kfilemetadata5
index 7798f2f..fda33d6 100644
--- a/kde/slack-desc/kfilemetadata5
+++ b/kde/slack-desc/kfilemetadata5
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kfilemetadata5: kfilemetadata5 (a library for extracting file metadata)
kfilemetadata5:
-kfilemetadata5: kfilemetadata5 is a library for extracting file metadata.
+kfilemetadata5: KFileMetaData provides a simple library for extracting the text and
+kfilemetadata5: metadata from a number of different files. This library is typically
+kfilemetadata5: used by file indexers to retreive the metadata. This library can also
+kfilemetadata5: be used by applications to write metadata.
kfilemetadata5:
kfilemetadata5:
kfilemetadata5:
kfilemetadata5:
kfilemetadata5:
-kfilemetadata5:
-kfilemetadata5: For more information, visit: http://www.kde.org
-kfilemetadata5:
diff --git a/kde/slack-desc/kfind b/kde/slack-desc/kfind
index b2b61a1..d2106ed 100644
--- a/kde/slack-desc/kfind
+++ b/kde/slack-desc/kfind
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kfind: kfind (find files and directories in KDE)
kfind:
-kfind: Find files and directories in KDE.
+kfind: The Find Files tool is a useful method of searching for specific files
+kfind: on your computer, or for searching for files that match a pattern. An
+kfind: example of this could include searching for files of a particular type
+kfind: or with certain letters in the filename, or that contain a certain
+kfind: piece of text in their contents.
kfind:
kfind:
kfind:
kfind:
-kfind:
-kfind:
-kfind: Home page: http://www.kde.org/
-kfind:
diff --git a/kde/slack-desc/kfloppy b/kde/slack-desc/kfloppy
index 761f227..a75d375 100644
--- a/kde/slack-desc/kfloppy
+++ b/kde/slack-desc/kfloppy
@@ -11,7 +11,7 @@ kfloppy:
kfloppy: KFloppy is a utility that provides a straightforward graphical means
kfloppy: to format 3.5" and 5.25" floppy disks.
kfloppy:
-kfloppy: kfloppy's home page is: http://utils.kde.org/projects/kfloppy
+kfloppy: Homepage: http://utils.kde.org/projects/kfloppy
kfloppy:
kfloppy:
kfloppy:
diff --git a/kde/slack-desc/kfourinline b/kde/slack-desc/kfourinline
index 78b18d8..3f34a96 100644
--- a/kde/slack-desc/kfourinline
+++ b/kde/slack-desc/kfourinline
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kfourinline: kfourinline (four-in-a-row board game)
kfourinline:
-kfourinline: KFourInLine is a board game for two players based on the
-kfourinline: Connect-Four game. The players try to build up a row of
-kfourinline: four pieces using different strategies.
+kfourinline: KFourInLine is a board game for two players based on the Connect-Four
+kfourinline: game. The players try to build up a row of four pieces using different
+kfourinline: strategies.
+kfourinline:
kfourinline:
kfourinline:
kfourinline:
kfourinline:
-kfourinline: For more information, visit: http://www.kde.org
kfourinline:
diff --git a/kde/slack-desc/kgamma5 b/kde/slack-desc/kgamma5
index 054342a..8a136ea 100644
--- a/kde/slack-desc/kgamma5
+++ b/kde/slack-desc/kgamma5
@@ -10,7 +10,7 @@ kgamma5: kgamma5 (display gamma configuration)
kgamma5:
kgamma5: A KDE system settings module to configure display gamma.
kgamma5:
-kgamma5: For more information, visit: http://www.kde.org
+kgamma5:
kgamma5:
kgamma5:
kgamma5:
diff --git a/kde/slack-desc/kgeography b/kde/slack-desc/kgeography
index cb03bc5..32ecb64 100644
--- a/kde/slack-desc/kgeography
+++ b/kde/slack-desc/kgeography
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kgeography: kgeography (a geography learning tool)
kgeography:
-kgeography: KGeography is a geography learning tool.
-kgeography: Right now it has three usage modes:
-kgeography: * Browse the maps clicking in a map division to see it's name
-kgeography: * The game tells you a map division name and you have to click on it
-kgeography: * The game shows you a map division flag and you have to guess
-kgeography: its name
+kgeography: KGeography is a geography learning tool with three usage modes:
+kgeography:
+kgeography: Browse the maps clicking in a map division to see it's name.
+kgeography: The game tells you a map division name and you have to click on it.
+kgeography: The game shows you a map division flag and you have to guess its name.
+kgeography:
+kgeography: Homepage: http://kgeography.berlios.de/
kgeography:
-kgeography: For more information, visit: http://kgeography.berlios.de/
kgeography:
diff --git a/kde/slack-desc/kget b/kde/slack-desc/kget
index 3103122..c6a0366 100644
--- a/kde/slack-desc/kget
+++ b/kde/slack-desc/kget
@@ -15,5 +15,5 @@ kget:
kget:
kget:
kget:
-kget: For more information, visit: http://www.kde.org
+kget:
kget:
diff --git a/kde/slack-desc/kglobalaccel b/kde/slack-desc/kglobalaccel
index 2d84ff4..78d77e5 100644
--- a/kde/slack-desc/kglobalaccel
+++ b/kde/slack-desc/kglobalaccel
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kglobalaccel: kglobalaccel (kglobalaccel)
+kglobalaccel: kglobalaccel (Global desktop keyboard shortcuts)
kglobalaccel:
+kglobalaccel: KGlobalAccel allows you to have global accelerators that are
+kglobalaccel: independent of the focused window. Unlike regular shortcuts, the
+kglobalaccel: application's window does not need focus for them to be activated.
kglobalaccel:
kglobalaccel:
kglobalaccel:
kglobalaccel:
kglobalaccel:
kglobalaccel:
-kglobalaccel:
-kglobalaccel:
-kglobalaccel: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kgoldrunner b/kde/slack-desc/kgoldrunner
index 6b067c1..4f31499 100644
--- a/kde/slack-desc/kgoldrunner
+++ b/kde/slack-desc/kgoldrunner
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kgoldrunner: kgoldrunner (Hunt gold, dodge enemies and solve puzzles)
kgoldrunner:
-kgoldrunner: KGoldrunner is a maze-threading game with a puzzle flavor.
-kgoldrunner: It has hundreds of levels where pieces of gold must be collected,
-kgoldrunner: with enemies in hot pursuit.
+kgoldrunner: KGoldrunner is a maze-threading game with a puzzle flavor. It has
+kgoldrunner: hundreds of levels where pieces of gold must be collected, with
+kgoldrunner: enemies in hot pursuit.
+kgoldrunner:
kgoldrunner:
kgoldrunner:
kgoldrunner:
kgoldrunner:
-kgoldrunner: For more information, visit: http://www.kde.org
kgoldrunner:
diff --git a/kde/slack-desc/kgpg b/kde/slack-desc/kgpg
index 51975cd..5dd7769 100644
--- a/kde/slack-desc/kgpg
+++ b/kde/slack-desc/kgpg
@@ -10,7 +10,7 @@ kgpg: kgpg (KDE GUI for GnuPG)
kgpg:
kgpg: KGpg is a simple interface for GnuPG, a powerful encryption utility.
kgpg:
-kgpg: kgpg's home page is: http://utils.kde.org/projects/kgpg
+kgpg: Homepage: http://utils.kde.org/projects/kgpg
kgpg:
kgpg:
kgpg:
diff --git a/kde/slack-desc/kguiaddons b/kde/slack-desc/kguiaddons
index e181d67..afb4ef4 100644
--- a/kde/slack-desc/kguiaddons
+++ b/kde/slack-desc/kguiaddons
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kguiaddons: kguiaddons (kguiaddons)
+kguiaddons: kguiaddons (KDE GUI Addons)
kguiaddons:
+kguiaddons: The KDE GUI addons provide utilities for graphical user interfaces in
+kguiaddons: the areas of colors, fonts, text, images, and keyboard input.
kguiaddons:
kguiaddons:
kguiaddons:
@@ -15,5 +17,3 @@ kguiaddons:
kguiaddons:
kguiaddons:
kguiaddons:
-kguiaddons:
-kguiaddons: Homepage: http://kde.org/
diff --git a/kde/slack-desc/khangman b/kde/slack-desc/khangman
index eaf9a85..430e0ea 100644
--- a/kde/slack-desc/khangman
+++ b/kde/slack-desc/khangman
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-khangman: khangman (classical hangman game)
+khangman: khangman (hangman game)
khangman:
khangman: KHangman is the classical hangman game. The child should guess a word
-khangman: letter by letter. At each miss, the picture of a hangman appears.
+khangman: letter by letter. At each miss, the picture of a hangman appears.
khangman: After 10 tries, if the word is not guessed, the game is over and
khangman: the answer is displayed.
khangman:
-khangman: For more information, visit: http://edu.kde.org/
+khangman:
khangman:
khangman:
khangman:
diff --git a/kde/slack-desc/khelpcenter b/kde/slack-desc/khelpcenter
index 8fad4a2..0d01cb9 100644
--- a/kde/slack-desc/khelpcenter
+++ b/kde/slack-desc/khelpcenter
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
khelpcenter: khelpcenter (KDE help center)
khelpcenter:
-khelpcenter: The KDE Help Center displays documentation on how to
-khelpcenter: use the KDE plasma workspaces and applications, as
-khelpcenter: well as UNIX man and info pages. It can search through
-khelpcenter: documentation using the 'htdig' package.
+khelpcenter: The KDE Help Center displays documentation on how to use the KDE
+khelpcenter: plasma workspaces and applications, as well as man and info pages.
+khelpcenter: It can search through documentation using the 'htdig' package.
+khelpcenter:
+khelpcenter:
khelpcenter:
khelpcenter:
khelpcenter:
khelpcenter:
-khelpcenter: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kholidays b/kde/slack-desc/kholidays
index 06fa51c..5db18cd 100644
--- a/kde/slack-desc/kholidays
+++ b/kde/slack-desc/kholidays
@@ -9,11 +9,11 @@
kholidays: kholidays (KDE library for regional holiday information)
kholidays:
kholidays: The KHolidays library in kdepimlibs provides details on public
-kholidays: holidays for a given country and date range.
-kholidays: A separate library and file format is required as iCalendar is not
-kholidays: capable of expressing recurrence rules for all possible holidays.
+kholidays: holidays for a given country and date range. A separate library and
+kholidays: file format is required as iCalendar is not capable of expressing
+kholidays: recurrence rules for all possible holidays.
+kholidays:
kholidays:
kholidays:
kholidays:
-kholidays: Home page: http://www.kde.org/
kholidays:
diff --git a/kde/slack-desc/khotkeys b/kde/slack-desc/khotkeys
index e523744..d737837 100644
--- a/kde/slack-desc/khotkeys
+++ b/kde/slack-desc/khotkeys
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-khotkeys: khotkeys (khotkeys)
+khotkeys: khotkeys (custom shortcuts)
+khotkeys:
+khotkeys: The Custom Shortcuts systemsettings module allows you to configure
+khotkeys: custom keyboard shortcuts and mouse gestures. You can use them to
+khotkeys: control applications, run specific commands, and more.
+khotkeys:
khotkeys:
-khotkeys: The Custom Shortcuts systemsettings module allows you to
-khotkeys: configure custom keyboard shortcuts and mouse gestures. You
-khotkeys: can use them to control applications, run specific commands,
-khotkeys: and more.
khotkeys:
khotkeys:
khotkeys:
khotkeys:
-khotkeys: Homepage: http://kde.org/
diff --git a/kde/slack-desc/khtml b/kde/slack-desc/khtml
index 493ed69..b4c4332 100644
--- a/kde/slack-desc/khtml
+++ b/kde/slack-desc/khtml
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-khtml: khtml (khtml)
+khtml: khtml (HTML rendering engine)
khtml:
+khtml: KHTML is a web rendering engine based on the KParts technology and
+khtml: using KJS for JavaScript support.
khtml:
khtml:
khtml:
@@ -15,5 +17,3 @@ khtml:
khtml:
khtml:
khtml:
-khtml:
-khtml: Homepage: http://kde.org/
diff --git a/kde/slack-desc/ki18n b/kde/slack-desc/ki18n
index 8c2e9d3..49b80c2 100644
--- a/kde/slack-desc/ki18n
+++ b/kde/slack-desc/ki18n
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-ki18n: ki18n (ki18n)
+ki18n: ki18n (UI text internationalization)
ki18n:
+ki18n: KI18n provides functionality for internationalizing user interface
+ki18n: text in applications, based on the GNU Gettext translation system.
+ki18n: It wraps the standard Gettext functionality, so that the programmers
+ki18n: and translators can use the familiar Gettext tools and workflows.
+ki18n: KI18n also provides argument capturing, customizable markup, and
+ki18n: translation scripting.
ki18n:
ki18n:
ki18n:
-ki18n:
-ki18n:
-ki18n:
-ki18n:
-ki18n:
-ki18n: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kiconthemes b/kde/slack-desc/kiconthemes
index 69e43fd..44e4d46 100644
--- a/kde/slack-desc/kiconthemes
+++ b/kde/slack-desc/kiconthemes
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kiconthemes: kiconthemes (kiconthemes)
+kiconthemes: kiconthemes (Icon GUI utilities)
kiconthemes:
+kiconthemes: The KIconThemes library contains classes to improve the handling of
+kiconthemes: icons in applications using the KDE Frameworks.
kiconthemes:
kiconthemes:
kiconthemes:
@@ -15,5 +17,3 @@ kiconthemes:
kiconthemes:
kiconthemes:
kiconthemes:
-kiconthemes:
-kiconthemes: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kid3 b/kde/slack-desc/kid3
new file mode 100644
index 0000000..9a2ecc1
--- /dev/null
+++ b/kde/slack-desc/kid3
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+kid3: kid3 (audio tagger)
+kid3:
+kid3: If you want to easily tag multiple MP3, Ogg/Vorbis, FLAC, MPC,
+kid3: MP4/AAC, MP2, Opus, Speex, TrueAudio, WavPack, WMA, WAV and AIFF files
+kid3: (e.g. full albums) without typing the same information again and again
+kid3: and have control over both ID3v1 and ID3v2 tags, then Kid3 is the
+kid3: program you are looking for.
+kid3:
+kid3: Homepage: http://kid3.kde.org/
+kid3:
+kid3:
diff --git a/kde/slack-desc/kidentitymanagement b/kde/slack-desc/kidentitymanagement
index e3f8204..f0c5412 100644
--- a/kde/slack-desc/kidentitymanagement
+++ b/kde/slack-desc/kidentitymanagement
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kidentitymanagement: kidentitymanagement (the KIdentityManagement Library)
+kidentitymanagement: kidentitymanagement (Manage PIM identity)
kidentitymanagement:
kidentitymanagement: kidentitymanagement contains the KIdentityManagement Library.
kidentitymanagement:
@@ -15,5 +15,5 @@ kidentitymanagement:
kidentitymanagement:
kidentitymanagement:
kidentitymanagement:
-kidentitymanagement: Home page: http://www.kde.org/
+kidentitymanagement:
kidentitymanagement:
diff --git a/kde/slack-desc/kidletime b/kde/slack-desc/kidletime
index dd28a29..2116f6b 100644
--- a/kde/slack-desc/kidletime
+++ b/kde/slack-desc/kidletime
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kidletime: kidletime (kidletime)
+kidletime: kidletime (report system/user idle time)
kidletime:
+kidletime: KIdleTime is a singleton reporting information on idle time. It is
+kidletime: useful not only for finding out about the current idle time of the
+kidletime: system, but also for getting notified upon idle time events, such as
+kidletime: custom timeouts or user activity.
kidletime:
kidletime:
kidletime:
kidletime:
kidletime:
-kidletime:
-kidletime:
-kidletime:
-kidletime: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kig b/kde/slack-desc/kig
index 062fa2b..6d53887 100644
--- a/kde/slack-desc/kig
+++ b/kde/slack-desc/kig
@@ -12,7 +12,7 @@ kig: Kig is an application meant to allow high school students to
kig: interactively explore mathematical concepts, much like Dr.Geo, KGeo,
kig: KSeg and Cabri.
kig:
-kig: For more information, visit: http://edu.kde.org/kig/
+kig: Homepage: http://edu.kde.org/kig/
kig:
kig:
kig:
diff --git a/kde/slack-desc/kigo b/kde/slack-desc/kigo
index 3939e01..ec17269 100644
--- a/kde/slack-desc/kigo
+++ b/kde/slack-desc/kigo
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kigo: kigo (Go board game for KDE)
kigo:
-kigo: Kigo is an open-source implementation of the popular Go game.
-kigo: Go is a strategic board game for two players. It is also known as igo
+kigo: Kigo is an open-source implementation of the popular Go game. Go is a
+kigo: strategic board game for two players. It is also known as igo
kigo: (Japanese), weiqi or wei ch'i (Chinese) or baduk (Korean). Go is noted
-kigo: for being rich in strategic complexity despite its simple rules.
-kigo: The game is played by two players who alternately place black and
-kigo: white pieces on the vacant intersections of a grid of 19x19 lines
-kigo: (9x9 or 13x13 for easier games).
+kigo: for being rich in strategic complexity despite its simple rules. The
+kigo: game is played by two players who alternately place black and white
+kigo: pieces on the vacant intersections of a grid of 19x19 lines (9x9 or
+kigo: 13x13 for easier games).
+kigo:
kigo:
-kigo: For more information, visit: http://www.kde.org
diff --git a/kde/slack-desc/kile b/kde/slack-desc/kile
index a6cd1de..e51d9f4 100644
--- a/kde/slack-desc/kile
+++ b/kde/slack-desc/kile
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kile: kile (TeX/LaTeX frontend for Plasma5)
kile:
-kile: kile is a user-friendly TeX/LaTeX editor
-kile: for the KDE desktop environment.
+kile: kile is a user-friendly TeX/LaTeX editor for the KDE desktop environment.
+kile:
+kile: Homepage: https://kile.sourceforge.io
kile:
kile:
kile:
kile:
kile:
-kile: Home page: https://kile.sourceforge.io
kile:
diff --git a/kde/slack-desc/killbots b/kde/slack-desc/killbots
index 6acee05..20c6813 100644
--- a/kde/slack-desc/killbots
+++ b/kde/slack-desc/killbots
@@ -15,5 +15,5 @@ killbots:
killbots:
killbots:
killbots:
-killbots: For more information, visit: http://www.kde.org
+killbots:
killbots:
diff --git a/kde/slack-desc/kimageformats b/kde/slack-desc/kimageformats
index d926b6c..a396e21 100644
--- a/kde/slack-desc/kimageformats
+++ b/kde/slack-desc/kimageformats
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kimageformats: kimageformats (kimageformats)
+kimageformats: kimageformats (QImage format plugins)
kimageformats:
+kimageformats: This framework provides additional image format plugins for QtGui. As
+kimageformats: such it is not required for the compilation of any other software, but
+kimageformats: may be a runtime requirement for Qt-based software to support certain
+kimageformats: image formats.
kimageformats:
kimageformats:
kimageformats:
kimageformats:
kimageformats:
-kimageformats:
-kimageformats:
-kimageformats:
-kimageformats: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kimagemapeditor b/kde/slack-desc/kimagemapeditor
index 83a2fd1..a36dee0 100644
--- a/kde/slack-desc/kimagemapeditor
+++ b/kde/slack-desc/kimagemapeditor
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kimagemapeditor: kimagemapeditor (HTML image map editor)
kimagemapeditor:
-kimagemapeditor: HTML image map editor.
+kimagemapeditor: An HTML image map editor.
+kimagemapeditor:
kimagemapeditor:
kimagemapeditor:
kimagemapeditor:
kimagemapeditor:
kimagemapeditor:
kimagemapeditor:
-kimagemapeditor: Home page: http://www.kde.org/
kimagemapeditor:
diff --git a/kde/slack-desc/kimap b/kde/slack-desc/kimap
index dd28481..9348ef0 100644
--- a/kde/slack-desc/kimap
+++ b/kde/slack-desc/kimap
@@ -15,5 +15,5 @@ kimap:
kimap:
kimap:
kimap:
-kimap: Home page: http://www.kde.org/
+kimap:
kimap:
diff --git a/kde/slack-desc/kinfocenter b/kde/slack-desc/kinfocenter
index 27610d9..e3230a3 100644
--- a/kde/slack-desc/kinfocenter
+++ b/kde/slack-desc/kinfocenter
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kinfocenter: kinfocenter (provide information about your computer)
+kinfocenter: kinfocenter (info about your computer)
+kinfocenter:
+kinfocenter: KInfocenter gives you a host of information about your hardware and
+kinfocenter: its capabilities.
kinfocenter:
-kinfocenter: KInfocenter gives you a host of information about your
-kinfocenter: hardware and its capabilities.
kinfocenter:
kinfocenter:
kinfocenter:
kinfocenter:
kinfocenter:
kinfocenter:
-kinfocenter: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kinit b/kde/slack-desc/kinit
index cf11155..fa95f06 100644
--- a/kde/slack-desc/kinit
+++ b/kde/slack-desc/kinit
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kinit: kinit (kinit)
+kinit: kinit (startup helper library)
kinit:
+kinit: kdeinit is a process launcher somewhat similar to the famous init used
+kinit: for booting. It launches processes by forking and then loading a
+kinit: dynamic library which should contain a 'kdemain(...)' function. Using
+kinit: kdeinit to launch KDE applications makes starting a typical KDE
+kinit: application 2.5 times faster and reduces memory consumption.
kinit:
kinit:
kinit:
kinit:
-kinit:
-kinit:
-kinit:
-kinit:
-kinit: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kio b/kde/slack-desc/kio
index 1608c7c..a455bfd 100644
--- a/kde/slack-desc/kio
+++ b/kde/slack-desc/kio
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kio: kio (kio)
+kio: kio (network transparent file library)
kio:
+kio: This framework implements almost all the file management functions you
+kio: will ever need. In fact, the KDE file manager (Dolphin) and the KDE
+kio: file dialog also use this to provide network-enabled file management.
+kio: It supports accessing files locally as well as via HTTP and FTP out of
+kio: the box and can be extended by plugins to support other protocols as
+kio: well. There are a variety of plugins available, e.g. to support access
+kio: via SSH.
kio:
kio:
-kio:
-kio:
-kio:
-kio:
-kio:
-kio:
-kio: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kio-extras b/kde/slack-desc/kio-extras
index bc27db3..1b68693 100644
--- a/kde/slack-desc/kio-extras
+++ b/kde/slack-desc/kio-extras
@@ -8,7 +8,8 @@
|-----handy-ruler------------------------------------------------------|
kio-extras: kio-extras (Additional components for KIO)
kio-extras:
-kio-extras: Additional components to increase the functionality of KIO
+kio-extras: Additional components to increase the functionality of KIO.
+kio-extras:
kio-extras:
kio-extras:
kio-extras:
@@ -16,4 +17,3 @@ kio-extras:
kio-extras:
kio-extras:
kio-extras:
-kio-extras: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kipi-plugins b/kde/slack-desc/kipi-plugins
index 7b4f0e1..0807d60 100644
--- a/kde/slack-desc/kipi-plugins
+++ b/kde/slack-desc/kipi-plugins
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kipi-plugins: kipi-plugins (graphics and image plugins)
kipi-plugins:
+kipi-plugins: A collection of plugins extending the KDE graphics and image
+kipi-plugins: applications.
kipi-plugins:
-kipi-plugins: A collection of plugins extending the KDE graphics and
-kipi-plugins: image applications.
+kipi-plugins: Homepage: https://userbase.kde.org/KIPI
kipi-plugins:
kipi-plugins:
kipi-plugins:
kipi-plugins:
-kipi-plugins: Home page: https://userbase.kde.org/KIPI
kipi-plugins:
diff --git a/kde/slack-desc/kirigami-gallery b/kde/slack-desc/kirigami-gallery
index 33b4fbf..5bc01bc 100644
--- a/kde/slack-desc/kirigami-gallery
+++ b/kde/slack-desc/kirigami-gallery
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kirigami-gallery: kirigami-gallery (Gallery application built using Kirigami)
kirigami-gallery:
-kirigami-gallery: Kirigami-gallery is an example gallery application
-kirigami-gallery: built using Kirigami.
+kirigami-gallery: Kirigami-gallery is an example gallery application built using
+kirigami-gallery: Kirigami.
kirigami-gallery:
+kirigami-gallery: Homepage: https://www.kde.org/products/kirigami/
kirigami-gallery:
kirigami-gallery:
kirigami-gallery:
kirigami-gallery:
-kirigami-gallery: Home page: https://www.kde.org/products/kirigami/
kirigami-gallery:
diff --git a/kde/slack-desc/kirigami2 b/kde/slack-desc/kirigami2
index 5a4c4d8..26b733b 100644
--- a/kde/slack-desc/kirigami2
+++ b/kde/slack-desc/kirigami2
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kirigami2: kirigami2 (interface components for QtQuick)
kirigami2:
+kirigami2: Kirigami is a set of user interface components created to enable the
+kirigami2: creation of pleasant, efficient applications by KDE's Plasma team and
+kirigami2: the KDE Visual Design Group.
+kirigami2:
kirigami2:
-kirigami2: Kirigami is a set of user interface components created to enable
-kirigami2: the creation of pleasant, efficient applications,
-kirigami2: by KDE's Plasma team and the KDE Visual Design Group.
kirigami2:
kirigami2:
kirigami2:
-kirigami2: Home page: http://www.kde.org/
kirigami2:
diff --git a/kde/slack-desc/kiriki b/kde/slack-desc/kiriki
index cc09bbf..d9b70fa 100644
--- a/kde/slack-desc/kiriki
+++ b/kde/slack-desc/kiriki
@@ -9,11 +9,11 @@
kiriki: kiriki (yahtzee-like dice game for KDE)
kiriki:
kiriki: Kiriki is an addictive and fun dice game for KDE, designed to be
-kiriki: played by as many as six players. Participants have to collect points
+kiriki: played by as many as six players. Participants have to collect points
kiriki: by rolling five dice for up to three times per single turn.
kiriki:
kiriki:
kiriki:
kiriki:
-kiriki: For more information, visit: http://www.kde.org
+kiriki:
kiriki:
diff --git a/kde/slack-desc/kitemmodels b/kde/slack-desc/kitemmodels
index 74b7bd2..80daba3 100644
--- a/kde/slack-desc/kitemmodels
+++ b/kde/slack-desc/kitemmodels
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kitemmodels: kitemmodels (kitemmodels)
+kitemmodels: kitemmodels (Qt model-view extensions)
kitemmodels:
+kitemmodels: KItemModels is a set of item models extending the Qt model-view
+kitemmodels: framework.
kitemmodels:
kitemmodels:
kitemmodels:
@@ -15,5 +17,3 @@ kitemmodels:
kitemmodels:
kitemmodels:
kitemmodels:
-kitemmodels:
-kitemmodels: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kitemviews b/kde/slack-desc/kitemviews
index 3f2f2e3..1d6ddb5 100644
--- a/kde/slack-desc/kitemviews
+++ b/kde/slack-desc/kitemviews
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kitemviews: kitemviews (kitemviews)
+kitemviews: kitemviews (Qt item-view extensions)
kitemviews:
+kitemviews: KItemViews includes a set of views, which can be used with item
+kitemviews: models. It includes views for categorizing lists and to add search
+kitemviews: filters to flat and hierarchical lists.
kitemviews:
kitemviews:
kitemviews:
kitemviews:
kitemviews:
kitemviews:
-kitemviews:
-kitemviews:
-kitemviews: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kiten b/kde/slack-desc/kiten
index a2a60f4..7af04b3 100644
--- a/kde/slack-desc/kiten
+++ b/kde/slack-desc/kiten
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kiten: kiten (a tool to learn Japanese)
-kiten:
-kiten: Kiten is a tool to learn Japanese.
-kiten:
-kiten: For more information, visit: http://edu.kde.org/
-kiten:
+kiten: kiten (Japanese reference tool)
kiten:
+kiten: Kiten is a Japanese reference tool. Kiten works mainly as a Japanese
+kiten: -> English dictionary, but it works from English -> Japanese too. This
+kiten: means you can write in English, Hiragana, Katakana, or Kanji to search
+kiten: in the dictionaries.
kiten:
+kiten: Homepage: https://www.kde.org/applications/education/kiten
kiten:
kiten:
kiten:
diff --git a/kde/slack-desc/kitinerary b/kde/slack-desc/kitinerary
index b6c9781..e6f9556 100644
--- a/kde/slack-desc/kitinerary
+++ b/kde/slack-desc/kitinerary
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kitinerary: kitinerary (library for itinerary data model/extraction)
+kitinerary: kitinerary (library for itinerary data)
kitinerary:
kitinerary: Data model and extraction system for travel reservation information.
kitinerary:
+kitinerary: Homepage: https://api.kde.org/kdepim/kitinerary/html/index.html
kitinerary:
kitinerary:
kitinerary:
kitinerary:
kitinerary:
-kitinerary: Home page: https://community.kde.org/KDE_PIM
kitinerary:
diff --git a/kde/slack-desc/kjobwidgets b/kde/slack-desc/kjobwidgets
index b775eb1..917f069 100644
--- a/kde/slack-desc/kjobwidgets
+++ b/kde/slack-desc/kjobwidgets
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kjobwidgets: kjobwidgets (kjobwidgets)
+kjobwidgets: kjobwidgets (job progress widgets)
kjobwidgets:
+kjobwidgets: KJobWIdgets provides widgets for showing progress of asynchronous
+kjobwidgets: jobs.
kjobwidgets:
kjobwidgets:
kjobwidgets:
@@ -15,5 +17,3 @@ kjobwidgets:
kjobwidgets:
kjobwidgets:
kjobwidgets:
-kjobwidgets:
-kjobwidgets: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kjots b/kde/slack-desc/kjots
index fed98a0..f5c10e1 100644
--- a/kde/slack-desc/kjots
+++ b/kde/slack-desc/kjots
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kjots: kjots (KDE note-taking application)
kjots:
-kjots: KJots is a note-taking application that used to be part of KDE PIM
-kjots: back in KDE4 times.
-kjots: KJots organises all of your notes into separate books.
+kjots: KJots is a note-taking application that organises all of your notes
+kjots: into separate books.
+kjots:
+kjots: Homepage: https://www.kde.org/applications/utilities/kjots/
kjots:
kjots:
kjots:
kjots:
-kjots: For more information, visit: https://www.kde.org/applications/utilities/kjots/
kjots:
diff --git a/kde/slack-desc/kjs b/kde/slack-desc/kjs
index 57a424d..1c0249a 100644
--- a/kde/slack-desc/kjs
+++ b/kde/slack-desc/kjs
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kjs: kjs (kjs)
+kjs: kjs (Javascript engine)
kjs:
+kjs: The KJS library provides an ECMAScript compatible interpreter. The
+kjs: ECMA standard is based on well known scripting languages such as
+kjs: Mozilla's JavaScript and Microsoft's JScript.
kjs:
kjs:
kjs:
kjs:
kjs:
kjs:
-kjs:
-kjs:
-kjs: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kjsembed b/kde/slack-desc/kjsembed
index a8c3d7a..3344b54 100644
--- a/kde/slack-desc/kjsembed
+++ b/kde/slack-desc/kjsembed
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kjsembed: kjsembed (kjsembed)
+kjsembed: kjsembed (Binding Javascript to QObjects)
kjsembed:
+kjsembed: KSJEmbed provides a method of binding JavaScript objects to QObjects
+kjsembed: so you can script your applications.
kjsembed:
kjsembed:
kjsembed:
@@ -15,5 +17,3 @@ kjsembed:
kjsembed:
kjsembed:
kjsembed:
-kjsembed:
-kjsembed: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kjumpingcube b/kde/slack-desc/kjumpingcube
index e8646f9..3911331 100644
--- a/kde/slack-desc/kjumpingcube
+++ b/kde/slack-desc/kjumpingcube
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kjumpingcube: kjumpingcube (territory capture game)
kjumpingcube:
-kjumpingcube: KJumpingcube is a simple dice driven tactical game.
-kjumpingcube: The playing area consists of squares containing points.
-kjumpingcube: Players move by clicking on either a vacant square,
-kjumpingcube: or on one of their own squares.
+kjumpingcube: KJumpingcube is a simple dice driven tactical game. The playing area
+kjumpingcube: consists of squares containing points. Players move by clicking on
+kjumpingcube: either a vacant square, or on one of their own squares.
+kjumpingcube:
+kjumpingcube:
kjumpingcube:
kjumpingcube:
kjumpingcube:
-kjumpingcube: For more information, visit: http://www.kde.org
kjumpingcube:
diff --git a/kde/slack-desc/kldap b/kde/slack-desc/kldap
index bc98613..e03ccc5 100644
--- a/kde/slack-desc/kldap
+++ b/kde/slack-desc/kldap
@@ -15,5 +15,5 @@ kldap:
kldap:
kldap:
kldap:
-kldap: Home page: http://www.kde.org/
+kldap:
kldap:
diff --git a/kde/slack-desc/kleopatra b/kde/slack-desc/kleopatra
index 0c83801..cbd33bf 100644
--- a/kde/slack-desc/kleopatra
+++ b/kde/slack-desc/kleopatra
@@ -15,5 +15,5 @@ kleopatra:
kleopatra:
kleopatra:
kleopatra:
-kleopatra: Home page: http://www.kde.org/
+kleopatra:
kleopatra:
diff --git a/kde/slack-desc/klettres b/kde/slack-desc/klettres
index d1bb370..c098d4c 100644
--- a/kde/slack-desc/klettres
+++ b/kde/slack-desc/klettres
@@ -9,11 +9,11 @@
klettres: klettres (language learning program)
klettres:
klettres: KLettres aims to help to learn the alphabet and then to read some
-klettres: syllables in different languages.
-klettres: It is meant to help learning the very first sounds of a new language,
-klettres: for children or for adults.
+klettres: syllables in different languages. It is meant to help learning the
+klettres: very first sounds of a new language, for children or for adults.
+klettres:
+klettres: Homepage: http://edu.kde.org/klettres
klettres:
-klettres: For more information, visit: http://edu.kde.org/klettres
klettres:
klettres:
klettres:
diff --git a/kde/slack-desc/klickety b/kde/slack-desc/klickety
index e35b2a3..f58f944 100644
--- a/kde/slack-desc/klickety
+++ b/kde/slack-desc/klickety
@@ -9,11 +9,11 @@
klickety: klickety (strategy game)
klickety:
klickety: Klickety is a strategy game for KDE, an adaption of the Clickomania
-klickety: game.
-klickety: The rules are similar to those of the Same game: your goal is to clear
-klickety: the board by clicking on groups to destroy them.
+klickety: game. The rules are similar to those of the Same game: your goal is to
+klickety: clear the board by clicking on groups to destroy them.
+klickety:
+klickety:
klickety:
klickety:
klickety:
-klickety: For more information, visit: http://www.kde.org
klickety:
diff --git a/kde/slack-desc/klines b/kde/slack-desc/klines
index 193eee1..0e0b9e7 100644
--- a/kde/slack-desc/klines
+++ b/kde/slack-desc/klines
@@ -10,10 +10,10 @@ klines: klines (tactical game for KDE)
klines:
klines: KLines is a simple but highly addictive, one player game for KDE.
klines: KLines has been inspired by well known game of Color Lines, written
-klines: by Olga Demina, Igor Ivkin and Gennady Denisov back in 1992.
-klines: You can also play an online demo version of this game.
+klines: by Olga Demina, Igor Ivkin and Gennady Denisov back in 1992. You can
+klines: also play an online demo version of this game.
+klines:
klines:
klines:
klines:
-klines: For more information, visit: http://www.kde.org
klines:
diff --git a/kde/slack-desc/kmag b/kde/slack-desc/kmag
index b054802..5f85cd6 100644
--- a/kde/slack-desc/kmag
+++ b/kde/slack-desc/kmag
@@ -8,11 +8,11 @@
|-----handy-ruler------------------------------------------------------|
kmag: kmag (Screen magnifier)
kmag:
-kmag: Magnifies a part of your screen.
-kmag:
-kmag: For more information, visit: http://www.kde.org
-kmag:
+kmag: KMag is a small utility for Linux to magnify a part of the screen.
+kmag: KMag is very useful for people with visual disabilities and for those
+kmag: working in the fields of image analysis, web development etc.
kmag:
+kmag: Homepage: https://kde.org/applications/utilities/org.kde.kmag
kmag:
kmag:
kmag:
diff --git a/kde/slack-desc/kmahjongg b/kde/slack-desc/kmahjongg
index cd653a9..bb73c98 100644
--- a/kde/slack-desc/kmahjongg
+++ b/kde/slack-desc/kmahjongg
@@ -9,11 +9,11 @@
kmahjongg: kmahjongg (KDE port of Mahjongg game)
kmahjongg:
kmahjongg: KMahjongg is a clone of the well known tile based patience game of
-kmahjongg: the same name. In the game you have to empty a game board filled
-kmahjongg: with pieces, by pairwise removal of pieces of the same type.
+kmahjongg: the same name. In the game you have to empty a game board filled with
+kmahjongg: pieces, by pairwise removal of pieces of the same type.
+kmahjongg:
kmahjongg:
kmahjongg:
kmahjongg:
kmahjongg:
-kmahjongg: For more information, visit: http://www.kde.org
kmahjongg:
diff --git a/kde/slack-desc/kmail b/kde/slack-desc/kmail
index d4f3849..9fa9a89 100644
--- a/kde/slack-desc/kmail
+++ b/kde/slack-desc/kmail
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kmail: kmail (KDE mail client)
kmail:
-kmail: KDE e-mail client.
+kmail: KMail is a state-of-the-art email client that integrates well with
+kmail: widely used email providers like GMail. It provides many tools and
+kmail: features to maximize your productivity and makes working with large
+kmail: email accounts easy and fast. KMail supports a large variety of email
+kmail: protocols - POP3, IMAP, Microsoft Exchange (EWS) and more.
+kmail:
+kmail: Homepage: https://kde.org/applications/en/internet/org.kde.kmail2
kmail:
kmail:
-kmail:
-kmail:
-kmail:
-kmail:
-kmail: Home page: http://www.kde.org/
-kmail:
diff --git a/kde/slack-desc/kmail-account-wizard b/kde/slack-desc/kmail-account-wizard
index eeacecb..d7693d4 100644
--- a/kde/slack-desc/kmail-account-wizard
+++ b/kde/slack-desc/kmail-account-wizard
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kmail-account-wizard: kmail-account-wizard (KMail account wizard)
kmail-account-wizard:
-kmail-account-wizard: KMail account wizard.
+kmail-account-wizard: This is a setup wizard for KMail that will take you through the
+kmail-account-wizard: process of creating your email accounts.
kmail-account-wizard:
kmail-account-wizard:
kmail-account-wizard:
kmail-account-wizard:
kmail-account-wizard:
kmail-account-wizard:
-kmail-account-wizard: Home page: http://www.kde.org/
kmail-account-wizard:
diff --git a/kde/slack-desc/kmailtransport b/kde/slack-desc/kmailtransport
index 644708e..6d5a8c4 100644
--- a/kde/slack-desc/kmailtransport
+++ b/kde/slack-desc/kmailtransport
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kmailtransport: kmailtransport (mail transport service)
kmailtransport:
-kmailtransport: Mail Transport Service for KDE.
+kmailtransport: Mail Transport Service for KMail.
+kmailtransport:
kmailtransport:
kmailtransport:
kmailtransport:
kmailtransport:
kmailtransport:
kmailtransport:
-kmailtransport: Home page: http://www.kde.org/
kmailtransport:
diff --git a/kde/slack-desc/kmbox b/kde/slack-desc/kmbox
index 46f26a5..cea25c1 100644
--- a/kde/slack-desc/kmbox
+++ b/kde/slack-desc/kmbox
@@ -15,5 +15,5 @@ kmbox:
kmbox:
kmbox:
kmbox:
-kmbox: Home page: http://www.kde.org/
+kmbox:
kmbox:
diff --git a/kde/slack-desc/kmediaplayer b/kde/slack-desc/kmediaplayer
index e6e4a37..3aaa39e 100644
--- a/kde/slack-desc/kmediaplayer
+++ b/kde/slack-desc/kmediaplayer
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kmediaplayer: kmediaplayer (kmediaplayer)
+kmediaplayer: kmediaplayer (Interface for media player KParts)
kmediaplayer:
+kmediaplayer: KMediaPlayer builds on the KParts framework to provide a common
+kmediaplayer: interface for KParts that can play media files.
kmediaplayer:
kmediaplayer:
kmediaplayer:
@@ -15,5 +17,3 @@ kmediaplayer:
kmediaplayer:
kmediaplayer:
kmediaplayer:
-kmediaplayer:
-kmediaplayer: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kmenuedit b/kde/slack-desc/kmenuedit
index 97df6b0..5e76543 100644
--- a/kde/slack-desc/kmenuedit
+++ b/kde/slack-desc/kmenuedit
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kmenuedit: kmenuedit (XDG menu editor)
kmenuedit:
-kmenuedit: This package provides a menu editor which may be used to
-kmenuedit: edit the KDE Plasma workspaces menu or any other XDG menu.
+kmenuedit: This package provides a menu editor which may be used to edit the KDE
+kmenuedit: Plasma workspaces menu or any other XDG menu.
+kmenuedit:
kmenuedit:
kmenuedit:
kmenuedit:
kmenuedit:
kmenuedit:
kmenuedit:
-kmenuedit: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kmime b/kde/slack-desc/kmime
index d1ba959..761ff0c 100644
--- a/kde/slack-desc/kmime
+++ b/kde/slack-desc/kmime
@@ -15,5 +15,5 @@ kmime:
kmime:
kmime:
kmime:
-kmime: Home page: http://www.kde.org/
+kmime:
kmime:
diff --git a/kde/slack-desc/kmines b/kde/slack-desc/kmines
index 16981d2..bb7b09a 100644
--- a/kde/slack-desc/kmines
+++ b/kde/slack-desc/kmines
@@ -9,11 +9,11 @@
kmines: kmines (minesweeper clone for KDE)
kmines:
kmines: KMines is the classic Minesweeper game. The idea is to uncover all
-kmines: the squares without blowing up any mines. When a mine is blown up,
+kmines: the squares without blowing up any mines. When a mine is blown up,
kmines: the game is over.
kmines:
kmines:
kmines:
kmines:
-kmines: For more information, visit: http://www.kde.org
+kmines:
kmines:
diff --git a/kde/slack-desc/kmix b/kde/slack-desc/kmix
index 0325cdb..fd0feed 100644
--- a/kde/slack-desc/kmix
+++ b/kde/slack-desc/kmix
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kmix: kmix (sound mixer)
kmix:
-kmix: KMix is an application to allow you to change the volume of your
-kmix: sound card. Though small, it is full-featured, and it supports
-kmix: several platforms and sound drivers.
+kmix: KMix is an application to allow you to change the volume of your sound
+kmix: card. Though small, it is full-featured, and it supports several
+kmix: platforms and sound drivers.
+kmix:
kmix:
kmix:
kmix:
kmix:
-kmix: For more information, visit: http://www.kde.org
kmix:
diff --git a/kde/slack-desc/kmousetool b/kde/slack-desc/kmousetool
index 017c312..95ab30e 100644
--- a/kde/slack-desc/kmousetool
+++ b/kde/slack-desc/kmousetool
@@ -10,7 +10,7 @@ kmousetool: kmousetool (Automatic mouse clicks)
kmousetool:
kmousetool: Clicks the mouse for you, reducing hand strain.
kmousetool:
-kmousetool: For more information, visit: http://www.kde.org
+kmousetool:
kmousetool:
kmousetool:
kmousetool:
diff --git a/kde/slack-desc/kmouth b/kde/slack-desc/kmouth
index 8bdac0f..46ed334 100644
--- a/kde/slack-desc/kmouth
+++ b/kde/slack-desc/kmouth
@@ -8,9 +8,9 @@
|-----handy-ruler------------------------------------------------------|
kmouth: kmouth (Speech synthesis frontend)
kmouth:
-kmouth: The computer "speaks" the entered text for talking with people.
+kmouth: The computer speaks the entered text for talking with people.
+kmouth:
kmouth:
-kmouth: For more information, visit: http://www.kde.org
kmouth:
kmouth:
kmouth:
diff --git a/kde/slack-desc/kmplot b/kde/slack-desc/kmplot
index 91472c5..f55995b 100644
--- a/kde/slack-desc/kmplot
+++ b/kde/slack-desc/kmplot
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kmplot: kmplot (a mathematical function plotter)
kmplot:
-kmplot: KmPlot is a mathematical function plotter for the KDE-Desktop.
-kmplot: It has a built-in powerful parser. You can plot different functions
+kmplot: KmPlot is a mathematical function plotter for the KDE-Desktop. It has
+kmplot: a built-in powerful parser. You can plot different functions
kmplot: simultaneously and combine them into new functions. KmPlot supports
kmplot: functions with parameters and functions in polar coordinates.
-kmplot: Several grid modes are possible.
-kmplot: Plots may be printed with high precision in correct scale.
+kmplot: Several grid modes are possible. Plots may be printed with high
+kmplot: precision in correct scale.
+kmplot:
kmplot:
-kmplot: For more information, visit: http://edu.kde.org/
kmplot:
diff --git a/kde/slack-desc/kmymoney b/kde/slack-desc/kmymoney
index c71822a..f4cb76d 100644
--- a/kde/slack-desc/kmymoney
+++ b/kde/slack-desc/kmymoney
@@ -9,11 +9,11 @@
kmymoney: kmymoney (personal finance manager)
kmymoney:
kmymoney: KMymoney is a personal finance manager for KDE which operates
-kmymoney: similarly to MS-Money or Quicken.
+kmymoney: similarly to Microsoft Money or Quicken.
kmymoney:
+kmymoney: Home page: https://kmymoney.org/
kmymoney:
kmymoney:
kmymoney:
kmymoney:
-kmymoney: Home page: https://kmymoney.org/
kmymoney:
diff --git a/kde/slack-desc/knavalbattle b/kde/slack-desc/knavalbattle
index a6058c5..5d32bdd 100644
--- a/kde/slack-desc/knavalbattle
+++ b/kde/slack-desc/knavalbattle
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
knavalbattle: knavalbattle (KDE version of battleship game)
knavalbattle:
-knavalbattle: KNavalBattle is a battleship game with built-in game server.
-knavalbattle: Ships are placed on a board which represents the sea. Players try
-knavalbattle: to hit each others ships in turns without knowing where they are
-knavalbattle: placed. The first player to destroy all ships wins the game.
+knavalbattle: KNavalBattle is a battleship game with built-in game server. Ships are
+knavalbattle: placed on a board which represents the sea. Players try to hit each
+knavalbattle: others ships in turns without knowing where they are placed. The first
+knavalbattle: player to destroy all ships wins the game.
+knavalbattle:
knavalbattle:
knavalbattle:
knavalbattle:
-knavalbattle: For more information, visit: http://www.kde.org
knavalbattle:
diff --git a/kde/slack-desc/knetwalk b/kde/slack-desc/knetwalk
index df4b9bb..3b99622 100644
--- a/kde/slack-desc/knetwalk
+++ b/kde/slack-desc/knetwalk
@@ -15,5 +15,5 @@ knetwalk:
knetwalk:
knetwalk:
knetwalk:
-knetwalk: For more information, visit: http://www.kde.org
+knetwalk:
knetwalk:
diff --git a/kde/slack-desc/knewstuff b/kde/slack-desc/knewstuff
index 4fedf07..55f5b4d 100644
--- a/kde/slack-desc/knewstuff
+++ b/kde/slack-desc/knewstuff
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-knewstuff: knewstuff (knewstuff)
+knewstuff: knewstuff (data sharing framework)
knewstuff:
+knewstuff: The KNewStuff library implements collaborative data sharing for
+knewstuff: applications. It uses libattica to support the Open Collaboration
+knewstuff: Services specification.
knewstuff:
knewstuff:
knewstuff:
knewstuff:
knewstuff:
knewstuff:
-knewstuff:
-knewstuff:
-knewstuff: Homepage: http://kde.org/
diff --git a/kde/slack-desc/knights b/kde/slack-desc/knights
index 85ed8b6..0595278 100644
--- a/kde/slack-desc/knights
+++ b/kde/slack-desc/knights
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-knights: knights (Chess board by KDE with XBoard protocol support)
+knights: knights (Chess board with XBoard protocol support)
knights:
-knights: KNights is a chess game. As a player, your goal is to defeat
-knights: your opponent by checkmating their king.
+knights: KNights is a chess game. As a player, your goal is to defeat your
+knights: opponent by checkmating their king.
knights:
+knights: Homepage: https://www.kde.org/applications/games/knights/
knights:
knights:
knights:
knights:
-knights: Home page: https://www.kde.org/applications/games/knights/
knights:
diff --git a/kde/slack-desc/knotes b/kde/slack-desc/knotes
index 5e3b6ae..94be5d5 100644
--- a/kde/slack-desc/knotes
+++ b/kde/slack-desc/knotes
@@ -15,5 +15,5 @@ knotes:
knotes:
knotes:
knotes:
-knotes: Home page: http://www.kde.org/
+knotes:
knotes:
diff --git a/kde/slack-desc/knotifications b/kde/slack-desc/knotifications
index 410e351..351bf41 100644
--- a/kde/slack-desc/knotifications
+++ b/kde/slack-desc/knotifications
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-knotifications: knotifications (knotifications)
+knotifications: knotifications (Desktop notifications)
knotifications:
+knotifications: KNotifications is used to notify the user of an event. It covers
+knotifications: feedback and persistent events.
knotifications:
knotifications:
knotifications:
@@ -15,5 +17,3 @@ knotifications:
knotifications:
knotifications:
knotifications:
-knotifications:
-knotifications: Homepage: http://kde.org/
diff --git a/kde/slack-desc/knotifyconfig b/kde/slack-desc/knotifyconfig
index 477a3bd..dab8ee6 100644
--- a/kde/slack-desc/knotifyconfig
+++ b/kde/slack-desc/knotifyconfig
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-knotifyconfig: knotifyconfig (knotifyconfig)
+knotifyconfig: knotifyconfig (configure notifications)
knotifyconfig:
+knotifyconfig: KNotifyConfig provides a configuration dialog for desktop
+knotifyconfig: notifications which can be embedded in your application.
knotifyconfig:
knotifyconfig:
knotifyconfig:
@@ -15,5 +17,3 @@ knotifyconfig:
knotifyconfig:
knotifyconfig:
knotifyconfig:
-knotifyconfig:
-knotifyconfig: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kolf b/kde/slack-desc/kolf
index a198a8b..f4a235c 100644
--- a/kde/slack-desc/kolf
+++ b/kde/slack-desc/kolf
@@ -9,11 +9,11 @@
kolf: kolf (miniature golf game for KDE)
kolf:
kolf: Kolf is a miniature golf game. The game is played from an overhead
-kolf: view, with a short bar representing the golf club. Kolf features many
+kolf: view, with a short bar representing the golf club. Kolf features many
kolf: different types of objects, such water hazards, slopes, sand traps,
kolf: and black holes (warps), among others.
kolf:
kolf:
kolf:
-kolf: For more information, visit: http://www.kde.org
+kolf:
kolf:
diff --git a/kde/slack-desc/kollision b/kde/slack-desc/kollision
index e0b4a2a..9fa3779 100644
--- a/kde/slack-desc/kollision
+++ b/kde/slack-desc/kollision
@@ -15,5 +15,5 @@ kollision:
kollision:
kollision:
kollision:
-kollision: For more information, visit: http://www.kde.org
+kollision:
kollision:
diff --git a/kde/slack-desc/kolourpaint b/kde/slack-desc/kolourpaint
index 210c649..a692534 100644
--- a/kde/slack-desc/kolourpaint
+++ b/kde/slack-desc/kolourpaint
@@ -16,4 +16,4 @@ kolourpaint: * Image Manipulation - editing screenshots and photos, and
kolourpaint: applying effects
kolourpaint: * Icon Editing - drawing clipart and logos with transparency.
kolourpaint:
-kolourpaint: For more information, visit: http://www.kde.org
+kolourpaint:
diff --git a/kde/slack-desc/kompare b/kde/slack-desc/kompare
index aaa9b3e..6785e92 100644
--- a/kde/slack-desc/kompare
+++ b/kde/slack-desc/kompare
@@ -15,5 +15,5 @@ kompare:
kompare:
kompare:
kompare:
-kompare: For more information, visit: http://www.kde.org
+kompare:
kompare:
diff --git a/kde/slack-desc/konqueror b/kde/slack-desc/konqueror
index 5bb23b3..528e03b 100644
--- a/kde/slack-desc/konqueror
+++ b/kde/slack-desc/konqueror
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-konqueror: konqueror (KDE filemanager and webbrowser)
+konqueror: konqueror (web browser and file manager)
konqueror:
-konqueror: KDE filemanager & webbrowser.
+konqueror: Konqueror is a web browser and file manager that provides web access
+konqueror: and file-viewer functionality for file systems (such as local files,
+konqueror: files on a remote server, and files in a disk image).
konqueror:
+konqueror: Homepage: https://kde.org/applications/internet/org.kde.konqueror
konqueror:
konqueror:
konqueror:
konqueror:
-konqueror:
-konqueror: Home page: http://www.kde.org/
-konqueror:
diff --git a/kde/slack-desc/konquest b/kde/slack-desc/konquest
index e26e474..aa07298 100644
--- a/kde/slack-desc/konquest
+++ b/kde/slack-desc/konquest
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
konquest: konquest (KDE version of Gnu-Lactic Konquest)
konquest:
-konquest: This the KDE version of Gnu-Lactic Konquest, a multi-player
-konquest: strategy game. The goal of the game is to expand your
-konquest: interstellar empire across the galaxy.
+konquest: This the KDE version of Gnu-Lactic Konquest, a multi-player strategy
+konquest: game. The goal of the game is to expand your interstellar empire
+konquest: across the galaxy.
+konquest:
konquest:
konquest:
konquest:
konquest:
-konquest: For more information, visit: http://www.kde.org
konquest:
diff --git a/kde/slack-desc/konsole b/kde/slack-desc/konsole
index 31cfa2c..eca81ed 100644
--- a/kde/slack-desc/konsole
+++ b/kde/slack-desc/konsole
@@ -5,12 +5,12 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
konsole: konsole (KDE's terminal emulator)
konsole:
-konsole: Konsole is KDE's terminal emulator.
+konsole: Konsole is a powerful and customizable terminal emulator.
konsole:
-konsole: Homepage: http://kde.org
+konsole: Homepage: https://konsole.kde.org
konsole:
konsole:
konsole:
diff --git a/kde/slack-desc/kontact b/kde/slack-desc/kontact
index 491345a..06699bc 100644
--- a/kde/slack-desc/kontact
+++ b/kde/slack-desc/kontact
@@ -15,5 +15,5 @@ kontact:
kontact:
kontact:
kontact:
-kontact: Home page: http://www.kde.org/
+kontact:
kontact:
diff --git a/kde/slack-desc/kontactinterface b/kde/slack-desc/kontactinterface
index 427f9f1..ce6c0fe 100644
--- a/kde/slack-desc/kontactinterface
+++ b/kde/slack-desc/kontactinterface
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kontactinterface: kontactinterface (kontact plugin interface library)
kontactinterface:
-kontactinterface: kontactinterface is a library for embedding KParts
-kontactinterface: in a Kontact component.
+kontactinterface: kontactinterface is a library for embedding KParts in a Kontact
+kontactinterface: component.
+kontactinterface:
kontactinterface:
kontactinterface:
kontactinterface:
kontactinterface:
kontactinterface:
-kontactinterface: Home page: http://www.kde.org/
kontactinterface:
diff --git a/kde/slack-desc/kopete b/kde/slack-desc/kopete
index cc7b440..442398b 100644
--- a/kde/slack-desc/kopete
+++ b/kde/slack-desc/kopete
@@ -13,7 +13,7 @@ kopete: use interface between all of their instant messaging systems, but at
kopete: the same time also providing developers with the ease of writing
kopete: plugins to support a new protocol.
kopete:
+kopete: Homepage: http://userbase.kde.org/Kopete
kopete:
kopete:
-kopete: For more information, visit: http://userbase.kde.org/Kopete
kopete:
diff --git a/kde/slack-desc/korganizer b/kde/slack-desc/korganizer
index f270504..2e3733e 100644
--- a/kde/slack-desc/korganizer
+++ b/kde/slack-desc/korganizer
@@ -15,5 +15,5 @@ korganizer:
korganizer:
korganizer:
korganizer:
-korganizer: Home page: http://www.kde.org/
+korganizer:
korganizer:
diff --git a/kde/slack-desc/kpackage b/kde/slack-desc/kpackage
index da3540c..f5ba851 100644
--- a/kde/slack-desc/kpackage
+++ b/kde/slack-desc/kpackage
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kpackage: kpackage (KDE application package manager)
kpackage:
-kpackage: KPackage is a KDE 5 Framework that lets applications manage
-kpackage: user installable packages of non-binary assets.
+kpackage: KPackage is a KDE 5 Framework that lets applications manage user
+kpackage: installable packages of non-binary assets.
+kpackage:
kpackage:
kpackage:
kpackage:
kpackage:
kpackage:
-kpackage: For more information, visit: http://www.kde.org
kpackage:
diff --git a/kde/slack-desc/kparts b/kde/slack-desc/kparts
index 9236154..aa3a28c 100644
--- a/kde/slack-desc/kparts
+++ b/kde/slack-desc/kparts
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kparts: kparts (kparts)
+kparts: kparts (UI framework)
kparts:
+kparts: The KParts library implements the framework for KDE parts, which are
+kparts: elaborate widgets with a user-interface defined in terms of actions
+kparts: (menu items, toolbar icons).
kparts:
kparts:
kparts:
kparts:
kparts:
kparts:
-kparts:
-kparts:
-kparts: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kpat b/kde/slack-desc/kpat
index 08a8439..0d072f3 100644
--- a/kde/slack-desc/kpat
+++ b/kde/slack-desc/kpat
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kpat: kpat (patience card game for KDE)
kpat:
-kpat: KPat (aka KPatience) is a relaxing card sorting game. To win the game
+kpat: KPat (aka KPatience) is a relaxing card sorting game. To win the game
kpat: a player has to arrange a single deck of cards in certain order
kpat: amongst each other.
kpat:
kpat:
kpat:
kpat:
-kpat: For more information, visit: http://www.kde.org
+kpat:
kpat:
diff --git a/kde/slack-desc/kpeople b/kde/slack-desc/kpeople
index eae7067..f4475e7 100644
--- a/kde/slack-desc/kpeople
+++ b/kde/slack-desc/kpeople
@@ -10,10 +10,10 @@ kpeople: kpeople (library providing access to your contacts)
kpeople:
kpeople: KPeople Provides access to all contacts and aggregates them by person.
kpeople: KPeople offers unified access to our contacts from different sources,
-kpeople: grouping them by person while still exposing all the data.
-kpeople: The sources are plugin-based, allowing to easily extend the contacts
-kpeople: collection.
+kpeople: grouping them by person while still exposing all the data. The sources
+kpeople: are plugin-based, allowing to easily extend the contacts collection.
+kpeople:
+kpeople:
kpeople:
kpeople:
-kpeople: For more information, visit: http://www.kpepim.org
kpeople:
diff --git a/kde/slack-desc/kpeoplevcard b/kde/slack-desc/kpeoplevcard
index 2732461..6345754 100644
--- a/kde/slack-desc/kpeoplevcard
+++ b/kde/slack-desc/kpeoplevcard
@@ -15,5 +15,5 @@ kpeoplevcard:
kpeoplevcard:
kpeoplevcard:
kpeoplevcard:
-kpeoplevcard: Home page: http://www.kde.org/
+kpeoplevcard:
kpeoplevcard:
diff --git a/kde/slack-desc/kpimtextedit b/kde/slack-desc/kpimtextedit
index 191317f..dbca188 100644
--- a/kde/slack-desc/kpimtextedit
+++ b/kde/slack-desc/kpimtextedit
@@ -10,10 +10,10 @@ kpimtextedit: kpimtextedit (textedit with PIM-specific features)
kpimtextedit:
kpimtextedit: KPIMTextedit is a library that provides an enchanced text edit class,
kpimtextedit: see TextEdit. This text is highlighted with a EMailQuoteHighlighter.
-kpimtextedit: It also provides so-called rich text builders, that can convert
-kpimtextedit: the formatted text in the text edit to all kinds of markup,
-kpimtextedit: like HTML or BBCODE.
+kpimtextedit: It also provides so-called rich text builders, that can convert the
+kpimtextedit: formatted text in the text edit to all kinds of markup, like HTML or
+kpimtextedit: BBCODE.
+kpimtextedit:
kpimtextedit:
kpimtextedit:
-kpimtextedit: Home page: http://www.kde.org/
kpimtextedit:
diff --git a/kde/slack-desc/kpkpass b/kde/slack-desc/kpkpass
index 7de8e94..42ccece 100644
--- a/kde/slack-desc/kpkpass
+++ b/kde/slack-desc/kpkpass
@@ -15,5 +15,5 @@ kpkpass:
kpkpass:
kpkpass:
kpkpass:
-kpkpass: Home page: https://community.kde.org/KDE_PIM
+kpkpass:
kpkpass:
diff --git a/kde/slack-desc/kplotting b/kde/slack-desc/kplotting
index de8f578..fa040bc 100644
--- a/kde/slack-desc/kplotting
+++ b/kde/slack-desc/kplotting
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kplotting: kplotting (kplotting)
+kplotting: kplotting (Data plotting)
kplotting:
+kplotting: KPlotWidget is a QWidget-derived class that provides a virtual base
+kplotting: class for easy data-plotting. The idea behind KPlotWidget is that you
+kplotting: only have to specify information in data units; i.e., the natural
+kplotting: units of the data being plotted. KPlotWidget automatically converts
+kplotting: everything to screen pixel units. KPlotWidget draws X and Y axes with
+kplotting: tick marks and tick labels, and automatically determines how many tick
+kplotting: marks to use and where they should be, based on the data limits
+kplotting: specified for the plot.
kplotting:
-kplotting:
-kplotting:
-kplotting:
-kplotting:
-kplotting:
-kplotting:
-kplotting:
-kplotting: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kpmcore b/kde/slack-desc/kpmcore
index 44306d8..06e33b3 100644
--- a/kde/slack-desc/kpmcore
+++ b/kde/slack-desc/kpmcore
@@ -5,15 +5,15 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler------------------------------------------------|
-kpmcore: kpmcore (KDE partitionmanager core libraries)
+ |-----handy-ruler------------------------------------------------------|
+kpmcore: kpmcore (KDE partitionmanager libraries)
kpmcore:
-kpmcore: kpmcore is a library for managing partitions. It contains
-kpmcore: common code for KDE Partition Manager and other projects.
+kpmcore: kpmcore is a library for managing partitions. It contains common code
+kpmcore: for KDE Partition Manager and other projects.
kpmcore:
+kpmcore: See also:
+kpmcore: https://www.kde.org/applications/system/kdepartitionmanager
kpmcore:
kpmcore:
kpmcore:
-kpmcore: See also:
-kpmcore: https://www.kde.org/applications/system/kdepartitionmanager
kpmcore:
diff --git a/kde/slack-desc/kpty b/kde/slack-desc/kpty
index 47f9460..b8277fa 100644
--- a/kde/slack-desc/kpty
+++ b/kde/slack-desc/kpty
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kpty: kpty (kpty)
+kpty: kpty (pseudo terminal library)
kpty:
+kpty: The KPty library provides primitives to interface with pseudo terminal
+kpty: devices as well as a KProcess derived class for running child
+kpty: processes and communicating with them using a pty.
kpty:
kpty:
kpty:
kpty:
kpty:
kpty:
-kpty:
-kpty:
-kpty: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kqtquickcharts b/kde/slack-desc/kqtquickcharts
index d1ea9ea..f2d3ebe 100644
--- a/kde/slack-desc/kqtquickcharts
+++ b/kde/slack-desc/kqtquickcharts
@@ -6,8 +6,10 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kqtquickcharts: kqtquickcharts (plugin to render interactive graphs)
+kqtquickcharts: kqtquickcharts (chart rendering plugin)
kqtquickcharts:
+kqtquickcharts: kqtquickcharts is a QtQuick plugin to render beautiful and interactive
+kqtquickcharts: charts.
kqtquickcharts:
kqtquickcharts:
kqtquickcharts:
@@ -15,5 +17,3 @@ kqtquickcharts:
kqtquickcharts:
kqtquickcharts:
kqtquickcharts:
-kqtquickcharts: For more information, visit: http://www.kde.org
-kqtquickcharts:
diff --git a/kde/slack-desc/kquickcharts b/kde/slack-desc/kquickcharts
index 0c4e6f8..ed910c0 100644
--- a/kde/slack-desc/kquickcharts
+++ b/kde/slack-desc/kquickcharts
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kquickcharts: kquickcharts (QtQuick module providing high-performance charts)
+kquickcharts: kquickcharts (QtQuick chart module)
kquickcharts:
kquickcharts: The Quick Charts module provides a set of charts that can be used
kquickcharts: from QtQuick applications. They are intended to be used for both
-kquickcharts: simple display of data as well as continuous display of
-kquickcharts: high-volume data (often referred to as plotters).
-kquickcharts: The charts use a system called distance fields for their accelerated
-kquickcharts: rendering, which provides ways of using the GPU for rendering
-kquickcharts: 2D shapes without loss of quality.
+kquickcharts: simple display of data as well as continuous display of high-volume
+kquickcharts: data (often referred to as plotters). The charts use a system called
+kquickcharts: distance fields for their accelerated rendering, which provides ways
+kquickcharts: of using the GPU for rendering 2D shapes without loss of quality.
kquickcharts:
kquickcharts: See: https://api.kde.org/frameworks/kquickcharts/html/index.html
+kquickcharts:
diff --git a/kde/slack-desc/krdc b/kde/slack-desc/krdc
index 3daef06..82768f8 100644
--- a/kde/slack-desc/krdc
+++ b/kde/slack-desc/krdc
@@ -12,8 +12,8 @@ krdc: KRDC is a client application that allows you to view or even control
krdc: the desktop session on another machine that is running a compatible
krdc: server. VNC and RDP is supported.
krdc:
+krdc: Homepage: https://www.kde.org/applications/internet/krdc/
krdc:
krdc:
krdc:
-krdc: More information at: http://www.kde.org/applications/internet/krdc/
krdc:
diff --git a/kde/slack-desc/krename b/kde/slack-desc/krename
index 71fdb64..65323e3 100644
--- a/kde/slack-desc/krename
+++ b/kde/slack-desc/krename
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-krename: krename (powerful batch file rename tool)
+krename: krename (batch file rename tool)
krename:
-krename: KRename is a powerful batch renamer for KDE. It allows you to
-krename: easily rename hundreds or even more files in one go.
-krename: The filenames can be created by parts of the original filename,
-krename: numbering the files or accessing hundreds of informations about
-krename: the file, like creation date or Exif informations of an image.
+krename: KRename is a powerful batch renamer for KDE. It allows you to easily
+krename: rename hundreds or even more files in one go. The filenames can be
+krename: created by parts of the original filename, numbering the files or
+krename: accessing information about the file, like creation date or Exif
+krename: information from an image.
krename:
+krename: Homepage: http://www.krename.net/
krename:
-krename: Home page: http://www.krename.net/
krename:
diff --git a/kde/slack-desc/kreversi b/kde/slack-desc/kreversi
index fb6c5d3..e021ec7 100644
--- a/kde/slack-desc/kreversi
+++ b/kde/slack-desc/kreversi
@@ -9,11 +9,11 @@
kreversi: kreversi (reversi board game for KDE)
kreversi:
kreversi: KReversi is a simple one player strategy game played against the
-kreversi: computer. If a player's piece is captured by an opposing player,
-kreversi: that piece is turned over to reveal the color of that player.
-kreversi: A winner is declared when one player has more pieces of his own color
-kreversi: on the board and there are no more possible moves.
+kreversi: computer. If a player's piece is captured by an opposing player, that
+kreversi: piece is turned over to reveal the color of that player. A winner is
+kreversi: declared when one player has more pieces of his own color on the board
+kreversi: and there are no more possible moves.
+kreversi:
kreversi:
kreversi:
-kreversi: For more information, visit: http://www.kde.org
kreversi:
diff --git a/kde/slack-desc/krfb b/kde/slack-desc/krfb
index e073614..1e15edc 100644
--- a/kde/slack-desc/krfb
+++ b/kde/slack-desc/krfb
@@ -12,8 +12,8 @@ krfb: Krfb Desktop Sharing is a server application that allows you to share
krfb: your current session with a user on another machine, who can use a
krfb: VNC client to view or even control the desktop.
krfb:
+krfb: Homepage: https://www.kde.org/applications/system/krfb/
krfb:
krfb:
krfb:
-krfb: More information at: http://www.kde.org/applications/system/krfb/
krfb:
diff --git a/kde/slack-desc/krita b/kde/slack-desc/krita
index 6d7b41e..b287e03 100644
--- a/kde/slack-desc/krita
+++ b/kde/slack-desc/krita
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
krita: krita (painting program)
krita:
-krita: Krita is a professional FREE and open source painting program.
-krita: It is made by artists that want to see affordable art tools
-krita: for everyone.
+krita: Krita is a professional free and open source painting program. It is
+krita: made by artists that want to see affordable art tools for everyone.
+krita:
+krita: Homepage: http://www.krita.org/
krita:
krita:
krita:
krita:
-krita: Home page: http://www.krita.org/
krita:
diff --git a/kde/slack-desc/kross b/kde/slack-desc/kross
index b161b3b..b8325cf 100644
--- a/kde/slack-desc/kross
+++ b/kde/slack-desc/kross
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kross: kross (kross)
+kross: kross (script embedding)
kross:
+kross: Kross is a scripting bridge to embed scripting functionality into an
+kross: application. It supports QtScript as a scripting interpreter backend.
+kross: Kross is able to optional dynamic load modules which provide
+kross: additional functionality for scripts.
kross:
kross:
kross:
kross:
kross:
-kross:
-kross:
-kross:
-kross: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kross-interpreters b/kde/slack-desc/kross-interpreters
index 27a15fc..04274c2 100644
--- a/kde/slack-desc/kross-interpreters
+++ b/kde/slack-desc/kross-interpreters
@@ -10,7 +10,7 @@ kross-interpreters: kross-interpreters (Kross interpreters)
kross-interpreters:
kross-interpreters: Set of interpreter plugins for the Kross archtecture in KDE.
kross-interpreters:
-kross-interpreters: See also: http://developer.kde.org/language-bindings/
+kross-interpreters:
kross-interpreters:
kross-interpreters:
kross-interpreters:
diff --git a/kde/slack-desc/kruler b/kde/slack-desc/kruler
index 1383667..de6f857 100644
--- a/kde/slack-desc/kruler
+++ b/kde/slack-desc/kruler
@@ -10,7 +10,7 @@ kruler: kruler (a screen ruler for KDE)
kruler:
kruler: A screen ruler and color measurement tool for KDE.
kruler:
-kruler: For more information, visit: http://www.kde.org
+kruler:
kruler:
kruler:
kruler:
diff --git a/kde/slack-desc/krunner b/kde/slack-desc/krunner
index 3688637..e6a5c46 100644
--- a/kde/slack-desc/krunner
+++ b/kde/slack-desc/krunner
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
krunner: krunner (KDE plasma launcher)
krunner:
-krunner: KRunner is the launcher built into the Plasma desktop. While
-krunner: its basic function is to launch programs from a sort of
-krunner: mini-command-line, its functionality can be extended by
-krunner: runners to assist the user to accomplish a lot of tasks.
+krunner: KRunner is the launcher built into the Plasma desktop. While its basic
+krunner: function is to launch programs from a sort of mini-command-line, its
+krunner: functionality can be extended by runners to assist the user to
+krunner: accomplish a lot of tasks.
+krunner:
krunner:
krunner:
krunner:
krunner:
-krunner: Homepage: http://kde.org/
diff --git a/kde/slack-desc/krusader b/kde/slack-desc/krusader
index 9221c43..a3fb4e8 100644
--- a/kde/slack-desc/krusader
+++ b/kde/slack-desc/krusader
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-krusader: krusader (twin panel file management for KDE)
+krusader: krusader (twin panel file manager)
krusader:
-krusader: Krusader is an advanced twin panel (commander style) file manager
-krusader: for KDE and other desktops in the *nix world, similar to Midnight
-krusader: or Total Commander.
-krusader: It provides all the file management features you could possibly want.
+krusader: Krusader is an advanced twin panel (commander style) file manager for
+krusader: KDE and other desktops, similar to Midnight Commander or Total
+krusader: Commander.
+krusader:
+krusader: Homepage: http://krusader.org
krusader:
krusader:
krusader:
-krusader: For more information, visit: http://krusader.org
krusader:
diff --git a/kde/slack-desc/kscreen2 b/kde/slack-desc/kscreen2
index 6b8a606..2250496 100644
--- a/kde/slack-desc/kscreen2
+++ b/kde/slack-desc/kscreen2
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kscreen2: kscreen (KDE screen management)
+kscreen2: kscreen2 (KDE screen management)
kscreen2:
kscreen2: KScreen is the new screen management software for KDE Plasma
-kscreen2: Workspaces which tries to be as magic and automatic as possible
-kscreen2: for users with basic needs and easy to configure for those
-kscreen2: who want special setups.
-kscreen2:
+kscreen2: Workspaces which tries to be as magic and automatic as possible for
+kscreen2: users with basic needs and easy to configure for those who want
+kscreen2: special setups.
kscreen2:
kscreen2: For more information, visit:
kscreen2: http://community.kde.org/Solid/Projects/ScreenManagement
kscreen2:
+kscreen2:
diff --git a/kde/slack-desc/kscreenlocker b/kde/slack-desc/kscreenlocker
index f424643..e8c7866 100644
--- a/kde/slack-desc/kscreenlocker
+++ b/kde/slack-desc/kscreenlocker
@@ -10,10 +10,10 @@ kscreenlocker: kscreenlocker (secure lock screen architecture)
kscreenlocker:
kscreenlocker: Library and components for secure lock screen architecture.
kscreenlocker:
+kscreenlocker: Homepage: https://projects.kde.org/kscreenlocker
kscreenlocker:
kscreenlocker:
kscreenlocker:
kscreenlocker:
kscreenlocker:
-kscreenlocker: For more information, visit: https://projects.kde.org/kscreenlocker
kscreenlocker:
diff --git a/kde/slack-desc/kservice b/kde/slack-desc/kservice
index 8f66361..b7f7191 100644
--- a/kde/slack-desc/kservice
+++ b/kde/slack-desc/kservice
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kservice: kservice (kservice)
+kservice: kservice (desktop services plugin framework)
kservice:
+kservice: KService provides a plugin framework for handling desktop services.
+kservice: Services can be applications or libraries. They can be bound to MIME
+kservice: types or handled by application specific code.
kservice:
kservice:
kservice:
kservice:
kservice:
kservice:
-kservice:
-kservice:
-kservice: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kshisen b/kde/slack-desc/kshisen
index 1af7d35..dc43d05 100644
--- a/kde/slack-desc/kshisen
+++ b/kde/slack-desc/kshisen
@@ -9,11 +9,11 @@
kshisen: kshisen (Shisen-Sho Mahjongg-like tile game)
kshisen:
kshisen: KShisen is a solitaire-like game played using the standard set of
-kshisen: Mahjong tiles. Unlike Mahjong however, KShisen has only one layer
+kshisen: Mahjong tiles. Unlike Mahjong however, KShisen has only one layer
kshisen: of scrambled tiles.
kshisen:
kshisen:
kshisen:
kshisen:
-kshisen: For more information, visit: http://www.kde.org
+kshisen:
kshisen:
diff --git a/kde/slack-desc/ksirk b/kde/slack-desc/ksirk
index 1a0826d..57a17e1 100644
--- a/kde/slack-desc/ksirk
+++ b/kde/slack-desc/ksirk
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-ksirk: ksirk (KDE port of the board game risk)
+ksirk: ksirk (conquer the world board game)
ksirk:
-ksirk: Ksirk is a KDE port of the board game risk.
+ksirk: KsirK is a computerized version of the well known strategic board game
+ksirk: R***. The goal of the game is simply to conquer the world by attacking
+ksirk: your neighbors with your armies.
ksirk:
ksirk:
ksirk:
ksirk:
ksirk:
ksirk:
-ksirk: For more information, visit: http://www.kde.org
-ksirk:
diff --git a/kde/slack-desc/ksmtp b/kde/slack-desc/ksmtp
index c8ab4de..2ad42fa 100644
--- a/kde/slack-desc/ksmtp
+++ b/kde/slack-desc/ksmtp
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-ksmtp: ksmtp (library to send mail through smtp)
+ksmtp: ksmtp (SMTP library)
+ksmtp:
+ksmtp: ksmtp is a job-based library to send email through an SMTP server.
ksmtp:
-ksmtp: ksmtp is a job-based library to send email through an SMTP server,
ksmtp:
ksmtp:
ksmtp:
ksmtp:
ksmtp:
ksmtp:
-ksmtp: Home page: http://www.kde.org/
ksmtp:
diff --git a/kde/slack-desc/ksnakeduel b/kde/slack-desc/ksnakeduel
index 731a772..553a72c 100644
--- a/kde/slack-desc/ksnakeduel
+++ b/kde/slack-desc/ksnakeduel
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-ksnakeduel: ksnakeduel (simple snake duel game for KDE)
+ksnakeduel: ksnakeduel (simple snake duel game)
+ksnakeduel:
+ksnakeduel: KSnakeDuel is a simple snake duel game for KDE. You can play
+ksnakeduel: KSnakeDuel against the computer or a friend. The aim of the game is to
+ksnakeduel: live longer than your opponent. To do that, avoid running into a wall,
+ksnakeduel: your own tail, or that of your opponent.
ksnakeduel:
-ksnakeduel: KSnakeDuel is a simple snake duel game for KDE. You can play
-ksnakeduel: KSnakeDuel against the computer or a friend. The aim of the game is
-ksnakeduel: to live longer than your opponent. To do that, avoid running into
-ksnakeduel: a wall, your own tail and that of your opponent.
ksnakeduel:
ksnakeduel:
ksnakeduel:
-ksnakeduel: For more information, visit: http://www.kde.org
ksnakeduel:
diff --git a/kde/slack-desc/kspaceduel b/kde/slack-desc/kspaceduel
index 8a4435f..7651e26 100644
--- a/kde/slack-desc/kspaceduel
+++ b/kde/slack-desc/kspaceduel
@@ -9,11 +9,11 @@
kspaceduel: kspaceduel (space arcade game)
kspaceduel:
kspaceduel: In KSpaceduel each of two possible players controls a satellite
-kspaceduel: spaceship orbiting the sun. As the game progresses players have to
-kspaceduel: eliminate opponent's spacecraft.
+kspaceduel: spaceship orbiting the sun. As the game progresses players have to
+kspaceduel: eliminate the opponent's spacecraft.
+kspaceduel:
kspaceduel:
kspaceduel:
kspaceduel:
kspaceduel:
-kspaceduel: For more information, visit: http://www.kde.org
kspaceduel:
diff --git a/kde/slack-desc/ksquares b/kde/slack-desc/ksquares
index ed147ff..b3b632f 100644
--- a/kde/slack-desc/ksquares
+++ b/kde/slack-desc/ksquares
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ksquares: ksquares (connect the dots to create squares)
ksquares:
-ksquares: KSquares is a fun and exciting game for desktop environment.
-ksquares: The game is modeled after the well known pen and paper based
-ksquares: game of Dots and Boxes.
+ksquares: KSquares is a fun and exciting game for the desktop environment. The
+ksquares: game is modeled after the well known pen and paper based game of Dots
+ksquares: and Boxes.
+ksquares:
ksquares:
ksquares:
ksquares:
ksquares:
-ksquares: For more information, visit: http://www.kde.org
ksquares:
diff --git a/kde/slack-desc/ksshaskpass b/kde/slack-desc/ksshaskpass
index 3c98517..142a5d4 100644
--- a/kde/slack-desc/ksshaskpass
+++ b/kde/slack-desc/ksshaskpass
@@ -15,5 +15,5 @@ ksshaskpass:
ksshaskpass:
ksshaskpass:
ksshaskpass:
-ksshaskpass: For more information, visit: http://www.kde.org
+ksshaskpass:
ksshaskpass:
diff --git a/kde/slack-desc/kstars b/kde/slack-desc/kstars
index 1e0062c..ad680b2 100644
--- a/kde/slack-desc/kstars
+++ b/kde/slack-desc/kstars
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kstars: kstars (a desktop planetarium)
kstars:
-kstars: KStars is a desktop planetarium.
-kstars:
-kstars: For more information, visit: http://edu.kde.org/
-kstars:
-kstars:
-kstars:
-kstars:
-kstars:
+kstars: KStars is free, open source, cross-platform Astronomy Software.
+kstars: It provides an accurate graphical simulation of the night sky, from
+kstars: any location on Earth, at any date and time. The display includes up
+kstars: to 100 million stars, 13,000 deep-sky objects, all 8 planets, the Sun
+kstars: and Moon, and thousands of comets, asteroids, supernovae, and
+kstars: satellites.
+kstars:
+kstars: Homepage: https://edu.kde.org/kstars
kstars:
diff --git a/kde/slack-desc/ksudoku b/kde/slack-desc/ksudoku
index 530f9d7..ded40ae 100644
--- a/kde/slack-desc/ksudoku
+++ b/kde/slack-desc/ksudoku
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ksudoku: ksudoku (sudoku game)
ksudoku:
-ksudoku: KSudoku is a logic-based symbol placement puzzle.
-ksudoku: The player has to fill a grid so that each column, row as well as
-ksudoku: each square block on the game field contains only one instance of
-ksudoku: each symbol.
+ksudoku: KSudoku is a logic-based symbol placement puzzle. The player has to
+ksudoku: fill a grid so that each column, row as well as each square block on
+ksudoku: the game field contains only one instance of each symbol.
+ksudoku:
+ksudoku:
ksudoku:
ksudoku:
ksudoku:
-ksudoku: For more information, visit: http://www.kde.org
ksudoku:
diff --git a/kde/slack-desc/ksysguard b/kde/slack-desc/ksysguard
index ee90a10..438dac1 100644
--- a/kde/slack-desc/ksysguard
+++ b/kde/slack-desc/ksysguard
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ksysguard: ksysguard (process monitor and system statistics)
ksysguard:
-ksysguard: System Guard allows you to monitor various statistics about
-ksysguard: your system. In addition to monitoring the local system,
-ksysguard: it can connect to remote systems running the System Guard
-ksysguard: Daemon, which is in the 'ksysguardd' package.
+ksysguard: System Guard allows you to monitor various statistics about your
+ksysguard: system. In addition to monitoring the local system, it can connect to
+ksysguard: remote systems running the System Guard Daemon, which is in the
+ksysguard: ksysguardd package.
+ksysguard:
ksysguard:
ksysguard:
ksysguard:
ksysguard:
-ksysguard: Homepage: http://kde.org/
diff --git a/kde/slack-desc/ksystemlog b/kde/slack-desc/ksystemlog
index 60ba7d5..2e5a549 100644
--- a/kde/slack-desc/ksystemlog
+++ b/kde/slack-desc/ksystemlog
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ksystemlog: ksystemlog (system log viewer)
ksystemlog:
-ksystemlog: KSystemLog is a system log viewer tool. This program is developed
-ksystemlog: for beginner users, who don't know how to find information about
-ksystemlog: their Linux system, and don't know where log files are.
-ksystemlog: It is also of course designed for advanced users, who quickly want
-ksystemlog: to understand problems of their machine with a more powerful and
-ksystemlog: graphical tool than 'tail -f' and 'less' commands ;-)
+ksystemlog: KSystemLog is a system log viewer tool. This program is developed for
+ksystemlog: beginner users, who don't know how to find information about their
+ksystemlog: Linux system, and don't know where log files are. It is also of course
+ksystemlog: designed for advanced users, who quickly want to understand problems
+ksystemlog: of their machine with a more powerful and graphical tool than
+ksystemlog: 'tail -f' and 'less' commands ;-)
ksystemlog:
-ksystemlog: Visit: http://www.kde.org/applications/system/ksystemlog/
+ksystemlog: Homepage: https://www.kde.org/applications/system/ksystemlog/
ksystemlog:
diff --git a/kde/slack-desc/kteatime b/kde/slack-desc/kteatime
index ee4433f..5c56caf 100644
--- a/kde/slack-desc/kteatime
+++ b/kde/slack-desc/kteatime
@@ -9,11 +9,11 @@
kteatime: kteatime (tea cooker)
kteatime:
kteatime: KTeaTime is a handy timer for steeping tea. No longer will you have
-kteatime: to guess at how long it takes for your tea to be ready.
-kteatime: Simply select the type of tea you have, and it will alert you when
-kteatime: the tea is ready to drink.
+kteatime: to guess at how long it takes for your tea to be ready. Simply select
+kteatime: the type of tea you have, and it will alert you when the tea is ready
+kteatime: to drink.
kteatime:
+kteatime: Homepage: https://www.kde.org/applications/games/kteatime/
kteatime:
kteatime:
-kteatime: More information at http://www.kde.org/applications/games/kteatime/
kteatime:
diff --git a/kde/slack-desc/ktexteditor b/kde/slack-desc/ktexteditor
index cfd6c13..7ec86e5 100644
--- a/kde/slack-desc/ktexteditor
+++ b/kde/slack-desc/ktexteditor
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-ktexteditor: ktexteditor (ktexteditor)
+ktexteditor: ktexteditor (text editor component)
ktexteditor:
+ktexteditor: KTextEditor provides a powerful text editor component that you can
+ktexteditor: embed in your application, either as a KPart or using the
+ktexteditor: KF5::TextEditor library. The text editor component contains many
+ktexteditor: useful features, from syntax highlighting and automatic indentation to
+ktexteditor: advanced scripting support, making it suitable for everything from a
+ktexteditor: simple embedded text-file editor to an advanced IDE.
ktexteditor:
ktexteditor:
ktexteditor:
-ktexteditor:
-ktexteditor:
-ktexteditor:
-ktexteditor:
-ktexteditor:
-ktexteditor: Homepage: http://kde.org/
diff --git a/kde/slack-desc/ktextwidgets b/kde/slack-desc/ktextwidgets
index 0b549e8..d0d5556 100644
--- a/kde/slack-desc/ktextwidgets
+++ b/kde/slack-desc/ktextwidgets
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-ktextwidgets: ktextwidgets (ktextwidgets)
+ktextwidgets: ktextwidgets (text editing widgets)
ktextwidgets:
+ktextwidgets: KTextWidgets provides widgets for displaying and editing text. It
+ktextwidgets: supports rich text as well as plain text.
ktextwidgets:
ktextwidgets:
ktextwidgets:
@@ -15,5 +17,3 @@ ktextwidgets:
ktextwidgets:
ktextwidgets:
ktextwidgets:
-ktextwidgets:
-ktextwidgets: Homepage: http://kde.org/
diff --git a/kde/slack-desc/ktimer b/kde/slack-desc/ktimer
index 45b787c..f3134f3 100644
--- a/kde/slack-desc/ktimer
+++ b/kde/slack-desc/ktimer
@@ -10,7 +10,7 @@ ktimer: ktimer (program scheduler)
ktimer:
ktimer: KTimer is a little tool to execute programs after some time.
ktimer:
-ktimer: ktimer's home page is: http://utils.kde.org/projects/ktimer
+ktimer: Homepage: http://utils.kde.org/projects/ktimer
ktimer:
ktimer:
ktimer:
diff --git a/kde/slack-desc/ktimetracker b/kde/slack-desc/ktimetracker
index 9d5927c..ee8ca88 100644
--- a/kde/slack-desc/ktimetracker
+++ b/kde/slack-desc/ktimetracker
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ktimetracker: ktimetracker (personal time tracker)
ktimetracker:
-ktimetracker: KTimeTracker is a personal time tracker for busy people
-ktimetracker: implemented as a Qt5/KF5-based desktop application.
+ktimetracker: KTimeTracker is a personal time tracker for busy people implemented as
+ktimetracker: a Qt5/KF5-based desktop application.
+ktimetracker:
ktimetracker:
ktimetracker:
ktimetracker:
ktimetracker:
ktimetracker:
-ktimetracker: Home page: http://www.kde.org/
ktimetracker:
diff --git a/kde/slack-desc/ktnef b/kde/slack-desc/ktnef
index 078b32d..88cf660 100644
--- a/kde/slack-desc/ktnef
+++ b/kde/slack-desc/ktnef
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ktnef: ktnef (API for the handling of TNEF data)
ktnef:
-ktnef: The ktnef library contains an API for the handling of TNEF data.
-ktnef: The API permits access to the actual attachments, the message
-ktnef: properties (TNEF/MAPI), and allows one to view/extract message
-ktnef: formatted text in Rich Text Format format.
+ktnef: The ktnef library contains an API for the handling of TNEF data. The
+ktnef: API permits access to the actual attachments, the message properties
+ktnef: (TNEF/MAPI), and allows one to view/extract message formatted text in
+ktnef: Rich Text Format format.
+ktnef:
ktnef:
ktnef:
ktnef:
-ktnef: Home page: http://www.kde.org/
ktnef:
diff --git a/kde/slack-desc/ktorrent b/kde/slack-desc/ktorrent
index afb3a20..c2ab4f8 100644
--- a/kde/slack-desc/ktorrent
+++ b/kde/slack-desc/ktorrent
@@ -11,9 +11,9 @@ ktorrent:
ktorrent: KTorrent is a BitTorrent program with many features:
ktorrent: Download torrent files (of course :-), upload and download speed
ktorrent: capping, Internet searching, UDP trackers, port forwarding with UPnP,
-ktorrent: IP blocking, importing of partially or fully downloaded files,
-ktorrent: support for distributed hash tables, protocol encryption,
-ktorrent: bandwidth scheduling, and much more.
-ktorrent:
-ktorrent: KTorrent's developers are Joris Guisson and Ivan Vasic.
+ktorrent: IP blocking, importing of partially or fully downloaded files, support
+ktorrent: for distributed hash tables, protocol encryption, bandwidth
+ktorrent: scheduling, and much more. KTorrent's developers are Joris Guisson and
+ktorrent: Ivan Vasic.
ktorrent:
+ktorrent: Homepage: https://kde.org/applications/en/internet/org.kde.ktorrent
diff --git a/kde/slack-desc/ktouch b/kde/slack-desc/ktouch
index 74fdba1..d73b129 100644
--- a/kde/slack-desc/ktouch
+++ b/kde/slack-desc/ktouch
@@ -8,11 +8,11 @@
|-----handy-ruler------------------------------------------------------|
ktouch: ktouch (touch typing tutor)
ktouch:
-ktouch: A KDE program that helps you to learn and practice touch typing.
-ktouch:
-ktouch: For more information, visit: http://edu.kde.org/
-ktouch:
+ktouch: KTouch is a typewriter trainer for learning to touch type. It provides
+ktouch: you with text to train on and adjusts to different levels depending on
+ktouch: how good you are.
ktouch:
+ktouch: Homepage: https://kde.org/applications/en/education/org.kde.ktouch
ktouch:
ktouch:
ktouch:
diff --git a/kde/slack-desc/ktp-accounts-kcm b/kde/slack-desc/ktp-accounts-kcm
index d610ed8..2266d67 100644
--- a/kde/slack-desc/ktp-accounts-kcm
+++ b/kde/slack-desc/ktp-accounts-kcm
@@ -14,6 +14,6 @@ ktp-accounts-kcm:
ktp-accounts-kcm:
ktp-accounts-kcm:
ktp-accounts-kcm:
-ktp-accounts-kcm: See also:
-ktp-accounts-kcm: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-accounts-kcm:
+ktp-accounts-kcm:
ktp-accounts-kcm:
diff --git a/kde/slack-desc/ktp-approver b/kde/slack-desc/ktp-approver
index 2f59952..954300a 100644
--- a/kde/slack-desc/ktp-approver
+++ b/kde/slack-desc/ktp-approver
@@ -14,6 +14,6 @@ ktp-approver:
ktp-approver:
ktp-approver:
ktp-approver:
-ktp-approver: See also:
-ktp-approver: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-approver:
+ktp-approver:
ktp-approver:
diff --git a/kde/slack-desc/ktp-auth-handler b/kde/slack-desc/ktp-auth-handler
index 5b0319b..e6d000a 100644
--- a/kde/slack-desc/ktp-auth-handler
+++ b/kde/slack-desc/ktp-auth-handler
@@ -14,6 +14,6 @@ ktp-auth-handler:
ktp-auth-handler:
ktp-auth-handler:
ktp-auth-handler:
-ktp-auth-handler: See also:
-ktp-auth-handler: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-auth-handler:
+ktp-auth-handler:
ktp-auth-handler:
diff --git a/kde/slack-desc/ktp-call-ui b/kde/slack-desc/ktp-call-ui
index 993b4ba..e23371f 100644
--- a/kde/slack-desc/ktp-call-ui
+++ b/kde/slack-desc/ktp-call-ui
@@ -14,6 +14,6 @@ ktp-call-ui:
ktp-call-ui:
ktp-call-ui:
ktp-call-ui:
-ktp-call-ui: See also:
-ktp-call-ui: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-call-ui:
+ktp-call-ui:
ktp-call-ui:
diff --git a/kde/slack-desc/ktp-common-internals b/kde/slack-desc/ktp-common-internals
index 504acb8..5cf8506 100644
--- a/kde/slack-desc/ktp-common-internals
+++ b/kde/slack-desc/ktp-common-internals
@@ -14,6 +14,6 @@ ktp-common-internals:
ktp-common-internals:
ktp-common-internals:
ktp-common-internals:
-ktp-common-internals: See also:
-ktp-common-internals: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-common-internals:
+ktp-common-internals:
ktp-common-internals:
diff --git a/kde/slack-desc/ktp-contact-list b/kde/slack-desc/ktp-contact-list
index cf793ad..fde3ec1 100644
--- a/kde/slack-desc/ktp-contact-list
+++ b/kde/slack-desc/ktp-contact-list
@@ -14,6 +14,6 @@ ktp-contact-list:
ktp-contact-list:
ktp-contact-list:
ktp-contact-list:
-ktp-contact-list: See also:
-ktp-contact-list: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-contact-list:
+ktp-contact-list:
ktp-contact-list:
diff --git a/kde/slack-desc/ktp-contact-runner b/kde/slack-desc/ktp-contact-runner
index db98f64..0d54611 100644
--- a/kde/slack-desc/ktp-contact-runner
+++ b/kde/slack-desc/ktp-contact-runner
@@ -14,6 +14,6 @@ ktp-contact-runner:
ktp-contact-runner:
ktp-contact-runner:
ktp-contact-runner:
-ktp-contact-runner: See also:
-ktp-contact-runner: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-contact-runner:
+ktp-contact-runner:
ktp-contact-runner:
diff --git a/kde/slack-desc/ktp-desktop-applets b/kde/slack-desc/ktp-desktop-applets
index 0a815b5..58839f1 100644
--- a/kde/slack-desc/ktp-desktop-applets
+++ b/kde/slack-desc/ktp-desktop-applets
@@ -9,11 +9,11 @@
ktp-desktop-applets: ktp-desktop-applets (KDE Telepathy desktop applets)
ktp-desktop-applets:
ktp-desktop-applets: KDE Telepathy desktop applets, including:
-ktp-desktop-applets: * contacts
-ktp-desktop-applets: * presence
+ktp-desktop-applets: * contacts
+ktp-desktop-applets: * presence
+ktp-desktop-applets:
+ktp-desktop-applets:
ktp-desktop-applets:
ktp-desktop-applets:
ktp-desktop-applets:
-ktp-desktop-applets: See also:
-ktp-desktop-applets: https://community.kde.org/Real-Time_Communication_and_Collaboration
ktp-desktop-applets:
diff --git a/kde/slack-desc/ktp-filetransfer-handler b/kde/slack-desc/ktp-filetransfer-handler
index 2476f67..902487d 100644
--- a/kde/slack-desc/ktp-filetransfer-handler
+++ b/kde/slack-desc/ktp-filetransfer-handler
@@ -9,11 +9,11 @@
ktp-filetransfer-handler: ktp-filetransfer-handler (Telepathy file transfer handler)
ktp-filetransfer-handler:
ktp-filetransfer-handler: Telepathy-KDE file transfer handler. It basically does two thigs:
-ktp-filetransfer-handler: - Send files to your contact
-ktp-filetransfer-handler: - Receive files from your contact
+ktp-filetransfer-handler: Send files to your contact
+ktp-filetransfer-handler: Receive files from your contact
+ktp-filetransfer-handler:
+ktp-filetransfer-handler:
ktp-filetransfer-handler:
ktp-filetransfer-handler:
ktp-filetransfer-handler:
-ktp-filetransfer-handler: See also:
-ktp-filetransfer-handler: https://community.kde.org/Real-Time_Communication_and_Collaboration
ktp-filetransfer-handler:
diff --git a/kde/slack-desc/ktp-kded-module b/kde/slack-desc/ktp-kded-module
index fbfdb24..20f3c55 100644
--- a/kde/slack-desc/ktp-kded-module
+++ b/kde/slack-desc/ktp-kded-module
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ktp-kded-module: ktp-kded-module (KDE integration for telepathy)
ktp-kded-module:
-ktp-kded-module: This module sits in KDED and takes care of various bits of
-ktp-kded-module: system integration like setting user to auto-away or handling
-ktp-kded-module: connection errors.
+ktp-kded-module: This module sits in KDED and takes care of various bits of system
+ktp-kded-module: integration like setting user to auto-away or handling connection
+ktp-kded-module: errors.
+ktp-kded-module:
ktp-kded-module:
ktp-kded-module:
ktp-kded-module:
ktp-kded-module:
-ktp-kded-module: More at: https://userbase.kde.org/Telepathy
ktp-kded-module:
diff --git a/kde/slack-desc/ktp-send-file b/kde/slack-desc/ktp-send-file
index 87170a5..f104dcd 100644
--- a/kde/slack-desc/ktp-send-file
+++ b/kde/slack-desc/ktp-send-file
@@ -14,6 +14,6 @@ ktp-send-file:
ktp-send-file:
ktp-send-file:
ktp-send-file:
-ktp-send-file: See also:
-ktp-send-file: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-send-file:
+ktp-send-file:
ktp-send-file:
diff --git a/kde/slack-desc/ktp-text-ui b/kde/slack-desc/ktp-text-ui
index 2617541..6e47229 100644
--- a/kde/slack-desc/ktp-text-ui
+++ b/kde/slack-desc/ktp-text-ui
@@ -14,6 +14,6 @@ ktp-text-ui:
ktp-text-ui:
ktp-text-ui:
ktp-text-ui:
-ktp-text-ui: See also:
-ktp-text-ui: https://community.kde.org/Real-Time_Communication_and_Collaboration
+ktp-text-ui:
+ktp-text-ui:
ktp-text-ui:
diff --git a/kde/slack-desc/ktuberling b/kde/slack-desc/ktuberling
index b6386d6..46a6137 100644
--- a/kde/slack-desc/ktuberling
+++ b/kde/slack-desc/ktuberling
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
ktuberling: ktuberling (picture game for children)
ktuberling:
-ktuberling: KTuberling a simple constructor game suitable for children and
-ktuberling: adults alike. The idea of the game is based around a once popular
-ktuberling: doll making concept.
+ktuberling: KTuberling a simple constructor game suitable for children and adults
+ktuberling: alike. The idea of the game is based around a once popular doll making
+ktuberling: concept.
+ktuberling:
ktuberling:
ktuberling:
ktuberling:
ktuberling:
-ktuberling: For more information, visit: http://www.kde.org
ktuberling:
diff --git a/kde/slack-desc/kturtle b/kde/slack-desc/kturtle
index 2fc0d35..a4bead7 100644
--- a/kde/slack-desc/kturtle
+++ b/kde/slack-desc/kturtle
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kturtle: kturtle (Logo programming environment)
-kturtle:
-kturtle: KTurtle is an educational Logo programming environment.
-kturtle:
-kturtle: For more information, visit: http://edu.kde.org/
-kturtle:
-kturtle:
-kturtle:
-kturtle:
+kturtle: kturtle (Logo-like programming environment)
kturtle:
+kturtle: KTurtle is an educational programming environment for learning how to
+kturtle: program. It provides all programming tools from its user interface.
+kturtle: The programming language used is TurtleScript, which is loosely based
+kturtle: on Logo. All commands and messages are translated into the user's
+kturtle: language. KTurtle features an intuitive syntax highlighting, simple
+kturtle: error messages, integrated canvas to make drawings, an integrated
+kturtle: help, slow-motion and step execution.
kturtle:
+kturtle: Homepage: https://kde.org/applications/en/education/org.kde.kturtle
diff --git a/kde/slack-desc/kubrick b/kde/slack-desc/kubrick
index 15bf1df..ed529a7 100644
--- a/kde/slack-desc/kubrick
+++ b/kde/slack-desc/kubrick
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kubrick: kubrick (3-D game based on Rubik's Cube)
kubrick:
-kubrick: Kubrick is a game based on the Rubik's Cube puzzle. The cube sizes
+kubrick: Kubrick is a game based on the Rubik's Cube puzzle. The cube sizes
kubrick: range from 2x2x2 up to 6x6x6, or you can play with irregular "bricks"
-kubrick: such as 5x3x2 or "mats" such as 6x4x1 or 2x2x1.
-kubrick: The game has a selection of puzzles at several levels of difficulty,
-kubrick: as well as demos of pretty patterns and solution moves, or you can
-kubrick: make up your own puzzles.
+kubrick: such as 5x3x2 or "mats" such as 6x4x1 or 2x2x1. The game has a
+kubrick: selection of puzzles at several levels of difficulty, as well as demos
+kubrick: of pretty patterns and solution moves, or you can make up your own
+kubrick: puzzles.
+kubrick:
kubrick:
-kubrick: For more information, visit: http://www.kde.org
kubrick:
diff --git a/kde/slack-desc/kunitconversion b/kde/slack-desc/kunitconversion
index 62ca100..f621c20 100644
--- a/kde/slack-desc/kunitconversion
+++ b/kde/slack-desc/kunitconversion
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kunitconversion: kunitconversion (kunitconversion)
+kunitconversion: kunitconversion (convert physical units)
kunitconversion:
+kunitconversion: KUnitConversion provides functions to convert values in different
+kunitconversion: physical units. It supports converting different prefixes (e.g. kilo,
+kunitconversion: mega, giga) as well as converting between different unit systems (e.g.
+kunitconversion: liters, gallons).
kunitconversion:
kunitconversion:
kunitconversion:
kunitconversion:
kunitconversion:
-kunitconversion:
-kunitconversion:
-kunitconversion:
-kunitconversion: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kuser b/kde/slack-desc/kuser
index c0ac97d..90d56b7 100644
--- a/kde/slack-desc/kuser
+++ b/kde/slack-desc/kuser
@@ -15,5 +15,5 @@ kuser:
kuser:
kuser:
kuser:
-kuser: For more information, visit: http://www.kde.org
+kuser:
kuser:
diff --git a/kde/slack-desc/kwallet b/kde/slack-desc/kwallet
index 64fbcf4..550ce06 100644
--- a/kde/slack-desc/kwallet
+++ b/kde/slack-desc/kwallet
@@ -10,8 +10,8 @@ kwallet: kwallet (KDE wallet manager)
kwallet:
kwallet: KDE Wallet Manager is a tool to manage your passwords under KDE.
kwallet:
-kwallet: kwallet's home page is:
-kwallet: https://projects.kde.org/projects/kde/kdeutils
+kwallet: Homepage: https://projects.kde.org/projects/kde/kdeutils
+kwallet:
kwallet:
kwallet:
kwallet:
diff --git a/deps/PyQt5/slack-desc b/kde/slack-desc/kwallet-pam
index 3f764f0..7f23d5a 100644
--- a/deps/PyQt5/slack-desc
+++ b/kde/slack-desc/kwallet-pam
@@ -5,15 +5,15 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler------------------------------------------------------|
-PyQt5: PyQt5 (Python bindings for Qt)
-PyQt5:
-PyQt5: PyQt5 is a set of Python bindings for Trolltech's Qt5 application
-PyQt5: framework and runs on all platforms supported by Qt5.
-PyQt5:
-PyQt5:
-PyQt5:
-PyQt5:
-PyQt5:
-PyQt5: Homepage: http://www.riverbankcomputing.co.uk/software/pyqt/
-PyQt5:
+ |-----handy-ruler------------------------------------------------------|
+kwallet-pam: kwallet-pam (KWallet PAM integration)
+kwallet-pam:
+kwallet-pam: KWallet PAM integration.
+kwallet-pam:
+kwallet-pam:
+kwallet-pam:
+kwallet-pam:
+kwallet-pam:
+kwallet-pam:
+kwallet-pam:
+kwallet-pam:
diff --git a/kde/slack-desc/kwalletmanager b/kde/slack-desc/kwalletmanager
index 82d055d..634c7af 100644
--- a/kde/slack-desc/kwalletmanager
+++ b/kde/slack-desc/kwalletmanager
@@ -10,8 +10,8 @@ kwalletmanager: kwalletmanager (KDE wallet manager)
kwalletmanager:
kwalletmanager: KDE Wallet Manager is a tool to manage your passwords under KDE.
kwalletmanager:
-kwalletmanager: kwalletmanager's home page is:
-kwalletmanager: https://projects.kde.org/projects/kde/kdeutils
+kwalletmanager: Homepage: https://projects.kde.org/projects/kde/kdeutils
+kwalletmanager:
kwalletmanager:
kwalletmanager:
kwalletmanager:
diff --git a/kde/slack-desc/kwave b/kde/slack-desc/kwave
index 9ee24de..50adf14 100644
--- a/kde/slack-desc/kwave
+++ b/kde/slack-desc/kwave
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kwave: kwave (A sound editor for KDE)
kwave:
-kwave: Kwave is a sound editor built on the KDE Frameworks 5.
-kwave: With Kwave you can record, play back, import and edit many sorts of
-kwave: audio files including multi channel files.
-kwave: Kwave includes some plugins to transform audio files in several ways
-kwave: and presents a graphical view with zoom- and scroll capability.
+kwave: Kwave is a sound editor built on the KDE Frameworks 5. With Kwave you
+kwave: can record, play back, import and edit many sorts of audio files
+kwave: including multi channel files. Kwave includes some plugins to
+kwave: transform audio files in several ways and presents a graphical view
+kwave: with zoom and scroll capability.
kwave:
+kwave: Homepage: http://kwave.sourceforge.net
kwave:
-kwave: For more information, visit: http://kwave.sourceforge.net
kwave:
diff --git a/kde/slack-desc/kwayland b/kde/slack-desc/kwayland
index 57b19f5..99bd3bf 100644
--- a/kde/slack-desc/kwayland
+++ b/kde/slack-desc/kwayland
@@ -15,5 +15,5 @@ kwayland:
kwayland:
kwayland:
kwayland:
-kwayland: For more information, visit: http://www.kde.org
+kwayland:
kwayland:
diff --git a/kde/slack-desc/kwayland-integration b/kde/slack-desc/kwayland-integration
index 1959d26..adc0442 100644
--- a/kde/slack-desc/kwayland-integration
+++ b/kde/slack-desc/kwayland-integration
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kwayland-integration: kwayland-integration (wayland integration plugins for KDE Frameworks)
kwayland-integration:
-kwayland-integration: Kwayland-integration provides integration plugins for various
-kwayland-integration: KDE Frameworks for Wayland.
+kwayland-integration: Kwayland-integration provides integration plugins for various KDE
+kwayland-integration: Frameworks for Wayland.
+kwayland-integration:
kwayland-integration:
kwayland-integration:
kwayland-integration:
kwayland-integration:
kwayland-integration:
-kwayland-integration: For more information, visit: http://www.kde.org
kwayland-integration:
diff --git a/kde/slack-desc/kwayland-server b/kde/slack-desc/kwayland-server
new file mode 100644
index 0000000..41a4890
--- /dev/null
+++ b/kde/slack-desc/kwayland-server
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+kwayland-server: kwayland-server (wayland server components)
+kwayland-server:
+kwayland-server: Wayland server components built on KDE Frameworks.
+kwayland-server:
+kwayland-server:
+kwayland-server:
+kwayland-server:
+kwayland-server:
+kwayland-server:
+kwayland-server:
+kwayland-server:
diff --git a/kde/slack-desc/kwebkitpart b/kde/slack-desc/kwebkitpart
index 3938c9d..df0c266 100644
--- a/kde/slack-desc/kwebkitpart
+++ b/kde/slack-desc/kwebkitpart
@@ -5,13 +5,13 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
kwebkitpart: kwebkitpart (WebKit browser component)
kwebkitpart:
kwebkitpart: KWebKitPart is a web browser component for KDE based on (Qt)WebKit.
kwebkitpart: You can use it for example for browsing the web in Konqueror.
kwebkitpart:
-kwebkitpart: Homepage: http://kde-apps.org/content/show.php?content=127960
+kwebkitpart: Homepage: https://github.com/KDE/kwebkitpart
kwebkitpart:
kwebkitpart:
kwebkitpart:
diff --git a/kde/slack-desc/kwidgetsaddons b/kde/slack-desc/kwidgetsaddons
index fbc3c55..b8610d1 100644
--- a/kde/slack-desc/kwidgetsaddons
+++ b/kde/slack-desc/kwidgetsaddons
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kwidgetsaddons: kwidgetsaddons (kwidgetsaddons)
+kwidgetsaddons: kwidgetsaddons (desktop widgets)
kwidgetsaddons:
+kwidgetsaddons: This repository contains add-on widgets and classes for applications
+kwidgetsaddons: that use the Qt Widgets module. Provided are action classes that can
+kwidgetsaddons: be added to toolbars or menus, a wide range of widgets for selecting
+kwidgetsaddons: characters, fonts, colors, actions, dates and times, or MIME types,
+kwidgetsaddons: as well as platform-aware dialogs for configuration pages, message
+kwidgetsaddons: boxes, and password requests.
kwidgetsaddons:
kwidgetsaddons:
kwidgetsaddons:
-kwidgetsaddons:
-kwidgetsaddons:
-kwidgetsaddons:
-kwidgetsaddons:
-kwidgetsaddons:
-kwidgetsaddons: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kwin b/kde/slack-desc/kwin
index 2b5eecc..17123cc 100644
--- a/kde/slack-desc/kwin
+++ b/kde/slack-desc/kwin
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kwin: kwin (KDE window manager)
kwin:
-kwin: KWin is a window manager for the X Window System. It is an
-kwin: integral part, and the default window manager of the Plasma
-kwin: Workspaces, but it can also be used on its own or with other
-kwin: desktop environments.
+kwin: KWin is a window manager for the X Window System. It is an integral
+kwin: part, and the default window manager of the Plasma Workspaces, but it
+kwin: can also be used on its own or with other desktop environments.
+kwin:
+kwin:
kwin:
kwin:
kwin:
kwin:
-kwin: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kwindowsystem b/kde/slack-desc/kwindowsystem
index d42a074..5c19bea 100644
--- a/kde/slack-desc/kwindowsystem
+++ b/kde/slack-desc/kwindowsystem
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kwindowsystem: kwindowsystem (kwindowsystem)
+kwindowsystem: kwindowsystem (windowing system access)
kwindowsystem:
+kwindowsystem: KWindowSystem provides information about the windowing system and
+kwindowsystem: allows interaction with the windowing system. It provides a high level
+kwindowsystem: API which is windowing system independent and has platform specific
+kwindowsystem: implementations. This API is inspired by X11 and thus not all
+kwindowsystem: functionality is available on all windowing systems.
kwindowsystem:
kwindowsystem:
kwindowsystem:
kwindowsystem:
-kwindowsystem:
-kwindowsystem:
-kwindowsystem:
-kwindowsystem:
-kwindowsystem: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kwordquiz b/kde/slack-desc/kwordquiz
index 629395f..5a115aa 100644
--- a/kde/slack-desc/kwordquiz
+++ b/kde/slack-desc/kwordquiz
@@ -6,12 +6,12 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-kwordquiz: kwordquiz (a general purpose flash card program)
+kwordquiz: kwordquiz (flash card program)
+kwordquiz:
+kwordquiz: KWordQuiz is a general purpose flash card program. It can be used for
+kwordquiz: vocabulary learning and many other subjects.
kwordquiz:
-kwordquiz: KWordQuiz is a general purpose flash card program.
-kwordquiz: It can be used for vocabulary learning and many other subjects.
kwordquiz:
-kwordquiz: For more information, visit: http://edu.kde.org/
kwordquiz:
kwordquiz:
kwordquiz:
diff --git a/kde/slack-desc/kwrited b/kde/slack-desc/kwrited
index 121f1cb..20b6ec2 100644
--- a/kde/slack-desc/kwrited
+++ b/kde/slack-desc/kwrited
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
kwrited: kwrited (write daemon)
kwrited:
-kwrited: Watch for messages from local users sent with write(1)
-kwrited: or wall(1).
+kwrited: Watch for messages from local users sent with write(1) or wall(1).
+kwrited:
+kwrited:
kwrited:
kwrited:
kwrited:
kwrited:
kwrited:
kwrited:
-kwrited: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kxmlgui b/kde/slack-desc/kxmlgui
index 8607982..1ffc611 100644
--- a/kde/slack-desc/kxmlgui
+++ b/kde/slack-desc/kxmlgui
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-kxmlgui: kxmlgui (kxmlgui)
+kxmlgui: kxmlgui (menu and toolbar framework)
kxmlgui:
+kxmlgui: KXMLGUI provides a framework for managing menu and toolbar actions in
+kxmlgui: an abstract way. The actions are configured through an XML description
+kxmlgui: and hooks in the application code. The framework supports merging of
+kxmlgui: multiple description for example for integrating actions from plugins.
kxmlgui:
kxmlgui:
kxmlgui:
kxmlgui:
kxmlgui:
-kxmlgui:
-kxmlgui:
-kxmlgui:
-kxmlgui: Homepage: http://kde.org/
diff --git a/kde/slack-desc/kxmlrpcclient b/kde/slack-desc/kxmlrpcclient
index dbcb137..0ffae41 100644
--- a/kde/slack-desc/kxmlrpcclient
+++ b/kde/slack-desc/kxmlrpcclient
@@ -15,5 +15,5 @@ kxmlrpcclient:
kxmlrpcclient:
kxmlrpcclient:
kxmlrpcclient:
-kxmlrpcclient: For more information, visit: http://www.kde.org
+kxmlrpcclient:
kxmlrpcclient:
diff --git a/kde/slack-desc/labplot b/kde/slack-desc/labplot
new file mode 100644
index 0000000..2fd2adb
--- /dev/null
+++ b/kde/slack-desc/labplot
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+labplot: labplot (plot scientific data)
+labplot:
+labplot: LabPlot is a KDE application for interactive graphing and analysis of
+labplot: scientific data. LabPlot provides an easy way to create, manage and
+labplot: edit plots and to perform data analysis.
+labplot:
+labplot: Homepage: http://labplot.kde.org/
+labplot:
+labplot:
+labplot:
+labplot:
diff --git a/kde/slack-desc/latte-dock b/kde/slack-desc/latte-dock
index 0872788..99d6d12 100644
--- a/kde/slack-desc/latte-dock
+++ b/kde/slack-desc/latte-dock
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
latte-dock: latte-dock (alternative dock for Plasma5)
latte-dock:
-latte-dock: Latte is a dock based on plasma frameworks providing an elegant
-latte-dock: and intuitive experience for your tasks and plasmoids.
-latte-dock: It animates its contents by using parabolic zoom effect and
-latte-dock: tries to be there only when it is needed.
-latte-dock: "Art in Coffee"
+latte-dock: Latte is a dock based on Plasma Frameworks providing an elegant and
+latte-dock: intuitive experience for your tasks and plasmoids. It animates its
+latte-dock: contents by using parabolic zoom effect and tries to be there only
+latte-dock: when it is needed. "Art in Coffee"
+latte-dock:
+latte-dock: Homepage: https://github.com/KDE/latte-dock
latte-dock:
latte-dock:
-latte-dock: Home page: https://github.com/KDE/latte-dock
latte-dock:
diff --git a/kde/slack-desc/libgravatar b/kde/slack-desc/libgravatar
index dbe14f9..c806332 100644
--- a/kde/slack-desc/libgravatar
+++ b/kde/slack-desc/libgravatar
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libgravatar: libgravatar (KDE PIM library providing Gravatar support)
+libgravatar: libgravatar (Gravatar support library)
libgravatar:
libgravatar: libgravatar is a KDE PIM library providing Gravatar support.
libgravatar:
@@ -15,5 +15,5 @@ libgravatar:
libgravatar:
libgravatar:
libgravatar:
-libgravatar: Home page: http://www.kde.org/
+libgravatar:
libgravatar:
diff --git a/kde/slack-desc/libkcddb b/kde/slack-desc/libkcddb
index 40f2950..2b2abc3 100644
--- a/kde/slack-desc/libkcddb
+++ b/kde/slack-desc/libkcddb
@@ -15,5 +15,5 @@ libkcddb:
libkcddb:
libkcddb:
libkcddb:
-libkcddb: For more information, visit: http://www.kde.org
+libkcddb:
libkcddb:
diff --git a/kde/slack-desc/libkcompactdisc b/kde/slack-desc/libkcompactdisc
index 67ce9c9..32565e4 100644
--- a/kde/slack-desc/libkcompactdisc
+++ b/kde/slack-desc/libkcompactdisc
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkcompactdisc: libkcompactdisc (KDE library for playing & ripping CDs)
+libkcompactdisc: libkcompactdisc (CD playing/ripping library)
+libkcompactdisc:
+libkcompactdisc: A KDE library for playing and ripping CDs.
libkcompactdisc:
-libkcompactdisc: A KDE library for playing & ripping CDs.
libkcompactdisc:
libkcompactdisc:
libkcompactdisc:
libkcompactdisc:
libkcompactdisc:
libkcompactdisc:
-libkcompactdisc: For more information, visit: http://www.kde.org
libkcompactdisc:
diff --git a/kde/slack-desc/libkdcraw b/kde/slack-desc/libkdcraw
index 4cf8dee..98de517 100644
--- a/kde/slack-desc/libkdcraw
+++ b/kde/slack-desc/libkdcraw
@@ -8,10 +8,10 @@
|-----handy-ruler------------------------------------------------------|
libkdcraw: libkdcraw (library wrapper around dcraw)
libkdcraw:
-libkdcraw: Libkdcraw is a C++ interface around the dcraw binary program, used
-libkdcraw: to decode RAW picture files.
+libkdcraw: Libkdcraw is a C++ interface around the dcraw binary program, used to
+libkdcraw: decode RAW picture files.
+libkdcraw:
libkdcraw:
-libkdcraw: For more information, visit: http://www.kipi-plugins.org/
libkdcraw:
libkdcraw:
libkdcraw:
diff --git a/kde/slack-desc/libkdegames b/kde/slack-desc/libkdegames
index d383885..5081771 100644
--- a/kde/slack-desc/libkdegames
+++ b/kde/slack-desc/libkdegames
@@ -6,7 +6,7 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkdegames: libkdegames (common code and data for many KDE games)
+libkdegames: libkdegames (KDE game library)
libkdegames:
libkdegames: Libkdegames contains common code and data for many KDE games.
libkdegames:
@@ -15,5 +15,5 @@ libkdegames:
libkdegames:
libkdegames:
libkdegames:
-libkdegames: For more information, visit: http://www.kde.org
+libkdegames:
libkdegames:
diff --git a/kde/slack-desc/libkdepim b/kde/slack-desc/libkdepim
index ad7eaf8..c7deb47 100644
--- a/kde/slack-desc/libkdepim
+++ b/kde/slack-desc/libkdepim
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkdepim: libkdepim (libraries for KDE PIM applications)
+libkdepim: libkdepim (KDE PIM libraries)
libkdepim:
libkdepim: The package contains libraries for KDE PIM applications.
libkdepim:
@@ -15,5 +15,5 @@ libkdepim:
libkdepim:
libkdepim:
libkdepim:
-libkdepim: Home page: http://www.kde.org/
+libkdepim:
libkdepim:
diff --git a/kde/slack-desc/libkeduvocdocument b/kde/slack-desc/libkeduvocdocument
index 7269da2..bdfdd85 100644
--- a/kde/slack-desc/libkeduvocdocument
+++ b/kde/slack-desc/libkeduvocdocument
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkeduvocdocument: libkeduvocdocument (library to read and write KVTML files)
+libkeduvocdocument: libkeduvocdocument (KVTML library)
+libkeduvocdocument:
+libkeduvocdocument: A library (formerly part of kdeedu) for reading from/writing to the
+libkeduvocdocument: KVTML format (and others too).
+libkeduvocdocument:
libkeduvocdocument:
-libkeduvocdocument: A library (formerly part of kdeedu) for reading from/writing to
-libkeduvocdocument: the KVTML format (and others too).
-libkeduvocdocument: Currently used by: kanagram, khangman, parley, kwordquiz.
libkeduvocdocument:
libkeduvocdocument:
libkeduvocdocument:
libkeduvocdocument:
-libkeduvocdocument: For more information, visit: http://www.kde.org
libkeduvocdocument:
diff --git a/kde/slack-desc/libkexiv2 b/kde/slack-desc/libkexiv2
index 7a20619..106fc2e 100644
--- a/kde/slack-desc/libkexiv2
+++ b/kde/slack-desc/libkexiv2
@@ -6,12 +6,12 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkexiv2: libkexiv2 (wrapper library for exiv2 library)
+libkexiv2: libkexiv2 (wrapper library for exiv2)
libkexiv2:
libkexiv2: Libkexiv2 is a KDE wrapper around the Exiv2 library to manipulate
-libkexiv2: pictures' metadata.
+libkexiv2: image metadata.
+libkexiv2:
libkexiv2:
-libkexiv2: For more information, visit: http://www.kipi-plugins.org/
libkexiv2:
libkexiv2:
libkexiv2:
diff --git a/kde/slack-desc/libkgapi b/kde/slack-desc/libkgapi
index 1ad6f96..7d0f76c 100644
--- a/kde/slack-desc/libkgapi
+++ b/kde/slack-desc/libkgapi
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkgapi: libkgapi (library for interacting with Google service API)
+libkgapi: libkgapi (Google service API library)
+libkgapi:
+libkgapi: A KDE-based library for accessing various Google services via their
+libkgapi: public API.
libkgapi:
-libkgapi: A KDE-based library for accessing various Google services
-libkgapi: via their public API.
libkgapi:
libkgapi:
libkgapi:
libkgapi:
libkgapi:
-libkgapi: For more information, visit: http://www.kde.org
libkgapi:
diff --git a/kde/slack-desc/libkgeomap b/kde/slack-desc/libkgeomap
index 2480a7f..47b48fc 100644
--- a/kde/slack-desc/libkgeomap
+++ b/kde/slack-desc/libkgeomap
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkgeomap: libkgeomap (library for world map components)
+libkgeomap: libkgeomap (world map library)
libkgeomap:
-libkgeomap: A wrapper around world map components like marble, openstreetmap
-libkgeomap: and googlemap, for browsing and arranging photos on a map.
+libkgeomap: Libkgeomap is a wrapper around world map components as Marble,
+libkgeomap: OpenstreetMap and GoogleMap, for browsing and arranging photos on a
+libkgeomap: map.
libkgeomap:
+libkgeomap: Homepage: https://github.com/KDE/libkgeomap
libkgeomap:
libkgeomap:
libkgeomap:
libkgeomap:
-libkgeomap: For more information, visit: http://www.digikam.org
-libkgeomap:
diff --git a/kde/slack-desc/libkipi b/kde/slack-desc/libkipi
index c1098f9..c883824 100644
--- a/kde/slack-desc/libkipi
+++ b/kde/slack-desc/libkipi
@@ -6,13 +6,13 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkipi: libKipi (KDE Image Plugin Interface)
+libkipi: libkipi (KDE Image Plugin Interface)
libkipi:
libkipi: This package provides a generic KDE Image Plug-in Interface used by
-libkipi: some KDE image applications.
-libkipi: Plug-ins for this interface are in the kipi-plugins package.
+libkipi: some KDE image applications. Plug-ins for this interface are in the
+libkipi: kipi-plugins package.
libkipi:
-libkipi: For more info, visit: http://www.kipi-plugins.org/
+libkipi: Homepage: https://github.com/KDE/libkipi
libkipi:
libkipi:
libkipi:
diff --git a/kde/slack-desc/libkleo b/kde/slack-desc/libkleo
index 3b0dc39..657216f 100644
--- a/kde/slack-desc/libkleo
+++ b/kde/slack-desc/libkleo
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkleo: libkleo (KDE PIM cryptographic library)
+libkleo: libkleo (KDE key manager library)
libkleo:
-libkleo: libkleo is a KDE PIM cryptographic library.
+libkleo: This is libkleo, a library used by KDE PIM applications to handle
+libkleo: cryptographic key and certificate management.
libkleo:
libkleo:
libkleo:
libkleo:
libkleo:
libkleo:
-libkleo: Home page: http://www.kde.org/
libkleo:
diff --git a/kde/slack-desc/libkmahjongg b/kde/slack-desc/libkmahjongg
index 8851a3c..ac33822 100644
--- a/kde/slack-desc/libkmahjongg
+++ b/kde/slack-desc/libkmahjongg
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkmahjongg: libkmahjongg (library for rendering of Mahjongg tilesets)
+libkmahjongg: libkmahjongg (Mahjongg tilesets library)
+libkmahjongg:
+libkmahjongg: libkmahjongg is a library used by several KDE games for loading and
+libkmahjongg: rendering of Mahjongg tilesets.
libkmahjongg:
-libkmahjongg: libkmahjongg is a library used by several KDE games for loading
-libkmahjongg: and rendering of Mahjongg tilesets.
libkmahjongg:
libkmahjongg:
libkmahjongg:
libkmahjongg:
libkmahjongg:
-libkmahjongg: For more information, visit: http://www.kde.org
libkmahjongg:
diff --git a/kde/slack-desc/libkomparediff2 b/kde/slack-desc/libkomparediff2
index 6faddf7..4bb3e87 100644
--- a/kde/slack-desc/libkomparediff2
+++ b/kde/slack-desc/libkomparediff2
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkomparediff2: libkomparediff2 (library to compare files and strings)
+libkomparediff2: libkomparediff2 (file comparison library)
+libkomparediff2:
+libkomparediff2: libkomparediff2 is a shared library to compare files and strings using
+libkomparediff2: kdelibs and GNU diff, used in Kompare and KDevelop.
+libkomparediff2:
libkomparediff2:
-libkomparediff2: libkomparediff2 is a shared library to compare files
-libkomparediff2: and strings using kdelibs and GNU diff, used in Kompare
-libkomparediff2: and KDevelop.
libkomparediff2:
libkomparediff2:
libkomparediff2:
libkomparediff2:
-libkomparediff2: For more information, visit: http://www.kde.org
libkomparediff2:
diff --git a/kde/slack-desc/libksane b/kde/slack-desc/libksane
index 2146c3c..4399db5 100644
--- a/kde/slack-desc/libksane
+++ b/kde/slack-desc/libksane
@@ -6,11 +6,11 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libksane: libksane (KDE scan support interface)
+libksane: libksane (KDE scanner library)
libksane:
libksane: Libksane is a library to add scan support to KDE applications.
libksane:
-libksane: For more information, visit: http://www.kde.org
+libksane:
libksane:
libksane:
libksane:
diff --git a/kde/slack-desc/libkscreen2 b/kde/slack-desc/libkscreen2
index 4882728..1d59b7a 100644
--- a/kde/slack-desc/libkscreen2
+++ b/kde/slack-desc/libkscreen2
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libkscreen2: libkscreen2 (KDE screen management library)
+libkscreen2: libkscreen2 (screen management library)
+libkscreen2:
+libkscreen2: LibKScreen2 is a library that provides access to current configuration
+libkscreen2: of connected displays and ways to change the configuration.
+libkscreen2:
+libkscreen2:
libkscreen2:
-libkscreen2: LibKScreen2 is a library that provides access to current
-libkscreen2: configuration of connected displays and ways to change
-libkscreen2: the configuration.
libkscreen2:
libkscreen2:
libkscreen2:
-libkscreen2: For more information, visit:
-libkscreen2: http://community.kde.org/Solid/Projects/ScreenManagement
libkscreen2:
diff --git a/kde/slack-desc/libksieve b/kde/slack-desc/libksieve
index 440ab06..c1fbbe5 100644
--- a/kde/slack-desc/libksieve
+++ b/kde/slack-desc/libksieve
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-libksieve: libksieve (KDE PIM library for managing sieve mailfilters)
+libksieve: libksieve (sieve mailfilter library)
libksieve:
libksieve: libksieve is a KDE PIM library for managing sieve mailfilters.
libksieve:
@@ -15,5 +15,5 @@ libksieve:
libksieve:
libksieve:
libksieve:
-libksieve: Home page: http://www.kde.org/
+libksieve:
libksieve:
diff --git a/kde/slack-desc/libksysguard b/kde/slack-desc/libksysguard
index 1d65883..b34700d 100644
--- a/kde/slack-desc/libksysguard
+++ b/kde/slack-desc/libksysguard
@@ -6,8 +6,10 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-libksysguard: libksysguard (libksysguard)
+libksysguard: libksysguard (system information library)
libksysguard:
+libksysguard: Library to retrieve information on the current status of your computer
+libksysguard: hardware.
libksysguard:
libksysguard:
libksysguard:
@@ -15,5 +17,3 @@ libksysguard:
libksysguard:
libksysguard:
libksysguard:
-libksysguard:
-libksysguard: Homepage: http://kde.org/
diff --git a/kde/slack-desc/libktorrent b/kde/slack-desc/libktorrent
index 5bc41f8..401a21b 100644
--- a/kde/slack-desc/libktorrent
+++ b/kde/slack-desc/libktorrent
@@ -5,15 +5,15 @@
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
- |-----handy-ruler------------------------------------------------------|
-libktorrent: libktorrent (Protocol library for the KDE BitTorrent program)
+ |-----handy-ruler------------------------------------------------------|
+libktorrent: libktorrent (KDE BitTorrent library)
libktorrent:
libktorrent: Libktorrent is the BitTorrent protocol library for ktorrent, which
-libktorrent: contains all the torrent downloading code. Although it is closely
-libktorrent: to ktorrent, the goal is to make libktorrent an independent
+libktorrent: contains all the torrent downloading code. Although it is closely
+libktorrent: related to ktorrent, the goal is to make libktorrent an independent
libktorrent: library which can be used by other applications.
libktorrent:
-libktorrent: Homepage: http://ktorrent.org
+libktorrent: Homepage: https://kde.org/applications/en/internet/org.kde.ktorrent
libktorrent:
libktorrent:
libktorrent:
diff --git a/kde/slack-desc/lokalize b/kde/slack-desc/lokalize
index dc143f7..43f8bf5 100644
--- a/kde/slack-desc/lokalize
+++ b/kde/slack-desc/lokalize
@@ -15,5 +15,5 @@ lokalize: merging (synchronization) capability. It is primarily targeted for
lokalize: software translation and also integrates external conversion tools
lokalize: for freelance office document translation.
lokalize:
-lokalize: Home: http://www.kde.org/applications/development/lokalize/
+lokalize: Homepage: https://www.kde.org/applications/development/lokalize/
lokalize:
diff --git a/kde/slack-desc/lskat b/kde/slack-desc/lskat
index cccb871..93005eb 100644
--- a/kde/slack-desc/lskat
+++ b/kde/slack-desc/lskat
@@ -6,7 +6,7 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-lskat: lskat (Lieutenant Skat card game for KDE)
+lskat: lskat (Lieutenant Skat card game)
lskat:
lskat: Lieutenant Skat (from German "Offiziersskat") is a fun and engaging
lskat: card game for two players, where the second player is either live
@@ -15,5 +15,5 @@ lskat:
lskat:
lskat:
lskat:
-lskat: For more information, visit: http://www.kde.org
+lskat:
lskat:
diff --git a/kde/slack-desc/mailcommon b/kde/slack-desc/mailcommon
index 4442708..ea23e59 100644
--- a/kde/slack-desc/mailcommon
+++ b/kde/slack-desc/mailcommon
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-mailcommon: mailcommon (KDE PIM library support for mail applications)
+mailcommon: mailcommon (mail application library)
mailcommon:
mailcommon: KDE PIM library providing support for mail applications.
mailcommon:
@@ -15,5 +15,5 @@ mailcommon:
mailcommon:
mailcommon:
mailcommon:
-mailcommon: Home page: http://www.kde.org/
+mailcommon:
mailcommon:
diff --git a/kde/slack-desc/mailimporter b/kde/slack-desc/mailimporter
index f8a248a..20a129c 100644
--- a/kde/slack-desc/mailimporter
+++ b/kde/slack-desc/mailimporter
@@ -15,5 +15,5 @@ mailimporter:
mailimporter:
mailimporter:
mailimporter:
-mailimporter: Home page: http://www.kde.org/
+mailimporter:
mailimporter:
diff --git a/kde/slack-desc/marble b/kde/slack-desc/marble
index 06e3e8e..d018d65 100644
--- a/kde/slack-desc/marble
+++ b/kde/slack-desc/marble
@@ -8,13 +8,12 @@
|-----handy-ruler------------------------------------------------------|
marble: marble (virtual globe)
marble:
-marble: Marble is a virtual globe with advanced routing capabilities. You can
+marble: Marble is a virtual globe with advanced routing capabilities. You can
marble: download maps from a variety of themes and explore the surroundings.
-marble: Record your trip and share it with your friends.
-marble: Features: online and offline routing, GPS tracking and recording,
-marble: themable maps (OpenStreetMap, Satellite Map and more), support for
-marble: different projections (globe, flat map, ...) and other planets,
-marble: download of maps and route data for offline usage.
+marble: Record your trip and share it with your friends. Features online and
+marble: offline routing, GPS tracking and recording, themable maps
+marble: (OpenStreetMap, Satellite Map and more), support for different
+marble: projections (globe, flat map, ...) and other planets, and download of
+marble: maps and route data for offline usage.
+marble:
marble:
-marble: For more information, visit: http://edu.kde.org/
-
diff --git a/kde/slack-desc/mbox-importer b/kde/slack-desc/mbox-importer
index 96e34f8..e16a125 100644
--- a/kde/slack-desc/mbox-importer
+++ b/kde/slack-desc/mbox-importer
@@ -15,5 +15,5 @@ mbox-importer:
mbox-importer:
mbox-importer:
mbox-importer:
-mbox-importer: Home page: http://www.kde.org/
+mbox-importer:
mbox-importer:
diff --git a/kde/slack-desc/messagelib b/kde/slack-desc/messagelib
index 36f958a..623a691 100644
--- a/kde/slack-desc/messagelib
+++ b/kde/slack-desc/messagelib
@@ -15,5 +15,5 @@ messagelib:
messagelib:
messagelib:
messagelib:
-messagelib: Home page: http://www.kde.org/
+messagelib:
messagelib:
diff --git a/kde/slack-desc/milou b/kde/slack-desc/milou
index 0d4dc65..4e52896 100644
--- a/kde/slack-desc/milou
+++ b/kde/slack-desc/milou
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
milou: milou (Plasma search applet)
milou:
-milou: A Plasma applet that can search files, emails, contacts,
-milou: events and more data indexed by KDE Desktop Search.
+milou: A Plasma applet that can search files, emails, contacts, events and
+milou: more data indexed by KDE Desktop Search.
+milou:
milou:
milou:
milou:
milou:
milou:
milou:
-milou: Homepage: http://kde.org/
diff --git a/kde/slack-desc/minuet b/kde/slack-desc/minuet
index 45eeaee..fb97760 100644
--- a/kde/slack-desc/minuet
+++ b/kde/slack-desc/minuet
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
minuet: minuet (software for music education)
minuet:
-minuet: Minuet: the KDE software for music education, such as ear training,
+minuet: Minuet is the KDE software for music education, such as ear training,
minuet: first-sight reading, solfa, scales, rhythm, harmony, and
-minuet: improvisation.
-minuet: Minuet makes extensive use of MIDI capabilities.
+minuet: improvisation. Minuet makes extensive use of MIDI capabilities.
+minuet:
+minuet:
minuet:
minuet:
minuet:
-minuet: For more information, visit: http://www.kde.org
minuet:
diff --git a/kde/slack-desc/modemmanager-qt b/kde/slack-desc/modemmanager-qt
index d515c01..ce9a1f6 100644
--- a/kde/slack-desc/modemmanager-qt
+++ b/kde/slack-desc/modemmanager-qt
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
modemmanager-qt: modemmanager-qt (ModemManager Qt5 bindings)
modemmanager-qt:
-modemmanager-qt: modemmanager-qt is a Tier 1 KDE Frameworks module
-modemmanager-qt: wrapping ModemManager DBus API.
+modemmanager-qt: modemmanager-qt is a Tier 1 KDE Frameworks module wrapping the
+modemmanager-qt: ModemManager DBus API.
+modemmanager-qt:
modemmanager-qt:
modemmanager-qt:
modemmanager-qt:
modemmanager-qt:
modemmanager-qt:
-modemmanager-qt: For more information, visit: http://www.kde.org
modemmanager-qt:
diff --git a/kde/slack-desc/networkmanager-qt b/kde/slack-desc/networkmanager-qt
index 45c6ba5..5c0ce54 100644
--- a/kde/slack-desc/networkmanager-qt
+++ b/kde/slack-desc/networkmanager-qt
@@ -6,7 +6,7 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-networkmanager-qt: libnm-qt (NetworkManager Qt bindings)
+networkmanager-qt: networkmanager-qt (NetworkManager Qt bindings)
networkmanager-qt:
networkmanager-qt: This package contains Qt bindings for NetworkManager.
networkmanager-qt:
@@ -15,5 +15,5 @@ networkmanager-qt:
networkmanager-qt:
networkmanager-qt:
networkmanager-qt:
-networkmanager-qt: For more information, visit: http://www.kde.org
+networkmanager-qt:
networkmanager-qt:
diff --git a/kde/slack-desc/okteta b/kde/slack-desc/okteta
index acc83d2..23c1c6b 100644
--- a/kde/slack-desc/okteta
+++ b/kde/slack-desc/okteta
@@ -15,5 +15,5 @@ okteta:
okteta:
okteta:
okteta:
-okteta: For more information, visit: http://www.kde.org
+okteta:
okteta:
diff --git a/kde/slack-desc/okular b/kde/slack-desc/okular
index 333d94f..9bf4c4b 100644
--- a/kde/slack-desc/okular
+++ b/kde/slack-desc/okular
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
okular: okular (a document viewer)
okular:
-okular: Okular is a document viewer for KDE.
-okular:
-okular: For more information, visit: http://www.kde.org
-okular:
-okular:
+okular: Okular is the unified document viewer for KDE. Okular combines
+okular: excellent functionalities with the versatility of supporting different
+okular: kinds of documents, like PDF, Postscript, DjVu, CHM, XPS, ePub, and
+okular: others.
okular:
+okular: Homepage: https://okular.kde.org
okular:
okular:
okular:
diff --git a/kde/slack-desc/oxygen b/kde/slack-desc/oxygen
index 3e090ef..8b323f3 100644
--- a/kde/slack-desc/oxygen
+++ b/kde/slack-desc/oxygen
@@ -8,7 +8,8 @@
|-----handy-ruler------------------------------------------------------|
oxygen: oxygen (KDE window manager theme)
oxygen:
-oxygen: KDE window manager theme.
+oxygen: Oxygen KDE window manager theme.
+oxygen:
oxygen:
oxygen:
oxygen:
@@ -16,4 +17,3 @@ oxygen:
oxygen:
oxygen:
oxygen:
-oxygen: Homepage: http://kde.org/
diff --git a/kde/slack-desc/oxygen-fonts b/kde/slack-desc/oxygen-fonts
index aae2124..1aae695 100644
--- a/kde/slack-desc/oxygen-fonts
+++ b/kde/slack-desc/oxygen-fonts
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
oxygen-fonts: oxygen-fonts (KDE desktop fonts)
oxygen-fonts:
-oxygen-fonts: Desktop/GUI font family for integrated use with the
-oxygen-fonts: KDE desktop.
+oxygen-fonts: Desktop/GUI font family for integrated use with the KDE desktop.
+oxygen-fonts:
+oxygen-fonts:
oxygen-fonts:
oxygen-fonts:
oxygen-fonts:
oxygen-fonts:
oxygen-fonts:
oxygen-fonts:
-oxygen-fonts: Homepage: http://kde.org/
diff --git a/kde/slack-desc/oxygen-gtk2 b/kde/slack-desc/oxygen-gtk2
index 9398d8d..3e7d4f5 100644
--- a/kde/slack-desc/oxygen-gtk2
+++ b/kde/slack-desc/oxygen-gtk2
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
oxygen-gtk2: oxygen-gtk2 (Oxygen GTK+ engine)
oxygen-gtk2:
-oxygen-gtk2: Oxygen-Gtk2 is a port of the KDE widget theme Oxygen, to GTK+.
-oxygen-gtk2: It's primary goal is to ensure visual consistency between GTK+ and
-oxygen-gtk2: qt-based applications running under kde. A secondary objective is
-oxygen-gtk2: to also have a stand-alone nice looking GTK+ theme that would behave
-oxygen-gtk2: well on other Desktop Environments.
-oxygen-gtk2: Unlike other attempts made to port the kde oxygen theme to GTK+, this
-oxygen-gtk2: attempt does not depend on Qt.
+oxygen-gtk2: Oxygen-Gtk2 is a port of the KDE widget theme Oxygen, to GTK+. Its
+oxygen-gtk2: primary goal is to ensure visual consistency between GTK+ and qt-based
+oxygen-gtk2: applications running under KDE. A secondary objective is to also have
+oxygen-gtk2: a stand-alone nice looking GTK+ theme that would behave well on other
+oxygen-gtk2: desktop environments. Unlike other attempts made to port the KDE
+oxygen-gtk2: oxygen theme to GTK+, this attempt does not depend on Qt.
oxygen-gtk2:
oxygen-gtk2: See: http://projects.kde.org/projects/playground/artwork/oxygen-gtk
+oxygen-gtk2:
diff --git a/kde/slack-desc/oxygen-icons5 b/kde/slack-desc/oxygen-icons5
index fab6fec..bbb2f1d 100644
--- a/kde/slack-desc/oxygen-icons5
+++ b/kde/slack-desc/oxygen-icons5
@@ -6,11 +6,11 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-oxygen-icons5: oxygen-icons5 (Oxygen theme for the KDE Plasma Desktop)
+oxygen-icons5: oxygen-icons5 (Oxygen theme for KDE)
oxygen-icons5:
oxygen-icons5: Oxygen provides a complete and modern icon theme for KDE.
oxygen-icons5:
-oxygen-icons5: Visit the Oxygen project online: http://www.oxygen-icons5.org
+oxygen-icons5:
oxygen-icons5:
oxygen-icons5:
oxygen-icons5:
diff --git a/kde/slack-desc/palapeli b/kde/slack-desc/palapeli
index f0d2e85..99cc7ba 100644
--- a/kde/slack-desc/palapeli
+++ b/kde/slack-desc/palapeli
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
palapeli: palapeli (jigsaw puzzle game)
palapeli:
-palapeli: Palapeli is a single-player jigsaw puzzle game.
-palapeli: Unlike other games in that genre, you are not limited to aligning
-palapeli: pieces on imaginary grids. The pieces are freely moveable.
-palapeli: Also, Palapeli features real persistency, i.e. everything you do
-palapeli: is saved on your disk immediately.
+palapeli: Palapeli is a single-player jigsaw puzzle game. Unlike other games in
+palapeli: that genre, you are not limited to aligning pieces on imaginary grids.
+palapeli: The pieces are freely moveable. Also, Palapeli features real
+palapeli: persistency, i.e. everything you do is saved immediately.
+palapeli:
+palapeli:
palapeli:
palapeli:
-palapeli: For more information, visit: http://www.kde.org
palapeli:
diff --git a/kde/slack-desc/parley b/kde/slack-desc/parley
index c4c08e9..765c0a7 100644
--- a/kde/slack-desc/parley
+++ b/kde/slack-desc/parley
@@ -10,7 +10,7 @@ parley: parley (vocabulary trainer)
parley:
parley: Parley is a vocabulary trainer for KDE.
parley:
-parley: For more information, visit: http://edu.kde.org/
+parley:
parley:
parley:
parley:
diff --git a/kde/slack-desc/partitionmanager b/kde/slack-desc/partitionmanager
index 37dbe49..846bfe4 100644
--- a/kde/slack-desc/partitionmanager
+++ b/kde/slack-desc/partitionmanager
@@ -5,12 +5,12 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler------------------------------------------------|
-partitionmanager: partitionmanager (Graphical partition manager for KDE)
+ |-----handy-ruler------------------------------------------------------|
+partitionmanager: partitionmanager (Graphical partition manager)
+partitionmanager:
+partitionmanager: Easily manage disks, partitions and filesystems on your KDE desktop.
+partitionmanager: Create, resize, move, copy, back up, restore or delete partitions.
partitionmanager:
-partitionmanager: Easily manage disks, partitions and filesystems on your KDE
-partitionmanager: desktop. Create, resize, move, copy, back up, restore or
-partitionmanager: delete partitions.
partitionmanager:
partitionmanager:
partitionmanager:
diff --git a/kde/slack-desc/picmi b/kde/slack-desc/picmi
index bc23ac6..4d01048 100644
--- a/kde/slack-desc/picmi
+++ b/kde/slack-desc/picmi
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
picmi: picmi (logic puzzle game)
picmi:
-picmi: Picmi is a single player logic-based puzzle game.
-picmi: The goal is to color cells according to numbers given at the side
-picmi: of the board in order to uncover a hidden pattern or picture.
+picmi: Picmi is a single player logic-based puzzle game. The goal is to color
+picmi: cells according to numbers given at the side of the board in order to
+picmi: uncover a hidden pattern or picture.
+picmi:
picmi:
picmi:
picmi:
picmi:
-picmi: For more information, visit: http://www.kde.org
picmi:
diff --git a/kde/slack-desc/pim-data-exporter b/kde/slack-desc/pim-data-exporter
index 6094dde..e4d4135 100644
--- a/kde/slack-desc/pim-data-exporter
+++ b/kde/slack-desc/pim-data-exporter
@@ -6,7 +6,7 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-pim-data-exporter: pim-data-exporter (import and export KDE PIM settings)
+pim-data-exporter: pim-data-exporter (export KDE PIM settings)
pim-data-exporter:
pim-data-exporter: Import and export KDE PIM settings.
pim-data-exporter:
@@ -15,5 +15,5 @@ pim-data-exporter:
pim-data-exporter:
pim-data-exporter:
pim-data-exporter:
-pim-data-exporter: Home page: http://www.kde.org/
+pim-data-exporter:
pim-data-exporter:
diff --git a/kde/slack-desc/pim-sieve-editor b/kde/slack-desc/pim-sieve-editor
index ea1e912..423ba8f 100644
--- a/kde/slack-desc/pim-sieve-editor
+++ b/kde/slack-desc/pim-sieve-editor
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-pim-sieve-editor: pim-sieve-editor (mail sieve editor)
+pim-sieve-editor: pim-sieve-editor (Sieve script editor)
pim-sieve-editor:
-pim-sieve-editor: Mail sieve editor.
+pim-sieve-editor: pim-sieve-editor is an editor for Sieve scripts used for email
+pim-sieve-editor: filtering on a mail server.
pim-sieve-editor:
pim-sieve-editor:
pim-sieve-editor:
pim-sieve-editor:
pim-sieve-editor:
pim-sieve-editor:
-pim-sieve-editor: Home page: http://www.kde.org/
pim-sieve-editor:
diff --git a/kde/slack-desc/pimcommon b/kde/slack-desc/pimcommon
index 3279604..699738a 100644
--- a/kde/slack-desc/pimcommon
+++ b/kde/slack-desc/pimcommon
@@ -15,5 +15,5 @@ pimcommon:
pimcommon:
pimcommon:
pimcommon:
-pimcommon: Home page: http://www.kde.org/
+pimcommon:
pimcommon:
diff --git a/kde/slack-desc/plasma-browser-integration b/kde/slack-desc/plasma-browser-integration
index 97d3468..2097608 100644
--- a/kde/slack-desc/plasma-browser-integration
+++ b/kde/slack-desc/plasma-browser-integration
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-plasma-browser-integration: plasma-browser-integration (integrate browsers into the Plasma desktop)
+plasma-browser-integration: plasma-browser-integration (integrate browsers into Plasma)
+plasma-browser-integration:
+plasma-browser-integration: The plasma-browser-integration package contains components necessary
+plasma-browser-integration: to integrate browsers into the Plasma Desktop
plasma-browser-integration:
-plasma-browser-integration: The plasma-browser-integration package contains
-plasma-browser-integration: omponents necessary to integrate browsers into the Plasma Desktop
plasma-browser-integration:
plasma-browser-integration:
plasma-browser-integration:
plasma-browser-integration:
plasma-browser-integration:
-plasma-browser-integration: Home page: https://www.kde.org/plasma-desktop
plasma-browser-integration:
diff --git a/kde/slack-desc/plasma-desktop b/kde/slack-desc/plasma-desktop
index c978f4b..ea48427 100644
--- a/kde/slack-desc/plasma-desktop
+++ b/kde/slack-desc/plasma-desktop
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
plasma-desktop: plasma-desktop (KDE Plasma Desktop)
plasma-desktop:
-plasma-desktop: Provides the environment for running and managing
-plasma-desktop: applications and integrating interaction of
-plasma-desktop: applications. It is designed as generic environment
-plasma-desktop: for all kinds of desktop applications, not only
-plasma-desktop: applications built on the KDE Platform. It integrates
-plasma-desktop: best with applications following the standards used
-plasma-desktop: by the KDE Platform.
+plasma-desktop: Provides the environment for running and managing applications and
+plasma-desktop: integrating interaction of applications. It is designed as a generic
+plasma-desktop: environment for all kinds of desktop applications, not only
+plasma-desktop: applications built on the KDE Platform. It integrates best with
+plasma-desktop: applications following the standards used by the KDE Platform.
+plasma-desktop:
+plasma-desktop:
+plasma-desktop:
plasma-desktop:
-plasma-desktop: Homepage: http://kde.org/
diff --git a/kde/slack-desc/plasma-framework b/kde/slack-desc/plasma-framework
index 8eab3dc..25f0612 100644
--- a/kde/slack-desc/plasma-framework
+++ b/kde/slack-desc/plasma-framework
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-plasma-framework: plasma-framework (Plasma libraries and runtime components)
+plasma-framework: plasma-framework (Plasma libraries and components)
+plasma-framework:
+plasma-framework: This package contains Plasma libraries and runtime components such as
+plasma-framework: QML support for Plasma.
plasma-framework:
-plasma-framework: This package contains Plasma libraries and runtime
-plasma-framework: components such as QML support for Plasma.
plasma-framework:
plasma-framework:
plasma-framework:
plasma-framework:
plasma-framework:
plasma-framework:
-plasma-framework: Homepage: http://kde.org/
diff --git a/kde/slack-desc/plasma-integration b/kde/slack-desc/plasma-integration
index ff92725..0a075a6 100644
--- a/kde/slack-desc/plasma-integration
+++ b/kde/slack-desc/plasma-integration
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
plasma-integration: plasma-integration (Plasma theme integration plugins)
plasma-integration:
-plasma-integration: Qt Platform Theme integration plugins for the Plasma workspaces
+plasma-integration: Plasma Integration is a set of plugins responsible for better
+plasma-integration: integration of Qt applications when running on a KDE Plasma workspace.
+plasma-integration:
plasma-integration:
plasma-integration:
plasma-integration:
plasma-integration:
plasma-integration:
-plasma-integration: For more information, visit:
-plasma-integration: https://projects.kde.org/plasma-integration
plasma-integration:
diff --git a/kde/slack-desc/plasma-pa b/kde/slack-desc/plasma-pa
index 9ad039c..21bcb68 100644
--- a/kde/slack-desc/plasma-pa
+++ b/kde/slack-desc/plasma-pa
@@ -6,7 +6,7 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-plasma-pa: plasma-pa (KDE audio volume manager using PA)
+plasma-pa: plasma-pa (Plasma PA volume applet)
plasma-pa:
plasma-pa: Plasma applet for audio volume management using PulseAudio.
plasma-pa:
@@ -15,5 +15,5 @@ plasma-pa:
plasma-pa:
plasma-pa:
plasma-pa:
-plasma-pa: For more information, visit: https://projects.kde.org/plasma-pa
+plasma-pa:
plasma-pa:
diff --git a/kde/slack-desc/plasma-sdk b/kde/slack-desc/plasma-sdk
index 5da3248..21d29bd 100644
--- a/kde/slack-desc/plasma-sdk
+++ b/kde/slack-desc/plasma-sdk
@@ -15,5 +15,5 @@ plasma-sdk:
plasma-sdk:
plasma-sdk:
plasma-sdk:
-plasma-sdk: For more information, visit: http://www.kde.org
+plasma-sdk:
plasma-sdk:
diff --git a/kde/slack-desc/plasma-vault b/kde/slack-desc/plasma-vault
index 32a8ac5..8747156 100644
--- a/kde/slack-desc/plasma-vault
+++ b/kde/slack-desc/plasma-vault
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-plasma-vault: plasma-vault (create encrypted vaults in plasma5 desktop)
+plasma-vault: plasma-vault (create encrypted vaults)
plasma-vault:
-plasma-vault: Plasma applet and services for creating encrypted vaults.
-plasma-vault: Plasma Vault offers strong encryption features presented in
-plasma-vault: a user-friendly way. Lock and encrypt documents and hide them
-plasma-vault: when the user is logged in.
+plasma-vault: Plasma applet and services for creating encrypted vaults. Plasma Vault
+plasma-vault: offers strong encryption features presented in a user-friendly way.
+plasma-vault: Lock and encrypt documents and hide them when the user is logged in.
plasma-vault: These 'vaults' can be decrypted and opened easily.
plasma-vault:
plasma-vault:
-plasma-vault: Home page: http://www.kde.org/
+plasma-vault:
+plasma-vault:
plasma-vault:
diff --git a/kde/slack-desc/plasma-wayland-protocols b/kde/slack-desc/plasma-wayland-protocols
new file mode 100644
index 0000000..8c597c4
--- /dev/null
+++ b/kde/slack-desc/plasma-wayland-protocols
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|'
+# on the right side marks the last column you can put a character in. You must
+# make exactly 11 lines for the formatting to be correct. It's also
+# customary to leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+plasma-wayland-protocols: plasma-wayland-protocols (Plasma protocols for Wayland)
+plasma-wayland-protocols:
+plasma-wayland-protocols: This project contains xml files of non-standard Wayland protocols used
+plasma-wayland-protocols: by Plasma.
+plasma-wayland-protocols:
+plasma-wayland-protocols:
+plasma-wayland-protocols:
+plasma-wayland-protocols:
+plasma-wayland-protocols:
+plasma-wayland-protocols:
+plasma-wayland-protocols:
diff --git a/kde/slack-desc/plasma-workspace b/kde/slack-desc/plasma-workspace
index 7003c84..512a2b8 100644
--- a/kde/slack-desc/plasma-workspace
+++ b/kde/slack-desc/plasma-workspace
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
plasma-workspace: plasma-workspace (KDE Plasma Workspace)
plasma-workspace:
+plasma-workspace: The Plasma Workspace provides support for KDE Plasma Widgets,
+plasma-workspace: integrated search, hardware management, and a high degree of
+plasma-workspace: customizability.
plasma-workspace:
plasma-workspace:
plasma-workspace:
plasma-workspace:
plasma-workspace:
plasma-workspace:
-plasma-workspace:
-plasma-workspace:
-plasma-workspace: Homepage: http://kde.org/
diff --git a/kde/slack-desc/plasma-workspace-wallpapers b/kde/slack-desc/plasma-workspace-wallpapers
index 113df69..6dc16da 100644
--- a/kde/slack-desc/plasma-workspace-wallpapers
+++ b/kde/slack-desc/plasma-workspace-wallpapers
@@ -5,10 +5,10 @@
# exactly 11 lines for the formatting to be correct. It's also customary to
# leave one space after the ':'.
- |-----handy-ruler-------------------------------------------------|
-plasma-workspace-wallpapers: plasma-workspace-wallpapers (Wallpapers for KDE Plasma Workspace)
+ |-----handy-ruler------------------------------------------------------|
+plasma-workspace-wallpapers: plasma-workspace-wallpapers (Wallpapers for Plasma)
plasma-workspace-wallpapers:
-plasma-workspace-wallpapers: Additional wallpapers for KDE.
+plasma-workspace-wallpapers: Additional wallpapers for the KDE Plasma Workspace.
plasma-workspace-wallpapers:
plasma-workspace-wallpapers:
plasma-workspace-wallpapers:
diff --git a/kde/slack-desc/plasma5-nm b/kde/slack-desc/plasma5-nm
index 1c2dab3..8d638eb 100644
--- a/kde/slack-desc/plasma5-nm
+++ b/kde/slack-desc/plasma5-nm
@@ -9,11 +9,11 @@
plasma5-nm: plasma5-nm (KDE networkmanagement applet)
plasma5-nm:
plasma5-nm: This package contains the KDE networkmanagement applet for Plasma 5.
-plasma5-nm: This applet is written in QML and replacing the old widget based
-plasma5-nm: networkmanagement applet.
plasma5-nm:
plasma5-nm:
plasma5-nm:
plasma5-nm:
-plasma5-nm: For more information, visit: http://www.kde.org
+plasma5-nm:
+plasma5-nm:
+plasma5-nm:
plasma5-nm:
diff --git a/kde/slack-desc/polkit-kde-framework b/kde/slack-desc/polkit-kde-framework
index 9d62204..5846763 100644
--- a/kde/slack-desc/polkit-kde-framework
+++ b/kde/slack-desc/polkit-kde-framework
@@ -5,15 +5,15 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
polkit-kde-framework: polkit-kde-framework (KDE polkit authenticator)
polkit-kde-framework:
polkit-kde-framework: This daemon provides a polkit authenticator UI for KDE.
polkit-kde-framework:
+polkit-kde-framework: See also:
+polkit-kde-framework: https://projects.kde.org/projects/kde/workspace/polkit-kde-agent-1
polkit-kde-framework:
polkit-kde-framework:
polkit-kde-framework:
polkit-kde-framework:
-polkit-kde-framework: See also:
-polkit-kde-framework: https://projects.kde.org/projects/kde/workspace/polkit-kde-agent-1
polkit-kde-framework:
diff --git a/kde/slack-desc/polkit-kde-kcmodules-framework b/kde/slack-desc/polkit-kde-kcmodules-framework
index 91a3207..cf66c65 100644
--- a/kde/slack-desc/polkit-kde-kcmodules-framework
+++ b/kde/slack-desc/polkit-kde-kcmodules-framework
@@ -5,7 +5,7 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
polkit-kde-kcmodules-framework: polkit-kde-kcmodules-framework (KDE polkit kcmodules)
polkit-kde-kcmodules-framework:
polkit-kde-kcmodules-framework: This package contains the kcm_polkit modules for KDE.
@@ -16,3 +16,4 @@ polkit-kde-kcmodules-framework:
polkit-kde-kcmodules-framework:
polkit-kde-kcmodules-framework:
polkit-kde-kcmodules-framework:
+polkit-kde-kcmodules-framework:
diff --git a/kde/slack-desc/powerdevil b/kde/slack-desc/powerdevil
index 23dd81d..87d9937 100644
--- a/kde/slack-desc/powerdevil
+++ b/kde/slack-desc/powerdevil
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
powerdevil: powerdevil (power management tool)
powerdevil:
-powerdevil: PowerDevil is a KDE utility for Laptop Powermanagement.
+powerdevil: PowerDevil is a is a configuration tool for Power Management in
+powerdevil: Plasma. Through this module, you can define your computer's behavior
+powerdevil: in various situations, allowing you to save as much energy as
+powerdevil: possible.
powerdevil:
powerdevil:
powerdevil:
powerdevil:
powerdevil:
-powerdevil:
-powerdevil:
-powerdevil: Homepage: http://kde.org/
diff --git a/kde/slack-desc/poxml b/kde/slack-desc/poxml
index f01885d..222570b 100644
--- a/kde/slack-desc/poxml
+++ b/kde/slack-desc/poxml
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-poxml: poxml (translate DocBook XML files using gettext po files)
+poxml: poxml (translate DocBook XML files)
poxml:
poxml: This is a collection of tools that facilitate translating DocBook XML
-poxml: files using Gettext message files (PO files).
-poxml: Also included are several command-line utilities for manipulating
-poxml: DocBook XML files, PO files and PO template files.
+poxml: files using Gettext message files (PO files). Also included are
+poxml: several command-line utilities for manipulating DocBook XML files, PO
+poxml: files and PO template files.
+poxml:
poxml:
poxml:
poxml:
-poxml: For more information, visit: http://www.kde.org
poxml:
diff --git a/kde/slack-desc/print-manager b/kde/slack-desc/print-manager
index 623c0bc..4e25da1 100644
--- a/kde/slack-desc/print-manager
+++ b/kde/slack-desc/print-manager
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-print-manager: print-manager (tool for managing print jobs and printers)
+print-manager: print-manager (manage print jobs and printers)
print-manager:
-print-manager: Print Manager (formerly printer-applet) is a system tray utility
-print-manager: that shows current print jobs, printer warnings, and errors.
+print-manager: Print Manager is a system tray utility that shows current print jobs,
+print-manager: printer warnings, and errors.
+print-manager:
+print-manager: Homepage: https://projects.kde.org/projects/kde/kdeutils/print-manager
print-manager:
print-manager:
print-manager:
print-manager:
-print-manager: Homepage:
-print-manager: https://projects.kde.org/projects/kde/kdeutils/print-manager
print-manager:
diff --git a/kde/slack-desc/prison b/kde/slack-desc/prison
index aa99009..101b27f 100644
--- a/kde/slack-desc/prison
+++ b/kde/slack-desc/prison
@@ -5,13 +5,13 @@
# make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':'.
- |-----handy-ruler-----------------------------------------------------|
+ |-----handy-ruler------------------------------------------------------|
prison: prison (Qt based Barcode API)
prison:
-prison: Prison is a barcode API currently offering a Qt API to produce
-prison: QRCode barcodes and DotMatrix barcodes.
+prison: Prison is a barcode API currently offering a Qt API to produce QRCode
+prison: barcodes and DotMatrix barcodes.
prison:
-prison: git clone git://anongit.kde.org/prison
+prison: Homepage: http://anongit.kde.org/prison
prison:
prison:
prison:
diff --git a/kde/slack-desc/pulseaudio-qt b/kde/slack-desc/pulseaudio-qt
index 499cdae..bc6608b 100644
--- a/kde/slack-desc/pulseaudio-qt
+++ b/kde/slack-desc/pulseaudio-qt
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-pulseaudio-qt: pulseaudio-qt (PulseAudio Qt Bindings)
+pulseaudio-qt: pulseaudio-qt (PulseAudio Qt bindings)
pulseaudio-qt:
-pulseaudio-qt: PulseaudioQt allows programs using the Qt library to control
-pulseaudio-qt: volume and react to changes on systems which use PulseAudio.
+pulseaudio-qt: PulseaudioQt allows programs using the Qt library to control volume
+pulseaudio-qt: and react to changes on systems which use PulseAudio.
pulseaudio-qt:
+pulseaudio-qt: Homepage: https://cgit.kde.org/pulseaudio-qt.git/
pulseaudio-qt:
pulseaudio-qt:
pulseaudio-qt:
pulseaudio-qt:
-pulseaudio-qt: pulseaudio-qt home: https://cgit.kde.org/pulseaudio-qt.git/
pulseaudio-qt:
diff --git a/kde/slack-desc/purpose b/kde/slack-desc/purpose
index 880883a..b2f0d70 100644
--- a/kde/slack-desc/purpose
+++ b/kde/slack-desc/purpose
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-purpose: purpose (offers available actions for a specific purpose)
+purpose: purpose (offers actions for a specific purpose)
+purpose:
+purpose: This framework offers the possibility to create integrate services and
+purpose: actions on any application without having to implement them
+purpose: specifically. Purpose will offer them mechanisms to list the different
+purpose: alternatives to execute given the requested action type and will
+purpose: facilitate components so that all the plugins can receive all the
+purpose: information they need.
+purpose:
purpose:
-purpose: This framework offers the possibility to create integrate services
-purpose: and actions on any application without having to implement them
-purpose: specifically.
-purpose: Purpose will offer them mechanisms to list the different alternatives
-purpose: to execute given the requested action type and will facilitate
-purpose: components so that all the plugins can receive all the information
-purpose: they need.
purpose:
-purpose: Home page: http://www.kde.org/
diff --git a/kde/slack-desc/qqc2-desktop-style b/kde/slack-desc/qqc2-desktop-style
index f128b48..0d27525 100644
--- a/kde/slack-desc/qqc2-desktop-style
+++ b/kde/slack-desc/qqc2-desktop-style
@@ -6,14 +6,14 @@
# customary to leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-qqc2-desktop-style: qqc2-desktop-style (desktop integration for qt quick controls 2)
+qqc2-desktop-style: qqc2-desktop-style (desktop integration for Qt Quick Controls 2)
+qqc2-desktop-style:
+qqc2-desktop-style: QQC2-Desktop-Style is a style for Qt Quick Controls 2 (QQC2) which
+qqc2-desktop-style: uses QStyle to paint the controls in order to give them a native look
+qqc2-desktop-style: and feel.
+qqc2-desktop-style:
+qqc2-desktop-style: Homepage: https://api.kde.org/frameworks/qqc2-desktop-style/html/
qqc2-desktop-style:
-qqc2-desktop-style: This is a style for QtQuick Controls 2 which is using QStyle to paint
-qqc2-desktop-style: controls in order to give them a native look & feel on the desktop.
-qqc2-desktop-style: It will be used when te environment variable
-qqc2-desktop-style: QT_QUICK_CONTROLS_STYLE=org.kde.desktop is exported,
-qqc2-desktop-style: or directly in C++ code.
qqc2-desktop-style:
qqc2-desktop-style:
-qqc2-desktop-style: Home page: https://api.kde.org/frameworks/qqc2-desktop-style/html/
qqc2-desktop-style:
diff --git a/kde/slack-desc/rocs b/kde/slack-desc/rocs
index 8ba31c9..954525d 100644
--- a/kde/slack-desc/rocs
+++ b/kde/slack-desc/rocs
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
rocs: rocs (graph theory IDE)
rocs:
-rocs: Rocs is a Graph Theory IDE for professors and students.
-rocs:
-rocs: For more information, visit: http://edu.kde.org/
-rocs:
-rocs:
-rocs:
+rocs: Rocs is a Graph Theory IDE for everybody interested in designing and
+rocs: analyzing graph algorithms (e.g., lecturers, students, researchers).
+rocs: For all these users, Rocs provides an easy to use visual data
+rocs: structure editor and a powerful scripting engine to execute
+rocs: algorithms. Algorithms are specified in JavaScript.
rocs:
+rocs: Homepage: https://www.kde.org/applications/education/rocs
rocs:
rocs:
diff --git a/kde/slack-desc/sddm-kcm b/kde/slack-desc/sddm-kcm
index 53c6907..deb646c 100644
--- a/kde/slack-desc/sddm-kcm
+++ b/kde/slack-desc/sddm-kcm
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-sddm-kcm: sddm-kcm (configure sddm in kde)
+sddm-kcm: sddm-kcm (configure SDDM in kde)
sddm-kcm:
-sddm-kcm: KCM module for SDDM.
-sddm-kcm: This module allows for configuring SDDM for KDE System Settings.
+sddm-kcm: KCM module for SDDM. This module allows for configuring SDDM in the
+sddm-kcm: KDE System Settings.
sddm-kcm:
+sddm-kcm: Homepage: https://github.com/sddm/sddm-kcm
sddm-kcm:
sddm-kcm:
sddm-kcm:
sddm-kcm:
-sddm-kcm: For more information, visit: https://github.com/sddm/sddm-kcm
sddm-kcm:
diff --git a/kde/slack-desc/sddm-qt5 b/kde/slack-desc/sddm-qt5
index 3de2a15..89e461a 100644
--- a/kde/slack-desc/sddm-qt5
+++ b/kde/slack-desc/sddm-qt5
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
sddm-qt5: sddm-qt5 (QML based X11 display manager)
sddm-qt5:
-sddm-qt5: SDDM is a modern display manager for X11 aiming to be fast, simple
-sddm-qt5: and beatiful. It uses modern technologies like QtQuick, which in turn
+sddm-qt5: SDDM is a modern display manager for X11 aiming to be fast, simple and
+sddm-qt5: beautiful. It uses modern technologies like QtQuick, which in turn
sddm-qt5: gives the designer the ability to create smooth, animated user
-sddm-qt5: interfaces. SDDM is extremely themeable.
-sddm-qt5: There are a few sample themes distributed with SDDM. They can be used
-sddm-qt5: as a starting point for new themes.
+sddm-qt5: interfaces. SDDM is extremely themeable. There are a few sample themes
+sddm-qt5: distributed with SDDM. They can be used as a starting point for new
+sddm-qt5: themes.
sddm-qt5:
-sddm-qt5: See https://github.com/sddm/
+sddm-qt5: Homepage: https://github.com/sddm/
sddm-qt5:
diff --git a/kde/slack-desc/signon-kwallet-extension b/kde/slack-desc/signon-kwallet-extension
index 7956369..a2d071b 100644
--- a/kde/slack-desc/signon-kwallet-extension
+++ b/kde/slack-desc/signon-kwallet-extension
@@ -6,14 +6,14 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-signon-kwallet-extension: signon-kwallet-extension (KWallet signon extension)
+signon-kwallet-extension: signon-kwallet-extension (KWallet SignOn extension)
+signon-kwallet-extension:
+signon-kwallet-extension: KWallet integration for the SignOn framework.
signon-kwallet-extension:
-signon-kwallet-extension: KWallet signon extension.
signon-kwallet-extension:
signon-kwallet-extension:
signon-kwallet-extension:
signon-kwallet-extension:
signon-kwallet-extension:
signon-kwallet-extension:
-signon-kwallet-extension: For more information, visit: http://www.kde.org/
signon-kwallet-extension:
diff --git a/kde/slack-desc/skanlite b/kde/slack-desc/skanlite
index b4e994d..b3048d7 100644
--- a/kde/slack-desc/skanlite
+++ b/kde/slack-desc/skanlite
@@ -6,9 +6,9 @@
# leave one space after the ':'.
|-----handy-ruler------------------------------------------------------|
-skanlite: skanlite (a scanning program)
+skanlite: skanlite (scanning program)
skanlite:
-skanlite: Skanlite is a light-weight scanning application based on libksane.
+skanlite: Skanlite is a lightweight scanning application based on libksane.
skanlite:
skanlite:
skanlite:
diff --git a/kde/slack-desc/solid b/kde/slack-desc/solid
index 7b64d7d..6224dc2 100644
--- a/kde/slack-desc/solid
+++ b/kde/slack-desc/solid
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-solid: solid (solid)
+solid: solid (Desktop hardware abstraction)
solid:
+solid: Solid is a device integration framework. It provides a way of querying
+solid: and interacting with hardware independently of the underlying
+solid: operating system. It provides hardware discovery, power management,
+solid: and network management features.
solid:
+solid: Homepage: https://api.kde.org/frameworks/solid/html/
solid:
solid:
solid:
-solid:
-solid:
-solid:
-solid:
-solid: Homepage: http://kde.org/
diff --git a/kde/slack-desc/sonnet b/kde/slack-desc/sonnet
index 3c7db52..16c9405 100644
--- a/kde/slack-desc/sonnet
+++ b/kde/slack-desc/sonnet
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-sonnet: sonnet (sonnet)
+sonnet: sonnet (Multi-language spell checker)
sonnet:
+sonnet: Sonnet is a plugin-based spell checking library for Qt-based
+sonnet: applications. It supports several different plugins, including HSpell,
+sonnet: Enchant, ASpell and HUNSPELL. It also supports automated language
+sonnet: detection, based on a combination of different algorithms.
sonnet:
sonnet:
sonnet:
sonnet:
sonnet:
-sonnet:
-sonnet:
-sonnet:
-sonnet: Homepage: http://kde.org/
diff --git a/kde/slack-desc/spectacle b/kde/slack-desc/spectacle
index bb7532b..bbc99f0 100644
--- a/kde/slack-desc/spectacle
+++ b/kde/slack-desc/spectacle
@@ -8,9 +8,9 @@
|-----handy-ruler------------------------------------------------------|
spectacle: spectacle (screen capture program)
spectacle:
-spectacle: A screenshot utility for KDE.
+spectacle: Spectacle is screenshot taking utility for the KDE desktop. Spectacle
+spectacle: can also be used in non-KDE X11 desktop environments.
spectacle:
-spectacle: For more information, visit: http://www.kde.org
spectacle:
spectacle:
spectacle:
diff --git a/kde/slack-desc/step b/kde/slack-desc/step
index 6b3c8bf..1ae9f99 100644
--- a/kde/slack-desc/step
+++ b/kde/slack-desc/step
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
step: step (interactive physics simulator)
step:
-step: Step is an interactive physical simulator.
-step: It works like this: you place some bodies on the scene, add some
-step: forces such as gravity or springs, then click "Simulate" and Step
-step: shows you how your scene will evolve according to the laws of physics.
-step: With Step you can not only learn but feel how physics works !
+step: Step is an interactive physical simulator. It works like this: you
+step: place some bodies on the scene, add some forces such as gravity or
+step: springs, then click "Simulate" and Step shows you how your scene will
+step: evolve according to the laws of physics. With Step you can not only
+step: learn but feel how physics works!
+step:
step:
-step: For more information, visit: http://edu.kde.org/
step:
step:
diff --git a/kde/slack-desc/svgpart b/kde/slack-desc/svgpart
index dbee48b..ef95b6c 100644
--- a/kde/slack-desc/svgpart
+++ b/kde/slack-desc/svgpart
@@ -10,7 +10,7 @@ svgpart: svgpart (SVG plugin for KDE)
svgpart:
svgpart: KPart for viewing SVG files in KDE.
svgpart:
-svgpart: For more information, visit: http://www.kde.org
+svgpart:
svgpart:
svgpart:
svgpart:
diff --git a/kde/slack-desc/sweeper b/kde/slack-desc/sweeper
index b0ae9f3..ecf38e2 100644
--- a/kde/slack-desc/sweeper
+++ b/kde/slack-desc/sweeper
@@ -10,7 +10,7 @@ sweeper: sweeper (remove traces of your activities)
sweeper:
sweeper: Sweeper helps to clean unwanted traces the user leaves on the system.
sweeper:
-sweeper: Home page: https://projects.kde.org/projects/kde/kdeutils/sweeper
+sweeper: Homepage: https://projects.kde.org/projects/kde/kdeutils/sweeper
sweeper:
sweeper:
sweeper:
diff --git a/kde/slack-desc/syndication b/kde/slack-desc/syndication
index 2156c72..7360bdf 100644
--- a/kde/slack-desc/syndication
+++ b/kde/slack-desc/syndication
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
syndication: syndication (RSS/Atom parser library)
syndication:
-syndication: syndication contains a RSS/Atom parser library.
+syndication: Syndication is a RSS/Atom parser library supporting RSS (0.9/1.0,
+syndication: 0.91..2.0) and Atom (0.3 and 1.0) feeds. Syndication offers a unified,
+syndication: format-agnostic view on the parsed feed, so that the using application
+syndication: does not need to distinguish between feed formats.
syndication:
syndication:
syndication:
syndication:
syndication:
-syndication:
-syndication: Home page: http://www.kde.org/
-syndication:
diff --git a/kde/slack-desc/syntax-highlighting b/kde/slack-desc/syntax-highlighting
index c821b5f..ff92343 100644
--- a/kde/slack-desc/syntax-highlighting
+++ b/kde/slack-desc/syntax-highlighting
@@ -15,5 +15,5 @@ syntax-highlighting:
syntax-highlighting:
syntax-highlighting:
syntax-highlighting:
-syntax-highlighting: See http://kde.org
+syntax-highlighting:
syntax-highlighting:
diff --git a/kde/slack-desc/systemsettings b/kde/slack-desc/systemsettings
index 4ee9c5d..1d9f89f 100644
--- a/kde/slack-desc/systemsettings
+++ b/kde/slack-desc/systemsettings
@@ -16,4 +16,4 @@ systemsettings:
systemsettings:
systemsettings:
systemsettings:
-systemsettings: Homepage: http://kde.org/
+systemsettings:
diff --git a/kde/slack-desc/threadweaver b/kde/slack-desc/threadweaver
index 0bdd4d8..c9b9bc0 100644
--- a/kde/slack-desc/threadweaver
+++ b/kde/slack-desc/threadweaver
@@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
-threadweaver: threadweaver (threadweaver)
+threadweaver: threadweaver (threaded programming helper)
threadweaver:
+threadweaver: ThreadWeaver is a helper for multithreaded programming. It uses a job-
+threadweaver: based interface to queue tasks and execute them in an efficient way.
+threadweaver: You simply divide the workload into jobs, state the dependencies
+threadweaver: between the jobs and ThreadWeaver will work out the most efficient way
+threadweaver: of dividing the work between threads within a set of resource limits.
threadweaver:
threadweaver:
threadweaver:
threadweaver:
-threadweaver:
-threadweaver:
-threadweaver:
-threadweaver:
-threadweaver: Homepage: http://kde.org/
diff --git a/kde/slack-desc/umbrello b/kde/slack-desc/umbrello
index bf23672..a5fa2e1 100644
--- a/kde/slack-desc/umbrello
+++ b/kde/slack-desc/umbrello
@@ -15,5 +15,5 @@ umbrello:
umbrello:
umbrello:
umbrello:
-umbrello: For more information, visit: http://www.kde.org
+umbrello:
umbrello:
diff --git a/kde/slack-desc/user-manager b/kde/slack-desc/user-manager
index b84f0ad..4c8cf3b 100644
--- a/kde/slack-desc/user-manager
+++ b/kde/slack-desc/user-manager
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
user-manager: user-manager (manage the users of your system)
user-manager:
-user-manager: USer-manager is a system settings module to manage the users
-user-manager: of your system.
+user-manager: User-manager is a system settings module to manage the users of your
+user-manager: system.
+user-manager:
user-manager:
user-manager:
user-manager:
user-manager:
user-manager:
-user-manager: See also: https://cgit.kde.org/user-manager.git
user-manager:
diff --git a/kde/slack-desc/wacomtablet b/kde/slack-desc/wacomtablet
index c54cf87..a383543 100644
--- a/kde/slack-desc/wacomtablet
+++ b/kde/slack-desc/wacomtablet
@@ -8,12 +8,12 @@
|-----handy-ruler------------------------------------------------------|
wacomtablet: wacomtablet (kcm for Wacom tablets)
wacomtablet:
-wacomtablet: This module implements a GUI for the Wacom Linux Drivers
-wacomtablet: and extends it with profile support to handle different
-wacomtablet: button / pen layouts per profile.
+wacomtablet: This module implements a GUI for the Wacom Linux Drivers and extends
+wacomtablet: it with profile support to handle different button / pen layouts per
+wacomtablet: profile.
wacomtablet:
+wacomtablet: Homepage: https://github.com/KDE/wacomtablet
wacomtablet:
wacomtablet:
wacomtablet:
-wacomtablet: Home page: https://github.com/KDE/wacomtablet
wacomtablet:
diff --git a/kde/slack-desc/xdg-desktop-portal-kde b/kde/slack-desc/xdg-desktop-portal-kde
index 35b443b..e436c5e 100644
--- a/kde/slack-desc/xdg-desktop-portal-kde
+++ b/kde/slack-desc/xdg-desktop-portal-kde
@@ -15,5 +15,5 @@ xdg-desktop-portal-kde:
xdg-desktop-portal-kde:
xdg-desktop-portal-kde:
xdg-desktop-portal-kde:
-xdg-desktop-portal-kde: Home page: http://www.kde.org/
+xdg-desktop-portal-kde:
xdg-desktop-portal-kde:
diff --git a/kde/slack-desc/yakuake b/kde/slack-desc/yakuake
index ce21172..66cd817 100644
--- a/kde/slack-desc/yakuake
+++ b/kde/slack-desc/yakuake
@@ -9,11 +9,11 @@
yakuake: yakuake (drop-down terminal)
yakuake:
yakuake: Yakuake is a drop-down terminal emulator based on KDE Konsole.
-yakuake: Features:
-yakuake: + Smoothly rolls down from the top of your screen
-yakuake: + Tabbed, skinnable interface
-yakuake: + Configurable dimensions and animation speed
-yakuake: + Sophisticated D-Bus interface
yakuake:
-yakuake: Home page: http://www.kde.org/
+yakuake: Some of the features of Yakuake include:
+yakuake: Smoothly rolls down from the top of your screen
+yakuake: Tabbed, skinnable interface
+yakuake: Configurable dimensions and animation speed
+yakuake: Sophisticated D-Bus interface
+yakuake:
yakuake:
diff --git a/kde/slack-desc/zeroconf-ioslave b/kde/slack-desc/zeroconf-ioslave
index a406d55..b823aea 100644
--- a/kde/slack-desc/zeroconf-ioslave
+++ b/kde/slack-desc/zeroconf-ioslave
@@ -15,5 +15,5 @@ zeroconf-ioslave:
zeroconf-ioslave:
zeroconf-ioslave:
zeroconf-ioslave:
-zeroconf-ioslave: For more information, visit: http://www.kde.org
+zeroconf-ioslave:
zeroconf-ioslave:
diff --git a/kde/src/applications-extra/fetch-krita.sh b/kde/src/applications-extra/fetch-krita.sh
new file mode 100755
index 0000000..0072059
--- /dev/null
+++ b/kde/src/applications-extra/fetch-krita.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+# Copyright 2019, 2020 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 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.
+
+
+PKGNAM=krita
+
+# Pull a stable branch + patches
+BRANCH=${1:-master}
+
+# Clear download area:
+rm -rf ${PKGNAM}
+
+# Clone repository:
+git clone https://github.com/KDE/${PKGNAM}
+
+# checkout $BRANCH:
+( cd ${PKGNAM}
+ git checkout $BRANCH || exit 1
+)
+
+HEADISAT="$( cd ${PKGNAM} && git log -1 --format=%h )"
+DATE="$( cd ${PKGNAM} && git log -1 --format=%cd --date=format:%Y%m%d )"
+LONGDATE="$( cd ${PKGNAM} && git log -1 --format=%cd --date=format:%c )"
+# Cleanup. We're not packing up the whole git repo.
+( cd ${PKGNAM} && find . -type d -name ".git*" -exec rm -rf {} \; 2> /dev/null )
+mv ${PKGNAM} ${PKGNAM}-${DATE}_${HEADISAT}
+tar cf ${PKGNAM}-${DATE}_${HEADISAT}.tar ${PKGNAM}-${DATE}_${HEADISAT}
+plzip -9 -f ${PKGNAM}-${DATE}_${HEADISAT}.tar
+rm -rf ${PKGNAM}-${DATE}_${HEADISAT}
+touch -d "$LONGDATE" ${PKGNAM}-${DATE}_${HEADISAT}.tar.lz
+echo
+echo "${PKGNAM} branch $BRANCH with HEAD at $HEADISAT packaged as ${PKGNAM}-${DATE}_${HEADISAT}.tar.lz"
+echo
diff --git a/kde/src/plasma-extra/fetch-wacomtablet.sh b/kde/src/plasma-extra/fetch-wacomtablet.sh
new file mode 100755
index 0000000..f75dbc5
--- /dev/null
+++ b/kde/src/plasma-extra/fetch-wacomtablet.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+# Copyright 2019, 2020 Patrick J. Volkerding, Sebeka, Minnesota, USA
+# All rights reserved.
+#
+# Redistribution and use of this script, with or without modification, is
+# permitted provided that the following conditions are met:
+#
+# 1. Redistributions of this script must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# 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.
+
+
+PKGNAM=wacomtablet
+
+# Pull a stable branch + patches
+BRANCH=${1:-master}
+
+# Clear download area:
+rm -rf ${PKGNAM}
+
+# Clone repository:
+git clone https://github.com/KDE/${PKGNAM}
+
+# checkout $BRANCH:
+( cd ${PKGNAM}
+ git checkout $BRANCH || exit 1
+)
+
+HEADISAT="$( cd ${PKGNAM} && git log -1 --format=%h )"
+DATE="$( cd ${PKGNAM} && git log -1 --format=%cd --date=format:%Y%m%d )"
+LONGDATE="$( cd ${PKGNAM} && git log -1 --format=%cd --date=format:%c )"
+# Cleanup. We're not packing up the whole git repo.
+( cd ${PKGNAM} && find . -type d -name ".git*" -exec rm -rf {} \; 2> /dev/null )
+mv ${PKGNAM} ${PKGNAM}-${DATE}_${HEADISAT}
+tar cf ${PKGNAM}-${DATE}_${HEADISAT}.tar ${PKGNAM}-${DATE}_${HEADISAT}
+plzip -9 -f ${PKGNAM}-${DATE}_${HEADISAT}.tar
+rm -rf ${PKGNAM}-${DATE}_${HEADISAT}
+touch -d "$LONGDATE" ${PKGNAM}-${DATE}_${HEADISAT}.tar.lz
+echo
+echo "${PKGNAM} branch $BRANCH with HEAD at $HEADISAT packaged as ${PKGNAM}-${DATE}_${HEADISAT}.tar.lz"
+echo