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... **/