Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libical for openSUSE:Factory checked 
in at 2022-01-29 21:01:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libical (Old)
 and      /work/SRC/openSUSE:Factory/.libical.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libical"

Sat Jan 29 21:01:06 2022 rev:55 rq:949395 version:3.0.13

Changes:
--------
--- /work/SRC/openSUSE:Factory/libical/libical.changes  2021-12-28 
12:26:18.624470013 +0100
+++ /work/SRC/openSUSE:Factory/.libical.new.1898/libical.changes        
2022-01-29 21:01:32.862889584 +0100
@@ -1,0 +2,10 @@
+Fri Jan 21 21:03:36 UTC 2022 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 3.0.13:
+  * icalcomponent_get_dtend() return icaltime_null_time(), unless called on
+    VEVENT, VAVAILABILITY or VFREEBUSY
+  * icalcomponent_get_duration() for VTODO calculate with DUE instead of DTEND
+  * Replace CMake FindBDB with FindBerleyDB
+  * Fix finding ICU and BerkeleyDB on Mac
+
+-------------------------------------------------------------------

Old:
----
  libical-3.0.12.tar.gz

New:
----
  libical-3.0.13.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libical.spec ++++++
--- /var/tmp/diff_new_pack.3nYy8f/_old  2022-01-29 21:01:33.446885658 +0100
+++ /var/tmp/diff_new_pack.3nYy8f/_new  2022-01-29 21:01:33.450885631 +0100
@@ -1,7 +1,7 @@
 #
 # spec file
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -26,7 +26,7 @@
 %bcond_with glib
 %endif
 Name:           libical%{name_ext}
-Version:        3.0.12
+Version:        3.0.13
 Release:        0
 URL:            https://github.com/libical/libical
 Source:         %{url}/releases/download/v%{version}/libical-%{version}.tar.gz
@@ -191,7 +191,7 @@
 %if %{without glib}
 %files -n %{name}%{sonum}
 %license COPYING
-%doc AUTHORS ReadMe.txt ReleaseNotes.txt TEST THANKS TODO
+%doc AUTHORS README.md ReleaseNotes.txt TEST THANKS TODO
 %{_libdir}/libical.so.*
 %{_libdir}/libical_cxx.so.*
 %{_libdir}/libicalss.so.*

++++++ libical-3.0.12.tar.gz -> libical-3.0.13.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/.krazy new/libical-3.0.13/.krazy
--- old/libical-3.0.12/.krazy   2021-12-09 00:36:12.000000000 +0100
+++ new/libical-3.0.13/.krazy   2022-01-17 16:19:56.000000000 +0100
@@ -30,7 +30,7 @@
 SKIP /cmake/Kitware/
 SKIP 
/cmake/modules/GObjectIntrospectionMacros\.cmake|/cmake/modules/FindGObjectIntrospection\.cmake
 SKIP /doc/Doxyfile\.cmake
-SKIP 
/cmake/Toolchain-iOS.cmake|/cmake/Toolchain-QNX65.cmake|/cmake/Toolchain-QNX66.cmake|/cmake/Toolchain-android.cmake
+SKIP 
/cmake/Toolchain-iOS.cmake|/cmake/Toolchain-QNX65.cmake|/cmake/Toolchain-QNX66.cmake|/cmake/Toolchain-android.cmake|/cmake/modules/FindBerkeleyDB.cmake
 
 #Skip zoneinfo
 SKIP /zoneinfo/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/CMakeLists.txt 
new/libical-3.0.13/CMakeLists.txt
--- old/libical-3.0.12/CMakeLists.txt   2021-12-09 00:36:12.000000000 +0100
+++ new/libical-3.0.13/CMakeLists.txt   2022-01-17 16:19:56.000000000 +0100
@@ -112,7 +112,7 @@
 
 set(LIBICAL_LIB_MAJOR_VERSION "3")
 set(LIBICAL_LIB_MINOR_VERSION "0")
-set(LIBICAL_LIB_PATCH_VERSION "12")
+set(LIBICAL_LIB_PATCH_VERSION "13")
 set(LIBICAL_LIB_VERSION_STRING
   
"${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}"
 )
@@ -199,6 +199,12 @@
 if(NOT "$ENV{ICU_BASE}" STREQUAL "") #support the old ICU_BASE env
   set(ICU_ROOT $ENV{ICU_BASE})
 endif()
