Add another upstream plasma crash fix, kde-bug 272495
authorAndreas Hüttel <dilfridge@gentoo.org>
Sat, 12 Nov 2011 21:12:10 +0000 (21:12 +0000)
committerAndreas Hüttel <dilfridge@gentoo.org>
Sat, 12 Nov 2011 21:12:10 +0000 (21:12 +0000)
Package-Manager: portage-2.1.10.34/cvs/Linux x86_64

kde-base/plasma-workspace/ChangeLog
kde-base/plasma-workspace/Manifest
kde-base/plasma-workspace/files/plasma-workspace-4.7.3-taskcrash.patch [new file with mode: 0644]
kde-base/plasma-workspace/plasma-workspace-4.7.3-r2.ebuild [moved from kde-base/plasma-workspace/plasma-workspace-4.7.3-r1.ebuild with 96% similarity]

index b0a31bd1bcf115efc68ca9de71dd22fd5826c5e3..97bf50f8cc1bf009767d28bac1815389ab0c13f5 100644 (file)
@@ -1,6 +1,13 @@
 # ChangeLog for kde-base/plasma-workspace
 # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/kde-base/plasma-workspace/ChangeLog,v 1.131 2011/11/12 17:19:56 dilfridge Exp $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/plasma-workspace/ChangeLog,v 1.132 2011/11/12 21:12:10 dilfridge Exp $
+
+*plasma-workspace-4.7.3-r2 (12 Nov 2011)
+
+  12 Nov 2011; Andreas K. Huettel <dilfridge@gentoo.org>
+  -plasma-workspace-4.7.3-r1.ebuild, +plasma-workspace-4.7.3-r2.ebuild,
+  +files/plasma-workspace-4.7.3-taskcrash.patch:
+  Add another upstream plasma crash fix, kde-bug 272495
 
 *plasma-workspace-4.7.3-r1 (12 Nov 2011)
 
index 374097a3b08044bd54464ed6b78454ce14d3bca9..92c2b8696b36325fed834785c83d8ef07a50975f 100644 (file)
@@ -7,6 +7,7 @@ AUX plasma-workspace-4.6.2-optional_akonadi-server.patch 4897 RMD160 64260bce383
 AUX plasma-workspace-4.6.2-panelplacement.patch 14030 RMD160 6040b6a7acba19073f81483d4b6823638f791a22 SHA1 0e5b825b4d15362a0872f6d54f58c3f1ba4c174c SHA256 71ff67df3956806c9d949780245719dcea6837953ed555e6e7c5773dc3fbacb6
 AUX plasma-workspace-4.6.3-dduplicate.patch 835 RMD160 5231815b4a8c64ebeb4b8d77bdfa46512bd50ea8 SHA1 ca55cd0a25fd8cfb95fa3b1cdd373d496fd7312d SHA256 ea36fb98ed122dc039b28337df028887919bced1b1413c04fcb9488dfc87e108
 AUX plasma-workspace-4.6.3-gpsdapi.patch 2233 RMD160 d3d51fa4a07ad4f3719060dfcd03af0c15fccb8c SHA1 f91d01066241cd3e78b825addf360db23716bf52 SHA256 29939f28bc8fa93041ebcb44bde05cd5151559ec314a87e2628388b1f38c2288
+AUX plasma-workspace-4.7.3-taskcrash.patch 9774 RMD160 3127550aaf2786bd418e44047474ce2766102dd3 SHA1 784c6bd6d6c0c9f0be2ed187949e4d1ddda11630 SHA256 980177f9e48481f6d593ff38c7214e3ed62a07f1690fe15b58aeda7d769e58df
 AUX plasma-workspace-4.7.3-weathercrash.patch 1248 RMD160 a6e636bb4a7718557ff9b90f96b838c0e518e196 SHA1 915594b561107980633da44a64d5b2da4d5dd968 SHA256 18f6af44a45841f1912eb73a0d3a93415b2665cd5e3e0352a13e58fc1ff7b141
 DIST kde-workspace-4.7.2.tar.bz2 20556305 RMD160 a3576eb82bfdba215f0fe44d3c5d616e9a79e024 SHA1 afd37b2f583690e391828c1ceb7311e2e8d37c6f SHA256 6a174d6780ad04700ec9eddfe2ed3d916aea018ad7fb93b04debc81f2d3f9eb0
 DIST kde-workspace-4.7.3.tar.bz2 20556738 RMD160 c7298c81c978a722f54e033afe169111d2dfd438 SHA1 f3ed24e3e70671033718a5139cb61d0d7e2e709e SHA256 7403fc5ff78de55b1f9b6a1116001be3ad7906720521959d1f5de8c86677ac5e
