--- /dev/null
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+GNOME2_LA_PUNT="yes"
+PYTHON_COMPAT=( python2_7 python3_{4,5,6} pypy )
+VALA_USE_DEPEND="vapigen"
+
+inherit cmake-utils db-use flag-o-matic gnome2 python-any-r1 systemd vala virtualx
+
+DESCRIPTION="Evolution groupware backend"
+HOMEPAGE="https://wiki.gnome.org/Apps/Evolution"
+
+# Note: explicitly "|| ( LGPL-2 LGPL-3 )", not "LGPL-2+".
+LICENSE="|| ( LGPL-2 LGPL-3 ) BSD Sleepycat"
+SLOT="0/60" # subslot = libcamel-1.2 soname version
+
+IUSE="api-doc-extras berkdb +gnome-online-accounts +gtk google +introspection ipv6 ldap kerberos vala +weather"
+REQUIRED_USE="vala? ( introspection )"
+
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~amd64-linux ~x86-linux ~x86-solaris"
+
+# sys-libs/db is only required for migrating from <3.13 versions
+# gdata-0.17.7 soft required for new gdata_feed_get_next_page_token API to handle more than 100 google tasks
+# berkdb needed only for migrating old calendar data, bug #519512
+gdata_depend=">=dev-libs/libgdata-0.17.7:="
+RDEPEND="
+ >=app-crypt/gcr-3.4
+ >=app-crypt/libsecret-0.5[crypt]
+ >=dev-db/sqlite-3.7.17:=
+ >=dev-libs/glib-2.46:2
+ >=dev-libs/libical-0.43:=
+ >=dev-libs/libxml2-2
+ >=dev-libs/nspr-4.4:=
+ >=dev-libs/nss-3.9:=
+ >=net-libs/libsoup-2.42:2.4
+
+ dev-libs/icu:=
+ sys-libs/zlib:=
+ virtual/libiconv
+
+ berkdb? ( >=sys-libs/db-4:= )
+ gtk? (
+ >=app-crypt/gcr-3.4[gtk]
+ >=x11-libs/gtk+-3.10:3
+ )
+ google? (
+ >=dev-libs/json-glib-1.0.4
+ >=net-libs/webkit-gtk-2.11.91:4
+ ${gdata_depend}
+ )
+ gnome-online-accounts? (
+ >=net-libs/gnome-online-accounts-3.8:=
+ ${gdata_depend} )
+ introspection? ( >=dev-libs/gobject-introspection-0.9.12:= )
+ kerberos? ( virtual/krb5:= )
+ ldap? ( >=net-nds/openldap-2:= )
+ weather? ( >=dev-libs/libgweather-3.10:2= )
+"
+DEPEND="${RDEPEND}
+ ${PYTHON_DEPS}
+ dev-util/gdbus-codegen
+ dev-util/gperf
+ >=dev-util/gtk-doc-am-1.14
+ >=dev-util/intltool-0.35.5
+ >=sys-devel/gettext-0.18.3
+ virtual/pkgconfig
+ vala? ( $(vala_depend) )
+"
+
+# Some tests fail due to missings locales.
+# Also, dbus tests are flacky, bugs #397975 #501834
+# It looks like a nightmare to disable those for now.
+RESTRICT="test"
+
+PATCHES=(
+ "${FILESDIR}"/${PV}-DESTDIR-honoring.patch
+ "${FILESDIR}"/${PV}-libical3-compat.patch
+)
+
+pkg_setup() {
+ python-any-r1_pkg_setup
+}
+
+src_prepare() {
+ use vala && vala_src_prepare
+ gnome2_src_prepare
+
+ # Make CMakeLists versioned vala enabled
+ sed -e "s;\(find_program(VALAC\) valac);\1 ${VALAC});" \
+ -e "s;\(find_program(VAPIGEN\) vapigen);\1 ${VAPIGEN});" \
+ -i "${S}"/CMakeLists.txt || die
+}
+
+src_configure() {
+ # /usr/include/db.h is always db-1 on FreeBSD
+ # so include the right dir in CPPFLAGS
+ use berkdb && append-cppflags "-I$(db_includedir)"
+
+ local google_auth_enable
+ if use google || use gnome-online-accounts; then
+ google_auth_enable="ON"
+ else
+ google_auth_enable="OFF"
+ fi
+
+ # phonenumber does not exist in tree
+ local mycmakeargs=(
+ -DENABLE_GTK_DOC=$(usex api-doc-extras)
+ -DWITH_PRIVATE_DOCS=$(usex api-doc-extras)
+ -DENABLE_SCHEMAS_COMPILE=OFF
+ -DENABLE_INTROSPECTION=$(usex introspection)
+ -DWITH_KRB5=$(usex kerberos)
+ -DWITH_KRB5_INCLUDES=$(usex kerberos "${EPREFIX}"/usr "")
+ -DWITH_KRB5_LIBS=$(usex kerberos "${EPREFIX}"/usr/$(get_libdir) "")
+ -DWITH_OPENLDAP=$(usex ldap)
+ -DWITH_PHONENUMBER=OFF
+ -DENABLE_SMIME=ON
+ -DENABLE_GTK=$(usex gtk)
+ -DENABLE_GOOGLE_AUTH=${google_auth_enable}
+ -DENABLE_EXAMPLES=OFF
+ -DENABLE_GOA=$(usex gnome-online-accounts)
+ -DENABLE_UOA=OFF
+ -DWITH_LIBDB=$(usex berkdb "${EPREFIX}"/usr OFF)
+ # ENABLE_BACKTRACES requires libdwarf ?
+ -DENABLE_IPV6=$(usex ipv6)
+ -DENABLE_WEATHER=$(usex weather)
+ -DENABLE_GOOGLE=$(usex google)
+ -DENABLE_LARGEFILE=ON
+ -DENABLE_VALA_BINDINGS=$(usex vala)
+ )
+
+ cmake-utils_src_configure
+}
+
+src_compile() {
+ cmake-utils_src_compile
+}
+
+src_test() {
+ virtx cmake-utils_src_test
+}
+
+src_install() {
+ cmake-utils_src_install
+
+ if use ldap; then
+ insinto /etc/openldap/schema
+ doins "${FILESDIR}"/calentry.schema
+ dosym ../../../usr/share/${PN}/evolutionperson.schema /etc/openldap/schema/evolutionperson.schema
+ fi
+}
--- /dev/null
+From 5406fcda088be73f462e7d02d4a2ae56cc7329cc Mon Sep 17 00:00:00 2001
+From: Milan Crha <mcrha@redhat.com>
+Date: Mon, 2 Oct 2017 19:20:36 +0200
+Subject: Bug 781645 - Skip GSettings schema compile when DESTDIR is set
+
+---
+ cmake/modules/GLibTools.cmake | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/cmake/modules/GLibTools.cmake b/cmake/modules/GLibTools.cmake
+index fc8eb82..f0be558 100644
+--- a/cmake/modules/GLibTools.cmake
++++ b/cmake/modules/GLibTools.cmake
+@@ -238,9 +238,11 @@ macro(add_gsettings_schemas _target _schema0)
+ if(_install_code)
+ # Compile gsettings schemas and ensure that all of them are in the place.
+ install(CODE
+- "execute_process(${_install_code}
+- COMMAND ${CMAKE_COMMAND} -E chdir . \"${GLIB_COMPILE_SCHEMAS}\" \"${GSETTINGS_SCHEMAS_DIR}\"
+- )")
++ "if(\"\$ENV{DESTDIR}\" STREQUAL \"\")
++ execute_process(${_install_code}
++ COMMAND ${CMAKE_COMMAND} -E chdir . \"${GLIB_COMPILE_SCHEMAS}\" \"${GSETTINGS_SCHEMAS_DIR}\"
++ )
++ endif(\"\$ENV{DESTDIR}\" STREQUAL \"\")")
+ endif(_install_code)
+ endmacro(add_gsettings_schemas)
+
+--
+cgit v0.12
+
--- /dev/null
+From dc5fc0e163421f5a01c3cdaab23ca2ea1eb3fae2 Mon Sep 17 00:00:00 2001
+From: Milan Crha <mcrha@redhat.com>
+Date: Wed, 4 Oct 2017 11:48:48 +0200
+Subject: [PATCH 1/2] Use icaltime_is_utc() instead of icaltimetype::is_utc
+
+The structure member is going to be removed from libical in the next release
+and the function is available for a long time, thus it's safe to replace
+the usage in the code.
+
+(cherry picked from commit f607f8628a28440374579531bc78848dfe0c782e)
+---
+ src/calendar/backends/contacts/e-cal-backend-contacts.c | 1 -
+ src/calendar/libecal/e-cal-component.c | 8 ++++----
+ src/calendar/libecal/e-cal-recur.c | 8 ++++----
+ src/calendar/libecal/e-cal-time-util.c | 3 +--
+ 4 files changed, 9 insertions(+), 11 deletions(-)
+
+diff --git a/src/calendar/backends/contacts/e-cal-backend-contacts.c b/src/calendar/backends/contacts/e-cal-backend-contacts.c
+index d2b570885..cf2c62062 100644
+--- a/src/calendar/backends/contacts/e-cal-backend-contacts.c
++++ b/src/calendar/backends/contacts/e-cal-backend-contacts.c
+@@ -699,7 +699,6 @@ cdate_to_icaltime (EContactDate *cdate)
+ ret.month = cdate->month;
+ ret.day = cdate->day;
+ ret.is_date = TRUE;
+- ret.is_utc = FALSE;
+ ret.zone = NULL;
+ ret.is_daylight = FALSE;
+
+diff --git a/src/calendar/libecal/e-cal-component.c b/src/calendar/libecal/e-cal-component.c
+index 65b530d1e..6d8a9814d 100644
+--- a/src/calendar/libecal/e-cal-component.c
++++ b/src/calendar/libecal/e-cal-component.c
+@@ -2522,7 +2522,7 @@ get_datetime (struct datetime *datetime,
+ * This makes the timezone code simpler. */
+ if (datetime->tzid_param)
+ dt->tzid = g_strdup (icalparameter_get_tzid (datetime->tzid_param));
+- else if (dt->value && dt->value->is_utc)
++ else if (dt->value && icaltime_is_utc (*dt->value))
+ dt->tzid = g_strdup ("UTC");
+ else
+ dt->tzid = NULL;
+@@ -2559,9 +2559,9 @@ set_datetime (ECalComponent *comp,
+
+ /* If the TZID is set to "UTC", we set the is_utc flag. */
+ if (dt->tzid && !strcmp (dt->tzid, "UTC"))
+- dt->value->is_utc = 1;
+- else
+- dt->value->is_utc = 0;
++ dt->value->zone = icaltimezone_get_utc_timezone ();
++ else if (dt->value->zone == icaltimezone_get_utc_timezone ())
++ dt->value->zone = NULL;
+
+ if (datetime->prop) {
+ /* make sure no VALUE property is left if not needed */
+diff --git a/src/calendar/libecal/e-cal-recur.c b/src/calendar/libecal/e-cal-recur.c
+index 535d56c14..cad588c4d 100644
+--- a/src/calendar/libecal/e-cal-recur.c
++++ b/src/calendar/libecal/e-cal-recur.c
+@@ -195,7 +195,7 @@ ensure_timezone (icalcomponent *comp,
+ a different icalcomponent and cause use-after-free. */
+ tt->zone = NULL;
+
+- if (tt->is_utc)
++ if (icaltime_is_utc (*tt))
+ return TRUE;
+
+ tt->zone = default_timezone;
+@@ -435,7 +435,7 @@ e_cal_recur_generate_instances_sync (icalcomponent *comp,
+ rrule.until.minute = 0;
+ rrule.until.second = 0;
+
+- if (!rrule.until.zone && !rrule.until.is_utc)
++ if (!rrule.until.zone && !icaltime_is_utc (rrule.until))
+ rrule.until.zone = dtstart.zone;
+ }
+
+@@ -542,7 +542,7 @@ e_cal_recur_generate_instances_sync (icalcomponent *comp,
+ exrule.until.minute = 0;
+ exrule.until.second = 0;
+
+- if (!exrule.until.zone && !exrule.until.is_utc)
++ if (!exrule.until.zone && !icaltime_is_utc (exrule.until))
+ exrule.until.zone = dtstart.zone;
+ }
+
+@@ -586,7 +586,7 @@ e_cal_recur_generate_instances_sync (icalcomponent *comp,
+ if (!success)
+ break;
+
+- if (!exdate.zone && !exdate.is_utc)
++ if (!exdate.zone && !icaltime_is_utc (exdate))
+ exdate.zone = dtstart.zone;
+
+ if (intersects_interval (&exdate, NULL, duration_days, duration_seconds, &interval_start, &interval_end)) {
+diff --git a/src/calendar/libecal/e-cal-time-util.c b/src/calendar/libecal/e-cal-time-util.c
+index 7bcbc8ba1..914761cb0 100644
+--- a/src/calendar/libecal/e-cal-time-util.c
++++ b/src/calendar/libecal/e-cal-time-util.c
+@@ -763,9 +763,8 @@ tm_to_icaltimetype (struct tm *tm,
+
+ itt.day = tm->tm_mday;
+ itt.month = tm->tm_mon + 1;
+- itt.year = tm->tm_year+ 1900;
++ itt.year = tm->tm_year + 1900;
+
+- itt.is_utc = 0;
+ itt.is_date = is_date;
+
+ return itt;
+--
+2.15.1
+
+
+From fccd77cf4620ca76c4fd2bf7721e3fb7eaf55ec6 Mon Sep 17 00:00:00 2001
+From: Milan Crha <mcrha@redhat.com>
+Date: Thu, 5 Oct 2017 13:50:08 +0200
+Subject: [PATCH 2/2] e-cal-recur.c:ensure_timezone(): Unset icaltimetype::zone
+ only if not UTC
+
+With a removal of icaltimetype::is_utc the icaltimetype::zone is used
+to determine whether it's UTC or not. That means that the icaltimetype::zone
+can be unset only if it's not the built-in UTC time zone.
+
+(cherry picked from commit 1f39ade8db00091d6fa4c752ccb70361ef0e8abc)
+---
+ src/calendar/libecal/e-cal-recur.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/src/calendar/libecal/e-cal-recur.c b/src/calendar/libecal/e-cal-recur.c
+index cad588c4d..fc14fb15c 100644
+--- a/src/calendar/libecal/e-cal-recur.c
++++ b/src/calendar/libecal/e-cal-recur.c
+@@ -193,7 +193,8 @@ ensure_timezone (icalcomponent *comp,
+
+ /* Do not trust the 'zone' set on the structure, as it can come from
+ a different icalcomponent and cause use-after-free. */
+- tt->zone = NULL;
++ if (tt->zone != icaltimezone_get_utc_timezone ())
++ tt->zone = NULL;
+
+ if (icaltime_is_utc (*tt))
+ return TRUE;
+--
+2.15.1
+