+if(NOT "$ENV{ICU_ROOT}")
+  #Use the homebrew version. MacOS provided ICU doesn't provide development 
files
+  if(APPLE)
+    set(ICU_ROOT "/usr/local/opt/icu4c")
+  endif()
+endif()
 find_package(ICU COMPONENTS uc i18n)
 set_package_properties(ICU PROPERTIES
   TYPE RECOMMENDED
@@ -235,19 +241,29 @@
 endif()
 
 # compile in Berkeley DB support
-find_package(BDB)
-set_package_properties(BDB PROPERTIES
+if(NOT "$ENV{BerkeleyDB_ROOT_DIR}")
+  if(APPLE)
+    #Use the homebrew version. Xcode's version doesn't work for us.
+    set(BerkeleyDB_ROOT_DIR "/usr/local/opt/berkeley-db")
+  endif()
+endif()
+find_package(BerkeleyDB)
+set_package_properties(BerkeleyDB PROPERTIES
   TYPE OPTIONAL
   PURPOSE "For Berkeley DB storage support"
 )
 add_feature_info(
   "Berkeley DB storage support"
-  BDB_FOUND
+  BerkeleyDB_FOUND
   "build in support for Berkeley DB storage"
 )
-if(BDB_FOUND)
+if(BerkeleyDB_FOUND)
   set(HAVE_BDB True)
   add_definitions(-DDB_DBM_HSEARCH=0) #set to 1 if hsearch support is needed
+  #for compatibility to our old FindBDB
+  set(BDB_FOUND True)
+  set(BDB_INCLUDE_DIR ${BerkeleyDB_INCLUDE_DIRS})
+  set(BDB_LIBRARY ${BerkeleyDB_LIBRARIES})
 endif()
 
 # MSVC specific definitions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/README.md new/libical-3.0.13/README.md
--- old/libical-3.0.12/README.md        1970-01-01 01:00:00.000000000 +0100
+++ new/libical-3.0.13/README.md        2022-01-17 16:19:56.000000000 +0100
@@ -0,0 +1,102 @@
+# Libical
+
+[![Appveyor 
status](https://ci.appveyor.com/api/projects/status/github/libical/libical?branch=master?svg=true)](https://ci.appveyor.com/api/projects/status/github/libical/libical)
 [![Packaging 
status](https://repology.org/badge/tiny-repos/libical.svg)](https://repology.org/metapackage/libical)
+
+## Introduction
+
+Libical ??? an implementation of iCalendar protocols and data formats
+
+Most of the code in here was written by Eric Busboom at the end
+of the last millennium with help from dozens of contributors.
+It is currently maintained by Allen Winter and the libical team
+at https://github.com/libical/libical.
+
+Libical is an Open Source implementation of the iCalendar protocols
+and protocol data units. The iCalendar specification describes how
+calendar clients can communicate with calendar servers so users can
+store their calendar data and arrange meetings with other users.
+
+Libical implements [RFC5545][], [RFC5546][], [RFC7529][]; the
+CalDav scheduling extensions in [RFC6638][]; iCalendar extensions in 
[RFC7986][];
+plus the iCalendar iMIP protocol in [RFC6047][].
+
+[RFC5545]: https://tools.ietf.org/html/rfc5545
+[RFC5546]: https://tools.ietf.org/html/rfc5546
+[RFC7529]: https://tools.ietf.org/html/rfc7529
+[RFC6638]: https://tools.ietf.org/html/rfc6638
+[RFC6047]: https://tools.ietf.org/html/rfc6047
+[RFC7986]: https://tools.ietf.org/html/rfc7986
+
+The libical-glib API is currently unstable and can change with any release.
+Until it is considered stable, there should be defined 
LIBICAL_GLIB_UNSTABLE_API=1
+before including <libical-glib/libical-glib.h>, to indicate that the library 
user
+is aware of it and is prepared to change the calls anytime.
+
+## License
+
+The code and datafiles in this distribution are licensed under the
+Mozilla Public License (MPL) v2.0. See <https://www.mozilla.org/MPL>
+for a copy of this license.
+
+Alternately, you may use libical under the terms of the GNU Lesser
+General Public License (LGPL) v2.1. See 
<https://www.gnu.org/licenses/lgpl-2.1.txt>
+for a copy of this license.
+
+This dual license ensures that the library can be incorporated into
+both proprietary code and GPL'd programs, and will benefit from improvements
+made by programmers in both realms. I will only accept changes into
+my version of the library if they are similarly dual-licensed.
+
+## Building
+
+See the top-level [Install.txt](Install.txt) file.
+
+## Documentation
+
+There is rudimentary, unfinished documentation in the `doc/` directory,
+see [UsingLibical.md](doc/UsingLibical.md)
+and annotated examples in `examples/` and the test code in `src/test/`.
+
+Additionally, progress is underway to add API documentation,
+which is available [here](https://libical.github.io/libical/apidocs/index.html)
+
+## Acknowledgments
+
+Portions of this distribution are (C) Copyright 1996 Apple Computer,
+Inc., AT&T Corp., International Business Machines Corporation and
+Siemens Rolm Communications Inc. See
+[src/libicalvcal/README.TXT](src/libicalvcal/README.txt) for
+details.
+
+## Libical Users
+
+In no particular order:
+
+* [Cyrus Email/Calendars/Contacts Server](https://www.cyrusimap.org)
+* [syncEvolution](https://syncevolution.org)
+* [Fantastical](https://flexibits.com/fantastical)
+
+* GNOME's EDS (evolution-data-server) which serves data to:
+  * [Evolution](https://wiki.gnome.org/Apps/Evolution)
+  * [GNOME Calendar](https://wiki.gnome.org/Apps/Calendar)
+  * [GNOME Notes](https://wiki.gnome.org/Apps/Notes)
+  * [GNOME Todo](https://wiki.gnome.org/Apps/Todo)
+  * and more GNOME apps...
+
+ * KDE's [Kontact Suite](https://kontact.kde.org)
+   * [Akonadi framework](https://kontact.kde.org/components/akonadi.html)
+   * [KOrganizer calendar and scheduling 
component](https://kontact.kde.org/components/korganizer.html)
+   * and more KDE apps...
+
+## Get Involved
+
+Subscribe to our mailing lists:
+
+For developer discussions
+  <https://lists.infradead.org/mailman/listinfo/libical-devel>
+
+For general discussions about libical and related projects
+  <https://lists.infradead.org/mailman/listinfo/libical-interest>
+
+Report bugs to our issue tracker at
+  <https://github.com/libical/libical/issues>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/ReadMe.md new/libical-3.0.13/ReadMe.md
--- old/libical-3.0.12/ReadMe.md        2022-01-29 21:01:33.730883748 +0100
+++ new/libical-3.0.13/ReadMe.md        1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-symbolic link to ReadMe.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/ReadMe.txt 
new/libical-3.0.13/ReadMe.txt
--- old/libical-3.0.12/ReadMe.txt       2021-12-09 00:36:12.000000000 +0100
+++ new/libical-3.0.13/ReadMe.txt       1970-01-01 01:00:00.000000000 +0100
@@ -1,100 +0,0 @@
-# <a name="title"></a> Libical [![Travis Build 
Status](https://travis-ci.org/libical/libical.svg?branch=master)](https://travis-ci.org/libical/libical)
 [![Appveyor Build 
Status](https://ci.appveyor.com/api/projects/status/github/libical/libical?branch=master?svg=true)](https://ci.appveyor.com/api/projects/status/github/libical/libical)
 [![Coverity Scan Build 
Status](https://scan.coverity.com/projects/2367/badge.svg)](https://scan.coverity.com/projects/2367)
 [![Packaging 
status](https://repology.org/badge/tiny-repos/libical.svg)](https://repology.org/metapackage/libical)
-
-## Introduction
-
-Libical ??? an implementation of iCalendar protocols and data formats
-
-Most of the code in here was written by Eric Busboom at the end
-of the last millennium with help from dozens of contributors.
-It is currently maintained by Allen Winter and the libical team
-at https://github.com/libical/libical.
-
-Libical is an Open Source implementation of the iCalendar protocols
-and protocol data units. The iCalendar specification describes how
-calendar clients can communicate with calendar servers so users can
-store their calendar data and arrange meetings with other users.
-
-Libical implements [RFC5545][], [RFC5546][], [RFC7529][]; the
-CalDav scheduling extensions in [RFC6638][]; iCalendar extensions in 
[RFC7986][];
-plus the iCalendar iMIP protocol in [RFC6047][].
-
-[RFC5545]: https://tools.ietf.org/html/rfc5545
-[RFC5546]: https://tools.ietf.org/html/rfc5546
-[RFC7529]: https://tools.ietf.org/html/rfc7529
-[RFC6638]: https://tools.ietf.org/html/rfc6638
-[RFC6047]: https://tools.ietf.org/html/rfc6047
-[RFC7986]: https://tools.ietf.org/html/rfc7986
-
-The libical-glib API is currently unstable and can change with any release.
-Until it is considered stable, there should be defined 
LIBICAL_GLIB_UNSTABLE_API=1
-before including <libical-glib/libical-glib.h>, to indicate that the library 
user
-is aware of it and is prepared to change the calls anytime.
-
-## License
-
-The code and datafiles in this distribution are licensed under the
-Mozilla Public License (MPL) v2.0. See <https://www.mozilla.org/MPL>
-for a copy of this license.
-
-Alternately, you may use libical under the terms of the GNU Lesser
-General Public License (LGPL) v2.1. See 
<https://www.gnu.org/licenses/lgpl-2.1.txt>
-for a copy of this license.
-
-This dual license ensures that the library can be incorporated into
-both proprietary code and GPL'd programs, and will benefit from improvements
-made by programmers in both realms. I will only accept changes into
-my version of the library if they are similarly dual-licensed.
-
-## Building
-
-See the top-level [Install.txt](Install.txt) file.
-
-## Documentation
-
-There is rudimentary, unfinished documentation in the `doc/` directory,
-see [UsingLibical.md](doc/UsingLibical.md)
-and annotated examples in `examples/` and the test code in `src/test/`.
-
-Additionally, progress is underway to add API documentation,
-which is available [here](https://libical.github.io/libical/apidocs/index.html)
-
-## Acknowledgments
-
-Portions of this distribution are (C) Copyright 1996 Apple Computer,
-Inc., AT&T Corp., International Business Machines Corporation and
-Siemens Rolm Communications Inc. See
-[src/libicalvcal/README.TXT](src/libicalvcal/README.txt) for
-details.
-
-## Libical Users
-
-In no particular order:
-
-* [Cyrus Email/Calendars/Contacts Server](https://www.cyrusimap.org)
-* [syncEvolution](https://syncevolution.org)
-* [Fantastical](https://flexibits.com/fantastical)
-
-* GNOME's EDS (evolution-data-server) which serves data to:
-  * [Evolution](https://wiki.gnome.org/Apps/Evolution)
-  * [GNOME Calendar](https://wiki.gnome.org/Apps/Calendar)
-  * [GNOME Notes](https://wiki.gnome.org/Apps/Notes)
-  * [GNOME Todo](https://wiki.gnome.org/Apps/Todo)
-  * and more GNOME apps...
-
- * KDE's [Kontact Suite](https://kontact.kde.org)
-   * [Akonadi framework](https://kontact.kde.org/components/akonadi.html)
-   * [KOrganizer calendar and scheduling 
component](https://kontact.kde.org/components/korganizer.html)
-   * and more KDE apps...
-
-## Get Involved
-
-Subscribe to our mailing lists:
-
-For developer discussions
-  <https://lists.infradead.org/mailman/listinfo/libical-devel>
-
-For general discussions about libical and related projects
-  <https://lists.infradead.org/mailman/listinfo/libical-interest>
-
-Report bugs to our issue tracker at
-  <https://github.com/libical/libical/issues>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/ReleaseNotes.txt 
new/libical-3.0.13/ReleaseNotes.txt
--- old/libical-3.0.12/ReleaseNotes.txt 2021-12-09 00:36:12.000000000 +0100
+++ new/libical-3.0.13/ReleaseNotes.txt 2022-01-17 16:19:56.000000000 +0100
@@ -1,6 +1,13 @@
 Release Highlights
 ==================
 
+Version 3.0.13 (17 January 2022):
+---------------------------------
+ * icalcomponent_get_dtend() return icaltime_null_time(), unless called on 
VEVENT, VAVAILABILITY or VFREEBUSY
+ * icalcomponent_get_duration() for VTODO calculate with DUE instead of DTEND
+ * Replace CMake FindBDB with FindBerleyDB 
(https://github.com/sum01/FindBerkeleyDB)
+ * Fix finding ICU and BerkeleyDB on Mac (look for homebrew installs first)
+
 Version 3.0.12 (08 December 2021):
 ----------------------------------
  * Fix a libicalval crash in cleanVObject
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/cmake/modules/FindBerkeleyDB.cmake 
new/libical-3.0.13/cmake/modules/FindBerkeleyDB.cmake
--- old/libical-3.0.12/cmake/modules/FindBerkeleyDB.cmake       1970-01-01 
01:00:00.000000000 +0100
+++ new/libical-3.0.13/cmake/modules/FindBerkeleyDB.cmake       2022-01-17 
16:19:56.000000000 +0100
@@ -0,0 +1,182 @@
+# Author: sum01 <su...@protonmail.com>
+# Git: https://github.com/sum01/FindBerkeleyDB
+
+#
+# This is free and unencumbered software released into the public domain.
+#
+# Anyone is free to copy, modify, publish, use, compile, sell, or distribute
+# this software, either in source code form or as a compiled binary, for any
+# purpose, commercial or non-commercial, and by any means.
+#
+# In jurisdictions that recognize copyright laws, the author or authors of this
+# software dedicate any and all copyright interest in the software to the 
public
+# domain. We make this dedication for the benefit of the public at large and to
+# the detriment of our heirs and successors. We intend this dedication to be an
+# overt act of relinquishment in perpetuity of all present and future rights to
+# this software under copyright law.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# For more information, please refer to <http://unlicense.org>
+#
+
+# NOTE: If Berkeley DB ever gets a Pkg-config ".pc" file, add 
pkg_check_modules() here
+
+# Checks if environment paths are empty, set them if they aren't
+if(NOT "$ENV{BERKELEYDB_ROOT}" STREQUAL "")
+       set(_BERKELEYDB_PATHS "$ENV{BERKELEYDB_ROOT}")
+elseif(NOT "$ENV{Berkeleydb_ROOT}" STREQUAL "")
+       set(_BERKELEYDB_PATHS "$ENV{Berkeleydb_ROOT}")
+elseif(NOT "$ENV{BERKELEYDBROOT}" STREQUAL "")
+       set(_BERKELEYDB_PATHS "$ENV{BERKELEYDBROOT}")
+else()
+       # Set just in case, as it's used regardless if it's empty or not
+       set(_BERKELEYDB_PATHS "")
+endif()
+
+# Allow user to pass a path instead of guessing
+if(BerkeleyDB_ROOT_DIR)
+       set(_BERKELEYDB_PATHS "${BerkeleyDB_ROOT_DIR}")
+elseif(CMAKE_SYSTEM_NAME MATCHES ".*[wW]indows.*")
+       # MATCHES is used to work on any devies with windows in the name
+       # Shameless copy-paste from FindOpenSSL.cmake v3.8
+       file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _programfiles)
+       list(APPEND _BERKELEYDB_PATHS "${_programfiles}")
+
+       # There's actually production release and version numbers in the file 
path.
+       # For example, if they're on v6.2.32: C:/Program Files/Oracle/Berkeley 
DB 12cR1 6.2.32/
+       # But this still works to find it, so I'm guessing it can accept 
partial path matches.
+
+       foreach(_TARGET_BERKELEYDB_PATH "Oracle/Berkeley DB" "Berkeley DB")
+               list(APPEND _BERKELEYDB_PATHS
+                       "${_programfiles}/${_TARGET_BERKELEYDB_PATH}"
+                       "C:/Program Files (x86)/${_TARGET_BERKELEYDB_PATH}"
+                       "C:/Program Files/${_TARGET_BERKELEYDB_PATH}"
+                       "C:/${_TARGET_BERKELEYDB_PATH}"
+               )
+       endforeach()
+else()
+       # Paths for anything other than Windows
+       # Cellar/berkeley-db is for macOS from homebrew installation
+       list(APPEND _BERKELEYDB_PATHS
+               "/usr"
+               "/usr/local"
+               "/usr/local/Cellar/berkeley-db"
+               "/opt"
+               "/opt/local"
+       )
+endif()
+
+# Find includes path
+find_path(BerkeleyDB_INCLUDE_DIRS
+       NAMES "db.h"
+       HINTS ${_BERKELEYDB_PATHS}
+       PATH_SUFFIXES "include" "includes"
+)
+
+# Checks if the version file exists, save the version file to a var, and fail 
if there's no version file
+if(BerkeleyDB_INCLUDE_DIRS)
+       # Read the version file db.h into a variable
+       file(READ "${BerkeleyDB_INCLUDE_DIRS}/db.h" _BERKELEYDB_DB_HEADER)
+       # Parse the DB version into variables to be used in the lib names
+       string(REGEX REPLACE ".*DB_VERSION_MAJOR        ([0-9]+).*" "\\1" 
BerkeleyDB_VERSION_MAJOR "${_BERKELEYDB_DB_HEADER}")
+       string(REGEX REPLACE ".*DB_VERSION_MINOR        ([0-9]+).*" "\\1" 
BerkeleyDB_VERSION_MINOR "${_BERKELEYDB_DB_HEADER}")
+       # Patch version example on non-crypto installs: x.x.xNC
+       string(REGEX REPLACE ".*DB_VERSION_PATCH        ([0-9]+(NC)?).*" "\\1" 
BerkeleyDB_VERSION_PATCH "${_BERKELEYDB_DB_HEADER}")
+else()
+       if(BerkeleyDB_FIND_REQUIRED)
+               # If the find_package(BerkeleyDB REQUIRED) was used, fail since 
we couldn't find the header
+               message(FATAL_ERROR "Failed to find Berkeley DB's header file 
\"db.h\"! Try setting \"BerkeleyDB_ROOT_DIR\" when initiating Cmake.")
+       elseif(NOT BerkeleyDB_FIND_QUIETLY)
+               message(WARNING "Failed to find Berkeley DB's header file 
\"db.h\"! Try setting \"BerkeleyDB_ROOT_DIR\" when initiating Cmake.")
+       endif()
+       # Set some garbage values to the versions since we didn't find a file 
to read
+       set(BerkeleyDB_VERSION_MAJOR "0")
+       set(BerkeleyDB_VERSION_MINOR "0")
+       set(BerkeleyDB_VERSION_PATCH "0")
+endif()
+
+# The actual returned/output version variable (the others can be used if 
needed)
+set(BerkeleyDB_VERSION 
"${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}.${BerkeleyDB_VERSION_PATCH}")
+
+# Finds the target library for berkeley db, since they all follow the same 
naming conventions
+macro(findpackage_berkeleydb_get_lib _BERKELEYDB_OUTPUT_VARNAME 
_TARGET_BERKELEYDB_LIB)
+       # Different systems sometimes have a version in the lib name...
+       # and some have a dash or underscore before the versions.
+       # CMake recommends to put unversioned names before versioned names
+       find_library(${_BERKELEYDB_OUTPUT_VARNAME}
+               NAMES
+               "${_TARGET_BERKELEYDB_LIB}"
+               "lib${_TARGET_BERKELEYDB_LIB}"
+               
"lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}"
+               
"lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}"
+               
"lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}"
+               
"lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}${BerkeleyDB_VERSION_MINOR}"
+               
"lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}${BerkeleyDB_VERSION_MINOR}"
+               
"lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}${BerkeleyDB_VERSION_MINOR}"
+               "lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}"
+               "lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}"
+               "lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}"
+               HINTS ${_BERKELEYDB_PATHS}
+               PATH_SUFFIXES "lib" "lib64" "libs" "libs64"
+       )
+       # If the library was found, add it to our list of libraries
+       if(${_BERKELEYDB_OUTPUT_VARNAME})
+               # If found, append to our libraries variable
+               # The ${{}} is because the first expands to target the real 
variable, the second expands the variable's contents...
+               # and the real variable's contents is the path to the lib. 
Thus, it appends the path of the lib to BerkeleyDB_LIBRARIES.
+               list(APPEND BerkeleyDB_LIBRARIES 
"${${_BERKELEYDB_OUTPUT_VARNAME}}")
+       endif()
+endmacro()
+
+# Find and set the paths of the specific library to the variable
+findpackage_berkeleydb_get_lib(BerkeleyDB_LIBRARY "db")
+# NOTE: Windows doesn't have a db_cxx lib, but instead compiles the cxx code 
into the "db" lib
+findpackage_berkeleydb_get_lib(BerkeleyDB_Cxx_LIBRARY "db_cxx")
+# NOTE: I don't think Linux/Unix gets an SQL lib
+findpackage_berkeleydb_get_lib(BerkeleyDB_Sql_LIBRARY "db_sql")
+findpackage_berkeleydb_get_lib(BerkeleyDB_Stl_LIBRARY "db_stl")
+
+# Needed for find_package_handle_standard_args()
+include(FindPackageHandleStandardArgs)
+# Fails if required vars aren't found, or if the version doesn't meet 
specifications.
+find_package_handle_standard_args(BerkeleyDB
+       FOUND_VAR BerkeleyDB_FOUND
+       REQUIRED_VARS
+               BerkeleyDB_INCLUDE_DIRS
+               BerkeleyDB_LIBRARY
+       VERSION_VAR BerkeleyDB_VERSION
+)
+
+# Create an imported lib for easy linking by external projects
+if(BerkeleyDB_FOUND AND BerkeleyDB_LIBRARIES AND NOT TARGET Oracle::BerkeleyDB)
+       add_library(Oracle::BerkeleyDB UNKNOWN IMPORTED)
+       set_target_properties(Oracle::BerkeleyDB PROPERTIES
+               INTERFACE_INCLUDE_DIRECTORIES "${BerkeleyDB_INCLUDE_DIRS}"
+               IMPORTED_LOCATION "${BerkeleyDB_LIBRARY}"
+               INTERFACE_LINK_LIBRARIES "${BerkeleyDB_LIBRARIES}"
+       )
+endif()
+
+# Only show the includes path and libraries in the GUI if they click 
"advanced".
+# Does nothing when using the CLI
+mark_as_advanced(FORCE
+       BerkeleyDB_INCLUDE_DIRS
+       BerkeleyDB_LIBRARIES
+       BerkeleyDB_LIBRARY
+       BerkeleyDB_Cxx_LIBRARY
+       BerkeleyDB_Sql_LIBRARY
+       BerkeleyDB_Stl_LIBRARY
+)
+
+include(FindPackageMessage)
+# A message that tells the user what includes/libs were found, and obeys the 
QUIET command.
+find_package_message(BerkeleyDB
+       "Found BerkeleyDB libraries: ${BerkeleyDB_LIBRARIES}"
+       "[${BerkeleyDB_LIBRARIES}[${BerkeleyDB_INCLUDE_DIRS}]]"
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/config.h.cmake 
new/libical-3.0.13/config.h.cmake
--- old/libical-3.0.12/config.h.cmake   2021-12-09 00:36:12.000000000 +0100
+++ new/libical-3.0.13/config.h.cmake   2022-01-17 16:19:56.000000000 +0100
@@ -211,8 +211,10 @@
 /* Typedef ssize_t if needed */
 #cmakedefine HAVE_SIZEOF_SSIZE_T
 #if !defined(HAVE_SIZEOF_SSIZE_T)
+#if !defined(HAVE_BDB) && !defined(_WIN32)
 typedef long ssize_t;
 #endif
+#endif
 
 /* Typedef pid_t if needed */
 #cmakedefine HAVE_SIZEOF_PID_T 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/src/libical/CMakeLists.txt 
new/libical-3.0.13/src/libical/CMakeLists.txt
--- old/libical-3.0.12/src/libical/CMakeLists.txt       2021-12-09 
00:36:12.000000000 +0100
+++ new/libical-3.0.13/src/libical/CMakeLists.txt       2022-01-17 
16:19:56.000000000 +0100
@@ -265,6 +265,8 @@
   add_library(ical-static ALIAS ical)
 endif()
 
+target_include_directories(ical INTERFACE 
"$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>")
+
 target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT})
 
 if(ICU_FOUND)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/src/libical/icalcomponent.c 
new/libical-3.0.13/src/libical/icalcomponent.c
--- old/libical-3.0.12/src/libical/icalcomponent.c      2021-12-09 
00:36:12.000000000 +0100
+++ new/libical-3.0.13/src/libical/icalcomponent.c      2022-01-17 
16:19:56.000000000 +0100
@@ -1337,10 +1337,23 @@
 struct icaltimetype icalcomponent_get_dtend(icalcomponent *comp)
 {
     icalcomponent *inner = icalcomponent_get_inner(comp);
-    icalproperty *end_prop = icalcomponent_get_first_property(inner, 
ICAL_DTEND_PROPERTY);
-    icalproperty *dur_prop = icalcomponent_get_first_property(inner, 
ICAL_DURATION_PROPERTY);
+    const icalcomponent_kind kind = icalcomponent_isa(inner);
+    icalproperty *end_prop, *dur_prop;
     struct icaltimetype ret;
 
+    switch(kind) {
+    case ICAL_VAVAILABILITY_COMPONENT:
+    case ICAL_VEVENT_COMPONENT:
+    case ICAL_VFREEBUSY_COMPONENT:
+    case ICAL_XAVAILABLE_COMPONENT:
+        break;
+    default:
+        return icaltime_null_time();
+    }
+
+    end_prop = icalcomponent_get_first_property(inner, ICAL_DTEND_PROPERTY);
+    dur_prop = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY);
+
     if (end_prop != 0 && dur_prop == 0) {
         ret = icalproperty_get_datetime_with_component(end_prop, comp);
     } else if (end_prop == 0 && dur_prop != 0) {
@@ -1357,13 +1370,17 @@
 
         ret = icaltime_add(start, duration);
     } else if (end_prop == 0 && dur_prop == 0) {
-        struct icaltimetype start = icalcomponent_get_dtstart(inner);
-        if (icaltime_is_date(start)) {
-            struct icaldurationtype duration = 
icaldurationtype_null_duration();
-            duration.days = 1;
-            ret = icaltime_add(start, duration);
+        if (kind == ICAL_VEVENT_COMPONENT) {
+            struct icaltimetype start = icalcomponent_get_dtstart(inner);
+            if (icaltime_is_date(start)) {
+                struct icaldurationtype duration = 
icaldurationtype_null_duration();
+                duration.days = 1;
+                ret = icaltime_add(start, duration);
+            } else {
+                ret = start;
+            }
         } else {
-            ret = start;
+            ret = icaltime_null_time();
         }
     } else {
         /* Error, both duration and dtend have been specified */
@@ -1419,12 +1436,32 @@
 struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp)
 {
     icalcomponent *inner = icalcomponent_get_inner(comp);
+    const icalcomponent_kind kind = icalcomponent_isa(inner);
+    icalproperty *end_prop, *dur_prop;
+    struct icaltimetype end;
+    struct icaldurationtype ret;
+
+    switch(kind) {
+    case ICAL_VAVAILABILITY_COMPONENT:
+    case ICAL_VEVENT_COMPONENT:
+    case ICAL_XAVAILABLE_COMPONENT:
+        end_prop = icalcomponent_get_first_property(inner, 
ICAL_DTEND_PROPERTY);
+        if (end_prop) {
+            end = icalcomponent_get_dtend(inner);
+        }
+        break;
+    case ICAL_VTODO_COMPONENT:
+        end_prop = icalcomponent_get_first_property(inner, ICAL_DUE_PROPERTY);
+        if (end_prop) {
+            end = icalcomponent_get_due(inner);
+        }
+        break;
+    default:
+        /* The libical API is used incorrectly */
+        return icaldurationtype_null_duration();
+    }
 
-    icalproperty *end_prop = icalcomponent_get_first_property(inner, 
ICAL_DTEND_PROPERTY);
-
-    icalproperty *dur_prop = icalcomponent_get_first_property(inner, 
ICAL_DURATION_PROPERTY);
-
-    struct icaldurationtype ret = icaldurationtype_null_duration();
+    dur_prop = icalcomponent_get_first_property(inner, ICAL_DURATION_PROPERTY);
 
     if (dur_prop != 0 && end_prop == 0) {
         ret = icalproperty_get_duration(dur_prop);
@@ -1436,15 +1473,16 @@
          * The standard actually allows different time zones.
          */
         struct icaltimetype start = icalcomponent_get_dtstart(inner);
-        struct icaltimetype end = icalcomponent_get_dtend(inner);
 
         ret = icaltime_subtract(end, start);
     } else if (end_prop == 0 && dur_prop == 0) {
         struct icaltimetype start = icalcomponent_get_dtstart(inner);
-        if (icaltime_is_date(start)) {
+        ret = icaldurationtype_null_duration();
+        if (kind == ICAL_VEVENT_COMPONENT && icaltime_is_date(start)) {
             ret.days = 1;
         }
     } else {
+        ret = icaldurationtype_null_duration();
         /* Error, both duration and dtend have been specified */
         icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR);
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/src/libical/icalcomponent.h 
new/libical-3.0.13/src/libical/icalcomponent.h
--- old/libical-3.0.12/src/libical/icalcomponent.h      2021-12-09 
00:36:12.000000000 +0100
+++ new/libical-3.0.13/src/libical/icalcomponent.h      2022-01-17 
16:19:56.000000000 +0100
@@ -263,6 +263,13 @@
  *      there is a DTEND and you call get_duration, the routine will
  *      return the difference between DTEND and DTSTART.
  *
+ *      When DURATION and DTEND are both missing, for VEVENT an implicit
+ *      DTEND is calculated based of DTSTART; for AVAILABLE, VAVAILABILITY,
+ *      and VFREEBUSY null-time is returned.
+ *
+ *      Returns null-time, unless called on AVAILABLE, VEVENT,
+ *      VAVAILABILITY, or VFREEBUSY components.
+ *
  *      FIXME this is useless until we can flag the failure
  */
 LIBICAL_ICAL_EXPORT struct icaltimetype icalcomponent_get_dtend(icalcomponent 
*comp);
@@ -327,15 +334,14 @@
 /**     @brief Gets the DURATION property as an icalduration
  *
  *      For the icalcomponent routines only, DTEND and DURATION are tied
- *      together.
- *      If a DURATION property is not present but a DTEND is, we use
- *      that to determine the proper end.
- *
- *      For the icalcomponent routines only, dtend and duration are tied
  *      together. If you call the get routine for one and the other
  *      exists, the routine will calculate the return value. That is, if
- *      there is a DTEND and you call get_duration, the routine will
- *      return the difference between DTEND and DTSTART.
+ *      there is a DTEND and you call get_duration, the routine will return
+ *      the difference between DTEND and DTSTART in AVAILABLE, VEVENT, or
+ *      VAVAILABILITY; and the difference between DUE and DTSTART in VTODO.
+ *      When both DURATION and DTEND are missing from VEVENT an implicit
+ *      duration is returned, based on the value-type of DTSTART. Otherwise
+ *      null-duration is returned.
  */
 LIBICAL_ICAL_EXPORT struct icaldurationtype 
icalcomponent_get_duration(icalcomponent *comp);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/src/libicalss/icalbdbset.c 
new/libical-3.0.13/src/libicalss/icalbdbset.c
--- old/libical-3.0.12/src/libicalss/icalbdbset.c       2021-12-09 
00:36:12.000000000 +0100
+++ new/libical-3.0.13/src/libicalss/icalbdbset.c       2022-01-17 
16:19:56.000000000 +0100
@@ -83,7 +83,11 @@
 
     flags = (u_int32_t) (DB_INIT_LOCK | DB_INIT_TXN | DB_CREATE | DB_THREAD |
                          DB_RECOVER | DB_INIT_LOG | DB_INIT_MPOOL);
+#if defined(_WIN32) //krazy:exclude=cpp
+    ret = ICAL_DB_ENV->open(ICAL_DB_ENV, db_env_dir, flags, 0 /*ignored on 
Windows*/);
+#else
     ret = ICAL_DB_ENV->open(ICAL_DB_ENV, db_env_dir, flags, S_IRUSR | S_IWUSR);
+#endif
 
     if (ret) {
         /*char *foo = db_strerror(ret); */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/src/test/regression-component.c 
new/libical-3.0.13/src/test/regression-component.c
--- old/libical-3.0.12/src/test/regression-component.c  2021-12-09 
00:36:12.000000000 +0100
+++ new/libical-3.0.13/src/test/regression-component.c  2022-01-17 
16:19:56.000000000 +0100
@@ -448,7 +448,7 @@
     if (VERBOSE)
         print_span(tnum++, span);
 
-    int_is("start == end", (int)span.start, span.end);
+    int_is("start == end", (int)span.start, (int)span.end);
     icalcomponent_free(c);
 
     /** test 7
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libical-3.0.12/src/test/regression.c 
new/libical-3.0.13/src/test/regression.c
--- old/libical-3.0.12/src/test/regression.c    2021-12-09 00:36:12.000000000 
+0100
+++ new/libical-3.0.13/src/test/regression.c    2022-01-17 16:19:56.000000000 
+0100
@@ -4772,6 +4772,66 @@
     ok("vCalendar-broken cannot be parsed", (vcal == NULL));
 }
 
+static void test_implicit_dtend_duration(void)
+{
+    const struct icaltimetype start1 = icaltime_from_string("20220108");
+    icalcomponent* c = icalcomponent_vanew(
+            ICAL_VCALENDAR_COMPONENT,
+            icalcomponent_vanew(
+                ICAL_VEVENT_COMPONENT,
+                icalproperty_vanew_dtstart(start1, 0),
+                0),
+            0);
+    struct icaldurationtype d = icalcomponent_get_duration(c);
+    struct icaltimetype end = icalcomponent_get_dtend(c),
+        start = icaltime_from_string("20220108T101010Z");
+    if (VERBOSE) {
+        printf("%s\n", icaldurationtype_as_ical_string(d));
+    }
+    str_is("icaldurationtype_as_ical_string(d)", "P1D", 
icaldurationtype_as_ical_string(d));
+
+    if (VERBOSE) {
+        printf("%s\n", icaltime_as_ical_string(end));
+    }
+    str_is("icaltime_as_ical_string(end)", "20220109", 
icaltime_as_ical_string(end));
+
+    icalcomponent_set_dtstart(c, start);
+    d = icalcomponent_get_duration(c);
+    end = icalcomponent_get_dtend(c);
+    if (VERBOSE) {
+        printf("%s\n", icaldurationtype_as_ical_string(d));
+    }
+    int_is("icaldurationtype_as_int(d)", 0, icaldurationtype_as_int(d));
+
+    if (VERBOSE) {
+        printf("%s\n", icaltime_as_ical_string(end));
+    }
+    int_is("icaltime_compare(start, end)", 0, icaltime_compare(start, end));
+    icalcomponent_free(c);
+
+
+    c = icalcomponent_vanew(
+            ICAL_VCALENDAR_COMPONENT,
+                icalcomponent_vanew(
+                    ICAL_VTODO_COMPONENT,
+                    icalproperty_vanew_dtstart(start1, 0),
+                    0),
+            0);
+    icalcomponent_set_due(c, icaltime_from_string("20220109"));
+    d = icalcomponent_get_duration(c);
+    end = icalcomponent_get_dtend(c);
+    if (VERBOSE) {
+        printf("%s\n", icaldurationtype_as_ical_string(d));
+    }
+    str_is("P1D", "P1D", icaldurationtype_as_ical_string(d));
+
+    if (VERBOSE) {
+        printf("%i\n", icaltime_is_null_time(end));
+    }
+    int_is("icaltime_is_null_time(end)", 1, icaltime_is_null_time(end));
+    icalcomponent_free(c);
+}
+
 int main(int argc, char *argv[])
 {
 #if !defined(HAVE_UNISTD_H)
@@ -4911,6 +4971,7 @@
     test_run("Test icalcomponent_normalize", test_icalcomponent_normalize, 
do_test, do_header);
     test_run("Test builtin compat TZID", test_builtin_compat_tzid, do_test, 
do_header);
     test_run("Test VCC vCard parse", test_vcc_vcard_parse, do_test, do_header);
+    test_run("Test implicit DTEND and DURATION for VEVENT and VTODO", 
test_implicit_dtend_duration, do_test, do_header);
 
     /** OPTIONAL TESTS go here... **/
 

Reply via email to