Release Highlights
==================

Version 3.0.20 (10 March 2025):
-------------------------------
 * Clean up the byte-swapping macros
 * Fix a testcase in libical-glib when using 64-bit on a 32-bit system
 * Fix regression introduced in v3.0.19 ignoring non-empty REQUEST-STATUS extdata
 * Fix regression introduced in v3.0.19 error reporting for END before BEGIN
 * Fix a CMake problem in libical-glib

Version 3.0.19 (23 December 2024):
----------------------------------
 * Fix for changes to the libicu 75 API
 * Add vcpkg manifest-mode support
 * Improved berkeley-db discovery on Mac with homebrew
 * Improved libicu discrovery on Mac with homebrew
 * Properly set DYLD_LIBRARY_PATH on Mac for libical-ical tests
 * Resolved known limitation: Negative values are now also supported for `BYMONTHDAY` and `BYYEARDAY`.
 * Add support for RDATE;VALUE=PERIOD
 * Fix time conversion to time_t for times before epoch
 * Allow `icalcomponent_foreach_recurrence` to receive `DATE`-only `start` and `end` params.
 * Fix the calculation of an event's duration if `DTSTART` is a `DATE`-only value.
 * Fix `icaltime_span_new()` - ignore the case where DTEND is unset and require it to be set by the caller instead.
 * Various fixes for fuzzer issues

Version 3.0.18 (31 March 2024):
-------------------------------
 * Requires CMake v3.5.0 or higher
 * Escape ^ (U+005E) character in parameter values according to RFC 6868
 * New CMake option LIBICAL_BUILD_EXAMPLES to disable building the examples
 * Should be able to use the project as a submodule
 * Built-in timezones updated to tzdata2024a

Version 3.0.17 (14 October 2023):
---------------------------------
 * Improved Android support
 * Escape commas in x-property TEXT values
 * Built-in timezones updated to tzdata2023c
 * icalparser_ctrl setting defines how to handle invalid CONTROL characters during parsing
 * New publicly available functions:
     + get_zone_directory()
     + icalparser_get_ctrl
     + icalparser_set_ctrl

Version 3.0.16 (17 October 2022):
---------------------------------
 * Fix regressions in 3.0.15 due to improperly tested fuzz fixes
 * Fix argument guards in icaltime_as_timet to match documentation and tests

Version 3.0.15 (06 October 2022):
---------------------------------
 * Add missing property parameters into libical-glib
 * Fix CMake option USE_32BIT_TIME_T actually uses a 32-bit time_t value
 * Fix icaltime_as_timet, which returned incorrect results for years >= 2100,
   to work properly between years 1902 and 10k.
 * Fix x-property comma handling and escaping
 * Built-in timezones updated to tzdata2022d (now with a VTIMEZONE for each time zone alias)
 * Fix a fuzzer issue
 * Handle unreachable-code compile warnings with clang
 * Ensure all vanew_foo() calls finish with (void*)0 (not 0)

Version 3.0.14 (05 February 2022):
----------------------------------
 * icalvalue: Reset non-UTC icaltimetype::zone on set
 * Fix icalcomponent_set_due not removing TZID when necessary

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
 * METHOD:DECLINECOUNTER must have DTEND or DURATION
 * Handle if DTEND and DURATION are both missing
 * Improved FindICU (copied from official CMake.  see files in cmake/Kitware)
 * Buildsystem fixes (especially for the Ninja generator)
 * Built-in timezones updated to tzdata2021e

Version 3.0.11 (09 October 2021):
---------------------------------
 * Fix icalrecur_iterator_set_start() for hourly, minutely, and secondly recurrences
 * Fix build for Berkeley DB version greater than 5
 * Fix vcal for some architectures (like aarch64, ppc64le and s390x)
 * Fix memory leaks in vcal
 * Prevent crash when looking for tzid in initialize_rscale
 * Adjust libdir and includedir in generated pkgconfig files
 * Built-in timezones updated to tzdata2021c