@@ -15,23 +16,23 @@ DIST kdebase-workspace-4.6.5.tar.bz2 69241659 RMD160 580bcfe80aeb70dc7c2ef559338
 EBUILD plasma-workspace-4.6.3-r2.ebuild 3577 RMD160 d0ab587a6ecba68eae11c154bda402710792fc1e SHA1 586dd8977565a91c1ccc34767186fa0c413a8324 SHA256 1f2a8414b6939b95ebb960de43b1d958c91d6eff5cd8ef2b40552c4099296ff1
 EBUILD plasma-workspace-4.6.5.ebuild 3513 RMD160 b1169802a4c9b98b8ca5fe5b0f3a69050db3a74a SHA1 4980d0348ba428181bbe3b7d4cbec31dc5b998b4 SHA256 05d09ab7aa6a39159aa61ebcbf4179922c75baed5ee090912eea4f2c6c083a09
 EBUILD plasma-workspace-4.7.2-r1.ebuild 3464 RMD160 c3d04bb0978972b7d3fe51965146412db35f90e7 SHA1 aca6b98a355f2bc1e15cbd7bf3465c2c50d5da5c SHA256 752cb2e5e65a81af4af9ec67ac2e79c189e649afc082a4be5bd4b9727c5a0ffe
-EBUILD plasma-workspace-4.7.3-r1.ebuild 3515 RMD160 53b89683ab199e9d1cb2cef55dfff4ee53554647 SHA1 51b78415db616e114d0377c14481ded8849311ec SHA256 b1c0845b6fcbcad6efb05a14d213afc2b5cb14be40bc5a5809a138ab18de2a1b
-MISC ChangeLog 20632 RMD160 ef074769366443e4fd5265892a3f6332c4b9d7b4 SHA1 34ff56d8d2fb1737a97240ef69719824786d3397 SHA256 85805f8ca8c9be29722bdc269a8fd4942dc540c075e6f976274d3a8d35248c15
+EBUILD plasma-workspace-4.7.3-r2.ebuild 3558 RMD160 d34710c0f0e55657bf46d369b2130a7b4d28fc2c SHA1 76307505c4e0ffc76cf6524e6685aefe26b736ae SHA256 863eaf188d53a04c39b70232a46b08a4fc1caed54ee3dcf22c7e63762ca41ae2
+MISC ChangeLog 20909 RMD160 d1de802b0d5e3fb9543caa5cc686d162a7460db9 SHA1 c1e2de66ae36ddc2a657a81cb2fbc532c76f9d9f SHA256 1ed0517c6d2de56dafc560c586087de7253aed2b920465f71398401df6d245f5
 MISC metadata.xml 426 RMD160 c97840bcdd9f62d76728bc99edf3807c6a3bb155 SHA1 050bfc476b5f6e9ad5096050ca5d1e88b79e7d7d SHA256 861524f41b7fb32a40b8d88ae98f6ec76b657bfc251b9133a40bdd48c2fd430c
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2.0.17 (GNU/Linux)
 
