app-office/calligra: Fix configure, remove file collisions, crash fixes
authorAndreas Sturmlechner <asturm@gentoo.org>
Thu, 29 Dec 2016 02:35:38 +0000 (03:35 +0100)
committerAndreas Sturmlechner <asturm@gentoo.org>
Fri, 30 Dec 2016 00:24:36 +0000 (01:24 +0100)
Gentoo-bug: 603584, 603772

Package-Manager: portage-2.3.0

app-office/calligra/calligra-3.0.0-r1.ebuild [new file with mode: 0644]
app-office/calligra/files/calligra-3.0.0-optionaldeps.patch [new file with mode: 0644]
app-office/calligra/files/calligra-3.0.0-plan-crash.patch [new file with mode: 0644]
app-office/calligra/files/calligra-3.0.0-words-crash.patch [new file with mode: 0644]

diff --git a/app-office/calligra/calligra-3.0.0-r1.ebuild b/app-office/calligra/calligra-3.0.0-r1.ebuild
new file mode 100644 (file)
index 0000000..a7247a7
--- /dev/null
@@ -0,0 +1,248 @@
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+
+CHECKREQS_DISK_BUILD="4G"
+KDE_HANDBOOK="forceoptional"
+KDE_TEST="forceoptional"
+inherit check-reqs kde5 versionator
+
+DESCRIPTION="KDE Office Suite"
+HOMEPAGE="http://www.calligra.org/"
+
+case ${PV} in
+       3.[0123456789].[789]?)
+               # beta or rc releases
+               SRC_URI="mirror://kde/unstable/${P}/${P}.tar.gz" ;;
+       3.[0123456789].?)
+               # stable releases
+               SRC_URI="mirror://kde/stable/${P}/${P}.tar.gz"
+esac
+
+LICENSE="GPL-2"
+
+[[ ${KDE_BUILD_TYPE} == release ]] && \
+KEYWORDS="~amd64 ~x86"
+
+CAL_FTS=( karbon plan sheets words )
+CAL_EXP_FTS=( braindump stage )
+
+IUSE="activities +crypt +eigen +fontconfig gsl import-filter +lcms pim marble okular
+       openexr +pdf spacenav +truetype vc +xml X $(printf 'calligra_features_%s ' ${CAL_FTS[@]})
+       $(printf 'calligra_experimental_features_%s ' ${CAL_EXP_FTS[@]})"
+
+REQUIRED_USE="calligra_features_sheets? ( eigen )"
+
+# TODO: Not packaged: Cauchy (https://bitbucket.org/cyrille/cauchy)
+# Required for the matlab/octave formula tool
+# drop qtcore subslot operator when QT_MINIMAL >= 5.7.0
+COMMON_DEPEND="
+       $(add_frameworks_dep karchive)
+       $(add_frameworks_dep kcmutils)
+       $(add_frameworks_dep kcodecs)
+       $(add_frameworks_dep kcompletion)
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kconfigwidgets)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kdelibs4support)
+       $(add_frameworks_dep kemoticons)
+       $(add_frameworks_dep kglobalaccel)
+       $(add_frameworks_dep kguiaddons)
+       $(add_frameworks_dep ki18n)
+       $(add_frameworks_dep kiconthemes)
+       $(add_frameworks_dep kio)
+       $(add_frameworks_dep kitemmodels)
+       $(add_frameworks_dep kitemviews)
+       $(add_frameworks_dep knotifications)
+       $(add_frameworks_dep knotifyconfig)
+       $(add_frameworks_dep kparts)
+       $(add_frameworks_dep kross)
+       $(add_frameworks_dep ktexteditor)
+       $(add_frameworks_dep ktextwidgets)
+       $(add_frameworks_dep kwallet)
+       $(add_frameworks_dep kwidgetsaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_frameworks_dep kxmlgui)
+       $(add_frameworks_dep sonnet)
+       $(add_frameworks_dep threadweaver)
+       $(add_qt_dep designer)
+       $(add_qt_dep qtconcurrent)
+       $(add_qt_dep qtdbus)
+       $(add_qt_dep qtdeclarative)
+       $(add_qt_dep qtgui)
+       $(add_qt_dep qtnetwork)
+       $(add_qt_dep qtprintsupport)
+       $(add_qt_dep qtscript)
+       $(add_qt_dep qtsvg)
+       $(add_qt_dep qtwidgets)
+       $(add_qt_dep qtxml)
+       dev-lang/perl
+       dev-libs/boost
+       media-libs/libpng:0
+       sys-libs/zlib
+       virtual/libiconv
+       activities? ( $(add_frameworks_dep kactivities) )
+       crypt? ( app-crypt/qca:2[qt5] )
+       eigen? ( dev-cpp/eigen:3 )
+       fontconfig? ( media-libs/fontconfig )
+       gsl? ( sci-libs/gsl )
+       import-filter? (
+               $(add_frameworks_dep khtml)
+               app-text/libetonyek
+               app-text/libodfgen
+               app-text/libwpd:*
+               app-text/libwpg:*
+               >=app-text/libwps-0.4
+               dev-libs/librevenge
+               media-libs/libvisio
+       )
+       lcms? ( media-libs/lcms:2 )
+       marble? ( $(add_kdeapps_dep marble) )
+       openexr? ( media-libs/openexr )
+       pdf? ( app-text/poppler:=[qt5] )
+       spacenav? ( dev-libs/libspnav )
+       truetype? ( media-libs/freetype:2 )
+       X? (
+               $(add_qt_dep qtx11extras)
+               x11-libs/libX11
+       )
+       calligra_experimental_features_braindump? ( $(add_qt_dep qtwebkit) )
+       calligra_experimental_features_stage? (
+               $(add_qt_dep qtwebkit)
+               okular? ( $(add_kdeapps_dep okular) )
+       )
+       calligra_features_plan? (
+               $(add_frameworks_dep khtml)
+               $(add_qt_dep qtcore '' '' '5=')
+               dev-libs/kdiagram:5
+               dev-libs/kproperty:5
+               dev-libs/kreport:5
+               pim? (
+                       $(add_kdeapps_dep akonadi)
+                       $(add_kdeapps_dep akonadi-contacts)
+                       $(add_kdeapps_dep kcalcore)
+                       $(add_kdeapps_dep kcontacts)
+               )
+       )
+       calligra_features_words? (
+               dev-libs/libxslt
+               okular? ( $(add_kdeapps_dep okular) )
+       )
+"
+DEPEND="${COMMON_DEPEND}
+       sys-devel/gettext
+       x11-misc/shared-mime-info
+       vc? ( >=dev-libs/vc-1.1.0 )
+"
+RDEPEND="${COMMON_DEPEND}
+       calligra_features_karbon? ( media-gfx/pstoedit[plotutils] )
+       !app-office/calligra:4
+"
+RESTRICT+=" test"
+
+PATCHES=(
+       "${FILESDIR}/${P}-no-arch-detection.patch"
+       "${FILESDIR}/${P}-optionaldeps.patch"
+       "${FILESDIR}/${P}-words-crash.patch"
+       "${FILESDIR}/${P}-plan-crash.patch"
+)
+
+pkg_pretend() {
+       check-reqs_pkg_pretend
+}
+
+pkg_setup() {
+       kde5_pkg_setup
+       check-reqs_pkg_setup
+}
+
+src_prepare() {
+       kde5_src_prepare
+
+       # Unconditionally disable deprecated deps (required by QtQuick1)
+       punt_bogus_dep Qt5 Declarative
+       punt_bogus_dep Qt5 OpenGL
+
+       if ! use calligra_experimental_features_stage && \
+                       ! use calligra_experimental_features_braindump; then
+               punt_bogus_dep Qt5 WebKitWidgets
+               punt_bogus_dep Qt5 WebKit
+       fi
+
+       # Hack around the excessive use of CMake macros
+       if use okular && ! use calligra_features_words; then
+               sed -i -e "/add_subdirectory( *okularodtgenerator *)/ s/^/#DONT/" \
+                       extras/CMakeLists.txt || die "Failed to disable OKULAR_GENERATOR_ODT"
+       fi
+
+       if use okular && ! use calligra_experimental_features_stage; then
+               sed -i -e "/add_subdirectory( *okularodpgenerator *)/ s/^/#DONT/" \
+                       extras/CMakeLists.txt || die "Failed to disable OKULAR_GENERATOR_ODP"
+       fi
+
+       rm -f po/*/*kexi*po || die
+       rm -f po/*/*krita*po || die
+}
+
+src_configure() {
+       local cal_ft myproducts experimental=OFF
+
+       # applications
+       for cal_ft in ${CAL_FTS[@]}; do
+               if use calligra_features_${cal_ft} ; then
+                       myproducts+=( "${cal_ft^^}" )
+               fi
+       done
+       # experimental/unmaintained applications
+       for cal_ft in ${CAL_EXP_FTS[@]}; do
+               if use calligra_experimental_features_${cal_ft} ; then
+                       experimental=ON
+                       myproducts+=( "${cal_ft^^}" )
+               fi
+       done
+
+       local mycmakeargs=( -DPRODUCTSET="${myproducts[*]}" )
+
+       if [[ ${KDE_BUILD_TYPE} == release ]] ; then
+               mycmakeargs+=(
+                       -DRELEASE_BUILD=ON
+                       -DBUILD_UNMAINTAINED=${experimental}
+               )
+       fi
+
+       mycmakeargs+=(
+               -DPACKAGERS_BUILD=OFF
+               -DWITH_Iconv=ON
+               $(cmake-utils_use_find_package activities KF5Activities)
+               -DWITH_Qca-qt5=$(usex crypt)
+               -DWITH_Eigen3=$(usex eigen)
+               -DWITH_Fontconfig=$(usex fontconfig)
+               -DWITH_GSL=$(usex gsl)
+               -DWITH_LibEtonyek=$(usex import-filter)
+               -DWITH_LibOdfGen=$(usex import-filter)
+               -DWITH_LibRevenge=$(usex import-filter)
+               -DWITH_LibVisio=$(usex import-filter)
+               -DWITH_LibWpd=$(usex import-filter)
+               -DWITH_LibWpg=$(usex import-filter)
+               -DWITH_LibWps=$(usex import-filter)
+               $(cmake-utils_use_find_package pim KF5Akonadi)
+               $(cmake-utils_use_find_package pim KF5AkonadiContact)
+               $(cmake-utils_use_find_package pim KF5CalendarCore)
+               $(cmake-utils_use_find_package pim KF5Contacts)
+               -DWITH_LCMS2=$(usex lcms)
+               $(cmake-utils_use_find_package marble Marble)
+               -DWITH_Okular5=$(usex okular)
+               -DWITH_OpenEXR=$(usex openexr)
+               -DWITH_Poppler=$(usex pdf)
+               $(cmake-utils_use_find_package spacenav Spnav)
+               -ENABLE_CSTESTER_TESTING=$(usex test)
+               -DWITH_Freetype=$(usex truetype)
+               -DWITH_Vc=$(usex vc)
+               -DCMAKE_DISABLE_FIND_PACKAGE_Libgit2=ON
+               -DCMAKE_DISABLE_FIND_PACKAGE_Libqgit2=ON
+       )
+
+       kde5_src_configure
+}
diff --git a/app-office/calligra/files/calligra-3.0.0-optionaldeps.patch b/app-office/calligra/files/calligra-3.0.0-optionaldeps.patch
new file mode 100644 (file)
index 0000000..a36edee
--- /dev/null
@@ -0,0 +1,20 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0394af4..e11d998 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -223,11 +223,10 @@ find_package(KF5 ${REQUIRED_KF5_VERSION} REQUIRED
+         Notifications
+         KCMUtils
+ )
+-find_package(KF5 ${REQUIRED_KF5_VERSION} QUIET
+-    OPTIONAL_COMPONENTS
+-        Activities
+-        KHtml
+-)
++
++find_package(KF5Activities)
++find_package(KF5KHtml)
++
+ set_package_properties(KF5Activities PROPERTIES
+     TYPE OPTIONAL
+ )
diff --git a/app-office/calligra/files/calligra-3.0.0-plan-crash.patch b/app-office/calligra/files/calligra-3.0.0-plan-crash.patch
new file mode 100644 (file)
index 0000000..3e1073f
--- /dev/null
@@ -0,0 +1,199 @@
+From dd2cb16ab43d21ee25ba6ebfb36cd68ec9879c4f Mon Sep 17 00:00:00 2001
+From: Dag Andersen <danders@get2net.dk>
+Date: Mon, 12 Dec 2016 10:07:38 +0100
+Subject: Plan: Fix crash on close
+
+Due to accessing project node during delete
+
+BUG: 373527
+FIXED-IN: 3.0.0
+---
+ plan/libs/kernel/kptnode.cpp     | 14 ++++++++++++--
+ plan/libs/kernel/kptnode.h       |  5 ++++-
+ plan/libs/kernel/kptproject.cpp  | 11 ++++++++++-
+ plan/libs/kernel/kptresource.cpp | 20 ++++++++++++++++----
+ plan/libs/kernel/kptresource.h   |  7 ++++++-
+ 5 files changed, 48 insertions(+), 9 deletions(-)
+
+diff --git a/plan/libs/kernel/kptnode.cpp b/plan/libs/kernel/kptnode.cpp
+index d8b0e6b..e55f9ca 100644
+--- a/plan/libs/kernel/kptnode.cpp
++++ b/plan/libs/kernel/kptnode.cpp
+@@ -40,7 +40,8 @@ namespace KPlato
+ Node::Node(Node *parent) 
+     : QObject( 0 ), // We don't use qobjects parent
+       m_nodes(), m_dependChildNodes(), m_dependParentNodes(),
+-      m_estimate( 0 )
++      m_estimate( 0 ),
++      m_blockChanged(false)
+ {
+     //debugPlan<<"("<<this<<")";
+     m_parent = parent;
+@@ -53,7 +54,8 @@ Node::Node(const Node &node, Node *parent)
+       m_nodes(), 
+       m_dependChildNodes(), 
+       m_dependParentNodes(),
+-      m_estimate( 0 )
++      m_estimate( 0 ),
++      m_blockChanged(false)
+ {
+     //debugPlan<<"("<<this<<")";
+     m_parent = parent;
+@@ -1225,7 +1227,15 @@ void Node::setRunningAccount(Account *acc)
+     changed();
+ }
++void Node::blockChanged(bool on)
++{
++    m_blockChanged = on;
++}
++
+ void Node::changed(Node *node, int property) {
++    if (m_blockChanged) {
++        return;
++    }
+     switch ( property) {
+         case Type:
+         case StartupCost:
+diff --git a/plan/libs/kernel/kptnode.h b/plan/libs/kernel/kptnode.h
+index cfcbd3e..4c98acc 100644
+--- a/plan/libs/kernel/kptnode.h
++++ b/plan/libs/kernel/kptnode.h
+@@ -528,6 +528,8 @@ public:
+     virtual void emitDocumentRemoved( Node *node, Document *doc, int idx );
+     virtual void emitDocumentChanged( Node *node, Document *doc, int idx );
+     
++    void blockChanged(bool on = true);
++
+ public:
+     // These shouldn't be available to other than those who inherits
+     /// Calculate the critical path
+@@ -673,7 +675,8 @@ protected:
+     ResourceRequestCollection m_requests;
+ private:
+-    void init();        
++    void init();
++    bool m_blockChanged;
+ };
+ ////////////////////////////////   Estimate   ////////////////////////////////
+diff --git a/plan/libs/kernel/kptproject.cpp b/plan/libs/kernel/kptproject.cpp
+index 30cd450..d2fafb5 100644
+--- a/plan/libs/kernel/kptproject.cpp
++++ b/plan/libs/kernel/kptproject.cpp
+@@ -94,7 +94,16 @@ void Project::deref()
+ Project::~Project()
+ {
+     debugPlan;
+-    disconnect(); // NOTE: may be a problem if somebody uses the destroyd() signal
++    disconnect();
++    for(Node *n : nodeIdDict) {
++        n->blockChanged();
++    }
++    for (Resource *r : resourceIdDict) {
++        r->blockChanged();
++    }
++    for (ResourceGroup *g : resourceGroupIdDict) {
++        g->blockChanged();
++    }
+     delete m_standardWorktime;
+     while ( !m_resourceGroups.isEmpty() )
+         delete m_resourceGroups.takeFirst();
+diff --git a/plan/libs/kernel/kptresource.cpp b/plan/libs/kernel/kptresource.cpp
+index 8a3d55e..b32d4e7 100644
+--- a/plan/libs/kernel/kptresource.cpp
++++ b/plan/libs/kernel/kptresource.cpp
+@@ -44,7 +44,8 @@ namespace KPlato
+ {
+ ResourceGroup::ResourceGroup()
+-    : QObject( 0 ) 
++    : QObject( 0 ),
++    m_blockChanged(false)
+ {
+     m_project = 0;
+     m_type = Type_Work;
+@@ -80,8 +81,13 @@ void ResourceGroup::copy( const ResourceGroup *group )
+     m_name = group->m_name;
+ }
++void ResourceGroup::blockChanged(bool on)
++{
++    m_blockChanged = on;
++}
++
+ void ResourceGroup::changed() {
+-    if ( m_project ) {
++    if (m_project && !m_blockChanged) {
+         m_project->changed( this );
+     }
+ }
+@@ -319,7 +325,8 @@ Resource::Resource()
+     m_project(0),
+     m_parent( 0 ),
+     m_autoAllocate( false ),
+-    m_currentSchedule( 0 )
++    m_currentSchedule( 0 ),
++    m_blockChanged(false)
+ {
+     m_type = Type_Work;
+     m_units = 100; // %
+@@ -409,9 +416,14 @@ void Resource::copy(Resource *resource) {
+     //m_externalNames = resource->m_externalNames;
+ }
++void Resource::blockChanged(bool on)
++{
++    m_blockChanged = on;
++}
++
+ void Resource::changed()
+ {
+-    if ( m_project ) {
++    if (m_project && !m_blockChanged) {
+         m_project->changed( this );
+     }
+ }
+diff --git a/plan/libs/kernel/kptresource.h b/plan/libs/kernel/kptresource.h
+index 10f6b92..fba020a 100644
+--- a/plan/libs/kernel/kptresource.h
++++ b/plan/libs/kernel/kptresource.h
+@@ -177,6 +177,8 @@ public:
+     DateTime startTime( long id ) const;
+     DateTime endTime( long id ) const;
++    void blockChanged(bool on = true);
++
+ #ifndef NDEBUG
+     void printDebug( const QString& ident );
+@@ -199,7 +201,7 @@ private:
+     Type m_type;
+     QList<ResourceGroupRequest*> m_requests;
+-
++    bool m_blockChanged;
+ };
+ /**
+@@ -492,6 +494,8 @@ public:
+     /// Set the @p account
+     void setAccount( Account *account );
++    void blockChanged(bool on = true);
++
+     // for xml loading code
+     
+     class WorkInfoCache
+@@ -564,6 +568,7 @@ private:
+     // return this if resource has no calendar and is a material resource
+     Calendar m_materialCalendar;
++    bool m_blockChanged;
+ #ifndef NDEBUG
+ public:
+-- 
+cgit v0.11.2
+
diff --git a/app-office/calligra/files/calligra-3.0.0-words-crash.patch b/app-office/calligra/files/calligra-3.0.0-words-crash.patch
new file mode 100644 (file)
index 0000000..4fe9283
--- /dev/null
@@ -0,0 +1,75 @@
+From 2d86293939bafd80bc320849ffcc7544350fc2bf Mon Sep 17 00:00:00 2001
+From: Dag Andersen <danders@get2net.dk>
+Date: Fri, 9 Dec 2016 11:19:36 +0100
+Subject: Words: Fix crash when adding connected text frame
+
+Summary:
+KWFrameConnectSelector crashes you activate existsingRadio button but do not select a frameset.
+This patch selects a frameset if none is selected.
+
+Reviewers: boemann
+
+Reviewed By: boemann
+
+Tags: #kexi, #calligra:_3.0
+
+Differential Revision: https://phabricator.kde.org/D3632
+---
+ words/part/dialogs/KWFrameConnectSelector.cpp | 14 ++++++++++++++
+ words/part/dialogs/KWFrameConnectSelector.h   |  1 +
+ 2 files changed, 15 insertions(+)
+
+diff --git a/words/part/dialogs/KWFrameConnectSelector.cpp b/words/part/dialogs/KWFrameConnectSelector.cpp
+index 566dfe2..590d3b7 100644
+--- a/words/part/dialogs/KWFrameConnectSelector.cpp
++++ b/words/part/dialogs/KWFrameConnectSelector.cpp
+@@ -21,6 +21,7 @@
+ #include "KWDocument.h"
+ #include "frames/KWTextFrameSet.h"
+ #include "Words.h"
++#include "WordsDebug.h"
+ KWFrameConnectSelector::KWFrameConnectSelector(FrameConfigSharedState *state)
+         : m_state(state),
+@@ -30,6 +31,8 @@ KWFrameConnectSelector::KWFrameConnectSelector(FrameConfigSharedState *state)
+     connect(widget.framesList, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
+             this, SLOT(frameSetSelected()));
++    connect(widget.existingRadio, SIGNAL(clicked(bool)),
++            this, SLOT(existingRadioClicked(bool)));
+     connect(widget.frameSetName, SIGNAL(textChanged(QString)),
+             this, SLOT(nameChanged(QString)));
+ }
+@@ -50,6 +53,17 @@ bool KWFrameConnectSelector::canOpen(KoShape *shape)
+     return true;
+ }
++void KWFrameConnectSelector::existingRadioClicked(bool on)
++{
++    // make sure there is a selcted frameset
++    if (on && !widget.framesList->currentItem() && widget.framesList->model()->rowCount() > 0) {
++        QModelIndex curr = widget.framesList->model()->index(0, 0);
++        widget.framesList->setCurrentIndex(curr);
++        widget.framesList->selectionModel()->select(curr, QItemSelectionModel::Select);
++    }
++    debugWords<<Q_FUNC_INFO<<on<<widget.framesList->currentItem();
++}
++
+ void KWFrameConnectSelector::frameSetSelected()
+ {
+     widget.existingRadio->setChecked(true);
+diff --git a/words/part/dialogs/KWFrameConnectSelector.h b/words/part/dialogs/KWFrameConnectSelector.h
+index 74d3f0d..75ec1613 100644
+--- a/words/part/dialogs/KWFrameConnectSelector.h
++++ b/words/part/dialogs/KWFrameConnectSelector.h
+@@ -50,6 +50,7 @@ public:
+     }
+ private Q_SLOTS:
++    void existingRadioClicked(bool on);
+     void frameSetSelected();
+     void nameChanged(const QString &text);
+-- 
+cgit v0.11.2
+