Version 3.0.10 (17 April 2021):
-------------------------------
 * Fix building -DSTATIC_ONLY=True with Ninja
 * Fix generating wrong recurrence rules (#478)
 * Fix a bug computing transitions in tzfiles
 * Fix reading TZif files to use TZ string in the footer as the last (non-terminating) transitions
 * Fix reading TZif files to use more RRULEs and/or RDATEs whevever possible
 * Built-in timezones updated to tzdata2021a

Version 3.0.9 (16 January 2021):
--------------------------------
 * Add support for empty parameters, e.g. CN=""
 * Accept VTIMEZONE with more than one X- property
 * Several fixes for recurrences containing BYWEEKNO
 * icalrecurrencetype_from_string() will reject any RRULE that contains a rule-part that occurs more than once
 * Improve thread safety
 * Fix compiled-in path for the built-in timezone data
 * Fix reading TZif files with empty v1 data (use v2+ whenever possible)
 * Add backwards compatibility for previous TZIDs
 * Built-in timezones updated to tzdata2020d
 * Fix build with newer libicu
 * Fix cross-compile support in libical-glib

Version 3.0.8 (07 March 2020):
------------------------------
 * Fix for icalattach_new_from_data() and the 'free_fn' argument
 * Fix if recurrencetype contains both COUNT and UNTIL (only output UNTIL in the RRULE)

Version 3.0.7 (15 December 2019):
---------------------------------
 * libical-glib: Fix ICalAttach handling of the icalattach native structure
 * Let icalattach_new_from_data() use the 'free_fn' argument again
 * Fix memory leaks in attachment handling and elsewhere
 * Fix a multithreading race condition
 * More fuzzification fixes

Version 3.0.6 (14 Sep 2019):
----------------------------
 * Handle both COUNT and UNTIL in RRULEs
 * Fix RRULE BYDAY with INTERVAL=2 conflict
 * Various fuzzification fixes
 * New publicly available function:
     + icaltimezone_truncate_vtimezone()
 * Add option to disable building the test suite
 * Built-in timezones updated to tzdata2019c

Version 3.0.5 (14 May 2019):
----------------------------
 * New publicly available function:
     + icalproperty_get_datetime_with_component()
 * Allow reset DATE/DATE-TIME VALUE parameter for all-day events
 * icalproperty_get_datetime_with_component() will use location as TZID fallback.
 * New CMake option ENABLE_GTK_DOC for disabling the libical-glib developer documentation
 * GObject Introspection - use $MAJOR-0 versioning
 * libical-glib API is considered unstable, define LIBICAL_GLIB_UNSTABLE_API=1 before
   including <libical-glib/libical-glib.h> to be able to use it.
 * Built-in timezones updated to tzdata2019a
 * De-fuzzifications and Coverity fixes

Version 3.0.4 (14 Aug 2018):
----------------------------
 * Silently fail RSCALE recurrence clauses when RSCALE is disabled
 * Fixed icalcomponent_set_comment() and icalcomponent_set_uid()
 * fix FREQ=MONTHLY;BYMONTH
 * Skip UTF-8 marker when parsing
 * Fix parsing <CR>?<LF> in VCF files produced by Outlook
 * Fix TZID on DATE-TIME value can override time specified in UTC
 * CMake discovery module for ICU uses pkg-config now
 * New publicly available function:
     + icalparameter_kind_is_valid()
 * Built-in timezones updated to tzdata2018e

Version 3.0.3 (27 Feb 2018):
----------------------------
 * VTODO COMPLETED property can be a DATE-TIME or DATE (for backward compatibility)
 * Improved recurrence iteration

Version 3.0.2 (17 Feb 2018):
----------------------------
 * No longer attempt to detect the need for -DUSE_32BIT_TIME_T with MSVC
 * New CMake option ICAL_BUILD_DOCS which can be used to disable the docs target
 * Fix threading hang in BSD type systems (OpenBSD, MacOS,...)
 * Build with Ninja improvements

Version 3.0.1 (18 Nov 2017):
----------------------------
 * Built-in timezones updated to tzdata2017c
 * Fix a multi-threaded deadlock in icaltimezone_load_builtin_timezone()
 * Fix a CMake problem with parallel builds

Version 3.0.0 (28 Oct 2017):
----------------------------
 * Relicense from MPL 1.0 to MPL 2.0 (keep dual license for LGPL v2.1)
 * Requires CMake v3.1.0 or higher along with various CMake and buildsystem fixes
 * Added a 'make uninstall'
 * Fixed use-after-free issues and some memory leaks
 * Built-in timezones updated to tzdata2017b
 * More accurate VTIMEZONE generation when using the system time zone data (when USE_BUILTIN_TZDATA=False)
 * icalvalue_as_ical_string() returns "TRUE" (non-zero) or "FALSE" (zero) values only.
 * New icalvalue.h convenience macros: ICAL_BOOLEAN_TRUE and ICAL_BOOLEAN_FALSE
 * Better value type checking of property values when parsing
 * icalvalue_new/set_date and icalvalue_new/set_datetime now enforce DATE and DATE-TIME values respectively
 * draft-ietf-calext-extensions (RFC 7986) support added
 * Parameter values are now en/decoded per RFC 6868
 * Removed is_utc from icaltimetype struct
    * Set icaltimetype.zone to icaltimezone_get_utc_timezone() to change a time to UTC
    * Use icaltime_is_utc() to check if a time is in UTC
 * Added support for VPATCH component
 * New publicly available functions:
     + icalproperty_set_parent (icalproperty_get_parent was already public)
     + icalvalue_get_parent (icalvalue_set_parent was already public)
     + icalparameter_set_parent
     + icalparameter_get_parent
     + icalvalue_new_datetimedate (DATE or DATE-TIME)
     + icalvalue_set_datetimedate
     + icalvalue_get_datetimedate
     + icalrecur_iterator_set_start
     + icalcomponent_normalize()
     + icalproperty_normalize()
 * Removed deprecated functions:
    + icaltime_from_timet (use icaltime_from_timet_with_zone)
    + icaltime_start_day_of_week (use icaltime_start_day_week)
    + icalproperty_remove_parameter (use icalproperty_remove_parameter_by_kind)
    + icalproperty_string_to_enum (use icalproperty_kind_and_string_to_enum)
 * Signature changed for functions:
    + VObject *Parse_MIME_FromFileName(const char *fname)
    + icalgauge *icalgauge_new_from_sql(const char *sql, int expand)
    + const char *icallangbind_property_eval_string(icalproperty *prop, const char *sep)
    + const char *icallangbind_property_eval_string_r(icalproperty *prop, const char *sep)
    + void set_zone_directory(const char *path)
    + icalcalendar *icalcalendar_new(const char *dir)
    + int icalrecur_expand_recurrence(const char *rule, time_t start, int count, time_t *array)

Version 2.0.0 (28 Dec 2015):
----------------------------
 * WARNING: Version 2 IS NOT Binary Compatible with Older Versions
 * Version 2 is Source Compatible with Older Versions
 * Lots of source code scrubbing
 * [New] RSCALE support (requires libicu from http://www.icu-project.org)
 * [New] CalDAV attachment support (draft-ietf-calext-caldav-attachments)
 * [New] Resurrect the Berkeley DB storage support
 * [Bug] issue83: Incorrect recurrence generation for weekly pattern
 * Handle RRULEs better
 * Handle threading better

Version 1.0.1 (11 Oct 2014):
----------------------------
 * [Bug] issue74: Do not escape double quote character
 * [Bug] issue80,issue92: fix crashes using icaltimezone_load_builtin_timezone() recursively
 * [Bug] Fix icalcomponent_foreach_recurrence() and large durations between recurrences (e.g. FREQ=YEARLY)
 * [Bug] Properly handle UTCOFFSETs of the form +/-00mmss
 * [Bug] Properly skip bogus dates (e.g. 2/30, 4/31) in RRULE:FREQ=MONTHLY
 * [Bug] Properly handle RRULE:FREQ=MONTHLY;BYDAY;BYMONTHDAY when DTSTART isn't on BYDAY
 * [Bug] Fix RRULE:FREQ=YEARLY;BYDAY;BYWEEKNO - MUST use ISO weeks
 * [Bug] Properly skip bogus dates (e.g. 2/29) in RRULE:FREQ=YEARLY[;BYMONTH][;BYMONTHDAY]

 * [New] Update tzdata to version 2014g
 * [New] Support added for schedule params: agent, status, force-send
 * [New] Added a UID to the VFREEBUSY component
 * [New] Allow dates > 2038 if sizeof(time_t) > 4
 * [New] Add properties from draft-ietf-tzdist-service
 * [New] Add support for RRULE:FREQ=YEARLY;BYDAY;BYYEARDAY and fixed RRULE:FREQ=YEARLY;BYYEARDAY with negative days

 * [Build] Autotools build system is removed
 * [Build] CMake version 2.8.9 (or higher) is required (was CMake version 2.4.0)
 * [Build] Add new -DSHARED_ONLY and -DSTATIC_ONLY CMake options
 * [Build] Remove -DSTATIC_LIBRARY CMake option
 * [Build] MSYS2 builds (fixed instructions)
 * [Build/Doc] Now can build api documentation with make docs

 * [Quality] More regression tests added, in particular for recurrence
 * [Quality] Almost all compile warnings silenced
 * [Quality] A bunch of Coverity Scan warnings silenced

Version 1.0.0 (28 Jun 2014):
----------------------------
 * Reborn