-iQIcBAEBCgAGBQJOvqrPAAoJENwGBM22xffeM3kQAJENdU8aGCaVGQ/xDzUEyhkb
-0+MqTMuVadpquzTPVNWnr8BJxD6MqK/DCqNqVgHAJaW1l7v5KNpvKI7rHZsrI+HU
-EBKw5IrwYv4ArWjXksKJggkJthPJXexFHT9DQVtAPVCN0GMp+9wsX8SpU5D4ixQY
-rjsRx9VyzNa5SXRHLDJLqzmpZsAXgck4ggd6NRmZBCul/TUGLVIl7R10o7i7HzSX
-u9MLmZeJe07fPL4XDP5a+vKKjQOE0TRXo1JMXaCqEvzlbAuW8xFKkXCjHW5xRSIN
-c2vGsdS7JOmBwOgamlNv1bcMylyLH7wjZ/RA4rBV5oPtsO7OPOIyFgUiTs6X0wot
-6UqtiWVhjt1eexm79vCelqEo7xrq/FURQ7X/NY7GcwLdGKVF0AkIIDsUYUgXaaSB
-u5TCOmP4mjBKxv/CV6Ob3UYqmhOM9ZVGzwlSapw0fzOVaKXQORGnTQUGKNaombYR
-Bhiwm2G97kFmsjos0Sx+wFKFpy9ZMHOQ5yNIIjYJIkagp21LrHgIVUJrcrGmNqZ3
-42t50dAaLShl8IJeeM4xdYsmakQ21U79EBF7cMLL7mSbOrZTW52O1gJPE1dVo2xY
-UmumJ5fEsfIXgRmnjGzYhTMpkxJyUTeOwEpGBoj8f8FWxL53lWvAO6e4GIgnBHSc
-KFMuXbCuCbhDBGW31VRt
-=+5iT
+iQIcBAEBCgAGBQJOvu9yAAoJENwGBM22xffesHEP/jhXTgCXhJDyTf43aHr07tVX
+fmSzpSkXGnE+HbZdKxTnMjmAsXuFYU81FZMGsHtfIMJ+RLof5ZjNG2algULsj4fh
+o8svCqbCsTGSxLmTyeeL9CBUALseTzADdJWUYkgHhAETjVFKuSjtXHsNx417Yzra
+SxorshSvvus2J10ZmaKCu6xUeG0tzlNX92W+4ZPVrNK+uXTeJWlKGGioK0EU+6IL
+xPKLy4jLN5g0QruujNHQp7B0qThaMdnMIyiebitlAOqrTP/dMRVdenRgeuxLKYua
+h0aTzykYpDX03KxINcvZ3Bo2mNZnhelnxeezgIP4YIaIWS8cdw7wAbvGwvJCyfqC
+gu/b7bqvL5PoPa2lpu2vESWjFscyPvds9Y1W+vD87/cQtIQrrjhUd99oW58bpRQu
+vpGpUjbkJ1bC25JQNcjmhwATLRchRYEvZExZwaXlxNgs2UPMzKlHbH2S2l5BXYcI
+o0aD/iwUy3Xqs5Nnqs2VNdQdBwS/NzFkWDS+hTTRAfoOuR18cRePc3fv48id3j9/
+d3rlVjRBxcycQ79KolnTE5Gr8x2sIN9wVFHX9+4CbJuMjzX/kE1eUQedTj3fqe+D
+0EJcXZ+73RISu5w+lDH6WYteUZw0Ln3qF/U0O96IxYiNJ1vyqRl//Z7kluEwlV+7
+dM8pGPcPLsu+6Q+RONMj
+=5Wbr
 -----END PGP SIGNATURE-----
diff --git a/kde-base/plasma-workspace/files/plasma-workspace-4.7.3-taskcrash.patch b/kde-base/plasma-workspace/files/plasma-workspace-4.7.3-taskcrash.patch
new file mode 100644 (file)
index 0000000..3f45277
--- /dev/null
@@ -0,0 +1,264 @@
+commit 639155a5493a28ca9460d60fa0c078ec65c3bb96
+Author: Aaron Seigo <aseigo@kde.org>
+Date:   Thu Nov 10 13:01:37 2011 +0100
+
+    use a QWeakPointer to track the lifespan of the task
+    
+    the itemRemoved signal from TaskGroup has dangling pointers, apparently
+    by design (the next thing on my list to investigate), and the signal is
+    delayed. so between the actual deletion of the task and the signal, there
+    pointer is a dangler. easy solution is to just track it in the WindowTaskItem
+    itself with a cheap QWeakPointer.
+    
+    BUG:272495
+
+diff --git a/plasma/desktop/applets/tasks/abstracttaskitem.cpp b/plasma/desktop/applets/tasks/abstracttaskitem.cpp
+index 00140ef..48ba172 100644
+--- a/plasma/desktop/applets/tasks/abstracttaskitem.cpp
++++ b/plasma/desktop/applets/tasks/abstracttaskitem.cpp
+@@ -203,6 +203,10 @@ QIcon AbstractTaskItem::icon() const
+     return QIcon();
+ }
+ 
++void AbstractTaskItem::close()
++{
++}
++
+ void AbstractTaskItem::setTaskFlags(const TaskFlags flags)
+ {
+     if (((m_flags & TaskWantsAttention) != 0) != ((flags & TaskWantsAttention) != 0)) {
+diff --git a/plasma/desktop/applets/tasks/abstracttaskitem.h b/plasma/desktop/applets/tasks/abstracttaskitem.h
+index 9520e1f..a527881 100644
+--- a/plasma/desktop/applets/tasks/abstracttaskitem.h
++++ b/plasma/desktop/applets/tasks/abstracttaskitem.h
+@@ -103,7 +103,7 @@ public:
+     /** Returns the current icon for this task. */
+     QIcon icon() const;
+ 
+-    virtual void close() = 0;
++    virtual void close();
+ 
+     /** Tells the window manager the minimized task's geometry. */
+     virtual void publishIconGeometry() const;
+diff --git a/plasma/desktop/applets/tasks/windowtaskitem.cpp b/plasma/desktop/applets/tasks/windowtaskitem.cpp
+index 1ddca2c..1c33476 100644
+--- a/plasma/desktop/applets/tasks/windowtaskitem.cpp
++++ b/plasma/desktop/applets/tasks/windowtaskitem.cpp
+@@ -56,7 +56,6 @@
+ 
+ WindowTaskItem::WindowTaskItem(QGraphicsWidget *parent, Tasks *applet)
+     : AbstractTaskItem(parent, applet),
+-      m_task(0),
+       m_busyWidget(0)
+ {
+ }
+@@ -77,8 +76,8 @@ void WindowTaskItem::activate()
+     // in a widget such as a line edit which does accept the focus)
+     // this needs to be implemented for Plasma's own panels.
+     //kDebug();
+-    if (m_task && m_task->task()) {
+-        m_task->task()->activateRaiseOrIconify();
++    if (m_task && m_task.data()->task()) {
++        m_task.data()->task()->activateRaiseOrIconify();
+        // emit windowSelected(this);
+     }
+ }
+@@ -108,27 +107,20 @@ void WindowTaskItem::keyPressEvent(QKeyEvent *event)
+     }
+ }
+ 
+-//destroy this item
+-void WindowTaskItem::close()
+-{
+-    //kDebug();
+-    m_task = 0;
+-}
+-
+ void WindowTaskItem::publishIconGeometry() const
+ {
+-    if (!m_task || !m_task->task()) {
++    if (!m_task || !m_task.data()->task()) {
+         return;
+     }
+ 
+     QRect rect = iconGeometry();
+-    m_task->task()->publishIconGeometry(rect);
++    m_task.data()->task()->publishIconGeometry(rect);
+ }
+ 
+ void WindowTaskItem::publishIconGeometry(const QRect &rect) const
+ {
+-    if (m_task && m_task->task()) {
+-        m_task->task()->publishIconGeometry(rect);
++    if (m_task && m_task.data()->task()) {
++        m_task.data()->task()->publishIconGeometry(rect);
+     }
+ }
+ 
+@@ -142,7 +134,7 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+     TaskFlags flags = m_flags;
+ 
+     if (changes & TaskManager::StateChanged) {
+-        if (m_task->isActive()) {
++        if (m_task.data()->isActive()) {
+             flags |= TaskHasFocus;
+             if (!(m_flags & TaskHasFocus)) {
+                 emit activated(this);
+@@ -151,7 +143,7 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+             flags &= ~TaskHasFocus;
+         }
+ 
+-        if (m_task->isMinimized()) {
++        if (m_task.data()->isMinimized()) {
+             flags |= TaskIsMinimized;
+         } else {
+             flags &= ~TaskIsMinimized;
+@@ -160,7 +152,7 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+     }
+ 
+     if (changes & TaskManager::AttentionChanged) {
+-        if (m_task->demandsAttention()) {
++        if (m_task.data()->demandsAttention()) {
+             flags |= TaskWantsAttention;
+         } else {
+             flags &= ~TaskWantsAttention;
+@@ -191,14 +183,14 @@ void WindowTaskItem::updateTask(::TaskManager::TaskChanges changes)
+ 
+     if (needsUpdate) {
+         //redraw
+-        //kDebug() << m_task->name();
++        //kDebug() << m_task.data()->name();
+         queueUpdate();
+     }
+ }
+ 
+ void WindowTaskItem::updateToolTip()
+ {
+-    if (!m_task || !m_task->task()) {
++    if (!m_task || !m_task.data()->task()) {
+         return;
+     }
+ 
+@@ -219,19 +211,19 @@ void WindowTaskItem::updateToolTip()
+     }
+ 
+     if (showToolTip) {
+-        QPixmap p = m_task->task()->icon(KIconLoader::SizeLarge, KIconLoader::SizeLarge, false);
++        QPixmap p = m_task.data()->task()->icon(KIconLoader::SizeLarge, KIconLoader::SizeLarge, false);
+         if (p.height() > KIconLoader::SizeLarge) {
+             p = p.scaled(QSize(KIconLoader::SizeLarge, KIconLoader::SizeLarge),
+                                 Qt::KeepAspectRatio, Qt::SmoothTransformation);
+         }
+ 
+-        Plasma::ToolTipContent data(Qt::escape(m_task->name()), QString(), p);
+-        if (m_task->desktop() != 0 && 
+-            (!m_applet->groupManager().showOnlyCurrentDesktop() || !m_task->isOnCurrentDesktop())) {
++        Plasma::ToolTipContent data(Qt::escape(m_task.data()->name()), QString(), p);
++        if (m_task.data()->desktop() != 0 && 
++            (!m_applet->groupManager().showOnlyCurrentDesktop() || !m_task.data()->isOnCurrentDesktop())) {
+             data.setSubText(i18nc("Which virtual desktop a window is currently on", "On %1",
+-                                  KWindowSystem::desktopName(m_task->desktop())));
++                                  KWindowSystem::desktopName(m_task.data()->desktop())));
+         }
+-        data.setWindowToPreview(m_task->task()->window());
++        data.setWindowsToPreview(QList<WId>() << m_task.data()->task()->window());
+         data.setClickable(true);
+         data.setInstantPopup(true);
+         data.setHighlightWindows(m_applet->highlightWindows());
+@@ -285,8 +277,9 @@ void WindowTaskItem::gotTaskPointer()
+ void WindowTaskItem::setWindowTask(TaskManager::TaskItem* taskItem)
+ {
+     if (m_task) {
+-        disconnect(m_task->task().constData(), 0, this, 0);
++        disconnect(m_task.data()->task().constData(), 0, this, 0);
+     }
++
+     m_task = taskItem;
+     m_abstractItem = qobject_cast<TaskManager::AbstractGroupableItem *>(taskItem);
+ 
+@@ -294,8 +287,10 @@ void WindowTaskItem::setWindowTask(TaskManager::TaskItem* taskItem)
+         connect(m_abstractItem, SIGNAL(destroyed(QObject*)), this, SLOT(clearAbstractItem()));
+     }
+ 
+-    connect(m_task, SIGNAL(changed(::TaskManager::TaskChanges)),
+-            this, SLOT(updateTask(::TaskManager::TaskChanges)));
++    if (m_task) {
++        connect(m_task.data(), SIGNAL(changed(::TaskManager::TaskChanges)),
++                this, SLOT(updateTask(::TaskManager::TaskChanges)));
++    }
+ 
+     updateTask(::TaskManager::EverythingChanged);
+     publishIconGeometry();
+@@ -319,7 +314,7 @@ void WindowTaskItem::setTask(TaskManager::TaskItem* taskItem)
+ 
+ TaskManager::TaskPtr WindowTaskItem::windowTask() const
+ {
+-    return m_task ? m_task->task() : TaskManager::TaskPtr();
++    return m_task ? m_task.data()->task() : TaskManager::TaskPtr();
+ }
+ 
+ void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
+@@ -331,10 +326,10 @@ void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
+ 
+     QList <QAction*> actionList;
+     QAction *a(0);
+-    if (m_task->isGrouped()) {
++    if (m_task.data()->isGrouped()) {
+         a = new QAction(i18n("Collapse Parent Group"), 0);
+         actionList.append(a);
+-        TaskGroupItem *group = qobject_cast<TaskGroupItem*>(m_applet->rootGroupItem()->abstractTaskItem(m_task->parentGroup()));
++        TaskGroupItem *group = qobject_cast<TaskGroupItem*>(m_applet->rootGroupItem()->abstractTaskItem(m_task.data()->parentGroup()));
+         connect(a, SIGNAL(triggered()), group, SLOT(collapse()));
+     }
+ 
+@@ -343,7 +338,7 @@ void WindowTaskItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *e)
+         actionList.append(configAction);
+     }
+ 
+-    TaskManager::BasicMenu menu(0, m_task, &m_applet->groupManager(), actionList);
++    TaskManager::BasicMenu menu(0, m_task.data(), &m_applet->groupManager(), actionList);
+     menu.adjustSize();
+ 
+     if (m_applet->formFactor() != Plasma::Vertical) {
+@@ -364,18 +359,13 @@ bool WindowTaskItem::isWindowItem() const
+ 
+ bool WindowTaskItem::isActive() const
+ {
+-    if (!m_task) {
+-        //kDebug() << "no task set";
+-        return false;
+-    }
+-
+-    return m_task->isActive();
++    return m_task ? m_task.data()->isActive() : false;
+ }
+ 
+ void WindowTaskItem::setAdditionalMimeData(QMimeData* mimeData)
+ {
+     if (m_task) {
+-        m_task->addMimeData(mimeData);
++        m_task.data()->addMimeData(mimeData);
+     }
+ }
+ 
+diff --git a/plasma/desktop/applets/tasks/windowtaskitem.h b/plasma/desktop/applets/tasks/windowtaskitem.h
+index a5b698a..4db9d43 100644
+--- a/plasma/desktop/applets/tasks/windowtaskitem.h
++++ b/plasma/desktop/applets/tasks/windowtaskitem.h
+@@ -63,7 +63,6 @@ signals:
+ 
+ public slots:
+     void activate();
+-    void close();
+ 
+ protected:
+     void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+@@ -82,7 +81,7 @@ private:
+     /** Sets the window represented by this task. */
+     void setWindowTask(TaskManager::TaskItem* taskItem);
+ 
+-    TaskManager::TaskItem *m_task;
++    QWeakPointer<TaskManager::TaskItem> m_task;
+     Plasma::BusyWidget *m_busyWidget;
+ };
+ 
similarity index 96%
rename from kde-base/plasma-workspace/plasma-workspace-4.7.3-r1.ebuild
rename to kde-base/plasma-workspace/plasma-workspace-4.7.3-r2.ebuild
index 648c7a6197030cc6aa659ed27a8a133b2ff587a2..d9f52473150495457abb28556b4224bf1519b924 100644 (file)
@@ -1,6 +1,6 @@
 # Copyright 1999-2011 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/kde-base/plasma-workspace/plasma-workspace-4.7.3-r1.ebuild,v 1.1 2011/11/12 17:19:56 dilfridge Exp $
+# $Header: /var/cvsroot/gentoo-x86/kde-base/plasma-workspace/plasma-workspace-4.7.3-r2.ebuild,v 1.1 2011/11/12 21:12:10 dilfridge Exp $
 
 EAPI=4
 
@@ -75,6 +75,7 @@ KMLOADLIBS="libkworkspace libplasmaclock libplasmagenericshell libtaskmanager"
 PATCHES=(
        "${FILESDIR}/${PN}-4.4.2-xinerama_cmake_automagic.patch"
        "${FILESDIR}/${PN}-4.7.3-weathercrash.patch"
+       "${FILESDIR}/${PN}-4.7.3-taskcrash.patch"
 )
 
 pkg_setup() {