From 8af29ffa5c5a228c519efbe08762ab59172fc76a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 21 Aug 2021 11:44:52 -0400 Subject: CMakeLists.txt - fix builds against BerkeleyDB v6 and higher issue#505 --- ReleaseNotes.txt | 1 + src/libicalss/icalbdbset.c | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 74e09c2c..c09f17ed 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -4,6 +4,7 @@ Release Highlights Version 3.0.11 (UNRELEASED): ---------------------------- * Fix icalrecur_iterator_set_start() for hourly, minutely, and secondly recurrences + * Fix build for Berkeley DB version greater than 5 Version 3.0.10 (17 April 2021): ------------------------------- diff --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index eff5492f..b7c7ff7b 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -32,7 +32,11 @@ #define MAX_RETRY 5 static int _compare_ids(const char *compid, const char *matchid); +#if DB_VERSION_MAJOR > 5 +static int _compare_keys(DB *dbp, const DBT *a, const DBT *b, size_t *locp); +#else static int _compare_keys(DB *dbp, const DBT *a, const DBT *b); +#endif /** Default options used when NULL is passed to icalset_new() **/ static icalbdbset_options icalbdbset_options_default = @@ -1598,7 +1602,11 @@ int icalbdbset_commit_transaction(DB_TXN *txnid) return txnid->commit(txnid, 0); } +#if DB_VERSION_MAJOR > 5 +static int _compare_keys(DB *dbp, const DBT *a, const DBT *b, size_t *locp) +#else static int _compare_keys(DB *dbp, const DBT *a, const DBT *b) +#endif { /* * Returns: @@ -1611,5 +1619,8 @@ static int _compare_keys(DB *dbp, const DBT *a, const DBT *b) char *bc = (char *)b->data; _unused(dbp); +#if DB_VERSION_MAJOR > 5 + _unused(locp); +#endif return strncmp(ac, bc, a->size); } -- cgit v1.2.1 From 48c2012eeb67f805ebadabcd877144caa07e1f9e Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 21 Aug 2021 15:46:25 -0400 Subject: libicalss/icalbdbset.c - more fix builds against BerkeleyDB v6 --- src/libicalss/icalbdbset.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index b7c7ff7b..f06b38e7 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -31,6 +31,10 @@ #define MAX_RETRY 5 +#if !defined(DB_VERSION_MAJOR) +#define DB_VERSION_MAJOR 1 //assume ancient version +#endif + static int _compare_ids(const char *compid, const char *matchid); #if DB_VERSION_MAJOR > 5 static int _compare_keys(DB *dbp, const DBT *a, const DBT *b, size_t *locp); @@ -1620,7 +1624,7 @@ static int _compare_keys(DB *dbp, const DBT *a, const DBT *b) _unused(dbp); #if DB_VERSION_MAJOR > 5 - _unused(locp); + locp = NULL; #endif return strncmp(ac, bc, a->size); } -- cgit v1.2.1 From 15cf1ddf5331f828adc59ac74be83c7b119f5542 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 21 Aug 2021 15:46:25 -0400 Subject: libicalss/icalbdbset.c - more fix builds against BerkeleyDB v6 --- src/libicalss/icalbdbset.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index 1f51a1ff..81c6e21f 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -31,6 +31,10 @@ #define MAX_RETRY 5 +#if !defined(DB_VERSION_MAJOR) +#define DB_VERSION_MAJOR 1 //assume ancient version +#endif + static int _compare_ids(const char *compid, const char *matchid); #if DB_VERSION_MAJOR > 5 static int _compare_keys(DB *dbp, const DBT *a, const DBT *b, size_t *locp); @@ -1620,7 +1624,7 @@ static int _compare_keys(DB *dbp, const DBT *a, const DBT *b) _unused(dbp); #if DB_VERSION_MAJOR > 5 - _unused(locp); + locp = NULL; #endif return strncmp(ac, bc, a->size); } -- cgit v1.2.1 From a0f8a6bc57b68d4e77f3728e95468e558e771164 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 14 Aug 2021 18:32:32 -0400 Subject: src/libical/icaltimezone.c - cppcheck suppression --- src/libical/icaltimezone.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index e3b4342d..1826d2d0 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -1412,6 +1412,7 @@ static struct icaltimetype tm_to_icaltimetype(struct tm *tm) memset(&itt, 0, sizeof(struct icaltimetype)); + /* cppcheck-suppress ctuuninitvar */ itt.second = tm->tm_sec; itt.minute = tm->tm_min; itt.hour = tm->tm_hour; -- cgit v1.2.1 From 7a5f8ccf29967d314fb0aa70ffb03a267151287a Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 9 Sep 2021 13:52:11 +0200 Subject: libicalvcal: Free memory allocated for parsing Covers specially the error case, when in-the-middle of the parse could left some objects on the stack. --- src/libicalvcal/vcc.c | 9 ++++++++- src/libicalvcal/vcc.y | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 5740a2de..44068d16 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -850,6 +850,10 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { + VObject* vobj; + while(vobj = popVObject(), vobj) { + cleanVObject(vobj); + } free(lexBuf.strs); } @@ -1161,9 +1165,12 @@ static VObject* Parse_MIMEHelper() mime_lineNum = 1; vObjList = 0; curObj = 0; + curProp = 0; - if (yyparse() != 0) + if (yyparse() != 0) { + finiLex(); return 0; + } finiLex(); return vObjList; diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index a16b4144..3280a035 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -816,6 +816,10 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { + VObject* vobj; + while(vobj = popVObject(), vobj) { + cleanVObject(vobj); + } free(lexBuf.strs); } @@ -1127,9 +1131,12 @@ static VObject* Parse_MIMEHelper() mime_lineNum = 1; vObjList = 0; curObj = 0; + curProp = 0; - if (yyparse() != 0) + if (yyparse() != 0) { + finiLex(); return 0; + } finiLex(); return vObjList; -- cgit v1.2.1 From ab7d0531edd28123d50de1ba2cf43fa1262855cb Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 9 Sep 2021 13:54:12 +0200 Subject: test: Free VObject in the test_vcal() regression test To avoid memory leak. --- src/test/regression.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/regression.c b/src/test/regression.c index 8faf2713..12794413 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4072,6 +4072,8 @@ void test_vcal(void) if (comp) { icalcomponent_free(comp); } + + cleanVObject(vcal); } } -- cgit v1.2.1 From 9e5a5edb2f3ccfc606c9549b87d805c31fef2719 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 2 Sep 2021 17:42:39 +0200 Subject: libicalvcal: Cast EOF to 'char' to ensure matching its value against it Some arches (like aarch64, ppc64le and s390x) may not match the EOF constant against its value cast to 'char'. That breaks the parser and can cause an indefinite read of the content, with growing memory use. --- src/libicalvcal/vcc.c | 20 ++++++------ src/libicalvcal/vcc.y | 20 ++++++------ src/test/regression.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 20 deletions(-) diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 44068d16..3eb80d2c 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -607,7 +607,7 @@ static int lexGeta_(int i) } static void lexSkipLookahead() { - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* don't skip EOF. */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -642,7 +642,7 @@ static int lexLookahead() { static int lexGetc() { int c = lexLookahead(); - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* EOF will remain in lookahead buffer */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -692,7 +692,7 @@ static char* lexGetWord() { lexSkipWhite(); lexClearToken(); c = lexLookahead(); - while (c != EOF && !strchr("\t\n ;:=",c)) { + while (c != ((char) EOF) && !strchr("\t\n ;:=",c)) { lexAppendc(c); lexSkipLookahead(); c = lexLookahead(); @@ -704,7 +704,7 @@ static char* lexGetWord() { static void lexPushLookaheadc(int c) { int putptr; /* can't putback EOF, because it never leaves lookahead buffer */ - if (c == EOF) return; + if (((char) c) == ((char) EOF)) return; putptr = (int)lexBuf.getPtr - 1; if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; lexBuf.getPtr = (unsigned long)putptr; @@ -726,7 +726,7 @@ static char* lexLookaheadWord() { while (len < (MAX_LEX_LOOKAHEAD_0)) { c = lexGetc(); len++; - if (c == EOF || strchr("\t\n ;:=", c)) { + if (c == ((char) EOF) || strchr("\t\n ;:=", c)) { lexAppendc(0); /* restore lookahead buf. */ lexBuf.len += len; @@ -783,7 +783,7 @@ static char* lexGet1Value() { lexSkipWhite(); c = lexLookahead(); lexClearToken(); - while (c != EOF && c != ';') { + while (c != ((char) EOF) && c != ';') { if (c == '\n') { int a; lexSkipLookahead(); @@ -805,7 +805,7 @@ static char* lexGet1Value() { } lexAppendc(0); handleMoreRFC822LineBreak(c); - return c==EOF?0:lexStr(); + return c==((char) EOF)?0:lexStr(); } #endif @@ -903,9 +903,9 @@ static char * lexGetDataFromBase64() else if (oldBytes) free(oldBytes); /* error recovery: skip until 2 adjacent newlines. */ DBG_(("db: invalid character 0x%x '%c'\n", c,c)); - if (c != EOF) { + if (c != ((char) EOF)) { c = lexGetc(); - while (c != EOF) { + while (c != ((char) EOF)) { if (c == '\n' && lexLookahead() == '\n') { ++mime_lineNum; break; @@ -1123,7 +1123,7 @@ int yylex() { ++mime_lineNum; continue; } - case EOF: return 0; + case ((char) EOF): return 0; break; default: { lexPushLookaheadc(c); diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index 3280a035..834f6b98 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -573,7 +573,7 @@ static int lexGeta_(int i) } static void lexSkipLookahead() { - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* don't skip EOF. */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -608,7 +608,7 @@ static int lexLookahead() { static int lexGetc() { int c = lexLookahead(); - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* EOF will remain in lookahead buffer */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -658,7 +658,7 @@ static char* lexGetWord() { lexSkipWhite(); lexClearToken(); c = lexLookahead(); - while (c != EOF && !strchr("\t\n ;:=",c)) { + while (c != ((char) EOF) && !strchr("\t\n ;:=",c)) { lexAppendc(c); lexSkipLookahead(); c = lexLookahead(); @@ -670,7 +670,7 @@ static char* lexGetWord() { static void lexPushLookaheadc(int c) { int putptr; /* can't putback EOF, because it never leaves lookahead buffer */ - if (c == EOF) return; + if (((char) c) == ((char) EOF)) return; putptr = (int)lexBuf.getPtr - 1; if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; lexBuf.getPtr = putptr; @@ -692,7 +692,7 @@ static char* lexLookaheadWord() { while (len < (MAX_LEX_LOOKAHEAD_0)) { c = lexGetc(); len++; - if (c == EOF || strchr("\t\n ;:=", c)) { + if (c == ((char) EOF) || strchr("\t\n ;:=", c)) { lexAppendc(0); /* restore lookahead buf. */ lexBuf.len += len; @@ -749,7 +749,7 @@ static char* lexGet1Value() { lexSkipWhite(); c = lexLookahead(); lexClearToken(); - while (c != EOF && c != ';') { + while (c != ((char) EOF) && c != ';') { if (c == '\n') { int a; lexSkipLookahead(); @@ -771,7 +771,7 @@ static char* lexGet1Value() { } lexAppendc(0); handleMoreRFC822LineBreak(c); - return c==EOF?0:lexStr(); + return c==((char) EOF)?0:lexStr(); } #endif @@ -869,9 +869,9 @@ static char * lexGetDataFromBase64() else if (oldBytes) free(oldBytes); /* error recovery: skip until 2 adjacent newlines. */ DBG_(("db: invalid character 0x%x '%c'\n", c,c)); - if (c != EOF) { + if (c != ((char) EOF)) { c = lexGetc(); - while (c != EOF) { + while (c != ((char) EOF)) { if (c == '\n' && lexLookahead() == '\n') { ++mime_lineNum; break; @@ -1089,7 +1089,7 @@ int yylex() { ++mime_lineNum; continue; } - case EOF: return 0; + case ((char) EOF): return 0; break; default: { lexPushLookaheadc(c); diff --git a/src/test/regression.c b/src/test/regression.c index 12794413..8b9c6392 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4642,6 +4642,90 @@ static void test_builtin_compat_tzid (void) icaltimezone_free_builtin_timezones(); } +static void test_vcc_vcard_parse (void) +{ + /* Two VCARD-s, because some arches can parse the first and some the second. */ + const char *vcard1 = + "BEGIN:VCARD\r\n" + "VERSION:3.0\r\n" + "NOTE:\r\n" + "FN:Xxxx\r\n" + "N:;Xxxx;;;\r\n" + "END:VCARD"; + const char *vcard2 = + "BEGIN:VCARD\r\n" + "VERSION:3.0\r\n" + "X-XXX-ORIGINAL-VCARD:\r\n" + "X-XXX-KIND:XX_XXXXXXXX\r\n" + "NOTE:\r\n" + "X-XXXXXXXXX-FILE-AS:Xxxxxx\r\n" + "FN:Xxxxxx\r\n" + "N:;Xxxxxx;;;\r\n" + "X-XXX-XXXXXXXXX:\r\n" + "END:VCARD"; + const char *vcalendar = + "BEGIN:VCALENDAR\r\n" + "BEGIN:VEVENT\r\n" + "UID:123\r\n" + "SUMMARY:Summary\r\n" + "DTSTAMP:20210803T063522Z\r\n" + "DTSTART;VALUE=DATE:20210902\r\n" + "END:VEVENT\r\n" + "END:VCALENDAR\r\n"; + VObject *vcal; + + vcal = Parse_MIME(vcard1, strlen(vcard1)); + if(vcal) { + icalcomponent *icalcomp; + + icalcomp = icalvcal_convert (vcal); + ok("vCard1 is not iCalendar", (icalcomp == NULL)); + if(icalcomp) + icalcomponent_free (icalcomp); + + cleanVObject (vcal); + } else { + ok("vCard1 cannot be parsed", (vcal == NULL)); + } + + vcal = Parse_MIME(vcard2, strlen(vcard2)); + if(vcal) { + icalcomponent *icalcomp; + + icalcomp = icalvcal_convert (vcal); + ok("vCard2 is not iCalendar", (icalcomp == NULL)); + if(icalcomp) + icalcomponent_free (icalcomp); + + cleanVObject (vcal); + } else { + ok("vCard2 cannot be parsed", (vcal == NULL)); + } + + vcal = Parse_MIME(vcalendar, strlen(vcalendar)); + ok("vCalendar can be parsed", (vcal != NULL)); + if(vcal) { + icalcomponent *icalcomp; + + icalcomp = icalvcal_convert (vcal); + ok("vCalendar can be converted", (icalcomp != NULL)); + if(icalcomp) { + icalcomponent *child; + + ok("vCalendar is VCALENDAR", (icalcomponent_isa(icalcomp) == ICAL_VCALENDAR_COMPONENT)); + ok("vCalendar has one child", (icalcomponent_count_components(icalcomp, ICAL_ANY_COMPONENT) == 1)); + child = icalcomponent_get_inner(icalcomp); + ok("vCalendar has inner comp", (child != NULL && child != icalcomp)); + ok("vCalendar child is VEVENT", (icalcomponent_isa(child) == ICAL_VEVENT_COMPONENT)); + ok("vCalendar child UID matches", (strcmp(icalcomponent_get_uid(child), "123") == 0)); + ok("vCalendar child SUMMARY matches", (strcmp(icalcomponent_get_summary(child), "Summary") == 0)); + icalcomponent_free (icalcomp); + } + + cleanVObject (vcal); + } +} + int main(int argc, char *argv[]) { #if !defined(HAVE_UNISTD_H) @@ -4780,6 +4864,7 @@ int main(int argc, char *argv[]) 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); /** OPTIONAL TESTS go here... **/ -- cgit v1.2.1 From a05b2d39497d00b37ee9d3f2a7bdcc5b5100fb6e Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 18 Sep 2021 15:17:23 -0400 Subject: ReleaseNotes.txt - mention recent vcal fixes --- ReleaseNotes.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index c09f17ed..ab492602 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -5,6 +5,8 @@ Version 3.0.11 (UNRELEASED): ---------------------------- * 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 Version 3.0.10 (17 April 2021): ------------------------------- -- cgit v1.2.1 From ae63f5c7fd18fa3b247c84c37c9644b683b68389 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 9 Sep 2021 13:52:11 +0200 Subject: libicalvcal: Free memory allocated for parsing Covers specially the error case, when in-the-middle of the parse could left some objects on the stack. --- src/libicalvcal/vcc.c | 9 ++++++++- src/libicalvcal/vcc.y | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 6fe0a55e..00eb97ff 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -987,6 +987,10 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { + VObject* vobj; + while(vobj = popVObject(), vobj) { + cleanVObject(vobj); + } free(lexBuf.strs); } @@ -1298,9 +1302,12 @@ static VObject* Parse_MIMEHelper() mime_lineNum = 1; vObjList = 0; curObj = 0; + curProp = 0; - if (yyparse() != 0) + if (yyparse() != 0) { + finiLex(); return 0; + } finiLex(); return vObjList; diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index 97c50ec7..030ca442 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -815,6 +815,10 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { + VObject* vobj; + while(vobj = popVObject(), vobj) { + cleanVObject(vobj); + } free(lexBuf.strs); } @@ -1126,9 +1130,12 @@ static VObject* Parse_MIMEHelper() mime_lineNum = 1; vObjList = 0; curObj = 0; + curProp = 0; - if (yyparse() != 0) + if (yyparse() != 0) { + finiLex(); return 0; + } finiLex(); return vObjList; -- cgit v1.2.1 From ecd309ba51c5aa7bc77e6b4220d0047d465337a4 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 9 Sep 2021 13:54:12 +0200 Subject: test: Free VObject in the test_vcal() regression test To avoid memory leak. --- src/test/regression.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/regression.c b/src/test/regression.c index 2b94dc1c..165f9b20 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4252,6 +4252,8 @@ void test_vcal(void) if (comp) { icalcomponent_free(comp); } + + cleanVObject(vcal); } } -- cgit v1.2.1 From 57a4f675b2d31bb49d102beaaa778ee832f9e90e Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 2 Sep 2021 17:42:39 +0200 Subject: libicalvcal: Cast EOF to 'char' to ensure matching its value against it Some arches (like aarch64, ppc64le and s390x) may not match the EOF constant against its value cast to 'char'. That breaks the parser and can cause an indefinite read of the content, with growing memory use. --- src/libicalvcal/vcc.c | 20 ++++++------ src/libicalvcal/vcc.y | 20 ++++++------ src/test/regression.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 20 deletions(-) diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 00eb97ff..e5795867 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -744,7 +744,7 @@ static int lexGeta_(int i) } static void lexSkipLookahead() { - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* don't skip EOF. */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -779,7 +779,7 @@ static int lexLookahead() { static int lexGetc() { int c = lexLookahead(); - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* EOF will remain in lookahead buffer */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -829,7 +829,7 @@ static char* lexGetWord() { lexSkipWhite(); lexClearToken(); c = lexLookahead(); - while (c != EOF && !strchr("\t\n ;:=",c)) { + while (c != ((char) EOF) && !strchr("\t\n ;:=",c)) { lexAppendc(c); lexSkipLookahead(); c = lexLookahead(); @@ -841,7 +841,7 @@ static char* lexGetWord() { static void lexPushLookaheadc(int c) { int putptr; /* can't putback EOF, because it never leaves lookahead buffer */ - if (c == EOF) return; + if (((char) c) == ((char) EOF)) return; putptr = (int)lexBuf.getPtr - 1; if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; lexBuf.getPtr = (unsigned long)putptr; @@ -863,7 +863,7 @@ static char* lexLookaheadWord() { while (len < (MAX_LEX_LOOKAHEAD_0)) { c = lexGetc(); len++; - if (c == EOF || strchr("\t\n ;:=", c)) { + if (c == ((char) EOF) || strchr("\t\n ;:=", c)) { lexAppendc(0); /* restore lookahead buf. */ lexBuf.len += len; @@ -920,7 +920,7 @@ static char* lexGet1Value() { lexSkipWhite(); c = lexLookahead(); lexClearToken(); - while (c != EOF && c != ';') { + while (c != ((char) EOF) && c != ';') { if (c == '\n') { int a; lexSkipLookahead(); @@ -942,7 +942,7 @@ static char* lexGet1Value() { } lexAppendc(0); handleMoreRFC822LineBreak(c); - return c==EOF?0:lexStr(); + return c==((char) EOF)?0:lexStr(); } #endif @@ -1040,9 +1040,9 @@ static char * lexGetDataFromBase64() else if (oldBytes) free(oldBytes); /* error recovery: skip until 2 adjacent newlines. */ DBG_(("db: invalid character 0x%x '%c'\n", c,c)); - if (c != EOF) { + if (c != ((char) EOF)) { c = lexGetc(); - while (c != EOF) { + while (c != ((char) EOF)) { if (c == '\n' && lexLookahead() == '\n') { ++mime_lineNum; break; @@ -1260,7 +1260,7 @@ int yylex() { ++mime_lineNum; continue; } - case EOF: return 0; + case ((char) EOF): return 0; break; default: { lexPushLookaheadc(c); diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index 030ca442..73f87632 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -572,7 +572,7 @@ static int lexGeta_(int i) } static void lexSkipLookahead() { - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* don't skip EOF. */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -607,7 +607,7 @@ static int lexLookahead() { static int lexGetc() { int c = lexLookahead(); - if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=EOF) { + if (lexBuf.len > 0 && lexBuf.buf[lexBuf.getPtr]!=((char) EOF)) { /* EOF will remain in lookahead buffer */ lexBuf.getPtr = (lexBuf.getPtr + 1) % MAX_LEX_LOOKAHEAD; lexBuf.len--; @@ -657,7 +657,7 @@ static char* lexGetWord() { lexSkipWhite(); lexClearToken(); c = lexLookahead(); - while (c != EOF && !strchr("\t\n ;:=",c)) { + while (c != ((char) EOF) && !strchr("\t\n ;:=",c)) { lexAppendc(c); lexSkipLookahead(); c = lexLookahead(); @@ -669,7 +669,7 @@ static char* lexGetWord() { static void lexPushLookaheadc(int c) { int putptr; /* can't putback EOF, because it never leaves lookahead buffer */ - if (c == EOF) return; + if (((char) c) == ((char) EOF)) return; putptr = (int)lexBuf.getPtr - 1; if (putptr < 0) putptr += MAX_LEX_LOOKAHEAD; lexBuf.getPtr = (unsigned long)putptr; @@ -691,7 +691,7 @@ static char* lexLookaheadWord() { while (len < (MAX_LEX_LOOKAHEAD_0)) { c = lexGetc(); len++; - if (c == EOF || strchr("\t\n ;:=", c)) { + if (c == ((char) EOF) || strchr("\t\n ;:=", c)) { lexAppendc(0); /* restore lookahead buf. */ lexBuf.len += len; @@ -748,7 +748,7 @@ static char* lexGet1Value() { lexSkipWhite(); c = lexLookahead(); lexClearToken(); - while (c != EOF && c != ';') { + while (c != ((char) EOF) && c != ';') { if (c == '\n') { int a; lexSkipLookahead(); @@ -770,7 +770,7 @@ static char* lexGet1Value() { } lexAppendc(0); handleMoreRFC822LineBreak(c); - return c==EOF?0:lexStr(); + return c==((char) EOF)?0:lexStr(); } #endif @@ -868,9 +868,9 @@ static char * lexGetDataFromBase64() else if (oldBytes) free(oldBytes); /* error recovery: skip until 2 adjacent newlines. */ DBG_(("db: invalid character 0x%x '%c'\n", c,c)); - if (c != EOF) { + if (c != ((char) EOF)) { c = lexGetc(); - while (c != EOF) { + while (c != ((char) EOF)) { if (c == '\n' && lexLookahead() == '\n') { ++mime_lineNum; break; @@ -1088,7 +1088,7 @@ int yylex() { ++mime_lineNum; continue; } - case EOF: return 0; + case ((char) EOF): return 0; break; default: { lexPushLookaheadc(c); diff --git a/src/test/regression.c b/src/test/regression.c index 165f9b20..e0de9e9e 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4879,6 +4879,90 @@ static void test_builtin_compat_tzid (void) icaltimezone_free_builtin_timezones(); } +static void test_vcc_vcard_parse (void) +{ + /* Two VCARD-s, because some arches can parse the first and some the second. */ + const char *vcard1 = + "BEGIN:VCARD\r\n" + "VERSION:3.0\r\n" + "NOTE:\r\n" + "FN:Xxxx\r\n" + "N:;Xxxx;;;\r\n" + "END:VCARD"; + const char *vcard2 = + "BEGIN:VCARD\r\n" + "VERSION:3.0\r\n" + "X-XXX-ORIGINAL-VCARD:\r\n" + "X-XXX-KIND:XX_XXXXXXXX\r\n" + "NOTE:\r\n" + "X-XXXXXXXXX-FILE-AS:Xxxxxx\r\n" + "FN:Xxxxxx\r\n" + "N:;Xxxxxx;;;\r\n" + "X-XXX-XXXXXXXXX:\r\n" + "END:VCARD"; + const char *vcalendar = + "BEGIN:VCALENDAR\r\n" + "BEGIN:VEVENT\r\n" + "UID:123\r\n" + "SUMMARY:Summary\r\n" + "DTSTAMP:20210803T063522Z\r\n" + "DTSTART;VALUE=DATE:20210902\r\n" + "END:VEVENT\r\n" + "END:VCALENDAR\r\n"; + VObject *vcal; + + vcal = Parse_MIME(vcard1, strlen(vcard1)); + if(vcal) { + icalcomponent *icalcomp; + + icalcomp = icalvcal_convert (vcal); + ok("vCard1 is not iCalendar", (icalcomp == NULL)); + if(icalcomp) + icalcomponent_free (icalcomp); + + cleanVObject (vcal); + } else { + ok("vCard1 cannot be parsed", (vcal == NULL)); + } + + vcal = Parse_MIME(vcard2, strlen(vcard2)); + if(vcal) { + icalcomponent *icalcomp; + + icalcomp = icalvcal_convert (vcal); + ok("vCard2 is not iCalendar", (icalcomp == NULL)); + if(icalcomp) + icalcomponent_free (icalcomp); + + cleanVObject (vcal); + } else { + ok("vCard2 cannot be parsed", (vcal == NULL)); + } + + vcal = Parse_MIME(vcalendar, strlen(vcalendar)); + ok("vCalendar can be parsed", (vcal != NULL)); + if(vcal) { + icalcomponent *icalcomp; + + icalcomp = icalvcal_convert (vcal); + ok("vCalendar can be converted", (icalcomp != NULL)); + if(icalcomp) { + icalcomponent *child; + + ok("vCalendar is VCALENDAR", (icalcomponent_isa(icalcomp) == ICAL_VCALENDAR_COMPONENT)); + ok("vCalendar has one child", (icalcomponent_count_components(icalcomp, ICAL_ANY_COMPONENT) == 1)); + child = icalcomponent_get_inner(icalcomp); + ok("vCalendar has inner comp", (child != NULL && child != icalcomp)); + ok("vCalendar child is VEVENT", (icalcomponent_isa(child) == ICAL_VEVENT_COMPONENT)); + ok("vCalendar child UID matches", (strcmp(icalcomponent_get_uid(child), "123") == 0)); + ok("vCalendar child SUMMARY matches", (strcmp(icalcomponent_get_summary(child), "Summary") == 0)); + icalcomponent_free (icalcomp); + } + + cleanVObject (vcal); + } +} + int main(int argc, char *argv[]) { #if !defined(HAVE_UNISTD_H) @@ -5023,6 +5107,7 @@ int main(int argc, char *argv[]) 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); /** OPTIONAL TESTS go here... **/ -- cgit v1.2.1 From 4c1b4ae08a5a826236e6bcb6ac5cf1a91747f622 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 18 Sep 2021 15:17:23 -0400 Subject: ReleaseNotes.txt - mention recent vcal fixes --- ReleaseNotes.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 7a0469f5..72707486 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -44,6 +44,8 @@ Version 3.0.11 (UNRELEASED): ---------------------------- * 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 Version 3.0.10 (17 April 2021): ------------------------------- -- cgit v1.2.1 From 9e449322c77fa4a859b937f8d5e0380a92865dce Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 20 Sep 2021 05:35:15 -0400 Subject: scripts/buildtests.sh - comment strict CMake warnings there's a lot of work todo first. many uninit warnings especially in glib and introspection --- scripts/buildtests.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 7ec7aa03..bacfae78 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -139,7 +139,9 @@ CONFIGURE() { mkdir -p $BDIR cd $BDIR rm -rf * - cmake --warn-uninitialized -Werror=dev .. $2 || exit 1 + #lots of work needed to eliminate uninit vars + #cmake --warn-uninitialized -Werror=dev .. $2 || exit 1 + cmake .. $2 || exit 1 } #function CLEAN: -- cgit v1.2.1 From 282a3bcb4c5e97e1faf12684d1a984e2319ad865 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 22 Sep 2021 09:14:21 -0400 Subject: icalrecur.c: look harder for tzid and protect against not finding it --- src/libical/icalrecur.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index dd129bf3..d0f03777 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -1451,9 +1451,18 @@ static int initialize_rscale(icalrecur_iterator *impl) UChar *tzid = (UChar *) UCAL_UNKNOWN_ZONE_ID; short is_hebrew = 0; - if (dtstart.zone) { - /* Convert the UTF8 timezoneid of dstart to ICU UChar. */ - const char *src = icaltimezone_get_tzid((icaltimezone *) dtstart.zone); + /* Convert the UTF8 timezoneid of dstart to ICU UChar. */ + const char *src = icaltimezone_get_location((icaltimezone *) dtstart.zone); + if (!src) { + const char *prefix = icaltimezone_tzid_prefix(); + + src = icaltimezone_get_tzid((icaltimezone *) dtstart.zone); + if (src && !strncmp(src, prefix, strlen(prefix))) { + /* Skip past our prefix */ + src += strlen(prefix); + } + } + if (src) { size_t len = (strlen(src) + 1) * U_SIZEOF_UCHAR; tzid = icalmemory_tmp_buffer(len); tzid = u_strFromUTF8Lenient(tzid, (int32_t)len, NULL, src, -1, &status); -- cgit v1.2.1 From 2d2c44a58f93c47d8d4fa3e9b1d95a492ef70c6e Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 22 Sep 2021 09:14:21 -0400 Subject: icalrecur.c: look harder for tzid and protect against not finding it --- src/libical/icalrecur.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index 10d6125b..522fe28d 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -1471,9 +1471,18 @@ static int initialize_rscale(icalrecur_iterator *impl) UChar *tzid = (UChar *) UCAL_UNKNOWN_ZONE_ID; short is_hebrew = 0; - if (dtstart.zone) { - /* Convert the UTF8 timezoneid of dstart to ICU UChar. */ - const char *src = icaltimezone_get_tzid((icaltimezone *) dtstart.zone); + /* Convert the UTF8 timezoneid of dstart to ICU UChar. */ + const char *src = icaltimezone_get_location((icaltimezone *) dtstart.zone); + if (!src) { + const char *prefix = icaltimezone_tzid_prefix(); + + src = icaltimezone_get_tzid((icaltimezone *) dtstart.zone); + if (src && !strncmp(src, prefix, strlen(prefix))) { + /* Skip past our prefix */ + src += strlen(prefix); + } + } + if (src) { size_t len = (strlen(src) + 1) * U_SIZEOF_UCHAR; tzid = icalmemory_tmp_buffer(len); tzid = u_strFromUTF8Lenient(tzid, (int32_t)len, NULL, src, -1, &status); -- cgit v1.2.1 From 786b8066ab66e8bbceea0bacbe352fdcc49bb824 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 22 Sep 2021 12:32:54 -0400 Subject: ReleaseNotes.txt - update --- ReleaseNotes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index ab492602..b43c7761 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -7,6 +7,7 @@ Version 3.0.11 (UNRELEASED): * 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 Version 3.0.10 (17 April 2021): ------------------------------- -- cgit v1.2.1 From e840bbb08cc651a44044a8abc36935ca9d7a4fd4 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 26 Sep 2021 13:01:12 -0400 Subject: buildsystem - adjust libdir and includedir in generated pkgconfig The lib and include dirs can be set at CMake time by passing LIB_INSTALL_DIR and INCLUDE_INSTALL_DIR values. Additionally, on 64-bit linux the libdir default is "lib64". Issue#508 --- CMakeLists.txt | 12 ++++++++++-- ReleaseNotes.txt | 1 + src/libical-glib/CMakeLists.txt | 12 ++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 995a9297..fa6afd31 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -624,8 +624,16 @@ endif() set(VERSION "${LIBICAL_LIB_VERSION_STRING}") set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "\${prefix}") -set(libdir "\${exec_prefix}/lib") -set(includedir "\${prefix}/include") +if(IS_ABSOLUTE ${LIB_INSTALL_DIR}) + set(libdir "${LIB_INSTALL_DIR}") +else() + set(libdir "\${exec_prefix}/${LIB_INSTALL_DIR}") +endif() +if(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR}) + set(includedir "${INCLUDE_INSTALL_DIR}") +else() + set(includedir "\${prefix}/include") +endif() set(PTHREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}") configure_file( diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index b43c7761..731e557a 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -8,6 +8,7 @@ Version 3.0.11 (UNRELEASED): * 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 Version 3.0.10 (17 April 2021): ------------------------------- diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt index 096f9bb4..f734024e 100644 --- a/src/libical-glib/CMakeLists.txt +++ b/src/libical-glib/CMakeLists.txt @@ -257,8 +257,16 @@ install(FILES ${LIBICAL_GLIB_HEADERS} set(prefix "${CMAKE_INSTALL_PREFIX}") set(exec_prefix "\${prefix}") -set(libdir "\${exec_prefix}/lib") -set(includedir "\${prefix}/include") +if(IS_ABSOLUTE ${LIB_INSTALL_DIR}) + set(libdir "${LIB_INSTALL_DIR}") +else() + set(libdir "\${exec_prefix}/${LIB_INSTALL_DIR}") +endif() +if(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR}) + set(includedir "${INCLUDE_INSTALL_DIR}") +else() + set(includedir "\${prefix}/include") +endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/libical-glib.pc.in -- cgit v1.2.1 From dca34ec388ee8650562763c0de0d70c066bba4ed Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 9 Oct 2021 09:38:23 -0400 Subject: update zoneinfo to tzdata2021c --- ReleaseNotes.txt | 1 + zoneinfo/Africa/Abidjan.ics | 4 ++-- zoneinfo/Africa/Accra.ics | 6 +++--- zoneinfo/Africa/Addis_Ababa.ics | 4 ++-- zoneinfo/Africa/Algiers.ics | 4 ++-- zoneinfo/Africa/Asmara.ics | 4 ++-- zoneinfo/Africa/Asmera.ics | 4 ++-- zoneinfo/Africa/Bamako.ics | 4 ++-- zoneinfo/Africa/Bangui.ics | 4 ++-- zoneinfo/Africa/Banjul.ics | 4 ++-- zoneinfo/Africa/Bissau.ics | 4 ++-- zoneinfo/Africa/Blantyre.ics | 4 ++-- zoneinfo/Africa/Brazzaville.ics | 4 ++-- zoneinfo/Africa/Bujumbura.ics | 4 ++-- zoneinfo/Africa/Cairo.ics | 4 ++-- zoneinfo/Africa/Casablanca.ics | 4 ++-- zoneinfo/Africa/Ceuta.ics | 4 ++-- zoneinfo/Africa/Conakry.ics | 4 ++-- zoneinfo/Africa/Dakar.ics | 4 ++-- zoneinfo/Africa/Dar_es_Salaam.ics | 4 ++-- zoneinfo/Africa/Djibouti.ics | 4 ++-- zoneinfo/Africa/Douala.ics | 4 ++-- zoneinfo/Africa/El_Aaiun.ics | 4 ++-- zoneinfo/Africa/Freetown.ics | 4 ++-- zoneinfo/Africa/Gaborone.ics | 4 ++-- zoneinfo/Africa/Harare.ics | 4 ++-- zoneinfo/Africa/Johannesburg.ics | 4 ++-- zoneinfo/Africa/Juba.ics | 4 ++-- zoneinfo/Africa/Kampala.ics | 4 ++-- zoneinfo/Africa/Khartoum.ics | 4 ++-- zoneinfo/Africa/Kigali.ics | 4 ++-- zoneinfo/Africa/Kinshasa.ics | 4 ++-- zoneinfo/Africa/Lagos.ics | 4 ++-- zoneinfo/Africa/Libreville.ics | 4 ++-- zoneinfo/Africa/Lome.ics | 4 ++-- zoneinfo/Africa/Luanda.ics | 4 ++-- zoneinfo/Africa/Lubumbashi.ics | 4 ++-- zoneinfo/Africa/Lusaka.ics | 4 ++-- zoneinfo/Africa/Malabo.ics | 4 ++-- zoneinfo/Africa/Maputo.ics | 4 ++-- zoneinfo/Africa/Maseru.ics | 4 ++-- zoneinfo/Africa/Mbabane.ics | 4 ++-- zoneinfo/Africa/Mogadishu.ics | 4 ++-- zoneinfo/Africa/Monrovia.ics | 4 ++-- zoneinfo/Africa/Nairobi.ics | 4 ++-- zoneinfo/Africa/Ndjamena.ics | 4 ++-- zoneinfo/Africa/Niamey.ics | 4 ++-- zoneinfo/Africa/Nouakchott.ics | 4 ++-- zoneinfo/Africa/Ouagadougou.ics | 4 ++-- zoneinfo/Africa/Porto-Novo.ics | 4 ++-- zoneinfo/Africa/Sao_Tome.ics | 4 ++-- zoneinfo/Africa/Timbuktu.ics | 4 ++-- zoneinfo/Africa/Tripoli.ics | 4 ++-- zoneinfo/Africa/Tunis.ics | 4 ++-- zoneinfo/Africa/Windhoek.ics | 4 ++-- zoneinfo/America/Adak.ics | 4 ++-- zoneinfo/America/Anchorage.ics | 4 ++-- zoneinfo/America/Anguilla.ics | 6 +++--- zoneinfo/America/Antigua.ics | 6 +++--- zoneinfo/America/Araguaina.ics | 4 ++-- zoneinfo/America/Argentina/Buenos_Aires.ics | 4 ++-- zoneinfo/America/Argentina/Catamarca.ics | 4 ++-- zoneinfo/America/Argentina/ComodRivadavia.ics | 4 ++-- zoneinfo/America/Argentina/Cordoba.ics | 4 ++-- zoneinfo/America/Argentina/Jujuy.ics | 4 ++-- zoneinfo/America/Argentina/La_Rioja.ics | 4 ++-- zoneinfo/America/Argentina/Mendoza.ics | 4 ++-- zoneinfo/America/Argentina/Rio_Gallegos.ics | 4 ++-- zoneinfo/America/Argentina/Salta.ics | 4 ++-- zoneinfo/America/Argentina/San_Juan.ics | 4 ++-- zoneinfo/America/Argentina/San_Luis.ics | 4 ++-- zoneinfo/America/Argentina/Tucuman.ics | 4 ++-- zoneinfo/America/Argentina/Ushuaia.ics | 4 ++-- zoneinfo/America/Aruba.ics | 6 +++--- zoneinfo/America/Asuncion.ics | 4 ++-- zoneinfo/America/Atikokan.ics | 6 +++--- zoneinfo/America/Atka.ics | 4 ++-- zoneinfo/America/Bahia.ics | 4 ++-- zoneinfo/America/Bahia_Banderas.ics | 4 ++-- zoneinfo/America/Barbados.ics | 4 ++-- zoneinfo/America/Belem.ics | 4 ++-- zoneinfo/America/Belize.ics | 4 ++-- zoneinfo/America/Blanc-Sablon.ics | 6 +++--- zoneinfo/America/Boa_Vista.ics | 4 ++-- zoneinfo/America/Bogota.ics | 4 ++-- zoneinfo/America/Boise.ics | 4 ++-- zoneinfo/America/Buenos_Aires.ics | 4 ++-- zoneinfo/America/Cambridge_Bay.ics | 4 ++-- zoneinfo/America/Campo_Grande.ics | 4 ++-- zoneinfo/America/Cancun.ics | 4 ++-- zoneinfo/America/Caracas.ics | 4 ++-- zoneinfo/America/Catamarca.ics | 4 ++-- zoneinfo/America/Cayenne.ics | 4 ++-- zoneinfo/America/Cayman.ics | 4 ++-- zoneinfo/America/Chicago.ics | 4 ++-- zoneinfo/America/Chihuahua.ics | 4 ++-- zoneinfo/America/Coral_Harbour.ics | 6 +++--- zoneinfo/America/Cordoba.ics | 4 ++-- zoneinfo/America/Costa_Rica.ics | 4 ++-- zoneinfo/America/Creston.ics | 6 +++--- zoneinfo/America/Cuiaba.ics | 4 ++-- zoneinfo/America/Curacao.ics | 6 +++--- zoneinfo/America/Danmarkshavn.ics | 4 ++-- zoneinfo/America/Dawson.ics | 4 ++-- zoneinfo/America/Dawson_Creek.ics | 4 ++-- zoneinfo/America/Denver.ics | 4 ++-- zoneinfo/America/Detroit.ics | 4 ++-- zoneinfo/America/Dominica.ics | 6 +++--- zoneinfo/America/Edmonton.ics | 4 ++-- zoneinfo/America/Eirunepe.ics | 4 ++-- zoneinfo/America/El_Salvador.ics | 4 ++-- zoneinfo/America/Ensenada.ics | 4 ++-- zoneinfo/America/Fort_Nelson.ics | 4 ++-- zoneinfo/America/Fort_Wayne.ics | 4 ++-- zoneinfo/America/Fortaleza.ics | 4 ++-- zoneinfo/America/Glace_Bay.ics | 4 ++-- zoneinfo/America/Godthab.ics | 4 ++-- zoneinfo/America/Goose_Bay.ics | 4 ++-- zoneinfo/America/Grand_Turk.ics | 4 ++-- zoneinfo/America/Grenada.ics | 6 +++--- zoneinfo/America/Guadeloupe.ics | 6 +++--- zoneinfo/America/Guatemala.ics | 4 ++-- zoneinfo/America/Guayaquil.ics | 4 ++-- zoneinfo/America/Guyana.ics | 4 ++-- zoneinfo/America/Halifax.ics | 4 ++-- zoneinfo/America/Havana.ics | 4 ++-- zoneinfo/America/Hermosillo.ics | 4 ++-- zoneinfo/America/Indiana/Indianapolis.ics | 4 ++-- zoneinfo/America/Indiana/Knox.ics | 4 ++-- zoneinfo/America/Indiana/Marengo.ics | 4 ++-- zoneinfo/America/Indiana/Petersburg.ics | 4 ++-- zoneinfo/America/Indiana/Tell_City.ics | 4 ++-- zoneinfo/America/Indiana/Vevay.ics | 4 ++-- zoneinfo/America/Indiana/Vincennes.ics | 4 ++-- zoneinfo/America/Indiana/Winamac.ics | 4 ++-- zoneinfo/America/Indianapolis.ics | 4 ++-- zoneinfo/America/Inuvik.ics | 4 ++-- zoneinfo/America/Iqaluit.ics | 4 ++-- zoneinfo/America/Jamaica.ics | 4 ++-- zoneinfo/America/Jujuy.ics | 4 ++-- zoneinfo/America/Juneau.ics | 4 ++-- zoneinfo/America/Kentucky/Louisville.ics | 4 ++-- zoneinfo/America/Kentucky/Monticello.ics | 4 ++-- zoneinfo/America/Knox_IN.ics | 4 ++-- zoneinfo/America/Kralendijk.ics | 6 +++--- zoneinfo/America/La_Paz.ics | 4 ++-- zoneinfo/America/Lima.ics | 4 ++-- zoneinfo/America/Los_Angeles.ics | 4 ++-- zoneinfo/America/Louisville.ics | 4 ++-- zoneinfo/America/Lower_Princes.ics | 6 +++--- zoneinfo/America/Maceio.ics | 4 ++-- zoneinfo/America/Managua.ics | 4 ++-- zoneinfo/America/Manaus.ics | 4 ++-- zoneinfo/America/Marigot.ics | 6 +++--- zoneinfo/America/Martinique.ics | 4 ++-- zoneinfo/America/Matamoros.ics | 4 ++-- zoneinfo/America/Mazatlan.ics | 4 ++-- zoneinfo/America/Mendoza.ics | 4 ++-- zoneinfo/America/Menominee.ics | 4 ++-- zoneinfo/America/Merida.ics | 4 ++-- zoneinfo/America/Metlakatla.ics | 4 ++-- zoneinfo/America/Mexico_City.ics | 4 ++-- zoneinfo/America/Miquelon.ics | 4 ++-- zoneinfo/America/Moncton.ics | 4 ++-- zoneinfo/America/Monterrey.ics | 4 ++-- zoneinfo/America/Montevideo.ics | 4 ++-- zoneinfo/America/Montreal.ics | 4 ++-- zoneinfo/America/Montserrat.ics | 6 +++--- zoneinfo/America/Nassau.ics | 6 +++--- zoneinfo/America/New_York.ics | 4 ++-- zoneinfo/America/Nipigon.ics | 4 ++-- zoneinfo/America/Nome.ics | 4 ++-- zoneinfo/America/Noronha.ics | 4 ++-- zoneinfo/America/North_Dakota/Beulah.ics | 4 ++-- zoneinfo/America/North_Dakota/Center.ics | 4 ++-- zoneinfo/America/North_Dakota/New_Salem.ics | 4 ++-- zoneinfo/America/Nuuk.ics | 4 ++-- zoneinfo/America/Ojinaga.ics | 4 ++-- zoneinfo/America/Panama.ics | 4 ++-- zoneinfo/America/Pangnirtung.ics | 4 ++-- zoneinfo/America/Paramaribo.ics | 4 ++-- zoneinfo/America/Phoenix.ics | 4 ++-- zoneinfo/America/Port-au-Prince.ics | 4 ++-- zoneinfo/America/Port_of_Spain.ics | 6 +++--- zoneinfo/America/Porto_Acre.ics | 4 ++-- zoneinfo/America/Porto_Velho.ics | 4 ++-- zoneinfo/America/Puerto_Rico.ics | 4 ++-- zoneinfo/America/Punta_Arenas.ics | 4 ++-- zoneinfo/America/Rainy_River.ics | 4 ++-- zoneinfo/America/Rankin_Inlet.ics | 4 ++-- zoneinfo/America/Recife.ics | 4 ++-- zoneinfo/America/Regina.ics | 4 ++-- zoneinfo/America/Resolute.ics | 4 ++-- zoneinfo/America/Rio_Branco.ics | 4 ++-- zoneinfo/America/Rosario.ics | 4 ++-- zoneinfo/America/Santa_Isabel.ics | 4 ++-- zoneinfo/America/Santarem.ics | 4 ++-- zoneinfo/America/Santiago.ics | 4 ++-- zoneinfo/America/Santo_Domingo.ics | 4 ++-- zoneinfo/America/Sao_Paulo.ics | 4 ++-- zoneinfo/America/Scoresbysund.ics | 4 ++-- zoneinfo/America/Shiprock.ics | 4 ++-- zoneinfo/America/Sitka.ics | 4 ++-- zoneinfo/America/St_Barthelemy.ics | 6 +++--- zoneinfo/America/St_Johns.ics | 4 ++-- zoneinfo/America/St_Kitts.ics | 6 +++--- zoneinfo/America/St_Lucia.ics | 6 +++--- zoneinfo/America/St_Thomas.ics | 6 +++--- zoneinfo/America/St_Vincent.ics | 6 +++--- zoneinfo/America/Swift_Current.ics | 4 ++-- zoneinfo/America/Tegucigalpa.ics | 4 ++-- zoneinfo/America/Thule.ics | 4 ++-- zoneinfo/America/Thunder_Bay.ics | 4 ++-- zoneinfo/America/Tijuana.ics | 4 ++-- zoneinfo/America/Toronto.ics | 4 ++-- zoneinfo/America/Tortola.ics | 6 +++--- zoneinfo/America/Vancouver.ics | 4 ++-- zoneinfo/America/Virgin.ics | 6 +++--- zoneinfo/America/Whitehorse.ics | 4 ++-- zoneinfo/America/Winnipeg.ics | 4 ++-- zoneinfo/America/Yakutat.ics | 4 ++-- zoneinfo/America/Yellowknife.ics | 4 ++-- zoneinfo/Antarctica/Casey.ics | 4 ++-- zoneinfo/Antarctica/Davis.ics | 4 ++-- zoneinfo/Antarctica/DumontDUrville.ics | 6 +++--- zoneinfo/Antarctica/Macquarie.ics | 4 ++-- zoneinfo/Antarctica/Mawson.ics | 4 ++-- zoneinfo/Antarctica/McMurdo.ics | 4 ++-- zoneinfo/Antarctica/Palmer.ics | 4 ++-- zoneinfo/Antarctica/Rothera.ics | 4 ++-- zoneinfo/Antarctica/South_Pole.ics | 4 ++-- zoneinfo/Antarctica/Syowa.ics | 6 +++--- zoneinfo/Antarctica/Troll.ics | 4 ++-- zoneinfo/Antarctica/Vostok.ics | 4 ++-- zoneinfo/Arctic/Longyearbyen.ics | 4 ++-- zoneinfo/Asia/Aden.ics | 4 ++-- zoneinfo/Asia/Almaty.ics | 4 ++-- zoneinfo/Asia/Amman.ics | 18 +++++++++--------- zoneinfo/Asia/Anadyr.ics | 4 ++-- zoneinfo/Asia/Aqtau.ics | 4 ++-- zoneinfo/Asia/Aqtobe.ics | 4 ++-- zoneinfo/Asia/Ashgabat.ics | 4 ++-- zoneinfo/Asia/Ashkhabad.ics | 4 ++-- zoneinfo/Asia/Atyrau.ics | 4 ++-- zoneinfo/Asia/Baghdad.ics | 4 ++-- zoneinfo/Asia/Bahrain.ics | 4 ++-- zoneinfo/Asia/Baku.ics | 4 ++-- zoneinfo/Asia/Bangkok.ics | 4 ++-- zoneinfo/Asia/Barnaul.ics | 4 ++-- zoneinfo/Asia/Beirut.ics | 4 ++-- zoneinfo/Asia/Bishkek.ics | 4 ++-- zoneinfo/Asia/Brunei.ics | 4 ++-- zoneinfo/Asia/Calcutta.ics | 4 ++-- zoneinfo/Asia/Chita.ics | 4 ++-- zoneinfo/Asia/Choibalsan.ics | 4 ++-- zoneinfo/Asia/Chongqing.ics | 4 ++-- zoneinfo/Asia/Chungking.ics | 4 ++-- zoneinfo/Asia/Colombo.ics | 4 ++-- zoneinfo/Asia/Dacca.ics | 4 ++-- zoneinfo/Asia/Damascus.ics | 4 ++-- zoneinfo/Asia/Dhaka.ics | 4 ++-- zoneinfo/Asia/Dili.ics | 4 ++-- zoneinfo/Asia/Dubai.ics | 4 ++-- zoneinfo/Asia/Dushanbe.ics | 4 ++-- zoneinfo/Asia/Famagusta.ics | 4 ++-- zoneinfo/Asia/Gaza.ics | 4 ++-- zoneinfo/Asia/Harbin.ics | 4 ++-- zoneinfo/Asia/Hebron.ics | 4 ++-- zoneinfo/Asia/Ho_Chi_Minh.ics | 4 ++-- zoneinfo/Asia/Hong_Kong.ics | 4 ++-- zoneinfo/Asia/Hovd.ics | 4 ++-- zoneinfo/Asia/Irkutsk.ics | 4 ++-- zoneinfo/Asia/Istanbul.ics | 4 ++-- zoneinfo/Asia/Jakarta.ics | 4 ++-- zoneinfo/Asia/Jayapura.ics | 4 ++-- zoneinfo/Asia/Jerusalem.ics | 4 ++-- zoneinfo/Asia/Kabul.ics | 4 ++-- zoneinfo/Asia/Kamchatka.ics | 4 ++-- zoneinfo/Asia/Karachi.ics | 4 ++-- zoneinfo/Asia/Kashgar.ics | 4 ++-- zoneinfo/Asia/Kathmandu.ics | 4 ++-- zoneinfo/Asia/Katmandu.ics | 4 ++-- zoneinfo/Asia/Khandyga.ics | 4 ++-- zoneinfo/Asia/Kolkata.ics | 4 ++-- zoneinfo/Asia/Krasnoyarsk.ics | 4 ++-- zoneinfo/Asia/Kuala_Lumpur.ics | 4 ++-- zoneinfo/Asia/Kuching.ics | 4 ++-- zoneinfo/Asia/Kuwait.ics | 4 ++-- zoneinfo/Asia/Macao.ics | 4 ++-- zoneinfo/Asia/Macau.ics | 4 ++-- zoneinfo/Asia/Magadan.ics | 4 ++-- zoneinfo/Asia/Makassar.ics | 4 ++-- zoneinfo/Asia/Manila.ics | 4 ++-- zoneinfo/Asia/Muscat.ics | 4 ++-- zoneinfo/Asia/Nicosia.ics | 4 ++-- zoneinfo/Asia/Novokuznetsk.ics | 4 ++-- zoneinfo/Asia/Novosibirsk.ics | 4 ++-- zoneinfo/Asia/Omsk.ics | 4 ++-- zoneinfo/Asia/Oral.ics | 4 ++-- zoneinfo/Asia/Phnom_Penh.ics | 4 ++-- zoneinfo/Asia/Pontianak.ics | 4 ++-- zoneinfo/Asia/Pyongyang.ics | 4 ++-- zoneinfo/Asia/Qatar.ics | 4 ++-- zoneinfo/Asia/Qostanay.ics | 4 ++-- zoneinfo/Asia/Qyzylorda.ics | 4 ++-- zoneinfo/Asia/Rangoon.ics | 4 ++-- zoneinfo/Asia/Riyadh.ics | 4 ++-- zoneinfo/Asia/Saigon.ics | 4 ++-- zoneinfo/Asia/Sakhalin.ics | 4 ++-- zoneinfo/Asia/Samarkand.ics | 4 ++-- zoneinfo/Asia/Seoul.ics | 4 ++-- zoneinfo/Asia/Shanghai.ics | 4 ++-- zoneinfo/Asia/Singapore.ics | 4 ++-- zoneinfo/Asia/Srednekolymsk.ics | 4 ++-- zoneinfo/Asia/Taipei.ics | 4 ++-- zoneinfo/Asia/Tashkent.ics | 4 ++-- zoneinfo/Asia/Tbilisi.ics | 4 ++-- zoneinfo/Asia/Tehran.ics | 4 ++-- zoneinfo/Asia/Tel_Aviv.ics | 4 ++-- zoneinfo/Asia/Thimbu.ics | 4 ++-- zoneinfo/Asia/Thimphu.ics | 4 ++-- zoneinfo/Asia/Tokyo.ics | 4 ++-- zoneinfo/Asia/Tomsk.ics | 4 ++-- zoneinfo/Asia/Ujung_Pandang.ics | 4 ++-- zoneinfo/Asia/Ulaanbaatar.ics | 4 ++-- zoneinfo/Asia/Ulan_Bator.ics | 4 ++-- zoneinfo/Asia/Urumqi.ics | 4 ++-- zoneinfo/Asia/Ust-Nera.ics | 4 ++-- zoneinfo/Asia/Vientiane.ics | 4 ++-- zoneinfo/Asia/Vladivostok.ics | 4 ++-- zoneinfo/Asia/Yakutsk.ics | 4 ++-- zoneinfo/Asia/Yangon.ics | 4 ++-- zoneinfo/Asia/Yekaterinburg.ics | 4 ++-- zoneinfo/Asia/Yerevan.ics | 4 ++-- zoneinfo/Atlantic/Azores.ics | 4 ++-- zoneinfo/Atlantic/Bermuda.ics | 4 ++-- zoneinfo/Atlantic/Canary.ics | 4 ++-- zoneinfo/Atlantic/Cape_Verde.ics | 4 ++-- zoneinfo/Atlantic/Faeroe.ics | 4 ++-- zoneinfo/Atlantic/Faroe.ics | 4 ++-- zoneinfo/Atlantic/Jan_Mayen.ics | 4 ++-- zoneinfo/Atlantic/Madeira.ics | 4 ++-- zoneinfo/Atlantic/Reykjavik.ics | 4 ++-- zoneinfo/Atlantic/South_Georgia.ics | 4 ++-- zoneinfo/Atlantic/St_Helena.ics | 4 ++-- zoneinfo/Atlantic/Stanley.ics | 4 ++-- zoneinfo/Australia/ACT.ics | 4 ++-- zoneinfo/Australia/Adelaide.ics | 4 ++-- zoneinfo/Australia/Brisbane.ics | 4 ++-- zoneinfo/Australia/Broken_Hill.ics | 4 ++-- zoneinfo/Australia/Canberra.ics | 4 ++-- zoneinfo/Australia/Currie.ics | 4 ++-- zoneinfo/Australia/Darwin.ics | 4 ++-- zoneinfo/Australia/Eucla.ics | 4 ++-- zoneinfo/Australia/Hobart.ics | 4 ++-- zoneinfo/Australia/LHI.ics | 4 ++-- zoneinfo/Australia/Lindeman.ics | 4 ++-- zoneinfo/Australia/Lord_Howe.ics | 4 ++-- zoneinfo/Australia/Melbourne.ics | 4 ++-- zoneinfo/Australia/NSW.ics | 4 ++-- zoneinfo/Australia/North.ics | 4 ++-- zoneinfo/Australia/Perth.ics | 4 ++-- zoneinfo/Australia/Queensland.ics | 4 ++-- zoneinfo/Australia/South.ics | 4 ++-- zoneinfo/Australia/Sydney.ics | 4 ++-- zoneinfo/Australia/Tasmania.ics | 4 ++-- zoneinfo/Australia/Victoria.ics | 4 ++-- zoneinfo/Australia/West.ics | 4 ++-- zoneinfo/Australia/Yancowinna.ics | 4 ++-- zoneinfo/Brazil/Acre.ics | 4 ++-- zoneinfo/Brazil/DeNoronha.ics | 4 ++-- zoneinfo/Brazil/East.ics | 4 ++-- zoneinfo/Brazil/West.ics | 4 ++-- zoneinfo/CET.ics | 4 ++-- zoneinfo/CST6CDT.ics | 4 ++-- zoneinfo/Canada/Atlantic.ics | 4 ++-- zoneinfo/Canada/Central.ics | 4 ++-- zoneinfo/Canada/Eastern.ics | 4 ++-- zoneinfo/Canada/Mountain.ics | 4 ++-- zoneinfo/Canada/Newfoundland.ics | 4 ++-- zoneinfo/Canada/Pacific.ics | 4 ++-- zoneinfo/Canada/Saskatchewan.ics | 4 ++-- zoneinfo/Canada/Yukon.ics | 4 ++-- zoneinfo/Chile/Continental.ics | 4 ++-- zoneinfo/Chile/EasterIsland.ics | 4 ++-- zoneinfo/Cuba.ics | 4 ++-- zoneinfo/EET.ics | 4 ++-- zoneinfo/EST.ics | 4 ++-- zoneinfo/EST5EDT.ics | 4 ++-- zoneinfo/Egypt.ics | 4 ++-- zoneinfo/Eire.ics | 4 ++-- zoneinfo/Etc/GMT+0.ics | 4 ++-- zoneinfo/Etc/GMT+1.ics | 4 ++-- zoneinfo/Etc/GMT+10.ics | 4 ++-- zoneinfo/Etc/GMT+11.ics | 4 ++-- zoneinfo/Etc/GMT+12.ics | 4 ++-- zoneinfo/Etc/GMT+2.ics | 4 ++-- zoneinfo/Etc/GMT+3.ics | 4 ++-- zoneinfo/Etc/GMT+4.ics | 4 ++-- zoneinfo/Etc/GMT+5.ics | 4 ++-- zoneinfo/Etc/GMT+6.ics | 4 ++-- zoneinfo/Etc/GMT+7.ics | 4 ++-- zoneinfo/Etc/GMT+8.ics | 4 ++-- zoneinfo/Etc/GMT+9.ics | 4 ++-- zoneinfo/Etc/GMT-0.ics | 4 ++-- zoneinfo/Etc/GMT-1.ics | 4 ++-- zoneinfo/Etc/GMT-10.ics | 4 ++-- zoneinfo/Etc/GMT-11.ics | 4 ++-- zoneinfo/Etc/GMT-12.ics | 4 ++-- zoneinfo/Etc/GMT-13.ics | 4 ++-- zoneinfo/Etc/GMT-14.ics | 4 ++-- zoneinfo/Etc/GMT-2.ics | 4 ++-- zoneinfo/Etc/GMT-3.ics | 4 ++-- zoneinfo/Etc/GMT-4.ics | 4 ++-- zoneinfo/Etc/GMT-5.ics | 4 ++-- zoneinfo/Etc/GMT-6.ics | 4 ++-- zoneinfo/Etc/GMT-7.ics | 4 ++-- zoneinfo/Etc/GMT-8.ics | 4 ++-- zoneinfo/Etc/GMT-9.ics | 4 ++-- zoneinfo/Etc/GMT.ics | 4 ++-- zoneinfo/Etc/GMT0.ics | 4 ++-- zoneinfo/Etc/Greenwich.ics | 4 ++-- zoneinfo/Etc/UCT.ics | 4 ++-- zoneinfo/Etc/UTC.ics | 4 ++-- zoneinfo/Etc/Universal.ics | 4 ++-- zoneinfo/Etc/Zulu.ics | 4 ++-- zoneinfo/Europe/Amsterdam.ics | 4 ++-- zoneinfo/Europe/Andorra.ics | 4 ++-- zoneinfo/Europe/Astrakhan.ics | 4 ++-- zoneinfo/Europe/Athens.ics | 4 ++-- zoneinfo/Europe/Belfast.ics | 4 ++-- zoneinfo/Europe/Belgrade.ics | 4 ++-- zoneinfo/Europe/Berlin.ics | 4 ++-- zoneinfo/Europe/Bratislava.ics | 4 ++-- zoneinfo/Europe/Brussels.ics | 4 ++-- zoneinfo/Europe/Bucharest.ics | 4 ++-- zoneinfo/Europe/Budapest.ics | 4 ++-- zoneinfo/Europe/Busingen.ics | 4 ++-- zoneinfo/Europe/Chisinau.ics | 4 ++-- zoneinfo/Europe/Copenhagen.ics | 4 ++-- zoneinfo/Europe/Dublin.ics | 4 ++-- zoneinfo/Europe/Gibraltar.ics | 4 ++-- zoneinfo/Europe/Guernsey.ics | 4 ++-- zoneinfo/Europe/Helsinki.ics | 4 ++-- zoneinfo/Europe/Isle_of_Man.ics | 4 ++-- zoneinfo/Europe/Istanbul.ics | 4 ++-- zoneinfo/Europe/Jersey.ics | 4 ++-- zoneinfo/Europe/Kaliningrad.ics | 4 ++-- zoneinfo/Europe/Kiev.ics | 4 ++-- zoneinfo/Europe/Kirov.ics | 4 ++-- zoneinfo/Europe/Lisbon.ics | 4 ++-- zoneinfo/Europe/Ljubljana.ics | 4 ++-- zoneinfo/Europe/London.ics | 4 ++-- zoneinfo/Europe/Luxembourg.ics | 4 ++-- zoneinfo/Europe/Madrid.ics | 4 ++-- zoneinfo/Europe/Malta.ics | 4 ++-- zoneinfo/Europe/Mariehamn.ics | 4 ++-- zoneinfo/Europe/Minsk.ics | 4 ++-- zoneinfo/Europe/Monaco.ics | 4 ++-- zoneinfo/Europe/Moscow.ics | 4 ++-- zoneinfo/Europe/Nicosia.ics | 4 ++-- zoneinfo/Europe/Oslo.ics | 4 ++-- zoneinfo/Europe/Paris.ics | 4 ++-- zoneinfo/Europe/Podgorica.ics | 4 ++-- zoneinfo/Europe/Prague.ics | 4 ++-- zoneinfo/Europe/Riga.ics | 4 ++-- zoneinfo/Europe/Rome.ics | 4 ++-- zoneinfo/Europe/Samara.ics | 4 ++-- zoneinfo/Europe/San_Marino.ics | 4 ++-- zoneinfo/Europe/Sarajevo.ics | 4 ++-- zoneinfo/Europe/Saratov.ics | 4 ++-- zoneinfo/Europe/Simferopol.ics | 4 ++-- zoneinfo/Europe/Skopje.ics | 4 ++-- zoneinfo/Europe/Sofia.ics | 4 ++-- zoneinfo/Europe/Stockholm.ics | 4 ++-- zoneinfo/Europe/Tallinn.ics | 4 ++-- zoneinfo/Europe/Tirane.ics | 4 ++-- zoneinfo/Europe/Tiraspol.ics | 4 ++-- zoneinfo/Europe/Ulyanovsk.ics | 4 ++-- zoneinfo/Europe/Uzhgorod.ics | 4 ++-- zoneinfo/Europe/Vaduz.ics | 4 ++-- zoneinfo/Europe/Vatican.ics | 4 ++-- zoneinfo/Europe/Vienna.ics | 4 ++-- zoneinfo/Europe/Vilnius.ics | 4 ++-- zoneinfo/Europe/Volgograd.ics | 4 ++-- zoneinfo/Europe/Warsaw.ics | 4 ++-- zoneinfo/Europe/Zagreb.ics | 4 ++-- zoneinfo/Europe/Zaporozhye.ics | 4 ++-- zoneinfo/Europe/Zurich.ics | 4 ++-- zoneinfo/GB-Eire.ics | 4 ++-- zoneinfo/GB.ics | 4 ++-- zoneinfo/GMT+0.ics | 4 ++-- zoneinfo/GMT-0.ics | 4 ++-- zoneinfo/GMT.ics | 4 ++-- zoneinfo/GMT0.ics | 4 ++-- zoneinfo/Greenwich.ics | 4 ++-- zoneinfo/HST.ics | 4 ++-- zoneinfo/Hongkong.ics | 4 ++-- zoneinfo/Iceland.ics | 4 ++-- zoneinfo/Indian/Antananarivo.ics | 4 ++-- zoneinfo/Indian/Chagos.ics | 4 ++-- zoneinfo/Indian/Christmas.ics | 4 ++-- zoneinfo/Indian/Cocos.ics | 4 ++-- zoneinfo/Indian/Comoro.ics | 4 ++-- zoneinfo/Indian/Kerguelen.ics | 4 ++-- zoneinfo/Indian/Mahe.ics | 4 ++-- zoneinfo/Indian/Maldives.ics | 4 ++-- zoneinfo/Indian/Mauritius.ics | 4 ++-- zoneinfo/Indian/Mayotte.ics | 4 ++-- zoneinfo/Indian/Reunion.ics | 4 ++-- zoneinfo/Iran.ics | 4 ++-- zoneinfo/Israel.ics | 4 ++-- zoneinfo/Jamaica.ics | 4 ++-- zoneinfo/Japan.ics | 4 ++-- zoneinfo/Kwajalein.ics | 4 ++-- zoneinfo/Libya.ics | 4 ++-- zoneinfo/MET.ics | 4 ++-- zoneinfo/MST.ics | 4 ++-- zoneinfo/MST7MDT.ics | 4 ++-- zoneinfo/Mexico/BajaNorte.ics | 4 ++-- zoneinfo/Mexico/BajaSur.ics | 4 ++-- zoneinfo/Mexico/General.ics | 4 ++-- zoneinfo/NZ-CHAT.ics | 4 ++-- zoneinfo/NZ.ics | 4 ++-- zoneinfo/Navajo.ics | 4 ++-- zoneinfo/PRC.ics | 4 ++-- zoneinfo/PST8PDT.ics | 4 ++-- zoneinfo/Pacific/Apia.ics | 16 ++++------------ zoneinfo/Pacific/Auckland.ics | 4 ++-- zoneinfo/Pacific/Bougainville.ics | 4 ++-- zoneinfo/Pacific/Chatham.ics | 4 ++-- zoneinfo/Pacific/Chuuk.ics | 4 ++-- zoneinfo/Pacific/Easter.ics | 4 ++-- zoneinfo/Pacific/Efate.ics | 4 ++-- zoneinfo/Pacific/Enderbury.ics | 6 +++--- zoneinfo/Pacific/Fakaofo.ics | 4 ++-- zoneinfo/Pacific/Fiji.ics | 4 ++-- zoneinfo/Pacific/Funafuti.ics | 4 ++-- zoneinfo/Pacific/Galapagos.ics | 4 ++-- zoneinfo/Pacific/Gambier.ics | 4 ++-- zoneinfo/Pacific/Guadalcanal.ics | 4 ++-- zoneinfo/Pacific/Guam.ics | 4 ++-- zoneinfo/Pacific/Honolulu.ics | 4 ++-- zoneinfo/Pacific/Johnston.ics | 4 ++-- zoneinfo/Pacific/Kanton.ics | 15 +++++++++++++++ zoneinfo/Pacific/Kiritimati.ics | 4 ++-- zoneinfo/Pacific/Kosrae.ics | 4 ++-- zoneinfo/Pacific/Kwajalein.ics | 4 ++-- zoneinfo/Pacific/Majuro.ics | 4 ++-- zoneinfo/Pacific/Marquesas.ics | 4 ++-- zoneinfo/Pacific/Midway.ics | 4 ++-- zoneinfo/Pacific/Nauru.ics | 4 ++-- zoneinfo/Pacific/Niue.ics | 4 ++-- zoneinfo/Pacific/Norfolk.ics | 4 ++-- zoneinfo/Pacific/Noumea.ics | 4 ++-- zoneinfo/Pacific/Pago_Pago.ics | 4 ++-- zoneinfo/Pacific/Palau.ics | 4 ++-- zoneinfo/Pacific/Pitcairn.ics | 4 ++-- zoneinfo/Pacific/Pohnpei.ics | 4 ++-- zoneinfo/Pacific/Ponape.ics | 4 ++-- zoneinfo/Pacific/Port_Moresby.ics | 4 ++-- zoneinfo/Pacific/Rarotonga.ics | 4 ++-- zoneinfo/Pacific/Saipan.ics | 4 ++-- zoneinfo/Pacific/Samoa.ics | 4 ++-- zoneinfo/Pacific/Tahiti.ics | 4 ++-- zoneinfo/Pacific/Tarawa.ics | 4 ++-- zoneinfo/Pacific/Tongatapu.ics | 4 ++-- zoneinfo/Pacific/Truk.ics | 4 ++-- zoneinfo/Pacific/Wake.ics | 4 ++-- zoneinfo/Pacific/Wallis.ics | 4 ++-- zoneinfo/Pacific/Yap.ics | 4 ++-- zoneinfo/Poland.ics | 4 ++-- zoneinfo/Portugal.ics | 4 ++-- zoneinfo/ROC.ics | 4 ++-- zoneinfo/ROK.ics | 4 ++-- zoneinfo/Singapore.ics | 4 ++-- zoneinfo/Turkey.ics | 4 ++-- zoneinfo/UCT.ics | 4 ++-- zoneinfo/US/Alaska.ics | 4 ++-- zoneinfo/US/Aleutian.ics | 4 ++-- zoneinfo/US/Arizona.ics | 4 ++-- zoneinfo/US/Central.ics | 4 ++-- zoneinfo/US/East-Indiana.ics | 4 ++-- zoneinfo/US/Eastern.ics | 4 ++-- zoneinfo/US/Hawaii.ics | 4 ++-- zoneinfo/US/Indiana-Starke.ics | 4 ++-- zoneinfo/US/Michigan.ics | 4 ++-- zoneinfo/US/Mountain.ics | 4 ++-- zoneinfo/US/Pacific.ics | 4 ++-- zoneinfo/US/Samoa.ics | 4 ++-- zoneinfo/UTC.ics | 4 ++-- zoneinfo/Universal.ics | 4 ++-- zoneinfo/W-SU.ics | 4 ++-- zoneinfo/WET.ics | 4 ++-- zoneinfo/Zulu.ics | 4 ++-- zoneinfo/zones.tab | 3 ++- 596 files changed, 1241 insertions(+), 1232 deletions(-) create mode 100644 zoneinfo/Pacific/Kanton.ics diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 731e557a..3aaf5461 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -9,6 +9,7 @@ Version 3.0.11 (UNRELEASED): * 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): ------------------------------- diff --git a/zoneinfo/Africa/Abidjan.ics b/zoneinfo/Africa/Abidjan.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Abidjan.ics +++ b/zoneinfo/Africa/Abidjan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Accra.ics b/zoneinfo/Africa/Accra.ics index 51f64f83..5abec10b 100644 --- a/zoneinfo/Africa/Accra.ics +++ b/zoneinfo/Africa/Accra.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Accra -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:Africa/Accra +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT TZOFFSETFROM:+0000 diff --git a/zoneinfo/Africa/Addis_Ababa.ics b/zoneinfo/Africa/Addis_Ababa.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Addis_Ababa.ics +++ b/zoneinfo/Africa/Addis_Ababa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Algiers.ics b/zoneinfo/Africa/Algiers.ics index 464bcd21..7752339d 100644 --- a/zoneinfo/Africa/Algiers.ics +++ b/zoneinfo/Africa/Algiers.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Algiers -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Algiers +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Algiers BEGIN:STANDARD TZNAME:CET diff --git a/zoneinfo/Africa/Asmara.ics b/zoneinfo/Africa/Asmara.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Asmara.ics +++ b/zoneinfo/Africa/Asmara.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Asmera.ics b/zoneinfo/Africa/Asmera.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Asmera.ics +++ b/zoneinfo/Africa/Asmera.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Bamako.ics b/zoneinfo/Africa/Bamako.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Bamako.ics +++ b/zoneinfo/Africa/Bamako.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Bangui.ics b/zoneinfo/Africa/Bangui.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Bangui.ics +++ b/zoneinfo/Africa/Bangui.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Banjul.ics b/zoneinfo/Africa/Banjul.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Banjul.ics +++ b/zoneinfo/Africa/Banjul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Bissau.ics b/zoneinfo/Africa/Bissau.ics index ea0cec6f..44bff060 100644 --- a/zoneinfo/Africa/Bissau.ics +++ b/zoneinfo/Africa/Bissau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Bissau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Bissau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Bissau BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Blantyre.ics b/zoneinfo/Africa/Blantyre.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Blantyre.ics +++ b/zoneinfo/Africa/Blantyre.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Brazzaville.ics b/zoneinfo/Africa/Brazzaville.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Brazzaville.ics +++ b/zoneinfo/Africa/Brazzaville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Bujumbura.ics b/zoneinfo/Africa/Bujumbura.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Bujumbura.ics +++ b/zoneinfo/Africa/Bujumbura.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Cairo.ics b/zoneinfo/Africa/Cairo.ics index 746bb179..3d8dee3d 100644 --- a/zoneinfo/Africa/Cairo.ics +++ b/zoneinfo/Africa/Cairo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Cairo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Cairo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Cairo BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Africa/Casablanca.ics b/zoneinfo/Africa/Casablanca.ics index 993c93ed..55f85437 100644 --- a/zoneinfo/Africa/Casablanca.ics +++ b/zoneinfo/Africa/Casablanca.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Casablanca +TZID:/citadel.org/20211009_1/Africa/Casablanca TZUNTIL:20870511T020001Z -LAST-MODIFIED:20210410T122212Z +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Casablanca BEGIN:STANDARD TZNAME:+01 diff --git a/zoneinfo/Africa/Ceuta.ics b/zoneinfo/Africa/Ceuta.ics index ec19a3b9..1df3accf 100644 --- a/zoneinfo/Africa/Ceuta.ics +++ b/zoneinfo/Africa/Ceuta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Ceuta -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Ceuta +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Ceuta BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Africa/Conakry.ics b/zoneinfo/Africa/Conakry.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Conakry.ics +++ b/zoneinfo/Africa/Conakry.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Dakar.ics b/zoneinfo/Africa/Dakar.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Dakar.ics +++ b/zoneinfo/Africa/Dakar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Dar_es_Salaam.ics b/zoneinfo/Africa/Dar_es_Salaam.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Dar_es_Salaam.ics +++ b/zoneinfo/Africa/Dar_es_Salaam.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Djibouti.ics b/zoneinfo/Africa/Djibouti.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Djibouti.ics +++ b/zoneinfo/Africa/Djibouti.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Douala.ics b/zoneinfo/Africa/Douala.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Douala.ics +++ b/zoneinfo/Africa/Douala.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/El_Aaiun.ics b/zoneinfo/Africa/El_Aaiun.ics index dc538ad6..fe768916 100644 --- a/zoneinfo/Africa/El_Aaiun.ics +++ b/zoneinfo/Africa/El_Aaiun.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/El_Aaiun +TZID:/citadel.org/20211009_1/Africa/El_Aaiun TZUNTIL:20870511T020001Z -LAST-MODIFIED:20210410T122212Z +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/El_Aaiun BEGIN:STANDARD TZNAME:+01 diff --git a/zoneinfo/Africa/Freetown.ics b/zoneinfo/Africa/Freetown.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Freetown.ics +++ b/zoneinfo/Africa/Freetown.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Gaborone.ics b/zoneinfo/Africa/Gaborone.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Gaborone.ics +++ b/zoneinfo/Africa/Gaborone.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Harare.ics b/zoneinfo/Africa/Harare.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Harare.ics +++ b/zoneinfo/Africa/Harare.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Johannesburg.ics b/zoneinfo/Africa/Johannesburg.ics index 5bdcbc52..da9a0be3 100644 --- a/zoneinfo/Africa/Johannesburg.ics +++ b/zoneinfo/Africa/Johannesburg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Johannesburg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Johannesburg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZNAME:SAST diff --git a/zoneinfo/Africa/Juba.ics b/zoneinfo/Africa/Juba.ics index 21fd6dd1..f66f30e6 100644 --- a/zoneinfo/Africa/Juba.ics +++ b/zoneinfo/Africa/Juba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Juba -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Juba +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Juba BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Kampala.ics b/zoneinfo/Africa/Kampala.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Kampala.ics +++ b/zoneinfo/Africa/Kampala.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Khartoum.ics b/zoneinfo/Africa/Khartoum.ics index e4a07631..3b609b36 100644 --- a/zoneinfo/Africa/Khartoum.ics +++ b/zoneinfo/Africa/Khartoum.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Khartoum -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Khartoum +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Khartoum BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Kigali.ics b/zoneinfo/Africa/Kigali.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Kigali.ics +++ b/zoneinfo/Africa/Kigali.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Kinshasa.ics b/zoneinfo/Africa/Kinshasa.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Kinshasa.ics +++ b/zoneinfo/Africa/Kinshasa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Lagos.ics b/zoneinfo/Africa/Lagos.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Lagos.ics +++ b/zoneinfo/Africa/Lagos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Libreville.ics b/zoneinfo/Africa/Libreville.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Libreville.ics +++ b/zoneinfo/Africa/Libreville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Lome.ics b/zoneinfo/Africa/Lome.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Lome.ics +++ b/zoneinfo/Africa/Lome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Luanda.ics b/zoneinfo/Africa/Luanda.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Luanda.ics +++ b/zoneinfo/Africa/Luanda.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Lubumbashi.ics b/zoneinfo/Africa/Lubumbashi.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Lubumbashi.ics +++ b/zoneinfo/Africa/Lubumbashi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Lusaka.ics b/zoneinfo/Africa/Lusaka.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Lusaka.ics +++ b/zoneinfo/Africa/Lusaka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Malabo.ics b/zoneinfo/Africa/Malabo.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Malabo.ics +++ b/zoneinfo/Africa/Malabo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Maputo.ics b/zoneinfo/Africa/Maputo.ics index b4ab148f..94326f56 100644 --- a/zoneinfo/Africa/Maputo.ics +++ b/zoneinfo/Africa/Maputo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Maputo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Maputo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Maseru.ics b/zoneinfo/Africa/Maseru.ics index 5bdcbc52..da9a0be3 100644 --- a/zoneinfo/Africa/Maseru.ics +++ b/zoneinfo/Africa/Maseru.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Johannesburg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Johannesburg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZNAME:SAST diff --git a/zoneinfo/Africa/Mbabane.ics b/zoneinfo/Africa/Mbabane.ics index 5bdcbc52..da9a0be3 100644 --- a/zoneinfo/Africa/Mbabane.ics +++ b/zoneinfo/Africa/Mbabane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Johannesburg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Johannesburg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZNAME:SAST diff --git a/zoneinfo/Africa/Mogadishu.ics b/zoneinfo/Africa/Mogadishu.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Mogadishu.ics +++ b/zoneinfo/Africa/Mogadishu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Monrovia.ics b/zoneinfo/Africa/Monrovia.ics index dcf36e62..46996ce1 100644 --- a/zoneinfo/Africa/Monrovia.ics +++ b/zoneinfo/Africa/Monrovia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Monrovia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Monrovia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Monrovia BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Nairobi.ics b/zoneinfo/Africa/Nairobi.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Africa/Nairobi.ics +++ b/zoneinfo/Africa/Nairobi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Ndjamena.ics b/zoneinfo/Africa/Ndjamena.ics index 41d0d21c..30d3e3a9 100644 --- a/zoneinfo/Africa/Ndjamena.ics +++ b/zoneinfo/Africa/Ndjamena.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Ndjamena -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Ndjamena +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Ndjamena BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Niamey.ics b/zoneinfo/Africa/Niamey.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Niamey.ics +++ b/zoneinfo/Africa/Niamey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Nouakchott.ics b/zoneinfo/Africa/Nouakchott.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Nouakchott.ics +++ b/zoneinfo/Africa/Nouakchott.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Ouagadougou.ics b/zoneinfo/Africa/Ouagadougou.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Ouagadougou.ics +++ b/zoneinfo/Africa/Ouagadougou.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Porto-Novo.ics b/zoneinfo/Africa/Porto-Novo.ics index a1aa1530..9e48ef5f 100644 --- a/zoneinfo/Africa/Porto-Novo.ics +++ b/zoneinfo/Africa/Porto-Novo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Lagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Lagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Sao_Tome.ics b/zoneinfo/Africa/Sao_Tome.ics index 1ef6e84b..6bf4d088 100644 --- a/zoneinfo/Africa/Sao_Tome.ics +++ b/zoneinfo/Africa/Sao_Tome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Sao_Tome -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Sao_Tome +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Sao_Tome BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Timbuktu.ics b/zoneinfo/Africa/Timbuktu.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Africa/Timbuktu.ics +++ b/zoneinfo/Africa/Timbuktu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Tripoli.ics b/zoneinfo/Africa/Tripoli.ics index 6d31ae4a..adf663b2 100644 --- a/zoneinfo/Africa/Tripoli.ics +++ b/zoneinfo/Africa/Tripoli.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Tripoli -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Tripoli +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Tripoli BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Africa/Tunis.ics b/zoneinfo/Africa/Tunis.ics index c228408c..5d9ff703 100644 --- a/zoneinfo/Africa/Tunis.ics +++ b/zoneinfo/Africa/Tunis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Tunis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Tunis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Tunis BEGIN:STANDARD TZNAME:CET diff --git a/zoneinfo/Africa/Windhoek.ics b/zoneinfo/Africa/Windhoek.ics index c3f5aab5..f65f250d 100644 --- a/zoneinfo/Africa/Windhoek.ics +++ b/zoneinfo/Africa/Windhoek.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Windhoek -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Windhoek +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Windhoek BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/America/Adak.ics b/zoneinfo/America/Adak.ics index b1fa8db9..8c4197f4 100644 --- a/zoneinfo/America/Adak.ics +++ b/zoneinfo/America/Adak.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Adak -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Adak +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZNAME:HDT diff --git a/zoneinfo/America/Anchorage.ics b/zoneinfo/America/Anchorage.ics index 021cbaa8..452152b1 100644 --- a/zoneinfo/America/Anchorage.ics +++ b/zoneinfo/America/Anchorage.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Anchorage -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Anchorage +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Anchorage BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Anguilla.ics b/zoneinfo/America/Anguilla.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Anguilla.ics +++ b/zoneinfo/America/Anguilla.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Antigua.ics b/zoneinfo/America/Antigua.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Antigua.ics +++ b/zoneinfo/America/Antigua.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Araguaina.ics b/zoneinfo/America/Araguaina.ics index 927aa55a..fc4831d1 100644 --- a/zoneinfo/America/Araguaina.ics +++ b/zoneinfo/America/Araguaina.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Araguaina -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Araguaina +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Araguaina BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Buenos_Aires.ics b/zoneinfo/America/Argentina/Buenos_Aires.ics index 2c246f93..15d53c36 100644 --- a/zoneinfo/America/Argentina/Buenos_Aires.ics +++ b/zoneinfo/America/Argentina/Buenos_Aires.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Buenos_Aires -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Buenos_Aires +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Buenos_Aires BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Catamarca.ics b/zoneinfo/America/Argentina/Catamarca.ics index 294005dc..451b8a05 100644 --- a/zoneinfo/America/Argentina/Catamarca.ics +++ b/zoneinfo/America/Argentina/Catamarca.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Catamarca -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Catamarca +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/ComodRivadavia.ics b/zoneinfo/America/Argentina/ComodRivadavia.ics index 294005dc..451b8a05 100644 --- a/zoneinfo/America/Argentina/ComodRivadavia.ics +++ b/zoneinfo/America/Argentina/ComodRivadavia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Catamarca -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Catamarca +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Cordoba.ics b/zoneinfo/America/Argentina/Cordoba.ics index 3f2b8e1e..256d0595 100644 --- a/zoneinfo/America/Argentina/Cordoba.ics +++ b/zoneinfo/America/Argentina/Cordoba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Cordoba -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Cordoba +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Jujuy.ics b/zoneinfo/America/Argentina/Jujuy.ics index 4c23bfc6..3634507a 100644 --- a/zoneinfo/America/Argentina/Jujuy.ics +++ b/zoneinfo/America/Argentina/Jujuy.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Jujuy -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Jujuy +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Jujuy BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/La_Rioja.ics b/zoneinfo/America/Argentina/La_Rioja.ics index 0598f57f..88f55a96 100644 --- a/zoneinfo/America/Argentina/La_Rioja.ics +++ b/zoneinfo/America/Argentina/La_Rioja.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/La_Rioja -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/La_Rioja +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/La_Rioja BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Mendoza.ics b/zoneinfo/America/Argentina/Mendoza.ics index a9905fbd..1d610ba9 100644 --- a/zoneinfo/America/Argentina/Mendoza.ics +++ b/zoneinfo/America/Argentina/Mendoza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Mendoza -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Mendoza +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Mendoza BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Rio_Gallegos.ics b/zoneinfo/America/Argentina/Rio_Gallegos.ics index 02d387aa..aded1dc3 100644 --- a/zoneinfo/America/Argentina/Rio_Gallegos.ics +++ b/zoneinfo/America/Argentina/Rio_Gallegos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Rio_Gallegos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Rio_Gallegos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Rio_Gallegos BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Salta.ics b/zoneinfo/America/Argentina/Salta.ics index 324b87e0..225b5605 100644 --- a/zoneinfo/America/Argentina/Salta.ics +++ b/zoneinfo/America/Argentina/Salta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Salta -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Salta +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Salta BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/San_Juan.ics b/zoneinfo/America/Argentina/San_Juan.ics index 457580ef..a965f7f0 100644 --- a/zoneinfo/America/Argentina/San_Juan.ics +++ b/zoneinfo/America/Argentina/San_Juan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/San_Juan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/San_Juan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/San_Juan BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/San_Luis.ics b/zoneinfo/America/Argentina/San_Luis.ics index c631571a..77e176b7 100644 --- a/zoneinfo/America/Argentina/San_Luis.ics +++ b/zoneinfo/America/Argentina/San_Luis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/San_Luis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/San_Luis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/San_Luis BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Tucuman.ics b/zoneinfo/America/Argentina/Tucuman.ics index 237d1bcf..7656c8e5 100644 --- a/zoneinfo/America/Argentina/Tucuman.ics +++ b/zoneinfo/America/Argentina/Tucuman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Tucuman -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Tucuman +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Tucuman BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Ushuaia.ics b/zoneinfo/America/Argentina/Ushuaia.ics index 9577ef26..cc1fe190 100644 --- a/zoneinfo/America/Argentina/Ushuaia.ics +++ b/zoneinfo/America/Argentina/Ushuaia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Ushuaia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Ushuaia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Ushuaia BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Aruba.ics b/zoneinfo/America/Aruba.ics index 271b60a4..150f6b67 100644 --- a/zoneinfo/America/Aruba.ics +++ b/zoneinfo/America/Aruba.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Curacao -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Curacao +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Asuncion.ics b/zoneinfo/America/Asuncion.ics index fb41fbc7..d3fa60f6 100644 --- a/zoneinfo/America/Asuncion.ics +++ b/zoneinfo/America/Asuncion.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Asuncion -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Asuncion +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Asuncion BEGIN:DAYLIGHT TZNAME:-03 diff --git a/zoneinfo/America/Atikokan.ics b/zoneinfo/America/Atikokan.ics index b234f27b..d2493fa4 100644 --- a/zoneinfo/America/Atikokan.ics +++ b/zoneinfo/America/Atikokan.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Atikokan -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Atikokan +TZID:/citadel.org/20211009_1/America/Panama +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0500 diff --git a/zoneinfo/America/Atka.ics b/zoneinfo/America/Atka.ics index b1fa8db9..8c4197f4 100644 --- a/zoneinfo/America/Atka.ics +++ b/zoneinfo/America/Atka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Adak -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Adak +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZNAME:HDT diff --git a/zoneinfo/America/Bahia.ics b/zoneinfo/America/Bahia.ics index b0b9a08e..caac3174 100644 --- a/zoneinfo/America/Bahia.ics +++ b/zoneinfo/America/Bahia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Bahia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Bahia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Bahia BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Bahia_Banderas.ics b/zoneinfo/America/Bahia_Banderas.ics index 8e43f05e..c54b67e5 100644 --- a/zoneinfo/America/Bahia_Banderas.ics +++ b/zoneinfo/America/Bahia_Banderas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Bahia_Banderas -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Bahia_Banderas +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Bahia_Banderas BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Barbados.ics b/zoneinfo/America/Barbados.ics index 01d5fe80..9d22d134 100644 --- a/zoneinfo/America/Barbados.ics +++ b/zoneinfo/America/Barbados.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Barbados -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Barbados +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Barbados BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Belem.ics b/zoneinfo/America/Belem.ics index 919786a3..636c31eb 100644 --- a/zoneinfo/America/Belem.ics +++ b/zoneinfo/America/Belem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Belem -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Belem +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Belem BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Belize.ics b/zoneinfo/America/Belize.ics index eff4c412..334d3143 100644 --- a/zoneinfo/America/Belize.ics +++ b/zoneinfo/America/Belize.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Belize -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Belize +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Belize BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Blanc-Sablon.ics b/zoneinfo/America/Blanc-Sablon.ics index eadbb6e6..150f6b67 100644 --- a/zoneinfo/America/Blanc-Sablon.ics +++ b/zoneinfo/America/Blanc-Sablon.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Blanc-Sablon -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Blanc-Sablon +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Boa_Vista.ics b/zoneinfo/America/Boa_Vista.ics index 1beb6006..ca34a3b6 100644 --- a/zoneinfo/America/Boa_Vista.ics +++ b/zoneinfo/America/Boa_Vista.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Boa_Vista -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Boa_Vista +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Boa_Vista BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Bogota.ics b/zoneinfo/America/Bogota.ics index 7357f24b..1be53ae3 100644 --- a/zoneinfo/America/Bogota.ics +++ b/zoneinfo/America/Bogota.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Bogota -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Bogota +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Bogota BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Boise.ics b/zoneinfo/America/Boise.ics index dabbfe49..cb675467 100644 --- a/zoneinfo/America/Boise.ics +++ b/zoneinfo/America/Boise.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Boise -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Boise +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Boise BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Buenos_Aires.ics b/zoneinfo/America/Buenos_Aires.ics index 2c246f93..15d53c36 100644 --- a/zoneinfo/America/Buenos_Aires.ics +++ b/zoneinfo/America/Buenos_Aires.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Buenos_Aires -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Buenos_Aires +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Buenos_Aires BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Cambridge_Bay.ics b/zoneinfo/America/Cambridge_Bay.ics index 5a11eb06..6a747661 100644 --- a/zoneinfo/America/Cambridge_Bay.ics +++ b/zoneinfo/America/Cambridge_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Cambridge_Bay -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Cambridge_Bay +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Cambridge_Bay BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Campo_Grande.ics b/zoneinfo/America/Campo_Grande.ics index 49948685..2b504f82 100644 --- a/zoneinfo/America/Campo_Grande.ics +++ b/zoneinfo/America/Campo_Grande.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Campo_Grande -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Campo_Grande +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Campo_Grande BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Cancun.ics b/zoneinfo/America/Cancun.ics index c0bc0725..791e80b4 100644 --- a/zoneinfo/America/Cancun.ics +++ b/zoneinfo/America/Cancun.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Cancun -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Cancun +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Cancun BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Caracas.ics b/zoneinfo/America/Caracas.ics index 780f71e1..1c9e2f52 100644 --- a/zoneinfo/America/Caracas.ics +++ b/zoneinfo/America/Caracas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Caracas -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Caracas +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Caracas BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Catamarca.ics b/zoneinfo/America/Catamarca.ics index 294005dc..451b8a05 100644 --- a/zoneinfo/America/Catamarca.ics +++ b/zoneinfo/America/Catamarca.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Catamarca -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Catamarca +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Cayenne.ics b/zoneinfo/America/Cayenne.ics index d561cc50..692d53f4 100644 --- a/zoneinfo/America/Cayenne.ics +++ b/zoneinfo/America/Cayenne.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Cayenne -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Cayenne +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Cayenne BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Cayman.ics b/zoneinfo/America/Cayman.ics index 99d0d48e..d2493fa4 100644 --- a/zoneinfo/America/Cayman.ics +++ b/zoneinfo/America/Cayman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Panama -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Panama +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Chicago.ics b/zoneinfo/America/Chicago.ics index bc29e43f..5e5b3f76 100644 --- a/zoneinfo/America/Chicago.ics +++ b/zoneinfo/America/Chicago.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Chicago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Chicago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Chicago BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Chihuahua.ics b/zoneinfo/America/Chihuahua.ics index 01294c89..3edd715c 100644 --- a/zoneinfo/America/Chihuahua.ics +++ b/zoneinfo/America/Chihuahua.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Chihuahua -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Chihuahua +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Chihuahua BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Coral_Harbour.ics b/zoneinfo/America/Coral_Harbour.ics index b234f27b..d2493fa4 100644 --- a/zoneinfo/America/Coral_Harbour.ics +++ b/zoneinfo/America/Coral_Harbour.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Atikokan -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Atikokan +TZID:/citadel.org/20211009_1/America/Panama +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST TZOFFSETFROM:-0500 diff --git a/zoneinfo/America/Cordoba.ics b/zoneinfo/America/Cordoba.ics index 3f2b8e1e..256d0595 100644 --- a/zoneinfo/America/Cordoba.ics +++ b/zoneinfo/America/Cordoba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Cordoba -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Cordoba +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Costa_Rica.ics b/zoneinfo/America/Costa_Rica.ics index e89fd153..664457d3 100644 --- a/zoneinfo/America/Costa_Rica.ics +++ b/zoneinfo/America/Costa_Rica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Costa_Rica -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Costa_Rica +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Costa_Rica BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Creston.ics b/zoneinfo/America/Creston.ics index c8fb5441..de8d3ee6 100644 --- a/zoneinfo/America/Creston.ics +++ b/zoneinfo/America/Creston.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Creston -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Creston +TZID:/citadel.org/20211009_1/America/Phoenix +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZNAME:MST TZOFFSETFROM:-0700 diff --git a/zoneinfo/America/Cuiaba.ics b/zoneinfo/America/Cuiaba.ics index a46dd9e3..7b93a7ee 100644 --- a/zoneinfo/America/Cuiaba.ics +++ b/zoneinfo/America/Cuiaba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Cuiaba -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Cuiaba +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Cuiaba BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Curacao.ics b/zoneinfo/America/Curacao.ics index 271b60a4..150f6b67 100644 --- a/zoneinfo/America/Curacao.ics +++ b/zoneinfo/America/Curacao.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Curacao -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Curacao +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Danmarkshavn.ics b/zoneinfo/America/Danmarkshavn.ics index 5903e879..4df33c04 100644 --- a/zoneinfo/America/Danmarkshavn.ics +++ b/zoneinfo/America/Danmarkshavn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Danmarkshavn -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Danmarkshavn +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Danmarkshavn BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/America/Dawson.ics b/zoneinfo/America/Dawson.ics index 5363ba18..23fbdd5c 100644 --- a/zoneinfo/America/Dawson.ics +++ b/zoneinfo/America/Dawson.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Dawson -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Dawson +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Dawson BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Dawson_Creek.ics b/zoneinfo/America/Dawson_Creek.ics index 2c6f570d..128b5aa4 100644 --- a/zoneinfo/America/Dawson_Creek.ics +++ b/zoneinfo/America/Dawson_Creek.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Dawson_Creek -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Dawson_Creek +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Dawson_Creek BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Denver.ics b/zoneinfo/America/Denver.ics index 79d6ba54..c5697a29 100644 --- a/zoneinfo/America/Denver.ics +++ b/zoneinfo/America/Denver.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Denver -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Denver +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Detroit.ics b/zoneinfo/America/Detroit.ics index e148a23d..db491782 100644 --- a/zoneinfo/America/Detroit.ics +++ b/zoneinfo/America/Detroit.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Detroit -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Detroit +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Detroit BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Dominica.ics b/zoneinfo/America/Dominica.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Dominica.ics +++ b/zoneinfo/America/Dominica.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Edmonton.ics b/zoneinfo/America/Edmonton.ics index 5045c4ce..de34f330 100644 --- a/zoneinfo/America/Edmonton.ics +++ b/zoneinfo/America/Edmonton.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Edmonton -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Edmonton +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Edmonton BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Eirunepe.ics b/zoneinfo/America/Eirunepe.ics index 7c29de57..90f5f0aa 100644 --- a/zoneinfo/America/Eirunepe.ics +++ b/zoneinfo/America/Eirunepe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Eirunepe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Eirunepe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Eirunepe BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/El_Salvador.ics b/zoneinfo/America/El_Salvador.ics index 914a6c4f..2301f495 100644 --- a/zoneinfo/America/El_Salvador.ics +++ b/zoneinfo/America/El_Salvador.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/El_Salvador -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/El_Salvador +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/El_Salvador BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Ensenada.ics b/zoneinfo/America/Ensenada.ics index 2141774b..e4f7ae6f 100644 --- a/zoneinfo/America/Ensenada.ics +++ b/zoneinfo/America/Ensenada.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Tijuana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Tijuana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Fort_Nelson.ics b/zoneinfo/America/Fort_Nelson.ics index 37e44f6b..df1e82ae 100644 --- a/zoneinfo/America/Fort_Nelson.ics +++ b/zoneinfo/America/Fort_Nelson.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Fort_Nelson -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Fort_Nelson +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Fort_Nelson BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Fort_Wayne.ics b/zoneinfo/America/Fort_Wayne.ics index 7db2a7f7..8319a36b 100644 --- a/zoneinfo/America/Fort_Wayne.ics +++ b/zoneinfo/America/Fort_Wayne.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Indianapolis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Fortaleza.ics b/zoneinfo/America/Fortaleza.ics index ed40decd..81b5795b 100644 --- a/zoneinfo/America/Fortaleza.ics +++ b/zoneinfo/America/Fortaleza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Fortaleza -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Fortaleza +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Fortaleza BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Glace_Bay.ics b/zoneinfo/America/Glace_Bay.ics index 45398b85..c1553aa1 100644 --- a/zoneinfo/America/Glace_Bay.ics +++ b/zoneinfo/America/Glace_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Glace_Bay -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Glace_Bay +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Glace_Bay BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Godthab.ics b/zoneinfo/America/Godthab.ics index 23077e13..36ff4069 100644 --- a/zoneinfo/America/Godthab.ics +++ b/zoneinfo/America/Godthab.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Nuuk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Nuuk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Nuuk BEGIN:DAYLIGHT TZNAME:-02 diff --git a/zoneinfo/America/Goose_Bay.ics b/zoneinfo/America/Goose_Bay.ics index 56520134..3ca987dc 100644 --- a/zoneinfo/America/Goose_Bay.ics +++ b/zoneinfo/America/Goose_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Goose_Bay -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Goose_Bay +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Goose_Bay BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Grand_Turk.ics b/zoneinfo/America/Grand_Turk.ics index 20b0ed93..0f78b1c6 100644 --- a/zoneinfo/America/Grand_Turk.ics +++ b/zoneinfo/America/Grand_Turk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Grand_Turk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Grand_Turk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Grand_Turk BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Grenada.ics b/zoneinfo/America/Grenada.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Grenada.ics +++ b/zoneinfo/America/Grenada.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Guadeloupe.ics b/zoneinfo/America/Guadeloupe.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Guadeloupe.ics +++ b/zoneinfo/America/Guadeloupe.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Guatemala.ics b/zoneinfo/America/Guatemala.ics index e19110e8..8d1acd35 100644 --- a/zoneinfo/America/Guatemala.ics +++ b/zoneinfo/America/Guatemala.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Guatemala -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Guatemala +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Guatemala BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Guayaquil.ics b/zoneinfo/America/Guayaquil.ics index 0c2a114c..438b027f 100644 --- a/zoneinfo/America/Guayaquil.ics +++ b/zoneinfo/America/Guayaquil.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Guayaquil -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Guayaquil +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Guayaquil BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Guyana.ics b/zoneinfo/America/Guyana.ics index 867f8404..0032e4e0 100644 --- a/zoneinfo/America/Guyana.ics +++ b/zoneinfo/America/Guyana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Guyana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Guyana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Guyana BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Halifax.ics b/zoneinfo/America/Halifax.ics index 101ec547..a16d5d69 100644 --- a/zoneinfo/America/Halifax.ics +++ b/zoneinfo/America/Halifax.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Halifax -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Halifax +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Halifax BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Havana.ics b/zoneinfo/America/Havana.ics index 484d9735..432da95e 100644 --- a/zoneinfo/America/Havana.ics +++ b/zoneinfo/America/Havana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Havana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Havana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Havana BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Hermosillo.ics b/zoneinfo/America/Hermosillo.ics index db15b5ca..612d4a3b 100644 --- a/zoneinfo/America/Hermosillo.ics +++ b/zoneinfo/America/Hermosillo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Hermosillo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Hermosillo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Hermosillo BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Indiana/Indianapolis.ics b/zoneinfo/America/Indiana/Indianapolis.ics index 7db2a7f7..8319a36b 100644 --- a/zoneinfo/America/Indiana/Indianapolis.ics +++ b/zoneinfo/America/Indiana/Indianapolis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Indianapolis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Knox.ics b/zoneinfo/America/Indiana/Knox.ics index 073fb48b..faa66d0a 100644 --- a/zoneinfo/America/Indiana/Knox.ics +++ b/zoneinfo/America/Indiana/Knox.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Knox -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Knox +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Indiana/Marengo.ics b/zoneinfo/America/Indiana/Marengo.ics index 6eabcad0..bcfebf93 100644 --- a/zoneinfo/America/Indiana/Marengo.ics +++ b/zoneinfo/America/Indiana/Marengo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Marengo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Marengo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Marengo BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Petersburg.ics b/zoneinfo/America/Indiana/Petersburg.ics index 583c230c..3cc71d0b 100644 --- a/zoneinfo/America/Indiana/Petersburg.ics +++ b/zoneinfo/America/Indiana/Petersburg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Petersburg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Petersburg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Petersburg BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Tell_City.ics b/zoneinfo/America/Indiana/Tell_City.ics index f44d128b..95d878fc 100644 --- a/zoneinfo/America/Indiana/Tell_City.ics +++ b/zoneinfo/America/Indiana/Tell_City.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Tell_City -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Tell_City +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Tell_City BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Indiana/Vevay.ics b/zoneinfo/America/Indiana/Vevay.ics index 42f7748e..f63ebcaa 100644 --- a/zoneinfo/America/Indiana/Vevay.ics +++ b/zoneinfo/America/Indiana/Vevay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Vevay -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Vevay +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Vevay BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Vincennes.ics b/zoneinfo/America/Indiana/Vincennes.ics index 9ee54d73..0eac7739 100644 --- a/zoneinfo/America/Indiana/Vincennes.ics +++ b/zoneinfo/America/Indiana/Vincennes.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Vincennes -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Vincennes +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Vincennes BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Winamac.ics b/zoneinfo/America/Indiana/Winamac.ics index f73eab96..ff293b39 100644 --- a/zoneinfo/America/Indiana/Winamac.ics +++ b/zoneinfo/America/Indiana/Winamac.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Winamac -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Winamac +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Winamac BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Indianapolis.ics b/zoneinfo/America/Indianapolis.ics index 7db2a7f7..8319a36b 100644 --- a/zoneinfo/America/Indianapolis.ics +++ b/zoneinfo/America/Indianapolis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Indianapolis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Inuvik.ics b/zoneinfo/America/Inuvik.ics index a0841d71..ab853291 100644 --- a/zoneinfo/America/Inuvik.ics +++ b/zoneinfo/America/Inuvik.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Inuvik -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Inuvik +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Inuvik BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Iqaluit.ics b/zoneinfo/America/Iqaluit.ics index ebe0e3ee..0adca411 100644 --- a/zoneinfo/America/Iqaluit.ics +++ b/zoneinfo/America/Iqaluit.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Iqaluit -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Iqaluit +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Iqaluit BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Jamaica.ics b/zoneinfo/America/Jamaica.ics index 1ef6b2d3..b7a45b61 100644 --- a/zoneinfo/America/Jamaica.ics +++ b/zoneinfo/America/Jamaica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Jamaica -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Jamaica +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Jamaica BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Jujuy.ics b/zoneinfo/America/Jujuy.ics index 4c23bfc6..3634507a 100644 --- a/zoneinfo/America/Jujuy.ics +++ b/zoneinfo/America/Jujuy.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Jujuy -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Jujuy +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Jujuy BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Juneau.ics b/zoneinfo/America/Juneau.ics index 689a6d6d..4e2b5a23 100644 --- a/zoneinfo/America/Juneau.ics +++ b/zoneinfo/America/Juneau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Juneau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Juneau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Juneau BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Kentucky/Louisville.ics b/zoneinfo/America/Kentucky/Louisville.ics index ff489d98..6be581c4 100644 --- a/zoneinfo/America/Kentucky/Louisville.ics +++ b/zoneinfo/America/Kentucky/Louisville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Kentucky/Louisville -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Kentucky/Louisville +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Kentucky/Louisville BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Kentucky/Monticello.ics b/zoneinfo/America/Kentucky/Monticello.ics index b4921d3f..2838c861 100644 --- a/zoneinfo/America/Kentucky/Monticello.ics +++ b/zoneinfo/America/Kentucky/Monticello.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Kentucky/Monticello -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Kentucky/Monticello +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Kentucky/Monticello BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Knox_IN.ics b/zoneinfo/America/Knox_IN.ics index 073fb48b..faa66d0a 100644 --- a/zoneinfo/America/Knox_IN.ics +++ b/zoneinfo/America/Knox_IN.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Knox -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Knox +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Kralendijk.ics b/zoneinfo/America/Kralendijk.ics index 271b60a4..150f6b67 100644 --- a/zoneinfo/America/Kralendijk.ics +++ b/zoneinfo/America/Kralendijk.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Curacao -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Curacao +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/La_Paz.ics b/zoneinfo/America/La_Paz.ics index 5178e1a3..626d9fa4 100644 --- a/zoneinfo/America/La_Paz.ics +++ b/zoneinfo/America/La_Paz.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/La_Paz -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/La_Paz +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/La_Paz BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Lima.ics b/zoneinfo/America/Lima.ics index f30e4864..c60f688d 100644 --- a/zoneinfo/America/Lima.ics +++ b/zoneinfo/America/Lima.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Lima -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Lima +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Lima BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Los_Angeles.ics b/zoneinfo/America/Los_Angeles.ics index d495ce63..8545d95d 100644 --- a/zoneinfo/America/Los_Angeles.ics +++ b/zoneinfo/America/Los_Angeles.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Los_Angeles -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Los_Angeles +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Louisville.ics b/zoneinfo/America/Louisville.ics index ff489d98..6be581c4 100644 --- a/zoneinfo/America/Louisville.ics +++ b/zoneinfo/America/Louisville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Kentucky/Louisville -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Kentucky/Louisville +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Kentucky/Louisville BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Lower_Princes.ics b/zoneinfo/America/Lower_Princes.ics index 271b60a4..150f6b67 100644 --- a/zoneinfo/America/Lower_Princes.ics +++ b/zoneinfo/America/Lower_Princes.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Curacao -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Curacao +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Maceio.ics b/zoneinfo/America/Maceio.ics index ddad13b5..08b130c9 100644 --- a/zoneinfo/America/Maceio.ics +++ b/zoneinfo/America/Maceio.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Maceio -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Maceio +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Maceio BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Managua.ics b/zoneinfo/America/Managua.ics index 1326f2c1..37cb0d8d 100644 --- a/zoneinfo/America/Managua.ics +++ b/zoneinfo/America/Managua.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Managua -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Managua +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Managua BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Manaus.ics b/zoneinfo/America/Manaus.ics index 63581145..5ceb8664 100644 --- a/zoneinfo/America/Manaus.ics +++ b/zoneinfo/America/Manaus.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Manaus -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Manaus +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Manaus BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Marigot.ics b/zoneinfo/America/Marigot.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Marigot.ics +++ b/zoneinfo/America/Marigot.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Martinique.ics b/zoneinfo/America/Martinique.ics index a6327388..93dd1a88 100644 --- a/zoneinfo/America/Martinique.ics +++ b/zoneinfo/America/Martinique.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Martinique -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Martinique +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Martinique BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Matamoros.ics b/zoneinfo/America/Matamoros.ics index 2dc8d8d3..89c6512e 100644 --- a/zoneinfo/America/Matamoros.ics +++ b/zoneinfo/America/Matamoros.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Matamoros -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Matamoros +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Matamoros BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Mazatlan.ics b/zoneinfo/America/Mazatlan.ics index 79e4194b..bfd98fbc 100644 --- a/zoneinfo/America/Mazatlan.ics +++ b/zoneinfo/America/Mazatlan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Mazatlan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Mazatlan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Mazatlan BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Mendoza.ics b/zoneinfo/America/Mendoza.ics index a9905fbd..1d610ba9 100644 --- a/zoneinfo/America/Mendoza.ics +++ b/zoneinfo/America/Mendoza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Mendoza -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Mendoza +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Mendoza BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Menominee.ics b/zoneinfo/America/Menominee.ics index 8e7ef100..3a9f4728 100644 --- a/zoneinfo/America/Menominee.ics +++ b/zoneinfo/America/Menominee.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Menominee -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Menominee +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Menominee BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Merida.ics b/zoneinfo/America/Merida.ics index 7b1d3093..46b03913 100644 --- a/zoneinfo/America/Merida.ics +++ b/zoneinfo/America/Merida.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Merida -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Merida +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Merida BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Metlakatla.ics b/zoneinfo/America/Metlakatla.ics index 123782d4..4cf63b0d 100644 --- a/zoneinfo/America/Metlakatla.ics +++ b/zoneinfo/America/Metlakatla.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Metlakatla -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Metlakatla +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Metlakatla BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Mexico_City.ics b/zoneinfo/America/Mexico_City.ics index 8f72edb3..3def11f5 100644 --- a/zoneinfo/America/Mexico_City.ics +++ b/zoneinfo/America/Mexico_City.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Mexico_City -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Mexico_City +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Mexico_City BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Miquelon.ics b/zoneinfo/America/Miquelon.ics index 4659376d..9877303c 100644 --- a/zoneinfo/America/Miquelon.ics +++ b/zoneinfo/America/Miquelon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Miquelon -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Miquelon +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Miquelon BEGIN:DAYLIGHT TZNAME:-02 diff --git a/zoneinfo/America/Moncton.ics b/zoneinfo/America/Moncton.ics index a28b78e8..690c39f6 100644 --- a/zoneinfo/America/Moncton.ics +++ b/zoneinfo/America/Moncton.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Moncton -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Moncton +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Moncton BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Monterrey.ics b/zoneinfo/America/Monterrey.ics index 067c88a6..ab238033 100644 --- a/zoneinfo/America/Monterrey.ics +++ b/zoneinfo/America/Monterrey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Monterrey -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Monterrey +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Monterrey BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Montevideo.ics b/zoneinfo/America/Montevideo.ics index 2b2f793b..97628c26 100644 --- a/zoneinfo/America/Montevideo.ics +++ b/zoneinfo/America/Montevideo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Montevideo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Montevideo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Montevideo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Montreal.ics b/zoneinfo/America/Montreal.ics index 185ff4b4..30761dab 100644 --- a/zoneinfo/America/Montreal.ics +++ b/zoneinfo/America/Montreal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Toronto -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Toronto +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Montserrat.ics b/zoneinfo/America/Montserrat.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Montserrat.ics +++ b/zoneinfo/America/Montserrat.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Nassau.ics b/zoneinfo/America/Nassau.ics index 5236f602..30761dab 100644 --- a/zoneinfo/America/Nassau.ics +++ b/zoneinfo/America/Nassau.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Nassau -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Nassau +TZID:/citadel.org/20211009_1/America/Toronto +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT TZOFFSETFROM:-0500 diff --git a/zoneinfo/America/New_York.ics b/zoneinfo/America/New_York.ics index 29ac5969..d81c013c 100644 --- a/zoneinfo/America/New_York.ics +++ b/zoneinfo/America/New_York.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/New_York -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/New_York +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Nipigon.ics b/zoneinfo/America/Nipigon.ics index 2102e545..5d5435cf 100644 --- a/zoneinfo/America/Nipigon.ics +++ b/zoneinfo/America/Nipigon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Nipigon -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Nipigon +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Nipigon BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Nome.ics b/zoneinfo/America/Nome.ics index f054fd86..b060b88b 100644 --- a/zoneinfo/America/Nome.ics +++ b/zoneinfo/America/Nome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Nome -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Nome +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Nome BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Noronha.ics b/zoneinfo/America/Noronha.ics index 580b9364..20804163 100644 --- a/zoneinfo/America/Noronha.ics +++ b/zoneinfo/America/Noronha.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Noronha -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Noronha +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Noronha BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/America/North_Dakota/Beulah.ics b/zoneinfo/America/North_Dakota/Beulah.ics index 7c59bcc5..e45c32b7 100644 --- a/zoneinfo/America/North_Dakota/Beulah.ics +++ b/zoneinfo/America/North_Dakota/Beulah.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/North_Dakota/Beulah -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/North_Dakota/Beulah +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/North_Dakota/Beulah BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/North_Dakota/Center.ics b/zoneinfo/America/North_Dakota/Center.ics index 5c88f1f5..a1f0eff5 100644 --- a/zoneinfo/America/North_Dakota/Center.ics +++ b/zoneinfo/America/North_Dakota/Center.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/North_Dakota/Center -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/North_Dakota/Center +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/North_Dakota/Center BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/North_Dakota/New_Salem.ics b/zoneinfo/America/North_Dakota/New_Salem.ics index 15e9f24d..9460e80d 100644 --- a/zoneinfo/America/North_Dakota/New_Salem.ics +++ b/zoneinfo/America/North_Dakota/New_Salem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/North_Dakota/New_Salem -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/North_Dakota/New_Salem +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/North_Dakota/New_Salem BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Nuuk.ics b/zoneinfo/America/Nuuk.ics index 23077e13..36ff4069 100644 --- a/zoneinfo/America/Nuuk.ics +++ b/zoneinfo/America/Nuuk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Nuuk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Nuuk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Nuuk BEGIN:DAYLIGHT TZNAME:-02 diff --git a/zoneinfo/America/Ojinaga.ics b/zoneinfo/America/Ojinaga.ics index 9d667506..f16a4d11 100644 --- a/zoneinfo/America/Ojinaga.ics +++ b/zoneinfo/America/Ojinaga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Ojinaga -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Ojinaga +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Ojinaga BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Panama.ics b/zoneinfo/America/Panama.ics index 99d0d48e..d2493fa4 100644 --- a/zoneinfo/America/Panama.ics +++ b/zoneinfo/America/Panama.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Panama -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Panama +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Pangnirtung.ics b/zoneinfo/America/Pangnirtung.ics index 605243b5..6a0fe6d2 100644 --- a/zoneinfo/America/Pangnirtung.ics +++ b/zoneinfo/America/Pangnirtung.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Pangnirtung -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Pangnirtung +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Pangnirtung BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Paramaribo.ics b/zoneinfo/America/Paramaribo.ics index 5811b7a6..9821d3e4 100644 --- a/zoneinfo/America/Paramaribo.ics +++ b/zoneinfo/America/Paramaribo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Paramaribo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Paramaribo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Paramaribo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Phoenix.ics b/zoneinfo/America/Phoenix.ics index df6a2521..de8d3ee6 100644 --- a/zoneinfo/America/Phoenix.ics +++ b/zoneinfo/America/Phoenix.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Phoenix -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Phoenix +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Port-au-Prince.ics b/zoneinfo/America/Port-au-Prince.ics index 5061e561..bed6c047 100644 --- a/zoneinfo/America/Port-au-Prince.ics +++ b/zoneinfo/America/Port-au-Prince.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port-au-Prince -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Port-au-Prince +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Port-au-Prince BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Port_of_Spain.ics b/zoneinfo/America/Port_of_Spain.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Port_of_Spain.ics +++ b/zoneinfo/America/Port_of_Spain.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Porto_Acre.ics b/zoneinfo/America/Porto_Acre.ics index 3d4c27fb..70e10b53 100644 --- a/zoneinfo/America/Porto_Acre.ics +++ b/zoneinfo/America/Porto_Acre.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Rio_Branco -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Rio_Branco +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Porto_Velho.ics b/zoneinfo/America/Porto_Velho.ics index 567f4d5d..f8a3c36a 100644 --- a/zoneinfo/America/Porto_Velho.ics +++ b/zoneinfo/America/Porto_Velho.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Porto_Velho -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Porto_Velho +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Porto_Velho BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Puerto_Rico.ics b/zoneinfo/America/Puerto_Rico.ics index 78455c01..150f6b67 100644 --- a/zoneinfo/America/Puerto_Rico.ics +++ b/zoneinfo/America/Puerto_Rico.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Puerto_Rico -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Punta_Arenas.ics b/zoneinfo/America/Punta_Arenas.ics index 23692b25..c0d02f38 100644 --- a/zoneinfo/America/Punta_Arenas.ics +++ b/zoneinfo/America/Punta_Arenas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Punta_Arenas -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Punta_Arenas +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Punta_Arenas BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Rainy_River.ics b/zoneinfo/America/Rainy_River.ics index cf58ef93..1c05224c 100644 --- a/zoneinfo/America/Rainy_River.ics +++ b/zoneinfo/America/Rainy_River.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Rainy_River -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Rainy_River +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Rainy_River BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Rankin_Inlet.ics b/zoneinfo/America/Rankin_Inlet.ics index 81bf62a9..2d5a08a8 100644 --- a/zoneinfo/America/Rankin_Inlet.ics +++ b/zoneinfo/America/Rankin_Inlet.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Rankin_Inlet -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Rankin_Inlet +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Rankin_Inlet BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Recife.ics b/zoneinfo/America/Recife.ics index bcc36dbd..292bff3f 100644 --- a/zoneinfo/America/Recife.ics +++ b/zoneinfo/America/Recife.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Recife -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Recife +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Recife BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Regina.ics b/zoneinfo/America/Regina.ics index c15afef0..499a516c 100644 --- a/zoneinfo/America/Regina.ics +++ b/zoneinfo/America/Regina.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Regina -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Regina +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Regina BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Resolute.ics b/zoneinfo/America/Resolute.ics index 377e8e3b..e7cd550b 100644 --- a/zoneinfo/America/Resolute.ics +++ b/zoneinfo/America/Resolute.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Resolute -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Resolute +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Resolute BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Rio_Branco.ics b/zoneinfo/America/Rio_Branco.ics index 3d4c27fb..70e10b53 100644 --- a/zoneinfo/America/Rio_Branco.ics +++ b/zoneinfo/America/Rio_Branco.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Rio_Branco -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Rio_Branco +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Rosario.ics b/zoneinfo/America/Rosario.ics index 3f2b8e1e..256d0595 100644 --- a/zoneinfo/America/Rosario.ics +++ b/zoneinfo/America/Rosario.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Argentina/Cordoba -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Argentina/Cordoba +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Santa_Isabel.ics b/zoneinfo/America/Santa_Isabel.ics index 2141774b..e4f7ae6f 100644 --- a/zoneinfo/America/Santa_Isabel.ics +++ b/zoneinfo/America/Santa_Isabel.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Tijuana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Tijuana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Santarem.ics b/zoneinfo/America/Santarem.ics index 340957cd..1dca2df7 100644 --- a/zoneinfo/America/Santarem.ics +++ b/zoneinfo/America/Santarem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Santarem -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Santarem +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Santarem BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Santiago.ics b/zoneinfo/America/Santiago.ics index b6c15aa8..db805e2b 100644 --- a/zoneinfo/America/Santiago.ics +++ b/zoneinfo/America/Santiago.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Santiago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Santiago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Santiago BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Santo_Domingo.ics b/zoneinfo/America/Santo_Domingo.ics index 7c03ec86..01ce74f9 100644 --- a/zoneinfo/America/Santo_Domingo.ics +++ b/zoneinfo/America/Santo_Domingo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Santo_Domingo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Santo_Domingo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Santo_Domingo BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Sao_Paulo.ics b/zoneinfo/America/Sao_Paulo.ics index 16996961..6c44e413 100644 --- a/zoneinfo/America/Sao_Paulo.ics +++ b/zoneinfo/America/Sao_Paulo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Sao_Paulo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Sao_Paulo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Sao_Paulo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Scoresbysund.ics b/zoneinfo/America/Scoresbysund.ics index a8992e1b..529ac08c 100644 --- a/zoneinfo/America/Scoresbysund.ics +++ b/zoneinfo/America/Scoresbysund.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Scoresbysund -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Scoresbysund +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Scoresbysund BEGIN:DAYLIGHT TZNAME:+00 diff --git a/zoneinfo/America/Shiprock.ics b/zoneinfo/America/Shiprock.ics index 79d6ba54..c5697a29 100644 --- a/zoneinfo/America/Shiprock.ics +++ b/zoneinfo/America/Shiprock.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Denver -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Denver +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Sitka.ics b/zoneinfo/America/Sitka.ics index 9d22ddb8..8c2c2d9c 100644 --- a/zoneinfo/America/Sitka.ics +++ b/zoneinfo/America/Sitka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Sitka -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Sitka +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Sitka BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/St_Barthelemy.ics b/zoneinfo/America/St_Barthelemy.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/St_Barthelemy.ics +++ b/zoneinfo/America/St_Barthelemy.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/St_Johns.ics b/zoneinfo/America/St_Johns.ics index 7095decf..81921e8c 100644 --- a/zoneinfo/America/St_Johns.ics +++ b/zoneinfo/America/St_Johns.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/St_Johns -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/St_Johns +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/St_Johns BEGIN:STANDARD TZNAME:NST diff --git a/zoneinfo/America/St_Kitts.ics b/zoneinfo/America/St_Kitts.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/St_Kitts.ics +++ b/zoneinfo/America/St_Kitts.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/St_Lucia.ics b/zoneinfo/America/St_Lucia.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/St_Lucia.ics +++ b/zoneinfo/America/St_Lucia.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/St_Thomas.ics b/zoneinfo/America/St_Thomas.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/St_Thomas.ics +++ b/zoneinfo/America/St_Thomas.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/St_Vincent.ics b/zoneinfo/America/St_Vincent.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/St_Vincent.ics +++ b/zoneinfo/America/St_Vincent.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Swift_Current.ics b/zoneinfo/America/Swift_Current.ics index 08976621..86ce049c 100644 --- a/zoneinfo/America/Swift_Current.ics +++ b/zoneinfo/America/Swift_Current.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Swift_Current -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Swift_Current +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Swift_Current BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Tegucigalpa.ics b/zoneinfo/America/Tegucigalpa.ics index 8ed7c4f7..6ca11f70 100644 --- a/zoneinfo/America/Tegucigalpa.ics +++ b/zoneinfo/America/Tegucigalpa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Tegucigalpa -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Tegucigalpa +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Tegucigalpa BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Thule.ics b/zoneinfo/America/Thule.ics index 326ec0fb..a123d368 100644 --- a/zoneinfo/America/Thule.ics +++ b/zoneinfo/America/Thule.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Thule -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Thule +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Thule BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Thunder_Bay.ics b/zoneinfo/America/Thunder_Bay.ics index c1ed1208..6f235fff 100644 --- a/zoneinfo/America/Thunder_Bay.ics +++ b/zoneinfo/America/Thunder_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Thunder_Bay -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Thunder_Bay +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Thunder_Bay BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Tijuana.ics b/zoneinfo/America/Tijuana.ics index 2141774b..e4f7ae6f 100644 --- a/zoneinfo/America/Tijuana.ics +++ b/zoneinfo/America/Tijuana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Tijuana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Tijuana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Toronto.ics b/zoneinfo/America/Toronto.ics index 185ff4b4..30761dab 100644 --- a/zoneinfo/America/Toronto.ics +++ b/zoneinfo/America/Toronto.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Toronto -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Toronto +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Tortola.ics b/zoneinfo/America/Tortola.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Tortola.ics +++ b/zoneinfo/America/Tortola.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Vancouver.ics b/zoneinfo/America/Vancouver.ics index 10446a77..313e9353 100644 --- a/zoneinfo/America/Vancouver.ics +++ b/zoneinfo/America/Vancouver.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Vancouver -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Vancouver +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Vancouver BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Virgin.ics b/zoneinfo/America/Virgin.ics index 04cce7a2..150f6b67 100644 --- a/zoneinfo/America/Virgin.ics +++ b/zoneinfo/America/Virgin.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Port_of_Spain -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:America/Port_of_Spain +TZID:/citadel.org/20211009_1/America/Puerto_Rico +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST TZOFFSETFROM:-0400 diff --git a/zoneinfo/America/Whitehorse.ics b/zoneinfo/America/Whitehorse.ics index 26ea5165..6b0ee092 100644 --- a/zoneinfo/America/Whitehorse.ics +++ b/zoneinfo/America/Whitehorse.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Whitehorse -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Whitehorse +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Whitehorse BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Winnipeg.ics b/zoneinfo/America/Winnipeg.ics index d755f390..71bc0693 100644 --- a/zoneinfo/America/Winnipeg.ics +++ b/zoneinfo/America/Winnipeg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Winnipeg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Winnipeg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Winnipeg BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Yakutat.ics b/zoneinfo/America/Yakutat.ics index db93ca30..410500a0 100644 --- a/zoneinfo/America/Yakutat.ics +++ b/zoneinfo/America/Yakutat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Yakutat -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Yakutat +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Yakutat BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Yellowknife.ics b/zoneinfo/America/Yellowknife.ics index 7d113141..fb648a36 100644 --- a/zoneinfo/America/Yellowknife.ics +++ b/zoneinfo/America/Yellowknife.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Yellowknife -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Yellowknife +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Yellowknife BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Antarctica/Casey.ics b/zoneinfo/Antarctica/Casey.ics index 1785ccbe..de999fb1 100644 --- a/zoneinfo/Antarctica/Casey.ics +++ b/zoneinfo/Antarctica/Casey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Casey -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Casey +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Casey BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Antarctica/Davis.ics b/zoneinfo/Antarctica/Davis.ics index 9a78ae4f..0a688743 100644 --- a/zoneinfo/Antarctica/Davis.ics +++ b/zoneinfo/Antarctica/Davis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Davis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Davis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Davis BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Antarctica/DumontDUrville.ics b/zoneinfo/Antarctica/DumontDUrville.ics index bee30c41..b2ee3c97 100644 --- a/zoneinfo/Antarctica/DumontDUrville.ics +++ b/zoneinfo/Antarctica/DumontDUrville.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/DumontDUrville -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:Antarctica/DumontDUrville +TZID:/citadel.org/20211009_1/Pacific/Port_Moresby +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:Pacific/Port_Moresby BEGIN:STANDARD TZNAME:+10 TZOFFSETFROM:+1000 diff --git a/zoneinfo/Antarctica/Macquarie.ics b/zoneinfo/Antarctica/Macquarie.ics index 6d462bf3..9c116162 100644 --- a/zoneinfo/Antarctica/Macquarie.ics +++ b/zoneinfo/Antarctica/Macquarie.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Macquarie -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Macquarie +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Macquarie BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Antarctica/Mawson.ics b/zoneinfo/Antarctica/Mawson.ics index 462c8d85..c5f9880d 100644 --- a/zoneinfo/Antarctica/Mawson.ics +++ b/zoneinfo/Antarctica/Mawson.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Mawson -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Mawson +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Mawson BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Antarctica/McMurdo.ics b/zoneinfo/Antarctica/McMurdo.ics index 22f2072d..96762274 100644 --- a/zoneinfo/Antarctica/McMurdo.ics +++ b/zoneinfo/Antarctica/McMurdo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Auckland -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Auckland +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Antarctica/Palmer.ics b/zoneinfo/Antarctica/Palmer.ics index 7f70c8d1..8b0ce0a0 100644 --- a/zoneinfo/Antarctica/Palmer.ics +++ b/zoneinfo/Antarctica/Palmer.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Palmer -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Palmer +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Palmer BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Antarctica/Rothera.ics b/zoneinfo/Antarctica/Rothera.ics index e0af89e4..20afc145 100644 --- a/zoneinfo/Antarctica/Rothera.ics +++ b/zoneinfo/Antarctica/Rothera.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Rothera -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Rothera +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Rothera BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Antarctica/South_Pole.ics b/zoneinfo/Antarctica/South_Pole.ics index 22f2072d..96762274 100644 --- a/zoneinfo/Antarctica/South_Pole.ics +++ b/zoneinfo/Antarctica/South_Pole.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Auckland -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Auckland +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Antarctica/Syowa.ics b/zoneinfo/Antarctica/Syowa.ics index a4584cd2..6c7fd19a 100644 --- a/zoneinfo/Antarctica/Syowa.ics +++ b/zoneinfo/Antarctica/Syowa.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Syowa -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:Antarctica/Syowa +TZID:/citadel.org/20211009_1/Asia/Riyadh +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 TZOFFSETFROM:+0300 diff --git a/zoneinfo/Antarctica/Troll.ics b/zoneinfo/Antarctica/Troll.ics index 7175a335..a21d26d0 100644 --- a/zoneinfo/Antarctica/Troll.ics +++ b/zoneinfo/Antarctica/Troll.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Troll -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Troll +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Troll BEGIN:DAYLIGHT TZNAME:+02 diff --git a/zoneinfo/Antarctica/Vostok.ics b/zoneinfo/Antarctica/Vostok.ics index 5af48a09..3651f507 100644 --- a/zoneinfo/Antarctica/Vostok.ics +++ b/zoneinfo/Antarctica/Vostok.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Antarctica/Vostok -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Antarctica/Vostok +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Antarctica/Vostok BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Arctic/Longyearbyen.ics b/zoneinfo/Arctic/Longyearbyen.ics index e337e96f..9f8f9a19 100644 --- a/zoneinfo/Arctic/Longyearbyen.ics +++ b/zoneinfo/Arctic/Longyearbyen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Oslo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Oslo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Asia/Aden.ics b/zoneinfo/Asia/Aden.ics index cde808f1..6c7fd19a 100644 --- a/zoneinfo/Asia/Aden.ics +++ b/zoneinfo/Asia/Aden.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Riyadh -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Riyadh +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Almaty.ics b/zoneinfo/Asia/Almaty.ics index 8fb330dc..88bcc40e 100644 --- a/zoneinfo/Asia/Almaty.ics +++ b/zoneinfo/Asia/Almaty.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Almaty -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Almaty +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Almaty BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Amman.ics b/zoneinfo/Asia/Amman.ics index f1264538..890afae8 100644 --- a/zoneinfo/Asia/Amman.ics +++ b/zoneinfo/Asia/Amman.ics @@ -2,16 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Amman -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Amman +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Amman -BEGIN:DAYLIGHT -TZNAME:EEST -TZOFFSETFROM:+0200 -TZOFFSETTO:+0300 -DTSTART:19700327T000000 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR -END:DAYLIGHT BEGIN:STANDARD TZNAME:EET TZOFFSETFROM:+0300 @@ -19,5 +12,12 @@ TZOFFSETTO:+0200 DTSTART:19701030T010000 RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR END:STANDARD +BEGIN:DAYLIGHT +TZNAME:EEST +TZOFFSETFROM:+0200 +TZOFFSETTO:+0300 +DTSTART:19700227T000000 +RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=-1FR +END:DAYLIGHT END:VTIMEZONE END:VCALENDAR diff --git a/zoneinfo/Asia/Anadyr.ics b/zoneinfo/Asia/Anadyr.ics index 715a86b1..371c1b28 100644 --- a/zoneinfo/Asia/Anadyr.ics +++ b/zoneinfo/Asia/Anadyr.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Anadyr -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Anadyr +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Anadyr BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Asia/Aqtau.ics b/zoneinfo/Asia/Aqtau.ics index 9f5abdf7..974f55dd 100644 --- a/zoneinfo/Asia/Aqtau.ics +++ b/zoneinfo/Asia/Aqtau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Aqtau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Aqtau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Aqtau BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Aqtobe.ics b/zoneinfo/Asia/Aqtobe.ics index 8a56e617..d2dc7b4c 100644 --- a/zoneinfo/Asia/Aqtobe.ics +++ b/zoneinfo/Asia/Aqtobe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Aqtobe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Aqtobe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Aqtobe BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Ashgabat.ics b/zoneinfo/Asia/Ashgabat.ics index 3b77e236..4c378f14 100644 --- a/zoneinfo/Asia/Ashgabat.ics +++ b/zoneinfo/Asia/Ashgabat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ashgabat -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ashgabat +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ashgabat BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Ashkhabad.ics b/zoneinfo/Asia/Ashkhabad.ics index 3b77e236..4c378f14 100644 --- a/zoneinfo/Asia/Ashkhabad.ics +++ b/zoneinfo/Asia/Ashkhabad.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ashgabat -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ashgabat +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ashgabat BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Atyrau.ics b/zoneinfo/Asia/Atyrau.ics index a4405b94..9b7e7a61 100644 --- a/zoneinfo/Asia/Atyrau.ics +++ b/zoneinfo/Asia/Atyrau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Atyrau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Atyrau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Atyrau BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Baghdad.ics b/zoneinfo/Asia/Baghdad.ics index 375f09c6..88dce613 100644 --- a/zoneinfo/Asia/Baghdad.ics +++ b/zoneinfo/Asia/Baghdad.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Baghdad -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Baghdad +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Baghdad BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Bahrain.ics b/zoneinfo/Asia/Bahrain.ics index 8d9d581e..1bc4082b 100644 --- a/zoneinfo/Asia/Bahrain.ics +++ b/zoneinfo/Asia/Bahrain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Qatar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Qatar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Qatar BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Baku.ics b/zoneinfo/Asia/Baku.ics index b3275290..454d643d 100644 --- a/zoneinfo/Asia/Baku.ics +++ b/zoneinfo/Asia/Baku.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Baku -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Baku +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Baku BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Bangkok.ics b/zoneinfo/Asia/Bangkok.ics index ad63ebfb..a2da49b8 100644 --- a/zoneinfo/Asia/Bangkok.ics +++ b/zoneinfo/Asia/Bangkok.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Bangkok -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Bangkok +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Barnaul.ics b/zoneinfo/Asia/Barnaul.ics index a1a63893..c1311ae6 100644 --- a/zoneinfo/Asia/Barnaul.ics +++ b/zoneinfo/Asia/Barnaul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Barnaul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Barnaul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Barnaul BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Beirut.ics b/zoneinfo/Asia/Beirut.ics index 473e9972..aa4aed1c 100644 --- a/zoneinfo/Asia/Beirut.ics +++ b/zoneinfo/Asia/Beirut.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Beirut -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Beirut +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Beirut BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Asia/Bishkek.ics b/zoneinfo/Asia/Bishkek.ics index 792506cd..085420af 100644 --- a/zoneinfo/Asia/Bishkek.ics +++ b/zoneinfo/Asia/Bishkek.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Bishkek -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Bishkek +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Bishkek BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Brunei.ics b/zoneinfo/Asia/Brunei.ics index 519c1a76..f0e9d303 100644 --- a/zoneinfo/Asia/Brunei.ics +++ b/zoneinfo/Asia/Brunei.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Brunei -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Brunei +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Brunei BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Calcutta.ics b/zoneinfo/Asia/Calcutta.ics index af969950..75e96821 100644 --- a/zoneinfo/Asia/Calcutta.ics +++ b/zoneinfo/Asia/Calcutta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kolkata -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kolkata +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kolkata BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Asia/Chita.ics b/zoneinfo/Asia/Chita.ics index 889e683f..a8515175 100644 --- a/zoneinfo/Asia/Chita.ics +++ b/zoneinfo/Asia/Chita.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Chita -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Chita +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Chita BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Choibalsan.ics b/zoneinfo/Asia/Choibalsan.ics index df8ac10d..470c0397 100644 --- a/zoneinfo/Asia/Choibalsan.ics +++ b/zoneinfo/Asia/Choibalsan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Choibalsan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Choibalsan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Choibalsan BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Chongqing.ics b/zoneinfo/Asia/Chongqing.ics index ee91b6ac..fb552ce7 100644 --- a/zoneinfo/Asia/Chongqing.ics +++ b/zoneinfo/Asia/Chongqing.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Shanghai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Shanghai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Chungking.ics b/zoneinfo/Asia/Chungking.ics index ee91b6ac..fb552ce7 100644 --- a/zoneinfo/Asia/Chungking.ics +++ b/zoneinfo/Asia/Chungking.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Shanghai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Shanghai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Colombo.ics b/zoneinfo/Asia/Colombo.ics index dbc8bc6f..8ecd9b4c 100644 --- a/zoneinfo/Asia/Colombo.ics +++ b/zoneinfo/Asia/Colombo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Colombo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Colombo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Colombo BEGIN:STANDARD TZNAME:+0530 diff --git a/zoneinfo/Asia/Dacca.ics b/zoneinfo/Asia/Dacca.ics index 36c48804..899b48d4 100644 --- a/zoneinfo/Asia/Dacca.ics +++ b/zoneinfo/Asia/Dacca.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Dhaka -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Dhaka +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Dhaka BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Damascus.ics b/zoneinfo/Asia/Damascus.ics index 005ef54d..75d601c5 100644 --- a/zoneinfo/Asia/Damascus.ics +++ b/zoneinfo/Asia/Damascus.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Damascus -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Damascus +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Damascus BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Asia/Dhaka.ics b/zoneinfo/Asia/Dhaka.ics index 36c48804..899b48d4 100644 --- a/zoneinfo/Asia/Dhaka.ics +++ b/zoneinfo/Asia/Dhaka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Dhaka -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Dhaka +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Dhaka BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Dili.ics b/zoneinfo/Asia/Dili.ics index ead8e002..0ff60c4c 100644 --- a/zoneinfo/Asia/Dili.ics +++ b/zoneinfo/Asia/Dili.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Dili -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Dili +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Dili BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Dubai.ics b/zoneinfo/Asia/Dubai.ics index 4c69cc35..da7a0a10 100644 --- a/zoneinfo/Asia/Dubai.ics +++ b/zoneinfo/Asia/Dubai.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Dubai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Dubai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Dubai BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Dushanbe.ics b/zoneinfo/Asia/Dushanbe.ics index 2909e3aa..56ee07a8 100644 --- a/zoneinfo/Asia/Dushanbe.ics +++ b/zoneinfo/Asia/Dushanbe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Dushanbe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Dushanbe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Dushanbe BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Famagusta.ics b/zoneinfo/Asia/Famagusta.ics index 79e838e5..c321efc1 100644 --- a/zoneinfo/Asia/Famagusta.ics +++ b/zoneinfo/Asia/Famagusta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Famagusta -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Famagusta +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Famagusta BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Asia/Gaza.ics b/zoneinfo/Asia/Gaza.ics index 268a4a50..471ef59b 100644 --- a/zoneinfo/Asia/Gaza.ics +++ b/zoneinfo/Asia/Gaza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Gaza -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Gaza +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Gaza BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Asia/Harbin.ics b/zoneinfo/Asia/Harbin.ics index ee91b6ac..fb552ce7 100644 --- a/zoneinfo/Asia/Harbin.ics +++ b/zoneinfo/Asia/Harbin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Shanghai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Shanghai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Hebron.ics b/zoneinfo/Asia/Hebron.ics index a90edf01..1cedf7eb 100644 --- a/zoneinfo/Asia/Hebron.ics +++ b/zoneinfo/Asia/Hebron.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Hebron -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Hebron +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Hebron BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Asia/Ho_Chi_Minh.ics b/zoneinfo/Asia/Ho_Chi_Minh.ics index 28c9106b..c9e6c7ed 100644 --- a/zoneinfo/Asia/Ho_Chi_Minh.ics +++ b/zoneinfo/Asia/Ho_Chi_Minh.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ho_Chi_Minh -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ho_Chi_Minh +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ho_Chi_Minh BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Hong_Kong.ics b/zoneinfo/Asia/Hong_Kong.ics index 4bb4603f..79e66e86 100644 --- a/zoneinfo/Asia/Hong_Kong.ics +++ b/zoneinfo/Asia/Hong_Kong.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Hong_Kong -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Hong_Kong +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Hong_Kong BEGIN:STANDARD TZNAME:HKT diff --git a/zoneinfo/Asia/Hovd.ics b/zoneinfo/Asia/Hovd.ics index 994e59d6..2d7533de 100644 --- a/zoneinfo/Asia/Hovd.ics +++ b/zoneinfo/Asia/Hovd.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Hovd -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Hovd +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Hovd BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Irkutsk.ics b/zoneinfo/Asia/Irkutsk.ics index 04094c65..9f00186f 100644 --- a/zoneinfo/Asia/Irkutsk.ics +++ b/zoneinfo/Asia/Irkutsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Irkutsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Irkutsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Irkutsk BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Istanbul.ics b/zoneinfo/Asia/Istanbul.ics index 576ca49c..19e3965d 100644 --- a/zoneinfo/Asia/Istanbul.ics +++ b/zoneinfo/Asia/Istanbul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Istanbul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Istanbul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Jakarta.ics b/zoneinfo/Asia/Jakarta.ics index 15e66b13..102e0d45 100644 --- a/zoneinfo/Asia/Jakarta.ics +++ b/zoneinfo/Asia/Jakarta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Jakarta -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Jakarta +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Jakarta BEGIN:STANDARD TZNAME:WIB diff --git a/zoneinfo/Asia/Jayapura.ics b/zoneinfo/Asia/Jayapura.ics index 06faa419..fe25d9f9 100644 --- a/zoneinfo/Asia/Jayapura.ics +++ b/zoneinfo/Asia/Jayapura.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Jayapura -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Jayapura +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Jayapura BEGIN:STANDARD TZNAME:WIT diff --git a/zoneinfo/Asia/Jerusalem.ics b/zoneinfo/Asia/Jerusalem.ics index f41a1c68..68e86813 100644 --- a/zoneinfo/Asia/Jerusalem.ics +++ b/zoneinfo/Asia/Jerusalem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Jerusalem -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Jerusalem +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZNAME:IDT diff --git a/zoneinfo/Asia/Kabul.ics b/zoneinfo/Asia/Kabul.ics index 9f0f8e01..b81aa649 100644 --- a/zoneinfo/Asia/Kabul.ics +++ b/zoneinfo/Asia/Kabul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kabul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kabul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kabul BEGIN:STANDARD TZNAME:+0430 diff --git a/zoneinfo/Asia/Kamchatka.ics b/zoneinfo/Asia/Kamchatka.ics index 084875ed..8224ee57 100644 --- a/zoneinfo/Asia/Kamchatka.ics +++ b/zoneinfo/Asia/Kamchatka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kamchatka -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kamchatka +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kamchatka BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Asia/Karachi.ics b/zoneinfo/Asia/Karachi.ics index 7df943dd..241fd589 100644 --- a/zoneinfo/Asia/Karachi.ics +++ b/zoneinfo/Asia/Karachi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Karachi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Karachi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Karachi BEGIN:STANDARD TZNAME:PKT diff --git a/zoneinfo/Asia/Kashgar.ics b/zoneinfo/Asia/Kashgar.ics index a1aca55e..cfbb7ba0 100644 --- a/zoneinfo/Asia/Kashgar.ics +++ b/zoneinfo/Asia/Kashgar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Urumqi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Urumqi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Urumqi BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Kathmandu.ics b/zoneinfo/Asia/Kathmandu.ics index 3a852557..8faf1729 100644 --- a/zoneinfo/Asia/Kathmandu.ics +++ b/zoneinfo/Asia/Kathmandu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kathmandu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kathmandu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kathmandu BEGIN:STANDARD TZNAME:+0545 diff --git a/zoneinfo/Asia/Katmandu.ics b/zoneinfo/Asia/Katmandu.ics index 3a852557..8faf1729 100644 --- a/zoneinfo/Asia/Katmandu.ics +++ b/zoneinfo/Asia/Katmandu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kathmandu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kathmandu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kathmandu BEGIN:STANDARD TZNAME:+0545 diff --git a/zoneinfo/Asia/Khandyga.ics b/zoneinfo/Asia/Khandyga.ics index fc752d10..2a133310 100644 --- a/zoneinfo/Asia/Khandyga.ics +++ b/zoneinfo/Asia/Khandyga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Khandyga -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Khandyga +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Khandyga BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Kolkata.ics b/zoneinfo/Asia/Kolkata.ics index af969950..75e96821 100644 --- a/zoneinfo/Asia/Kolkata.ics +++ b/zoneinfo/Asia/Kolkata.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kolkata -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kolkata +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kolkata BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Asia/Krasnoyarsk.ics b/zoneinfo/Asia/Krasnoyarsk.ics index b9f75c66..80ea6992 100644 --- a/zoneinfo/Asia/Krasnoyarsk.ics +++ b/zoneinfo/Asia/Krasnoyarsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Krasnoyarsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Krasnoyarsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Krasnoyarsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Kuala_Lumpur.ics b/zoneinfo/Asia/Kuala_Lumpur.ics index 4614e25e..d98deca8 100644 --- a/zoneinfo/Asia/Kuala_Lumpur.ics +++ b/zoneinfo/Asia/Kuala_Lumpur.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kuala_Lumpur -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kuala_Lumpur +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kuala_Lumpur BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Kuching.ics b/zoneinfo/Asia/Kuching.ics index fb8f34b6..0812afb9 100644 --- a/zoneinfo/Asia/Kuching.ics +++ b/zoneinfo/Asia/Kuching.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Kuching -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Kuching +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Kuching BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Kuwait.ics b/zoneinfo/Asia/Kuwait.ics index cde808f1..6c7fd19a 100644 --- a/zoneinfo/Asia/Kuwait.ics +++ b/zoneinfo/Asia/Kuwait.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Riyadh -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Riyadh +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Macao.ics b/zoneinfo/Asia/Macao.ics index 50f00429..4fafaa79 100644 --- a/zoneinfo/Asia/Macao.ics +++ b/zoneinfo/Asia/Macao.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Macau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Macau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Macau BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Macau.ics b/zoneinfo/Asia/Macau.ics index 50f00429..4fafaa79 100644 --- a/zoneinfo/Asia/Macau.ics +++ b/zoneinfo/Asia/Macau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Macau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Macau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Macau BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Magadan.ics b/zoneinfo/Asia/Magadan.ics index 9e59a046..640ff43e 100644 --- a/zoneinfo/Asia/Magadan.ics +++ b/zoneinfo/Asia/Magadan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Magadan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Magadan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Magadan BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Asia/Makassar.ics b/zoneinfo/Asia/Makassar.ics index 13501f9b..ff1b7508 100644 --- a/zoneinfo/Asia/Makassar.ics +++ b/zoneinfo/Asia/Makassar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Makassar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Makassar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Makassar BEGIN:STANDARD TZNAME:WITA diff --git a/zoneinfo/Asia/Manila.ics b/zoneinfo/Asia/Manila.ics index 4c02e036..467436b5 100644 --- a/zoneinfo/Asia/Manila.ics +++ b/zoneinfo/Asia/Manila.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Manila -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Manila +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Manila BEGIN:STANDARD TZNAME:PST diff --git a/zoneinfo/Asia/Muscat.ics b/zoneinfo/Asia/Muscat.ics index 4c69cc35..da7a0a10 100644 --- a/zoneinfo/Asia/Muscat.ics +++ b/zoneinfo/Asia/Muscat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Dubai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Dubai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Dubai BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Nicosia.ics b/zoneinfo/Asia/Nicosia.ics index 3a79df1a..8ed99e7e 100644 --- a/zoneinfo/Asia/Nicosia.ics +++ b/zoneinfo/Asia/Nicosia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Nicosia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Nicosia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Nicosia BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Asia/Novokuznetsk.ics b/zoneinfo/Asia/Novokuznetsk.ics index 563e68bb..985a9e44 100644 --- a/zoneinfo/Asia/Novokuznetsk.ics +++ b/zoneinfo/Asia/Novokuznetsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Novokuznetsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Novokuznetsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Novokuznetsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Novosibirsk.ics b/zoneinfo/Asia/Novosibirsk.ics index 87cc380d..18066895 100644 --- a/zoneinfo/Asia/Novosibirsk.ics +++ b/zoneinfo/Asia/Novosibirsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Novosibirsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Novosibirsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Novosibirsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Omsk.ics b/zoneinfo/Asia/Omsk.ics index 84974e7e..d7c52cbb 100644 --- a/zoneinfo/Asia/Omsk.ics +++ b/zoneinfo/Asia/Omsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Omsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Omsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Omsk BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Oral.ics b/zoneinfo/Asia/Oral.ics index a2b80ef4..70ffa56a 100644 --- a/zoneinfo/Asia/Oral.ics +++ b/zoneinfo/Asia/Oral.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Oral -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Oral +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Oral BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Phnom_Penh.ics b/zoneinfo/Asia/Phnom_Penh.ics index ad63ebfb..a2da49b8 100644 --- a/zoneinfo/Asia/Phnom_Penh.ics +++ b/zoneinfo/Asia/Phnom_Penh.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Bangkok -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Bangkok +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Pontianak.ics b/zoneinfo/Asia/Pontianak.ics index ee584695..68407db7 100644 --- a/zoneinfo/Asia/Pontianak.ics +++ b/zoneinfo/Asia/Pontianak.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Pontianak -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Pontianak +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Pontianak BEGIN:STANDARD TZNAME:WIB diff --git a/zoneinfo/Asia/Pyongyang.ics b/zoneinfo/Asia/Pyongyang.ics index 3ab5c8ac..9555cccd 100644 --- a/zoneinfo/Asia/Pyongyang.ics +++ b/zoneinfo/Asia/Pyongyang.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Pyongyang -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Pyongyang +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Pyongyang BEGIN:STANDARD TZNAME:KST diff --git a/zoneinfo/Asia/Qatar.ics b/zoneinfo/Asia/Qatar.ics index 8d9d581e..1bc4082b 100644 --- a/zoneinfo/Asia/Qatar.ics +++ b/zoneinfo/Asia/Qatar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Qatar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Qatar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Qatar BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Qostanay.ics b/zoneinfo/Asia/Qostanay.ics index efa84b45..5f940c3b 100644 --- a/zoneinfo/Asia/Qostanay.ics +++ b/zoneinfo/Asia/Qostanay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Qostanay -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Qostanay +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Qostanay BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Qyzylorda.ics b/zoneinfo/Asia/Qyzylorda.ics index 36a91f18..aa2e3f33 100644 --- a/zoneinfo/Asia/Qyzylorda.ics +++ b/zoneinfo/Asia/Qyzylorda.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Qyzylorda -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Qyzylorda +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Qyzylorda BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Rangoon.ics b/zoneinfo/Asia/Rangoon.ics index bc378607..a7e050d3 100644 --- a/zoneinfo/Asia/Rangoon.ics +++ b/zoneinfo/Asia/Rangoon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Yangon -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Yangon +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Yangon BEGIN:STANDARD TZNAME:+0630 diff --git a/zoneinfo/Asia/Riyadh.ics b/zoneinfo/Asia/Riyadh.ics index cde808f1..6c7fd19a 100644 --- a/zoneinfo/Asia/Riyadh.ics +++ b/zoneinfo/Asia/Riyadh.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Riyadh -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Riyadh +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Saigon.ics b/zoneinfo/Asia/Saigon.ics index 28c9106b..c9e6c7ed 100644 --- a/zoneinfo/Asia/Saigon.ics +++ b/zoneinfo/Asia/Saigon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ho_Chi_Minh -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ho_Chi_Minh +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ho_Chi_Minh BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Sakhalin.ics b/zoneinfo/Asia/Sakhalin.ics index bef40df5..e9a3399f 100644 --- a/zoneinfo/Asia/Sakhalin.ics +++ b/zoneinfo/Asia/Sakhalin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Sakhalin -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Sakhalin +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Sakhalin BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Asia/Samarkand.ics b/zoneinfo/Asia/Samarkand.ics index 1f035d15..ddb440d2 100644 --- a/zoneinfo/Asia/Samarkand.ics +++ b/zoneinfo/Asia/Samarkand.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Samarkand -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Samarkand +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Samarkand BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Seoul.ics b/zoneinfo/Asia/Seoul.ics index 196673f7..c8a576a1 100644 --- a/zoneinfo/Asia/Seoul.ics +++ b/zoneinfo/Asia/Seoul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Seoul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Seoul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Seoul BEGIN:STANDARD TZNAME:KST diff --git a/zoneinfo/Asia/Shanghai.ics b/zoneinfo/Asia/Shanghai.ics index ee91b6ac..fb552ce7 100644 --- a/zoneinfo/Asia/Shanghai.ics +++ b/zoneinfo/Asia/Shanghai.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Shanghai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Shanghai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Singapore.ics b/zoneinfo/Asia/Singapore.ics index 90e65f2a..90ada0f4 100644 --- a/zoneinfo/Asia/Singapore.ics +++ b/zoneinfo/Asia/Singapore.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Singapore -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Singapore +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Singapore BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Srednekolymsk.ics b/zoneinfo/Asia/Srednekolymsk.ics index 3c1aedf3..6f9f85af 100644 --- a/zoneinfo/Asia/Srednekolymsk.ics +++ b/zoneinfo/Asia/Srednekolymsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Srednekolymsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Srednekolymsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Srednekolymsk BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Asia/Taipei.ics b/zoneinfo/Asia/Taipei.ics index 0d976016..cbf247a1 100644 --- a/zoneinfo/Asia/Taipei.ics +++ b/zoneinfo/Asia/Taipei.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Taipei -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Taipei +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Taipei BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Tashkent.ics b/zoneinfo/Asia/Tashkent.ics index 13bd726e..550a1775 100644 --- a/zoneinfo/Asia/Tashkent.ics +++ b/zoneinfo/Asia/Tashkent.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tashkent -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tashkent +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tashkent BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Tbilisi.ics b/zoneinfo/Asia/Tbilisi.ics index 5d44a68e..f2104bf4 100644 --- a/zoneinfo/Asia/Tbilisi.ics +++ b/zoneinfo/Asia/Tbilisi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tbilisi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tbilisi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tbilisi BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Tehran.ics b/zoneinfo/Asia/Tehran.ics index bdbfb7ac..9e2d4fb1 100644 --- a/zoneinfo/Asia/Tehran.ics +++ b/zoneinfo/Asia/Tehran.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tehran -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tehran +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tehran BEGIN:DAYLIGHT TZNAME:+0430 diff --git a/zoneinfo/Asia/Tel_Aviv.ics b/zoneinfo/Asia/Tel_Aviv.ics index f41a1c68..68e86813 100644 --- a/zoneinfo/Asia/Tel_Aviv.ics +++ b/zoneinfo/Asia/Tel_Aviv.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Jerusalem -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Jerusalem +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZNAME:IDT diff --git a/zoneinfo/Asia/Thimbu.ics b/zoneinfo/Asia/Thimbu.ics index 09e12d89..42169547 100644 --- a/zoneinfo/Asia/Thimbu.ics +++ b/zoneinfo/Asia/Thimbu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Thimphu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Thimphu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Thimphu BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Thimphu.ics b/zoneinfo/Asia/Thimphu.ics index 09e12d89..42169547 100644 --- a/zoneinfo/Asia/Thimphu.ics +++ b/zoneinfo/Asia/Thimphu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Thimphu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Thimphu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Thimphu BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Tokyo.ics b/zoneinfo/Asia/Tokyo.ics index cbbad067..397e64aa 100644 --- a/zoneinfo/Asia/Tokyo.ics +++ b/zoneinfo/Asia/Tokyo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tokyo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tokyo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tokyo BEGIN:STANDARD TZNAME:JST diff --git a/zoneinfo/Asia/Tomsk.ics b/zoneinfo/Asia/Tomsk.ics index 32d916d3..329981cb 100644 --- a/zoneinfo/Asia/Tomsk.ics +++ b/zoneinfo/Asia/Tomsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tomsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tomsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tomsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Ujung_Pandang.ics b/zoneinfo/Asia/Ujung_Pandang.ics index 13501f9b..ff1b7508 100644 --- a/zoneinfo/Asia/Ujung_Pandang.ics +++ b/zoneinfo/Asia/Ujung_Pandang.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Makassar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Makassar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Makassar BEGIN:STANDARD TZNAME:WITA diff --git a/zoneinfo/Asia/Ulaanbaatar.ics b/zoneinfo/Asia/Ulaanbaatar.ics index d39f0d38..c4c578e3 100644 --- a/zoneinfo/Asia/Ulaanbaatar.ics +++ b/zoneinfo/Asia/Ulaanbaatar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ulaanbaatar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ulaanbaatar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ulaanbaatar BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Ulan_Bator.ics b/zoneinfo/Asia/Ulan_Bator.ics index d39f0d38..c4c578e3 100644 --- a/zoneinfo/Asia/Ulan_Bator.ics +++ b/zoneinfo/Asia/Ulan_Bator.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ulaanbaatar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ulaanbaatar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ulaanbaatar BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Urumqi.ics b/zoneinfo/Asia/Urumqi.ics index a1aca55e..cfbb7ba0 100644 --- a/zoneinfo/Asia/Urumqi.ics +++ b/zoneinfo/Asia/Urumqi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Urumqi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Urumqi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Urumqi BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Ust-Nera.ics b/zoneinfo/Asia/Ust-Nera.ics index a4fa53c1..af0f1fdf 100644 --- a/zoneinfo/Asia/Ust-Nera.ics +++ b/zoneinfo/Asia/Ust-Nera.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Ust-Nera -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Ust-Nera +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Ust-Nera BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Asia/Vientiane.ics b/zoneinfo/Asia/Vientiane.ics index ad63ebfb..a2da49b8 100644 --- a/zoneinfo/Asia/Vientiane.ics +++ b/zoneinfo/Asia/Vientiane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Bangkok -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Bangkok +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Vladivostok.ics b/zoneinfo/Asia/Vladivostok.ics index 1368fb0a..1cd6167d 100644 --- a/zoneinfo/Asia/Vladivostok.ics +++ b/zoneinfo/Asia/Vladivostok.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Vladivostok -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Vladivostok +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Vladivostok BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Asia/Yakutsk.ics b/zoneinfo/Asia/Yakutsk.ics index 7548d052..db4a6871 100644 --- a/zoneinfo/Asia/Yakutsk.ics +++ b/zoneinfo/Asia/Yakutsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Yakutsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Yakutsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Yakutsk BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Yangon.ics b/zoneinfo/Asia/Yangon.ics index bc378607..a7e050d3 100644 --- a/zoneinfo/Asia/Yangon.ics +++ b/zoneinfo/Asia/Yangon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Yangon -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Yangon +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Yangon BEGIN:STANDARD TZNAME:+0630 diff --git a/zoneinfo/Asia/Yekaterinburg.ics b/zoneinfo/Asia/Yekaterinburg.ics index dab89aca..e6900187 100644 --- a/zoneinfo/Asia/Yekaterinburg.ics +++ b/zoneinfo/Asia/Yekaterinburg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Yekaterinburg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Yekaterinburg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Yekaterinburg BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Yerevan.ics b/zoneinfo/Asia/Yerevan.ics index da008062..94694464 100644 --- a/zoneinfo/Asia/Yerevan.ics +++ b/zoneinfo/Asia/Yerevan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Yerevan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Yerevan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Yerevan BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Atlantic/Azores.ics b/zoneinfo/Atlantic/Azores.ics index 8f1bbf20..148ab7ae 100644 --- a/zoneinfo/Atlantic/Azores.ics +++ b/zoneinfo/Atlantic/Azores.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Azores -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Azores +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Azores BEGIN:DAYLIGHT TZNAME:+00 diff --git a/zoneinfo/Atlantic/Bermuda.ics b/zoneinfo/Atlantic/Bermuda.ics index 148b56d3..16d7eced 100644 --- a/zoneinfo/Atlantic/Bermuda.ics +++ b/zoneinfo/Atlantic/Bermuda.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Bermuda -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Bermuda +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Bermuda BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/Atlantic/Canary.ics b/zoneinfo/Atlantic/Canary.ics index c1de7164..0df7e9ef 100644 --- a/zoneinfo/Atlantic/Canary.ics +++ b/zoneinfo/Atlantic/Canary.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Canary -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Canary +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Canary BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Cape_Verde.ics b/zoneinfo/Atlantic/Cape_Verde.ics index d76c2a4b..5af5f23a 100644 --- a/zoneinfo/Atlantic/Cape_Verde.ics +++ b/zoneinfo/Atlantic/Cape_Verde.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Cape_Verde -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Cape_Verde +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Cape_Verde BEGIN:STANDARD TZNAME:-01 diff --git a/zoneinfo/Atlantic/Faeroe.ics b/zoneinfo/Atlantic/Faeroe.ics index 077b0a6d..ed3b8189 100644 --- a/zoneinfo/Atlantic/Faeroe.ics +++ b/zoneinfo/Atlantic/Faeroe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Faroe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Faroe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Faroe BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Faroe.ics b/zoneinfo/Atlantic/Faroe.ics index 077b0a6d..ed3b8189 100644 --- a/zoneinfo/Atlantic/Faroe.ics +++ b/zoneinfo/Atlantic/Faroe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Faroe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Faroe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Faroe BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Jan_Mayen.ics b/zoneinfo/Atlantic/Jan_Mayen.ics index e337e96f..9f8f9a19 100644 --- a/zoneinfo/Atlantic/Jan_Mayen.ics +++ b/zoneinfo/Atlantic/Jan_Mayen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Oslo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Oslo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Atlantic/Madeira.ics b/zoneinfo/Atlantic/Madeira.ics index 7470c4da..0d012e1b 100644 --- a/zoneinfo/Atlantic/Madeira.ics +++ b/zoneinfo/Atlantic/Madeira.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Madeira -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Madeira +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Madeira BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Reykjavik.ics b/zoneinfo/Atlantic/Reykjavik.ics index 8913b0ac..83bd2607 100644 --- a/zoneinfo/Atlantic/Reykjavik.ics +++ b/zoneinfo/Atlantic/Reykjavik.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Reykjavik -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Reykjavik +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Reykjavik BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Atlantic/South_Georgia.ics b/zoneinfo/Atlantic/South_Georgia.ics index d243641d..44e8d11b 100644 --- a/zoneinfo/Atlantic/South_Georgia.ics +++ b/zoneinfo/Atlantic/South_Georgia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/South_Georgia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/South_Georgia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/South_Georgia BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/Atlantic/St_Helena.ics b/zoneinfo/Atlantic/St_Helena.ics index 63bc3772..5abec10b 100644 --- a/zoneinfo/Atlantic/St_Helena.ics +++ b/zoneinfo/Atlantic/St_Helena.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Abidjan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Abidjan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Atlantic/Stanley.ics b/zoneinfo/Atlantic/Stanley.ics index dc8a88e8..7d988bf7 100644 --- a/zoneinfo/Atlantic/Stanley.ics +++ b/zoneinfo/Atlantic/Stanley.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Stanley -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Stanley +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Stanley BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Australia/ACT.ics b/zoneinfo/Australia/ACT.ics index c91b29dc..70cee47a 100644 --- a/zoneinfo/Australia/ACT.ics +++ b/zoneinfo/Australia/ACT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Sydney -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Sydney +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Adelaide.ics b/zoneinfo/Australia/Adelaide.ics index 83809314..806bbd7e 100644 --- a/zoneinfo/Australia/Adelaide.ics +++ b/zoneinfo/Australia/Adelaide.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Adelaide -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Adelaide +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Adelaide BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Brisbane.ics b/zoneinfo/Australia/Brisbane.ics index e06a60ee..1414af10 100644 --- a/zoneinfo/Australia/Brisbane.ics +++ b/zoneinfo/Australia/Brisbane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Brisbane -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Brisbane +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Brisbane BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Broken_Hill.ics b/zoneinfo/Australia/Broken_Hill.ics index 005dc6c0..8811e3ef 100644 --- a/zoneinfo/Australia/Broken_Hill.ics +++ b/zoneinfo/Australia/Broken_Hill.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Broken_Hill -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Broken_Hill +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Broken_Hill BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Canberra.ics b/zoneinfo/Australia/Canberra.ics index c91b29dc..70cee47a 100644 --- a/zoneinfo/Australia/Canberra.ics +++ b/zoneinfo/Australia/Canberra.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Sydney -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Sydney +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Currie.ics b/zoneinfo/Australia/Currie.ics index b0c5d17b..96740123 100644 --- a/zoneinfo/Australia/Currie.ics +++ b/zoneinfo/Australia/Currie.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Hobart -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Hobart +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZNAME:AEDT diff --git a/zoneinfo/Australia/Darwin.ics b/zoneinfo/Australia/Darwin.ics index b5f79654..da50b89d 100644 --- a/zoneinfo/Australia/Darwin.ics +++ b/zoneinfo/Australia/Darwin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Darwin -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Darwin +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Darwin BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Eucla.ics b/zoneinfo/Australia/Eucla.ics index b3913f66..d8934648 100644 --- a/zoneinfo/Australia/Eucla.ics +++ b/zoneinfo/Australia/Eucla.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Eucla -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Eucla +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Eucla BEGIN:STANDARD TZNAME:+0845 diff --git a/zoneinfo/Australia/Hobart.ics b/zoneinfo/Australia/Hobart.ics index b0c5d17b..96740123 100644 --- a/zoneinfo/Australia/Hobart.ics +++ b/zoneinfo/Australia/Hobart.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Hobart -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Hobart +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZNAME:AEDT diff --git a/zoneinfo/Australia/LHI.ics b/zoneinfo/Australia/LHI.ics index 7f0dd485..67ebbac6 100644 --- a/zoneinfo/Australia/LHI.ics +++ b/zoneinfo/Australia/LHI.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Lord_Howe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Lord_Howe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Lord_Howe BEGIN:STANDARD TZNAME:+1030 diff --git a/zoneinfo/Australia/Lindeman.ics b/zoneinfo/Australia/Lindeman.ics index 1425440e..d63257da 100644 --- a/zoneinfo/Australia/Lindeman.ics +++ b/zoneinfo/Australia/Lindeman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Lindeman -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Lindeman +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Lindeman BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Lord_Howe.ics b/zoneinfo/Australia/Lord_Howe.ics index 7f0dd485..67ebbac6 100644 --- a/zoneinfo/Australia/Lord_Howe.ics +++ b/zoneinfo/Australia/Lord_Howe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Lord_Howe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Lord_Howe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Lord_Howe BEGIN:STANDARD TZNAME:+1030 diff --git a/zoneinfo/Australia/Melbourne.ics b/zoneinfo/Australia/Melbourne.ics index ff42dbb4..5633a18a 100644 --- a/zoneinfo/Australia/Melbourne.ics +++ b/zoneinfo/Australia/Melbourne.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Melbourne -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Melbourne +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Melbourne BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/NSW.ics b/zoneinfo/Australia/NSW.ics index c91b29dc..70cee47a 100644 --- a/zoneinfo/Australia/NSW.ics +++ b/zoneinfo/Australia/NSW.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Sydney -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Sydney +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/North.ics b/zoneinfo/Australia/North.ics index b5f79654..da50b89d 100644 --- a/zoneinfo/Australia/North.ics +++ b/zoneinfo/Australia/North.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Darwin -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Darwin +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Darwin BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Perth.ics b/zoneinfo/Australia/Perth.ics index b8d05eed..e5363ac5 100644 --- a/zoneinfo/Australia/Perth.ics +++ b/zoneinfo/Australia/Perth.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Perth -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Perth +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Perth BEGIN:STANDARD TZNAME:AWST diff --git a/zoneinfo/Australia/Queensland.ics b/zoneinfo/Australia/Queensland.ics index e06a60ee..1414af10 100644 --- a/zoneinfo/Australia/Queensland.ics +++ b/zoneinfo/Australia/Queensland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Brisbane -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Brisbane +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Brisbane BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/South.ics b/zoneinfo/Australia/South.ics index 83809314..806bbd7e 100644 --- a/zoneinfo/Australia/South.ics +++ b/zoneinfo/Australia/South.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Adelaide -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Adelaide +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Adelaide BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Sydney.ics b/zoneinfo/Australia/Sydney.ics index c91b29dc..70cee47a 100644 --- a/zoneinfo/Australia/Sydney.ics +++ b/zoneinfo/Australia/Sydney.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Sydney -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Sydney +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Tasmania.ics b/zoneinfo/Australia/Tasmania.ics index b0c5d17b..96740123 100644 --- a/zoneinfo/Australia/Tasmania.ics +++ b/zoneinfo/Australia/Tasmania.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Hobart -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Hobart +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZNAME:AEDT diff --git a/zoneinfo/Australia/Victoria.ics b/zoneinfo/Australia/Victoria.ics index ff42dbb4..5633a18a 100644 --- a/zoneinfo/Australia/Victoria.ics +++ b/zoneinfo/Australia/Victoria.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Melbourne -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Melbourne +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Melbourne BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/West.ics b/zoneinfo/Australia/West.ics index b8d05eed..e5363ac5 100644 --- a/zoneinfo/Australia/West.ics +++ b/zoneinfo/Australia/West.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Perth -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Perth +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Perth BEGIN:STANDARD TZNAME:AWST diff --git a/zoneinfo/Australia/Yancowinna.ics b/zoneinfo/Australia/Yancowinna.ics index 005dc6c0..8811e3ef 100644 --- a/zoneinfo/Australia/Yancowinna.ics +++ b/zoneinfo/Australia/Yancowinna.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Australia/Broken_Hill -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Australia/Broken_Hill +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Australia/Broken_Hill BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Brazil/Acre.ics b/zoneinfo/Brazil/Acre.ics index 3d4c27fb..70e10b53 100644 --- a/zoneinfo/Brazil/Acre.ics +++ b/zoneinfo/Brazil/Acre.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Rio_Branco -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Rio_Branco +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/Brazil/DeNoronha.ics b/zoneinfo/Brazil/DeNoronha.ics index 580b9364..20804163 100644 --- a/zoneinfo/Brazil/DeNoronha.ics +++ b/zoneinfo/Brazil/DeNoronha.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Noronha -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Noronha +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Noronha BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/Brazil/East.ics b/zoneinfo/Brazil/East.ics index 16996961..6c44e413 100644 --- a/zoneinfo/Brazil/East.ics +++ b/zoneinfo/Brazil/East.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Sao_Paulo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Sao_Paulo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Sao_Paulo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Brazil/West.ics b/zoneinfo/Brazil/West.ics index 63581145..5ceb8664 100644 --- a/zoneinfo/Brazil/West.ics +++ b/zoneinfo/Brazil/West.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Manaus -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Manaus +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Manaus BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/CET.ics b/zoneinfo/CET.ics index cc032909..ec6c3128 100644 --- a/zoneinfo/CET.ics +++ b/zoneinfo/CET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/CET -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/CET +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:CET BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/CST6CDT.ics b/zoneinfo/CST6CDT.ics index 84b4026e..27d9ce4a 100644 --- a/zoneinfo/CST6CDT.ics +++ b/zoneinfo/CST6CDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/CST6CDT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/CST6CDT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:CST6CDT BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/Canada/Atlantic.ics b/zoneinfo/Canada/Atlantic.ics index 101ec547..a16d5d69 100644 --- a/zoneinfo/Canada/Atlantic.ics +++ b/zoneinfo/Canada/Atlantic.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Halifax -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Halifax +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Halifax BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/Canada/Central.ics b/zoneinfo/Canada/Central.ics index d755f390..71bc0693 100644 --- a/zoneinfo/Canada/Central.ics +++ b/zoneinfo/Canada/Central.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Winnipeg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Winnipeg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Winnipeg BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/Canada/Eastern.ics b/zoneinfo/Canada/Eastern.ics index 185ff4b4..30761dab 100644 --- a/zoneinfo/Canada/Eastern.ics +++ b/zoneinfo/Canada/Eastern.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Toronto -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Toronto +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/Canada/Mountain.ics b/zoneinfo/Canada/Mountain.ics index 5045c4ce..de34f330 100644 --- a/zoneinfo/Canada/Mountain.ics +++ b/zoneinfo/Canada/Mountain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Edmonton -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Edmonton +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Edmonton BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Canada/Newfoundland.ics b/zoneinfo/Canada/Newfoundland.ics index 7095decf..81921e8c 100644 --- a/zoneinfo/Canada/Newfoundland.ics +++ b/zoneinfo/Canada/Newfoundland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/St_Johns -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/St_Johns +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/St_Johns BEGIN:STANDARD TZNAME:NST diff --git a/zoneinfo/Canada/Pacific.ics b/zoneinfo/Canada/Pacific.ics index 10446a77..313e9353 100644 --- a/zoneinfo/Canada/Pacific.ics +++ b/zoneinfo/Canada/Pacific.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Vancouver -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Vancouver +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Vancouver BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/Canada/Saskatchewan.ics b/zoneinfo/Canada/Saskatchewan.ics index c15afef0..499a516c 100644 --- a/zoneinfo/Canada/Saskatchewan.ics +++ b/zoneinfo/Canada/Saskatchewan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Regina -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Regina +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Regina BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Canada/Yukon.ics b/zoneinfo/Canada/Yukon.ics index 26ea5165..6b0ee092 100644 --- a/zoneinfo/Canada/Yukon.ics +++ b/zoneinfo/Canada/Yukon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Whitehorse -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Whitehorse +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Whitehorse BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/Chile/Continental.ics b/zoneinfo/Chile/Continental.ics index b6c15aa8..db805e2b 100644 --- a/zoneinfo/Chile/Continental.ics +++ b/zoneinfo/Chile/Continental.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Santiago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Santiago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Santiago BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/Chile/EasterIsland.ics b/zoneinfo/Chile/EasterIsland.ics index 08ad2cfe..5b3c6a95 100644 --- a/zoneinfo/Chile/EasterIsland.ics +++ b/zoneinfo/Chile/EasterIsland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Easter -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Easter +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Easter BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Cuba.ics b/zoneinfo/Cuba.ics index 484d9735..432da95e 100644 --- a/zoneinfo/Cuba.ics +++ b/zoneinfo/Cuba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Havana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Havana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Havana BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/EET.ics b/zoneinfo/EET.ics index 6cc24e8c..d28334df 100644 --- a/zoneinfo/EET.ics +++ b/zoneinfo/EET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/EET -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/EET +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:EET BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/EST.ics b/zoneinfo/EST.ics index 304b0608..8df9d40e 100644 --- a/zoneinfo/EST.ics +++ b/zoneinfo/EST.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/EST -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/EST +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:EST BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/EST5EDT.ics b/zoneinfo/EST5EDT.ics index a0e9c768..255e0963 100644 --- a/zoneinfo/EST5EDT.ics +++ b/zoneinfo/EST5EDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/EST5EDT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/EST5EDT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:EST5EDT BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/Egypt.ics b/zoneinfo/Egypt.ics index 746bb179..3d8dee3d 100644 --- a/zoneinfo/Egypt.ics +++ b/zoneinfo/Egypt.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Cairo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Cairo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Cairo BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Eire.ics b/zoneinfo/Eire.ics index 52380405..6f828f29 100644 --- a/zoneinfo/Eire.ics +++ b/zoneinfo/Eire.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Dublin -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Dublin +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Dublin BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Etc/GMT+0.ics b/zoneinfo/Etc/GMT+0.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/Etc/GMT+0.ics +++ b/zoneinfo/Etc/GMT+0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/GMT+1.ics b/zoneinfo/Etc/GMT+1.ics index a0de1622..d7833c33 100644 --- a/zoneinfo/Etc/GMT+1.ics +++ b/zoneinfo/Etc/GMT+1.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+1 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+1 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+1 BEGIN:STANDARD TZNAME:-01 diff --git a/zoneinfo/Etc/GMT+10.ics b/zoneinfo/Etc/GMT+10.ics index e4ff0888..9df07ee2 100644 --- a/zoneinfo/Etc/GMT+10.ics +++ b/zoneinfo/Etc/GMT+10.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+10 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+10 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+10 BEGIN:STANDARD TZNAME:-10 diff --git a/zoneinfo/Etc/GMT+11.ics b/zoneinfo/Etc/GMT+11.ics index 1fe7baa9..68f01643 100644 --- a/zoneinfo/Etc/GMT+11.ics +++ b/zoneinfo/Etc/GMT+11.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+11 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+11 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+11 BEGIN:STANDARD TZNAME:-11 diff --git a/zoneinfo/Etc/GMT+12.ics b/zoneinfo/Etc/GMT+12.ics index 82c1cfaa..17b0b2fe 100644 --- a/zoneinfo/Etc/GMT+12.ics +++ b/zoneinfo/Etc/GMT+12.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+12 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+12 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+12 BEGIN:STANDARD TZNAME:-12 diff --git a/zoneinfo/Etc/GMT+2.ics b/zoneinfo/Etc/GMT+2.ics index 844f1b09..a02e6154 100644 --- a/zoneinfo/Etc/GMT+2.ics +++ b/zoneinfo/Etc/GMT+2.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+2 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+2 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+2 BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/Etc/GMT+3.ics b/zoneinfo/Etc/GMT+3.ics index 3e0f8d91..5b158ddf 100644 --- a/zoneinfo/Etc/GMT+3.ics +++ b/zoneinfo/Etc/GMT+3.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+3 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+3 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+3 BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Etc/GMT+4.ics b/zoneinfo/Etc/GMT+4.ics index 5cccf011..0f45133f 100644 --- a/zoneinfo/Etc/GMT+4.ics +++ b/zoneinfo/Etc/GMT+4.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+4 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+4 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+4 BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/Etc/GMT+5.ics b/zoneinfo/Etc/GMT+5.ics index d409f03e..d0498ce4 100644 --- a/zoneinfo/Etc/GMT+5.ics +++ b/zoneinfo/Etc/GMT+5.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+5 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+5 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+5 BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/Etc/GMT+6.ics b/zoneinfo/Etc/GMT+6.ics index 024f6900..7b8ce597 100644 --- a/zoneinfo/Etc/GMT+6.ics +++ b/zoneinfo/Etc/GMT+6.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+6 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+6 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+6 BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Etc/GMT+7.ics b/zoneinfo/Etc/GMT+7.ics index 88759ce7..f9829484 100644 --- a/zoneinfo/Etc/GMT+7.ics +++ b/zoneinfo/Etc/GMT+7.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+7 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+7 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+7 BEGIN:STANDARD TZNAME:-07 diff --git a/zoneinfo/Etc/GMT+8.ics b/zoneinfo/Etc/GMT+8.ics index 10b4b376..eee9b172 100644 --- a/zoneinfo/Etc/GMT+8.ics +++ b/zoneinfo/Etc/GMT+8.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+8 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+8 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+8 BEGIN:STANDARD TZNAME:-08 diff --git a/zoneinfo/Etc/GMT+9.ics b/zoneinfo/Etc/GMT+9.ics index 1cfea1a9..6074e97f 100644 --- a/zoneinfo/Etc/GMT+9.ics +++ b/zoneinfo/Etc/GMT+9.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT+9 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT+9 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT+9 BEGIN:STANDARD TZNAME:-09 diff --git a/zoneinfo/Etc/GMT-0.ics b/zoneinfo/Etc/GMT-0.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/Etc/GMT-0.ics +++ b/zoneinfo/Etc/GMT-0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/GMT-1.ics b/zoneinfo/Etc/GMT-1.ics index 3dc43e05..a05027e8 100644 --- a/zoneinfo/Etc/GMT-1.ics +++ b/zoneinfo/Etc/GMT-1.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-1 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-1 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-1 BEGIN:STANDARD TZNAME:+01 diff --git a/zoneinfo/Etc/GMT-10.ics b/zoneinfo/Etc/GMT-10.ics index 79493614..397de111 100644 --- a/zoneinfo/Etc/GMT-10.ics +++ b/zoneinfo/Etc/GMT-10.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-10 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-10 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-10 BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Etc/GMT-11.ics b/zoneinfo/Etc/GMT-11.ics index 5d32a53a..5184c655 100644 --- a/zoneinfo/Etc/GMT-11.ics +++ b/zoneinfo/Etc/GMT-11.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-11 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-11 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-11 BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Etc/GMT-12.ics b/zoneinfo/Etc/GMT-12.ics index 51f85051..37db6bc2 100644 --- a/zoneinfo/Etc/GMT-12.ics +++ b/zoneinfo/Etc/GMT-12.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-12 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-12 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-12 BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Etc/GMT-13.ics b/zoneinfo/Etc/GMT-13.ics index 63d5432e..acf164a5 100644 --- a/zoneinfo/Etc/GMT-13.ics +++ b/zoneinfo/Etc/GMT-13.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-13 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-13 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-13 BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Etc/GMT-14.ics b/zoneinfo/Etc/GMT-14.ics index 6a15f826..4e49b3e9 100644 --- a/zoneinfo/Etc/GMT-14.ics +++ b/zoneinfo/Etc/GMT-14.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-14 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-14 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-14 BEGIN:STANDARD TZNAME:+14 diff --git a/zoneinfo/Etc/GMT-2.ics b/zoneinfo/Etc/GMT-2.ics index 5e4f919a..17ec95a5 100644 --- a/zoneinfo/Etc/GMT-2.ics +++ b/zoneinfo/Etc/GMT-2.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-2 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-2 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-2 BEGIN:STANDARD TZNAME:+02 diff --git a/zoneinfo/Etc/GMT-3.ics b/zoneinfo/Etc/GMT-3.ics index 7084bf5c..86d43c38 100644 --- a/zoneinfo/Etc/GMT-3.ics +++ b/zoneinfo/Etc/GMT-3.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-3 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-3 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-3 BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Etc/GMT-4.ics b/zoneinfo/Etc/GMT-4.ics index c27ff08b..c73be897 100644 --- a/zoneinfo/Etc/GMT-4.ics +++ b/zoneinfo/Etc/GMT-4.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-4 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-4 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-4 BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Etc/GMT-5.ics b/zoneinfo/Etc/GMT-5.ics index 6b2f1832..8ec69f7c 100644 --- a/zoneinfo/Etc/GMT-5.ics +++ b/zoneinfo/Etc/GMT-5.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-5 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-5 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-5 BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Etc/GMT-6.ics b/zoneinfo/Etc/GMT-6.ics index 8a70f382..f5e4d95a 100644 --- a/zoneinfo/Etc/GMT-6.ics +++ b/zoneinfo/Etc/GMT-6.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-6 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-6 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-6 BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Etc/GMT-7.ics b/zoneinfo/Etc/GMT-7.ics index 0a76390e..30139f8a 100644 --- a/zoneinfo/Etc/GMT-7.ics +++ b/zoneinfo/Etc/GMT-7.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-7 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-7 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-7 BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Etc/GMT-8.ics b/zoneinfo/Etc/GMT-8.ics index efb0fb09..59fe0783 100644 --- a/zoneinfo/Etc/GMT-8.ics +++ b/zoneinfo/Etc/GMT-8.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-8 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-8 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-8 BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Etc/GMT-9.ics b/zoneinfo/Etc/GMT-9.ics index 88feb74f..1937ba1a 100644 --- a/zoneinfo/Etc/GMT-9.ics +++ b/zoneinfo/Etc/GMT-9.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT-9 -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT-9 +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT-9 BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Etc/GMT.ics b/zoneinfo/Etc/GMT.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/Etc/GMT.ics +++ b/zoneinfo/Etc/GMT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/GMT0.ics b/zoneinfo/Etc/GMT0.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/Etc/GMT0.ics +++ b/zoneinfo/Etc/GMT0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/Greenwich.ics b/zoneinfo/Etc/Greenwich.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/Etc/Greenwich.ics +++ b/zoneinfo/Etc/Greenwich.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/UCT.ics b/zoneinfo/Etc/UCT.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/Etc/UCT.ics +++ b/zoneinfo/Etc/UCT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Etc/UTC.ics b/zoneinfo/Etc/UTC.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/Etc/UTC.ics +++ b/zoneinfo/Etc/UTC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Etc/Universal.ics b/zoneinfo/Etc/Universal.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/Etc/Universal.ics +++ b/zoneinfo/Etc/Universal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Etc/Zulu.ics b/zoneinfo/Etc/Zulu.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/Etc/Zulu.ics +++ b/zoneinfo/Etc/Zulu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Europe/Amsterdam.ics b/zoneinfo/Europe/Amsterdam.ics index f000a260..990cd196 100644 --- a/zoneinfo/Europe/Amsterdam.ics +++ b/zoneinfo/Europe/Amsterdam.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Amsterdam -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Amsterdam +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Amsterdam BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Andorra.ics b/zoneinfo/Europe/Andorra.ics index 3260ed94..f6b38144 100644 --- a/zoneinfo/Europe/Andorra.ics +++ b/zoneinfo/Europe/Andorra.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Andorra -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Andorra +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Andorra BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Astrakhan.ics b/zoneinfo/Europe/Astrakhan.ics index ef64e1c0..574566e2 100644 --- a/zoneinfo/Europe/Astrakhan.ics +++ b/zoneinfo/Europe/Astrakhan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Astrakhan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Astrakhan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Astrakhan BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/Athens.ics b/zoneinfo/Europe/Athens.ics index 9facb940..3044379f 100644 --- a/zoneinfo/Europe/Athens.ics +++ b/zoneinfo/Europe/Athens.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Athens -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Athens +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Athens BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Belfast.ics b/zoneinfo/Europe/Belfast.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/Europe/Belfast.ics +++ b/zoneinfo/Europe/Belfast.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Belgrade.ics b/zoneinfo/Europe/Belgrade.ics index 34b5583b..4a7abf9a 100644 --- a/zoneinfo/Europe/Belgrade.ics +++ b/zoneinfo/Europe/Belgrade.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Belgrade -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Belgrade +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Berlin.ics b/zoneinfo/Europe/Berlin.ics index b48761c1..344a2c8c 100644 --- a/zoneinfo/Europe/Berlin.ics +++ b/zoneinfo/Europe/Berlin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Berlin -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Berlin +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Bratislava.ics b/zoneinfo/Europe/Bratislava.ics index 4208cfc8..b02461c9 100644 --- a/zoneinfo/Europe/Bratislava.ics +++ b/zoneinfo/Europe/Bratislava.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Prague -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Prague +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Prague BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Brussels.ics b/zoneinfo/Europe/Brussels.ics index bae9e28b..98517524 100644 --- a/zoneinfo/Europe/Brussels.ics +++ b/zoneinfo/Europe/Brussels.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Brussels -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Brussels +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Brussels BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Bucharest.ics b/zoneinfo/Europe/Bucharest.ics index 90f8f65e..fc61d955 100644 --- a/zoneinfo/Europe/Bucharest.ics +++ b/zoneinfo/Europe/Bucharest.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Bucharest -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Bucharest +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Bucharest BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Budapest.ics b/zoneinfo/Europe/Budapest.ics index 5ad47325..a8ed0140 100644 --- a/zoneinfo/Europe/Budapest.ics +++ b/zoneinfo/Europe/Budapest.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Budapest -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Budapest +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Budapest BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Busingen.ics b/zoneinfo/Europe/Busingen.ics index 8d071ddf..8f592862 100644 --- a/zoneinfo/Europe/Busingen.ics +++ b/zoneinfo/Europe/Busingen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Zurich -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Zurich +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Chisinau.ics b/zoneinfo/Europe/Chisinau.ics index e0f32d84..48d60759 100644 --- a/zoneinfo/Europe/Chisinau.ics +++ b/zoneinfo/Europe/Chisinau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Chisinau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Chisinau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Chisinau BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Copenhagen.ics b/zoneinfo/Europe/Copenhagen.ics index afab1335..15bb097b 100644 --- a/zoneinfo/Europe/Copenhagen.ics +++ b/zoneinfo/Europe/Copenhagen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Copenhagen -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Copenhagen +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Copenhagen BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Dublin.ics b/zoneinfo/Europe/Dublin.ics index 52380405..6f828f29 100644 --- a/zoneinfo/Europe/Dublin.ics +++ b/zoneinfo/Europe/Dublin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Dublin -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Dublin +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Dublin BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Europe/Gibraltar.ics b/zoneinfo/Europe/Gibraltar.ics index aa3d95b8..3146e13f 100644 --- a/zoneinfo/Europe/Gibraltar.ics +++ b/zoneinfo/Europe/Gibraltar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Gibraltar -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Gibraltar +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Gibraltar BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Guernsey.ics b/zoneinfo/Europe/Guernsey.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/Europe/Guernsey.ics +++ b/zoneinfo/Europe/Guernsey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Helsinki.ics b/zoneinfo/Europe/Helsinki.ics index 889988fe..c831f13b 100644 --- a/zoneinfo/Europe/Helsinki.ics +++ b/zoneinfo/Europe/Helsinki.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Helsinki -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Helsinki +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Helsinki BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Isle_of_Man.ics b/zoneinfo/Europe/Isle_of_Man.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/Europe/Isle_of_Man.ics +++ b/zoneinfo/Europe/Isle_of_Man.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Istanbul.ics b/zoneinfo/Europe/Istanbul.ics index 576ca49c..19e3965d 100644 --- a/zoneinfo/Europe/Istanbul.ics +++ b/zoneinfo/Europe/Istanbul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Istanbul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Istanbul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Jersey.ics b/zoneinfo/Europe/Jersey.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/Europe/Jersey.ics +++ b/zoneinfo/Europe/Jersey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Kaliningrad.ics b/zoneinfo/Europe/Kaliningrad.ics index 84b77e0f..aabc8c79 100644 --- a/zoneinfo/Europe/Kaliningrad.ics +++ b/zoneinfo/Europe/Kaliningrad.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Kaliningrad -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Kaliningrad +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Kaliningrad BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Europe/Kiev.ics b/zoneinfo/Europe/Kiev.ics index e67c1c91..dae8232e 100644 --- a/zoneinfo/Europe/Kiev.ics +++ b/zoneinfo/Europe/Kiev.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Kiev -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Kiev +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Kiev BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Kirov.ics b/zoneinfo/Europe/Kirov.ics index 5866303f..8db12441 100644 --- a/zoneinfo/Europe/Kirov.ics +++ b/zoneinfo/Europe/Kirov.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Kirov -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Kirov +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Kirov BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Lisbon.ics b/zoneinfo/Europe/Lisbon.ics index e60df94c..03df53bc 100644 --- a/zoneinfo/Europe/Lisbon.ics +++ b/zoneinfo/Europe/Lisbon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Lisbon -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Lisbon +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Lisbon BEGIN:STANDARD TZNAME:WET diff --git a/zoneinfo/Europe/Ljubljana.ics b/zoneinfo/Europe/Ljubljana.ics index 34b5583b..4a7abf9a 100644 --- a/zoneinfo/Europe/Ljubljana.ics +++ b/zoneinfo/Europe/Ljubljana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Belgrade -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Belgrade +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/London.ics b/zoneinfo/Europe/London.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/Europe/London.ics +++ b/zoneinfo/Europe/London.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Luxembourg.ics b/zoneinfo/Europe/Luxembourg.ics index 6c9d43c1..01e96f10 100644 --- a/zoneinfo/Europe/Luxembourg.ics +++ b/zoneinfo/Europe/Luxembourg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Luxembourg -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Luxembourg +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Luxembourg BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Madrid.ics b/zoneinfo/Europe/Madrid.ics index f92669f9..5961174c 100644 --- a/zoneinfo/Europe/Madrid.ics +++ b/zoneinfo/Europe/Madrid.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Madrid -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Madrid +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Madrid BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Malta.ics b/zoneinfo/Europe/Malta.ics index ff1ead71..5377a99a 100644 --- a/zoneinfo/Europe/Malta.ics +++ b/zoneinfo/Europe/Malta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Malta -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Malta +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Malta BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Mariehamn.ics b/zoneinfo/Europe/Mariehamn.ics index 889988fe..c831f13b 100644 --- a/zoneinfo/Europe/Mariehamn.ics +++ b/zoneinfo/Europe/Mariehamn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Helsinki -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Helsinki +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Helsinki BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Minsk.ics b/zoneinfo/Europe/Minsk.ics index 4c21f35a..1f5b6304 100644 --- a/zoneinfo/Europe/Minsk.ics +++ b/zoneinfo/Europe/Minsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Minsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Minsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Minsk BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Monaco.ics b/zoneinfo/Europe/Monaco.ics index 4d68c63d..554eb76d 100644 --- a/zoneinfo/Europe/Monaco.ics +++ b/zoneinfo/Europe/Monaco.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Monaco -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Monaco +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Monaco BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Moscow.ics b/zoneinfo/Europe/Moscow.ics index 9c539797..7396b02b 100644 --- a/zoneinfo/Europe/Moscow.ics +++ b/zoneinfo/Europe/Moscow.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Moscow -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Moscow +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Moscow BEGIN:STANDARD TZNAME:MSK diff --git a/zoneinfo/Europe/Nicosia.ics b/zoneinfo/Europe/Nicosia.ics index 3a79df1a..8ed99e7e 100644 --- a/zoneinfo/Europe/Nicosia.ics +++ b/zoneinfo/Europe/Nicosia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Nicosia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Nicosia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Nicosia BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Europe/Oslo.ics b/zoneinfo/Europe/Oslo.ics index e337e96f..9f8f9a19 100644 --- a/zoneinfo/Europe/Oslo.ics +++ b/zoneinfo/Europe/Oslo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Oslo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Oslo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Paris.ics b/zoneinfo/Europe/Paris.ics index 2f92ebd7..e9caa654 100644 --- a/zoneinfo/Europe/Paris.ics +++ b/zoneinfo/Europe/Paris.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Paris -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Paris +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Podgorica.ics b/zoneinfo/Europe/Podgorica.ics index 34b5583b..4a7abf9a 100644 --- a/zoneinfo/Europe/Podgorica.ics +++ b/zoneinfo/Europe/Podgorica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Belgrade -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Belgrade +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Prague.ics b/zoneinfo/Europe/Prague.ics index 4208cfc8..b02461c9 100644 --- a/zoneinfo/Europe/Prague.ics +++ b/zoneinfo/Europe/Prague.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Prague -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Prague +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Prague BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Riga.ics b/zoneinfo/Europe/Riga.ics index 0940f1f5..09ed8c01 100644 --- a/zoneinfo/Europe/Riga.ics +++ b/zoneinfo/Europe/Riga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Riga -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Riga +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Riga BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Rome.ics b/zoneinfo/Europe/Rome.ics index 51108623..0a7114db 100644 --- a/zoneinfo/Europe/Rome.ics +++ b/zoneinfo/Europe/Rome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Rome -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Rome +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Samara.ics b/zoneinfo/Europe/Samara.ics index f0cc5c7f..b7fc061a 100644 --- a/zoneinfo/Europe/Samara.ics +++ b/zoneinfo/Europe/Samara.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Samara -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Samara +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Samara BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/San_Marino.ics b/zoneinfo/Europe/San_Marino.ics index 51108623..0a7114db 100644 --- a/zoneinfo/Europe/San_Marino.ics +++ b/zoneinfo/Europe/San_Marino.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Rome -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Rome +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Sarajevo.ics b/zoneinfo/Europe/Sarajevo.ics index 34b5583b..4a7abf9a 100644 --- a/zoneinfo/Europe/Sarajevo.ics +++ b/zoneinfo/Europe/Sarajevo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Belgrade -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Belgrade +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Saratov.ics b/zoneinfo/Europe/Saratov.ics index 91eded5f..21a2c047 100644 --- a/zoneinfo/Europe/Saratov.ics +++ b/zoneinfo/Europe/Saratov.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Saratov -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Saratov +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Saratov BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/Simferopol.ics b/zoneinfo/Europe/Simferopol.ics index e5e9237a..230ea507 100644 --- a/zoneinfo/Europe/Simferopol.ics +++ b/zoneinfo/Europe/Simferopol.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Simferopol -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Simferopol +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Simferopol BEGIN:STANDARD TZNAME:MSK diff --git a/zoneinfo/Europe/Skopje.ics b/zoneinfo/Europe/Skopje.ics index 34b5583b..4a7abf9a 100644 --- a/zoneinfo/Europe/Skopje.ics +++ b/zoneinfo/Europe/Skopje.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Belgrade -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Belgrade +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Sofia.ics b/zoneinfo/Europe/Sofia.ics index cd3fe083..ab7230d7 100644 --- a/zoneinfo/Europe/Sofia.ics +++ b/zoneinfo/Europe/Sofia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Sofia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Sofia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Sofia BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Stockholm.ics b/zoneinfo/Europe/Stockholm.ics index 352bcf74..5df34ec1 100644 --- a/zoneinfo/Europe/Stockholm.ics +++ b/zoneinfo/Europe/Stockholm.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Stockholm -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Stockholm +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Stockholm BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Tallinn.ics b/zoneinfo/Europe/Tallinn.ics index c678807d..9cb97bb3 100644 --- a/zoneinfo/Europe/Tallinn.ics +++ b/zoneinfo/Europe/Tallinn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Tallinn -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Tallinn +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Tallinn BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Tirane.ics b/zoneinfo/Europe/Tirane.ics index fce87af7..43c66c01 100644 --- a/zoneinfo/Europe/Tirane.ics +++ b/zoneinfo/Europe/Tirane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Tirane -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Tirane +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Tirane BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Tiraspol.ics b/zoneinfo/Europe/Tiraspol.ics index e0f32d84..48d60759 100644 --- a/zoneinfo/Europe/Tiraspol.ics +++ b/zoneinfo/Europe/Tiraspol.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Chisinau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Chisinau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Chisinau BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Ulyanovsk.ics b/zoneinfo/Europe/Ulyanovsk.ics index eaa998a4..85724cac 100644 --- a/zoneinfo/Europe/Ulyanovsk.ics +++ b/zoneinfo/Europe/Ulyanovsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Ulyanovsk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Ulyanovsk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Ulyanovsk BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/Uzhgorod.ics b/zoneinfo/Europe/Uzhgorod.ics index 40d34061..5d0e5324 100644 --- a/zoneinfo/Europe/Uzhgorod.ics +++ b/zoneinfo/Europe/Uzhgorod.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Uzhgorod -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Uzhgorod +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Uzhgorod BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Vaduz.ics b/zoneinfo/Europe/Vaduz.ics index 8d071ddf..8f592862 100644 --- a/zoneinfo/Europe/Vaduz.ics +++ b/zoneinfo/Europe/Vaduz.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Zurich -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Zurich +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Vatican.ics b/zoneinfo/Europe/Vatican.ics index 51108623..0a7114db 100644 --- a/zoneinfo/Europe/Vatican.ics +++ b/zoneinfo/Europe/Vatican.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Rome -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Rome +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Vienna.ics b/zoneinfo/Europe/Vienna.ics index 902e6f91..6aff9fc9 100644 --- a/zoneinfo/Europe/Vienna.ics +++ b/zoneinfo/Europe/Vienna.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Vienna -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Vienna +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Vienna BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Vilnius.ics b/zoneinfo/Europe/Vilnius.ics index 04b8721c..22274d41 100644 --- a/zoneinfo/Europe/Vilnius.ics +++ b/zoneinfo/Europe/Vilnius.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Vilnius -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Vilnius +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Vilnius BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Volgograd.ics b/zoneinfo/Europe/Volgograd.ics index f3448341..8f87d665 100644 --- a/zoneinfo/Europe/Volgograd.ics +++ b/zoneinfo/Europe/Volgograd.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Volgograd -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Volgograd +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Volgograd BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Warsaw.ics b/zoneinfo/Europe/Warsaw.ics index 3c65924d..99f620a9 100644 --- a/zoneinfo/Europe/Warsaw.ics +++ b/zoneinfo/Europe/Warsaw.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Warsaw -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Warsaw +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Warsaw BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Zagreb.ics b/zoneinfo/Europe/Zagreb.ics index 34b5583b..4a7abf9a 100644 --- a/zoneinfo/Europe/Zagreb.ics +++ b/zoneinfo/Europe/Zagreb.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Belgrade -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Belgrade +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Zaporozhye.ics b/zoneinfo/Europe/Zaporozhye.ics index b7b7eb54..0f4b6578 100644 --- a/zoneinfo/Europe/Zaporozhye.ics +++ b/zoneinfo/Europe/Zaporozhye.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Zaporozhye -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Zaporozhye +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Zaporozhye BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Zurich.ics b/zoneinfo/Europe/Zurich.ics index 8d071ddf..8f592862 100644 --- a/zoneinfo/Europe/Zurich.ics +++ b/zoneinfo/Europe/Zurich.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Zurich -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Zurich +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/GB-Eire.ics b/zoneinfo/GB-Eire.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/GB-Eire.ics +++ b/zoneinfo/GB-Eire.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/GB.ics b/zoneinfo/GB.ics index 567f26b6..220c97d6 100644 --- a/zoneinfo/GB.ics +++ b/zoneinfo/GB.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/London -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/London +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/GMT+0.ics b/zoneinfo/GMT+0.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/GMT+0.ics +++ b/zoneinfo/GMT+0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/GMT-0.ics b/zoneinfo/GMT-0.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/GMT-0.ics +++ b/zoneinfo/GMT-0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/GMT.ics b/zoneinfo/GMT.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/GMT.ics +++ b/zoneinfo/GMT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/GMT0.ics b/zoneinfo/GMT0.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/GMT0.ics +++ b/zoneinfo/GMT0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Greenwich.ics b/zoneinfo/Greenwich.ics index 0b4e712c..bb97d987 100644 --- a/zoneinfo/Greenwich.ics +++ b/zoneinfo/Greenwich.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/GMT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/GMT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/HST.ics b/zoneinfo/HST.ics index 9028758f..b73773bb 100644 --- a/zoneinfo/HST.ics +++ b/zoneinfo/HST.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/HST -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/HST +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:HST BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/Hongkong.ics b/zoneinfo/Hongkong.ics index 4bb4603f..79e66e86 100644 --- a/zoneinfo/Hongkong.ics +++ b/zoneinfo/Hongkong.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Hong_Kong -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Hong_Kong +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Hong_Kong BEGIN:STANDARD TZNAME:HKT diff --git a/zoneinfo/Iceland.ics b/zoneinfo/Iceland.ics index 8913b0ac..83bd2607 100644 --- a/zoneinfo/Iceland.ics +++ b/zoneinfo/Iceland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Atlantic/Reykjavik -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Atlantic/Reykjavik +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Atlantic/Reykjavik BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Indian/Antananarivo.ics b/zoneinfo/Indian/Antananarivo.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Indian/Antananarivo.ics +++ b/zoneinfo/Indian/Antananarivo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Indian/Chagos.ics b/zoneinfo/Indian/Chagos.ics index 453c7cbb..8bb3a3ec 100644 --- a/zoneinfo/Indian/Chagos.ics +++ b/zoneinfo/Indian/Chagos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Chagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Chagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Chagos BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Indian/Christmas.ics b/zoneinfo/Indian/Christmas.ics index 56aa3c93..b3c90d3e 100644 --- a/zoneinfo/Indian/Christmas.ics +++ b/zoneinfo/Indian/Christmas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Christmas -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Christmas +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Christmas BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Indian/Cocos.ics b/zoneinfo/Indian/Cocos.ics index dd4139c4..a5d7ba24 100644 --- a/zoneinfo/Indian/Cocos.ics +++ b/zoneinfo/Indian/Cocos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Cocos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Cocos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Cocos BEGIN:STANDARD TZNAME:+0630 diff --git a/zoneinfo/Indian/Comoro.ics b/zoneinfo/Indian/Comoro.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Indian/Comoro.ics +++ b/zoneinfo/Indian/Comoro.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Indian/Kerguelen.ics b/zoneinfo/Indian/Kerguelen.ics index a790cd7a..f9d7b6d1 100644 --- a/zoneinfo/Indian/Kerguelen.ics +++ b/zoneinfo/Indian/Kerguelen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Kerguelen -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Kerguelen +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Kerguelen BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Indian/Mahe.ics b/zoneinfo/Indian/Mahe.ics index b48681a0..f82fabea 100644 --- a/zoneinfo/Indian/Mahe.ics +++ b/zoneinfo/Indian/Mahe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Mahe -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Mahe +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Mahe BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Indian/Maldives.ics b/zoneinfo/Indian/Maldives.ics index 9487c988..18faf04a 100644 --- a/zoneinfo/Indian/Maldives.ics +++ b/zoneinfo/Indian/Maldives.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Maldives -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Maldives +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Maldives BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Indian/Mauritius.ics b/zoneinfo/Indian/Mauritius.ics index 9e99e940..ccd76bff 100644 --- a/zoneinfo/Indian/Mauritius.ics +++ b/zoneinfo/Indian/Mauritius.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Mauritius -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Mauritius +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Mauritius BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Indian/Mayotte.ics b/zoneinfo/Indian/Mayotte.ics index 9eeda226..8e453cb7 100644 --- a/zoneinfo/Indian/Mayotte.ics +++ b/zoneinfo/Indian/Mayotte.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Nairobi -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Nairobi +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Indian/Reunion.ics b/zoneinfo/Indian/Reunion.ics index 5246269a..d3ced2bf 100644 --- a/zoneinfo/Indian/Reunion.ics +++ b/zoneinfo/Indian/Reunion.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Indian/Reunion -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Indian/Reunion +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Indian/Reunion BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Iran.ics b/zoneinfo/Iran.ics index bdbfb7ac..9e2d4fb1 100644 --- a/zoneinfo/Iran.ics +++ b/zoneinfo/Iran.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tehran -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tehran +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tehran BEGIN:DAYLIGHT TZNAME:+0430 diff --git a/zoneinfo/Israel.ics b/zoneinfo/Israel.ics index f41a1c68..68e86813 100644 --- a/zoneinfo/Israel.ics +++ b/zoneinfo/Israel.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Jerusalem -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Jerusalem +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZNAME:IDT diff --git a/zoneinfo/Jamaica.ics b/zoneinfo/Jamaica.ics index 1ef6b2d3..b7a45b61 100644 --- a/zoneinfo/Jamaica.ics +++ b/zoneinfo/Jamaica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Jamaica -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Jamaica +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Jamaica BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/Japan.ics b/zoneinfo/Japan.ics index cbbad067..397e64aa 100644 --- a/zoneinfo/Japan.ics +++ b/zoneinfo/Japan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Tokyo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Tokyo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Tokyo BEGIN:STANDARD TZNAME:JST diff --git a/zoneinfo/Kwajalein.ics b/zoneinfo/Kwajalein.ics index 08b52696..2be6b7c1 100644 --- a/zoneinfo/Kwajalein.ics +++ b/zoneinfo/Kwajalein.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Kwajalein -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Kwajalein +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Kwajalein BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Libya.ics b/zoneinfo/Libya.ics index 6d31ae4a..adf663b2 100644 --- a/zoneinfo/Libya.ics +++ b/zoneinfo/Libya.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Africa/Tripoli -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Africa/Tripoli +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Africa/Tripoli BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/MET.ics b/zoneinfo/MET.ics index be1a9dd4..b5395c51 100644 --- a/zoneinfo/MET.ics +++ b/zoneinfo/MET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/MET -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/MET +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:MET BEGIN:DAYLIGHT TZNAME:MEST diff --git a/zoneinfo/MST.ics b/zoneinfo/MST.ics index 79847ad4..1851f3a7 100644 --- a/zoneinfo/MST.ics +++ b/zoneinfo/MST.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/MST -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/MST +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:MST BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/MST7MDT.ics b/zoneinfo/MST7MDT.ics index 3e204499..f7ffe774 100644 --- a/zoneinfo/MST7MDT.ics +++ b/zoneinfo/MST7MDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/MST7MDT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/MST7MDT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:MST7MDT BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Mexico/BajaNorte.ics b/zoneinfo/Mexico/BajaNorte.ics index 2141774b..e4f7ae6f 100644 --- a/zoneinfo/Mexico/BajaNorte.ics +++ b/zoneinfo/Mexico/BajaNorte.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Tijuana -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Tijuana +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/Mexico/BajaSur.ics b/zoneinfo/Mexico/BajaSur.ics index 79e4194b..bfd98fbc 100644 --- a/zoneinfo/Mexico/BajaSur.ics +++ b/zoneinfo/Mexico/BajaSur.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Mazatlan -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Mazatlan +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Mazatlan BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Mexico/General.ics b/zoneinfo/Mexico/General.ics index 8f72edb3..3def11f5 100644 --- a/zoneinfo/Mexico/General.ics +++ b/zoneinfo/Mexico/General.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Mexico_City -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Mexico_City +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Mexico_City BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/NZ-CHAT.ics b/zoneinfo/NZ-CHAT.ics index e6f8db75..825c2414 100644 --- a/zoneinfo/NZ-CHAT.ics +++ b/zoneinfo/NZ-CHAT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Chatham -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Chatham +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Chatham BEGIN:DAYLIGHT TZNAME:+1345 diff --git a/zoneinfo/NZ.ics b/zoneinfo/NZ.ics index 22f2072d..96762274 100644 --- a/zoneinfo/NZ.ics +++ b/zoneinfo/NZ.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Auckland -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Auckland +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Navajo.ics b/zoneinfo/Navajo.ics index 79d6ba54..c5697a29 100644 --- a/zoneinfo/Navajo.ics +++ b/zoneinfo/Navajo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Denver -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Denver +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/PRC.ics b/zoneinfo/PRC.ics index ee91b6ac..fb552ce7 100644 --- a/zoneinfo/PRC.ics +++ b/zoneinfo/PRC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Shanghai -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Shanghai +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/PST8PDT.ics b/zoneinfo/PST8PDT.ics index 375de779..7d9dd5f8 100644 --- a/zoneinfo/PST8PDT.ics +++ b/zoneinfo/PST8PDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/PST8PDT -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/PST8PDT +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:PST8PDT BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/Pacific/Apia.ics b/zoneinfo/Pacific/Apia.ics index 8aaa928c..e4d59aea 100644 --- a/zoneinfo/Pacific/Apia.ics +++ b/zoneinfo/Pacific/Apia.ics @@ -2,22 +2,14 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Apia -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Apia +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Apia BEGIN:STANDARD TZNAME:+13 -TZOFFSETFROM:+1400 +TZOFFSETFROM:+1300 TZOFFSETTO:+1300 -DTSTART:19700405T040000 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +DTSTART:19700101T000000 END:STANDARD -BEGIN:DAYLIGHT -TZNAME:+14 -TZOFFSETFROM:+1300 -TZOFFSETTO:+1400 -DTSTART:19700927T030000 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU -END:DAYLIGHT END:VTIMEZONE END:VCALENDAR diff --git a/zoneinfo/Pacific/Auckland.ics b/zoneinfo/Pacific/Auckland.ics index 22f2072d..96762274 100644 --- a/zoneinfo/Pacific/Auckland.ics +++ b/zoneinfo/Pacific/Auckland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Auckland -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Auckland +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Pacific/Bougainville.ics b/zoneinfo/Pacific/Bougainville.ics index a1cae494..44c2e3a7 100644 --- a/zoneinfo/Pacific/Bougainville.ics +++ b/zoneinfo/Pacific/Bougainville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Bougainville -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Bougainville +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Bougainville BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Chatham.ics b/zoneinfo/Pacific/Chatham.ics index e6f8db75..825c2414 100644 --- a/zoneinfo/Pacific/Chatham.ics +++ b/zoneinfo/Pacific/Chatham.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Chatham -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Chatham +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Chatham BEGIN:DAYLIGHT TZNAME:+1345 diff --git a/zoneinfo/Pacific/Chuuk.ics b/zoneinfo/Pacific/Chuuk.ics index 771c4e5a..8cf293db 100644 --- a/zoneinfo/Pacific/Chuuk.ics +++ b/zoneinfo/Pacific/Chuuk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Chuuk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Chuuk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Pacific/Easter.ics b/zoneinfo/Pacific/Easter.ics index 08ad2cfe..5b3c6a95 100644 --- a/zoneinfo/Pacific/Easter.ics +++ b/zoneinfo/Pacific/Easter.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Easter -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Easter +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Easter BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Pacific/Efate.ics b/zoneinfo/Pacific/Efate.ics index 5cf28c16..849b1ddd 100644 --- a/zoneinfo/Pacific/Efate.ics +++ b/zoneinfo/Pacific/Efate.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Efate -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Efate +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Efate BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Enderbury.ics b/zoneinfo/Pacific/Enderbury.ics index 0cb1ba88..6047c444 100644 --- a/zoneinfo/Pacific/Enderbury.ics +++ b/zoneinfo/Pacific/Enderbury.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Enderbury -LAST-MODIFIED:20210410T122212Z -X-LIC-LOCATION:Pacific/Enderbury +TZID:/citadel.org/20211009_1/Pacific/Kanton +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:Pacific/Kanton BEGIN:STANDARD TZNAME:+13 TZOFFSETFROM:+1300 diff --git a/zoneinfo/Pacific/Fakaofo.ics b/zoneinfo/Pacific/Fakaofo.ics index 611e6354..7495f498 100644 --- a/zoneinfo/Pacific/Fakaofo.ics +++ b/zoneinfo/Pacific/Fakaofo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Fakaofo -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Fakaofo +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Fakaofo BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Fiji.ics b/zoneinfo/Pacific/Fiji.ics index 3f5867ff..52fcacd1 100644 --- a/zoneinfo/Pacific/Fiji.ics +++ b/zoneinfo/Pacific/Fiji.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Fiji -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Fiji +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Fiji BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Funafuti.ics b/zoneinfo/Pacific/Funafuti.ics index 5543da78..5ac4fcd9 100644 --- a/zoneinfo/Pacific/Funafuti.ics +++ b/zoneinfo/Pacific/Funafuti.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Funafuti -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Funafuti +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Funafuti BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Galapagos.ics b/zoneinfo/Pacific/Galapagos.ics index 22aa0ea0..a58d9850 100644 --- a/zoneinfo/Pacific/Galapagos.ics +++ b/zoneinfo/Pacific/Galapagos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Galapagos -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Galapagos +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Galapagos BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Pacific/Gambier.ics b/zoneinfo/Pacific/Gambier.ics index 6bf45db6..ff34cbe1 100644 --- a/zoneinfo/Pacific/Gambier.ics +++ b/zoneinfo/Pacific/Gambier.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Gambier -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Gambier +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Gambier BEGIN:STANDARD TZNAME:-09 diff --git a/zoneinfo/Pacific/Guadalcanal.ics b/zoneinfo/Pacific/Guadalcanal.ics index c9da6fca..a0b8c884 100644 --- a/zoneinfo/Pacific/Guadalcanal.ics +++ b/zoneinfo/Pacific/Guadalcanal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Guadalcanal -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Guadalcanal +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Guadalcanal BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Guam.ics b/zoneinfo/Pacific/Guam.ics index c646e2b7..c7a4a42a 100644 --- a/zoneinfo/Pacific/Guam.ics +++ b/zoneinfo/Pacific/Guam.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Guam -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Guam +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Guam BEGIN:STANDARD TZNAME:ChST diff --git a/zoneinfo/Pacific/Honolulu.ics b/zoneinfo/Pacific/Honolulu.ics index 7c3f0781..617c83fb 100644 --- a/zoneinfo/Pacific/Honolulu.ics +++ b/zoneinfo/Pacific/Honolulu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Honolulu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Honolulu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/Pacific/Johnston.ics b/zoneinfo/Pacific/Johnston.ics index 7c3f0781..617c83fb 100644 --- a/zoneinfo/Pacific/Johnston.ics +++ b/zoneinfo/Pacific/Johnston.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Honolulu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Honolulu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/Pacific/Kanton.ics b/zoneinfo/Pacific/Kanton.ics new file mode 100644 index 00000000..6047c444 --- /dev/null +++ b/zoneinfo/Pacific/Kanton.ics @@ -0,0 +1,15 @@ +BEGIN:VCALENDAR +PRODID:-//citadel.org//NONSGML Citadel calendar//EN +VERSION:2.0 +BEGIN:VTIMEZONE +TZID:/citadel.org/20211009_1/Pacific/Kanton +LAST-MODIFIED:20211009T133001Z +X-LIC-LOCATION:Pacific/Kanton +BEGIN:STANDARD +TZNAME:+13 +TZOFFSETFROM:+1300 +TZOFFSETTO:+1300 +DTSTART:19700101T000000 +END:STANDARD +END:VTIMEZONE +END:VCALENDAR diff --git a/zoneinfo/Pacific/Kiritimati.ics b/zoneinfo/Pacific/Kiritimati.ics index e4a0076f..05d255b0 100644 --- a/zoneinfo/Pacific/Kiritimati.ics +++ b/zoneinfo/Pacific/Kiritimati.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Kiritimati -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Kiritimati +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Kiritimati BEGIN:STANDARD TZNAME:+14 diff --git a/zoneinfo/Pacific/Kosrae.ics b/zoneinfo/Pacific/Kosrae.ics index 34b4cd6f..47f314c6 100644 --- a/zoneinfo/Pacific/Kosrae.ics +++ b/zoneinfo/Pacific/Kosrae.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Kosrae -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Kosrae +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Kosrae BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Kwajalein.ics b/zoneinfo/Pacific/Kwajalein.ics index 08b52696..2be6b7c1 100644 --- a/zoneinfo/Pacific/Kwajalein.ics +++ b/zoneinfo/Pacific/Kwajalein.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Kwajalein -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Kwajalein +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Kwajalein BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Majuro.ics b/zoneinfo/Pacific/Majuro.ics index 240964e3..f246bf96 100644 --- a/zoneinfo/Pacific/Majuro.ics +++ b/zoneinfo/Pacific/Majuro.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Majuro -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Majuro +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Majuro BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Marquesas.ics b/zoneinfo/Pacific/Marquesas.ics index 807caa80..ea4fe326 100644 --- a/zoneinfo/Pacific/Marquesas.ics +++ b/zoneinfo/Pacific/Marquesas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Marquesas -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Marquesas +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Marquesas BEGIN:STANDARD TZNAME:-0930 diff --git a/zoneinfo/Pacific/Midway.ics b/zoneinfo/Pacific/Midway.ics index 0e9f2214..25c20123 100644 --- a/zoneinfo/Pacific/Midway.ics +++ b/zoneinfo/Pacific/Midway.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pago_Pago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pago_Pago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/Pacific/Nauru.ics b/zoneinfo/Pacific/Nauru.ics index 9d74f352..f08aef20 100644 --- a/zoneinfo/Pacific/Nauru.ics +++ b/zoneinfo/Pacific/Nauru.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Nauru -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Nauru +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Nauru BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Niue.ics b/zoneinfo/Pacific/Niue.ics index 6534dbe9..2659890f 100644 --- a/zoneinfo/Pacific/Niue.ics +++ b/zoneinfo/Pacific/Niue.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Niue -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Niue +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Niue BEGIN:STANDARD TZNAME:-11 diff --git a/zoneinfo/Pacific/Norfolk.ics b/zoneinfo/Pacific/Norfolk.ics index c8022b80..e0ac779e 100644 --- a/zoneinfo/Pacific/Norfolk.ics +++ b/zoneinfo/Pacific/Norfolk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Norfolk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Norfolk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Norfolk BEGIN:DAYLIGHT TZNAME:+12 diff --git a/zoneinfo/Pacific/Noumea.ics b/zoneinfo/Pacific/Noumea.ics index 79129781..dade5946 100644 --- a/zoneinfo/Pacific/Noumea.ics +++ b/zoneinfo/Pacific/Noumea.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Noumea -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Noumea +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Noumea BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Pago_Pago.ics b/zoneinfo/Pacific/Pago_Pago.ics index 0e9f2214..25c20123 100644 --- a/zoneinfo/Pacific/Pago_Pago.ics +++ b/zoneinfo/Pacific/Pago_Pago.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pago_Pago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pago_Pago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/Pacific/Palau.ics b/zoneinfo/Pacific/Palau.ics index 139c2427..8382066c 100644 --- a/zoneinfo/Pacific/Palau.ics +++ b/zoneinfo/Pacific/Palau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Palau -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Palau +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Palau BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Pacific/Pitcairn.ics b/zoneinfo/Pacific/Pitcairn.ics index e9d6bb3e..dab739e3 100644 --- a/zoneinfo/Pacific/Pitcairn.ics +++ b/zoneinfo/Pacific/Pitcairn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pitcairn -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pitcairn +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pitcairn BEGIN:STANDARD TZNAME:-08 diff --git a/zoneinfo/Pacific/Pohnpei.ics b/zoneinfo/Pacific/Pohnpei.ics index fae96e28..1e7791ac 100644 --- a/zoneinfo/Pacific/Pohnpei.ics +++ b/zoneinfo/Pacific/Pohnpei.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pohnpei -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pohnpei +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pohnpei BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Ponape.ics b/zoneinfo/Pacific/Ponape.ics index fae96e28..1e7791ac 100644 --- a/zoneinfo/Pacific/Ponape.ics +++ b/zoneinfo/Pacific/Ponape.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pohnpei -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pohnpei +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pohnpei BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Port_Moresby.ics b/zoneinfo/Pacific/Port_Moresby.ics index f0fc208e..b2ee3c97 100644 --- a/zoneinfo/Pacific/Port_Moresby.ics +++ b/zoneinfo/Pacific/Port_Moresby.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Port_Moresby -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Port_Moresby +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Port_Moresby BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Pacific/Rarotonga.ics b/zoneinfo/Pacific/Rarotonga.ics index fc437657..d2ec882e 100644 --- a/zoneinfo/Pacific/Rarotonga.ics +++ b/zoneinfo/Pacific/Rarotonga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Rarotonga -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Rarotonga +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Rarotonga BEGIN:STANDARD TZNAME:-10 diff --git a/zoneinfo/Pacific/Saipan.ics b/zoneinfo/Pacific/Saipan.ics index c646e2b7..c7a4a42a 100644 --- a/zoneinfo/Pacific/Saipan.ics +++ b/zoneinfo/Pacific/Saipan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Guam -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Guam +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Guam BEGIN:STANDARD TZNAME:ChST diff --git a/zoneinfo/Pacific/Samoa.ics b/zoneinfo/Pacific/Samoa.ics index 0e9f2214..25c20123 100644 --- a/zoneinfo/Pacific/Samoa.ics +++ b/zoneinfo/Pacific/Samoa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pago_Pago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pago_Pago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/Pacific/Tahiti.ics b/zoneinfo/Pacific/Tahiti.ics index 5c5f83a0..e192599f 100644 --- a/zoneinfo/Pacific/Tahiti.ics +++ b/zoneinfo/Pacific/Tahiti.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Tahiti -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Tahiti +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Tahiti BEGIN:STANDARD TZNAME:-10 diff --git a/zoneinfo/Pacific/Tarawa.ics b/zoneinfo/Pacific/Tarawa.ics index 041feb6e..d621bc20 100644 --- a/zoneinfo/Pacific/Tarawa.ics +++ b/zoneinfo/Pacific/Tarawa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Tarawa -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Tarawa +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Tarawa BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Tongatapu.ics b/zoneinfo/Pacific/Tongatapu.ics index e8540226..7888e695 100644 --- a/zoneinfo/Pacific/Tongatapu.ics +++ b/zoneinfo/Pacific/Tongatapu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Tongatapu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Tongatapu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Tongatapu BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Truk.ics b/zoneinfo/Pacific/Truk.ics index 771c4e5a..8cf293db 100644 --- a/zoneinfo/Pacific/Truk.ics +++ b/zoneinfo/Pacific/Truk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Chuuk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Chuuk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Pacific/Wake.ics b/zoneinfo/Pacific/Wake.ics index fa590a6b..5008fa14 100644 --- a/zoneinfo/Pacific/Wake.ics +++ b/zoneinfo/Pacific/Wake.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Wake -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Wake +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Wake BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Wallis.ics b/zoneinfo/Pacific/Wallis.ics index 33421ecf..ee33e522 100644 --- a/zoneinfo/Pacific/Wallis.ics +++ b/zoneinfo/Pacific/Wallis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Wallis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Wallis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Wallis BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Yap.ics b/zoneinfo/Pacific/Yap.ics index 771c4e5a..8cf293db 100644 --- a/zoneinfo/Pacific/Yap.ics +++ b/zoneinfo/Pacific/Yap.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Chuuk -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Chuuk +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Poland.ics b/zoneinfo/Poland.ics index 3c65924d..99f620a9 100644 --- a/zoneinfo/Poland.ics +++ b/zoneinfo/Poland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Warsaw -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Warsaw +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Warsaw BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Portugal.ics b/zoneinfo/Portugal.ics index e60df94c..03df53bc 100644 --- a/zoneinfo/Portugal.ics +++ b/zoneinfo/Portugal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Lisbon -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Lisbon +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Lisbon BEGIN:STANDARD TZNAME:WET diff --git a/zoneinfo/ROC.ics b/zoneinfo/ROC.ics index 0d976016..cbf247a1 100644 --- a/zoneinfo/ROC.ics +++ b/zoneinfo/ROC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Taipei -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Taipei +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Taipei BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/ROK.ics b/zoneinfo/ROK.ics index 196673f7..c8a576a1 100644 --- a/zoneinfo/ROK.ics +++ b/zoneinfo/ROK.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Seoul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Seoul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Seoul BEGIN:STANDARD TZNAME:KST diff --git a/zoneinfo/Singapore.ics b/zoneinfo/Singapore.ics index 90e65f2a..90ada0f4 100644 --- a/zoneinfo/Singapore.ics +++ b/zoneinfo/Singapore.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Asia/Singapore -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Asia/Singapore +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Asia/Singapore BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Turkey.ics b/zoneinfo/Turkey.ics index 576ca49c..19e3965d 100644 --- a/zoneinfo/Turkey.ics +++ b/zoneinfo/Turkey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Istanbul -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Istanbul +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/UCT.ics b/zoneinfo/UCT.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/UCT.ics +++ b/zoneinfo/UCT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/US/Alaska.ics b/zoneinfo/US/Alaska.ics index 021cbaa8..452152b1 100644 --- a/zoneinfo/US/Alaska.ics +++ b/zoneinfo/US/Alaska.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Anchorage -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Anchorage +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Anchorage BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/US/Aleutian.ics b/zoneinfo/US/Aleutian.ics index b1fa8db9..8c4197f4 100644 --- a/zoneinfo/US/Aleutian.ics +++ b/zoneinfo/US/Aleutian.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Adak -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Adak +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZNAME:HDT diff --git a/zoneinfo/US/Arizona.ics b/zoneinfo/US/Arizona.ics index df6a2521..de8d3ee6 100644 --- a/zoneinfo/US/Arizona.ics +++ b/zoneinfo/US/Arizona.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Phoenix -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Phoenix +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/US/Central.ics b/zoneinfo/US/Central.ics index bc29e43f..5e5b3f76 100644 --- a/zoneinfo/US/Central.ics +++ b/zoneinfo/US/Central.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Chicago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Chicago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Chicago BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/US/East-Indiana.ics b/zoneinfo/US/East-Indiana.ics index 7db2a7f7..8319a36b 100644 --- a/zoneinfo/US/East-Indiana.ics +++ b/zoneinfo/US/East-Indiana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Indianapolis -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/US/Eastern.ics b/zoneinfo/US/Eastern.ics index 29ac5969..d81c013c 100644 --- a/zoneinfo/US/Eastern.ics +++ b/zoneinfo/US/Eastern.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/New_York -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/New_York +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/US/Hawaii.ics b/zoneinfo/US/Hawaii.ics index 7c3f0781..617c83fb 100644 --- a/zoneinfo/US/Hawaii.ics +++ b/zoneinfo/US/Hawaii.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Honolulu -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Honolulu +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/US/Indiana-Starke.ics b/zoneinfo/US/Indiana-Starke.ics index 073fb48b..faa66d0a 100644 --- a/zoneinfo/US/Indiana-Starke.ics +++ b/zoneinfo/US/Indiana-Starke.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Indiana/Knox -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Indiana/Knox +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/US/Michigan.ics b/zoneinfo/US/Michigan.ics index e148a23d..db491782 100644 --- a/zoneinfo/US/Michigan.ics +++ b/zoneinfo/US/Michigan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Detroit -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Detroit +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Detroit BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/US/Mountain.ics b/zoneinfo/US/Mountain.ics index 79d6ba54..c5697a29 100644 --- a/zoneinfo/US/Mountain.ics +++ b/zoneinfo/US/Mountain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Denver -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Denver +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/US/Pacific.ics b/zoneinfo/US/Pacific.ics index d495ce63..8545d95d 100644 --- a/zoneinfo/US/Pacific.ics +++ b/zoneinfo/US/Pacific.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/America/Los_Angeles -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/America/Los_Angeles +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/US/Samoa.ics b/zoneinfo/US/Samoa.ics index 0e9f2214..25c20123 100644 --- a/zoneinfo/US/Samoa.ics +++ b/zoneinfo/US/Samoa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Pacific/Pago_Pago -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Pacific/Pago_Pago +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/UTC.ics b/zoneinfo/UTC.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/UTC.ics +++ b/zoneinfo/UTC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Universal.ics b/zoneinfo/Universal.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/Universal.ics +++ b/zoneinfo/Universal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/W-SU.ics b/zoneinfo/W-SU.ics index 9c539797..7396b02b 100644 --- a/zoneinfo/W-SU.ics +++ b/zoneinfo/W-SU.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Europe/Moscow -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Europe/Moscow +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Europe/Moscow BEGIN:STANDARD TZNAME:MSK diff --git a/zoneinfo/WET.ics b/zoneinfo/WET.ics index ac65d36a..ca0b1c0f 100644 --- a/zoneinfo/WET.ics +++ b/zoneinfo/WET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/WET -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/WET +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:WET BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Zulu.ics b/zoneinfo/Zulu.ics index f4e51c9c..def848c1 100644 --- a/zoneinfo/Zulu.ics +++ b/zoneinfo/Zulu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20210410_1/Etc/UTC -LAST-MODIFIED:20210410T122212Z +TZID:/citadel.org/20211009_1/Etc/UTC +LAST-MODIFIED:20211009T133001Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/zones.tab b/zoneinfo/zones.tab index b1ac08cf..902c7056 100644 --- a/zoneinfo/zones.tab +++ b/zoneinfo/zones.tab @@ -456,6 +456,7 @@ PST8PDT +0132800 +1444500 Pacific/Guam +0211825 -1575130 Pacific/Honolulu +0164500 -1693100 Pacific/Johnston +-0024700 -1714300 Pacific/Kanton +0015200 -1572000 Pacific/Kiritimati +0051900 +1625900 Pacific/Kosrae +0090500 +1672000 Pacific/Kwajalein @@ -476,7 +477,7 @@ PST8PDT +0151200 +1454500 Pacific/Saipan -0173200 -1493400 Pacific/Tahiti +0012500 +1730000 Pacific/Tarawa --0211000 -1751000 Pacific/Tongatapu +-0210800 -1751200 Pacific/Tongatapu +0072500 +1514700 Pacific/Truk +0191700 +1663700 Pacific/Wake -0131800 -1761000 Pacific/Wallis -- cgit v1.2.1 From a4d4c3809580e0a4943d6b085f699bae4a2e9dee Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 9 Oct 2021 12:40:14 -0400 Subject: ReleaseNotes.txt - update for 3.0.11 release --- ReleaseNotes.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 3aaf5461..817c81fd 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,8 +1,8 @@ Release Highlights ================== -Version 3.0.11 (UNRELEASED): ----------------------------- +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) -- cgit v1.2.1 From 28d75ceb7c94c2313402ab34ee38d26baf67cfd4 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 9 Oct 2021 12:49:53 -0400 Subject: CMakeLists.txt, ReleaseNotes.txt - this is v3.0.12 now --- CMakeLists.txt | 2 +- ReleaseNotes.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa6afd31..3568ffc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -108,7 +108,7 @@ endif() set(LIBICAL_LIB_MAJOR_VERSION "3") set(LIBICAL_LIB_MINOR_VERSION "0") -set(LIBICAL_LIB_PATCH_VERSION "11") +set(LIBICAL_LIB_PATCH_VERSION "12") set(LIBICAL_LIB_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}" ) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 817c81fd..e9d639a4 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,6 +1,10 @@ Release Highlights ================== +Version 3.0.12 (UNRELEASED): +--------------------------------- + * + Version 3.0.11 (09 October 2021): --------------------------------- * Fix icalrecur_iterator_set_start() for hourly, minutely, and secondly recurrences -- cgit v1.2.1 From e3301e0da7f298537ecaa5f8792b251d02971056 Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Sun, 10 Oct 2021 23:54:19 +0200 Subject: Add include path to the exported target definition Otherwise the libical headers are not found by consumers if libical is installed in a non-standard location --- src/libical/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index 9c7266b4..addd8343 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -265,6 +265,8 @@ elseif(STATIC_ONLY) add_library(ical-static ALIAS ical) endif() +target_include_directories(ical INTERFACE "$") + target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT}) if(ICU_FOUND) -- cgit v1.2.1 From 81c933297c2c6a0430f19fa14acf47ba1acce96a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Mon, 18 Oct 2021 21:05:05 +0200 Subject: libical-glib: Fix annotation of i_cal_time_get_timezone It returns a reference of the newly create ICalTimezone so the caller has to actually unref it. --- src/libical-glib/api/i-cal-time.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index be6e2685..9890305b 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -85,7 +85,7 @@ - + Returns the timezone. -- cgit v1.2.1 From 87639433ac8107223f17fbdfad90439a4c46bb1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Mon, 18 Oct 2021 21:05:05 +0200 Subject: libical-glib: Fix annotation of i_cal_time_get_timezone It returns a reference of the newly create ICalTimezone so the caller has to actually unref it. --- src/libical-glib/api/i-cal-time.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index 57f35324..4fd0fb6b 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -85,7 +85,7 @@ - + Returns the timezone. -- cgit v1.2.1 From e9fc0434613e41cd05345b85992d754da279dd93 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 1 Nov 2021 12:39:35 -0400 Subject: CMakeLists.txt - fix DEF_USE_BUILTIN_TZDATA DEF_USE_BUILTIN_TZDATA is True on Windows; False otherwise --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 284d6603..ee3df5d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -315,9 +315,9 @@ else() endif() if(WIN32 OR WINCE) - set(DEF_USE_BUILTIN_TZDATA False) -else() set(DEF_USE_BUILTIN_TZDATA True) +else() + set(DEF_USE_BUILTIN_TZDATA False) endif() libical_option(USE_BUILTIN_TZDATA "(Careful) Build using libical's built-in timezone data, else use the system timezone data on non-Windows systems. ALWAYS true on Windows. Non-Windows users should know what they're doing if they choose not to use system provided timezone data. The libical project does not guarantee that the built-in timezone data is up-to-date." ${DEF_USE_BUILTIN_TZDATA}) mark_as_advanced(USE_BUILTIN_TZDATA) -- cgit v1.2.1 From de4a27199e5898f03ed1122c78e603d2421b4996 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Thu, 4 Nov 2021 15:40:52 +0100 Subject: libical-glib: Simplify memory management around ICalCompIter Previously, before this change, the components returned from the ICalCompIter structures did not hold the reference to the parent component, thus the parent component could be freed before the returned instance, effectively destroying the internal libical native structure. There was required to set the owner manually before, but it breaks abstraction and is easy to forget. This change makes all these things transparent. The old code does not need to be changed, because it should set the same owner anyway, thus the call results in no change on the ownership of the returned components. --- src/libical-glib/api/i-cal-component.xml | 77 +++++++++++++++++++++++++---- src/libical-glib/i-cal-object.c.in | 85 +++++++++++++++++++++++++++++++- src/libical-glib/i-cal-object.h.in | 4 ++ src/test/libical-glib/component.py | 4 -- 4 files changed, 155 insertions(+), 15 deletions(-) diff --git a/src/libical-glib/api/i-cal-component.xml b/src/libical-glib/api/i-cal-component.xml index fcde0f42..ebe9e11e 100644 --- a/src/libical-glib/api/i-cal-component.xml +++ b/src/libical-glib/api/i-cal-component.xml @@ -182,32 +182,89 @@ Gets the next #ICalComponent with specific kind in #ICalComponent. - + - Gets the #ICalCompIter pointing to the first child #ICalComponent. Use #ICalCompIter when you need remove the child component from the parent. For traversing, i_cal_object_set_owner needs to be called after this API. See component.py in tests for details. + Gets the #ICalCompIter pointing to the first child #ICalComponent. + ICalCompIter *iter; + + g_return_val_if_fail (I_CAL_IS_COMPONENT (component), NULL); + + iter = i_cal_comp_iter_new_full(icalcomponent_begin_component((icalcomponent *)i_cal_object_get_native(I_CAL_OBJECT (component)), (icalcomponent_kind) (kind))); + if (iter) { + i_cal_object_set_owner(I_CAL_OBJECT(iter), G_OBJECT(component)); + i_cal_object_set_always_destroy(I_CAL_OBJECT(iter), TRUE); + } + + return iter; - + - Gets the #ICalCompIter pointing to the end child #ICalComponent. Use #ICalCompIter when you need remove the child component from the parent. For traversing, i_cal_object_set_owner needs to be called after this API. See component.py in tests for details. + Gets the #ICalCompIter pointing to the end child #ICalComponent. + ICalCompIter *iter; + g_return_val_if_fail (I_CAL_IS_COMPONENT (component), NULL); + + iter = i_cal_comp_iter_new_full(icalcomponent_end_component((icalcomponent *)i_cal_object_get_native(I_CAL_OBJECT (component)), (icalcomponent_kind) (kind))); + if (iter) { + i_cal_object_set_owner(I_CAL_OBJECT(iter), G_OBJECT(component)); + i_cal_object_set_always_destroy(I_CAL_OBJECT(iter), TRUE); + } + + return iter; - + - Gets the next #ICalComponent pointed by #ICalCompIter. Use #ICalCompIter when you need remove the child component from the parent. For traversing, i_cal_object_set_owner needs to be called after this API. See component.py in tests for details. + Gets the next #ICalComponent pointed by #ICalCompIter. + ICalComponent *comp; + + g_return_val_if_fail (I_CAL_IS_COMP_ITER (i), NULL); + + comp = i_cal_component_new_full(icalcompiter_next((struct icalcompiter *)i_cal_object_get_native(I_CAL_OBJECT (i))), NULL); + if (comp) { + GObject *owner = i_cal_object_ref_owner(I_CAL_OBJECT(i)); + i_cal_object_set_owner(I_CAL_OBJECT(comp), owner); + g_clear_object(&owner); + } + + return comp; - + - Gets the prior #ICalComponent pointed by #ICalCompIter. Use #ICalCompIter when you need remove the child component from the parent. For traversing, i_cal_object_set_owner needs to be called after this API. See component.py in tests for details. + Gets the prior #ICalComponent pointed by #ICalCompIter. + ICalComponent *comp; + + g_return_val_if_fail (I_CAL_IS_COMP_ITER (i), NULL); + + comp = i_cal_component_new_full(icalcompiter_prior((struct icalcompiter *)i_cal_object_get_native(I_CAL_OBJECT (i))), NULL); + if (comp) { + GObject *owner = i_cal_object_ref_owner(I_CAL_OBJECT(i)); + i_cal_object_set_owner(I_CAL_OBJECT(comp), owner); + g_clear_object(&owner); + } + + return comp; - + - Gets the current #ICalComponent pointed by #ICalCompIter. Use #ICalCompIter when you need remove the child component from the parent. For traversing, i_cal_object_set_owner needs to be called after this API. See component.py in tests for details. + Gets the current #ICalComponent pointed by #ICalCompIter. + ICalComponent *comp; + + g_return_val_if_fail (I_CAL_IS_COMP_ITER (i), NULL); + + comp = i_cal_component_new_full(icalcompiter_deref((struct icalcompiter *)i_cal_object_get_native(I_CAL_OBJECT (i))), NULL); + if (comp) { + GObject *owner = i_cal_object_ref_owner(I_CAL_OBJECT(i)); + i_cal_object_set_owner(I_CAL_OBJECT(comp), owner); + g_clear_object(&owner); + } + + return comp; diff --git a/src/libical-glib/i-cal-object.c.in b/src/libical-glib/i-cal-object.c.in index 1f593a94..f6633919 100644 --- a/src/libical-glib/i-cal-object.c.in +++ b/src/libical-glib/i-cal-object.c.in @@ -110,6 +110,7 @@ struct _ICalObjectPrivate gpointer native; GDestroyNotify native_destroy_func; gboolean is_global_memory; + gboolean always_destroy; GObject *owner; GSList *dependers; /* referenced GObject-s */ }; @@ -122,6 +123,7 @@ enum PROP_NATIVE, PROP_NATIVE_DESTROY_FUNC, PROP_IS_GLOBAL_MEMORY, + PROP_ALWAYS_DESTROY, PROP_OWNER }; @@ -150,6 +152,10 @@ static void i_cal_object_set_property(GObject *object, guint property_id, iobject->priv->is_global_memory = g_value_get_boolean(value); return; + case PROP_ALWAYS_DESTROY: + i_cal_object_set_always_destroy(iobject, g_value_get_boolean(value)); + return; + case PROP_OWNER: i_cal_object_set_owner(iobject, g_value_get_object(value)); return; @@ -180,6 +186,10 @@ static void i_cal_object_get_property(GObject *object, guint property_id, g_value_set_boolean(value, i_cal_object_get_is_global_memory(iobject)); return; + case PROP_ALWAYS_DESTROY: + g_value_set_boolean(value, i_cal_object_get_always_destroy(iobject)); + return; + case PROP_OWNER: g_value_take_object(value, i_cal_object_ref_owner(iobject)); return; @@ -192,7 +202,8 @@ static void i_cal_object_finalize(GObject *object) { ICalObject *iobject = I_CAL_OBJECT(object); - if (!iobject->priv->owner && !iobject->priv->is_global_memory && + if ((iobject->priv->always_destroy || !iobject->priv->owner) && + !iobject->priv->is_global_memory && iobject->priv->native && iobject->priv->native_destroy_func) { iobject->priv->native_destroy_func(iobject->priv->native); } @@ -269,6 +280,25 @@ static void i_cal_object_class_init(ICalObjectClass * class) G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + /** + * ICalObject:always-destroy: + * + * Whether free the native libical structure on #ICalObject's finalize even + * if the object has set an owner. + * + * Since: 3.0.11 + **/ + g_object_class_install_property( + object_class, + PROP_ALWAYS_DESTROY, + g_param_spec_boolean( + "always-destroy", + "Always-Destroy", + "Whether the native libical structure is freed even when the owner is set", + FALSE, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + /** * ICalObject:owner: * @@ -663,3 +693,56 @@ void i_cal_object_remove_depender(ICalObject *iobject, GObject *depender) UNLOCK_PROPS(iobject); } + +/** + * i_cal_object_set_always_destroy: + * @iobject: an #ICalObject + * @value: value to set + * + * Sets the @ICalObject::always-destroy property value. When %TRUE, the native + * libical structure is always freed, even when an owner of the @iobject is set. + * + * Since: 3.0.11 + **/ +void i_cal_object_set_always_destroy(ICalObject *iobject, gboolean value) +{ + gboolean changed; + + g_return_if_fail(I_CAL_IS_OBJECT(iobject)); + + LOCK_PROPS(iobject); + + changed = (value ? 1 : 0) != (iobject->priv->always_destroy ? 1 : 0); + if (changed) + iobject->priv->always_destroy = value; + + UNLOCK_PROPS(iobject); + + if (changed) + g_object_notify(G_OBJECT(iobject), "always-destroy"); +} + +/** + * i_cal_object_get_always_destroy: + * @iobject: an #ICalObject + * + * Obtain the @ICalObject::always-destroy property value. + * + * Returns: Whether the native libical structure is freed even when an owner is set. + * + * Since: 3.0.11 + **/ +gboolean i_cal_object_get_always_destroy(ICalObject *iobject) +{ + gboolean value; + + g_return_val_if_fail(I_CAL_IS_OBJECT(iobject), FALSE); + + LOCK_PROPS(iobject); + + value = iobject->priv->always_destroy; + + UNLOCK_PROPS(iobject); + + return value; +} diff --git a/src/libical-glib/i-cal-object.h.in b/src/libical-glib/i-cal-object.h.in index bc53e9e0..19438fd4 100644 --- a/src/libical-glib/i-cal-object.h.in +++ b/src/libical-glib/i-cal-object.h.in @@ -107,6 +107,10 @@ LIBICAL_ICAL_EXPORT void i_cal_object_add_depender(ICalObject *iobject, GObject LIBICAL_ICAL_EXPORT void i_cal_object_remove_depender(ICalObject *iobject, GObject *depender); +LIBICAL_ICAL_EXPORT void i_cal_object_set_always_destroy(ICalObject *iobject, gboolean value); + +LIBICAL_ICAL_EXPORT gboolean i_cal_object_get_always_destroy(ICalObject *iobject); + LIBICAL_ICAL_EXPORT void i_cal_object_free_global_objects(void); G_END_DECLS diff --git a/src/test/libical-glib/component.py b/src/test/libical-glib/component.py index cbdb097e..cc6cfa6a 100755 --- a/src/test/libical-glib/component.py +++ b/src/test/libical-glib/component.py @@ -183,25 +183,21 @@ def main(): #Traverse with external API. iter = parent.begin_component(ICalGLib.ComponentKind.VEVENT_COMPONENT); child_component = iter.deref(); - child_component.set_owner(parent); for i in range(0, count): prefix = "test" index = i+2; assert(child_component.get_summary() == prefix + str(index)); if (i != count-1): child_component = iter.next(); - child_component.set_owner(parent); iter = parent.end_component(ICalGLib.ComponentKind.VEVENT_COMPONENT); child_component = iter.prior(); - child_component.set_owner(parent); for i in range(0, count): prefix = "test" index = count + 1 - i; assert(child_component.get_summary() == prefix + str(index)); if (i != count - 1): child_component = iter.prior(); - child_component.set_owner(parent); #Traverse and remove with external API. iter = parent.begin_component(ICalGLib.ComponentKind.VEVENT_COMPONENT); -- cgit v1.2.1 From 96593808296617ac00950cbf1a856b15fa4184c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Fri, 5 Nov 2021 11:11:47 +0100 Subject: Revert "libical-glib: Fix annotation of i_cal_time_get_timezone" There is a newly created TimeZone object but it is owned by the internal cache. We need to call `i_cal_object_free_global_objects` to free it. This reverts commit 81c933297c2c6a0430f19fa14acf47ba1acce96a. --- src/libical-glib/api/i-cal-time.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index 9890305b..be6e2685 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -85,7 +85,7 @@ - + Returns the timezone. -- cgit v1.2.1 From e92441a85d4191f270459d0fca763cd145e3be62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Fri, 5 Nov 2021 11:24:17 +0100 Subject: libical-glib: Enhance comments on i_cal_time_get_timezone This ICalTimezone lifetime is a little bit special to reduce the allocated memory. --- src/libical-glib/api/i-cal-time.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index be6e2685..4a97f226 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -86,7 +86,7 @@ - Returns the timezone. + Returns the timezone, the #ICalTimezone object is cached and can be either unreferenced once the last instance is used or can be kept until i_cal_object_free_global_objects() is called (usually at the very end of the program). -- cgit v1.2.1 From 00066d648b7423314676ba5e89864602ef0cc4ae Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 08:08:35 -0400 Subject: appveyor.yml - add more configs and platforms. modernize --- appveyor.yml | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d32c2bc2..109f97b8 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -20,6 +20,9 @@ skip_tags: false # Build worker image image: - Visual Studio 2013 + - Visual Studio 2019 + - macos + - Ubuntu # scripts that are called at very beginning, before repo cloning init: @@ -31,21 +34,25 @@ init: # build platform, i.e. x86, x64, Any CPU. This setting is optional. platform: -# - x86 uses 32bit time_t - - x64 + - Any CPU # build Configuration, i.e. Debug, Release, etc. configuration: - - 2013 -# - 2012 -# - MinGW + - Release + - Debug + +install: + - sh: if [ "`uname -s`" = "Darwin" ]; then brew install ninja; fi build_script: - - call scripts\set_compiler_env.bat - mkdir build - cd build - - if "%configuration%" EQU "MinGW" ( cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DICAL_GLIB=False .. ) else ( cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DICAL_GLIB=False .. ) - - nmake + - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% .. + - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION .. + - cmake --build . + - cmd: cmake --build . --target install + - sh: sudo cmake --build . --target install + - ctest --test-dir . # to disable automatic builds #build: off @@ -54,12 +61,8 @@ build_script: # tests configuration # #---------------------------------# -test_script: - - nmake test - # to disable automatic tests -#test: off - +test: off #---------------------------------# # deployment configuration # @@ -74,5 +77,6 @@ notifications: # Email - provider: Email to: - - allen.winter@kdab.com - on_build_status_changed: true + - winter@kde.org + on_build_success: false + on_build_failure: true -- cgit v1.2.1 From 165141e93d93b32833a7240af665771f617fcf71 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 08:23:53 -0400 Subject: appveyor.yml - deal with gtk-doc disable on Windows install gtk-doc packages on Mac and Ubuntu --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 109f97b8..94c75706 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,12 +42,12 @@ configuration: - Debug install: - - sh: if [ "`uname -s`" = "Darwin" ]; then brew install ninja; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then brew install ninja gtk-doc; else sudo apt-get install gtk-doc; fi build_script: - mkdir build - cd build - - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% .. + - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF .. - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION .. - cmake --build . - cmd: cmake --build . --target install -- cgit v1.2.1 From 1c9494250467c047c80ad531c68a060923f9622a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 08:51:50 -0400 Subject: appveyor.yml - more fixes --- appveyor.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 94c75706..83768bf1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -19,7 +19,7 @@ skip_tags: false # Build worker image image: - - Visual Studio 2013 + #- Visual Studio 2013 #disable since Ninja is not available - Visual Studio 2019 - macos - Ubuntu @@ -41,13 +41,16 @@ configuration: - Release - Debug +environment: + XML_CATALOG_FILES: /usr/local/etc/xml/catalog + install: - - sh: if [ "`uname -s`" = "Darwin" ]; then brew install ninja gtk-doc; else sudo apt-get install gtk-doc; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc; else sudo apt-get install gtk-doc-tools; fi build_script: - mkdir build - cd build - - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF .. + - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF -DICAL_GLIB=False .. - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION .. - cmake --build . - cmd: cmake --build . --target install -- cgit v1.2.1 From 3afc71f2b97a14af1c600c67e5bbe22e201bc4b6 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 09:11:07 -0400 Subject: appveyor.yml - Ninja build on Windows isn't working. temporarily switch to using NMake Makefiles on Windows --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 83768bf1..1933690d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -45,12 +45,12 @@ environment: XML_CATALOG_FILES: /usr/local/etc/xml/catalog install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc; else sudo apt-get install gtk-doc-tools; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc; else sudo apt-get -y install gtk-doc-tools; fi build_script: - mkdir build - cd build - - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF -DICAL_GLIB=False .. + - cmd: cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF -DICAL_GLIB=False .. - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION .. - cmake --build . - cmd: cmake --build . --target install -- cgit v1.2.1 From 791025b664bfd0399711c5fcb29a2a0d8439d3c0 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 09:20:23 -0400 Subject: appveyor.yml - restore Ninja on Windows --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 1933690d..294b325b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -50,7 +50,7 @@ install: build_script: - mkdir build - cd build - - cmd: cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF -DICAL_GLIB=False .. + - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF -DICAL_GLIB=False .. - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION .. - cmake --build . - cmd: cmake --build . --target install -- cgit v1.2.1 From 48f3c4d8acc82547f1e1573aa1f0e48a44e9e3f5 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 10:00:45 -0400 Subject: appveyor.yml - build more features on Linux and Mac --- appveyor.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 294b325b..39d07c04 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -45,13 +45,13 @@ environment: XML_CATALOG_FILES: /usr/local/etc/xml/catalog install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc; else sudo apt-get -y install gtk-doc-tools; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db vala; else sudo apt-get -y install gtk-doc-tools docbook-xsl libdb-dev valac; fi build_script: - mkdir build - cd build - - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DENABLE_GTK_DOC=OFF -DICAL_GLIB=False .. - - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION .. + - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. + - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install -- cgit v1.2.1 From 49a61f45a3d105881a758da1d325aac8491d2ecd Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 10:40:04 -0400 Subject: appveyor.yml - install gobject-introspection on Linux and Mac --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 39d07c04..b3394c18 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -45,7 +45,7 @@ environment: XML_CATALOG_FILES: /usr/local/etc/xml/catalog install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db vala; else sudo apt-get -y install gtk-doc-tools docbook-xsl libdb-dev valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools docbook-xsl libdb-dev gobject-introspection valac; fi build_script: - mkdir build -- cgit v1.2.1 From 8f0e0f8113a96d5136834ba9550cde9e62290f7b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 11:03:27 -0400 Subject: appveyor.yml - disable GOBJECT_INTROSPECTION and GLIB_VAPI pkgconfig reports: No package 'gobject-introspection-1.0' found need to investigate this --- appveyor.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index b3394c18..0ab66350 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -51,7 +51,9 @@ build_script: - mkdir build - cd build - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True .. + #-DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True disabled for now. missing + # pkgconfig reports: No package 'gobject-introspection-1.0' found + - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install -- cgit v1.2.1 From 626f0b608ca5f37975974a7180f2be274f9438cd Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 15:39:53 -0400 Subject: appveyor.yml - again --- appveyor.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 0ab66350..3ddc581b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -41,19 +41,16 @@ configuration: - Release - Debug -environment: - XML_CATALOG_FILES: /usr/local/etc/xml/catalog - install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools docbook-xsl libdb-dev gobject-introspection valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection valac; fi build_script: - mkdir build - cd build - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - #-DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True disabled for now. missing + #-DGOBJECT_INTROSPECTION=True disabled for now. missing # pkgconfig reports: No package 'gobject-introspection-1.0' found - - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True .. + - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DICAL_GLIB_VAPI=True .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install -- cgit v1.2.1 From 58f86d6c53f8f95ee31bd80d7451a006e29171c1 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 16:01:24 -0400 Subject: appveyor.yml - disable Vala again --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3ddc581b..21829113 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -48,9 +48,9 @@ build_script: - mkdir build - cd build - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - #-DGOBJECT_INTROSPECTION=True disabled for now. missing + #-DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True disabled for now. missing # pkgconfig reports: No package 'gobject-introspection-1.0' found - - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DICAL_GLIB_VAPI=True .. + - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install -- cgit v1.2.1 From 485bb36c10bfda5d22068f1c3bf95be3548d0557 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 16:30:26 -0400 Subject: ConfigureChecks.cmake - Look for GetNumberFormat on Windows only Thanks to paweljonskim "Resolve GetNumberFormat only on windows GetNumberFormat is not implemented on wine correctly (https://forum.winehq.org/viewtopic.php?t=27809) which results in error when building. That means - if any linux user has installed wine, the build of libical will fail." --- ConfigureChecks.cmake | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index bba33fa9..ddb64604 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -61,10 +61,16 @@ if(MSVC_VERSION GREATER 1899) set(HAVE_SNPRINTF true) endif() -set(_SAVE_RQL ${CMAKE_REQUIRED_LIBRARIES}) -set(CMAKE_REQUIRED_LIBRARIES kernel32.lib) -check_function_exists(GetNumberFormat HAVE_GETNUMBERFORMAT) #Windows -set(CMAKE_REQUIRED_LIBRARIES ${_SAVE_RQL}) +#GetNumberFormat is not implemented on wine correctly +#(see https://forum.winehq.org/viewtopic.php?t=27809) which results in +#error when building. That means if linux user has installed wine, +#the build of libical will fail. +if(WIN32) + set(_SAVE_RQL ${CMAKE_REQUIRED_LIBRARIES}) + set(CMAKE_REQUIRED_LIBRARIES kernel32.lib) + check_function_exists(GetNumberFormat HAVE_GETNUMBERFORMAT) #Windows + set(CMAKE_REQUIRED_LIBRARIES ${_SAVE_RQL}) +endif() include(CheckTypeSize) check_type_size(intptr_t SIZEOF_INTPTR_T) -- cgit v1.2.1 From c5ccc9127d8f4c04bb971339e77b132cd2e7e8e5 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 16:41:30 -0400 Subject: appveyor.yml - try again with GOBJECT_INTROSPECTION and ICAL_GLIB_VAPI --- appveyor.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 21829113..532d6a98 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,15 +42,13 @@ configuration: - Debug install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi build_script: - mkdir build - cd build - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - #-DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True disabled for now. missing - # pkgconfig reports: No package 'gobject-introspection-1.0' found - - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True .. + - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install -- cgit v1.2.1 From 72e1a534087a966df3f82a8d24932353cb8aea58 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 6 Nov 2021 17:26:51 -0400 Subject: appveyor.yml - install pkg-config on Mac --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 532d6a98..ad7f1bf9 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,7 +42,7 @@ configuration: - Debug install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi build_script: - mkdir build -- cgit v1.2.1 From 9610861396fb24512a6c4d2946e38dec2f24ad45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Fri, 5 Nov 2021 11:24:17 +0100 Subject: libical-glib: Enhance comments on i_cal_time_get_timezone This ICalTimezone lifetime is a little bit special to reduce the allocated memory. --- src/libical-glib/api/i-cal-time.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index 4fd0fb6b..570777d7 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -85,8 +85,8 @@ - - Returns the timezone. + + Returns the timezone, the #ICalTimezone object is cached and can be either unreferenced once the last instance is used or can be kept until i_cal_object_free_global_objects() is called (usually at the very end of the program). -- cgit v1.2.1 From 100b2eab6ef9e37a11ca43b38c17be1e5a78499d Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 07:25:21 -0500 Subject: scripts/buildtests.sh - explictly this is a bash script ubuntu uses dart as default sh --- scripts/buildtests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index fe238f82..7cf375c2 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash #Exit if any undefined variable is used. set -u -- cgit v1.2.1 From 92073b98592ee1dcaa9166d60c7b84f1d9df3743 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 07:50:34 -0500 Subject: appveyor.yml - on Mac, try specifying the PKG_CONFIG_PATH an attempt to fix finding gobject-introspection-1.0 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index ad7f1bf9..a087395b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,7 +42,7 @@ configuration: - Debug install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi build_script: - mkdir build -- cgit v1.2.1 From 1dc292046fa6c590ad61f0fe9f8140468703dc98 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 08:41:07 -0500 Subject: appveyor.yml - gobject-introspection build fails on Mac FAILED: src/libical/ICal-3.0.gir /Users/appveyor/projects/libical/build/src/libical/ICal-3.0.gir cd /Users/appveyor/projects/libical/build/src/libical && /Applications/CMake.app/Contents/bin/cmake -E env "CC='/Applications/Xcode-12.3.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc'" /usr/local/Cellar/gobject-introspection/1.70.0_1/bin/g-ir-scanner --c-include=libical/ical.h --pkg-export libical --identifier-prefix=ical -I/Users/appveyor/projects/libical/src/libical /Users/appveyor/projects/libical/build/src/libical/ical.h --namespace=ICal --nsversion=3.0 --no-libtool --library=ical --include=GObject-2.0 -L/Users/appveyor/projects/libical/build/lib --output /Users/appveyor/projects/libical/build/src/libical/ICal-3.0.gir --accept-unprefixed In file included from /Users/appveyor/projects/libical/build/src/libical/g-ir-cpp-sqp1qszx.c:4: /Users/appveyor/projects/libical/build/src/libical/ical.h:137:10: fatal error: 'time.h' file not found ^~~~~~~~ 1 error generated. --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index a087395b..67b9b9ef 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -48,7 +48,7 @@ build_script: - mkdir build - cd build - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - - sh: cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=True .. + - sh: if [ "`uname -s`" = "Darwin" ]; then BUILD_EXTRAS="False"; else BUILD_EXTRAS="True"; fi; cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=$BUILD_EXTRAS -DICAL_GLIB_VAPI=$BUILD_EXTRAS .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install -- cgit v1.2.1 From feb22f29f08dd76bdfac0262f5b9d1544177874a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 08:55:54 -0500 Subject: src/test/regression.c - fix some conversion warnings conversion from size_t to unsigned long --- src/test/regression.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/test/regression.c b/src/test/regression.c index 8b9c6392..c070a92e 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4419,7 +4419,7 @@ void test_timezone_from_builtin(void) icaltimezone *zone; struct icaltimetype dtstart, dtend, due; char *strcomp, *tzidprefix, *prevslash = NULL, *prevprevslash = NULL, *p; - int len; + size_t len; zone = icaltimezone_get_builtin_timezone("America/New_York"); tzidprefix = strdup(icaltimezone_get_tzid (zone)); @@ -4642,7 +4642,7 @@ static void test_builtin_compat_tzid (void) icaltimezone_free_builtin_timezones(); } -static void test_vcc_vcard_parse (void) +static void test_vcc_vcard_parse(void) { /* Two VCARD-s, because some arches can parse the first and some the second. */ const char *vcard1 = @@ -4674,40 +4674,40 @@ static void test_vcc_vcard_parse (void) "END:VCALENDAR\r\n"; VObject *vcal; - vcal = Parse_MIME(vcard1, strlen(vcard1)); + vcal = Parse_MIME(vcard1, (unsigned long)strlen(vcard1)); if(vcal) { icalcomponent *icalcomp; - icalcomp = icalvcal_convert (vcal); + icalcomp = icalvcal_convert(vcal); ok("vCard1 is not iCalendar", (icalcomp == NULL)); if(icalcomp) - icalcomponent_free (icalcomp); + icalcomponent_free(icalcomp); cleanVObject (vcal); } else { ok("vCard1 cannot be parsed", (vcal == NULL)); } - vcal = Parse_MIME(vcard2, strlen(vcard2)); + vcal = Parse_MIME(vcard2, (unsigned long)strlen(vcard2)); if(vcal) { icalcomponent *icalcomp; - icalcomp = icalvcal_convert (vcal); + icalcomp = icalvcal_convert(vcal); ok("vCard2 is not iCalendar", (icalcomp == NULL)); if(icalcomp) - icalcomponent_free (icalcomp); + icalcomponent_free(icalcomp); - cleanVObject (vcal); + cleanVObject(vcal); } else { ok("vCard2 cannot be parsed", (vcal == NULL)); } - vcal = Parse_MIME(vcalendar, strlen(vcalendar)); + vcal = Parse_MIME(vcalendar, (unsigned long)strlen(vcalendar)); ok("vCalendar can be parsed", (vcal != NULL)); if(vcal) { icalcomponent *icalcomp; - icalcomp = icalvcal_convert (vcal); + icalcomp = icalvcal_convert(vcal); ok("vCalendar can be converted", (icalcomp != NULL)); if(icalcomp) { icalcomponent *child; @@ -4719,10 +4719,10 @@ static void test_vcc_vcard_parse (void) ok("vCalendar child is VEVENT", (icalcomponent_isa(child) == ICAL_VEVENT_COMPONENT)); ok("vCalendar child UID matches", (strcmp(icalcomponent_get_uid(child), "123") == 0)); ok("vCalendar child SUMMARY matches", (strcmp(icalcomponent_get_summary(child), "Summary") == 0)); - icalcomponent_free (icalcomp); + icalcomponent_free(icalcomp); } - cleanVObject (vcal); + cleanVObject(vcal); } } -- cgit v1.2.1 From 32e49e8f285ecb5416ed950b6049c27c66e5eb4e Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 10:01:20 -0500 Subject: appveyor.yml - attempt to fix using msvc on Windows otherwise it uses clang --- appveyor.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 67b9b9ef..1b6a1397 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -34,19 +34,36 @@ init: # build platform, i.e. x86, x64, Any CPU. This setting is optional. platform: - - Any CPU + - x86 + - x64 # build Configuration, i.e. Debug, Release, etc. configuration: - Release - Debug +environment: + VCVAR2013: 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat' + VCVAR2019: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat' + install: - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi +before_build: + - ps: | + # ...example script to set the proper flags for vcvarsall ... + # syntax: vcvarsall.bat [architecture] [platform_type] [winsdk_version] [-vcvars_ver=vcversion] + $Architecture = $env:PLATFORM # simplified, works for x86 and x64 + if ("$env:APPVEYOR_BUILD_WORKER_IMAGE" -eq "Visual Studio 2013") { + $env:VCVARSALL = "`"$env:VCVAR2013`" $Architecture" + } else { + $env:VCVARSALL = "`"$env:VCVAR2019`" $Architecture" + } + build_script: - mkdir build - cd build + - cmd: call %VCVARSALL% - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - sh: if [ "`uname -s`" = "Darwin" ]; then BUILD_EXTRAS="False"; else BUILD_EXTRAS="True"; fi; cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=$BUILD_EXTRAS -DICAL_GLIB_VAPI=$BUILD_EXTRAS .. - cmake --build . -- cgit v1.2.1 From 0360a7b6edcc909402556913a8c57e15727ff512 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 10:24:34 -0500 Subject: appveyor - try again to setup msvc env --- appveyor.yml | 15 +-------------- scripts/set_compiler_env.bat | 16 ++++++++-------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 1b6a1397..175712c1 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -42,28 +42,15 @@ configuration: - Release - Debug -environment: - VCVAR2013: 'C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat' - VCVAR2019: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat' - install: - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi before_build: - - ps: | - # ...example script to set the proper flags for vcvarsall ... - # syntax: vcvarsall.bat [architecture] [platform_type] [winsdk_version] [-vcvars_ver=vcversion] - $Architecture = $env:PLATFORM # simplified, works for x86 and x64 - if ("$env:APPVEYOR_BUILD_WORKER_IMAGE" -eq "Visual Studio 2013") { - $env:VCVARSALL = "`"$env:VCVAR2013`" $Architecture" - } else { - $env:VCVARSALL = "`"$env:VCVAR2019`" $Architecture" - } + - cmd: call scripts\set_compiler_env.bat build_script: - mkdir build - cd build - - cmd: call %VCVARSALL% - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - sh: if [ "`uname -s`" = "Darwin" ]; then BUILD_EXTRAS="False"; else BUILD_EXTRAS="True"; fi; cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=$BUILD_EXTRAS -DICAL_GLIB_VAPI=$BUILD_EXTRAS .. - cmake --build . diff --git a/scripts/set_compiler_env.bat b/scripts/set_compiler_env.bat index 6bbe2a89..47d7c50f 100644 --- a/scripts/set_compiler_env.bat +++ b/scripts/set_compiler_env.bat @@ -3,35 +3,35 @@ :: Now we declare a scope Setlocal EnableDelayedExpansion EnableExtensions -if not defined Configuration set Configuration=2015 +if not defined APPVEYOR_BUILD_WORKER_IMAGE set APPVEYOR_BUILD_WORKER_IMAGE="Visual Studio 2019" -if "%Configuration%"=="MinGW" ( goto :mingw ) +if "%USE_MINGW%"=="MinGW" ( goto :mingw ) set arch=x86 if "%platform%" EQU "x64" ( set arch=x86_amd64 ) -if "%Configuration%"=="2019" ( +if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2019" ( set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" ) -if "%Configuration%"=="2015" ( +if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" ( set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" ) -if "%Configuration%"=="2013" ( +if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2013" ( set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" ) -if "%Configuration%"=="2012" ( +if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2012" ( set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" ) -if "%Configuration%"=="2010" ( +if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2010" ( set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" ) -if "%Configuration%"=="2008" ( +if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2008" ( set SET_VS_ENV="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" ) -- cgit v1.2.1 From 82c4ad85bf9e619c3650293706b76d41d3d6d45d Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 11:56:57 -0500 Subject: Copy in and Use the Kitware FindICU.cmake from CMake 3.21 Rather than increase the CMake version requirement to 3.7, in order to upgrade from our less-than-perfect home-grown FindICU we copy in the official CMake version and use that. This seems to fix static linking problems with ICU on Windows. It may also fix static linking on other platforms. --- CMakeLists.txt | 31 +- Install.txt | 4 +- ReleaseNotes.txt | 2 +- cmake/Kitware/modules/FindICU.cmake | 438 +++++++++++++++ .../modules/FindPackageHandleStandardArgs.cmake | 605 +++++++++++++++++++++ cmake/Kitware/modules/FindPackageMessage.cmake | 48 ++ .../modules/SelectLibraryConfigurations.cmake | 80 +++ cmake/modules/FindICU.cmake | 132 ----- config.h.cmake | 3 - examples/CMakeLists.txt | 5 +- src/libical/CMakeLists.txt | 7 +- src/test/CMakeLists.txt | 7 +- 12 files changed, 1204 insertions(+), 158 deletions(-) create mode 100644 cmake/Kitware/modules/FindICU.cmake create mode 100644 cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake create mode 100644 cmake/Kitware/modules/FindPackageMessage.cmake create mode 100644 cmake/Kitware/modules/SelectLibraryConfigurations.cmake delete mode 100644 cmake/modules/FindICU.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3568ffc9..151e54ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -90,8 +90,12 @@ endif() if(POLICY CMP0054) cmake_policy(SET CMP0054 NEW) endif() +if(POLICY CMP0074) + cmake_policy(SET CMP0074 NEW) #don't warn about ICU_ROOT envvar +endif() -set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/Kitware/modules") #Include CMake capabilities include(FeatureSummary) @@ -192,7 +196,10 @@ endif() # libicu is highly recommended for RSCALE support # libicu can be found at http://www.icu-project.org # RSCALE info at https://tools.ietf.org/html/rfc7529 -find_package(ICU) +if(NOT "$ENV{ICU_BASE}" STREQUAL "") #support the old ICU_BASE env + set(ICU_ROOT $ENV{ICU_BASE}) +endif() +find_package(ICU COMPONENTS uc i18n) set_package_properties(ICU PROPERTIES TYPE RECOMMENDED PURPOSE "For RSCALE (RFC7529) support" @@ -205,14 +212,26 @@ add_feature_info( if(ICU_FOUND) set(REQUIRES_PRIVATE_ICU "Requires.private: icu-i18n") #for libical.pc set(HAVE_LIBICU 1) - if(ICU_MAJOR_VERSION VERSION_GREATER 50) + if(ICU_VERSION VERSION_GREATER 50) set(HAVE_ICU_DANGI TRUE) else() set(HAVE_ICU_DANGI FALSE) endif() -endif() -if(ICU_I18N_FOUND) - set(HAVE_LIBICU_I18N 1) + if(ICU_GENCCODE_EXECUTABLE) + get_filename_component(ICU_EXEC ${ICU_GENCCODE_EXECUTABLE} DIRECTORY) + elseif(ICU_UCONV_EXECUTABLE) + get_filename_component(ICU_EXEC ${ICU_UCONV_EXECUTABLE} DIRECTORY) + elseif(ICU_ICUINFO_EXECUTABLE) + get_filename_component(ICU_EXEC ${ICU_ICUINFO_EXECUTABLE} DIRECTORY) + elseif(ICU_ICU-CONFIG_EXECUTABLE) + get_filename_component(ICU_EXEC ${ICU_ICU-CONFIG_EXECUTABLE} DIRECTORY) + elseif(ICU_MAKECONV_EXECUTABLE) + get_filename_component(ICU_EXEC ${ICU_MAKECONV_EXECUTABLE} DIRECTORY) + else() + message(FATAL_ERROR + "Unable locate the ICU runtime path. Is your ICU installation broken?") + endif() + set(ICU_BINARY_DIR ${ICU_EXEC} CACHE STRING DOC "Runtime binaries directory for the ICU library") endif() # compile in Berkeley DB support diff --git a/Install.txt b/Install.txt index cfbb078c..85f2a4cf 100644 --- a/Install.txt +++ b/Install.txt @@ -93,8 +93,8 @@ Homebrew: libicu can be found at http://www.icu-project.org If CMake doesn't locate your libicu installation try setting the - ICU_BASE environment variable to the top folder where its installed - and run cmake again. + ICU_ROOT or ICU_BASE environment variable to the top folder where + libicu is installed and run cmake again. * Berkeley DB storage. Optional for the Berkeley Database storage support. diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index e9d639a4..8950aea3 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -3,7 +3,7 @@ Release Highlights Version 3.0.12 (UNRELEASED): --------------------------------- - * + * Improved FindICU (copied from official CMake. see files in cmake/Kitware) Version 3.0.11 (09 October 2021): --------------------------------- diff --git a/cmake/Kitware/modules/FindICU.cmake b/cmake/Kitware/modules/FindICU.cmake new file mode 100644 index 00000000..b649f044 --- /dev/null +++ b/cmake/Kitware/modules/FindICU.cmake @@ -0,0 +1,438 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindICU +------- + +.. versionadded:: 3.7 + +Find the International Components for Unicode (ICU) libraries and +programs. + +This module supports multiple components. +Components can include any of: ``data``, ``i18n``, ``io``, ``le``, +``lx``, ``test``, ``tu`` and ``uc``. + +Note that on Windows ``data`` is named ``dt`` and ``i18n`` is named +``in``; any of the names may be used, and the appropriate +platform-specific library name will be automatically selected. + +.. versionadded:: 3.11 + Added support for static libraries on Windows. + +This module reports information about the ICU installation in +several variables. General variables:: + + ICU_VERSION - ICU release version + ICU_FOUND - true if the main programs and libraries were found + ICU_LIBRARIES - component libraries to be linked + ICU_INCLUDE_DIRS - the directories containing the ICU headers + +Imported targets:: + + ICU:: + +Where ```` is the name of an ICU component, for example +``ICU::i18n``; ```` is lower-case. + +ICU programs are reported in:: + + ICU_GENCNVAL_EXECUTABLE - path to gencnval executable + ICU_ICUINFO_EXECUTABLE - path to icuinfo executable + ICU_GENBRK_EXECUTABLE - path to genbrk executable + ICU_ICU-CONFIG_EXECUTABLE - path to icu-config executable + ICU_GENRB_EXECUTABLE - path to genrb executable + ICU_GENDICT_EXECUTABLE - path to gendict executable + ICU_DERB_EXECUTABLE - path to derb executable + ICU_PKGDATA_EXECUTABLE - path to pkgdata executable + ICU_UCONV_EXECUTABLE - path to uconv executable + ICU_GENCFU_EXECUTABLE - path to gencfu executable + ICU_MAKECONV_EXECUTABLE - path to makeconv executable + ICU_GENNORM2_EXECUTABLE - path to gennorm2 executable + ICU_GENCCODE_EXECUTABLE - path to genccode executable + ICU_GENSPREP_EXECUTABLE - path to gensprep executable + ICU_ICUPKG_EXECUTABLE - path to icupkg executable + ICU_GENCMN_EXECUTABLE - path to gencmn executable + +ICU component libraries are reported in:: + + ICU__FOUND - ON if component was found; ```` is upper-case. + ICU__LIBRARIES - libraries for component; ```` is upper-case. + +ICU datafiles are reported in:: + + ICU_MAKEFILE_INC - Makefile.inc + ICU_PKGDATA_INC - pkgdata.inc + +This module reads hints about search results from:: + + ICU_ROOT - the root of the ICU installation + +The environment variable ``ICU_ROOT`` may also be used; the +ICU_ROOT variable takes precedence. + +The following cache variables may also be set:: + + ICU_

_EXECUTABLE - the path to executable

; ``

`` is upper-case. + ICU_INCLUDE_DIR - the directory containing the ICU headers + ICU__LIBRARY - the library for component ; ```` is upper-case. + +.. note:: + + In most cases none of the above variables will require setting, + unless multiple ICU versions are available and a specific version + is required. + +Other variables one may set to control this module are:: + + ICU_DEBUG - Set to ON to enable debug output from FindICU. +#]=======================================================================] + +# Written by Roger Leigh + +set(icu_programs + gencnval + icuinfo + genbrk + icu-config + genrb + gendict + derb + pkgdata + uconv + gencfu + makeconv + gennorm2 + genccode + gensprep + icupkg + gencmn) + +set(icu_data + Makefile.inc + pkgdata.inc) + +# The ICU checks are contained in a function due to the large number +# of temporary variables needed. +function(_ICU_FIND) + # Set up search paths, taking compiler into account. Search ICU_ROOT, + # with ICU_ROOT in the environment as a fallback if unset. + if(ICU_ROOT) + list(APPEND icu_roots "${ICU_ROOT}") + else() + if(NOT "$ENV{ICU_ROOT}" STREQUAL "") + file(TO_CMAKE_PATH "$ENV{ICU_ROOT}" NATIVE_PATH) + list(APPEND icu_roots "${NATIVE_PATH}") + set(ICU_ROOT "${NATIVE_PATH}" + CACHE PATH "Location of the ICU installation" FORCE) + endif() + endif() + + # Find include directory + list(APPEND icu_include_suffixes "include") + find_path(ICU_INCLUDE_DIR + NAMES "unicode/utypes.h" + HINTS ${icu_roots} + PATH_SUFFIXES ${icu_include_suffixes} + DOC "ICU include directory") + set(ICU_INCLUDE_DIR "${ICU_INCLUDE_DIR}" PARENT_SCOPE) + + # Get version + if(ICU_INCLUDE_DIR AND EXISTS "${ICU_INCLUDE_DIR}/unicode/uvernum.h") + file(STRINGS "${ICU_INCLUDE_DIR}/unicode/uvernum.h" icu_header_str + REGEX "^#define[\t ]+U_ICU_VERSION[\t ]+\".*\".*") + + string(REGEX REPLACE "^#define[\t ]+U_ICU_VERSION[\t ]+\"([^ \\n]*)\".*" + "\\1" icu_version_string "${icu_header_str}") + set(ICU_VERSION "${icu_version_string}") + set(ICU_VERSION "${icu_version_string}" PARENT_SCOPE) + unset(icu_header_str) + unset(icu_version_string) + endif() + + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + # 64-bit binary directory + set(_bin64 "bin64") + # 64-bit library directory + set(_lib64 "lib64") + endif() + + + # Find all ICU programs + list(APPEND icu_binary_suffixes "${_bin64}" "bin" "sbin") + foreach(program ${icu_programs}) + string(TOUPPER "${program}" program_upcase) + set(cache_var "ICU_${program_upcase}_EXECUTABLE") + set(program_var "ICU_${program_upcase}_EXECUTABLE") + find_program("${cache_var}" + NAMES "${program}" + HINTS ${icu_roots} + PATH_SUFFIXES ${icu_binary_suffixes} + DOC "ICU ${program} executable" + NO_PACKAGE_ROOT_PATH + ) + mark_as_advanced(cache_var) + set("${program_var}" "${${cache_var}}" PARENT_SCOPE) + endforeach() + + # Find all ICU libraries + list(APPEND icu_library_suffixes "${_lib64}" "lib") + set(ICU_REQUIRED_LIBS_FOUND ON) + set(static_prefix ) + # static icu libraries compiled with MSVC have the prefix 's' + if(MSVC) + set(static_prefix "s") + endif() + foreach(component ${ICU_FIND_COMPONENTS}) + string(TOUPPER "${component}" component_upcase) + set(component_cache "ICU_${component_upcase}_LIBRARY") + set(component_cache_release "${component_cache}_RELEASE") + set(component_cache_debug "${component_cache}_DEBUG") + set(component_found "ICU_${component_upcase}_FOUND") + set(component_found_compat "${component_upcase}_FOUND") + set(component_libnames "icu${component}") + set(component_debug_libnames "icu${component}d") + + # Special case deliberate library naming mismatches between Unix + # and Windows builds + unset(component_libnames) + unset(component_debug_libnames) + list(APPEND component_libnames "icu${component}") + list(APPEND component_debug_libnames "icu${component}d") + if(component STREQUAL "data") + list(APPEND component_libnames "icudt") + # Note there is no debug variant at present + list(APPEND component_debug_libnames "icudtd") + endif() + if(component STREQUAL "dt") + list(APPEND component_libnames "icudata") + # Note there is no debug variant at present + list(APPEND component_debug_libnames "icudatad") + endif() + if(component STREQUAL "i18n") + list(APPEND component_libnames "icuin") + list(APPEND component_debug_libnames "icuind") + endif() + if(component STREQUAL "in") + list(APPEND component_libnames "icui18n") + list(APPEND component_debug_libnames "icui18nd") + endif() + + if(static_prefix) + unset(static_component_libnames) + unset(static_component_debug_libnames) + foreach(component_libname ${component_libnames}) + list(APPEND static_component_libnames + ${static_prefix}${component_libname}) + endforeach() + foreach(component_libname ${component_debug_libnames}) + list(APPEND static_component_debug_libnames + ${static_prefix}${component_libname}) + endforeach() + list(APPEND component_libnames ${static_component_libnames}) + list(APPEND component_debug_libnames ${static_component_debug_libnames}) + endif() + find_library("${component_cache_release}" + NAMES ${component_libnames} + HINTS ${icu_roots} + PATH_SUFFIXES ${icu_library_suffixes} + DOC "ICU ${component} library (release)" + NO_PACKAGE_ROOT_PATH + ) + find_library("${component_cache_debug}" + NAMES ${component_debug_libnames} + HINTS ${icu_roots} + PATH_SUFFIXES ${icu_library_suffixes} + DOC "ICU ${component} library (debug)" + NO_PACKAGE_ROOT_PATH + ) + include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake) + select_library_configurations(ICU_${component_upcase}) + mark_as_advanced("${component_cache_release}" "${component_cache_debug}") + if(${component_cache}) + set("${component_found}" ON) + set("${component_found_compat}" ON) + list(APPEND ICU_LIBRARY "${${component_cache}}") + endif() + mark_as_advanced("${component_found}") + mark_as_advanced("${component_found_compat}") + set("${component_cache}" "${${component_cache}}" PARENT_SCOPE) + set("${component_found}" "${${component_found}}" PARENT_SCOPE) + set("${component_found_compat}" "${${component_found_compat}}" PARENT_SCOPE) + if(component_found OR component_found_compat) + if (ICU_FIND_REQUIRED_${component}) + list(APPEND ICU_LIBS_FOUND "${component} (required)") + else() + list(APPEND ICU_LIBS_FOUND "${component} (optional)") + endif() + else() + if (ICU_FIND_REQUIRED_${component}) + set(ICU_REQUIRED_LIBS_FOUND OFF) + list(APPEND ICU_LIBS_NOTFOUND "${component} (required)") + else() + list(APPEND ICU_LIBS_NOTFOUND "${component} (optional)") + endif() + endif() + endforeach() + set(_ICU_REQUIRED_LIBS_FOUND "${ICU_REQUIRED_LIBS_FOUND}" PARENT_SCOPE) + set(ICU_LIBRARY "${ICU_LIBRARY}" PARENT_SCOPE) + + # Find all ICU data files + if(CMAKE_LIBRARY_ARCHITECTURE) + list(APPEND icu_data_suffixes + "${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}" + "lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}" + "${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu" + "lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu") + endif() + list(APPEND icu_data_suffixes + "${_lib64}/icu/${ICU_VERSION}" + "lib/icu/${ICU_VERSION}" + "${_lib64}/icu" + "lib/icu") + foreach(data ${icu_data}) + string(TOUPPER "${data}" data_upcase) + string(REPLACE "." "_" data_upcase "${data_upcase}") + set(cache_var "ICU_${data_upcase}") + set(data_var "ICU_${data_upcase}") + find_file("${cache_var}" + NAMES "${data}" + HINTS ${icu_roots} + PATH_SUFFIXES ${icu_data_suffixes} + DOC "ICU ${data} data file") + mark_as_advanced(cache_var) + set("${data_var}" "${${cache_var}}" PARENT_SCOPE) + endforeach() + + if(NOT ICU_FIND_QUIETLY) + if(ICU_LIBS_FOUND) + message(STATUS "Found the following ICU libraries:") + foreach(found ${ICU_LIBS_FOUND}) + message(STATUS " ${found}") + endforeach() + endif() + if(ICU_LIBS_NOTFOUND) + message(STATUS "The following ICU libraries were not found:") + foreach(notfound ${ICU_LIBS_NOTFOUND}) + message(STATUS " ${notfound}") + endforeach() + endif() + endif() + + if(ICU_DEBUG) + message(STATUS "--------FindICU.cmake search debug--------") + message(STATUS "ICU binary path search order: ${icu_roots}") + message(STATUS "ICU include path search order: ${icu_roots}") + message(STATUS "ICU library path search order: ${icu_roots}") + message(STATUS "----------------") + endif() +endfunction() + +_ICU_FIND() + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU + FOUND_VAR ICU_FOUND + REQUIRED_VARS ICU_INCLUDE_DIR + ICU_LIBRARY + _ICU_REQUIRED_LIBS_FOUND + VERSION_VAR ICU_VERSION + FAIL_MESSAGE "Failed to find all ICU components") + +unset(_ICU_REQUIRED_LIBS_FOUND) + +if(ICU_FOUND) + set(ICU_INCLUDE_DIRS "${ICU_INCLUDE_DIR}") + set(ICU_LIBRARIES "${ICU_LIBRARY}") + foreach(_ICU_component ${ICU_FIND_COMPONENTS}) + string(TOUPPER "${_ICU_component}" _ICU_component_upcase) + set(_ICU_component_cache "ICU_${_ICU_component_upcase}_LIBRARY") + set(_ICU_component_cache_release "ICU_${_ICU_component_upcase}_LIBRARY_RELEASE") + set(_ICU_component_cache_debug "ICU_${_ICU_component_upcase}_LIBRARY_DEBUG") + set(_ICU_component_lib "ICU_${_ICU_component_upcase}_LIBRARIES") + set(_ICU_component_found "ICU_${_ICU_component_upcase}_FOUND") + set(_ICU_imported_target "ICU::${_ICU_component}") + if(${_ICU_component_found}) + set("${_ICU_component_lib}" "${${_ICU_component_cache}}") + if(NOT TARGET ${_ICU_imported_target}) + add_library(${_ICU_imported_target} UNKNOWN IMPORTED) + if(ICU_INCLUDE_DIR) + set_target_properties(${_ICU_imported_target} PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIR}") + endif() + if(EXISTS "${${_ICU_component_cache}}") + set_target_properties(${_ICU_imported_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${${_ICU_component_cache}}") + endif() + if(EXISTS "${${_ICU_component_cache_release}}") + set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(${_ICU_imported_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX" + IMPORTED_LOCATION_RELEASE "${${_ICU_component_cache_release}}") + endif() + if(EXISTS "${${_ICU_component_cache_debug}}") + set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(${_ICU_imported_target} PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX" + IMPORTED_LOCATION_DEBUG "${${_ICU_component_cache_debug}}") + endif() + if(CMAKE_DL_LIBS AND _ICU_component STREQUAL "uc") + set_target_properties(${_ICU_imported_target} PROPERTIES + INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}") + endif() + endif() + endif() + unset(_ICU_component_upcase) + unset(_ICU_component_cache) + unset(_ICU_component_lib) + unset(_ICU_component_found) + unset(_ICU_imported_target) + endforeach() +endif() + +if(ICU_DEBUG) + message(STATUS "--------FindICU.cmake results debug--------") + message(STATUS "ICU found: ${ICU_FOUND}") + message(STATUS "ICU_VERSION number: ${ICU_VERSION}") + message(STATUS "ICU_ROOT directory: ${ICU_ROOT}") + message(STATUS "ICU_INCLUDE_DIR directory: ${ICU_INCLUDE_DIR}") + message(STATUS "ICU_LIBRARIES: ${ICU_LIBRARIES}") + + foreach(program IN LISTS icu_programs) + string(TOUPPER "${program}" program_upcase) + set(program_lib "ICU_${program_upcase}_EXECUTABLE") + message(STATUS "${program} program: ${program_lib}=${${program_lib}}") + unset(program_upcase) + unset(program_lib) + endforeach() + + foreach(data IN LISTS icu_data) + string(TOUPPER "${data}" data_upcase) + string(REPLACE "." "_" data_upcase "${data_upcase}") + set(data_lib "ICU_${data_upcase}") + message(STATUS "${data} data: ${data_lib}=${${data_lib}}") + unset(data_upcase) + unset(data_lib) + endforeach() + + foreach(component IN LISTS ICU_FIND_COMPONENTS) + string(TOUPPER "${component}" component_upcase) + set(component_lib "ICU_${component_upcase}_LIBRARIES") + set(component_found "ICU_${component_upcase}_FOUND") + set(component_found_compat "${component_upcase}_FOUND") + message(STATUS "${component} library found: ${component_found}=${${component_found}}") + message(STATUS "${component} library found (compat name): ${component_found_compat}=${${component_found_compat}}") + message(STATUS "${component} library: ${component_lib}=${${component_lib}}") + unset(component_upcase) + unset(component_lib) + unset(component_found) + unset(component_found_compat) + endforeach() + message(STATUS "----------------") +endif() + +unset(icu_programs) diff --git a/cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake b/cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake new file mode 100644 index 00000000..3a7c0927 --- /dev/null +++ b/cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake @@ -0,0 +1,605 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindPackageHandleStandardArgs +----------------------------- + +This module provides functions intended to be used in :ref:`Find Modules` +implementing :command:`find_package()` calls. + +.. command:: find_package_handle_standard_args + + This command handles the ``REQUIRED``, ``QUIET`` and version-related + arguments of :command:`find_package`. It also sets the + ``_FOUND`` variable. The package is considered found if all + variables listed contain valid results, e.g. valid filepaths. + + There are two signatures: + + .. code-block:: cmake + + find_package_handle_standard_args( + (DEFAULT_MSG|) + ... + ) + + find_package_handle_standard_args( + [FOUND_VAR ] + [REQUIRED_VARS ...] + [VERSION_VAR ] + [HANDLE_VERSION_RANGE] + [HANDLE_COMPONENTS] + [CONFIG_MODE] + [NAME_MISMATCHED] + [REASON_FAILURE_MESSAGE ] + [FAIL_MESSAGE ] + ) + + The ``_FOUND`` variable will be set to ``TRUE`` if all + the variables ``...`` are valid and any optional + constraints are satisfied, and ``FALSE`` otherwise. A success or + failure message may be displayed based on the results and on + whether the ``REQUIRED`` and/or ``QUIET`` option was given to + the :command:`find_package` call. + + The options are: + + ``(DEFAULT_MSG|)`` + In the simple signature this specifies the failure message. + Use ``DEFAULT_MSG`` to ask for a default message to be computed + (recommended). Not valid in the full signature. + + ``FOUND_VAR `` + .. deprecated:: 3.3 + + Specifies either ``_FOUND`` or + ``_FOUND`` as the result variable. This exists only + for compatibility with older versions of CMake and is now ignored. + Result variables of both names are always set for compatibility. + + ``REQUIRED_VARS ...`` + Specify the variables which are required for this package. + These may be named in the generated failure message asking the + user to set the missing variable values. Therefore these should + typically be cache entries such as ``FOO_LIBRARY`` and not output + variables like ``FOO_LIBRARIES``. + + .. versionchanged:: 3.18 + If ``HANDLE_COMPONENTS`` is specified, this option can be omitted. + + ``VERSION_VAR `` + Specify the name of a variable that holds the version of the package + that has been found. This version will be checked against the + (potentially) specified required version given to the + :command:`find_package` call, including its ``EXACT`` option. + The default messages include information about the required + version and the version which has been actually found, both + if the version is ok or not. + + ``HANDLE_VERSION_RANGE`` + .. versionadded:: 3.19 + + Enable handling of a version range, if one is specified. Without this + option, a developer warning will be displayed if a version range is + specified. + + ``HANDLE_COMPONENTS`` + Enable handling of package components. In this case, the command + will report which components have been found and which are missing, + and the ``_FOUND`` variable will be set to ``FALSE`` + if any of the required components (i.e. not the ones listed after + the ``OPTIONAL_COMPONENTS`` option of :command:`find_package`) are + missing. + + ``CONFIG_MODE`` + Specify that the calling find module is a wrapper around a + call to ``find_package( NO_MODULE)``. This implies + a ``VERSION_VAR`` value of ``_VERSION``. The command + will automatically check whether the package configuration file + was found. + + ``REASON_FAILURE_MESSAGE `` + .. versionadded:: 3.16 + + Specify a custom message of the reason for the failure which will be + appended to the default generated message. + + ``FAIL_MESSAGE `` + Specify a custom failure message instead of using the default + generated message. Not recommended. + + ``NAME_MISMATCHED`` + .. versionadded:: 3.17 + + Indicate that the ```` does not match + ``${CMAKE_FIND_PACKAGE_NAME}``. This is usually a mistake and raises a + warning, but it may be intentional for usage of the command for components + of a larger package. + +Example for the simple signature: + +.. code-block:: cmake + + find_package_handle_standard_args(LibXml2 DEFAULT_MSG + LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) + +The ``LibXml2`` package is considered to be found if both +``LIBXML2_LIBRARY`` and ``LIBXML2_INCLUDE_DIR`` are valid. +Then also ``LibXml2_FOUND`` is set to ``TRUE``. If it is not found +and ``REQUIRED`` was used, it fails with a +:command:`message(FATAL_ERROR)`, independent whether ``QUIET`` was +used or not. If it is found, success will be reported, including +the content of the first ````. On repeated CMake runs, +the same message will not be printed again. + +.. note:: + + If ```` does not match ``CMAKE_FIND_PACKAGE_NAME`` for the + calling module, a warning that there is a mismatch is given. The + ``FPHSA_NAME_MISMATCHED`` variable may be set to bypass the warning if using + the old signature and the ``NAME_MISMATCHED`` argument using the new + signature. To avoid forcing the caller to require newer versions of CMake for + usage, the variable's value will be used if defined when the + ``NAME_MISMATCHED`` argument is not passed for the new signature (but using + both is an error).. + +Example for the full signature: + +.. code-block:: cmake + + find_package_handle_standard_args(LibArchive + REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR + VERSION_VAR LibArchive_VERSION) + +In this case, the ``LibArchive`` package is considered to be found if +both ``LibArchive_LIBRARY`` and ``LibArchive_INCLUDE_DIR`` are valid. +Also the version of ``LibArchive`` will be checked by using the version +contained in ``LibArchive_VERSION``. Since no ``FAIL_MESSAGE`` is given, +the default messages will be printed. + +Another example for the full signature: + +.. code-block:: cmake + + find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4) + find_package_handle_standard_args(Automoc4 CONFIG_MODE) + +In this case, a ``FindAutmoc4.cmake`` module wraps a call to +``find_package(Automoc4 NO_MODULE)`` and adds an additional search +directory for ``automoc4``. Then the call to +``find_package_handle_standard_args`` produces a proper success/failure +message. + +.. command:: find_package_check_version + + .. versionadded:: 3.19 + + Helper function which can be used to check if a ```` is valid + against version-related arguments of :command:`find_package`. + + .. code-block:: cmake + + find_package_check_version( + [HANDLE_VERSION_RANGE] + [RESULT_MESSAGE_VARIABLE ] + ) + + The ```` will hold a boolean value giving the result of the check. + + The options are: + + ``HANDLE_VERSION_RANGE`` + Enable handling of a version range, if one is specified. Without this + option, a developer warning will be displayed if a version range is + specified. + + ``RESULT_MESSAGE_VARIABLE `` + Specify a variable to get back a message describing the result of the check. + +Example for the usage: + +.. code-block:: cmake + + find_package_check_version(1.2.3 result HANDLE_VERSION_RANGE + RESULT_MESSAGE_VARIABLE reason) + if (result) + message (STATUS "${reason}") + else() + message (FATAL_ERROR "${reason}") + endif() +#]=======================================================================] + +include(${CMAKE_CURRENT_LIST_DIR}/FindPackageMessage.cmake) + + +cmake_policy(PUSH) +# numbers and boolean constants +cmake_policy (SET CMP0012 NEW) +# IN_LIST operator +cmake_policy (SET CMP0057 NEW) + + +# internal helper macro +macro(_FPHSA_FAILURE_MESSAGE _msg) + set (__msg "${_msg}") + if (FPHSA_REASON_FAILURE_MESSAGE) + string(APPEND __msg "\n Reason given by package: ${FPHSA_REASON_FAILURE_MESSAGE}\n") + endif() + if (${_NAME}_FIND_REQUIRED) + message(FATAL_ERROR "${__msg}") + else () + if (NOT ${_NAME}_FIND_QUIETLY) + message(STATUS "${__msg}") + endif () + endif () +endmacro() + + +# internal helper macro to generate the failure message when used in CONFIG_MODE: +macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) + # _CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: + if(${_NAME}_CONFIG) + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing:${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})") + else() + # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version. + # List them all in the error message: + if(${_NAME}_CONSIDERED_CONFIGS) + set(configsText "") + list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount) + math(EXPR configsCount "${configsCount} - 1") + foreach(currentConfigIndex RANGE ${configsCount}) + list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename) + list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version) + string(APPEND configsText "\n ${filename} (version ${version})") + endforeach() + if (${_NAME}_NOT_FOUND_MESSAGE) + if (FPHSA_REASON_FAILURE_MESSAGE) + string(PREPEND FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}\n ") + else() + set(FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}") + endif() + else() + string(APPEND configsText "\n") + endif() + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:${configsText}") + + else() + # Simple case: No Config-file was found at all: + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}") + endif() + endif() +endmacro() + + +function(FIND_PACKAGE_CHECK_VERSION version result) + cmake_parse_arguments (PARSE_ARGV 2 FPCV "HANDLE_VERSION_RANGE;NO_AUTHOR_WARNING_VERSION_RANGE" "RESULT_MESSAGE_VARIABLE" "") + + if (FPCV_UNPARSED_ARGUMENTS) + message (FATAL_ERROR "find_package_check_version(): ${FPCV_UNPARSED_ARGUMENTS}: unexpected arguments") + endif() + if ("RESULT_MESSAGE_VARIABLE" IN_LIST FPCV_KEYWORDS_MISSING_VALUES) + message (FATAL_ERROR "find_package_check_version(): RESULT_MESSAGE_VARIABLE expects an argument") + endif() + + set (${result} FALSE PARENT_SCOPE) + if (FPCV_RESULT_MESSAGE_VARIABLE) + unset (${FPCV_RESULT_MESSAGE_VARIABLE} PARENT_SCOPE) + endif() + + if (_CMAKE_FPHSA_PACKAGE_NAME) + set (package "${_CMAKE_FPHSA_PACKAGE_NAME}") + elseif (CMAKE_FIND_PACKAGE_NAME) + set (package "${CMAKE_FIND_PACKAGE_NAME}") + else() + message (FATAL_ERROR "find_package_check_version(): Cannot be used outside a 'Find Module'") + endif() + + if (NOT FPCV_NO_AUTHOR_WARNING_VERSION_RANGE + AND ${package}_FIND_VERSION_RANGE AND NOT FPCV_HANDLE_VERSION_RANGE) + message(AUTHOR_WARNING + "`find_package()` specify a version range but the option " + "HANDLE_VERSION_RANGE` is not passed to `find_package_check_version()`. " + "Only the lower endpoint of the range will be used.") + endif() + + + set (version_ok FALSE) + unset (version_msg) + + if (FPCV_HANDLE_VERSION_RANGE AND ${package}_FIND_VERSION_RANGE) + if ((${package}_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" + AND version VERSION_GREATER_EQUAL ${package}_FIND_VERSION_MIN) + AND ((${package}_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" + AND version VERSION_LESS_EQUAL ${package}_FIND_VERSION_MAX) + OR (${package}_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" + AND version VERSION_LESS ${package}_FIND_VERSION_MAX))) + set (version_ok TRUE) + set(version_msg "(found suitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\")") + else() + set(version_msg "Found unsuitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\"") + endif() + elseif (DEFINED ${package}_FIND_VERSION) + if(${package}_FIND_VERSION_EXACT) # exact version required + # count the dots in the version string + string(REGEX REPLACE "[^.]" "" version_dots "${version}") + # add one dot because there is one dot more than there are components + string(LENGTH "${version_dots}." version_dots) + if (version_dots GREATER ${package}_FIND_VERSION_COUNT) + # Because of the C++ implementation of find_package() ${package}_FIND_VERSION_COUNT + # is at most 4 here. Therefore a simple lookup table is used. + if (${package}_FIND_VERSION_COUNT EQUAL 1) + set(version_regex "[^.]*") + elseif (${package}_FIND_VERSION_COUNT EQUAL 2) + set(version_regex "[^.]*\\.[^.]*") + elseif (${package}_FIND_VERSION_COUNT EQUAL 3) + set(version_regex "[^.]*\\.[^.]*\\.[^.]*") + else() + set(version_regex "[^.]*\\.[^.]*\\.[^.]*\\.[^.]*") + endif() + string(REGEX REPLACE "^(${version_regex})\\..*" "\\1" version_head "${version}") + if (NOT ${package}_FIND_VERSION VERSION_EQUAL version_head) + set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"") + else () + set(version_ok TRUE) + set(version_msg "(found suitable exact version \"${_FOUND_VERSION}\")") + endif () + else () + if (NOT ${package}_FIND_VERSION VERSION_EQUAL version) + set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"") + else () + set(version_ok TRUE) + set(version_msg "(found suitable exact version \"${version}\")") + endif () + endif () + else() # minimum version + if (${package}_FIND_VERSION VERSION_GREATER version) + set(version_msg "Found unsuitable version \"${version}\", but required is at least \"${${package}_FIND_VERSION}\"") + else() + set(version_ok TRUE) + set(version_msg "(found suitable version \"${version}\", minimum required is \"${${package}_FIND_VERSION}\")") + endif() + endif() + else () + set(version_ok TRUE) + set(version_msg "(found version \"${version}\")") + endif() + + set (${result} ${version_ok} PARENT_SCOPE) + if (FPCV_RESULT_MESSAGE_VARIABLE) + set (${FPCV_RESULT_MESSAGE_VARIABLE} "${version_msg}" PARENT_SCOPE) + endif() +endfunction() + + +function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG) + + # Set up the arguments for `cmake_parse_arguments`. + set(options CONFIG_MODE HANDLE_COMPONENTS NAME_MISMATCHED HANDLE_VERSION_RANGE) + set(oneValueArgs FAIL_MESSAGE REASON_FAILURE_MESSAGE VERSION_VAR FOUND_VAR) + set(multiValueArgs REQUIRED_VARS) + + # Check whether we are in 'simple' or 'extended' mode: + set(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} ) + list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX) + + unset(FPHSA_NAME_MISMATCHED_override) + if (DEFINED FPHSA_NAME_MISMATCHED) + # If the variable NAME_MISMATCHED variable is set, error if it is passed as + # an argument. The former is for old signatures, the latter is for new + # signatures. + list(FIND ARGN "NAME_MISMATCHED" name_mismatched_idx) + if (NOT name_mismatched_idx EQUAL "-1") + message(FATAL_ERROR + "The `NAME_MISMATCHED` argument may only be specified by the argument or " + "the variable, not both.") + endif () + + # But use the variable if it is not an argument to avoid forcing minimum + # CMake version bumps for calling modules. + set(FPHSA_NAME_MISMATCHED_override "${FPHSA_NAME_MISMATCHED}") + endif () + + if(${INDEX} EQUAL -1) + set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG}) + set(FPHSA_REQUIRED_VARS ${ARGN}) + set(FPHSA_VERSION_VAR) + else() + cmake_parse_arguments(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN}) + + if(FPHSA_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"") + endif() + + if(NOT FPHSA_FAIL_MESSAGE) + set(FPHSA_FAIL_MESSAGE "DEFAULT_MSG") + endif() + + # In config-mode, we rely on the variable _CONFIG, which is set by find_package() + # when it successfully found the config-file, including version checking: + if(FPHSA_CONFIG_MODE) + list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG) + list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS) + set(FPHSA_VERSION_VAR ${_NAME}_VERSION) + endif() + + if(NOT FPHSA_REQUIRED_VARS AND NOT FPHSA_HANDLE_COMPONENTS) + message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()") + endif() + endif() + + if (DEFINED FPHSA_NAME_MISMATCHED_override) + set(FPHSA_NAME_MISMATCHED "${FPHSA_NAME_MISMATCHED_override}") + endif () + + if (DEFINED CMAKE_FIND_PACKAGE_NAME + AND NOT FPHSA_NAME_MISMATCHED + AND NOT _NAME STREQUAL CMAKE_FIND_PACKAGE_NAME) + message(AUTHOR_WARNING + "The package name passed to `find_package_handle_standard_args` " + "(${_NAME}) does not match the name of the calling package " + "(${CMAKE_FIND_PACKAGE_NAME}). This can lead to problems in calling " + "code that expects `find_package` result variables (e.g., `_FOUND`) " + "to follow a certain pattern.") + endif () + + if (${_NAME}_FIND_VERSION_RANGE AND NOT FPHSA_HANDLE_VERSION_RANGE) + message(AUTHOR_WARNING + "`find_package()` specify a version range but the module ${_NAME} does " + "not support this capability. Only the lower endpoint of the range " + "will be used.") + endif() + + # to propagate package name to FIND_PACKAGE_CHECK_VERSION + set(_CMAKE_FPHSA_PACKAGE_NAME "${_NAME}") + + # now that we collected all arguments, process them + + if("x${FPHSA_FAIL_MESSAGE}" STREQUAL "xDEFAULT_MSG") + set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}") + endif() + + if (FPHSA_REQUIRED_VARS) + list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR) + endif() + + string(TOUPPER ${_NAME} _NAME_UPPER) + string(TOLOWER ${_NAME} _NAME_LOWER) + + if(FPHSA_FOUND_VAR) + set(_FOUND_VAR_UPPER ${_NAME_UPPER}_FOUND) + set(_FOUND_VAR_MIXED ${_NAME}_FOUND) + if(FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_MIXED OR FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_UPPER) + set(_FOUND_VAR ${FPHSA_FOUND_VAR}) + else() + message(FATAL_ERROR "The argument for FOUND_VAR is \"${FPHSA_FOUND_VAR}\", but only \"${_FOUND_VAR_MIXED}\" and \"${_FOUND_VAR_UPPER}\" are valid names.") + endif() + else() + set(_FOUND_VAR ${_NAME_UPPER}_FOUND) + endif() + + # collect all variables which were not found, so they can be printed, so the + # user knows better what went wrong (#6375) + set(MISSING_VARS "") + set(DETAILS "") + # check if all passed variables are valid + set(FPHSA_FOUND_${_NAME} TRUE) + foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS}) + if(NOT ${_CURRENT_VAR}) + set(FPHSA_FOUND_${_NAME} FALSE) + string(APPEND MISSING_VARS " ${_CURRENT_VAR}") + else() + string(APPEND DETAILS "[${${_CURRENT_VAR}}]") + endif() + endforeach() + if(FPHSA_FOUND_${_NAME}) + set(${_NAME}_FOUND TRUE) + set(${_NAME_UPPER}_FOUND TRUE) + else() + set(${_NAME}_FOUND FALSE) + set(${_NAME_UPPER}_FOUND FALSE) + endif() + + # component handling + unset(FOUND_COMPONENTS_MSG) + unset(MISSING_COMPONENTS_MSG) + + if(FPHSA_HANDLE_COMPONENTS) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(${_NAME}_${comp}_FOUND) + + if(NOT DEFINED FOUND_COMPONENTS_MSG) + set(FOUND_COMPONENTS_MSG "found components:") + endif() + string(APPEND FOUND_COMPONENTS_MSG " ${comp}") + + else() + + if(NOT DEFINED MISSING_COMPONENTS_MSG) + set(MISSING_COMPONENTS_MSG "missing components:") + endif() + string(APPEND MISSING_COMPONENTS_MSG " ${comp}") + + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + string(APPEND MISSING_VARS " ${comp}") + endif() + + endif() + endforeach() + set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}") + string(APPEND DETAILS "[c${COMPONENT_MSG}]") + endif() + + # version handling: + set(VERSION_MSG "") + set(VERSION_OK TRUE) + + # check with DEFINED here as the requested or found version may be "0" + if (DEFINED ${_NAME}_FIND_VERSION) + if(DEFINED ${FPHSA_VERSION_VAR}) + set(_FOUND_VERSION ${${FPHSA_VERSION_VAR}}) + if (FPHSA_HANDLE_VERSION_RANGE) + set (FPCV_HANDLE_VERSION_RANGE HANDLE_VERSION_RANGE) + else() + set(FPCV_HANDLE_VERSION_RANGE NO_AUTHOR_WARNING_VERSION_RANGE) + endif() + find_package_check_version ("${_FOUND_VERSION}" VERSION_OK RESULT_MESSAGE_VARIABLE VERSION_MSG + ${FPCV_HANDLE_VERSION_RANGE}) + else() + # if the package was not found, but a version was given, add that to the output: + if(${_NAME}_FIND_VERSION_EXACT) + set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")") + elseif (FPHSA_HANDLE_VERSION_RANGE AND ${_NAME}_FIND_VERSION_RANGE) + set(VERSION_MSG "(Required is version range \"${${_NAME}_FIND_VERSION_RANGE}\")") + else() + set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")") + endif() + endif() + else () + # Check with DEFINED as the found version may be 0. + if(DEFINED ${FPHSA_VERSION_VAR}) + set(VERSION_MSG "(found version \"${${FPHSA_VERSION_VAR}}\")") + endif() + endif () + + if(VERSION_OK) + string(APPEND DETAILS "[v${${FPHSA_VERSION_VAR}}(${${_NAME}_FIND_VERSION})]") + else() + set(${_NAME}_FOUND FALSE) + endif() + + + # print the result: + if (${_NAME}_FOUND) + FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}") + else () + + if(FPHSA_CONFIG_MODE) + _FPHSA_HANDLE_FAILURE_CONFIG_MODE() + else() + if(NOT VERSION_OK) + set(RESULT_MSG) + if (_FIRST_REQUIRED_VAR) + string (APPEND RESULT_MSG "found ${${_FIRST_REQUIRED_VAR}}") + endif() + if (COMPONENT_MSG) + if (RESULT_MSG) + string (APPEND RESULT_MSG ", ") + endif() + string (APPEND RESULT_MSG "${FOUND_COMPONENTS_MSG}") + endif() + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (${RESULT_MSG})") + else() + _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing:${MISSING_VARS}) ${VERSION_MSG}") + endif() + endif() + + endif () + + set(${_NAME}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE) + set(${_NAME_UPPER}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE) +endfunction() + + +cmake_policy(POP) diff --git a/cmake/Kitware/modules/FindPackageMessage.cmake b/cmake/Kitware/modules/FindPackageMessage.cmake new file mode 100644 index 00000000..e12e8ed9 --- /dev/null +++ b/cmake/Kitware/modules/FindPackageMessage.cmake @@ -0,0 +1,48 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindPackageMessage +------------------ + +.. code-block:: cmake + + find_package_message( "message for user" "find result details") + +This function is intended to be used in FindXXX.cmake modules files. +It will print a message once for each unique find result. This is +useful for telling the user where a package was found. The first +argument specifies the name (XXX) of the package. The second argument +specifies the message to display. The third argument lists details +about the find result so that if they change the message will be +displayed again. The macro also obeys the QUIET argument to the +find_package command. + +Example: + +.. code-block:: cmake + + if(X11_FOUND) + find_package_message(X11 "Found X11: ${X11_X11_LIB}" + "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") + else() + ... + endif() +#]=======================================================================] + +function(find_package_message pkg msg details) + # Avoid printing a message repeatedly for the same find result. + if(NOT ${pkg}_FIND_QUIETLY) + string(REPLACE "\n" "" details "${details}") + set(DETAILS_VAR FIND_PACKAGE_MESSAGE_DETAILS_${pkg}) + if(NOT "${details}" STREQUAL "${${DETAILS_VAR}}") + # The message has not yet been printed. + message(STATUS "${msg}") + + # Save the find details in the cache to avoid printing the same + # message again. + set("${DETAILS_VAR}" "${details}" + CACHE INTERNAL "Details about finding ${pkg}") + endif() + endif() +endfunction() diff --git a/cmake/Kitware/modules/SelectLibraryConfigurations.cmake b/cmake/Kitware/modules/SelectLibraryConfigurations.cmake new file mode 100644 index 00000000..50ee9fe7 --- /dev/null +++ b/cmake/Kitware/modules/SelectLibraryConfigurations.cmake @@ -0,0 +1,80 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +SelectLibraryConfigurations +--------------------------- + +.. code-block:: cmake + + select_library_configurations(basename) + +This macro takes a library base name as an argument, and will choose +good values for the variables + +:: + + basename_LIBRARY + basename_LIBRARIES + basename_LIBRARY_DEBUG + basename_LIBRARY_RELEASE + +depending on what has been found and set. + +If only ``basename_LIBRARY_RELEASE`` is defined, ``basename_LIBRARY`` will +be set to the release value, and ``basename_LIBRARY_DEBUG`` will be set +to ``basename_LIBRARY_DEBUG-NOTFOUND``. If only ``basename_LIBRARY_DEBUG`` +is defined, then ``basename_LIBRARY`` will take the debug value, and +``basename_LIBRARY_RELEASE`` will be set to ``basename_LIBRARY_RELEASE-NOTFOUND``. + +If the generator supports configuration types, then ``basename_LIBRARY`` +and ``basename_LIBRARIES`` will be set with debug and optimized flags +specifying the library to be used for the given configuration. If no +build type has been set or the generator in use does not support +configuration types, then ``basename_LIBRARY`` and ``basename_LIBRARIES`` +will take only the release value, or the debug value if the release one +is not set. +#]=======================================================================] + +# This macro was adapted from the FindQt4 CMake module and is maintained by Will +# Dicharry . + +macro(select_library_configurations basename) + if(NOT ${basename}_LIBRARY_RELEASE) + set(${basename}_LIBRARY_RELEASE "${basename}_LIBRARY_RELEASE-NOTFOUND" CACHE FILEPATH "Path to a library.") + endif() + if(NOT ${basename}_LIBRARY_DEBUG) + set(${basename}_LIBRARY_DEBUG "${basename}_LIBRARY_DEBUG-NOTFOUND" CACHE FILEPATH "Path to a library.") + endif() + + get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + if( ${basename}_LIBRARY_DEBUG AND ${basename}_LIBRARY_RELEASE AND + NOT ${basename}_LIBRARY_DEBUG STREQUAL ${basename}_LIBRARY_RELEASE AND + ( _isMultiConfig OR CMAKE_BUILD_TYPE ) ) + # if the generator is multi-config or if CMAKE_BUILD_TYPE is set for + # single-config generators, set optimized and debug libraries + set( ${basename}_LIBRARY "" ) + foreach( _libname IN LISTS ${basename}_LIBRARY_RELEASE ) + list( APPEND ${basename}_LIBRARY optimized "${_libname}" ) + endforeach() + foreach( _libname IN LISTS ${basename}_LIBRARY_DEBUG ) + list( APPEND ${basename}_LIBRARY debug "${_libname}" ) + endforeach() + elseif( ${basename}_LIBRARY_RELEASE ) + set( ${basename}_LIBRARY ${${basename}_LIBRARY_RELEASE} ) + elseif( ${basename}_LIBRARY_DEBUG ) + set( ${basename}_LIBRARY ${${basename}_LIBRARY_DEBUG} ) + else() + set( ${basename}_LIBRARY "${basename}_LIBRARY-NOTFOUND") + endif() + + set( ${basename}_LIBRARIES "${${basename}_LIBRARY}" ) + + if( ${basename}_LIBRARY ) + set( ${basename}_FOUND TRUE ) + endif() + + mark_as_advanced( ${basename}_LIBRARY_RELEASE + ${basename}_LIBRARY_DEBUG + ) +endmacro() diff --git a/cmake/modules/FindICU.cmake b/cmake/modules/FindICU.cmake deleted file mode 100644 index 460db33f..00000000 --- a/cmake/modules/FindICU.cmake +++ /dev/null @@ -1,132 +0,0 @@ -# Finds the International Components for Unicode (ICU) Library -# -# ICU_FOUND - True if ICU found. -# ICU_I18N_FOUND - True if ICU's internationalization library found. -# ICU_BINARY_DIR - Directory with the runtime binaries -# ICU_INCLUDE_DIR - Directory to include to get ICU headers -# Note: always include ICU headers as, e.g., -# unicode/utypes.h -# ICU_LIBRARY - Library to link against for the common ICU -# ICU_I18N_LIBRARY - Library to link against for ICU internationaliation -# (note: in addition to ICU_LIBRARY) -# ICU_VERSION - ICU version MAJOR.MINOR -# ICU_MAJOR_VERSION - ICU major version -# ICO_MINOR_VERSION - ICU minor version -# - -set_package_properties(ICU PROPERTIES - DESCRIPTION "libicu (International Components for Unicode) libraries" - URL "http://www.icu-project.org" -) - -if(WIN32) - file(TO_CMAKE_PATH "$ENV{PROGRAMFILES}" _program_FILES_DIR) -endif() - -file(TO_NATIVE_PATH "$ENV{ICU_BASE}" icu_root) -if(DEFINED ICU_BASE) - file(TO_NATIVE_PATH "${ICU_BASE}" icu_root) -else() - find_package(PkgConfig QUIET) - pkg_check_modules(PC_LibICU QUIET icu-i18n) -endif() - -# Look for the header file. -find_path( - ICU_INCLUDE_DIR - NAMES unicode/utypes.h - HINTS - ${icu_root}/include - ${_program_FILES_DIR}/icu/include - ${PC_LibICU_INCLUDEDIR} - /usr/local/opt/icu4c/include - DOC "Include directory for the ICU library" -) -mark_as_advanced(ICU_INCLUDE_DIR) - -# Look for the library. -find_library( - ICU_LIBRARY - NAMES icuuc cygicuuc cygicuuc32 - HINTS - ${icu_root}/lib64/ - ${icu_root}/lib/ - ${_program_FILES_DIR}/icu/lib64/ - ${_program_FILES_DIR}/icu/lib/ - ${PC_LibICU_LIBDIR} - /usr/local/opt/icu4c/lib/ - DOC "Libraries to link against for the common parts of ICU" -) -mark_as_advanced(ICU_LIBRARY) - -# Look for the binary path. -find_program( - tmp_DIR - NAMES genccode uconv - PATHS - ${icu_root}/bin64/ - ${icu_root}/bin/ - ${_program_FILES_DIR}/icu/bin64/ - ${_program_FILES_DIR}/icu/bin/ - /usr/local/opt/icu4c/bin/ -) -get_filename_component(tmp_DIR ${tmp_DIR} DIRECTORY) -set(ICU_BINARY_DIR ${tmp_DIR} CACHE DOC STRING "Runtime binaries directory for the ICU library") -mark_as_advanced(ICU_BINARY_DIR) - -# Copy the results to the output variables. -if(ICU_INCLUDE_DIR AND ICU_LIBRARY) - set(ICU_FOUND 1) - set(ICU_LIBRARIES ${ICU_LIBRARY}) - set(ICU_INCLUDE_DIRS ${ICU_INCLUDE_DIR}) - - set(ICU_VERSION 0) - set(ICU_MAJOR_VERSION 0) - set(ICU_MINOR_VERSION 0) - file(READ "${ICU_INCLUDE_DIR}/unicode/uvernum.h" _ICU_VERSION_CONENTS) - string(REGEX REPLACE ".*#define U_ICU_VERSION_MAJOR_NUM ([0-9]+).*" "\\1" ICU_MAJOR_VERSION "${_ICU_VERSION_CONENTS}") - string(REGEX REPLACE ".*#define U_ICU_VERSION_MINOR_NUM ([0-9]+).*" "\\1" ICU_MINOR_VERSION "${_ICU_VERSION_CONENTS}") - - set(ICU_VERSION "${ICU_MAJOR_VERSION}.${ICU_MINOR_VERSION}") - - # Look for the ICU internationalization libraries - find_library( - ICU_I18N_LIBRARY - NAMES icuin icui18n cygicuin cygicuin32 - HINTS - ${icu_root}/lib/ - ${_program_FILES_DIR}/icu/lib/ - ${PC_LibICU_LIBDIR} - /usr/local/opt/icu4c/lib/ - DOC "Libraries to link against for ICU internationalization" - ) - mark_as_advanced(ICU_I18N_LIBRARY) - if(ICU_I18N_LIBRARY) - set(ICU_I18N_FOUND 1) - set(ICU_LIBRARIES "${ICU_LIBRARIES} ${ICU_I18N_LIBRARY}") - else() - set(ICU_I18N_FOUND 0) - endif() -else() - set(ICU_FOUND 0) - set(ICU_I18N_FOUND 0) - set(ICU_INCLUDE_DIRS) - set(ICU_LIBRARIES) - set(ICU_VERSION) - set(ICU_MAJOR_VERSION) - set(ICU_MINOR_VERSION) -endif() - -if(ICU_FOUND) - if(NOT ICU_FIND_QUIETLY) - message(STATUS "Found ICU version ${ICU_VERSION}") - message(STATUS "Found ICU header files in ${ICU_INCLUDE_DIRS}") - message(STATUS "Found ICU libraries: ${ICU_LIBRARIES}") - endif() -else() - if(ICU_FIND_REQUIRED) - message(FATAL_ERROR "Could not find ICU") - else() - message(STATUS "Optional package ICU was not found") - endif() -endif() diff --git a/config.h.cmake b/config.h.cmake index c8008692..b7e1d5c9 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -3,9 +3,6 @@ /* Define if you have the ICU library. */ #cmakedefine HAVE_LIBICU 1 -/* Define if you have the ICU internationalization library. */ -#cmakedefine HAVE_LIBICU_I18N 1 - /* Define if you have the Berkeley DB library. */ #cmakedefine HAVE_BDB 1 diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 8a18cf97..2ad6e639 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -30,10 +30,7 @@ else() ) target_link_libraries(doesnothing ${CMAKE_THREAD_LIBS_INIT}) if(ICU_FOUND) - target_link_libraries(doesnothing ${ICU_LIBRARY}) - endif() - if(ICU_I18N_FOUND) - target_link_libraries(doesnothing ${ICU_I18N_LIBRARY}) + target_link_libraries(doesnothing ${ICU_LIBRARIES}) endif() if(BDB_FOUND) target_link_libraries(doesnothing ${BDB_LIBRARY}) diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index fd1a7815..9d8b51ee 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -14,7 +14,7 @@ include_directories( ) if(ICU_FOUND) - include_directories(${ICU_INCLUDE_DIR}) + include_directories(${ICU_INCLUDE_DIRS}) endif() set(PACKAGE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/share/libical") @@ -268,10 +268,7 @@ endif() target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT}) if(ICU_FOUND) - target_link_libraries(ical ${ICU_LIBRARY}) -endif() -if(ICU_I18N_FOUND) - target_link_libraries(ical ${ICU_I18N_LIBRARY}) + target_link_libraries(ical ${ICU_LIBRARIES}) endif() if(WINCE) diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 98ebb929..dc3db6b5 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -8,7 +8,7 @@ include_directories( ) if(ICU_FOUND) - include_directories(${ICU_INCLUDE_DIR}) + include_directories(${ICU_INCLUDE_DIRS}) endif() if(BDB_FOUND) @@ -63,10 +63,7 @@ macro(buildme _name _srcs) target_link_libraries(${_name} ${CMAKE_THREAD_LIBS_INIT}) if(ICU_FOUND) - target_link_libraries(${_name} ${ICU_LIBRARY}) - endif() - if(ICU_I18N_FOUND) - target_link_libraries(${_name} ${ICU_I18N_LIBRARY}) + target_link_libraries(${_name} ${ICU_LIBRARIES}) endif() if(BDB_FOUND) target_link_libraries(${_name} ${BDB_LIBRARY}) -- cgit v1.2.1 From 816dd9a2f27c7f050afddfaa4df80b58ce9c5577 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 14:10:02 -0500 Subject: .krazy - skip cmake/Kitware --- .krazy | 1 + 1 file changed, 1 insertion(+) diff --git a/.krazy b/.krazy index fb370667..6a4b02b9 100644 --- a/.krazy +++ b/.krazy @@ -27,6 +27,7 @@ SKIP /src/libicalvcal/vobject\. #Skip contributed files SKIP /src/libical/astime\.h SKIP /src/libical/caldate\.c +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 -- cgit v1.2.1 From e535a73fbabc46abf3d87e3245335ab66d00f432 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 7 Nov 2021 14:13:09 -0500 Subject: buildsystem - use native FindPackageHandleStandardArgs --- cmake/Kitware/modules/FindICU.cmake | 2 +- .../modules/FindPackageHandleStandardArgs.cmake | 605 --------------------- cmake/Kitware/modules/FindPackageMessage.cmake | 48 -- 3 files changed, 1 insertion(+), 654 deletions(-) delete mode 100644 cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake delete mode 100644 cmake/Kitware/modules/FindPackageMessage.cmake diff --git a/cmake/Kitware/modules/FindICU.cmake b/cmake/Kitware/modules/FindICU.cmake index b649f044..4fa16bf1 100644 --- a/cmake/Kitware/modules/FindICU.cmake +++ b/cmake/Kitware/modules/FindICU.cmake @@ -331,7 +331,7 @@ endfunction() _ICU_FIND() -include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) +#include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake) FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU FOUND_VAR ICU_FOUND REQUIRED_VARS ICU_INCLUDE_DIR diff --git a/cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake b/cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake deleted file mode 100644 index 3a7c0927..00000000 --- a/cmake/Kitware/modules/FindPackageHandleStandardArgs.cmake +++ /dev/null @@ -1,605 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#[=======================================================================[.rst: -FindPackageHandleStandardArgs ------------------------------ - -This module provides functions intended to be used in :ref:`Find Modules` -implementing :command:`find_package()` calls. - -.. command:: find_package_handle_standard_args - - This command handles the ``REQUIRED``, ``QUIET`` and version-related - arguments of :command:`find_package`. It also sets the - ``_FOUND`` variable. The package is considered found if all - variables listed contain valid results, e.g. valid filepaths. - - There are two signatures: - - .. code-block:: cmake - - find_package_handle_standard_args( - (DEFAULT_MSG|) - ... - ) - - find_package_handle_standard_args( - [FOUND_VAR ] - [REQUIRED_VARS ...] - [VERSION_VAR ] - [HANDLE_VERSION_RANGE] - [HANDLE_COMPONENTS] - [CONFIG_MODE] - [NAME_MISMATCHED] - [REASON_FAILURE_MESSAGE ] - [FAIL_MESSAGE ] - ) - - The ``_FOUND`` variable will be set to ``TRUE`` if all - the variables ``...`` are valid and any optional - constraints are satisfied, and ``FALSE`` otherwise. A success or - failure message may be displayed based on the results and on - whether the ``REQUIRED`` and/or ``QUIET`` option was given to - the :command:`find_package` call. - - The options are: - - ``(DEFAULT_MSG|)`` - In the simple signature this specifies the failure message. - Use ``DEFAULT_MSG`` to ask for a default message to be computed - (recommended). Not valid in the full signature. - - ``FOUND_VAR `` - .. deprecated:: 3.3 - - Specifies either ``_FOUND`` or - ``_FOUND`` as the result variable. This exists only - for compatibility with older versions of CMake and is now ignored. - Result variables of both names are always set for compatibility. - - ``REQUIRED_VARS ...`` - Specify the variables which are required for this package. - These may be named in the generated failure message asking the - user to set the missing variable values. Therefore these should - typically be cache entries such as ``FOO_LIBRARY`` and not output - variables like ``FOO_LIBRARIES``. - - .. versionchanged:: 3.18 - If ``HANDLE_COMPONENTS`` is specified, this option can be omitted. - - ``VERSION_VAR `` - Specify the name of a variable that holds the version of the package - that has been found. This version will be checked against the - (potentially) specified required version given to the - :command:`find_package` call, including its ``EXACT`` option. - The default messages include information about the required - version and the version which has been actually found, both - if the version is ok or not. - - ``HANDLE_VERSION_RANGE`` - .. versionadded:: 3.19 - - Enable handling of a version range, if one is specified. Without this - option, a developer warning will be displayed if a version range is - specified. - - ``HANDLE_COMPONENTS`` - Enable handling of package components. In this case, the command - will report which components have been found and which are missing, - and the ``_FOUND`` variable will be set to ``FALSE`` - if any of the required components (i.e. not the ones listed after - the ``OPTIONAL_COMPONENTS`` option of :command:`find_package`) are - missing. - - ``CONFIG_MODE`` - Specify that the calling find module is a wrapper around a - call to ``find_package( NO_MODULE)``. This implies - a ``VERSION_VAR`` value of ``_VERSION``. The command - will automatically check whether the package configuration file - was found. - - ``REASON_FAILURE_MESSAGE `` - .. versionadded:: 3.16 - - Specify a custom message of the reason for the failure which will be - appended to the default generated message. - - ``FAIL_MESSAGE `` - Specify a custom failure message instead of using the default - generated message. Not recommended. - - ``NAME_MISMATCHED`` - .. versionadded:: 3.17 - - Indicate that the ```` does not match - ``${CMAKE_FIND_PACKAGE_NAME}``. This is usually a mistake and raises a - warning, but it may be intentional for usage of the command for components - of a larger package. - -Example for the simple signature: - -.. code-block:: cmake - - find_package_handle_standard_args(LibXml2 DEFAULT_MSG - LIBXML2_LIBRARY LIBXML2_INCLUDE_DIR) - -The ``LibXml2`` package is considered to be found if both -``LIBXML2_LIBRARY`` and ``LIBXML2_INCLUDE_DIR`` are valid. -Then also ``LibXml2_FOUND`` is set to ``TRUE``. If it is not found -and ``REQUIRED`` was used, it fails with a -:command:`message(FATAL_ERROR)`, independent whether ``QUIET`` was -used or not. If it is found, success will be reported, including -the content of the first ````. On repeated CMake runs, -the same message will not be printed again. - -.. note:: - - If ```` does not match ``CMAKE_FIND_PACKAGE_NAME`` for the - calling module, a warning that there is a mismatch is given. The - ``FPHSA_NAME_MISMATCHED`` variable may be set to bypass the warning if using - the old signature and the ``NAME_MISMATCHED`` argument using the new - signature. To avoid forcing the caller to require newer versions of CMake for - usage, the variable's value will be used if defined when the - ``NAME_MISMATCHED`` argument is not passed for the new signature (but using - both is an error).. - -Example for the full signature: - -.. code-block:: cmake - - find_package_handle_standard_args(LibArchive - REQUIRED_VARS LibArchive_LIBRARY LibArchive_INCLUDE_DIR - VERSION_VAR LibArchive_VERSION) - -In this case, the ``LibArchive`` package is considered to be found if -both ``LibArchive_LIBRARY`` and ``LibArchive_INCLUDE_DIR`` are valid. -Also the version of ``LibArchive`` will be checked by using the version -contained in ``LibArchive_VERSION``. Since no ``FAIL_MESSAGE`` is given, -the default messages will be printed. - -Another example for the full signature: - -.. code-block:: cmake - - find_package(Automoc4 QUIET NO_MODULE HINTS /opt/automoc4) - find_package_handle_standard_args(Automoc4 CONFIG_MODE) - -In this case, a ``FindAutmoc4.cmake`` module wraps a call to -``find_package(Automoc4 NO_MODULE)`` and adds an additional search -directory for ``automoc4``. Then the call to -``find_package_handle_standard_args`` produces a proper success/failure -message. - -.. command:: find_package_check_version - - .. versionadded:: 3.19 - - Helper function which can be used to check if a ```` is valid - against version-related arguments of :command:`find_package`. - - .. code-block:: cmake - - find_package_check_version( - [HANDLE_VERSION_RANGE] - [RESULT_MESSAGE_VARIABLE ] - ) - - The ```` will hold a boolean value giving the result of the check. - - The options are: - - ``HANDLE_VERSION_RANGE`` - Enable handling of a version range, if one is specified. Without this - option, a developer warning will be displayed if a version range is - specified. - - ``RESULT_MESSAGE_VARIABLE `` - Specify a variable to get back a message describing the result of the check. - -Example for the usage: - -.. code-block:: cmake - - find_package_check_version(1.2.3 result HANDLE_VERSION_RANGE - RESULT_MESSAGE_VARIABLE reason) - if (result) - message (STATUS "${reason}") - else() - message (FATAL_ERROR "${reason}") - endif() -#]=======================================================================] - -include(${CMAKE_CURRENT_LIST_DIR}/FindPackageMessage.cmake) - - -cmake_policy(PUSH) -# numbers and boolean constants -cmake_policy (SET CMP0012 NEW) -# IN_LIST operator -cmake_policy (SET CMP0057 NEW) - - -# internal helper macro -macro(_FPHSA_FAILURE_MESSAGE _msg) - set (__msg "${_msg}") - if (FPHSA_REASON_FAILURE_MESSAGE) - string(APPEND __msg "\n Reason given by package: ${FPHSA_REASON_FAILURE_MESSAGE}\n") - endif() - if (${_NAME}_FIND_REQUIRED) - message(FATAL_ERROR "${__msg}") - else () - if (NOT ${_NAME}_FIND_QUIETLY) - message(STATUS "${__msg}") - endif () - endif () -endmacro() - - -# internal helper macro to generate the failure message when used in CONFIG_MODE: -macro(_FPHSA_HANDLE_FAILURE_CONFIG_MODE) - # _CONFIG is set, but FOUND is false, this means that some other of the REQUIRED_VARS was not found: - if(${_NAME}_CONFIG) - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: missing:${MISSING_VARS} (found ${${_NAME}_CONFIG} ${VERSION_MSG})") - else() - # If _CONSIDERED_CONFIGS is set, the config-file has been found, but no suitable version. - # List them all in the error message: - if(${_NAME}_CONSIDERED_CONFIGS) - set(configsText "") - list(LENGTH ${_NAME}_CONSIDERED_CONFIGS configsCount) - math(EXPR configsCount "${configsCount} - 1") - foreach(currentConfigIndex RANGE ${configsCount}) - list(GET ${_NAME}_CONSIDERED_CONFIGS ${currentConfigIndex} filename) - list(GET ${_NAME}_CONSIDERED_VERSIONS ${currentConfigIndex} version) - string(APPEND configsText "\n ${filename} (version ${version})") - endforeach() - if (${_NAME}_NOT_FOUND_MESSAGE) - if (FPHSA_REASON_FAILURE_MESSAGE) - string(PREPEND FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}\n ") - else() - set(FPHSA_REASON_FAILURE_MESSAGE "${${_NAME}_NOT_FOUND_MESSAGE}") - endif() - else() - string(APPEND configsText "\n") - endif() - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} ${VERSION_MSG}, checked the following files:${configsText}") - - else() - # Simple case: No Config-file was found at all: - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: found neither ${_NAME}Config.cmake nor ${_NAME_LOWER}-config.cmake ${VERSION_MSG}") - endif() - endif() -endmacro() - - -function(FIND_PACKAGE_CHECK_VERSION version result) - cmake_parse_arguments (PARSE_ARGV 2 FPCV "HANDLE_VERSION_RANGE;NO_AUTHOR_WARNING_VERSION_RANGE" "RESULT_MESSAGE_VARIABLE" "") - - if (FPCV_UNPARSED_ARGUMENTS) - message (FATAL_ERROR "find_package_check_version(): ${FPCV_UNPARSED_ARGUMENTS}: unexpected arguments") - endif() - if ("RESULT_MESSAGE_VARIABLE" IN_LIST FPCV_KEYWORDS_MISSING_VALUES) - message (FATAL_ERROR "find_package_check_version(): RESULT_MESSAGE_VARIABLE expects an argument") - endif() - - set (${result} FALSE PARENT_SCOPE) - if (FPCV_RESULT_MESSAGE_VARIABLE) - unset (${FPCV_RESULT_MESSAGE_VARIABLE} PARENT_SCOPE) - endif() - - if (_CMAKE_FPHSA_PACKAGE_NAME) - set (package "${_CMAKE_FPHSA_PACKAGE_NAME}") - elseif (CMAKE_FIND_PACKAGE_NAME) - set (package "${CMAKE_FIND_PACKAGE_NAME}") - else() - message (FATAL_ERROR "find_package_check_version(): Cannot be used outside a 'Find Module'") - endif() - - if (NOT FPCV_NO_AUTHOR_WARNING_VERSION_RANGE - AND ${package}_FIND_VERSION_RANGE AND NOT FPCV_HANDLE_VERSION_RANGE) - message(AUTHOR_WARNING - "`find_package()` specify a version range but the option " - "HANDLE_VERSION_RANGE` is not passed to `find_package_check_version()`. " - "Only the lower endpoint of the range will be used.") - endif() - - - set (version_ok FALSE) - unset (version_msg) - - if (FPCV_HANDLE_VERSION_RANGE AND ${package}_FIND_VERSION_RANGE) - if ((${package}_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" - AND version VERSION_GREATER_EQUAL ${package}_FIND_VERSION_MIN) - AND ((${package}_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" - AND version VERSION_LESS_EQUAL ${package}_FIND_VERSION_MAX) - OR (${package}_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" - AND version VERSION_LESS ${package}_FIND_VERSION_MAX))) - set (version_ok TRUE) - set(version_msg "(found suitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\")") - else() - set(version_msg "Found unsuitable version \"${version}\", required range is \"${${package}_FIND_VERSION_RANGE}\"") - endif() - elseif (DEFINED ${package}_FIND_VERSION) - if(${package}_FIND_VERSION_EXACT) # exact version required - # count the dots in the version string - string(REGEX REPLACE "[^.]" "" version_dots "${version}") - # add one dot because there is one dot more than there are components - string(LENGTH "${version_dots}." version_dots) - if (version_dots GREATER ${package}_FIND_VERSION_COUNT) - # Because of the C++ implementation of find_package() ${package}_FIND_VERSION_COUNT - # is at most 4 here. Therefore a simple lookup table is used. - if (${package}_FIND_VERSION_COUNT EQUAL 1) - set(version_regex "[^.]*") - elseif (${package}_FIND_VERSION_COUNT EQUAL 2) - set(version_regex "[^.]*\\.[^.]*") - elseif (${package}_FIND_VERSION_COUNT EQUAL 3) - set(version_regex "[^.]*\\.[^.]*\\.[^.]*") - else() - set(version_regex "[^.]*\\.[^.]*\\.[^.]*\\.[^.]*") - endif() - string(REGEX REPLACE "^(${version_regex})\\..*" "\\1" version_head "${version}") - if (NOT ${package}_FIND_VERSION VERSION_EQUAL version_head) - set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"") - else () - set(version_ok TRUE) - set(version_msg "(found suitable exact version \"${_FOUND_VERSION}\")") - endif () - else () - if (NOT ${package}_FIND_VERSION VERSION_EQUAL version) - set(version_msg "Found unsuitable version \"${version}\", but required is exact version \"${${package}_FIND_VERSION}\"") - else () - set(version_ok TRUE) - set(version_msg "(found suitable exact version \"${version}\")") - endif () - endif () - else() # minimum version - if (${package}_FIND_VERSION VERSION_GREATER version) - set(version_msg "Found unsuitable version \"${version}\", but required is at least \"${${package}_FIND_VERSION}\"") - else() - set(version_ok TRUE) - set(version_msg "(found suitable version \"${version}\", minimum required is \"${${package}_FIND_VERSION}\")") - endif() - endif() - else () - set(version_ok TRUE) - set(version_msg "(found version \"${version}\")") - endif() - - set (${result} ${version_ok} PARENT_SCOPE) - if (FPCV_RESULT_MESSAGE_VARIABLE) - set (${FPCV_RESULT_MESSAGE_VARIABLE} "${version_msg}" PARENT_SCOPE) - endif() -endfunction() - - -function(FIND_PACKAGE_HANDLE_STANDARD_ARGS _NAME _FIRST_ARG) - - # Set up the arguments for `cmake_parse_arguments`. - set(options CONFIG_MODE HANDLE_COMPONENTS NAME_MISMATCHED HANDLE_VERSION_RANGE) - set(oneValueArgs FAIL_MESSAGE REASON_FAILURE_MESSAGE VERSION_VAR FOUND_VAR) - set(multiValueArgs REQUIRED_VARS) - - # Check whether we are in 'simple' or 'extended' mode: - set(_KEYWORDS_FOR_EXTENDED_MODE ${options} ${oneValueArgs} ${multiValueArgs} ) - list(FIND _KEYWORDS_FOR_EXTENDED_MODE "${_FIRST_ARG}" INDEX) - - unset(FPHSA_NAME_MISMATCHED_override) - if (DEFINED FPHSA_NAME_MISMATCHED) - # If the variable NAME_MISMATCHED variable is set, error if it is passed as - # an argument. The former is for old signatures, the latter is for new - # signatures. - list(FIND ARGN "NAME_MISMATCHED" name_mismatched_idx) - if (NOT name_mismatched_idx EQUAL "-1") - message(FATAL_ERROR - "The `NAME_MISMATCHED` argument may only be specified by the argument or " - "the variable, not both.") - endif () - - # But use the variable if it is not an argument to avoid forcing minimum - # CMake version bumps for calling modules. - set(FPHSA_NAME_MISMATCHED_override "${FPHSA_NAME_MISMATCHED}") - endif () - - if(${INDEX} EQUAL -1) - set(FPHSA_FAIL_MESSAGE ${_FIRST_ARG}) - set(FPHSA_REQUIRED_VARS ${ARGN}) - set(FPHSA_VERSION_VAR) - else() - cmake_parse_arguments(FPHSA "${options}" "${oneValueArgs}" "${multiValueArgs}" ${_FIRST_ARG} ${ARGN}) - - if(FPHSA_UNPARSED_ARGUMENTS) - message(FATAL_ERROR "Unknown keywords given to FIND_PACKAGE_HANDLE_STANDARD_ARGS(): \"${FPHSA_UNPARSED_ARGUMENTS}\"") - endif() - - if(NOT FPHSA_FAIL_MESSAGE) - set(FPHSA_FAIL_MESSAGE "DEFAULT_MSG") - endif() - - # In config-mode, we rely on the variable _CONFIG, which is set by find_package() - # when it successfully found the config-file, including version checking: - if(FPHSA_CONFIG_MODE) - list(INSERT FPHSA_REQUIRED_VARS 0 ${_NAME}_CONFIG) - list(REMOVE_DUPLICATES FPHSA_REQUIRED_VARS) - set(FPHSA_VERSION_VAR ${_NAME}_VERSION) - endif() - - if(NOT FPHSA_REQUIRED_VARS AND NOT FPHSA_HANDLE_COMPONENTS) - message(FATAL_ERROR "No REQUIRED_VARS specified for FIND_PACKAGE_HANDLE_STANDARD_ARGS()") - endif() - endif() - - if (DEFINED FPHSA_NAME_MISMATCHED_override) - set(FPHSA_NAME_MISMATCHED "${FPHSA_NAME_MISMATCHED_override}") - endif () - - if (DEFINED CMAKE_FIND_PACKAGE_NAME - AND NOT FPHSA_NAME_MISMATCHED - AND NOT _NAME STREQUAL CMAKE_FIND_PACKAGE_NAME) - message(AUTHOR_WARNING - "The package name passed to `find_package_handle_standard_args` " - "(${_NAME}) does not match the name of the calling package " - "(${CMAKE_FIND_PACKAGE_NAME}). This can lead to problems in calling " - "code that expects `find_package` result variables (e.g., `_FOUND`) " - "to follow a certain pattern.") - endif () - - if (${_NAME}_FIND_VERSION_RANGE AND NOT FPHSA_HANDLE_VERSION_RANGE) - message(AUTHOR_WARNING - "`find_package()` specify a version range but the module ${_NAME} does " - "not support this capability. Only the lower endpoint of the range " - "will be used.") - endif() - - # to propagate package name to FIND_PACKAGE_CHECK_VERSION - set(_CMAKE_FPHSA_PACKAGE_NAME "${_NAME}") - - # now that we collected all arguments, process them - - if("x${FPHSA_FAIL_MESSAGE}" STREQUAL "xDEFAULT_MSG") - set(FPHSA_FAIL_MESSAGE "Could NOT find ${_NAME}") - endif() - - if (FPHSA_REQUIRED_VARS) - list(GET FPHSA_REQUIRED_VARS 0 _FIRST_REQUIRED_VAR) - endif() - - string(TOUPPER ${_NAME} _NAME_UPPER) - string(TOLOWER ${_NAME} _NAME_LOWER) - - if(FPHSA_FOUND_VAR) - set(_FOUND_VAR_UPPER ${_NAME_UPPER}_FOUND) - set(_FOUND_VAR_MIXED ${_NAME}_FOUND) - if(FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_MIXED OR FPHSA_FOUND_VAR STREQUAL _FOUND_VAR_UPPER) - set(_FOUND_VAR ${FPHSA_FOUND_VAR}) - else() - message(FATAL_ERROR "The argument for FOUND_VAR is \"${FPHSA_FOUND_VAR}\", but only \"${_FOUND_VAR_MIXED}\" and \"${_FOUND_VAR_UPPER}\" are valid names.") - endif() - else() - set(_FOUND_VAR ${_NAME_UPPER}_FOUND) - endif() - - # collect all variables which were not found, so they can be printed, so the - # user knows better what went wrong (#6375) - set(MISSING_VARS "") - set(DETAILS "") - # check if all passed variables are valid - set(FPHSA_FOUND_${_NAME} TRUE) - foreach(_CURRENT_VAR ${FPHSA_REQUIRED_VARS}) - if(NOT ${_CURRENT_VAR}) - set(FPHSA_FOUND_${_NAME} FALSE) - string(APPEND MISSING_VARS " ${_CURRENT_VAR}") - else() - string(APPEND DETAILS "[${${_CURRENT_VAR}}]") - endif() - endforeach() - if(FPHSA_FOUND_${_NAME}) - set(${_NAME}_FOUND TRUE) - set(${_NAME_UPPER}_FOUND TRUE) - else() - set(${_NAME}_FOUND FALSE) - set(${_NAME_UPPER}_FOUND FALSE) - endif() - - # component handling - unset(FOUND_COMPONENTS_MSG) - unset(MISSING_COMPONENTS_MSG) - - if(FPHSA_HANDLE_COMPONENTS) - foreach(comp ${${_NAME}_FIND_COMPONENTS}) - if(${_NAME}_${comp}_FOUND) - - if(NOT DEFINED FOUND_COMPONENTS_MSG) - set(FOUND_COMPONENTS_MSG "found components:") - endif() - string(APPEND FOUND_COMPONENTS_MSG " ${comp}") - - else() - - if(NOT DEFINED MISSING_COMPONENTS_MSG) - set(MISSING_COMPONENTS_MSG "missing components:") - endif() - string(APPEND MISSING_COMPONENTS_MSG " ${comp}") - - if(${_NAME}_FIND_REQUIRED_${comp}) - set(${_NAME}_FOUND FALSE) - string(APPEND MISSING_VARS " ${comp}") - endif() - - endif() - endforeach() - set(COMPONENT_MSG "${FOUND_COMPONENTS_MSG} ${MISSING_COMPONENTS_MSG}") - string(APPEND DETAILS "[c${COMPONENT_MSG}]") - endif() - - # version handling: - set(VERSION_MSG "") - set(VERSION_OK TRUE) - - # check with DEFINED here as the requested or found version may be "0" - if (DEFINED ${_NAME}_FIND_VERSION) - if(DEFINED ${FPHSA_VERSION_VAR}) - set(_FOUND_VERSION ${${FPHSA_VERSION_VAR}}) - if (FPHSA_HANDLE_VERSION_RANGE) - set (FPCV_HANDLE_VERSION_RANGE HANDLE_VERSION_RANGE) - else() - set(FPCV_HANDLE_VERSION_RANGE NO_AUTHOR_WARNING_VERSION_RANGE) - endif() - find_package_check_version ("${_FOUND_VERSION}" VERSION_OK RESULT_MESSAGE_VARIABLE VERSION_MSG - ${FPCV_HANDLE_VERSION_RANGE}) - else() - # if the package was not found, but a version was given, add that to the output: - if(${_NAME}_FIND_VERSION_EXACT) - set(VERSION_MSG "(Required is exact version \"${${_NAME}_FIND_VERSION}\")") - elseif (FPHSA_HANDLE_VERSION_RANGE AND ${_NAME}_FIND_VERSION_RANGE) - set(VERSION_MSG "(Required is version range \"${${_NAME}_FIND_VERSION_RANGE}\")") - else() - set(VERSION_MSG "(Required is at least version \"${${_NAME}_FIND_VERSION}\")") - endif() - endif() - else () - # Check with DEFINED as the found version may be 0. - if(DEFINED ${FPHSA_VERSION_VAR}) - set(VERSION_MSG "(found version \"${${FPHSA_VERSION_VAR}}\")") - endif() - endif () - - if(VERSION_OK) - string(APPEND DETAILS "[v${${FPHSA_VERSION_VAR}}(${${_NAME}_FIND_VERSION})]") - else() - set(${_NAME}_FOUND FALSE) - endif() - - - # print the result: - if (${_NAME}_FOUND) - FIND_PACKAGE_MESSAGE(${_NAME} "Found ${_NAME}: ${${_FIRST_REQUIRED_VAR}} ${VERSION_MSG} ${COMPONENT_MSG}" "${DETAILS}") - else () - - if(FPHSA_CONFIG_MODE) - _FPHSA_HANDLE_FAILURE_CONFIG_MODE() - else() - if(NOT VERSION_OK) - set(RESULT_MSG) - if (_FIRST_REQUIRED_VAR) - string (APPEND RESULT_MSG "found ${${_FIRST_REQUIRED_VAR}}") - endif() - if (COMPONENT_MSG) - if (RESULT_MSG) - string (APPEND RESULT_MSG ", ") - endif() - string (APPEND RESULT_MSG "${FOUND_COMPONENTS_MSG}") - endif() - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE}: ${VERSION_MSG} (${RESULT_MSG})") - else() - _FPHSA_FAILURE_MESSAGE("${FPHSA_FAIL_MESSAGE} (missing:${MISSING_VARS}) ${VERSION_MSG}") - endif() - endif() - - endif () - - set(${_NAME}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE) - set(${_NAME_UPPER}_FOUND ${${_NAME}_FOUND} PARENT_SCOPE) -endfunction() - - -cmake_policy(POP) diff --git a/cmake/Kitware/modules/FindPackageMessage.cmake b/cmake/Kitware/modules/FindPackageMessage.cmake deleted file mode 100644 index e12e8ed9..00000000 --- a/cmake/Kitware/modules/FindPackageMessage.cmake +++ /dev/null @@ -1,48 +0,0 @@ -# Distributed under the OSI-approved BSD 3-Clause License. See accompanying -# file Copyright.txt or https://cmake.org/licensing for details. - -#[=======================================================================[.rst: -FindPackageMessage ------------------- - -.. code-block:: cmake - - find_package_message( "message for user" "find result details") - -This function is intended to be used in FindXXX.cmake modules files. -It will print a message once for each unique find result. This is -useful for telling the user where a package was found. The first -argument specifies the name (XXX) of the package. The second argument -specifies the message to display. The third argument lists details -about the find result so that if they change the message will be -displayed again. The macro also obeys the QUIET argument to the -find_package command. - -Example: - -.. code-block:: cmake - - if(X11_FOUND) - find_package_message(X11 "Found X11: ${X11_X11_LIB}" - "[${X11_X11_LIB}][${X11_INCLUDE_DIR}]") - else() - ... - endif() -#]=======================================================================] - -function(find_package_message pkg msg details) - # Avoid printing a message repeatedly for the same find result. - if(NOT ${pkg}_FIND_QUIETLY) - string(REPLACE "\n" "" details "${details}") - set(DETAILS_VAR FIND_PACKAGE_MESSAGE_DETAILS_${pkg}) - if(NOT "${details}" STREQUAL "${${DETAILS_VAR}}") - # The message has not yet been printed. - message(STATUS "${msg}") - - # Save the find details in the cache to avoid printing the same - # message again. - set("${DETAILS_VAR}" "${details}" - CACHE INTERNAL "Details about finding ${pkg}") - endif() - endif() -endfunction() -- cgit v1.2.1 From 4d3994bceed4a32ca8185b9c7864cfe1a5e92c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Mon, 8 Nov 2021 15:39:39 +0200 Subject: icalcomponent_get_duration() clarification in comment --- src/libical/icalcomponent.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index deb2c402..96800b8a 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -1506,7 +1506,7 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp) /** * FIXME * We assume DTSTART and DTEND are not in different time zones. - * Does the standard actually guarantee this? + * The standard actually allows different time zones. */ struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaltimetype end = icalcomponent_get_dtend(inner); -- cgit v1.2.1 From 94301bf8a152fefaaa9b6d41f6e5741ca2c05ad4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Mon, 8 Nov 2021 16:30:01 +0200 Subject: icalcomponent.c: handle the case, when DTEND and DURATION are missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In icalcomponent_get_dtend(): • when both DTEND and DURATION are missing, set DTEND to DTSTART when the value-type of DTSTART is DATE-TIME, otherwise set DTEND = DTSTART + 1 day, when the value-type of DTSTART is DATE • throw an error, if both DTEND and DURATION are present, as it is done in icalcomponent_get_duration() In icalcomponent_get_duration(): • if DTEND and DURATION are missing and the value-type of DTSTART is DATE-TIME return zero duration; otherwise, if the value-type of DTSTART is DATE, return one day duration • do not throw an error, if DTEND and DURATION are missing In icalcomponent_get_span() account for the fact, that icalcomponent_get_dtend() returns the correct DTEND, based on the value-type of DTSTART, when DTEND is missing. Likewise for icalcomponent_foreach_recurrence(). Adjust test/regression-component.c to assume span.start == span.end, when the event has only DTSTART and its value-type is DATE-TIME. --- src/libical/icalcomponent.c | 47 +++++++++++++++++++++-------------------- src/test/regression-component.c | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index deb2c402..3b7438d0 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -726,24 +726,14 @@ or empty VCALENDAR component"); */ } span.start = icaltime_as_timet_with_zone(start, icaltimezone_get_utc_timezone()); - /* The end time could be specified as either a DTEND or a DURATION */ + /* The end time could be specified as either a DTEND, a DURATION, or be missing */ /* icalcomponent_get_dtend takes care of these cases. */ end = icalcomponent_get_dtend(comp); - if (icaltime_is_null_time(end)) { - if (!icaltime_is_date(start)) { - /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION - it takes no time */ - span.start = 0; - return span; - } else { - end = start; - } - } span.end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone()); if (icaltime_is_date(start)) { /* Until the end of the day */ - span.end += 60 * 60 * 24 - 1; + span.end -= 1; } return span; @@ -891,16 +881,9 @@ void icalcomponent_foreach_recurrence(icalcomponent *comp, if (icaltime_is_null_time(dtstart)) return; - /* The end time could be specified as either a DTEND or a DURATION */ + /* The end time could be specified as either a DTEND, a DURATION or be missing */ /* icalcomponent_get_dtend takes care of these cases. */ dtend = icalcomponent_get_dtend(comp); - if (icaltime_is_null_time(dtend) && icaltime_is_date(dtstart)) { - /* No DTEND or DURATION and DTSTART is DATE - duration is 1 day */ - struct icaldurationtype dur = icaldurationtype_null_duration(); - - dur.days = 1; - dtend = icaltime_add(dtstart, dur); - } /* Now set up the base span for this item, corresponding to the base DTSTART and DTEND */ @@ -1425,11 +1408,11 @@ 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); - struct icaltimetype ret = icaltime_null_time(); + struct icaltimetype ret; - if (end_prop != 0) { + if (end_prop != 0 && dur_prop == 0) { ret = icalproperty_get_datetime_with_component(end_prop, comp); - } else if (dur_prop != 0) { + } else if (end_prop == 0 && dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaldurationtype duration; @@ -1442,6 +1425,19 @@ struct icaltimetype icalcomponent_get_dtend(icalcomponent *comp) } 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); + } else { + ret = start; + } + } else { + /* Error, both duration and dtend have been specified */ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + ret = icaltime_null_time(); } return ret; @@ -1512,6 +1508,11 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp) 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.days = 1; + } } else { /* Error, both duration and dtend have been specified */ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); diff --git a/src/test/regression-component.c b/src/test/regression-component.c index 3e147e9e..311cf1f8 100644 --- a/src/test/regression-component.c +++ b/src/test/regression-component.c @@ -448,7 +448,7 @@ void test_icalcomponent_get_span() if (VERBOSE) print_span(tnum++, span); - int_is("null span", (int)span.start, 0); + int_is("start == end", (int)span.start, span.end); icalcomponent_free(c); /** test 7 -- cgit v1.2.1 From 2313c90dbb85c8f2028b5aa16e0279ae254ffd58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Mon, 8 Nov 2021 20:40:55 +0200 Subject: restrictions.csv: DECLINECOUNTER,VEVENT: DURATION and DTEND are mutually exclusive My reading of https://datatracker.ietf.org/doc/html/rfc5546#section-3.2.8 is that for METHOD:DECLINECOUNTER either DTEND or DURATION must be present. If both are absent, the usual logic of calculating the end applies, based on the value-type of DTSTART. --- design-data/restrictions.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/design-data/restrictions.csv b/design-data/restrictions.csv index 439c9dc9..036210b3 100644 --- a/design-data/restrictions.csv +++ b/design-data/restrictions.csv @@ -184,7 +184,7 @@ CANCEL,VEVENT,CLASS,NONE,ZEROORONE CANCEL,VEVENT,CONTACT,NONE,ZEROPLUS CANCEL,VEVENT,CREATED,NONE,ZEROORONE CANCEL,VEVENT,DESCRIPTION,NONE,ZEROORONE -CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE ,no_duration +CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration CANCEL,VEVENT,DTSTART,NONE,ZEROORONE CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend CANCEL,VEVENT,EXDATE,NONE,ZEROPLUS @@ -316,9 +316,9 @@ DECLINECOUNTER,VEVENT,CLASS,NONE,ZERO DECLINECOUNTER,VEVENT,CONTACT,NONE,ZERO DECLINECOUNTER,VEVENT,CREATED,NONE,ZERO DECLINECOUNTER,VEVENT,DESCRIPTION,NONE,ZERO -DECLINECOUNTER,VEVENT,DTEND,NONE,ZERO +DECLINECOUNTER,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration DECLINECOUNTER,VEVENT,DTSTART,NONE,ZERO -DECLINECOUNTER,VEVENT,DURATION,NONE,ZERO +DECLINECOUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend DECLINECOUNTER,VEVENT,EXDATE,NONE,ZERO DECLINECOUNTER,VEVENT,EXRULE,NONE,ZERO DECLINECOUNTER,VEVENT,GEO,NONE,ZERO -- cgit v1.2.1 From 01ead4bab4357bdf98916de37100dd77b7ecb304 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 9 Nov 2021 11:19:57 -0500 Subject: fix compile from merge mistake 828cec0 removed the priv member on the master branch only. --- src/libical-glib/i-cal-object.c.in | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/libical-glib/i-cal-object.c.in b/src/libical-glib/i-cal-object.c.in index a06d29d4..c822509c 100644 --- a/src/libical-glib/i-cal-object.c.in +++ b/src/libical-glib/i-cal-object.c.in @@ -200,10 +200,10 @@ static void i_cal_object_finalize(GObject *object) ICalObject *iobject = I_CAL_OBJECT(object); ICalObjectPrivate *priv = i_cal_object_get_instance_private(iobject); - if ((iobject->priv->always_destroy || !iobject->priv->owner) && - !iobject->priv->is_global_memory && - iobject->priv->native && iobject->priv->native_destroy_func) { - iobject->priv->native_destroy_func(iobject->priv->native); + if ((priv->always_destroy || !priv->owner) && + !priv->is_global_memory && + priv->native && priv->native_destroy_func) { + g_clear_pointer(&priv->native, priv->native_destroy_func); } g_clear_object(&priv->owner); @@ -706,17 +706,18 @@ void i_cal_object_remove_depender(ICalObject *iobject, GObject *depender) **/ void i_cal_object_set_always_destroy(ICalObject *iobject, gboolean value) { + ICalObjectPrivate *priv = i_cal_object_get_instance_private(iobject); gboolean changed; g_return_if_fail(I_CAL_IS_OBJECT(iobject)); - LOCK_PROPS(iobject); + LOCK_PROPS(priv); - changed = (value ? 1 : 0) != (iobject->priv->always_destroy ? 1 : 0); + changed = (value ? 1 : 0) != (priv->always_destroy ? 1 : 0); if (changed) - iobject->priv->always_destroy = value; + priv->always_destroy = value; - UNLOCK_PROPS(iobject); + UNLOCK_PROPS(priv); if (changed) g_object_notify(G_OBJECT(iobject), "always-destroy"); @@ -734,15 +735,16 @@ void i_cal_object_set_always_destroy(ICalObject *iobject, gboolean value) **/ gboolean i_cal_object_get_always_destroy(ICalObject *iobject) { + ICalObjectPrivate *priv = i_cal_object_get_instance_private(iobject); gboolean value; g_return_val_if_fail(I_CAL_IS_OBJECT(iobject), FALSE); - LOCK_PROPS(iobject); + LOCK_PROPS(priv); - value = iobject->priv->always_destroy; + value = priv->always_destroy; - UNLOCK_PROPS(iobject); + UNLOCK_PROPS(priv); return value; } -- cgit v1.2.1 From b42b46263e70a10e4b80fbbf74a76d47f4b5c062 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Tue, 9 Nov 2021 11:46:56 -0500 Subject: appveyor.yml - move Ubuntu first in the images list --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 175712c1..5fe3bb92 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -20,9 +20,9 @@ skip_tags: false # Build worker image image: #- Visual Studio 2013 #disable since Ninja is not available + - Ubuntu - Visual Studio 2019 - macos - - Ubuntu # scripts that are called at very beginning, before repo cloning init: -- cgit v1.2.1 From 9a4bd88da048a7169d291f95d4cb02f7b1beef68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Thu, 11 Nov 2021 16:39:12 +0100 Subject: libical-glib: Get rid of all the allow-none annotations allow-none has been deprecated and replaced by either nullable or optional. --- src/libical-glib/api/i-cal-array.xml | 2 +- src/libical-glib/api/i-cal-attach.xml | 6 +-- src/libical-glib/api/i-cal-component.xml | 2 +- src/libical-glib/api/i-cal-derived-parameter.xml | 50 ++++++++++++------------ src/libical-glib/api/i-cal-derived-value.xml | 36 ++++++++--------- src/libical-glib/api/i-cal-parameter.xml | 8 ++-- src/libical-glib/api/i-cal-parser.xml | 6 +-- src/libical-glib/api/i-cal-time.xml | 2 +- src/libical-glib/api/i-cal-timezone.xml | 2 +- src/libical-glib/api/i-cal-value.xml | 4 +- src/libical-glib/i-cal-object.c.in | 6 +-- src/libical-glib/tools/generator.c | 3 +- 12 files changed, 63 insertions(+), 64 deletions(-) diff --git a/src/libical-glib/api/i-cal-array.xml b/src/libical-glib/api/i-cal-array.xml index 48edff92..bd7641da 100644 --- a/src/libical-glib/api/i-cal-array.xml +++ b/src/libical-glib/api/i-cal-array.xml @@ -54,7 +54,7 @@ - + Gets the element located in the @position in the @array. NULL if position if out of bound. diff --git a/src/libical-glib/api/i-cal-attach.xml b/src/libical-glib/api/i-cal-attach.xml index 8d3582d8..d361ee81 100644 --- a/src/libical-glib/api/i-cal-attach.xml +++ b/src/libical-glib/api/i-cal-attach.xml @@ -21,8 +21,8 @@ - - + + Creates a new #ICalAttach from the data. g_return_val_if_fail (data != NULL, NULL); @@ -62,7 +62,7 @@ static void unref_g_bytes(char *data, void *user_data) - + Gets the url, if the #ICalAttach is built from the url. diff --git a/src/libical-glib/api/i-cal-component.xml b/src/libical-glib/api/i-cal-component.xml index bb262dde..ad55c043 100644 --- a/src/libical-glib/api/i-cal-component.xml +++ b/src/libical-glib/api/i-cal-component.xml @@ -550,7 +550,7 @@ static void foreach_recurrence_cb(icalcomponent *in_comp, struct icaltime_span * - + Returns the icaltimezone in the component corresponding to the TZID, or NULL if it can't be found. diff --git a/src/libical-glib/api/i-cal-derived-parameter.xml b/src/libical-glib/api/i-cal-derived-parameter.xml index 1a309e4a..54122a0d 100644 --- a/src/libical-glib/api/i-cal-derived-parameter.xml +++ b/src/libical-glib/api/i-cal-derived-parameter.xml @@ -247,7 +247,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -277,7 +277,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -307,7 +307,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -337,7 +337,7 @@ - + @@ -397,7 +397,7 @@ - + @@ -412,7 +412,7 @@ - + @@ -427,7 +427,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -457,7 +457,7 @@ - + @@ -472,7 +472,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -517,7 +517,7 @@ - + @@ -532,7 +532,7 @@ - + @@ -547,7 +547,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -592,7 +592,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -757,7 +757,7 @@ - + @@ -772,7 +772,7 @@ - + @@ -787,7 +787,7 @@ - + @@ -832,7 +832,7 @@ - + @@ -862,7 +862,7 @@ - + diff --git a/src/libical-glib/api/i-cal-derived-value.xml b/src/libical-glib/api/i-cal-derived-value.xml index aa58a233..5f965756 100644 --- a/src/libical-glib/api/i-cal-derived-value.xml +++ b/src/libical-glib/api/i-cal-derived-value.xml @@ -210,7 +210,7 @@ - + Gets the x of #ICalValue. @@ -225,7 +225,7 @@ - + Gets the recur of #ICalValue. @@ -240,7 +240,7 @@ - + Gets the trigger of #ICalValue. @@ -255,7 +255,7 @@ - + Gets the datetime of #ICalValue. @@ -270,7 +270,7 @@ - + Gets the datetimedate (DATE-TIME or DATE) of #ICalValue. @@ -285,7 +285,7 @@ - + Gets the datetimeperiod of #ICalValue. @@ -300,7 +300,7 @@ - + Gets the geo of #ICalValue. @@ -315,7 +315,7 @@ - + Gets the attach of #ICalValue. @@ -454,7 +454,7 @@ - + Gets the caladdress of #ICalValue. @@ -469,7 +469,7 @@ - + Gets the period of #ICalValue. @@ -499,7 +499,7 @@ - + Gets the binary of #ICalValue. @@ -514,7 +514,7 @@ - + Gets the text of #ICalValue. @@ -529,7 +529,7 @@ - + Gets the duration of #ICalValue. @@ -559,7 +559,7 @@ - + Gets the uri of #ICalValue. @@ -604,7 +604,7 @@ - + Gets the query of #ICalValue. @@ -619,7 +619,7 @@ - + Gets the string of #ICalValue. @@ -649,7 +649,7 @@ - + Gets the requeststatus of #ICalValue. @@ -664,7 +664,7 @@ - + Gets the date of #ICalValue. diff --git a/src/libical-glib/api/i-cal-parameter.xml b/src/libical-glib/api/i-cal-parameter.xml index c8bddb91..9951174a 100644 --- a/src/libical-glib/api/i-cal-parameter.xml +++ b/src/libical-glib/api/i-cal-parameter.xml @@ -61,7 +61,7 @@ - + Gets the xname property of the native part of the #ICalParameter. @@ -71,7 +71,7 @@ - + Gets the xvalue property of the native part of the #ICalParameter. @@ -81,7 +81,7 @@ - + Gets the iana_name property of the native part of the #ICalParameter. @@ -91,7 +91,7 @@ - + Gets the iana_value property of the native part of the #ICalParameter. diff --git a/src/libical-glib/api/i-cal-parser.xml b/src/libical-glib/api/i-cal-parser.xml index 7e901de2..ede94772 100644 --- a/src/libical-glib/api/i-cal-parser.xml +++ b/src/libical-glib/api/i-cal-parser.xml @@ -36,13 +36,13 @@ typedef gchar *(*ICalParserLineGenFunc)(gchar *bytes, size_t size, gpointer user - - + + Add a line at one time into the #ICalParser until the parsing is complete and #ICalComponent will be returned. - + We won't get a clean exit if some components did not have an "END" tag. Clear off any component that may be left in the list. diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index 4a97f226..5119c977 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -95,7 +95,7 @@ - + Returns the tzid, or NULL for a floating time. diff --git a/src/libical-glib/api/i-cal-timezone.xml b/src/libical-glib/api/i-cal-timezone.xml index dfa4140d..0900e612 100644 --- a/src/libical-glib/api/i-cal-timezone.xml +++ b/src/libical-glib/api/i-cal-timezone.xml @@ -15,7 +15,7 @@ --> - + The constructor of the type #ICalTimezone. diff --git a/src/libical-glib/api/i-cal-value.xml b/src/libical-glib/api/i-cal-value.xml index adfaf2a9..4418af91 100644 --- a/src/libical-glib/api/i-cal-value.xml +++ b/src/libical-glib/api/i-cal-value.xml @@ -78,7 +78,7 @@ be cloned."/> - + Encodes a character string in ical format, escape certain characters, etc. gchar *szEncText; gchar *buffer = NULL; @@ -99,7 +99,7 @@ be cloned."/> - + Extracts the original character string encoded by the above function. gchar *szDecText; gchar *buffer = NULL; diff --git a/src/libical-glib/i-cal-object.c.in b/src/libical-glib/i-cal-object.c.in index c822509c..e5881bc5 100644 --- a/src/libical-glib/i-cal-object.c.in +++ b/src/libical-glib/i-cal-object.c.in @@ -324,7 +324,7 @@ static void i_cal_object_init(ICalObject *iobject) * @native: a native libical structure * @native_destroy_func: a function to be called on @native when it should be freed * @is_global_memory: whether @native is a global shared memory structure - * @owner: (allow-none): an owner of @native + * @owner: (nullable): an owner of @native * * Creates an #ICalObject descendant of type @type and initialize private members * of it. The descendants should call this function in their _new() function, or use @@ -586,8 +586,8 @@ void i_cal_object_set_owner(ICalObject *iobject, GObject *owner) * if not NULL, is referenced for thread safety. Unref it with g_object_unref * when done with it. * - * Returns: (transfer full) (allow-none): Current owner of the libical - * native structure. returns NULL, when there is no owner. + * Returns: (transfer full) (nullable): Current owner of the libical + * native structure. Returns %NULL when there is no owner. * * Since: 1.0 **/ diff --git a/src/libical-glib/tools/generator.c b/src/libical-glib/tools/generator.c index 609c9297..c3ef96b9 100644 --- a/src/libical-glib/tools/generator.c +++ b/src/libical-glib/tools/generator.c @@ -1580,8 +1580,7 @@ static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */ GList *link; for (link = annotations; link; link = g_list_next(link)) { - if (g_strcmp0(link->data, "allow-none") == 0 || - g_strcmp0(link->data, "nullable") == 0) { + if (g_strcmp0(link->data, "nullable") == 0) { break; } } -- cgit v1.2.1 From 24d8f9ec12c3a1163db877724e2d775233be82fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Thu, 11 Nov 2021 17:01:37 +0100 Subject: generator.c - Handle the optional parameter Do not return if the value is null for optional parameters as it is explicitly allowed. --- src/libical-glib/tools/generator.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/libical-glib/tools/generator.c b/src/libical-glib/tools/generator.c index c3ef96b9..47814724 100644 --- a/src/libical-glib/tools/generator.c +++ b/src/libical-glib/tools/generator.c @@ -1575,6 +1575,20 @@ gchar *get_translator_for_return(Ret *ret) return res; } +static gboolean parameter_is_out(Parameter *para) +{ + GList *link; + for (link = para->annotations; link; link = g_list_next(link)) { + if (g_strcmp0(link->data, "out") == 0 || + g_strcmp0(link->data, "inout") == 0 || + g_str_has_prefix(link->data, "out ")) { + break; + } + } + + return link != NULL; +} + static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */ { GList *link; @@ -1588,6 +1602,19 @@ static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */ return link != NULL; } +static gboolean annotation_contains_optional(GList *annotations) /* gchar * */ +{ + GList *link; + + for (link = annotations; link; link = g_list_next(link)) { + if (g_strcmp0(link->data, "optional") == 0) { + break; + } + } + + return link != NULL; +} + gchar *get_inline_parameter(Parameter *para) { gchar *buffer; @@ -2032,6 +2059,7 @@ gchar *get_source_run_time_checkers(Method *method, const gchar *namespace) gchar *defaultValue; gchar *retTrueType; guint namespace_len; + gboolean param_is_out; g_return_val_if_fail(method != NULL, NULL); g_return_val_if_fail(namespace != NULL && *namespace != '\0', NULL); @@ -2094,7 +2122,10 @@ gchar *get_source_run_time_checkers(Method *method, const gchar *namespace) (void)g_stpcpy(buffer + strlen(buffer), "\n"); } - if (i != namespace_len && !annotation_contains_nullable(parameter->annotations)) { + param_is_out = parameter_is_out(parameter); + if (i != namespace_len && ( + (!param_is_out && !annotation_contains_nullable(parameter->annotations)) || + (param_is_out && !annotation_contains_optional(parameter->annotations)))) { (void)g_stpcpy(buffer + strlen(buffer), "\t"); if (method->ret != NULL) { (void)g_stpcpy(buffer + strlen(buffer), "g_return_val_if_fail ("); -- cgit v1.2.1 From 8ac8b1e7a8735942faf8653af390d6ae00aadf6c Mon Sep 17 00:00:00 2001 From: Tyler Polen Date: Tue, 16 Nov 2021 11:50:48 -0500 Subject: Update UsingLibical.txt Typo fixes --- doc/UsingLibical.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/UsingLibical.txt b/doc/UsingLibical.txt index 6e34e15c..a49ac69c 100644 --- a/doc/UsingLibical.txt +++ b/doc/UsingLibical.txt @@ -186,7 +186,7 @@ returned from the library. 3.2.5 Storage classes -The library also offers several classes to store components to flies, +The library also offers several classes to store components to files, memory or databases. 4 Differences From RFCs @@ -726,7 +726,7 @@ their own. You can manipulate them either as part of the property or independently. The most common way to work with values to is to manipulate them from -they properties that contain them. This involves fewer routine calls +the properties that contain them. This involves fewer routine calls and intermediate variables than working with them independently, and it is type-safe. @@ -1022,7 +1022,7 @@ icalfileset* icalfileset_new(const char* path); icalfileset* icalfileset_new_open(const char* path, int flags, int mode); icalset_new_file is identical to icalfileset_new. Both routines will -open an existing file for readinga and writing, or create a new file +open an existing file for reading and writing, or create a new file if it does not exist. Icalfileset_new_open takes the same arguments as the open() system routine and behaves in the same way. @@ -1194,7 +1194,7 @@ libical/icalerror.h. If the routine returns an enum icalerrorenum, then the return value will be the same as icalerrno. You can use icalerror_strerror() to get a string that describes the error. The enumerations are: -* ICAL_BADARG_ERROR -- One of the argument to a routine was bad. Typically +* ICAL_BADARG_ERROR -- One of the arguments to a routine was bad. Typically for a null pointer. * ICAL_NEWFAILED_ERROR -- A new() or malloc() failed @@ -1227,7 +1227,7 @@ The library handles semantic and syntactic errors in components by inserting errors properties into the components. If the parser cannot parse incoming text ( a syntactic error ) or if the icalrestriction_check() routine indicates that the component does not meet the requirements -of RFC5546 ( a semantic error) the library will insert properties +of RFC5546 ( a semantic error ) the library will insert properties of the type X-LIC-ERROR to describe the error. Here is an example of the error property: @@ -1333,7 +1333,7 @@ Enums that identify a component, property, value or parameter end with Enums that identify a parameter value have the name of the parameter as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. -The enums for the parts of a recurarance rule and request statuses +The enums for the parts of a recurrence rule and request statuses are irregular. 6 Hacks and Bugs -- cgit v1.2.1 From 76ce25962ba1b4efbc06c88841dd53c8b8085428 Mon Sep 17 00:00:00 2001 From: Tyler Polen Date: Tue, 16 Nov 2021 11:50:48 -0500 Subject: Update UsingLibical.txt Typo fixes --- doc/UsingLibical.txt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/UsingLibical.txt b/doc/UsingLibical.txt index cffbe3c4..0d5952a0 100644 --- a/doc/UsingLibical.txt +++ b/doc/UsingLibical.txt @@ -186,7 +186,7 @@ returned from the library. 3.2.5 Storage classes -The library also offers several classes to store components to flies, +The library also offers several classes to store components to files, memory or databases. 4 Differences From RFCs @@ -726,7 +726,7 @@ their own. You can manipulate them either as part of the property or independently. The most common way to work with values to is to manipulate them from -they properties that contain them. This involves fewer routine calls +the properties that contain them. This involves fewer routine calls and intermediate variables than working with them independently, and it is type-safe. @@ -1022,8 +1022,8 @@ icalfileset* icalfileset_new(const char* path); icalfileset* icalfileset_new_open(const char* path, int flags, int mode); icalset_new_file is identical to icalfileset_new. Both routines will -open an existing file for readinga and writing, or create a new file -if it does not exist. Icalfilset_new_open takes the same arguments +open an existing file for reading and writing, or create a new file +if it does not exist. Icalfileset_new_open takes the same arguments as the open() system routine and behaves in the same way. The icalset and icalfilset objects are somewhat interchangable -- you @@ -1192,7 +1192,7 @@ libical/icalerror.h. If the routine returns an enum icalerrorenum, then the return value will be the same as icalerrno. You can use icalerror_strerror() to get a string that describes the error. The enumerations are: -* ICAL_BADARG_ERROR -- One of the argument to a routine was bad. Typically +* ICAL_BADARG_ERROR -- One of the arguments to a routine was bad. Typically for a null pointer. * ICAL_NEWFAILED_ERROR -- A new() or malloc() failed @@ -1225,7 +1225,7 @@ The library handles semantic and syntactic errors in components by inserting errors properties into the components. If the parser cannot parse incoming text ( a syntactic error ) or if the icalrestriction_check() routine indicates that the component does not meet the requirements -of RFC5546 ( a semantic error) the library will insert properties +of RFC5546 ( a semantic error ) the library will insert properties of the type X-LIC-ERROR to describe the error. Here is an example of the error property: @@ -1331,7 +1331,7 @@ Enums that identify a component, property, value or parameter end with Enums that identify a parameter value have the name of the parameter as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. -The enums for the parts of a recurarance rule and request statuses +The enums for the parts of a recurrence rule and request statuses are irregular. 6 Hacks and Bugs -- cgit v1.2.1 From 16474413b907cb053d06e62a5b61cdf41ea3886f Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 18 Nov 2021 06:50:17 -0500 Subject: icalcomponent.c: protect against NULL property values --- src/libical/icalcomponent.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index deb2c402..75401221 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -2427,6 +2427,12 @@ void icalcomponent_set_due(icalcomponent *comp, struct icaltimetype v) } } +static int strcmpsafe(const char *a, const char *b) +{ + return strcmp((a == NULL ? "" : a), + (b == NULL ? "" : b)); +} + static int prop_compare(void *a, void *b) { icalproperty *p1 = (icalproperty*) a; @@ -2442,8 +2448,8 @@ static int prop_compare(void *a, void *b) } if (r == 0) { - r = strcmp(icalproperty_get_value_as_string(p1), - icalproperty_get_value_as_string(p2)); + r = strcmpsafe(icalproperty_get_value_as_string(p1), + icalproperty_get_value_as_string(p2)); } } -- cgit v1.2.1 From 1a6e7bdd63b25ad9a2800b2bed473c08d4e53e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Thu, 18 Nov 2021 19:41:17 +0200 Subject: =?UTF-8?q?doc/UsingLibical.md=20=E2=80=93=20typos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/UsingLibical.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index b158f560..51103495 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -712,7 +712,7 @@ their own. You can manipulate them either as part of the property or independently. The most common way to work with values to is to manipulate them from -they properties that contain them. This involves fewer routine calls +the properties that contain them. This involves fewer routine calls and intermediate variables than working with them independently, and it is type-safe. @@ -1109,7 +1109,7 @@ icalfileset* icalfileset_new_open( ``` `icalset_new_file()` is identical to `icalfileset_new()`. Both routines will -open an existing file for readinga and writing, or create a new file +open an existing file for reading and writing, or create a new file if it does not exist. `icalfileset_new_open()` takes the same arguments as the open() system routine and behaves in the same way. @@ -1275,7 +1275,7 @@ then the return value will be the same as icalerrno. You can use `icalerror_strerror()` to get a string that describes the error. The enumerations are: -- `ICAL_BADARG_ERROR`: One of the argument to a routine was bad. +- `ICAL_BADARG_ERROR`: One of the arguments to a routine was bad. Typically for a null pointer. - `ICAL_NEWFAILED_ERROR`: A `new()` or `malloc()` failed. @@ -1410,7 +1410,7 @@ Enums that identify a parameter value have the name of the parameter as the second word. For instance: `ICAL_ROLE_REQPARTICIPANT` or `ICAL_PARTSTAT_ACCEPTED`. -The enums for the parts of a recurarance rule and request statuses +The enums for the parts of a recurrence rule and request statuses are irregular. ## 6 Hacks and Bugs -- cgit v1.2.1 From b8c247f50b5798efb851fb81f6f9e8a34745a593 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 18 Nov 2021 18:14:36 -0500 Subject: Remove doc/UsingLibical.txt in favor of doc/UsingLibical.md no need to maintain 2 documetation files with the same content. --- CMakeLists.txt | 2 +- doc/UsingLibical.txt | 1371 -------------------------------------------------- 2 files changed, 1 insertion(+), 1372 deletions(-) delete mode 100644 doc/UsingLibical.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index ae1f08f6..1b06ea91 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # This is the top-level CMakeLists.txt file for the libical project. # # Pass the following variables to cmake to control the build: -# (See doc/UsingLibical.txt for more information) +# (See doc/UsingLibical.md for more information) # # -DWITH_CXX_BINDINGS=[true|false] # Build the C++ bindings. diff --git a/doc/UsingLibical.txt b/doc/UsingLibical.txt deleted file mode 100644 index a49ac69c..00000000 --- a/doc/UsingLibical.txt +++ /dev/null @@ -1,1371 +0,0 @@ - - -Using Libical - -Eric Busboom (eric@civicknowledge.com) - -January 2001 - - - -1 Introduction - -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 iCalendar extensions -in RFC6638; and some of RFC6047. - -This documentation assumes that you are familiar with the iCalendar -standards RFC5545 and RFC5546. These specifications are available -at the IETF tools website: - -https://tools.ietf.org/html/rfc5545 -https://tools.ietf.org/html/rfc5546 - -1.1 The libical project - -This code is under active development. If you would like to contribute -to the project, visit https://libical.github.io/libical/ - -1.2 License - -The code and datafiles in this distribution are licensed under the -Mozilla Public License version 2.0. See https://www.mozilla.org/MPL -for a copy of the license. Alternately, you may use libical under -the terms of the GNU Lesser General Public License, version 2.1. -See https://www.gnu.org/licenses/lgpl-2.1.html for a copy of the LGPL. - -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. - -1.3 Example Code - -A lot of the documentation for this library is in the form of example -code. These examples are in the "examples" directory of the distribution. -Also look in "src/test" for additional annotated examples. - -2 Building the Library - -Libical uses autoconf to generate makefiles. It should build with no -adjustments on Linux, FreeBSD and Solaris under gcc. Some version -have been successfully built on MacOS, Solaris, UnixWare, and -Tru64 UNIX without gcc, but you may run into problems with a particular -later version. - -For a more complete guide to building the library, see the README file -in the distribution. - -3 Structure - -The iCalendar data model is based on four types of objects: components, -properties, values and parameters. - -Properties are the fundamental unit of information in iCalendar, and they -work a bit like a hash entry, with a constant key and a variable value. -Properties may also have modifiers, called parameters. In the iCal -content line - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com - -The property name is "ORGANIZER", the value of the property is "mrbig@host.com" -and the "ROLE" parameter specifies that Mr Big is the chair of the -meetings associated with this property. - -Components are groups of properties that represent the core objects -of a calendar system, such as events or timezones. Components are -delimited by "BEGIN" and "END" tags. - -When a component is sent across a network, if it is un-encrypted, it -will look something like: - -BEGIN:VCALENDAR - -METHOD:REQUEST - -PRODID: -//hacksw/handcal//NONSGML v1.0//EN - -BEGIN:VEVENT - -DTSTAMP:19980309T231000Z - -UID:guid-1.host1.com - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com - -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: - - MAILTO:employee-A@host.com - -DESCRIPTION:Project XYZ Review Meeting - -CATEGORIES:MEETING - -CLASS:PUBLIC - -CREATED:19980309T130000Z - -SUMMARY:XYZ Project Review - -DTSTART;TZID=US-Eastern:19980312T083000 - -DTEND;TZID=US-Eastern:19980312T093000 - -LOCATION:1CP Conference Room 4350 - -END:VEVENT - -END:VCALENDAR - -Note that components can be nested; this example has both a VCALENDAR -and a VEVENT component, one nested inside the other. - -3.1 Core iCal classes - -Libical is an object-based, data-oriented library. Nearly all of the -routines in the library are associated with an opaque data types and -perform some operation on that data type. Although the library does -not actually have classes, we will use those terms since the behavior -of these associations of data and routines is very similar to a class. - -3.1.1 Properties - -Properties are represented with the icalproperty class and its many -"derived" classes with on "derived" class per property type in RFC5545. -Again, there is no actual inheritance relations, but there are clusters -of routines that make this term useful. A property is a container -for a single value and a set of parameters. - -3.1.2 Components - -In libical, components are represented with the icalcomponent class. -Icalcomponent is a container for a set of other components and properties. - -3.1.3 Values - -Values are represented in a similar way to properties; a base class -and many "derived" classes. A value is essentially a abstract handle -on a single fundamental type, a structure or a union. - -3.1.4 Parameters - -Parameters are represented in a similar way to properties, except that -they contain only one value. - -3.2 Other elements of libical - -In addition to the core iCal classes, libical has many other types, -structures, classes that aid in creating and using iCal components. - -3.2.1 Enumerations and types - -Libical is strongly typed, so every component, property, parameter, -and value type has an enumeration, and some have an associated structure -or union. - -3.2.2 The parser - -The libical parser offers a variety of ways to convert RFC5545 text -into a libical internal component structure. the parser can parse -blocks of text as a string, or it can parse line-by-line. - -3.2.3 Error objects - -Libical has a substantial error reporting system for both programming -errors and component usage errors. - -3.2.4 Memory Management - -Since many of libical's interfaces return strings, the library has its -own memory management system to eliminate the need to free every string -returned from the library. - -3.2.5 Storage classes - -The library also offers several classes to store components to files, -memory or databases. - -4 Differences From RFCs - -Libical has been designed to follow the standards as closely as possible, -so that the key objects in the standards are also key objects in the -library. However, there are a few areas where the specifications are -(arguably) irregular, and following them exactly would result in an -unfriendly interface. These deviations make libical easier to use -by maintaining a self-similar interface. - -4.1 Pseudo Components - -Libical defines components for groups of properties that look and act -like components, but are not defined as components in the specification. -XDAYLIGHT and XSTANDARD are notable examples. These pseudo components -group properties within the VTIMEZONE components. For instanace, the -timezone properties associated with daylight savings time starts with -"BEGIN:DAYLIGHT" and ends with "END:DAYLIGHT, just like other components, -but is not defined as a component in RFC5545 (see RFC5545, section 3.6.5) -In Libical,this grouping is represented by the XDAYLIGHT component. -Standard iCAL components all start with the letter "V," while pseudo -components start with "X." - -There are also pseudo components that are conceptually derived classes -of VALARM. RFC5546 defines what properties may be included in each -component, and for VALARM, the set of properties it may have depends -on the value of the ACTION property. - -For instance, if a VALARM component has an ACTION property with the -value of "AUDIO," the component must also have an "ATTACH" property. -However, if the ACTION value is "DISPLAY," the component must have -a DESCRIPTION property. - -To handle these various, complex restrictions, libical has pseudo components -for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and -XPROCEDUREALARM. - -4.2 Combined Values - -Many values can take more than one type. TRIGGER, for instance, can -have a value type of with DURATION or of DATE-TIME. These multiple -types make it difficult to create routines to return the value associated -with a property. - -It is natural to have interfaces that would return the value of a property, -but it is cumbersome for a single routine to return multiple types. -So, in libical, properties that can have multiple types are given -a single type that is the union of their RFC5545 types. For instance, -in libical, the value of the TRIGGER property resolves to struct icaltriggertype. -This type is a union of a DURATION and a DATE-TIME. - -4.3 Multi-Valued Properties - -Some properties, such as CATEGORIES have only one value type, but each -CATEGORIES property can have multiple value instances. This also results -in a cumbersome interface -- CATEGORIES accessors would have to return -a list while all other accessors returned a single value. In libical, -all properties have a single value, and multi-valued properties are -broken down into multiple single valued properties during parsing. -That is, an input line like, - -CATEGORIES: work, home - -becomes in libical's internal representation - -CATEGORIES: work - -CATEGORIES: home - -Oddly, RFC5545 allows some multi-valued properties (like FREEBUSY) -to exist as both a multi-values property and as multiple single -value properties, while others (like CATEGORIES) can only exist -as single multi-valued properties. This makes the internal representation -for CATEGORIES illegal. However when you convert a component to a -string, the library will collect all of the CATEGORIES properties -into one. - -5 Using libical - -5.1 Creating Components - -There are three ways to create components in Libical: creating individual -objects and assembling them, building entire objects in massive vaargs -calls, and parsing a text file containing iCalendar data. - -5.1.1 Constructor Interfaces - -Using constructor interfaces, you create each of the objects separately -and then assemble them in to components: - -icalcomponent *event; - -icalproperty *prop; - -icalparameter *param; - -struct icaltimetype atime; - -event = icalcomponent_new(ICAL_VEVENT_COMPONENT); - -prop = icalproperty_new_dtstamp(atime); - -icalcomponent_add_property(event, prop); - -prop = icalproperty_new_uid(''guid-1.host1.com''); - -icalcomponent_add_property(event,prop); - -prop=icalproperty_new_organizer(''mrbig@host.com''); - -param = icalparameter_new_role(ICAL_ROLE_CHAIR) - -icalproperty_add_parameter(prop, param); - -icalcomponent_add_property(event,prop); - -Notice that libical uses a semi-object-oriented style of interface. -Most things you work with are objects, that are instantiated with -a constructor that has "new" in the name. Also note that, other than -the object reference, most structure data is passed in to libical -routines by value. Libical has some complex but very regular memory -handling rules. These are detailed in section [sec:memory]. - -If any of the constructors fail, they will return 0. If you try to -insert 0 into a property or component, or use a zero-valued object -reference, libical will either silently ignore the error or will abort -with an error message. This behavior is controlled by a compile time -flag (ICAL_ERRORS_ARE_FATAL), and will abort by default. - -5.1.2 varargs Constructors - -There is another way to create complex components, which is arguably -more elegant, if you are not horrified by varargs. The varargs constructor -interface allows you to create intricate components in a single block -of code. Here is the previous examples in the vaargs style. - - calendar = - - icalcomponent_vanew( - - ICAL_VCALENDAR_COMPONENT, - - icalproperty_new_version(''2.0''), - - icalproperty_new_prodid( - - ''-//RDU Software//NONSGML HandCal//EN''), - - icalcomponent_vanew( - - ICAL_VEVENT_COMPONENT, - - icalproperty_new_dtstamp(atime), - - icalproperty_new_uid(''guid-1.host1.com''), - - icalproperty_vanew_organizer( - - ''mrbig@host.com''), - - icalparameter_new_role(ICAL_ROLE_CHAIR), - - 0 - - ), - - icalproperty_vanew_attendee( - - ''employee-A@host.com'', - - icalparameter_new_role( - - ICAL_ROLE_REQPARTICIPANT), - - icalparameter_new_rsvp(1), - - icalparameter_new_cutype(ICAL_CUTYPE_GROUP), - - 0 - - ), - - icalproperty_new_location( - - "1CP Conference Room 4350"), - - 0 - - ), - - 0 - - ); - -This form is similar to the constructor form, except that the constructors -have "vanew" instead of "new" in the name. The arguments are similar -too, except that the component constructor can have a list of properties, -and the property constructor can have a list of parameters. Be sure -to terminate every list with a '0', or your code will crash, if you -are lucky. - -5.1.3 Parsing Text Files - -The final way to create components will probably be the most common; -you can create components from RFC5545 compliant text. If you have -the string in memory, use - -icalcomponent* icalparser_parse_string(char* str); - -If the string contains only one component, the parser will return the -component in libical form. If the string contains multiple components, -the multiple components will be returned as the children of an ICAL_XROOT_COMPONENT -component. - -Parsing a whole string may seem wasteful if you want to pull a large -component off of the network or from a file; you may prefer to parse -the component line by line. This is possible too by using: - -icalparser* icalparser_new(); - -void icalparser_free(icalparser* parser); - -icalparser_get_line(parser,read_stream); - -icalparser_add_line(parser,line); - -icalparser_set_gen_data(parser,stream) - -These routines will construct a parser object to which you can add -lines of input and retrieve any components that the parser creates -from the input. These routines work by specifying an adaptor routine -to get string data from a source. For an example: - -char* read_stream(char *s, size_t size, void *d) - -{ - - char *c = fgets(s,size, (FILE*)d); - - return c; - -} - -main() { - - char* line; - - icalcomponent *c; - - icalparser *parser = icalparser_new(); - - FILE* stream = fopen(argv[1],"r"); - - icalparser_set_gen_data(parser,stream); - - do { - - line = icalparser_get_line(parser,read_stream); - - c = icalparser_add_line(parser,line); - - if (c != 0){ - - printf("%s",icalcomponent_as_ical_string(c)); - - icalparser_claim(parser); - - printf("\n---------------\n"); - - icalcomponent_free(c); - - } - - } while (line != 0); - -} - -The parser object parameterizes the routine used to get input lines -with icalparser_set_gen_data() and icalparser_get_line(). In this -example, the routine read_stream() will fetch the next line from a -stream, with the stream passed in as the void* parameter d. The parser -calls read_stream() from icalparser_get_line(), but it also needs -to know what stream to use. This is set by the call to icalparser_set_gen_data(). -By using a different routine for read_stream or passing in different -data with icalparser_set_gen_data, you can connect to any data source. - -Using the same mechanism, other implementations could read from memory -buffers, sockets or other interfaces. - -Since the example code is a very common way to use the parser, there -is a convenience routine; - -icalcomponent* icalparser_parse(icalparser *parser, - - char* (*line_gen_func)(char *s, size_t size, void* d)) - -To use this routine, you still must construct the parser object and -pass in a reference to a line reading routine. If the parser can create -a single component from the input, it will return a pointer to the -newly constructed component. If the parser can construct multiple -components from the input, it will return a reference to an XROOT -component ( of type ICAL_XROOT_COMPONENT.) This XROOT component will -hold all of the components constructed from the input as children. - -5.2 Accessing Components - -Given a reference to a component, you probably will want to access -the properties, parameters and values inside. Libical interfaces let -you find sub-component, add and remove sub-components, and do the -same three operations on properties. - -5.2.1 Finding Components - -To find a sub-component of a component, use: - -icalcomponent* icalcomponent_get_first_component( - - icalcomponent* component, - - icalcomponent_kind kind); - -This routine will return a reference to the first component of the -type 'kind.' The key kind values, listed in icalenums.h are: - -ICAL_ANY_COMPONENT - -ICAL_VEVENT_COMPONENT - -ICAL_VTODO_COMPONENT - -ICAL_VJOURNAL_COMPONENT - -ICAL_VCALENDAR_COMPONENT - -ICAL_VFREEBUSY_COMPONENT - -ICAL_VALARM_COMPONENT - -These are only the most common components; there are many more listed -in icalenums.h. - -As you might guess, if there is more than one subcomponent of the type -you have chosen, this routine will return only the first. to get at -the others, you need to iterate through the component. - -5.2.2 Iterating Through Components - -Iteration requires a second routine to get the next subcomponent after -the first: - -icalcomponent* icalcomponent_get_next_component( - - icalcomponent* component, - - icalcomponent_kind kind); - -With the 'first' and 'next' routines, you can create a for loop to -iterate through all of a components subcomponents - - for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); - - c != 0; - - c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) - -{ - - do_something(c); - -} - -This code bit will iterate through all of the subcomponents in 'comp' -but you can select a specific type of component by changing ICAL_ANY_COMPONENT -to another component type. - -5.2.3 Using Component Iterators - -The iteration model in the previous section requires the component -to keep the state of the iteration. So, you could not use this model -to perform a sorting operations, since you'd need two iterators and -there is only space for one. If you ever call icalcomponent_get_first_component() -when an iteration is in progress, the pointer will be reset to the -beginning. - -To solve this problem, there are also external iterators for components. -The routines associated with these external iterators are: - -icalcompiter icalcomponent_begin_component(icalcomponent* component, -icalcomponent_kind kind); - -icalcompiter icalcomponent_end_component(icalcomponent* component, -icalcomponent_kind kind); - -icalcomponent* icalcompiter_next(icalcompiter* i); - -icalcomponent* icalcompiter_prior(icalcompiter* i); - -icalcomponent* icalcompiter_deref(icalcompiter* i); - -The _begin_() and _end_() routines return a new iterator that points -to the beginning and ending of the list of subcomponent for the given -component, and the kind argument works like the kind argument for -internal iterators. - -After creating an iterators, use _next_() and _prior_() to step forward -and backward through the list and get the component that the iterator -points to, and use _deref() to return the component that the iterator -points to without moving the iterator. All routines will return 0 -when they move to point off the end of the list. - -Here is an example of a loop using these routines: - -for( - - i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT); - - icalcompiter_deref(&i)!= 0; - - icalcompiter_next(&i) - -) { - - icalcomponent *this = icalcompiter_deref(&i); - -} - -5.2.4 Removing Components - -Removing an element from a list while iterating through the list with -the internal iterators can cause problems, since you will probably -be removing the element that the internal iterator points to. The -_remove() routine will keep the iterator valid by moving it to the -next component, but in a normal loop, this will result in two advances -per iteration, and you will remove only every other component. To -avoid the problem, you will need to step the iterator ahead of the -element you are going to remove, like this: - -for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); - - c != 0; - - c = next - -{ - - next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); - - icalcomponent_remove_component(parent_comp,c); - -} - -Another way to remove components is to rely on the side effect of icalcomponent_remove_component: -if component iterator in the parent component is pointing to the child -that will be removed, it will move the iterator to the component after -the child. The following code will exploit this behavior: - -icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT); - -while((c=icalcomponent_get_current_component(c)) != 0 ){ - - if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){ - - icalcomponent_remove_component(parent_comp,inner); - - } else { - - icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT); - - } - -} - -5.2.5 Working with properties and parameters - -Finding, iterating and removing properties works the same as it does -for components, using the property-specific or parameter-specific -interfaces: - -icalproperty* icalcomponent_get_first_property( - - icalcomponent* component, - - icalproperty_kind kind); - -icalproperty* icalcomponent_get_next_property( - - icalcomponent* component, - - icalproperty_kind kind); - -void icalcomponent_add_property( - - icalcomponent* component, - - icalproperty* property); - -void icalcomponent_remove_property( - - icalcomponent* component, - - icalproperty* property); - -For parameters: - -icalparameter* icalproperty_get_first_parameter( - - icalproperty* prop, - - icalparameter_kind kind); - -icalparameter* icalproperty_get_next_parameter( - - icalproperty* prop, - - icalparameter_kind kind); - -void icalproperty_add_parameter( - - icalproperty* prop, - - icalparameter* parameter); - -void icalproperty_remove_parameter_by_kind( - - icalproperty* prop, - - icalparameter_kind kind); - -Note that since there should be only one parameter of each type in -a property, you will rarely need to use icalparameter_get_next_parameter. - -5.2.6 Working with values - -Values are typically part of a property, although they can exist on -their own. You can manipulate them either as part of the property -or independently. - -The most common way to work with values to is to manipulate them from -the properties that contain them. This involves fewer routine calls -and intermediate variables than working with them independently, and -it is type-safe. - -For each property, there are a _get_ and a _set_ routine that accesses -the internal value. For instanace, for the UID property, the routines -are: - -void icalproperty_set_uid(icalproperty* prop, const char* v) - -const char* icalproperty_get_uid(icalproperty* prop) - -For multi-valued properties, like ATTACH, the value type is usually -a struct or union that holds both possible types. - -If you want to work with the underlying value object, you can get and -set it with: - -icalvalue* icalproperty_get_value (icalproperty* prop) - -void icalproperty_set_value(icalproperty* prop, icalvalue* value); - -icalproperty_get_value() will return a reference that you can manipulate -with other icalvalue routines. Most of the time, you will have to -know what the type of the value is. For instance, if you know that -the value is a DATETIME type, you can manipulate it with: - -struct icaltimetype icalvalue_get_datetime(icalvalue* value); - -void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); - -When working with an extension property or value (and X-PROPERTY or -a property that has the parameter VALUE=x-name ) the value type is -always a string. To get and set the value, use: - -void icalproperty_set_x(icalproperty* prop, char* v); - -char* icalproperty_get_x(icalproperty* prop); - -All X properties have the type of ICAL_X_PROPERTY, so you will need -these routines to get and set the name of the property: - -char* icalproperty_get_x_name(icalproperty* prop) - -void icalproperty_set_x_name(icalproperty* prop, char* name); - -5.2.7 Checking Component Validity - -RFC 5546 defines rules for what properties must exist in a component -to be used for transferring scheduling data. Most of these rules relate -to the existence of properties relative to the METHOD property, which -declares what operation a remote receiver should use to process a -component. For instance, if the METHOD is REQUEST and the component -is a VEVENT, the sender is probably asking the receiver to join in -a meeting. In this case, RFC5546 says that the component must specify -a start time (DTSTART) and list the receiver as an attendee (ATTENDEE). - -Libical can check these restrictions with the routine: - -int icalrestriction_check(icalcomponent* comp); - -This routine returns 0 if the component does not pass RFC5546 restrictions, -or if the component is malformed. The component you pass in must be -a VCALENDAR, with one or more children, like the examples in RFC5546. - -When this routine runs, it will insert new properties into the component -to indicate any errors it finds. See section 6.5.3, X-LIC-ERROR for -more information about these error properties. - -5.2.8 Converting Components to Text - -To create an RFC5545 compliant text representation of an object, use -one of the *_as_ical_string() routines: - -char* icalcomponent_as_ical_string (icalcomponent* component) - -char* icalproperty_as_ical_string (icalproperty* property) - -char* icalparameter_as_ical_string (icalparameter* parameter) - -char* icalvalue_as_ical_string (icalvalue* value) - -In most cases, you will only use icalcomponent_as_ical_string (), since -it will cascade and convert all of the parameters, properties and -values that are attached to the root component. - -Remember that the string returned by these routines is owned by the -library, and will eventually be re-written. You should copy it if -you want to preserve it. - -5.3 Time - -5.3.1 Time structure - -Libical defines its own time structure for storing all dates and times. -It would have been nice to re-use the C library's struct tm, but that -structure does not differentiate between dates and times, and between -local time and UTC. The libical structure is: - -struct icaltimetype { - - int year; - - int month; - - int day; - - int hour; - - int minute; - - int second; - - int is_date; /* 1 -> interpret this as date. */ }; - -The year, month, day, hour, minute and second fields hold the broken-out -time values. The is_date field indicates if the time should -be interpreted only as a date. If it is a date, the hour, minute and -second fields are assumed to be zero, regardless of their actual values. - -5.3.2 Creating time structures - -There are several ways to create a new icaltimetype structure: - -struct icaltimetype icaltime_from_string(const char* str); - -struct icaltimetype icaltime_from_timet_with_zone(time_t v, - int is_date, - icaltimezone* zone); - -icaltime_from_string takes any RFC5545 compliant time string: - -struct icaltimetype tt = icaltime_from_string("19970101T103000"); - -icaltime_from_timet_with_zone takes a time_t value, representing seconds past -the POSIX epoch, a flag to indicate if the time is a date, and a time zone. -Dates have an identical structure to a time, but the time portion (hours, -minutes and seconds) is always 00:00:00. Dates act differently in -sorting and comparison, and they have a different string representation -in RFC5545. - -5.3.3 Time manipulating routines - -The null time value is used to indicate that the data in the structure -is not a valid time. - -struct icaltimetype icaltime_null_time(void); - -int icaltime_is_null_time(struct icaltimetype t); - -It is sensible for the broken-out time fields to contain values that -are not permitted in an ISO compliant time string. For instance, the -seconds field can hold values greater than 59, and the hours field -can hold values larger than 24. The excessive values will be rolled -over into the next larger field when the structure is normalized. - -struct icaltimetype icaltime_normalize(struct icaltimetype t); - -Normalizing allows you to do arithmetic operations on time values. - -struct icaltimetype tt = icaltime_from_string("19970101T103000"); - -tt.days +=3 - -tt.second += 70; - -tt = icaltime_normalize(tt); - -There are several routines to get the day of the week or month, etc, -from a time structure. - -short icaltime_day_of_year(struct icaltimetype t); - -struct icaltimetype icaltime_from_day_of_year(short doy, short year); - -short icaltime_day_of_week(struct icaltimetype t); - -short icaltime_start_doy_week(struct icaltimetype t, int fdow); - -short icaltime_week_number(short day_of_month, short month, short year); - -short icaltime_days_in_month(short month,short year); - -Two routines convert time structures to and from the number of seconds -since the POSIX epoch. The is_date field indicates whether or not -the hour, minute and second fields should be used in the conversion. - -struct icaltimetype icaltime_from_timet_with_zone(time_t v, - int is_date, - icaltimezone* zone); - -time_t icaltime_as_timet(struct icaltimetype); - -The compare routine works exactly like strcmp, but on time structures. - -int icaltime_compare(struct icaltimetype a,struct icaltimetype b); - -The following routines convert between UTC and a named timezone. The -tzid field must be a timezone name from the Olsen database, such as -"America/Los_Angeles." - -The utc_offset routine returns the offset of the named time zone from -UTC, in seconds. - -The tt parameter in the following routines indicates the date on which -the conversion should be made. The tt parameter is necessary because -timezones have many different rules for when daylight savings time -is used, and these rules can change over time. So, for a single timezone -one year may have daylight savings time on March 15, but for other -years March 15 may be standard time, and some years may have standard -time all year. - -int icaltime_utc_offset(struct icaltimetype tt, char* tzid); - -int icaltime_local_utc_offset(); - -struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid); - -struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid); - -struct icaltimetype icaltime_as_local(struct icaltimetype tt); - -5.4 Storing Objects - -The libical distribution includes a separate library, libicalss, that -allows you to store iCal component data to disk in a variety of ways. - -The file storage routines are organized in an inheritance hierarchy -that is rooted in icalset, with the derived class icalfileset and -icaldirset. Icalfileset stores components to a file, while icaldirset -stores components to multiple files, one per month based on DTSTAMP. -Other storages classes, for storage to a heap or a mysql database -for example, could be added in the future. - -All of the icalset derived classes have the same interface: - -icaldirset* icaldirset_new(const char* path); - -void icaldirset_free(icaldirset* store); - -const char* icaldirset_path(icaldirset* store); - -void icaldirset_mark(icaldirset* store); - -icalerrorenum icaldirset_commit(icaldirset* store); - -icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent* -comp); - -icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent* -comp); - -int icaldirset_count_components(icaldirset* store, icalcomponent_kind -kind); - -icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge); - -void icaldirset_clear(icaldirset* store); - -icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid); - -int icaldirset_has_uid(icaldirset* store, const char* uid); - -icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent -*c); - -icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc, -icalcomponent *newc); - -icalcomponent* icaldirset_get_current_component(icaldirset* store); - -icalcomponent* icaldirset_get_first_component(icaldirset* store); - -icalcomponent* icaldirset_get_next_component(icaldirset* store); - -5.4.1 Creating a new set - -You can create a new set from either the base class or the direved -class. From the base class use one of: - -icalset* icalset_new_file(const char* path); - -icalset* icalset_new_dir(const char* path); - -icalset* icalset_new_heap(void); - -icalset* icalset_new_mysql(const char* path); - -You can also create a new set based on the derived class, For instance, -with icalfileset: - -icalfileset* icalfileset_new(const char* path); - -icalfileset* icalfileset_new_open(const char* path, int flags, int mode); - -icalset_new_file is identical to icalfileset_new. Both routines will -open an existing file for reading and writing, or create a new file -if it does not exist. Icalfileset_new_open takes the same arguments -as the open() system routine and behaves in the same way. - -The icalset and icalfileset objects are somewhat interchangeable -- you -can use an icalfileset* as an argument to any of the icalset routines. - -The following examples will all use icalfileset routines; using the -other icalset derived classes will be similar. - -5.4.2 Adding, Finding and Removing Components - -To add components to a set, use: - -icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent* -child); - -The fileset keeps an in-memory copy of the components, and this set -must be written back to the file occasionally. There are two routines -to manage this: - -void icalfileset_mark(icalfileset* cluster); - -icalerrorenum icalfileset_commit(icalfileset* cluster); - -icalfileset_mark indicates that the in-memory components have changed. -Calling the _add_component routine will call _mark automatically, -but you may need to call it yourself if you have made a change to -an existing component. The _commit routine writes the data base to -disk, but only if it is marked. The _commit routine is called automatically -when the icalfileset is freed. - -To iterate through the components in a set, use: - -icalcomponent* icalfileset_get_first_component(icalfileset* cluster); - -icalcomponent* icalfileset_get_next_component(icalfileset* cluster); - -icalcomponent* icalfileset_get_current_component (icalfileset* cluster); - -These routines work like the corresponding routines from icalcomponent, -except that their output is filtered through a gauge. A gauge is a -test for the properties within a components; only components that -pass the test are returned. A gauge can be constructed from a MINSQL -string with: - -icalgauge* icalgauge_new_from_sql(const char* sql); - -Then, you can add the gauge to the set with : - -icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge); - -Here is an example that puts all of these routines together: - -void test_fileset() - -{ - - icalfileset *fs; - - icalcomponent *c; - - int i; - - char *path = "test_fileset.ics"; - - icalgauge *g = icalgauge_new_from_sql( - - "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND -DTSTART <= '20000106T120000Z'"); - - - - fs = icalfileset_new(path); - - - - for (i = 0; i!= 10; i++){ - - c = make_component(i); /* Make a new component where DTSTART -has month of i */ - - icalfileset_add_component(fs,c); - - } - - icalfileset_commit(fs); /* Write to disk */ - - icalfileset_select(fs,g); /* Set the gauge to filter components -*/ - - - - for (c = icalfileset_get_first_component(fs); - - c != 0; - - c = icalfileset_get_next_component(fs)){ - - struct icaltimetype t = icalcomponent_get_dtstart(c); - - - - printf("%s\n",icaltime_as_ctime(t)); - - } - - icalfileset_free(fs); - -} - -5.4.3 Other routines - -There are several other routines in the icalset interface, but they -not fully implemented yet. - -5.5 Memory Management - -Libical relies heavily on dynamic allocation for both the core objects -and for the strings used to hold values. Some of this memory the library -caller owns and must free, and some of the memory is managed by the -library. Here is a summary of the memory rules. - -1) If the function name has "new" in it (such as icalcomponent_new(), - or icalproperty_new_from_string()), the caller gets control of the - memory. The caller also gets control over an object that is cloned via - a function that ends with "_clone" (like icalcomponent_clone()) - -2) If you got the memory from a routine with "clone" or "new" in it, you - must call the corresponding *_free() routine to free the memory, for - example use icalcomponent_free() to free objects created with - icalcomponent_new() or icalcomponent_clone(). - -3) If the function name has "add" in it, the caller is transferring - control of the memory to the routine. ( icalproperty_add_parameter() ) - -4) If the function name has "remove" in it, the caller passes in - a pointer to an object and after the call returns, the caller owns - the object. So, before you call icalcomponent_remove_property(comp,foo), - you do not own "foo" and after the call returns, you do. - -5) If the routine returns a string and its name does NOT end in "_r", - libical owns the memory and will put it on a ring buffer to reclaim - later. For example, icalcomponent_as_ical_string(). You'd better - strdup() it if you want to keep it, and you don't have to delete it. - -6) If the routine returns a string and its name *does* end in "_r", the - caller gets control of the memory and is responsible for freeing it. - For example, icalcomponent_as_ical_string_r() does the same thing as - icalcomponent_as_ical_string(), except you now have control of the - string buffer it returns. - -5.6 Error Handling - -Libical has several error handling mechanisms for the various types -of programming, semantic and syntactic errors you may encounter. - -5.6.1 Return values - -Many library routines signal errors through their return values. All -routines that return a pointer, such as icalcomponent_new(), will -return 0 ( zero ) on a fatal error. Some routines will return a value -of enum icalerrorenum. - -5.6.2 icalerrno - -Most routines will set the global error value icalerrno on errors. -This variable is an enumeration; permissible values can be found in -libical/icalerror.h. If the routine returns an enum icalerrorenum, -then the return value will be the same as icalerrno. You can use icalerror_strerror() -to get a string that describes the error. The enumerations are: - -* ICAL_BADARG_ERROR -- One of the arguments to a routine was bad. Typically - for a null pointer. - -* ICAL_NEWFAILED_ERROR -- A new() or malloc() failed - -* ICAL_MALFORMEDDATA_ERROR -- An input string was not in the correct - format - -* ICAL_PARSE_ERROR -- The parser failed to parse an incoming component - -* ICAL_INTERNAL_ERROR -- Largely equivalent to an assert - -* ICAL_FILE_ERROR -- A file operation failed. Check errno for more - detail. - -* ICAL_ALLOCATION_ERROR -- ? - -* ICAL_USAGE_ERROR -- ? - -* ICAL_NO_ERROR -- No error - -* ICAL_MULTIPLEINCLUSION_ERROR -- ? - -* ICAL_TIMEDOUT_ERROR -- For CSTP and acquiring locks - -* ICAL_UNKNOWN_ERROR -- ? - -5.6.3 X-LIC-ERROR and X-LIC-INVALID-COMPONENT - -The library handles semantic and syntactic errors in components by -inserting errors properties into the components. If the parser cannot -parse incoming text ( a syntactic error ) or if the icalrestriction_check() -routine indicates that the component does not meet the requirements -of RFC5546 ( a semantic error ) the library will insert properties -of the type X-LIC-ERROR to describe the error. Here is an example -of the error property: - -X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions -for property DTSTART. - -Expected 1 instances of the property and got 0 - -This error resulted from a call to icalrestriction_check(), which discovered -that the component does not have a DTSTART property, as required by -RFC5545. - -There are a few routines to manipulate error properties: - -[ The following data is supposed to be in a table. It looks OK in LyX, -but does not format properly in output. ] - -+-------------------------------------+---------------------------------------------------------+ -| Routine | Purpose | -+-------------------------------------+---------------------------------------------------------+ -| void icalrestriction_check() | Check a component against RFC5546 and insert | -+-------------------------------------+---------------------------------------------------------+ -| | error properties to indicate non compliance | -+-------------------------------------+---------------------------------------------------------+ -| int icalcomponent_count_errors() | Return the number of error properties | -+-------------------------------------+---------------------------------------------------------+ -| | in a component | -+-------------------------------------+---------------------------------------------------------+ -| void icalcomponent_strip_errors() | Remove all error properties in as | -+-------------------------------------+---------------------------------------------------------+ -| | component | -+-------------------------------------+---------------------------------------------------------+ -| void icalcomponent_convert_errors() | Convert some error properties into | -+-------------------------------------+---------------------------------------------------------+ -| | REQUESTS-STATUS proprties to indicate the inability to | -+-------------------------------------+---------------------------------------------------------+ -| | process the component as an iTIP request. | -+-------------------------------------+---------------------------------------------------------+ - - -The types of errors are listed in icalerror.h. They are: - -ICAL_XLICERRORTYPE_COMPONENTPARSEERROR - -ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR - -ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR - -ICAL_XLICERRORTYPE_PROPERTYPARSEERROR - -ICAL_XLICERRORTYPE_VALUEPARSEERROR - -ICAL_XLICERRORTYPE_UNKVCALPROP - -ICAL_XLICERRORTYPE_INVALIDITIP - -The libical parser will generate the error that end in PARSEERROR when -it encounters garbage in the input steam. ICAL_XLICERRORTYPE_INVALIDITIP -is inserted by icalrestriction_check(), and ICAL_XLICERRORTYPE_UNKVCALPROP -is generated by icalvcal_convert() when it encounters a vCal property -that it cannot convert or does not know about. - -Icalcomponent_convert_errors() converts some of the error properties -in a component into REQUEST-STATUS properties that indicate a failure. -As of libical version0.18, this routine only convert *PARSEERROR errors -and it always generates a 3.x ( failure ) code. This makes it more -of a good idea than a really useful bit of code. - -5.6.4 ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal - -If icalerror_get_errors_are_fatal() returns 1, then any error -condition will cause the program to abort. The abort occurs -in icalerror_set_errno(), and is done with an assert(0) if NDEBUG -is undefined, and with icalerror_crash_here if NDEBUG is defined. -Initially, icalerror_get_errors_are_fatal() is 1 when ICAL_ERRORS_ARE_FATAL -is defined, and 0 otherwise. Since ICAL_ERRORS_ARE_FATAL is defined -by default, icalerror_get_errors_are_fatal() is also set to 1 by default. - -You can change the compiled-in ICAL_ERRORS_ARE_FATAL behavior at runtime -by calling icalerror_set_errors_are_fatal(0) (i.e, errors are not fatal) -or icalerror_set_errors_are_fatal(1) (i.e, errors are fatal). - - -5.7 Naming Standard - -Structures that you access with the "struct" keyword, such as "struct -icaltimetype" are things that you are allowed to see inside and poke -at. - -Structures that you access though a typedef, such as "icalcomponent" -are things where all of the data is hidden. - -Component names that start with "V" are part of RFC 5545 or another -iCal standard. Component names that start with "X" are also part of -the spec, but they are not actually components in the spec. However, -they look and act like components, so they are components in libical. -Names that start with "XLIC" or "X-LIC" are not part of any iCal spec. -They are used internally by libical. - -Enums that identify a component, property, value or parameter end with -"_COMPONENT," "_PROPERTY," "_VALUE," or "_PARAMETER" - -Enums that identify a parameter value have the name of the parameter -as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. - -The enums for the parts of a recurrence rule and request statuses -are irregular. - -6 Hacks and Bugs - -There are a lot of hacks in the library -- bits of code that I am not -proud of and should probably be changed. These are marked with the -comment string "HACK." - -7 Library Reference - -7.1 Manipulating struct icaltimetype - -7.1.1 Struct icaltimetype - -struct icaltimetype - -{ - - int year; - - int month; - - int day; - - int hour; - - int minute; - - int second; - - int is_date; - - const char* zone; - -}; -- cgit v1.2.1 From cd23d3abe0cbc741dc69d9df92727ad137b751ea Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 20 Nov 2021 11:08:11 -0500 Subject: ReleaseNotes.txt - update --- ReleaseNotes.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 5cb02672..1911421b 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -8,6 +8,9 @@ Version 3.1.0 (NOT RELEASED YET): * libical-glib now requires glib 2.38 or higher * Improved FindICU (from the official CMake) * Allow previous recurrence iteration + * Improved performance of recurrence iterators + * METHOD:DECLINECOUNTER must have DTEND or DURATION + * Handle if DTEND and DURATION are both missing * All ical*_new_clone() functions have been deprecated in favour of ical*_clone() * New publicly available functions: + icalrecurrencetype_encode_day @@ -38,7 +41,6 @@ Version 3.1.0 (NOT RELEASED YET): (were in the public headers but not used at all) + struct icaltimezonetype + struct icaltimezonephase - * Improved performance of recurrence iterators Version 3.0.12 (UNRELEASED): ---------------------------- -- cgit v1.2.1 From c3cc9eef001090e4d82a234d4c989c907622b870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Mon, 8 Nov 2021 15:39:39 +0200 Subject: icalcomponent_get_duration() clarification in comment --- src/libical/icalcomponent.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index dd370caa..80d6703d 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -1437,7 +1437,7 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp) /** * FIXME * We assume DTSTART and DTEND are not in different time zones. - * Does the standard actually guarantee this? + * The standard actually allows different time zones. */ struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaltimetype end = icalcomponent_get_dtend(inner); -- cgit v1.2.1 From f2f2dc214601e01cbb1dde0589d9c2a749c64697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Mon, 8 Nov 2021 16:30:01 +0200 Subject: icalcomponent.c: handle the case, when DTEND and DURATION are missing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In icalcomponent_get_dtend(): • when both DTEND and DURATION are missing, set DTEND to DTSTART when the value-type of DTSTART is DATE-TIME, otherwise set DTEND = DTSTART + 1 day, when the value-type of DTSTART is DATE • throw an error, if both DTEND and DURATION are present, as it is done in icalcomponent_get_duration() In icalcomponent_get_duration(): • if DTEND and DURATION are missing and the value-type of DTSTART is DATE-TIME return zero duration; otherwise, if the value-type of DTSTART is DATE, return one day duration • do not throw an error, if DTEND and DURATION are missing In icalcomponent_get_span() account for the fact, that icalcomponent_get_dtend() returns the correct DTEND, based on the value-type of DTSTART, when DTEND is missing. Likewise for icalcomponent_foreach_recurrence(). Adjust test/regression-component.c to assume span.start == span.end, when the event has only DTSTART and its value-type is DATE-TIME. --- src/libical/icalcomponent.c | 47 +++++++++++++++++++++-------------------- src/test/regression-component.c | 2 +- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 80d6703d..ffb58237 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -657,24 +657,14 @@ or empty VCALENDAR component"); */ } span.start = icaltime_as_timet_with_zone(start, icaltimezone_get_utc_timezone()); - /* The end time could be specified as either a DTEND or a DURATION */ + /* The end time could be specified as either a DTEND, a DURATION, or be missing */ /* icalcomponent_get_dtend takes care of these cases. */ end = icalcomponent_get_dtend(comp); - if (icaltime_is_null_time(end)) { - if (!icaltime_is_date(start)) { - /* If dtstart is a DATE-TIME and there is no DTEND nor DURATION - it takes no time */ - span.start = 0; - return span; - } else { - end = start; - } - } span.end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone()); if (icaltime_is_date(start)) { /* Until the end of the day */ - span.end += 60 * 60 * 24 - 1; + span.end -= 1; } return span; @@ -822,16 +812,9 @@ void icalcomponent_foreach_recurrence(icalcomponent *comp, if (icaltime_is_null_time(dtstart)) return; - /* The end time could be specified as either a DTEND or a DURATION */ + /* The end time could be specified as either a DTEND, a DURATION or be missing */ /* icalcomponent_get_dtend takes care of these cases. */ dtend = icalcomponent_get_dtend(comp); - if (icaltime_is_null_time(dtend) && icaltime_is_date(dtstart)) { - /* No DTEND or DURATION and DTSTART is DATE - duration is 1 day */ - struct icaldurationtype dur = icaldurationtype_null_duration(); - - dur.days = 1; - dtend = icaltime_add(dtstart, dur); - } /* Now set up the base span for this item, corresponding to the base DTSTART and DTEND */ @@ -1356,11 +1339,11 @@ 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); - struct icaltimetype ret = icaltime_null_time(); + struct icaltimetype ret; - if (end_prop != 0) { + if (end_prop != 0 && dur_prop == 0) { ret = icalproperty_get_datetime_with_component(end_prop, comp); - } else if (dur_prop != 0) { + } else if (end_prop == 0 && dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); struct icaldurationtype duration; @@ -1373,6 +1356,19 @@ struct icaltimetype icalcomponent_get_dtend(icalcomponent *comp) } 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); + } else { + ret = start; + } + } else { + /* Error, both duration and dtend have been specified */ + icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); + ret = icaltime_null_time(); } return ret; @@ -1443,6 +1439,11 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp) 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.days = 1; + } } else { /* Error, both duration and dtend have been specified */ icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); diff --git a/src/test/regression-component.c b/src/test/regression-component.c index 3e147e9e..311cf1f8 100644 --- a/src/test/regression-component.c +++ b/src/test/regression-component.c @@ -448,7 +448,7 @@ void test_icalcomponent_get_span() if (VERBOSE) print_span(tnum++, span); - int_is("null span", (int)span.start, 0); + int_is("start == end", (int)span.start, span.end); icalcomponent_free(c); /** test 7 -- cgit v1.2.1 From dcbe03d0ab2a036cae1a796ab984af9cc615c44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Mon, 8 Nov 2021 20:40:55 +0200 Subject: restrictions.csv: DECLINECOUNTER,VEVENT: DURATION and DTEND are mutually exclusive My reading of https://datatracker.ietf.org/doc/html/rfc5546#section-3.2.8 is that for METHOD:DECLINECOUNTER either DTEND or DURATION must be present. If both are absent, the usual logic of calculating the end applies, based on the value-type of DTSTART. --- design-data/restrictions.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/design-data/restrictions.csv b/design-data/restrictions.csv index 439c9dc9..036210b3 100644 --- a/design-data/restrictions.csv +++ b/design-data/restrictions.csv @@ -184,7 +184,7 @@ CANCEL,VEVENT,CLASS,NONE,ZEROORONE CANCEL,VEVENT,CONTACT,NONE,ZEROPLUS CANCEL,VEVENT,CREATED,NONE,ZEROORONE CANCEL,VEVENT,DESCRIPTION,NONE,ZEROORONE -CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE ,no_duration +CANCEL,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration CANCEL,VEVENT,DTSTART,NONE,ZEROORONE CANCEL,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend CANCEL,VEVENT,EXDATE,NONE,ZEROPLUS @@ -316,9 +316,9 @@ DECLINECOUNTER,VEVENT,CLASS,NONE,ZERO DECLINECOUNTER,VEVENT,CONTACT,NONE,ZERO DECLINECOUNTER,VEVENT,CREATED,NONE,ZERO DECLINECOUNTER,VEVENT,DESCRIPTION,NONE,ZERO -DECLINECOUNTER,VEVENT,DTEND,NONE,ZERO +DECLINECOUNTER,VEVENT,DTEND,NONE,ONEEXCLUSIVE,no_duration DECLINECOUNTER,VEVENT,DTSTART,NONE,ZERO -DECLINECOUNTER,VEVENT,DURATION,NONE,ZERO +DECLINECOUNTER,VEVENT,DURATION,NONE,ONEEXCLUSIVE,no_dtend DECLINECOUNTER,VEVENT,EXDATE,NONE,ZERO DECLINECOUNTER,VEVENT,EXRULE,NONE,ZERO DECLINECOUNTER,VEVENT,GEO,NONE,ZERO -- cgit v1.2.1 From 25a9f5c0b59369ba97989297816dac403342b4b6 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 18 Nov 2021 06:50:17 -0500 Subject: icalcomponent.c: protect against NULL property values --- src/libical/icalcomponent.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index ffb58237..1a3655b9 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -2359,6 +2359,12 @@ void icalcomponent_set_due(icalcomponent *comp, struct icaltimetype v) } } +static int strcmpsafe(const char *a, const char *b) +{ + return strcmp((a == NULL ? "" : a), + (b == NULL ? "" : b)); +} + static int prop_compare(void *a, void *b) { icalproperty *p1 = (icalproperty*) a; @@ -2374,8 +2380,8 @@ static int prop_compare(void *a, void *b) } if (r == 0) { - r = strcmp(icalproperty_get_value_as_string(p1), - icalproperty_get_value_as_string(p2)); + r = strcmpsafe(icalproperty_get_value_as_string(p1), + icalproperty_get_value_as_string(p2)); } } -- cgit v1.2.1 From 291d3fefa809676eb892b4f0396b93451e99ea38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Thu, 18 Nov 2021 19:41:17 +0200 Subject: =?UTF-8?q?doc/UsingLibical.md=20=E2=80=93=20typos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/UsingLibical.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index e83d82b8..b25c74d9 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -712,7 +712,7 @@ their own. You can manipulate them either as part of the property or independently. The most common way to work with values to is to manipulate them from -they properties that contain them. This involves fewer routine calls +the properties that contain them. This involves fewer routine calls and intermediate variables than working with them independently, and it is type-safe. @@ -1109,8 +1109,8 @@ icalfileset* icalfileset_new_open( ``` `icalset_new_file()` is identical to `icalfileset_new()`. Both routines will -open an existing file for readinga and writing, or create a new file -if it does not exist. `icalfilset_new_open()` takes the same arguments +open an existing file for reading and writing, or create a new file +if it does not exist. `icalfileset_new_open()` takes the same arguments as the open() system routine and behaves in the same way. The icalset and icalfilset objects are somewhat interchangable -- you @@ -1274,7 +1274,7 @@ then the return value will be the same as icalerrno. You can use `icalerror_strerror()` to get a string that describes the error. The enumerations are: -- `ICAL_BADARG_ERROR`: One of the argument to a routine was bad. +- `ICAL_BADARG_ERROR`: One of the arguments to a routine was bad. Typically for a null pointer. - `ICAL_NEWFAILED_ERROR`: A `new()` or `malloc()` failed. @@ -1409,7 +1409,7 @@ Enums that identify a parameter value have the name of the parameter as the second word. For instance: `ICAL_ROLE_REQPARTICIPANT` or `ICAL_PARTSTAT_ACCEPTED`. -The enums for the parts of a recurarance rule and request statuses +The enums for the parts of a recurrence rule and request statuses are irregular. ## 6 Hacks and Bugs -- cgit v1.2.1 From 7efd54c14627bccb300c7b527b03490e9f61620b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 18 Nov 2021 18:14:36 -0500 Subject: Remove doc/UsingLibical.txt in favor of doc/UsingLibical.md no need to maintain 2 documetation files with the same content. --- CMakeLists.txt | 2 +- doc/UsingLibical.txt | 1369 -------------------------------------------------- 2 files changed, 1 insertion(+), 1370 deletions(-) delete mode 100644 doc/UsingLibical.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 151e54ba..462a52f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # This is the top-level CMakeLists.txt file for the libical project. # # Pass the following variables to cmake to control the build: -# (See doc/UsingLibical.txt for more information) +# (See doc/UsingLibical.md for more information) # # -DWITH_CXX_BINDINGS=[true|false] # Build the C++ bindings. diff --git a/doc/UsingLibical.txt b/doc/UsingLibical.txt deleted file mode 100644 index 0d5952a0..00000000 --- a/doc/UsingLibical.txt +++ /dev/null @@ -1,1369 +0,0 @@ - - -Using Libical - -Eric Busboom (eric@civicknowledge.com) - -January 2001 - - - -1 Introduction - -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 iCalendar extensions -in RFC6638; and some of RFC6047. - -This documentation assumes that you are familiar with the iCalendar -standards RFC5545 and RFC5546. These specifications are available -at the IETF tools website: - -https://tools.ietf.org/html/rfc5545 -https://tools.ietf.org/html/rfc5546 - -1.1 The libical project - -This code is under active development. If you would like to contribute -to the project, visit https://libical.github.io/libical/ - -1.2 License - -The code and datafiles in this distribution are licensed under the -Mozilla Public License version 2.0. See https://www.mozilla.org/MPL -for a copy of the license. Alternately, you may use libical under -the terms of the GNU Lesser General Public License, version 2.1. -See https://www.gnu.org/licenses/lgpl-2.1.html for a copy of the LGPL. - -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. - -1.3 Example Code - -A lot of the documentation for this library is in the form of example -code. These examples are in the "examples" directory of the distribution. -Also look in "src/test" for additional annotated examples. - -2 Building the Library - -Libical uses autoconf to generate makefiles. It should build with no -adjustments on Linux, FreeBSD and Solaris under gcc. Some version -have been successfully built on MacOS, Solaris, UnixWare, and -Tru64 UNIX without gcc, but you may run into problems with a particular -later version. - -For a more complete guide to building the library, see the README file -in the distribution. - -3 Structure - -The iCalendar data model is based on four types of objects: components, -properties, values and parameters. - -Properties are the fundamental unit of information in iCalendar, and they -work a bit like a hash entry, with a constant key and a variable value. -Properties may also have modifiers, called parameters. In the iCal -content line - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com - -The property name is "ORGANIZER", the value of the property is "mrbig@host.com" -and the "ROLE" parameter specifies that Mr Big is the chair of the -meetings associated with this property. - -Components are groups of properties that represent the core objects -of a calendar system, such as events or timezones. Components are -delimited by "BEGIN" and "END" tags. - -When a component is sent across a network, if it is un-encrypted, it -will look something like: - -BEGIN:VCALENDAR - -METHOD:REQUEST - -PRODID: -//hacksw/handcal//NONSGML v1.0//EN - -BEGIN:VEVENT - -DTSTAMP:19980309T231000Z - -UID:guid-1.host1.com - -ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com - -ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP: - - MAILTO:employee-A@host.com - -DESCRIPTION:Project XYZ Review Meeting - -CATEGORIES:MEETING - -CLASS:PUBLIC - -CREATED:19980309T130000Z - -SUMMARY:XYZ Project Review - -DTSTART;TZID=US-Eastern:19980312T083000 - -DTEND;TZID=US-Eastern:19980312T093000 - -LOCATION:1CP Conference Room 4350 - -END:VEVENT - -END:VCALENDAR - -Note that components can be nested; this example has both a VCALENDAR -and a VEVENT component, one nested inside the other. - -3.1 Core iCal classes - -Libical is an object-based, data-oriented library. Nearly all of the -routines in the library are associated with an opaque data types and -perform some operation on that data type. Although the library does -not actually have classes, we will use those terms since the behavior -of these associations of data and routines is very similar to a class. - -3.1.1 Properties - -Properties are represented with the icalproperty class and its many -"derived" classes with on "derived" class per property type in RFC5545. -Again, there is no actual inheritance relations, but there are clusters -of routines that make this term useful. A property is a container -for a single value and a set of parameters. - -3.1.2 Components - -In libical, components are represented with the icalcomponent class. -Icalcomponent is a container for a set of other components and properties. - -3.1.3 Values - -Values are represented in a similar way to properties; a base class -and many "derived" classes. A value is essentially a abstract handle -on a single fundamental type, a structure or a union. - -3.1.4 Parameters - -Parameters are represented in a similar way to properties, except that -they contain only one value. - -3.2 Other elements of libical - -In addition to the core iCal classes, libical has many other types, -structures, classes that aid in creating and using iCal components. - -3.2.1 Enumerations and types - -Libical is strongly typed, so every component, property, parameter, -and value type has an enumeration, and some have an associated structure -or union. - -3.2.2 The parser - -The libical parser offers a variety of ways to convert RFC5545 text -into a libical internal component structure. the parser can parse -blocks of text as a string, or it can parse line-by-line. - -3.2.3 Error objects - -Libical has a substantial error reporting system for both programming -errors and component usage errors. - -3.2.4 Memory Management - -Since many of libicals interfaces return strings, the library has its -own memory management system to elimiate the need to free every string -returned from the library. - -3.2.5 Storage classes - -The library also offers several classes to store components to files, -memory or databases. - -4 Differences From RFCs - -Libical has been designed to follow the standards as closely as possible, -so that the key objects in the standards are also key objects in the -library. However, there are a few areas where the specifications are -(arguably) irregular, and following them exactly would result in an -unfriendly interface. These deviations make libical easier to use -by maintaining a self-similar interface. - -4.1 Pseudo Components - -Libical defines components for groups of properties that look and act -like components, but are not defined as components in the specification. -XDAYLIGHT and XSTANDARD are notable examples. These pseudo components -group properties within the VTIMEZONE components. For instanace, the -timezone properties associated with daylight savings time starts with -"BEGIN:DAYLIGHT" and ends with "END:DAYLIGHT, just like other components, -but is not defined as a component in RFC5545 (see RFC5545, section 3.6.5) -In Libical,this grouping is represented by the XDAYLIGHT component. -Standard iCAL components all start with the letter "V," while pseudo -components start with "X." - -There are also pseudo components that are conceptually derived classes -of VALARM. RFC5546 defines what properties may be included in each -component, and for VALARM, the set of properties it may have depends -on the value of the ACTION property. - -For instance, if a VALARM component has an ACTION property with the -value of "AUDIO," the component must also have an "ATTACH" property. -However, if the ACTION value is "DISPLAY," the component must have -a DESCRIPTION property. - -To handle these various, complex restrictions, libical has pseudo components -for each type of alarm: XAUDIOALARM, XDISPLAYALARM, XEMAILALARM and -XPROCEDUREALARM. - -4.2 Combined Values - -Many values can take more than one type. TRIGGER, for instance, can -have a value type of with DURATION or of DATE-TIME. These multiple -types make it difficult to create routines to return the value associated -with a property. - -It is natural to have interfaces that would return the value of a property, -but it is cumbersome for a single routine to return multiple types. -So, in libical, properties that can have multiple types are given -a single type that is the union of their RFC5545 types. For instance, -in libical, the value of the TRIGGER property resolves to struct icaltriggertype. -This type is a union of a DURATION and a DATE-TIME. - -4.3 Multi-Valued Properties - -Some properties, such as CATEGORIES have only one value type, but each -CATEGORIES property can have multiple value instances. This also results -in a cumbersome interface -- CATEGORIES accessors would have to return -a list while all other accessors returned a single value. In libical, -all properties have a single value, and multi-valued properties are -broken down into multiple single valued properties during parsing. -That is, an input line like, - -CATEGORIES: work, home - -becomes in libical's internal representation - -CATEGORIES: work - -CATEGORIES: home - -Oddly, RFC5545 allows some multi-valued properties (like FREEBUSY) -to exist as both a multi-values property and as multiple single -value properties, while others (like CATEGORIES) can only exist -as single multi-valued properties. This makes the internal representation -for CATEGORIES illegal. However when you convert a component to a -string, the library will collect all of the CATEGORIES properties -into one. - -5 Using libical - -5.1 Creating Components - -There are three ways to create components in Libical: creating individual -objects and assembling them, building entire objects in massive vaargs -calls, and parsing a text file containing iCalendar data. - -5.1.1 Constructor Interfaces - -Using constructor interfaces, you create each of the objects separately -and then assemble them in to components: - -icalcomponent *event; - -icalproperty *prop; - -icalparameter *param; - -struct icaltimetype atime; - -event = icalcomponent_new(ICAL_VEVENT_COMPONENT); - -prop = icalproperty_new_dtstamp(atime) ; - -icalcomponent_add_property(event, prop); - -prop = icalproperty_new_uid(''guid-1.host1.com''); - -icalcomponent_add_property(event,prop); - -prop=icalproperty_new_organizer(''mrbig@host.com''); - -param = icalparameter_new_role(ICAL_ROLE_CHAIR) - -icalproperty_add_parameter(prop, param); - -icalcomponent_add_property(event,prop); - -Notice that libical uses a semi-object-oriented style of interface. -Most things you work with are objects, that are instantiated with -a constructor that has "new" in the name. Also note that, other than -the object reference, most structure data is passed in to libical -routines by value. Libical has some complex but very regular memory -handling rules. These are detailed in section [sec:memory]. - -If any of the constructors fail, they will return 0. If you try to -insert 0 into a property or component, or use a zero-valued object -reference, libical will either silently ignore the error or will abort -with an error message. This behavior is controlled by a compile time -flag (ICAL_ERRORS_ARE_FATAL), and will abort by default. - -5.1.2 varargs Constructors - -There is another way to create complex components, which is arguably -more elegant, if you are not horrified by varargs. The varargs constructor -interface allows you to create intricate components in a single block -of code. Here is the previous examples in the vaargs style. - - calendar = - - icalcomponent_vanew( - - ICAL_VCALENDAR_COMPONENT, - - icalproperty_new_version(''2.0''), - - icalproperty_new_prodid( - - ''-//RDU Software//NONSGML HandCal//EN''), - - icalcomponent_vanew( - - ICAL_VEVENT_COMPONENT, - - icalproperty_new_dtstamp(atime), - - icalproperty_new_uid(''guid-1.host1.com''), - - icalproperty_vanew_organizer( - - ''mrbig@host.com''), - - icalparameter_new_role(ICAL_ROLE_CHAIR), - - 0 - - ), - - icalproperty_vanew_attendee( - - ''employee-A@host.com'', - - icalparameter_new_role( - - ICAL_ROLE_REQPARTICIPANT), - - icalparameter_new_rsvp(1), - - icalparameter_new_cutype(ICAL_CUTYPE_GROUP), - - 0 - - ), - - icalproperty_new_location( - - "1CP Conference Room 4350"), - - 0 - - ), - - 0 - - ); - -This form is similar to the constructor form, except that the constructors -have "vanew" instead of "new" in the name. The arguments are similar -too, except that the component constructor can have a list of properties, -and the property constructor can have a list of parameters. Be sure -to terminate every list with a '0', or your code will crash, if you -are lucky. - -5.1.3 Parsing Text Files - -The final way to create components will probably be the most common; -you can create components from RFC5545 compliant text. If you have -the string in memory, use - -icalcomponent* icalparser_parse_string(char* str); - -If the string contains only one component, the parser will return the -component in libical form. If the string contains multiple components, -the multiple components will be returned as the children of an ICAL_XROOT_COMPONENT -component. - -Parsing a whole string may seem wasteful if you want to pull a large -component off of the network or from a file; you may prefer to parse -the component line by line. This is possible too by using: - -icalparser* icalparser_new(); - -void icalparser_free(icalparser* parser); - -icalparser_get_line(parser,read_stream); - -icalparser_add_line(parser,line); - -icalparser_set_gen_data(parser,stream) - -These routines will construct a parser object to which you can add -lines of input and retrieve any components that the parser creates -from the input. These routines work by specifing an adaptor routine -to get string data from a source. For an example: - -char* read_stream(char *s, size_t size, void *d) - -{ - - char *c = fgets(s,size, (FILE*)d); - - return c; - -} - -main() { - - char* line; - - icalcomponent *c; - - icalparser *parser = icalparser_new(); - - FILE* stream = fopen(argv[1],"r"); - - icalparser_set_gen_data(parser,stream); - - do { - - line = icalparser_get_line(parser,read_stream); - - c = icalparser_add_line(parser,line); - - if (c != 0){ - - printf("%s",icalcomponent_as_ical_string(c)); - - icalparser_claim(parser); - - printf("\n---------------\n"); - - icalcomponent_free(c); - - } - - } while (line != 0); - -} - -The parser object parameterizes the routine used to get input lines -with icalparser_set_gen_data() and icalparser_get_line(). In this -example, the routine read_stream() will fetch the next line from a -stream, with the stream passed in as the void* parameter d. The parser -calls read_stream() from icalparser_get_line(), but it also needs -to know what stream to use. This is set by the call to icalparser_set_gen_data(). -By using a different routine for read_stream or passing in different -data with icalparser_set_gen_data, you can connect to any data source. - -Using the same mechanism, other implementations could read from memory -buffers, sockets or other interfaces. - -Since the example code is a very common way to use the parser, there -is a convenience routine; - -icalcomponent* icalparser_parse(icalparser *parser, - - char* (*line_gen_func)(char *s, size_t size, void* d)) - -To use this routine, you still must construct the parser object and -pass in a reference to a line reading routine. If the parser can create -a single component from the input, it will return a pointer to the -newly constructed component. If the parser can construct multiple -components from the input, it will return a reference to an XROOT -component ( of type ICAL_XROOT_COMPONENT.) This XROOT component will -hold all of the components constructed from the input as children. - -5.2 Accessing Components - -Given a reference to a component, you probably will want to access -the properties, parameters and values inside. Libical interfaces let -you find sub-component, add and remove sub-components, and do the -same three operations on properties. - -5.2.1 Finding Components - -To find a sub-component of a component, use: - -icalcomponent* icalcomponent_get_first_component( - - icalcomponent* component, - - icalcomponent_kind kind); - -This routine will return a reference to the first component of the -type 'kind.' The key kind values, listed in icalenums.h are: - -ICAL_ANY_COMPONENT - -ICAL_VEVENT_COMPONENT - -ICAL_VTODO_COMPONENT - -ICAL_VJOURNAL_COMPONENT - -ICAL_VCALENDAR_COMPONENT - -ICAL_VFREEBUSY_COMPONENT - -ICAL_VALARM_COMPONENT - -These are only the most common components; there are many more listed -in icalenums.h. - -As you might guess, if there is more than one subcomponent of the type -you have chosen, this routine will return only the first. to get at -the others, you need to iterate through the component. - -5.2.2 Iterating Through Components - -Iteration requires a second routine to get the next subcomponent after -the first: - -icalcomponent* icalcomponent_get_next_component( - - icalcomponent* component, - - icalcomponent_kind kind); - -With the 'first' and 'next' routines, you can create a for loop to -iterate through all of a components subcomponents - - for(c = icalcomponent_get_first_component(comp,ICAL_ANY_COMPONENT); - - c != 0; - - c = icalcomponent_get_next_component(comp,ICAL_ANY_COMPONENT)) - -{ - - do_something(c); - -} - -This code bit wil iterate through all of the subcomponents in 'comp' -but you can select a specific type of component by changing ICAL_ANY_COMPONENT -to another component type. - -5.2.3 Using Component Iterators - -The iteration model in the previous section requires the component -to keep the state of the iteration. So, you could not use this model -to perform a sorting operations, since you'd need two iterators and -there is only space for one. If you ever call icalcomponent_get_first_component() -when an iteration is in progress, the pointer will be reset to the -beginning. - -To solve this problem, there are also external iterators for components. -The routines associated with these external iterators are: - -icalcompiter icalcomponent_begin_component(icalcomponent* component, -icalcomponent_kind kind); - -icalcompiter icalcomponent_end_component(icalcomponent* component, -icalcomponent_kind kind); - -icalcomponent* icalcompiter_next(icalcompiter* i); - -icalcomponent* icalcompiter_prior(icalcompiter* i); - -icalcomponent* icalcompiter_deref(icalcompiter* i); - -The _begin_() and _end_() routines return a new iterator that points -to the beginning and ending of the list of subcomponent for the given -component, and the kind argument works like the kind argument for -internal iterators. - -After creating an iterators, use _next_() and _prior_() to step forward -and backward through the list and get the component that the iterator -points to, and use _deref() to return the component that the iterator -points to without moving the iterator. All routines will return 0 -when they move to point off the end of the list. - -Here is an example of a loop using these routines: - -for( - - i = icalcomponent_begin_component(impl->cluster,ICAL_ANY_COMPONENT); - - icalcompiter_deref(&i)!= 0; - - icalcompiter_next(&i) - -) { - - icalcomponent *this = icalcompiter_deref(&i); - -} - -5.2.4 Removing Components - -Removing an element from a list while iterating through the list with -the internal iterators can cause problems, since you will probably -be removing the element that the internal iterator points to. The -_remove() routine will keep the iterator valid by moving it to the -next component, but in a normal loop, this will result in two advances -per iteration, and you will remove only every other component. To -avoid the problem, you will need to step the iterator ahead of the -element you are going to remove, like this: - -for(c = icalcomponent_get_first_component(parent_comp,ICAL_ANY_COMPONENT); - - c != 0; - - c = next - -{ - - next = icalcomponent_get_next_component(parent_comp,ICAL_ANY_COMPONENT); - - icalcomponent_remove_component(parent_comp,c); - -} - -Another way to remove components is to rely on the side effect of icalcomponent_remove_component: -if component iterator in the parent component is pointing to the child -that will be removed, it will move the iterator to the component after -the child. The following code will exploit this behavior: - -icalcomponent_get_first_component(parent_comp,ICAL_VEVENT_COMPONENT); - -while((c=icalcomponent_get_current_component(c)) != 0 ){ - - if(icalcomponent_isa(c) == ICAL_VEVENT_COMPONENT){ - - icalcomponent_remove_component(parent_comp,inner); - - } else { - - icalcomponent_get_next_component(parent_comp,ICAL_VEVENT_COMPONENT); - - } - -} - -5.2.5 Working with properties and parameters - -Finding, iterating and removing properties works the same as it does -for components, using the property-specific or parameter-specific -interfaces: - -icalproperty* icalcomponent_get_first_property( - - icalcomponent* component, - - icalproperty_kind kind); - -icalproperty* icalcomponent_get_next_property( - - icalcomponent* component, - - icalproperty_kind kind); - -void icalcomponent_add_property( - - icalcomponent* component, - - icalproperty* property); - -void icalcomponent_remove_property( - - icalcomponent* component, - - icalproperty* property); - -For parameters: - -icalparameter* icalproperty_get_first_parameter( - - icalproperty* prop, - - icalparameter_kind kind); - -icalparameter* icalproperty_get_next_parameter( - - icalproperty* prop, - - icalparameter_kind kind); - -void icalproperty_add_parameter( - - icalproperty* prop, - - icalparameter* parameter); - -void icalproperty_remove_parameter_by_kind( - - icalproperty* prop, - - icalparameter_kind kind); - -Note that since there should be only one parameter of each type in -a property, you will rarely need to use icalparameter_get_next_parameter. - -5.2.6 Working with values - -Values are typically part of a property, although they can exist on -their own. You can manipulate them either as part of the property -or independently. - -The most common way to work with values to is to manipulate them from -the properties that contain them. This involves fewer routine calls -and intermediate variables than working with them independently, and -it is type-safe. - -For each property, there are a _get_ and a _set_ routine that accesses -the internal value. For instanace, for the UID property, the routines -are: - -void icalproperty_set_uid(icalproperty* prop, const char* v) - -const char* icalproperty_get_uid(icalproperty* prop) - -For multi-valued properties, like ATTACH, the value type is usually -a struct or union that holds both possible types. - -If you want to work with the underlying value object, you can get and -set it with: - -icalvalue* icalproperty_get_value (icalproperty* prop) - -void icalproperty_set_value(icalproperty* prop, icalvalue* value); - -icalproperty_get_value() will return a reference that you can manipulate -with other icalvalue routines. Most of the time, you will have to -know what the type of the value is. For instance, if you know that -the value is a DATETIME type, you can manipulate it with: - -struct icaltimetype icalvalue_get_datetime(icalvalue* value); - -void icalvalue_set_datetime(icalvalue* value, struct icaltimetype v); - -When working with an extension property or value (and X-PROPERTY or -a property that has the parameter VALUE=x-name ) the value type is -always a string. To get and set the value, use: - -void icalproperty_set_x(icalproperty* prop, char* v); - -char* icalproperty_get_x(icalproperty* prop); - -All X properties have the type of ICAL_X_PROPERTY, so you will need -these routines to get and set the name of the property: - -char* icalproperty_get_x_name(icalproperty* prop) - -void icalproperty_set_x_name(icalproperty* prop, char* name); - -5.2.7 Checking Component Validity - -RFC 5546 defines rules for what properties must exist in a component -to be used for transferring scheduling data. Most of these rules relate -to the existence of properties relative to the METHOD property, which -declares what operation a remote receiver should use to process a -component. For instance, if the METHOD is REQUEST and the component -is a VEVENT, the sender is probably asking the receiver to join in -a meeting. In this case, RFC5546 says that the component must specify -a start time (DTSTART) and list the receiver as an attendee (ATTENDEE). - -Libical can check these restrictions with the routine: - -int icalrestriction_check(icalcomponent* comp); - -This routine returns 0 if the component does not pass RFC5546 restrictions, -or if the component is malformed. The component you pass in must be -a VCALENDAR, with one or more children, like the examples in RFC5546. - -When this routine runs, it will insert new properties into the component -to indicate any errors it finds. See section 6.5.3, X-LIC-ERROR for -more information about these error properties. - -5.2.8 Converting Components to Text - -To create an RFC5545 compliant text representation of an object, use -one of the *_as_ical_string() routines: - -char* icalcomponent_as_ical_string (icalcomponent* component) - -char* icalproperty_as_ical_string (icalproperty* property) - -char* icalparameter_as_ical_string (icalparameter* parameter) - -char* icalvalue_as_ical_string (icalvalue* value) - -In most cases, you will only use icalcomponent_as_ical_string (), since -it will cascade and convert all of the parameters, properties and -values that are attached to the root component. - -Remember that the string returned by these routines is owned by the -library, and will eventually be re-written. You should copy it if -you want to preserve it. - -5.3 Time - -5.3.1 Time structure - -Libical defines its own time structure for storing all dates and times. -It would have been nice to re-use the C library's struct tm, but that -structure does not differentiate between dates and times, and between -local time and UTC. The libical structure is: - -struct icaltimetype { - - int year; - - int month; - - int day; - - int hour; - - int minute; - - int second; - - int is_date; /* 1 -> interpret this as date. */ }; - -The year, month, day, hour, minute and second fields hold the broken-out -time values. The is_date field indicates if the time should -be interpreted only as a date. If it is a date, the hour, minute and -second fields are assumed to be zero, regardless of their actual vaules. - -5.3.2 Creating time structures - -There are several ways to create a new icaltimetype structure: - -struct icaltimetype icaltime_from_string(const char* str); - -struct icaltimetype icaltime_from_timet_with_zone(time_t v, - int is_date, - icaltimezone* zone); - -icaltime_from_string takes any RFC5545 compliant time string: - -struct icaltimetype tt = icaltime_from_string("19970101T103000"); - -icaltime_from_timet_with_zone takes a time_t value, representing seconds past -the POSIX epoch, a flag to indicate if the time is a date, and a time zone. -Dates have an identical structure to a time, but the time portion (hours, -minuts and seconds) is always 00:00:00. Dates act differently in -sorting and comparision, and they have a different string representation -in RFC5545. - -5.3.3 Time manipulating routines - -The null time value is used to indicate that the data in the structure -is not a valid time. - -struct icaltimetype icaltime_null_time(void); - -int icaltime_is_null_time(struct icaltimetype t); - -It is sensible for the broken-out time fields to contain values that -are not permitted in an ISO compliant time string. For instance, the -seconds field can hold values greater than 59, and the hours field -can hold values larger than 24. The excessive values will be rolled -over into the next larger field when the structure is normalized. - -struct icaltimetype icaltime_normalize(struct icaltimetype t); - -Normalizing allows you to do arithmetic operations on time values. - -struct icaltimetype tt = icaltime_from_string("19970101T103000"); - -tt.days +=3 - -tt.second += 70; - -tt = icaltime_normalize(tt); - -There are several routines to get the day of the week or month, etc, -from a time structure. - -short icaltime_day_of_year(struct icaltimetype t); - -struct icaltimetype icaltime_from_day_of_year(short doy, short year); - -short icaltime_day_of_week(struct icaltimetype t); - -short icaltime_start_doy_week(struct icaltimetype t, int fdow); - -short icaltime_week_number(short day_of_month, short month, short year); - -short icaltime_days_in_month(short month,short year); - -Two routines convert time structures to and from the number of seconds -since the POSIX epoch. The is_date field indicates whether or not -the hour, minute and second fields should be used in the conversion. - -struct icaltimetype icaltime_from_timet_with_zone(time_t v, - int is_date, - icaltimezone* zone); - -time_t icaltime_as_timet(struct icaltimetype); - -The compare routine works exactly like strcmp, but on time structures. - -int icaltime_compare(struct icaltimetype a,struct icaltimetype b); - -The following routines convert between UTC and a named timezone. The -tzid field must be a timezone name from the Olsen database, such as -"America/Los_Angeles." - -The utc_offset routine returns the offset of the named time zone from -UTC, in seconds. - -The tt parameter in the following routines indicates the date on which -the conversion should be made. The tt parameter is necessary because -timezones have many different rules for when daylight savings time -is used, and these rules can change over time. So, for a single timezone -one year may have daylight savings time on March 15, but for other -years March 15 may be standard time, and some years may have standard -time all year. - -int icaltime_utc_offset(struct icaltimetype tt, char* tzid); - -int icaltime_local_utc_offset(); - -struct icaltimetype icaltime_as_utc(struct icaltimetype tt,char* tzid); - -struct icaltimetype icaltime_as_zone(struct icaltimetype tt,char* tzid); - -struct icaltimetype icaltime_as_local(struct icaltimetype tt); - -5.4 Storing Objects - -The libical distribution includes a separate library, libicalss, that -allows you to store iCal component data to disk in a variety of ways. - -The file storage routines are organized in an inheritance heirarchy -that is rooted in icalset, with the derived class icalfileset and -icaldirset. Icalfileset stores components to a file, while icaldirset -stores components to multiple files, one per month based on DTSTAMP. -Other storages classess, for storage to a heap or a mysql database -for example, could be added in the future. - -All of the icalset derived classes have the same interface: - -icaldirset* icaldirset_new(const char* path); - -void icaldirset_free(icaldirset* store); - -const char* icaldirset_path(icaldirset* store); - -void icaldirset_mark(icaldirset* store); - -icalerrorenum icaldirset_commit(icaldirset* store); - -icalerrorenum icaldirset_add_component(icaldirset* store, icalcomponent* -comp); - -icalerrorenum icaldirset_remove_component(icaldirset* store, icalcomponent* -comp); - -int icaldirset_count_components(icaldirset* store, icalcomponent_kind -kind); - -icalerrorenum icaldirset_select(icaldirset* store, icalcomponent* gauge); - -void icaldirset_clear(icaldirset* store); - -icalcomponent* icaldirset_fetch(icaldirset* store, const char* uid); - -int icaldirset_has_uid(icaldirset* store, const char* uid); - -icalcomponent* icaldirset_fetch_match(icaldirset* set, icalcomponent -*c); - -icalerrorenum icaldirset_modify(icaldirset* store, icalcomponent *oldc, -icalcomponent *newc); - -icalcomponent* icaldirset_get_current_component(icaldirset* store); - -icalcomponent* icaldirset_get_first_component(icaldirset* store); - -icalcomponent* icaldirset_get_next_component(icaldirset* store); - -5.4.1 Creating a new set - -You can create a new set from either the base class or the direved -class. From the base class use one of: - -icalset* icalset_new_file(const char* path); - -icalset* icalset_new_dir(const char* path); - -icalset* icalset_new_heap(void); - -icalset* icalset_new_mysql(const char* path); - -You can also create a new set based on the derived class, For instance, -with icalfileset: - -icalfileset* icalfileset_new(const char* path); - -icalfileset* icalfileset_new_open(const char* path, int flags, int mode); - -icalset_new_file is identical to icalfileset_new. Both routines will -open an existing file for reading and writing, or create a new file -if it does not exist. Icalfileset_new_open takes the same arguments -as the open() system routine and behaves in the same way. - -The icalset and icalfilset objects are somewhat interchangable -- you -can use an icalfileset* as an argument to any of the icalset routines. - -The following examples will all use icalfileset routines; using the -other icalset derived classess will be similar. - -5.4.2 Adding, Finding and Removing Components - -To add components to a set, use: - -icalerrorenum icalfileset_add_component(icalfileset* cluster, icalcomponent* -child); - -The fileset keeps an inmemory copy of the components, and this set -must be written back to the file ocassionally. There are two routines -to manage this: - -void icalfileset_mark(icalfileset* cluster); - -icalerrorenum icalfileset_commit(icalfileset* cluster); - -icalfileset_mark indicates that the in-memory components have changed. -Calling the _add_component routine will call _mark automatically, -but you may need to call it yourself if you have made a change to -an existing component. The _commit routine writes the data base to -disk, but only if it is marked. The _commit routine is called automatically -when the icalfileset is freed. - -To iterate through the components in a set, use: - -icalcomponent* icalfileset_get_first_component(icalfileset* cluster); - -icalcomponent* icalfileset_get_next_component(icalfileset* cluster); - -icalcomponent* icalfileset_get_current_component (icalfileset* cluster); - -These routines work like the corresponding routines from icalcomponent, -except that their output is filtered through a gauge. A gauge is a -test for the properties within a components; only components that -pass the test are returned. A gauge can be constructed from a MINSQL -string with: - -icalgauge* icalgauge_new_from_sql(const char* sql); - -Then, you can add the gauge to the set with : - -icalerrorenum icalfileset_select(icalfileset* store, icalgauge* gauge); - -Here is an example that puts all of these routines together: - -void test_fileset() - -{ - - icalfileset *fs; - - icalcomponent *c; - - int i; - - char *path = "test_fileset.ics"; - - icalgauge *g = icalgauge_new_from_sql( - - "SELECT * FROM VEVENT WHERE DTSTART > '20000103T120000Z' AND -DTSTART <= '20000106T120000Z'"); - - - - fs = icalfileset_new(path); - - - - for (i = 0; i!= 10; i++){ - - c = make_component(i); /* Make a new component where DTSTART -has month of i */ - - icalfileset_add_component(fs,c); - - } - - icalfileset_commit(fs); /* Write to disk */ - - icalfileset_select(fs,g); /* Set the gauge to filter components -*/ - - - - for (c = icalfileset_get_first_component(fs); - - c != 0; - - c = icalfileset_get_next_component(fs)){ - - struct icaltimetype t = icalcomponent_get_dtstart(c); - - - - printf("%s\n",icaltime_as_ctime(t)); - - } - - icalfileset_free(fs); - -} - -5.4.3 Other routines - -There are several other routines in the icalset interface, but they -not fully implemented yet. - -5.5 Memory Management - -Libical relies heavily on dynamic allocation for both the core objects -and for the strings used to hold values. Some of this memory the library -caller owns and must free, and some of the memory is managed by the -library. Here is a summary of the memory rules. - -1) If the function name has "new" in it (such as icalcomponent_new(), - or icalpropert_new_clone()), the caller gets control - of the memory. - -2) If you got the memory from a routine with new in it, you must - call the corresponding *_free routine to free the memory. ( Use - icalcomponent_free() to free objects created with icalcomponent_new()) - -3) If the function name has "add" in it, the caller is transferring - control of the memory to the routine. ( icalproperty_add_parameter() ) - -4) If the function name has "remove" in it, the caller passes in - a pointer to an object and after the call returns, the caller owns - the object. So, before you call icalcomponent_remove_property(comp,foo), - you do not own "foo" and after the call returns, you do. - -5) If the routine returns a string and its name does NOT end in "_r", - libical owns the memory and will put it on a ring buffer to reclaim - later. For example, icalcomponent_as_ical_string(). You'd better - strdup() it if you want to keep it, and you don't have to delete it. - -6) If the routine returns a string and its name *does* end in "_r", the - caller gets control of the memory and is responsible for freeing it. - For example, icalcomponent_as_ical_string_r() does the same thing as - icalcomponent_as_ical_string(), except you now have control of the - string buffer it returns. - -5.6 Error Handling - -Libical has several error handling mechanisms for the various types -of programming, semantic and syntactic errors you may encounter. - -5.6.1 Return values - -Many library routines signal errors through their return values. All -routines that return a pointer, such as icalcomponent_new(), will -return 0 ( zero ) on a fatal error. Some routines will return a value -of enum icalerrorenum. - -5.6.2 icalerrno - -Most routines will set the global error value icalerrno on errors. -This variable is an enumeration; permissible values can be found in -libical/icalerror.h. If the routine returns an enum icalerrorenum, -then the return value will be the same as icalerrno. You can use icalerror_strerror() -to get a string that describes the error. The enumerations are: - -* ICAL_BADARG_ERROR -- One of the arguments to a routine was bad. Typically - for a null pointer. - -* ICAL_NEWFAILED_ERROR -- A new() or malloc() failed - -* ICAL_MALFORMEDDATA_ERROR -- An input string was not in the correct - format - -* ICAL_PARSE_ERROR -- The parser failed to parse an incoming component - -* ICAL_INTERNAL_ERROR -- Largely equivalent to an assert - -* ICAL_FILE_ERROR -- A file operation failed. Check errno for more - detail. - -* ICAL_ALLOCATION_ERROR -- ? - -* ICAL_USAGE_ERROR -- ? - -* ICAL_NO_ERROR -- No error - -* ICAL_MULTIPLEINCLUSION_ERROR -- ? - -* ICAL_TIMEDOUT_ERROR -- For CSTP and acquiring locks - -* ICAL_UNKNOWN_ERROR -- ? - -5.6.3 X-LIC-ERROR and X-LIC-INVALID-COMPONENT - -The library handles semantic and syntactic errors in components by -inserting errors properties into the components. If the parser cannot -parse incoming text ( a syntactic error ) or if the icalrestriction_check() -routine indicates that the component does not meet the requirements -of RFC5546 ( a semantic error ) the library will insert properties -of the type X-LIC-ERROR to describe the error. Here is an example -of the error property: - -X-LIC-ERROR;X-LIC-ERRORTYPE=INVALID_ITIP :Failed iTIP restrictions -for property DTSTART. - -Expected 1 instances of the property and got 0 - -This error resulted from a call to icalrestriction_check(), which discovered -that the component does not have a DTSTART property, as required by -RFC5545. - -There are a few routines to manipulate error properties: - -[ The following data is supposed to be in a table. It looks OK in LyX, -but does not format propertly in output. ] - -+-------------------------------------+---------------------------------------------------------+ -| Routine | Purpose | -+-------------------------------------+---------------------------------------------------------+ -| void icalrestriction_check() | Check a component against RFC5546 and insert | -+-------------------------------------+---------------------------------------------------------+ -| | error properties to indicate non compliance | -+-------------------------------------+---------------------------------------------------------+ -| int icalcomponent_count_errors() | Return the number of error properties | -+-------------------------------------+---------------------------------------------------------+ -| | in a component | -+-------------------------------------+---------------------------------------------------------+ -| void icalcomponent_strip_errors() | Remove all error properties in as | -+-------------------------------------+---------------------------------------------------------+ -| | component | -+-------------------------------------+---------------------------------------------------------+ -| void icalcomponent_convert_errors() | Convert some error properties into | -+-------------------------------------+---------------------------------------------------------+ -| | REQUESTS-STATUS proprties to indicate the inability to | -+-------------------------------------+---------------------------------------------------------+ -| | process the component as an iTIP request. | -+-------------------------------------+---------------------------------------------------------+ - - -The types of errors are listed in icalerror.h. They are: - -ICAL_XLICERRORTYPE_COMPONENTPARSEERROR - -ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR - -ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR - -ICAL_XLICERRORTYPE_PROPERTYPARSEERROR - -ICAL_XLICERRORTYPE_VALUEPARSEERROR - -ICAL_XLICERRORTYPE_UNKVCALPROP - -ICAL_XLICERRORTYPE_INVALIDITIP - -The libical parser will generate the error that end in PARSEERROR when -it encounters garbage in the input steam. ICAL_XLICERRORTYPE_INVALIDITIP -is inserted by icalrestriction_check(), and ICAL_XLICERRORTYPE_UNKVCALPROP -is generated by icalvcal_convert() when it encounters a vCal property -that it cannot convert or does not know about. - -Icalcomponent_convert_errors() converts some of the error properties -in a component into REQUEST-STATUS properties that indicate a failure. -As of libical version0.18, this routine only convert *PARSEERROR errors -and it always generates a 3.x ( failure ) code. This makes it more -of a good idea than a really useful bit of code. - -5.6.4 ICAL_ERRORS_ARE_FATAL and icalerror_errors_are_fatal - -If icalerror_get_errors_are_fatal() returns 1, then any error -condition will cause the program to abort. The abort occurs -in icalerror_set_errno(), and is done with an assert(0) if NDEBUG -is undefined, and with icalerror_crash_here if NDEBUG is defined. -Initially, icalerror_get_errors_are_fatal() is 1 when ICAL_ERRORS_ARE_FATAL -is defined, and 0 otherwise. Since ICAL_ERRORS_ARE_FATAL is defined -by default, icalerror_get_errors_are_fatal() is also set to 1 by default. - -You can change the compiled-in ICAL_ERRORS_ARE_FATAL behavior at runtime -by calling icalerror_set_errors_are_fatal(0) (i.e, errors are not fatal) -or icalerror_set_errors_are_fatal(1) (i.e, errors are fatal). - - -5.7 Naming Standard - -Structures that you access with the "struct" keyword, such as "struct -icaltimetype" are things that you are allowed to see inside and poke -at. - -Structures that you access though a typedef, such as "icalcomponent" -are things where all of the data is hidden. - -Component names that start with "V" are part of RFC 5545 or another -iCal standard. Component names that start with "X" are also part of -the spec, but they are not actually components in the spec. However, -they look and act like components, so they are components in libical. -Names that start with "XLIC" or "X-LIC" are not part of any iCal spec. -They are used internally by libical. - -Enums that identify a component, property, value or parameter end with -"_COMPONENT," "_PROPERTY," "_VALUE," or "_PARAMETER" - -Enums that identify a parameter value have the name of the parameter -as the second word. For instance: ICAL_ROLE_REQPARTICIPANT or ICAL_PARTSTAT_ACCEPTED. - -The enums for the parts of a recurrence rule and request statuses -are irregular. - -6 Hacks and Bugs - -There are a lot of hacks in the library -- bits of code that I am not -proud of and should probably be changed. These are marked with the -comment string "HACK." - -7 Library Reference - -7.1 Manipulating struct icaltimetype - -7.1.1 Struct icaltimetype - -struct icaltimetype - -{ - - int year; - - int month; - - int day; - - int hour; - - int minute; - - int second; - - int is_date; - - const char* zone; - -}; -- cgit v1.2.1 From 4af3a94ff10b4877df2897e91ebfbdd7106a8204 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 20 Nov 2021 11:08:11 -0500 Subject: ReleaseNotes.txt - update --- ReleaseNotes.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 8950aea3..ddad27ab 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -4,6 +4,8 @@ Release Highlights Version 3.0.12 (UNRELEASED): --------------------------------- * Improved FindICU (copied from official CMake. see files in cmake/Kitware) + * METHOD:DECLINECOUNTER must have DTEND or DURATION + * Handle if DTEND and DURATION are both missing Version 3.0.11 (09 October 2021): --------------------------------- -- cgit v1.2.1 From f67777be914326d37abf537df707f57a926c1543 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Thu, 11 Nov 2021 17:01:37 +0100 Subject: generator.c - Handle the optional parameter Do not return if the value is null for optional parameters as it is explicitly allowed. --- src/libical-glib/tools/generator.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/src/libical-glib/tools/generator.c b/src/libical-glib/tools/generator.c index b05c2153..f00d6ec8 100644 --- a/src/libical-glib/tools/generator.c +++ b/src/libical-glib/tools/generator.c @@ -1597,6 +1597,20 @@ gchar *get_translator_for_return(Ret *ret) return res; } +static gboolean parameter_is_out(Parameter *para) +{ + GList *link; + for (link = para->annotations; link; link = g_list_next(link)) { + if (g_strcmp0(link->data, "out") == 0 || + g_strcmp0(link->data, "inout") == 0 || + g_str_has_prefix(link->data, "out ")) { + break; + } + } + + return link != NULL; +} + static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */ { GList *link; @@ -1611,6 +1625,19 @@ static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */ return link != NULL; } +static gboolean annotation_contains_optional(GList *annotations) /* gchar * */ +{ + GList *link; + + for (link = annotations; link; link = g_list_next(link)) { + if (g_strcmp0(link->data, "optional") == 0) { + break; + } + } + + return link != NULL; +} + gchar *get_inline_parameter(Parameter *para) { gchar *buffer; @@ -2055,6 +2082,7 @@ gchar *get_source_run_time_checkers(Method *method, const gchar *namespace) gchar *defaultValue; gchar *retTrueType; guint namespace_len; + gboolean param_is_out; g_return_val_if_fail(method != NULL, NULL); g_return_val_if_fail(namespace != NULL && *namespace != '\0', NULL); @@ -2117,7 +2145,10 @@ gchar *get_source_run_time_checkers(Method *method, const gchar *namespace) (void)g_stpcpy(buffer + strlen(buffer), "\n"); } - if (i != namespace_len && !annotation_contains_nullable(parameter->annotations)) { + param_is_out = parameter_is_out(parameter); + if (i != namespace_len && ( + (!param_is_out && !annotation_contains_nullable(parameter->annotations)) || + (param_is_out && !annotation_contains_optional(parameter->annotations)))) { (void)g_stpcpy(buffer + strlen(buffer), "\t"); if (method->ret != NULL) { (void)g_stpcpy(buffer + strlen(buffer), "g_return_val_if_fail ("); -- cgit v1.2.1 From 48b86db9c806c883ce4a50e24570a03f9443a16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20No=C3=ABl?= Date: Thu, 11 Nov 2021 16:39:12 +0100 Subject: libical-glib: Get rid of all the allow-none annotations allow-none has been deprecated and replaced by either nullable or optional. --- src/libical-glib/api/i-cal-array.xml | 2 +- src/libical-glib/api/i-cal-attach.xml | 6 +-- src/libical-glib/api/i-cal-component.xml | 2 +- src/libical-glib/api/i-cal-derived-parameter.xml | 50 ++++++++++++------------ src/libical-glib/api/i-cal-derived-value.xml | 36 ++++++++--------- src/libical-glib/api/i-cal-parameter.xml | 8 ++-- src/libical-glib/api/i-cal-parser.xml | 6 +-- src/libical-glib/api/i-cal-time.xml | 2 +- src/libical-glib/api/i-cal-timezone.xml | 2 +- src/libical-glib/api/i-cal-value.xml | 4 +- src/libical-glib/i-cal-object.c.in | 6 +-- src/libical-glib/tools/generator.c | 3 +- 12 files changed, 63 insertions(+), 64 deletions(-) diff --git a/src/libical-glib/api/i-cal-array.xml b/src/libical-glib/api/i-cal-array.xml index 12b9c676..70e678c0 100644 --- a/src/libical-glib/api/i-cal-array.xml +++ b/src/libical-glib/api/i-cal-array.xml @@ -54,7 +54,7 @@ - + Gets the element located in the @position in the @array. NULL if position if out of bound. diff --git a/src/libical-glib/api/i-cal-attach.xml b/src/libical-glib/api/i-cal-attach.xml index 816de1e3..d361ee81 100644 --- a/src/libical-glib/api/i-cal-attach.xml +++ b/src/libical-glib/api/i-cal-attach.xml @@ -21,8 +21,8 @@ - - + + Creates a new #ICalAttach from the data. g_return_val_if_fail (data != NULL, NULL); @@ -62,7 +62,7 @@ static void unref_g_bytes(char *data, void *user_data) - + Gets the url, if the #ICalAttach is built from the url. diff --git a/src/libical-glib/api/i-cal-component.xml b/src/libical-glib/api/i-cal-component.xml index ebe9e11e..0f8bba47 100644 --- a/src/libical-glib/api/i-cal-component.xml +++ b/src/libical-glib/api/i-cal-component.xml @@ -550,7 +550,7 @@ static void foreach_recurrence_cb(icalcomponent *in_comp, struct icaltime_span * - + Returns the icaltimezone in the component corresponding to the TZID, or NULL if it can't be found. diff --git a/src/libical-glib/api/i-cal-derived-parameter.xml b/src/libical-glib/api/i-cal-derived-parameter.xml index 1a309e4a..54122a0d 100644 --- a/src/libical-glib/api/i-cal-derived-parameter.xml +++ b/src/libical-glib/api/i-cal-derived-parameter.xml @@ -247,7 +247,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -277,7 +277,7 @@ - + @@ -292,7 +292,7 @@ - + @@ -307,7 +307,7 @@ - + @@ -322,7 +322,7 @@ - + @@ -337,7 +337,7 @@ - + @@ -397,7 +397,7 @@ - + @@ -412,7 +412,7 @@ - + @@ -427,7 +427,7 @@ - + @@ -442,7 +442,7 @@ - + @@ -457,7 +457,7 @@ - + @@ -472,7 +472,7 @@ - + @@ -502,7 +502,7 @@ - + @@ -517,7 +517,7 @@ - + @@ -532,7 +532,7 @@ - + @@ -547,7 +547,7 @@ - + @@ -562,7 +562,7 @@ - + @@ -592,7 +592,7 @@ - + @@ -622,7 +622,7 @@ - + @@ -757,7 +757,7 @@ - + @@ -772,7 +772,7 @@ - + @@ -787,7 +787,7 @@ - + @@ -832,7 +832,7 @@ - + @@ -862,7 +862,7 @@ - + diff --git a/src/libical-glib/api/i-cal-derived-value.xml b/src/libical-glib/api/i-cal-derived-value.xml index aa58a233..5f965756 100644 --- a/src/libical-glib/api/i-cal-derived-value.xml +++ b/src/libical-glib/api/i-cal-derived-value.xml @@ -210,7 +210,7 @@ - + Gets the x of #ICalValue. @@ -225,7 +225,7 @@ - + Gets the recur of #ICalValue. @@ -240,7 +240,7 @@ - + Gets the trigger of #ICalValue. @@ -255,7 +255,7 @@ - + Gets the datetime of #ICalValue. @@ -270,7 +270,7 @@ - + Gets the datetimedate (DATE-TIME or DATE) of #ICalValue. @@ -285,7 +285,7 @@ - + Gets the datetimeperiod of #ICalValue. @@ -300,7 +300,7 @@ - + Gets the geo of #ICalValue. @@ -315,7 +315,7 @@ - + Gets the attach of #ICalValue. @@ -454,7 +454,7 @@ - + Gets the caladdress of #ICalValue. @@ -469,7 +469,7 @@ - + Gets the period of #ICalValue. @@ -499,7 +499,7 @@ - + Gets the binary of #ICalValue. @@ -514,7 +514,7 @@ - + Gets the text of #ICalValue. @@ -529,7 +529,7 @@ - + Gets the duration of #ICalValue. @@ -559,7 +559,7 @@ - + Gets the uri of #ICalValue. @@ -604,7 +604,7 @@ - + Gets the query of #ICalValue. @@ -619,7 +619,7 @@ - + Gets the string of #ICalValue. @@ -649,7 +649,7 @@ - + Gets the requeststatus of #ICalValue. @@ -664,7 +664,7 @@ - + Gets the date of #ICalValue. diff --git a/src/libical-glib/api/i-cal-parameter.xml b/src/libical-glib/api/i-cal-parameter.xml index ec9b17ff..1595d5eb 100644 --- a/src/libical-glib/api/i-cal-parameter.xml +++ b/src/libical-glib/api/i-cal-parameter.xml @@ -61,7 +61,7 @@ - + Gets the xname property of the native part of the #ICalParameter. @@ -71,7 +71,7 @@ - + Gets the xvalue property of the native part of the #ICalParameter. @@ -81,7 +81,7 @@ - + Gets the iana_name property of the native part of the #ICalParameter. @@ -91,7 +91,7 @@ - + Gets the iana_value property of the native part of the #ICalParameter. diff --git a/src/libical-glib/api/i-cal-parser.xml b/src/libical-glib/api/i-cal-parser.xml index 7e901de2..ede94772 100644 --- a/src/libical-glib/api/i-cal-parser.xml +++ b/src/libical-glib/api/i-cal-parser.xml @@ -36,13 +36,13 @@ typedef gchar *(*ICalParserLineGenFunc)(gchar *bytes, size_t size, gpointer user - - + + Add a line at one time into the #ICalParser until the parsing is complete and #ICalComponent will be returned. - + We won't get a clean exit if some components did not have an "END" tag. Clear off any component that may be left in the list. diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index 570777d7..dcab62e3 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -95,7 +95,7 @@ - + Returns the tzid, or NULL for a floating time. diff --git a/src/libical-glib/api/i-cal-timezone.xml b/src/libical-glib/api/i-cal-timezone.xml index dfa4140d..0900e612 100644 --- a/src/libical-glib/api/i-cal-timezone.xml +++ b/src/libical-glib/api/i-cal-timezone.xml @@ -15,7 +15,7 @@ --> - + The constructor of the type #ICalTimezone. diff --git a/src/libical-glib/api/i-cal-value.xml b/src/libical-glib/api/i-cal-value.xml index dc8bcf50..2fd33dff 100644 --- a/src/libical-glib/api/i-cal-value.xml +++ b/src/libical-glib/api/i-cal-value.xml @@ -77,7 +77,7 @@ - + Encodes a character string in ical format, escape certain characters, etc. gchar *szEncText; gchar *buffer = NULL; @@ -98,7 +98,7 @@ - + Extracts the original character string encoded by the above function. gchar *szDecText; gchar *buffer = NULL; diff --git a/src/libical-glib/i-cal-object.c.in b/src/libical-glib/i-cal-object.c.in index f6633919..e5186106 100644 --- a/src/libical-glib/i-cal-object.c.in +++ b/src/libical-glib/i-cal-object.c.in @@ -330,7 +330,7 @@ static void i_cal_object_init(ICalObject *iobject) * @native: a native libical structure * @native_destroy_func: a function to be called on @native when it should be freed * @is_global_memory: whether @native is a global shared memory structure - * @owner: (allow-none): an owner of @native + * @owner: (nullable): an owner of @native * * Creates an #ICalObject descendant of type @type and initialize private members * of it. The descendants should call this function in their _new() function, or use @@ -587,8 +587,8 @@ void i_cal_object_set_owner(ICalObject *iobject, GObject *owner) * if not NULL, is referenced for thread safety. Unref it with g_object_unref * when done with it. * - * Returns: (transfer full) (allow-none): Current owner of the libical - * native structure. returns NULL, when there is no owner. + * Returns: (transfer full) (nullable): Current owner of the libical + * native structure. Returns %NULL when there is no owner. * * Since: 1.0 **/ diff --git a/src/libical-glib/tools/generator.c b/src/libical-glib/tools/generator.c index f00d6ec8..694c5fd0 100644 --- a/src/libical-glib/tools/generator.c +++ b/src/libical-glib/tools/generator.c @@ -1616,8 +1616,7 @@ static gboolean annotation_contains_nullable(GList *annotations) /* gchar * */ GList *link; for (link = annotations; link; link = g_list_next(link)) { - if (g_strcmp0(link->data, "allow-none") == 0 || - g_strcmp0(link->data, "nullable") == 0) { + if (g_strcmp0(link->data, "nullable") == 0) { break; } } -- cgit v1.2.1 From b9e177c8603fd5e535d72e8dd6e39e84b09c854e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dawid=20Wro=CC=81bel?= Date: Thu, 25 Nov 2021 16:49:30 +0100 Subject: Fix building libical-glib when STATIC_ONLY is enabled. Fixes #527 --- src/libical-glib/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt index f734024e..de5e6210 100644 --- a/src/libical-glib/CMakeLists.txt +++ b/src/libical-glib/CMakeLists.txt @@ -121,7 +121,7 @@ add_dependencies(ical-glib ical-header) target_compile_options(ical-glib PRIVATE ${GLIB_CFLAGS}) target_compile_definitions(ical-glib PRIVATE -DG_LOG_DOMAIN="libical-glib" -DLIBICAL_GLIB_COMPILATION) target_link_libraries(ical-glib PRIVATE ical ${GLIB_LIBRARIES}) -if(NOT SHARED_ONLY) +if(NOT SHARED_ONLY AND NOT STATIC_ONLY) add_library(ical-glib-static STATIC ${LIBICAL_GLIB_SOURCES}) add_dependencies(ical-glib-static ical-header) target_compile_options(ical-glib-static PUBLIC ${GLIB_CFLAGS} -DG_LOG_DOMAIN="libical-glib" -DLIBICAL_GLIB_COMPILATION) @@ -217,11 +217,11 @@ endif() if(MSVC) set_target_properties(ical-glib PROPERTIES PREFIX "lib") - if(NOT SHARED_ONLY) + if(NOT SHARED_ONLY AND NOT STATIC_ONLY) set_target_properties(ical-glib-static PROPERTIES PREFIX "lib") endif() else() - if(NOT SHARED_ONLY) + if(NOT SHARED_ONLY AND NOT STATIC_ONLY) set_target_properties(ical-glib-static PROPERTIES OUTPUT_NAME "ical-glib") endif() endif() @@ -230,7 +230,7 @@ set_target_properties(ical-glib PROPERTIES SOVERSION ${LIBICAL_LIB_MAJOR_VERSION} ) set_target_properties(ical-glib PROPERTIES CLEAN_DIRECT_OUTPUT 1) -if(NOT SHARED_ONLY) +if(NOT SHARED_ONLY AND NOT STATIC_ONLY) set_target_properties(ical-glib-static PROPERTIES CLEAN_DIRECT_OUTPUT 1) endif() @@ -239,7 +239,7 @@ install( EXPORT icalTargets DESTINATION ${INSTALL_TARGETS_DEFAULT_ARGS} ) -if(NOT SHARED_ONLY) +if(NOT SHARED_ONLY AND NOT STATIC_ONLY) install( TARGETS ical-glib-static EXPORT icalTargets -- cgit v1.2.1 From adf25615bd350d22897db6ea62f7f89842a6338b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 27 Nov 2021 06:44:09 -0500 Subject: CMakeLists.txt - Disallow Vala with STATIC_ONLY --- CMakeLists.txt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 462a52f1..d31b325e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ # # -DSTATIC_ONLY=[true|false] # Set to build static libraries only. -# Turns-off GObject Introspection. +# Not available for GObject Introspection and Vala "vapi" # Default=false (build shared and static libs) # # -DSHARED_ONLY=[true|false] @@ -406,6 +406,14 @@ add_feature_info( "build Vala \"vapi\" files" ) if(ICAL_GLIB_VAPI) + if(STATIC_ONLY) + message(FATAL_ERROR + "You are attempting to build the Vala api, however that option is not supported " + "when building static libraries only. " + "Please disable the static only option (-DSTATIC_ONLY=False) " + "if you really want to build the Vala api. Alternatively, " + "you can disable this feature (by passing -DICAL_GLIB_VAPI=False to cmake).") + endif() if(NOT GOBJECT_INTROSPECTION) message(FATAL_ERROR "You requested to build the Vala vapi but have not enabled the GObject Introspection. " -- cgit v1.2.1 From 9827b909830eb02a1eab38e783db9d61d9a05de1 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 27 Nov 2021 08:51:39 -0500 Subject: buildsystem - disable building Gtk docs with STATIC_ONLY --- cmake/modules/GtkDoc.cmake | 6 ------ doc/reference/libical-glib/CMakeLists.txt | 17 ++++++++++++++++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake index 03ff3cef..2cf76aaa 100644 --- a/cmake/modules/GtkDoc.cmake +++ b/cmake/modules/GtkDoc.cmake @@ -18,12 +18,6 @@ # It also adds custom target gtkdoc-rebuild-${_module}-sgml to rebuild the sgml.in # file based on the current sources. -option(ENABLE_GTK_DOC "Use gtk-doc to build documentation" True) - -if(NOT ENABLE_GTK_DOC) - return() -endif() - find_program(GTKDOC_SCAN gtkdoc-scan) find_program(GTKDOC_SCANGOBJ gtkdoc-scangobj) find_program(GTKDOC_MKDB gtkdoc-mkdb) diff --git a/doc/reference/libical-glib/CMakeLists.txt b/doc/reference/libical-glib/CMakeLists.txt index ca58244c..c4f8b594 100644 --- a/doc/reference/libical-glib/CMakeLists.txt +++ b/doc/reference/libical-glib/CMakeLists.txt @@ -1,4 +1,18 @@ -include(GtkDoc) + +option(ENABLE_GTK_DOC "Use gtk-doc to build documentation" True) + +if(NOT ENABLE_GTK_DOC) + return() +endif() + +if(STATIC_ONLY) + message(FATAL_ERROR + "You are attempting to build the Gtk docs, " + "however that option is not supported when building static libraries only. " + "Please disable the static only option (-DSTATIC_ONLY=False) " + "if you really want to build the Gtk docs. Alternatively, you can " + "disable building Gtk docs (by passing -DENABLE_GTK_DOC=False to cmake).") +endif() # To regenerate libical-glib-docs.xml.in from current sources use these steps: # a) delete ${CMAKE_CURRENT_BINARY_DIR}/libical-glib-docs.xml @@ -15,6 +29,7 @@ include(GtkDoc) # like the replacement of the "[Insert title here]" and the content if(ENABLE_GTK_DOC) + include(GtkDoc) set(SOURCEDIRS ${CMAKE_BINARY_DIR}/src/libical-glib -- cgit v1.2.1 From 09833740ec7bbb445adb1e3cad425c785622f430 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 27 Nov 2021 08:52:23 -0500 Subject: scripts/buildtests.sh - add more build test for Ninja --- scripts/buildtests.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 7cf375c2..fc7d56f1 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -582,13 +582,18 @@ GCC_BUILD testgcc2builtin "$TZCMAKEOPTS" #Ninja build tests NINJA_GCC_BUILD testninjagcc1 "" -NINJA_GCC_BUILD testninjagcc2 "-DSHARED_ONLY=True" -NINJA_GCC_BUILD testninjagcc3 "-DSTATIC_ONLY=True -DICAL_GLIB=False" +NINJA_GCC_BUILD testninjagcc2 "-DICAL_GLIB=True" +NINJA_GCC_BUILD testninjagcc3 "-DICAL_GLIB=True -DICAL_GLIB_VAPI=ON -DGOBJECT_INTROSPECTION=True" +NINJA_GCC_BUILD testninjagcc4 "-DSHARED_ONLY=True -DICAL_GLIB=False" +NINJA_GCC_BUILD testninjagcc5 "-DSHARED_ONLY=True -DICAL_GLIB=True" +NINJA_GCC_BUILD testninjagcc6 "-DSTATIC_ONLY=True -DICAL_GLIB=False" +NINJA_GCC_BUILD testninjagcc7 "-DSTATIC_ONLY=True -DICAL_GLIB=True -DENABLE_GTK_DOC=False" +NINJA_GCC_BUILD testninjagcc9 "-DSHARED_ONLY=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DICAL_GLIB_VAPI=ON" CLANG_BUILD testclang1 "" CLANG_BUILD testclang2 "$CMAKEOPTS" CLANG_BUILD testclang3 "$UUCCMAKEOPTS" -#broken with clang7 on Fedora29 CLANG_BUILD testclang4glib "$GLIBOPTS" +CLANG_BUILD testclang4glib "$GLIBOPTS" if (test "`uname -s`" = "Linux") then echo "Temporarily disable cross-compile tests" -- cgit v1.2.1 From ca908f9971992dbc244381962a101238bd5dcead Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 27 Nov 2021 08:52:44 -0500 Subject: ReleaseNotes.txt - mention buildsystem fixes for Ninja --- ReleaseNotes.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index ddad27ab..dfad6610 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -2,10 +2,11 @@ Release Highlights ================== Version 3.0.12 (UNRELEASED): ---------------------------------- +---------------------------- * Improved FindICU (copied from official CMake. see files in cmake/Kitware) * METHOD:DECLINECOUNTER must have DTEND or DURATION * Handle if DTEND and DURATION are both missing + * Buildsystem fixes (especially for the Ninja generator) Version 3.0.11 (09 October 2021): --------------------------------- -- cgit v1.2.1 From 3ae9e9f3ee6f39c00af68763c08e22b13b7c45f0 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 15 Aug 2021 11:22:24 -0400 Subject: .codespellrc - add codespell configuration --- .codespellrc | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .codespellrc diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 00000000..e9bf3cdd --- /dev/null +++ b/.codespellrc @@ -0,0 +1,4 @@ +[codespell] +skip = ./build-*,.git,test-data,zoneinfo,regression.c +interactive = 3 +ignore-words-list = inout,gir,parameterizes,yau,crasher -- cgit v1.2.1 From 2a0062a88ae3c2658bbd9dc0dc2b6ac03c59568e Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 28 Nov 2021 12:47:57 -0500 Subject: scripts/buildtests.sh - pass '-badflag' to splint --- scripts/buildtests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index fc7d56f1..4d747634 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -351,6 +351,7 @@ SPLINT() { files="$files $BDIR/src/libical/*.c $BDIR/src/libical/*.h" splint $files \ + -badflag \ -weak -warnposix \ -modobserver -initallelements -redef \ -linelen 1000 \ -- cgit v1.2.1 From 8644f0fb781daa66de4186ead5ebfe4fba581ac9 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 28 Nov 2021 12:48:28 -0500 Subject: .codespellrc - whitelist "Thur" --- .codespellrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codespellrc b/.codespellrc index e9bf3cdd..722fb2d9 100644 --- a/.codespellrc +++ b/.codespellrc @@ -1,4 +1,4 @@ [codespell] skip = ./build-*,.git,test-data,zoneinfo,regression.c interactive = 3 -ignore-words-list = inout,gir,parameterizes,yau,crasher +ignore-words-list = inout,gir,parameterizes,yau,crasher,thur -- cgit v1.2.1 From 26568d1998e2d26345c0b73759cf27da150e1e9d Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 28 Nov 2021 12:56:10 -0500 Subject: lots of spelling fixes found by codespell --- THANKS | 4 +- TODO | 4 +- cmake/Toolchain-iOS.cmake | 4 +- debian/changelog | 2 +- design-data/parameters.csv | 2 +- design-data/status.txt | 2 +- doc/CMakeLists.txt | 2 +- doc/UsingLibical.md | 24 +- examples/access_components.c | 4 +- examples/errors.c | 2 +- src/Net-ICal-Libical/lib/Net/ICal/Libical.pm | 2 +- src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm | 4 +- src/Net-ICal-Libical/netical.i | 2 +- src/Net-ICal-Libical/test/libical.pl | 2 +- src/java/jlibical_utils_cxx.cpp | 2 +- src/java/testjni.java | 2 +- src/libical-glib/api/i-cal-array.xml | 2 +- src/libical-glib/api/i-cal-parameter.xml | 2 +- src/libical-glib/api/i-cal-recur.xml | 6 +- src/libical-glib/i-cal-object.c.in | 2 +- src/libical/caldate.c | 2 +- src/libical/icalarray.h | 2 +- src/libical/icalduration.h | 2 +- src/libical/icalparser.c | 8 +- src/libical/icalperiod.h | 2 +- src/libical/icaltime.h | 6 +- src/libical/icaltimezone.c | 2 +- src/libical/icaltimezone.h | 2 +- src/libical/icalvalue.h | 2 +- src/libical/icptrholder_cxx.h | 4 +- src/libical/pvl.c | 4 +- src/libical/pvl.h | 2 +- src/libical/sspm.c | 2 +- src/libical/vcomponent_cxx.cpp | 2 +- src/libicalss/icalbdbset.c | 2 +- src/libicalss/icalbdbset_cxx.h | 2 +- src/libicalss/icaldirset.h | 4 +- src/libicalss/icalfileset.c | 2 +- src/libicalss/icalgauge.h | 2 +- src/libicalss/icalset.h | 2 +- src/libicalss/icalspanlist.c | 2 +- src/libicalvcal/README.TXT | 1902 ++++++++++----------- src/libicalvcal/icalvcal.c | 2 +- src/libicalvcal/vcc.c | 4 +- src/libicalvcal/vcc.y | 4 +- src/python/ChangeLog | 44 +- src/python/Collection.py | 2 +- src/python/Gauge.py | 2 +- src/python/LibicalWrap_icaltime.i | 2 +- src/python/Period.py | 2 +- src/python/python-binding.txt | 4 +- src/python/test.py | 4 +- src/test/regression-classify.c | 2 +- 53 files changed, 1054 insertions(+), 1054 deletions(-) diff --git a/THANKS b/THANKS index d795eeca..7d9a58e3 100644 --- a/THANKS +++ b/THANKS @@ -4,7 +4,7 @@ Allan Clark for testing libical against UnixWare. Graham Davison for MacOS support and -miscelaneous code bits +miscellaneous code bits Seth Alves for the first cut at the Makefile.am files and various utility functions. @@ -27,7 +27,7 @@ The Evolution team at Helixcode ( Federico Mena Quintero , JP Rosevear , Ettore Perazzoli , Christopher James Lahey , Peter Williams ) for -miscelaneous patches and adjustments to the build system. +miscellaneous patches and adjustments to the build system. Cornelius Schumacher for many insightful suggestions and a few patches. diff --git a/TODO b/TODO index e781d1a8..ea35d734 100644 --- a/TODO +++ b/TODO @@ -4,7 +4,7 @@ TODOs for libical fix Coverity Scan issues libical treats properties with multiple values incorrecty -- it always -seperates multiple values into multiple properties. This is not +separates multiple values into multiple properties. This is not acceptable for CATEGORIES and RESOURCES. Some TEXT valued properties, like METHOD, have a limited set of valid @@ -31,7 +31,7 @@ For some value types, if there illegal characters in the value ( like 4.56 in an integer value), the parser will output the characters to stdout. -Check all uses of strcpy and sprinf for buffer overflows +Check all uses of strcpy and sprintf for buffer overflows Make the mime parsing code in sspm grow the list of parts as needed, rather than having a hard limit. diff --git a/cmake/Toolchain-iOS.cmake b/cmake/Toolchain-iOS.cmake index 3fe4c3db..5bef083b 100644 --- a/cmake/Toolchain-iOS.cmake +++ b/cmake/Toolchain-iOS.cmake @@ -47,7 +47,7 @@ set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") -# Hidden visibilty is required for cxx on iOS +# Hidden visibility is required for cxx on iOS set (CMAKE_C_FLAGS "") set (CMAKE_CXX_FLAGS "-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden") @@ -98,7 +98,7 @@ if (NOT DEFINED CMAKE_IOS_SDK_ROOT) list (REVERSE _CMAKE_IOS_SDKS) list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) else (_CMAKE_IOS_SDKS) - message (FATAL_ERROR "No iOS SDK's found in default seach path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") + message (FATAL_ERROR "No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") endif (_CMAKE_IOS_SDKS) message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") endif (NOT DEFINED CMAKE_IOS_SDK_ROOT) diff --git a/debian/changelog b/debian/changelog index aeae6c09..00523e02 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,7 +15,7 @@ libical (0.30-1) unstable; urgency=low [ Wilfried Goesgens ] * remove CDBS * merge into upstream libical - * merge in several patches roaming arround + * merge in several patches roaming around -- Wilfried Goesgens Wed, 30 Nov 2007 12:19:06 +0100 diff --git a/design-data/parameters.csv b/design-data/parameters.csv index cfa82c78..21696b8c 100644 --- a/design-data/parameters.csv +++ b/design-data/parameters.csv @@ -38,7 +38,7 @@ "LOCALIZE","17","const char*", "OPTIONS","19","const char*", "NO","32",, -"#In practice any unknown paramater that is not an xparam is treated as an ianaparam" +"#In practice any unknown parameter that is not an xparam is treated as an ianaparam" "IANA","33","const char*", "ANY","0",, "#VPOLL Parameters","draft-york-vpoll","PUBLIC-COMMENT and RESPONSE are deprecated" diff --git a/design-data/status.txt b/design-data/status.txt index 9e7bbf83..9c290e00 100644 --- a/design-data/status.txt +++ b/design-data/status.txt @@ -2,7 +2,7 @@ 2.0.1 STARTSENDATA Start ICAL input; end with . 2.0.11 OKDATAFOLLOWS The request was processed successfully. Reply data follows on the next line and terminates with . 2.0.2 REPLYPENDING A timeout has occurred. The server is still working on the reply. Use CONTINUE to continue waiting for the reply or ABORT to terminate the command. -2.0.3 ABORTED The command currently underway was successsfully aborted. +2.0.3 ABORTED The command currently underway was successfully aborted. 2.0.4 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. 2.0.5 TRUSTEDWILLQUEUE The request or reply will be queued and delivered to the target calendar when its iRIP server contacts this server and issues the SWITCH command. 2.0.6 WILLATTEMPT The specified Calendar is not here but an attempt will be made to deliver the request or reply to the Calendar anyway. diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 8f15bd0e..5a33a4d3 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -15,7 +15,7 @@ set_package_properties(Doxygen PROPERTIES TYPE OPTIONAL DESCRIPTION "API Documentation system" URL "http://www.doxygen.org" - PURPOSE "Needed to build the API documention." + PURPOSE "Needed to build the API documentation." ) if(DOXYGEN_FOUND) file(GLOB _dox_deps *.dox *.html) diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index b25c74d9..04b22306 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -168,7 +168,7 @@ errors and component usage errors. #### 3.2.4 Memory Management Since many of libicals interfaces return strings, the library has its -own memory management system to elimiate the need to free every string +own memory management system to eliminate the need to free every string returned from the library. #### 3.2.5 Storage classes @@ -395,7 +395,7 @@ icalparser_set_gen_data( These routines will construct a parser object to which you can add lines of input and retrieve any components that the parser creates -from the input. These routines work by specifing an adaptor routine +from the input. These routines work by specifying an adaptor routine to get string data from a source. For example: ```c @@ -562,7 +562,7 @@ for(c = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT); } ``` -This code bit wil iterate through all of the subcomponents in `comp` +This code bit will iterate through all of the subcomponents in `comp` but you can select a specific type of component by changing `ICAL_ANY_COMPONENT` to another component type. @@ -859,7 +859,7 @@ hold the broken-out time values. The `is_utc` field distinguishes between times in UTC and a local time zone. The `is_date` field indicates if the time should be interpreted only as a date. If it is a date, the hour, minute and -second fields are assumed to be zero, regardless of their actual vaules. +second fields are assumed to be zero, regardless of their actual values. #### 5.3.2 Creating time structures @@ -884,8 +884,8 @@ struct icaltimetype tt = icaltime_from_string("19970101T103000"); `icaltime_from_timet_with_zone()` takes a `time_t` value, representing seconds past the POSIX epoch, a flag to indicate if the time is a date, and a time zone. Dates have an identical structure to a time, but the time portion (hours, -minuts and seconds) is always 00:00:00. Dates act differently in -sorting and comparision, and they have a different string representation +minutes and seconds) is always 00:00:00. Dates act differently in +sorting and comparison, and they have a different string representation in [RFC5545][]. #### 5.3.3 Time manipulating routines @@ -1009,11 +1009,11 @@ struct icaltimetype icaltime_as_local( The libical distribution includes a separate library, libicalss, that allows you to store iCal component data to disk in a variety of ways. -The file storage routines are organized in an inheritance heirarchy +The file storage routines are organized in an inheritance hierarchy that is rooted in icalset, with the derived class icalfileset and icaldirset. Icalfileset stores components to a file, while icaldirset stores components to multiple files, one per month based on DTSTAMP. -Other storages classess, for storage to a heap or a mysql database +Other storages classes, for storage to a heap or a mysql database for example, could be added in the future. All of the icalset derived classes have the same interface: @@ -1113,11 +1113,11 @@ open an existing file for reading and writing, or create a new file if it does not exist. `icalfileset_new_open()` takes the same arguments as the open() system routine and behaves in the same way. -The icalset and icalfilset objects are somewhat interchangable -- you +The icalset and icalfilset objects are somewhat interchangeable -- you can use an `icalfileset*` as an argument to any of the icalset routines. The following examples will all use icalfileset routines; using the -other icalset derived classess will be similar. +other icalset derived classes will be similar. #### 5.4.2 Adding, Finding and Removing Components @@ -1130,7 +1130,7 @@ icalerrorenum icalfileset_add_component( ``` The fileset keeps an inmemory copy of the components, and this set -must be written back to the file ocassionally. There are two routines +must be written back to the file occasionally. There are two routines to manage this: ```c @@ -1325,7 +1325,7 @@ RFC5545. There are a few routines to manipulate error properties: [ The following data is supposed to be in a table. It looks OK in LyX, -but does not format propertly in output. ] +but does not format properly in output. ] +-------------------------------------+---------------------------------------------------------+ | Routine | Purpose | diff --git a/examples/access_components.c b/examples/access_components.c index 4548d70f..c0e3985f 100644 --- a/examples/access_components.c +++ b/examples/access_components.c @@ -17,7 +17,7 @@ void do_something(icalcomponent *c); style is show in create_new_component() The second variation uses vargs lists to nest many primitive part - constructors, resulting in a compact, neatly formated way to create + constructors, resulting in a compact, neatly formatted way to create components. This style is shown in create_new_component_with_va_args() @@ -49,7 +49,7 @@ icalcomponent* create_new_component() of that class. So, icalcomponent_ functions will all take icalcomponent* as their first argument. */ - /* The next call creates a new proeprty and immediately adds it to the + /* The next call creates a new property and immediately adds it to the 'calendar' component. */ icalcomponent_add_property( diff --git a/examples/errors.c b/examples/errors.c index 8ffdc1d3..f50c4c9d 100644 --- a/examples/errors.c +++ b/examples/errors.c @@ -57,7 +57,7 @@ void component_errors(icalcomponent *comp) /* Since there are iTIP restriction errors, it may be impossible to process this component as an iTIP request. In this case, the - X-LIC-ERROR proeprties should be expressed as REQUEST-STATUS + X-LIC-ERROR properties should be expressed as REQUEST-STATUS properties in the reply. This following routine makes this conversion */ diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm index 61970c29..070d58be 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm @@ -175,7 +175,7 @@ sub start {} #The return value is an instance of Time. #If the Period has a duration set, but not an end time, this -#method will caluculate the end time from the duration. +#method will calculate the end time from the duration. sub end {} #Return or set the duration of the period. The duration may be diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm index f0af7e42..7302764d 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm @@ -46,7 +46,7 @@ Net::ICal::Time -- represent a time and date I - + Does not work right now. Sorts the @array using the sort function @compare. g_return_if_fail (I_CAL_IS_ARRAY (array)); g_return_if_fail (array != NULL); diff --git a/src/libical-glib/api/i-cal-parameter.xml b/src/libical-glib/api/i-cal-parameter.xml index 1595d5eb..7b1b4a84 100644 --- a/src/libical-glib/api/i-cal-parameter.xml +++ b/src/libical-glib/api/i-cal-parameter.xml @@ -36,7 +36,7 @@ Creates a new #ICalParameter from just the value, the part after the "=" - + Frees the native part of the ICalParameter. diff --git a/src/libical-glib/api/i-cal-recur.xml b/src/libical-glib/api/i-cal-recur.xml index 0edf25bc..870ea61b 100644 --- a/src/libical-glib/api/i-cal-recur.xml +++ b/src/libical-glib/api/i-cal-recur.xml @@ -42,7 +42,7 @@ Converts a string representation to an enum representation for the weekday. - + Converts a enum representation to a string representation for the weekday. @@ -52,7 +52,7 @@ Converts a string representation to an enum representation for the frequency. - + Converts a enum representation to a string representation for the frequency. @@ -62,7 +62,7 @@ Converts a string representation to an enum representation for the skip. - + Converts a enum representation to a string representation for the skip. diff --git a/src/libical-glib/i-cal-object.c.in b/src/libical-glib/i-cal-object.c.in index e5186106..686c7bcd 100644 --- a/src/libical-glib/i-cal-object.c.in +++ b/src/libical-glib/i-cal-object.c.in @@ -524,7 +524,7 @@ void i_cal_object_set_native_destroy_func(ICalObject *iobject, GDestroyNotify na * @iobject: an #ICalObject * * Obtains whether the native libical structure is a global shared memory, - * thus should not be destroyed. This can be set only during contruction time. + * thus should not be destroyed. This can be set only during construction time. * * Returns: Whether the native libical structure is a global shared memory. * diff --git a/src/libical/caldate.c b/src/libical/caldate.c index 38891a35..dc4aaae6 100644 --- a/src/libical/caldate.c +++ b/src/libical/caldate.c @@ -47,7 +47,7 @@ * has been set. ( = 0 for 01 Jan 4713 B.C. 12 HR UT ) * * Output: will set all the other elements of the structure. - * As a convienence, the function will also return the year. + * As a convenience, the function will also return the year. * * Reference: Astronomial formulae for calculators, meeus, p 23 * from fortran program by F. Espenak - April 1982 Page 277, diff --git a/src/libical/icalarray.h b/src/libical/icalarray.h index a945be60..2fc9fb26 100644 --- a/src/libical/icalarray.h +++ b/src/libical/icalarray.h @@ -173,7 +173,7 @@ LIBICAL_ICAL_EXPORT void icalarray_append(icalarray *array, const void *element) * * @par Error handling * If @a array is `NULL`, using this function results in undefined behaviour. - * If the array is empty, using this functino results in undefined behaviour. + * If the array is empty, using this function results in undefined behaviour. * If the @a position is non-existent, it removes the last element. * * ### Usage diff --git a/src/libical/icalduration.h b/src/libical/icalduration.h index 5618de01..228dab7c 100644 --- a/src/libical/icalduration.h +++ b/src/libical/icalduration.h @@ -69,7 +69,7 @@ LIBICAL_ICAL_EXPORT struct icaldurationtype icaldurationtype_from_int(int t); * * @par Error handling * When given bad input, it sets ::icalerrno to ::ICAL_MALFORMEDDATA_ERROR and - * returnes icaldurationtype_bad_duration(). + * returns icaldurationtype_bad_duration(). * * ### Usage * ```c diff --git a/src/libical/icalparser.c b/src/libical/icalparser.c index 3bc3d5f6..c2735b66 100644 --- a/src/libical/icalparser.c +++ b/src/libical/icalparser.c @@ -392,7 +392,7 @@ static char *parser_get_next_value(char *line, char **end, icalvalue_kind kind) next = parser_get_next_char(',', p, 1); - /* Unforunately, RFC2445 allowed that for the RECUR value, COMMA + /* Unfortunately, RFC2445 allowed that for the RECUR value, COMMA could both separate digits in a list, and it could separate multiple recurrence specifications. This is not a friendly part of the spec and was deprecated in RFC5545. The following @@ -901,7 +901,7 @@ icalcomponent *icalparser_add_line(icalparser *parser, char *line) if (name_heap == 0) { /* 'tail' defined above */ - insert_error(tail, str, "Cant parse parameter name", + insert_error(tail, str, "Can't parse parameter name", ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); tail = 0; break; @@ -1012,7 +1012,7 @@ icalcomponent *icalparser_add_line(icalparser *parser, char *line) /* Change for mozilla */ /* have the option of being flexible towards unsupported parameters */ #if ICAL_ERRORS_ARE_FATAL == 1 - insert_error(tail, str, "Cant parse parameter name", + insert_error(tail, str, "Can't parse parameter name", ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR); tail = 0; parser->state = ICALPARSER_ERROR; @@ -1054,7 +1054,7 @@ icalcomponent *icalparser_add_line(icalparser *parser, char *line) if (param == 0) { /* 'tail' defined above */ - insert_error(tail, str, "Cant parse parameter value", + insert_error(tail, str, "Can't parse parameter value", ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR); tail = 0; diff --git a/src/libical/icalperiod.h b/src/libical/icalperiod.h index 6d2e72c0..fb8e3140 100644 --- a/src/libical/icalperiod.h +++ b/src/libical/icalperiod.h @@ -50,7 +50,7 @@ struct icalperiodtype /** * @brief Constructs a new ::icalperiodtype from @a str * @param str The string from which to construct a time period - * @return An ::icalperiodtype representing the peroid @a str + * @return An ::icalperiodtype representing the period @a str * @sa icaltime_from_string(), icaldurationtype_from_string() * * @par Error handling diff --git a/src/libical/icaltime.h b/src/libical/icaltime.h index d672f2c4..1e28492b 100644 --- a/src/libical/icaltime.h +++ b/src/libical/icaltime.h @@ -85,7 +85,7 @@ #include /* An opaque struct representing a timezone. We declare this here to avoid - a circular dependancy. */ + a circular dependency. */ #if !defined(ICALTIMEZONE_DEFINED) #define ICALTIMEZONE_DEFINED typedef struct _icaltimezone icaltimezone; @@ -173,7 +173,7 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_timet_with_zone(const time const int is_date, const icaltimezone *zone); -/** @brief Contructor. +/** @brief Constructor. * * Creates a time from an ISO format string. * @@ -184,7 +184,7 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_timet_with_zone(const time */ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_string(const char *str); -/** @brief Contructor. +/** @brief Constructor. * * Creates a new time, given a day of year and a year. * diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index 1826d2d0..e57c08d2 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -1595,7 +1595,7 @@ static int fetch_lat_long_from_string(const char *str, size_t len; char *sptr, *lat, *lon, *loc, *temp; - /* We need to parse the latitude/longitude co-ordinates and location fields */ + /* We need to parse the latitude/longitude coordinates and location fields */ sptr = (char *)str; while ((*sptr != '\t') && (*sptr != '\0')) { sptr++; diff --git a/src/libical/icaltimezone.h b/src/libical/icaltimezone.h index 241e5b42..90951ac4 100644 --- a/src/libical/icaltimezone.h +++ b/src/libical/icaltimezone.h @@ -31,7 +31,7 @@ #if !defined(ICALTIMEZONE_DEFINED) #define ICALTIMEZONE_DEFINED /** @brief An opaque struct representing a timezone. - * We declare this here to avoid a circular dependancy. + * We declare this here to avoid a circular dependency. */ typedef struct _icaltimezone icaltimezone; #endif diff --git a/src/libical/icalvalue.h b/src/libical/icalvalue.h index 69dce8f1..b3f899ba 100644 --- a/src/libical/icalvalue.h +++ b/src/libical/icalvalue.h @@ -73,7 +73,7 @@ LIBICAL_ICAL_EXPORT const char *icalvalue_kind_to_string(const icalvalue_kind ki /** Check validity of a specific icalvalue_kind **/ LIBICAL_ICAL_EXPORT int icalvalue_kind_is_valid(const icalvalue_kind kind); -/** Encode a character string in ical format, esacpe certain characters, etc. */ +/** Encode a character string in ical format, escape certain characters, etc. */ LIBICAL_ICAL_EXPORT int icalvalue_encode_ical_string(const char *szText, char *szEncText, int MaxBufferLen); diff --git a/src/libical/icptrholder_cxx.h b/src/libical/icptrholder_cxx.h index 23805bcd..bd63fe5a 100644 --- a/src/libical/icptrholder_cxx.h +++ b/src/libical/icptrholder_cxx.h @@ -5,13 +5,13 @@ * VComponent::get_..._component, VComponent::get_..._property, * ICalProperty::get_..._value. * - * @remarks VComponent::get... functions returns a C++ oject that wraps the + * @remarks VComponent::get... functions returns a C++ object that wraps the * libical implementation. It is important to note that the wrapped * implementation still belongs to the original component. To stop memory leak, * caller must delete the pointer. However, the destructor will call the * appropriate free function. eg. ~VComponent calls icalcomponent_free(imp). * - * As stated previously, imp stil belongs to the original component. To avoid + * As stated previously, imp still belongs to the original component. To avoid * freeing the wrapped "imp", caller must set the "imp" to null before deleting * the pointer. * diff --git a/src/libical/pvl.c b/src/libical/pvl.c index c2147cdb..4f66c920 100644 --- a/src/libical/pvl.c +++ b/src/libical/pvl.c @@ -55,7 +55,7 @@ static int pvl_list_count = 0; /** struct pvl_list_t - The list structure. This is the hanlde for the entire list + The list structure. This is the handle for the entire list This type is also private. Use pvl_list instead @@ -392,7 +392,7 @@ void *pvl_remove(pvl_list L, pvl_elem E) /** * @brief Return a pointer to data that satisfies a function. * - * This routine will interate through the entire list and call the + * This routine will iterate through the entire list and call the * find function for each item. It will break and return a pointer to the * data that causes the find function to return 1. * diff --git a/src/libical/pvl.h b/src/libical/pvl.h index 02ff1fa0..50feef16 100644 --- a/src/libical/pvl.h +++ b/src/libical/pvl.h @@ -75,7 +75,7 @@ LIBICAL_ICAL_EXPORT void pvl_clear(pvl_list); /* Remove all elements, de-alloc LIBICAL_ICAL_EXPORT int pvl_count(pvl_list); -/* Navagate the list */ +/* Navigate the list */ LIBICAL_ICAL_EXPORT pvl_elem pvl_next(pvl_elem e); LIBICAL_ICAL_EXPORT pvl_elem pvl_prior(pvl_elem e); diff --git a/src/libical/sspm.c b/src/libical/sspm.c index 4875e438..72ebf3be 100644 --- a/src/libical/sspm.c +++ b/src/libical/sspm.c @@ -813,7 +813,7 @@ static void sspm_make_part(struct mime_impl *impl, } /* add a end-of-string after the data, just in case binary - data from decode64 gets passed to a tring handling + data from decode64 gets passed to a string handling routine in add_line */ data[*size + 1] = '\0'; diff --git a/src/libical/vcomponent_cxx.cpp b/src/libical/vcomponent_cxx.cpp index 23c90b5c..bdf2a78d 100644 --- a/src/libical/vcomponent_cxx.cpp +++ b/src/libical/vcomponent_cxx.cpp @@ -586,7 +586,7 @@ bool VComponent::remove(VComponent &fromVC, bool ignoreValue) // recursively go down the components c->remove(*comp, ignoreValue); // if all properties are removed and there is no sub-components, then - // remove this compoent + // remove this component if ((c->count_properties(ICAL_ANY_PROPERTY) == 0) && (c->count_components(ICAL_ANY_COMPONENT) == 0)) { this->remove_component(c); diff --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index f06b38e7..81c6e21f 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -1271,7 +1271,7 @@ icalsetiter icalbdbset_begin_component(icalset *set, icalcomponent_kind kind, /* if there is a gauge, the first matched component is returned */ while (comp != 0) { - /* check if it is a recurring component and with guage expand, if so + /* check if it is a recurring component and with gauge expand, if so * we need to add recurrence-id property to the given component */ rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); g = icalgauge_get_expand(gauge); diff --git a/src/libicalss/icalbdbset_cxx.h b/src/libicalss/icalbdbset_cxx.h index fd69c2c3..976d0d2f 100644 --- a/src/libicalss/icalbdbset_cxx.h +++ b/src/libicalss/icalbdbset_cxx.h @@ -58,7 +58,7 @@ namespace LibICal VComponent *fetch_match(icalcomponent *c); int has_uid(std::string &uid); - // Iterate through components. If a guage has been defined, these + // Iterate through components. If a gauge has been defined, these // will skip over components that do not pass the gauge VComponent *get_current_component(); VComponent *get_first_component(); diff --git a/src/libicalss/icaldirset.h b/src/libicalss/icaldirset.h index ca7f0f24..d3c3e35e 100644 --- a/src/libicalss/icaldirset.h +++ b/src/libicalss/icaldirset.h @@ -33,9 +33,9 @@ The primary interfaces are icaldirset__get_first_component and icaldirset_get_next_component. These routine iterate through all of the components in the store, subject to the current gauge. A gauge - is an icalcomponent that is tested against other componets for a + is an icalcomponent that is tested against other components for a match. If a gauge has been set with icaldirset_select, - icaldirset_first and icaldirset_next will only return componentes + icaldirset_first and icaldirset_next will only return components that match the gauge. The Store generated UIDs for all objects that are stored if they do diff --git a/src/libicalss/icalfileset.c b/src/libicalss/icalfileset.c index 65f7a8b4..57e787c5 100644 --- a/src/libicalss/icalfileset.c +++ b/src/libicalss/icalfileset.c @@ -787,7 +787,7 @@ icalsetiter icalfileset_begin_component(icalset *set, icalcomponent_kind kind, i while (comp != 0) { - /* check if it is a recurring component and with guage expand, if so + /* check if it is a recurring component and with gauge expand, if so we need to add recurrence-id property to the given component */ rrule = icalcomponent_get_first_property(comp, ICAL_RRULE_PROPERTY); g = icalgauge_get_expand(gauge); diff --git a/src/libicalss/icalgauge.h b/src/libicalss/icalgauge.h index 3de1f92c..be6c7440 100644 --- a/src/libicalss/icalgauge.h +++ b/src/libicalss/icalgauge.h @@ -50,7 +50,7 @@ LIBICAL_ICALSS_EXPORT void icalgauge_dump(icalgauge *gauge); /** @brief Returns true if comp matches the gauge. * * The component must be in - * cannonical form -- a VCALENDAR with one VEVENT, VTODO or VJOURNAL + * canonical form -- a VCALENDAR with one VEVENT, VTODO or VJOURNAL * sub component */ LIBICAL_ICALSS_EXPORT int icalgauge_compare(icalgauge *g, icalcomponent *comp); diff --git a/src/libicalss/icalset.h b/src/libicalss/icalset.h index 07875273..23e677d8 100644 --- a/src/libicalss/icalset.h +++ b/src/libicalss/icalset.h @@ -147,7 +147,7 @@ LIBICAL_ICALSS_EXPORT icalcomponent *icalset_fetch_match(icalset *set, icalcompo LIBICAL_ICALSS_EXPORT icalerrorenum icalset_modify(icalset *set, icalcomponent *oldc, icalcomponent *newc); -/** Iterates through the components. If a guage has been defined, these +/** Iterates through the components. If a gauge has been defined, these will skip over components that do not pass the gauge */ LIBICAL_ICALSS_EXPORT icalcomponent *icalset_get_current_component(icalset *set); diff --git a/src/libicalss/icalspanlist.c b/src/libicalss/icalspanlist.c index 2ea91cf8..b74047ff 100644 --- a/src/libicalss/icalspanlist.c +++ b/src/libicalss/icalspanlist.c @@ -304,7 +304,7 @@ int *icalspanlist_as_freebusy_matrix(icalspanlist *sl, int delta_t) sl_start = icaltime_as_timet_with_zone(sl->start, icaltimezone_get_utc_timezone()); sl_end = icaltime_as_timet_with_zone(sl->end, icaltimezone_get_utc_timezone()); - /* insure that the time period falls on a time boundary divisable + /* insure that the time period falls on a time boundary divisible by delta_t */ sl_start /= delta_t; diff --git a/src/libicalvcal/README.TXT b/src/libicalvcal/README.TXT index aeaa18fc..e2148a2c 100644 --- a/src/libicalvcal/README.TXT +++ b/src/libicalvcal/README.TXT @@ -1,951 +1,951 @@ -NOTE: If you used the earlier APIs released by Versit -then you will want to look at the document "migrate.doc" -included with this package. It contains a discussion of -the differences between the old API and this one. - ----------------------------------------------------------------- - -The vCard/vCalendar C interface is implemented in the set -of files as follows: - -vcc.y, yacc source, and vcc.c, the yacc output you will use -implements the core parser - -vobject.c implements an API that insulates the caller from -the parser and changes in the vCard/vCalendar BNF - -port.h defines compilation environment dependent stuff - -vcc.h and vobject.h are header files for their .c counterparts - -vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions -which you may find useful. - -test.c is a standalone test driver that exercises some of -the features of the APIs provided. Invoke test.exe on a -VCARD/VCALENDAR input text file and you will see the pretty -print output of the internal representation (this pretty print -output should give you a good idea of how the internal -representation looks like -- there is one such output in the -following too). Also, a file with the .out suffix is generated -to show that the internal representation can be written back -in the original text format. - ------------------------------------------------------------------ - - - VObject for VCard/VCalendar - -Table of Contents -================= -1. VObject -2. Internal Representations of VCard/VCalendar -3. Iterating Through VObject's Properties or Values -4. Pretty Printing a VObject Tree -5. Building A VObject Representation of A VCard/VCalendar -6. Converting A VObject Representation Into Its Textual Representation -7. Miscellaneous Notes On VObject APIs usages -8. Brief descriptions of each APIs -9. Additional Programming Notes. - -This document is mainly about the VObject and its APIs. The main -use of a VObject is to represent a VCard or a VCalendar inside -a program. However, its use is not limited to aforemention as it -can represent an arbitrary information that makes up of a tree or -forest of properties/values. - -1. VObject - ======= -A VObject can have a name (id) and a list of associated properties and -a value. Each property is itself a VObject. - -2. Internal Representations of VCard/VCalendar - =========================================== -A list of VCard or a VCalendar is represented by a list of VObjects. -The name (id) of the VObjects in the list is either VCCardProp or -VCCalProp. Each of these VObjects can have a list of properties. -Since a property is represented as a VObject, each of these properties -can have a name, a list of properties, and a value. - -For example, the input file "vobject.vcf": - -BEGIN:VCARD -N:Alden;Roland -FN:Roland H. Alden -ORG:AT&T;Versit Project Office -TITLE:Consultant -EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com -EMAIL;INTERNET:ralden@sfgate.com -EMAIL;MCIMail:242-2200 -LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -Suite 2208=0A= -One Pine Street=0A= -San Francisco, CA 94111 -LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -Suite 2208=0A= -One Pine Street=0A= -San Francisco, CA 94111=0A= -U.S.A. -TEL;WORK;PREF;MSG:+1 415 296 9106 -TEL;WORK;FAX:+1 415 296 9016 -TEL;MSG;CELL:+1 415 608 5981 -ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. -SOUND:ROW-LAND H ALL-DIN -LOGO;GIF;BASE64: - R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC - QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO - 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv - /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw - cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu - ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW - ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf - MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM - 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E - +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW - gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm - LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s - JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6 - mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA - 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj - GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim - DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo - 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f - hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR - BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL - thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7 - asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5 - fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04 - UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe - eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C - z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI - ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4 - wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY - gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA - i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4 - I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7 - -BEGIN:VCALENDAR -DCREATED:19960523T100522 -PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN -VERSION:0.3 -BEGIN:VEVENT -START:19960523T120000 -END:19960523T130000 -SUBTYPE:PHONE CALL -SUMMARY:VERSIT PDI PR Teleconference/Interview -DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland -END:VEVENT -BEGIN:VEVENT -START:19960523T113000 -END:19960523T115500 -SUBTYPE:LUNCH -SUMMARY:Eat in the cafeteria today -END:VEVENT -END:VCALENDAR - -END:VCARD - - -will conceptually be represented as - vcard - VCNameProp - VCFamilyNameProp=Alden - VCGivenNameProp=Roland - VCFullNameProp=Roland H.Alden - .... - -note that - EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com -will be represented as: - VCEmailAddress=sf!rincon!ralden@alden.attmail.com - VCWork - VCPreferred - VCInternet -where the lower level properties are properties of the property -VCEmailAddress. - -Groupings are flattened out in the VObject representation such -that: - a.b:blah - a.c:blahblah -are represented as: - b=blah - VCGrouping=a - c=blahblah - VCGrouping=a -i.e. one can read the above as: - the property "b" has value "blah" and property "VCGrouping" - with the value "a". - the property "c" has value "blahblah" and property "VCGrouping" - with the value "a". -likewise, multi-level groupings are flatten similarly. e.g. - a.b.c:blah - a.b.e:blahblah ---> - c=blah - VCGrouping=b - VCGrouping=a - e=blahblah - VCGrouping=b - VCGrouping=a -which read: - the property "c" has value "blah" and property "VCGrouping" - with the value "b" which has property "VCGrouping" - with value "a". - the property "e" has value "blahblah" and property "VCGrouping" - with the value "b" which has property "VCGrouping" - with value "a". - -3. Iterating Through VObject's Properties or Values - ================================================ -The following is a skeletal form of iterating through -all properties of a vobject, o: - - // assume the object of interest, o, is of type VObject - VObjectIterator i; - initPropIterator(&i,o); - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - // ... do something with "each" property - } - -Use the API vObjectName() to access a VObject's name. -Use the API vObjectValueType() to determine if a VObject has - a value. For VCard/VCalendar application, you - should not need this function as practically - all values are either of type VCVT_USTRINGZ or - VCVT_RAW (i.e set by setVObjectUStringZValue and - setVObjectAnyValue APIs respectively), and the - value returned by calls to vObjectUStringZValue - and vObjectAnyValue are 0 if a VObject has no - value. (There is a minor exception where VObject with - VCDataSizeProp has value that is set by - setVObjectLongValue). -Use the APIs vObject???Value() to access a VObject's value. - where ??? is the expected type. -Use the APIs setvObject???Value() to set or modify a VObject's value. - where ??? is the expected type. -Use the API isAPropertyOf() to query if a name match the name of - a property of a VObject. Since isAPropertyOf() return - the matching property, we can use that to retrieve - a property and subsequently the value of the property. - -4. Pretty Printing a VObject Tree - ============================== -VObject tree can be pretty printed with the printVObject() function. -The output of pretty printing a VObject representation of the input -test file "vobject.vcf" is shown below. Note that the indentation -indicates the tree hirerarchy where the immediate children nodes -of a parent node is all at the same indentation level and the -immediate children nodes are the immediate properties of the -associated parent nodes. In the following, {N,FN,ORG,TITLE,...} -are immediate properties of VCARD. {F and G} are properties of N -with value {"Alden" and "Roland"} respectively; FN has no property -but has the value "Roland H. Alden"; EMAIL has value and -the properties WORK, PREF, and INTERNET. - - -VCARD - N - F="Alden" - G="Roland" - FN="Roland H. Alden" - ORG - ORGNAME="AT&T" - OUN="Versit Project Office" - TITLE="Consultant" - EMAIL="sf!rincon!ralden@alden.attmail.com" - WORK - PREF - INTERNET - EMAIL="ralden@sfgate.com" - INTERNET - EMAIL="242-2200" - MCIMail - LABEL="Roland H. Alden - Suite 2208 - One Pine Street - San Francisco, CA 94111" - DOM - POSTAL - PARCEL - HOME - WORK - QP - LABEL="Roland H. Alden - Suite 2208 - One Pine Street - San Francisco, CA 94111 - U.S.A." - POSTAL - PARCEL - HOME - WORK - QP - TEL="+1 415 296 9106" - WORK - PREF - MSG - TEL="+1 415 296 9016" - WORK - FAX - TEL="+1 415 608 5981" - MSG - CELL - ADR - EXT ADD="Suite 2208" - STREET="One Pine Street" - L="San Francisco" - R="CA" - PC="94111" - C="U.S.A." - SOUND="ROW-LAND H ALL-DIN" - LOGO=[raw data] - GIF - BASE64 - DataSize=1482 -VCALENDAR - DCREATED="19960523T100522" - PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN" - VERSION="0.3" - VEVENT - START="19960523T120000" - END="19960523T130000" - SUBTYPE="PHONE CALL" - SUMMARY="VERSIT PDI PR Teleconference/Interview" - DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland" - VEVENT - START="19960523T113000" - END="19960523T115500" - SUBTYPE="LUNCH" - SUMMARY="Eat in the cafeteria today" - -5. Building A VObject Representation of A VCard/VCalendar - ====================================================== -The parser in vcc.y converts an input file with one or more -VCard/VCalendar that is in their textual representation -into their corresponding VObject representation. - -VObject representation of a VCard/VCalendar can also be built -directly with calls to the VObject building APIs. e.g. - - VObject *prop; - VObject *vcard = newVObject(VCCardProp); - prop = addProp(vcard,VCNameProp); - addPropValue(prop,VCFamilyNameProp,"Alden"); - addPropValue(prop,VCGivenNameProp,"Roland"); - addPropValue(vcard,VCFullNameProp,"Roland H. Alden"); - .... - -6. Converting A VObject Representation Into Its Textual Representation - =================================================================== -The VObject representation can be converted back to its textual -representation via the call to writeVObject() or writeMemVObject() -API. e.g. - a. to write to a file: - // assume vcard is of type VObject - FILE *fp = fopen("alden.vcf","w"); - writeVObject(fp,vcard); - a. to write to memory, and let the API allocate the required memory. - char* clipboard = writeVObject(0,0,vcard); - ... do something to clipboard - free(clipboard); - b. to write to a user allocated buffer: - char clipboard[16384]; - int len = 16384; - char *buf = writeVObject(clipboard,&len,vcard); - ... buf will be equal to clipboard if the write - is successful otherwise 0. - -In the case of writing to memory, the memory buffer can be either -allocated by the API or the user. If the user allocate the -memory for the buffer, then the length of the buffer needs to be -communicated to the API via a variable. The variable passed as -the length argument will be overwritten with the actual size -of the text output. A 0 return value from writeMemVObject() -indicates an error which could be caused by overflowing the -size of the buffer or lack of heap memory. - -7. Miscellaneous Notes On VObject APIs usages - ========================================== -a. vcc.h -- contains basic interfaces to the parser: - VObject* Parse_MIME(const char *input, unsigned long len); - VObject* Parse_MIME_FromFile(FILE *file); - -- both of this return a null-terminated list of - VObject that is either a VCARD or VCALENDAR. - To iterate through this list, do - VObject *t, *v; - v = Parse_Mime_FromFile(fp); - while (v) { - // ... do something to v. - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - note that call to cleanVObject will release - resource used to represent the VObject. - -b. vobject.h -- contains basic interfaces to the VObject APIs. - see the header for more details. - The structure of VObject is purposely (hiddened) not exposed - to the user. Every access has to be done via - the APIs. This way, if we need to change the - structure or implementation, the client need not - recompile as long as the interfaces remain the - same. - -c. values of a property is determined by the property definition - itself. The vobject APIs does not attempt to enforce - any of such definition. It is the consumer responsibility - to know what value is expected from a property. e.g - most properties have unicode string value, so to access - the value of these type of properties, you will use - the vObjectUStringZValue() to read the value and - setVObjectUStringZValue() to set or modify the value. - Refer to the VCard and VCalendar specifications for - the definition of each property. - -d. properties name (id) are case incensitive. - -8. Brief descriptions of each APIs - =============================== - * the predefined properties' names (id) are listed under vobject.h - each is of the form VC*Prop. e.g. - #define VC7bitProp "7BIT" - #define VCAAlarmProp "AALARM" - .... - - * consumer of a VObject can only define pointers to VObject. - - * a variable of type VObjectIterator, say "i", can be used to iterate - through a VObject's properties, say "o". The APIs related to - VObjectIterator are: - void initPropIterator(VObjectIterator *i, VObject *o); - -- e.g. usage - initPropIterator(&i,o); - int moreIteration(VObjectIterator *i); - -- e.g. usage - while (moreIteration(&i)) { ... } - VObject* nextVObject(VObjectIterator *i); - -- e.g. usage - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - } - - * VObject can be chained together to form a list. e.g. of such - use is in the parser where the return value of the parser is - a link list of VObject. A link list of VObject can be - built by: - void addList(VObject **o, VObject *p); - and iterated by - VObject* nextVObjectInList(VObject *o); - -- next VObjectInList return 0 if the list - is exhausted. - - * the following APIs are mainly used to construct a VObject tree: - VObject* newVObject(const char *id); - -- used extensively internally by VObject APIs but when - used externally, its use is mainly limited to the - construction of top level object (e.g. an object - with VCCardProp or VCCalendarProp id). - - void deleteVObject(VObject *p); - -- to deallocate single VObject, for most user, use - cleanVObject(VObject *o) instead for freeing all - resources associated with the VObject. - - char* dupStr(const char *s, unsigned int size); - -- duplicate a string s. If size is 0, the string is - assume to be a null-terminated. - - void deleteStr(const char *p); - -- used to deallocate a string allocated by dupStr(); - - void setVObjectName(VObject *o, const char* id); - -- set the id of VObject o. This function is not - normally used by the user. The setting of id - is normally done as part of other APIs (e.g. - addProp()). - - void setVObjectStringZValue(VObject *o, const char *s); - -- set a string value of a VObject. - - void setVObjectUStringZValue(VObject *o, const wchar_t *s); - -- set a Unicode string value of a VObject. - - void setVObjectIntegerValue(VObject *o, unsigned int i); - -- set an integer value of a VObject. - - void setVObjectLongValue(VObject *o, unsigned long l); - -- set an long integer value of a VObject. - - void setVObjectAnyValue(VObject *o, void *t); - -- set any value of a VObject. The value type is - unspecified. - - VObject* setValueWithSize(VObject *prop, void *val, unsigned int size); - -- set a raw data (stream of bytes) value of a VObject - whose size is size. The internal VObject representation - is - this object = val - VCDataSizeProp=size - i.e. the value val will be attached to the VObject prop - and a property of VCDataSize whose value is size - is also added to the object. - - void setVObjectVObjectValue(VObject *o, VObject *p); - -- set a VObject as the value of another VObject. - - const char* vObjectName(VObject *o); - -- retrieve the VObject's Name (i.e. id). - - const char* vObjectStringZValue(VObject *o); - -- retrieve the VObject's value interpreted as - null-terminated string. - - const wchar_t* vObjectUStringZValue(VObject *o); - -- retrieve the VObject's value interpreted as - null-terminated unicode string. - - unsigned int vObjectIntegerValue(VObject *o); - -- retrieve the VObject's value interpreted as - integer. - - unsigned long vObjectLongValue(VObject *o); - -- retrieve the VObject's value interpreted as - long integer. - - void* vObjectAnyValue(VObject *o); - -- retrieve the VObject's value interpreted as - any value. - - VObject* vObjectVObjectValue(VObject *o); - -- retrieve the VObject's value interpreted as - a VObject. - - VObject* addVObjectProp(VObject *o, VObject *p); - -- add a VObject p as a property of VObject o. - (not normally used externally for building a - VObject). - - VObject* addProp(VObject *o, const char *id); - -- add a property whose name is id to VObject o. - - VObject* addPropValue(VObject *o, const char *id, const char *v); - -- add a property whose name is id and whose value - is a null-terminated string to VObject o. - - VObject* addPropSizedValue(VObject *o, const char *id, - const char *v, unsigned int size); - -- add a property whose name is id and whose value - is a stream of bytes of size size, to VObject o. - - VObject* addGroup(VObject *o, const char *g); - -- add a group g to VObject o. - e.g. if g is a.b.c, you will have - o - c - VCGroupingProp=b - VCGroupingProp=a - and the object c is returned. - - VObject* isAPropertyOf(VObject *o, const char *id); - -- query if a property by the name id is in o and - return the VObject that represent that property. - - void printVObject(VObject *o); - -- pretty print VObject o to stdout (for debugging use). - - void writeVObject(FILE *fp, VObject *o); - -- convert VObject o to its textual representation and - write it to file. - - char* writeMemVObject(char *s, int *len, VObject *o); - -- convert VObject o to its textual representation and - write it to memory. If s is 0, then memory required - to hold the textual representation will be allocated - by this API. If a variable len is passed, len will - be overwriten with the byte size of the textual - representation. If s is non-zero, then s has to - be a user allocated buffer whose size has be passed - in len as a variable. Memory allocated by the API - has to be freed with call to free. The return value - of this API is either the user supplied buffer, - the memory allocated by the API, or 0 (in case of - failure). - - void cleanStrTbl(); - -- this function has to be called when all - VObject has been destroyed. - - void cleanVObject(VObject *o); - -- release all resources used by VObject o. - - wchar_t* fakeUnicode(const char *ps, int *bytes); - -- convert char* to wchar_t*. - - extern int uStrLen(const wchar_t *u); - -- length of unicode u. - - char *fakeCString(const wchar_t *u); - -- convert wchar_t to CString (blindly assumes that - this could be done). - -9. Additional Programming Notes - ============================ -In the following notes, please refers to the listing -of Example.vcf and its VObject Representation -(shown at the end of this section). - -* Handling the Return Value of the VCard/VCalendar Parser - The example input text file contains two root VObjects - (a VCalendar and a VCard). The output of the VCard/VCalendar - parser is a null-terminated list of VObjects. For this - particular input file, the list will have two VObjects. - The following shows a template for iterating through the - output of the Parser: - - VObject *t, *v; - v = Parse_Mime_fromFileName("example.vcf"); - while (v) { - // currently, v will either be a VCard or a VCalendar - // do whatever your application need to do to - // v here ... - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - -* Iterating Through a VCard/VCalendar VObject - From the VObject APIs point of view, a VCard VObject - is the same as a VCalendar VObject. However, the application - needs to know what are in a VCard or a VCalendar. - For example, A VCalendar VObject can have VCDCreatedProp, - a VCGEOLocationProp, etc, and one or more VCEventProp and - or VCTodoProp. The VCEventProp and VCTodoProp can have - many properties of their own, which in turn could have - more properties (e.g. VCDAlarmProp can be a VCEventProp - VObject's property, and VCRunTimeProp can be a - VCDAlarmProp VObject's property. Because a VObject tree - can be arbitrarily complex, in general, to process all - properties and values of a VObject tree, a recursive walk - is desirable. An example recursive VObject tree walk - can be found in the vobject.c source lines for printVObject* - and writeVObject* APIs. Depending on what the application need - to do with a VCard or a VCalendar, a recursive walk - of the VObject tree may or may not be desirable. An example - template of a non-recursive walk is shown below: - - void processVCardVCalendar(char *inputFile) - { - VObject *t, *v; - v = Parse_Mime_fromFileName(inputFile); - while (v) { - char *n = vObjectName(v); - if (strcmp(n,VCCardProp) == 0) { - do_VCard(v); - } - else if (strcmp(n,VCCalendarProp) == 0) { - do_VCalendar(v); - } - else { - // don't know how to handle anything else! - } - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - } - - void do_VCard(VObject *vcard) - { - VObjectIterator t; - initPropIterator(&t,vcard); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - // The primarly purpose of this example is to - // show how to iterate through a VCard VObject, - // it is not meant to be efficient at all. - char *n = vObjectName(eachProp); - if (strcmp(n,VCNameProp)==0) { - do_name(eachProp); - } - else if (strcmp(n,VCEmailProp)==0) { - do_email(eachProp); - } - else if (strcmp(n,VCLabelProp)==0) { - do_label(eachProp); - } - else if .... - } - } - - void do_VCalendar(VObject *vcal) - { - VObjectIterator t; - initPropIterator(&t,vcard); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - // The primarly purpose of this example is to - // show how to iterate through a VCalendar VObject, - // it is not meant to be efficient at all. - char *n = vObjectName(eachProp); - if (strcmp(n,VCDCreatedProp)==0) { - do_DCreated(eachProp); - } - else if (strcmp(n,VCVersionProp)==0) { - do_Version(eachProp); - } - else if (strcmp(n,VCTodoProp)==0) { - do_Todo(eachProp); - } - else if (strcmp(n,VCEventProp)==0) { - do_Event(eachProp); - } - else if .... - } - } - - void do_Todo(VObject *vtodo) { ... } - - void do_Event(VObject *vevent) { ... } - - ... - -* Property's Values and Properties - The VObject APIs do not attempt to check for the - correctness of the values of a property. Nor do they - will prevent the user from attaching a non-VCard/VCalendar - standard property to a VCard/VCalendar property. Take - the example of line [11] of the example, "O.K" is not - a valid value of VCStatusProp. It is up to the application - to accept or reject the value of a property. - -* Output of printVObject - PrintVObject pretty prints a VObject tree in human - readable form. See the listing at the end of the file - for an example output of printVObject on the example - input file "Example.vcf". - - Note that binary data are not shown in the output of - printVObject. Instead, a note is made ([raw data]) to - indicate that there exists such a binary data. - -* Note on Binary Data - When the value of a property is a binary data, it is only - useful to know the size of the binary data. - - In the case of the VCard/VCalendar parser, it chooses - to represent the size information as a separate property - called VCDataSizeProp whose value is the size of the binary - data. The APIs sequence to construct the VObject subtree - of line [44] of Example.vcf is - - // VObject *vcard; - VObject *p1 = addProp(vcard,VCLogoProp); - (void) addProp(p1,VCGIFProp); - (void) addProp(p1,VCBASE64Prop); - VObject *p2 = addProp(p1,VCDataSizeProp); - (void) setVObjectLongValue(p2,1482); - setVObjectAnyValue(vcard,...pointer to binary data); - - Note the presence of VCBase64Prop will cause the - writeVObject API to output the binary data as BASE64 text. - For VCard/VCalendar application, having the VCBase64Prop - property is practically always necessary for property with - binary data as its value. - -* Note on Quoted-Printable String - String value with embedded newline are written out as - quoted-prinatable string. It is therefore important - to mark a property with a string value that has - one or more embedded newlines, with the VCQutedPrintableProp - property. e.g. - - // VObject *root; - char *msg="To be\nor\nnot to be"; - VObject *p = addPropValue(root,VCDescriptionProp,msg); - // the following is how you mark a property with - // a property. In this case, the marker is - // VCQuotedPrintableProp - addProp(p,VCQuotedPrintableProp); - -* Note on Unicode - Although, the current parser takes ASCII text file only, - string values are all stored as Unicode in the VObject tree. - For now, when using the VObject APIs to construct a - VObject tree, one should always convert ASCII string value - to a Unicode string value: - - // VObject *root; - VObject *p = addProp(root,VCSomeProp); - setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue)); - - An API is provided to simplify the above process: - - addPropValue(root,VCSomeProp,someASCIIStringZValue); - - Note that someASCIISTringZValue is automatically converted to - Unicode by addPropValue API, where as, the former code - sequence do an explicit call to fakeUnicode. - - To read back the value, one should use the vObjectUStringZValue - API not vObjectStringZValue API. The value returned by the - vObjectUStringZValue API is a Unicode string. If the application - do not know how to handle Unicode string, it can use the - fakeCString API to convert it back to ASCII string (as long - as the conversion is meaningful). - - Note that fakeCString return a heap allocated memory. It is - important to call deleteStr on fakeCString return value if - it is not longer required (or there will be memory leak). - - NOTE: Unfortunately, at the point when this document is written, - there is still no consensus on how Unicode is to be handled - in the textual representation of VCard/VCalendar. So, there - is no version of writeVObject and the parser to output and - input Unicode textual representation of VCard/VCalendar. - - -Example.vcf ------------ -line -number Input Text (example.vcf) ------- ---------- -1 BEGIN:VCALENDAR -2 DCREATED:19961102T100522 -3 GEO:0,0 -4 VERSION:1.0 -5 BEGIN:VEVENT -6 DTSTART:19961103T000000 -7 DTEND:20000101T000000 -8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A= -9 or =0A= -10 not to be -11 STATUS:O.K. -12 X-ACTION:No action required -13 DALARM:19961103T114500;5;3;Enjoy -14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom. -15 END:VEVENT -16 -17 BEGIN:VTODO -18 DUE:19960614T0173000 -19 DESCRIPTION:Relex. -20 END:VTODO -21 -22 END:VCALENDAR -23 -24 BEGIN:VCARD -25 N:Alden;Roland -26 FN:Roland H. Alden -27 ORG:AT&T;Versit Project Office -28 TITLE:Consultant -29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com -30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -31 Suite 2208=0A= -32 One Pine Street=0A= -33 San Francisco, CA 94111 -34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -35 Suite 2208=0A= -36 One Pine Street=0A= -37 San Francisco, CA 94111=0A= -38 U.S.A. -39 TEL;WORK;PREF;MSG:+1 415 296 9106 -40 TEL;WORK;FAX:+1 415 296 9016 -41 TEL;MSG;CELL:+1 415 608 5981 -42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. -43 SOUND:ROW-LAND H ALL-DIN -44 LOGO;GIF;BASE64: -45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC - ... 30 lines of BASE64 data not shown here. -76 END:VCARD - - -VObject Representation of Example.vcf: -------------------------------------- -line -in -text -file VObject Tree as Printed by printVObject API ----- ------------------------------------------- -1 VCALENDAR -2 DCREATED="19961102T100522" -3 GEO="0,0" -4 VERSION="1.0" -5 VEVENT -6 DTSTART="19961103T000000" -7 DTEND="20000101T000000" -8 DESCRIPTION="To be -9 or -10 not to be" -8 QUOTED-PRINTABLE -11 STATUS="O.K." -12 X-ACTION="No action required" -13 DALARM -13 RUNTIME="19961103T114500" -13 SNOOZETIME="5" -13 REPEATCOUNT="3" -13 DISPLAYSTRING="Enjoy" -14 MALARM -14 RUNTIME="19970101T120000" -14 EMAIL="johny@nowhere.com" -14 NOTE="Call Mom" -17 VTODO -18 DUE="19960614T0173000" -19 DESCRIPTION="Relex." -24 VCARD -25 N -25 F="Alden" -25 G="Roland" -26 FN="Roland H. Alden" -27 ORG -27 ORGNAME="AT&T" -27 OUN="Versit Project Office" -28 TITLE="Consultant" -29 EMAIL="ralden@alden.com" -29 WORK -29 PREF -29 INTERNET -30 LABEL="Roland H. Alden -31 Suite 2208 -32 One Pine Street -33 San Francisco, CA 94111" -30 DOM -30 POSTAL -30 PARCEL -30 HOME -30 WORK -30 QUOTED-PRINTABLE -34 LABEL="Roland H. Alden -35 Suite 2208 -36 One Pine Street -37 San Francisco, CA 94111 -38 U.S.A." -34 POSTAL -34 PARCEL -34 HOME -34 WORK -34 QUOTED-PRINTABLE -39 TEL="+1 415 296 9106" -39 WORK -39 PREF -39 MSG -40 TEL="+1 415 296 9016" -40 WORK -40 FAX -41 TEL="+1 415 608 5981" -41 MSG -41 CELL -42 ADR -42 EXT ADD="Suite 2208" -42 STREET="One Pine Street" -42 L="San Francisco" -42 R="CA" -42 PC="94111" -42 C="U.S.A." -43 SOUND="ROW-LAND H ALL-DIN" -44 LOGO=[raw data] -44 GIF -44 BASE64 -44 DATASIZE=1482 - +NOTE: If you used the earlier APIs released by Versit +then you will want to look at the document "migrate.doc" +included with this package. It contains a discussion of +the differences between the old API and this one. + +---------------------------------------------------------------- + +The vCard/vCalendar C interface is implemented in the set +of files as follows: + +vcc.y, yacc source, and vcc.c, the yacc output you will use +implements the core parser + +vobject.c implements an API that insulates the caller from +the parser and changes in the vCard/vCalendar BNF + +port.h defines compilation environment dependent stuff + +vcc.h and vobject.h are header files for their .c counterparts + +vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions +which you may find useful. + +test.c is a standalone test driver that exercises some of +the features of the APIs provided. Invoke test.exe on a +VCARD/VCALENDAR input text file and you will see the pretty +print output of the internal representation (this pretty print +output should give you a good idea of how the internal +representation looks like -- there is one such output in the +following too). Also, a file with the .out suffix is generated +to show that the internal representation can be written back +in the original text format. + +----------------------------------------------------------------- + + + VObject for VCard/VCalendar + +Table of Contents +================= +1. VObject +2. Internal Representations of VCard/VCalendar +3. Iterating Through VObject's Properties or Values +4. Pretty Printing a VObject Tree +5. Building A VObject Representation of A VCard/VCalendar +6. Converting A VObject Representation Into Its Textual Representation +7. Miscellaneous Notes On VObject APIs usages +8. Brief descriptions of each APIs +9. Additional Programming Notes. + +This document is mainly about the VObject and its APIs. The main +use of a VObject is to represent a VCard or a VCalendar inside +a program. However, its use is not limited to aforemention as it +can represent an arbitrary information that makes up of a tree or +forest of properties/values. + +1. VObject + ======= +A VObject can have a name (id) and a list of associated properties and +a value. Each property is itself a VObject. + +2. Internal Representations of VCard/VCalendar + =========================================== +A list of VCard or a VCalendar is represented by a list of VObjects. +The name (id) of the VObjects in the list is either VCCardProp or +VCCalProp. Each of these VObjects can have a list of properties. +Since a property is represented as a VObject, each of these properties +can have a name, a list of properties, and a value. + +For example, the input file "vobject.vcf": + +BEGIN:VCARD +N:Alden;Roland +FN:Roland H. Alden +ORG:AT&T;Versit Project Office +TITLE:Consultant +EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com +EMAIL;INTERNET:ralden@sfgate.com +EMAIL;MCIMail:242-2200 +LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +Suite 2208=0A= +One Pine Street=0A= +San Francisco, CA 94111 +LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +Suite 2208=0A= +One Pine Street=0A= +San Francisco, CA 94111=0A= +U.S.A. +TEL;WORK;PREF;MSG:+1 415 296 9106 +TEL;WORK;FAX:+1 415 296 9016 +TEL;MSG;CELL:+1 415 608 5981 +ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. +SOUND:ROW-LAND H ALL-DIN +LOGO;GIF;BASE64: + R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC + QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO + 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv + /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw + cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu + ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW + ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf + MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM + 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E + +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW + gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm + LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s + JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6 + mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA + 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj + GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim + DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo + 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f + hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR + BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL + thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7 + asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5 + fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04 + UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe + eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C + z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI + ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4 + wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY + gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA + i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4 + I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7 + +BEGIN:VCALENDAR +DCREATED:19960523T100522 +PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN +VERSION:0.3 +BEGIN:VEVENT +START:19960523T120000 +END:19960523T130000 +SUBTYPE:PHONE CALL +SUMMARY:VERSIT PDI PR Teleconference/Interview +DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland +END:VEVENT +BEGIN:VEVENT +START:19960523T113000 +END:19960523T115500 +SUBTYPE:LUNCH +SUMMARY:Eat in the cafeteria today +END:VEVENT +END:VCALENDAR + +END:VCARD + + +will conceptually be represented as + vcard + VCNameProp + VCFamilyNameProp=Alden + VCGivenNameProp=Roland + VCFullNameProp=Roland H.Alden + .... + +note that + EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com +will be represented as: + VCEmailAddress=sf!rincon!ralden@alden.attmail.com + VCWork + VCPreferred + VCInternet +where the lower level properties are properties of the property +VCEmailAddress. + +Groupings are flattened out in the VObject representation such +that: + a.b:blah + a.c:blahblah +are represented as: + b=blah + VCGrouping=a + c=blahblah + VCGrouping=a +i.e. one can read the above as: + the property "b" has value "blah" and property "VCGrouping" + with the value "a". + the property "c" has value "blahblah" and property "VCGrouping" + with the value "a". +likewise, multi-level groupings are flatten similarly. e.g. + a.b.c:blah + a.b.e:blahblah +--> + c=blah + VCGrouping=b + VCGrouping=a + e=blahblah + VCGrouping=b + VCGrouping=a +which read: + the property "c" has value "blah" and property "VCGrouping" + with the value "b" which has property "VCGrouping" + with value "a". + the property "e" has value "blahblah" and property "VCGrouping" + with the value "b" which has property "VCGrouping" + with value "a". + +3. Iterating Through VObject's Properties or Values + ================================================ +The following is a skeletal form of iterating through +all properties of a vobject, o: + + // assume the object of interest, o, is of type VObject + VObjectIterator i; + initPropIterator(&i,o); + while (moreIteration(&i)) { + VObject *each = nextVObject(&i); + // ... do something with "each" property + } + +Use the API vObjectName() to access a VObject's name. +Use the API vObjectValueType() to determine if a VObject has + a value. For VCard/VCalendar application, you + should not need this function as practically + all values are either of type VCVT_USTRINGZ or + VCVT_RAW (i.e set by setVObjectUStringZValue and + setVObjectAnyValue APIs respectively), and the + value returned by calls to vObjectUStringZValue + and vObjectAnyValue are 0 if a VObject has no + value. (There is a minor exception where VObject with + VCDataSizeProp has value that is set by + setVObjectLongValue). +Use the APIs vObject???Value() to access a VObject's value. + where ??? is the expected type. +Use the APIs setvObject???Value() to set or modify a VObject's value. + where ??? is the expected type. +Use the API isAPropertyOf() to query if a name match the name of + a property of a VObject. Since isAPropertyOf() return + the matching property, we can use that to retrieve + a property and subsequently the value of the property. + +4. Pretty Printing a VObject Tree + ============================== +VObject tree can be pretty printed with the printVObject() function. +The output of pretty printing a VObject representation of the input +test file "vobject.vcf" is shown below. Note that the indentation +indicates the tree hirerarchy where the immediate children nodes +of a parent node is all at the same indentation level and the +immediate children nodes are the immediate properties of the +associated parent nodes. In the following, {N,FN,ORG,TITLE,...} +are immediate properties of VCARD. {F and G} are properties of N +with value {"Alden" and "Roland"} respectively; FN has no property +but has the value "Roland H. Alden"; EMAIL has value and +the properties WORK, PREF, and INTERNET. + + +VCARD + N + F="Alden" + G="Roland" + FN="Roland H. Alden" + ORG + ORGNAME="AT&T" + OUN="Versit Project Office" + TITLE="Consultant" + EMAIL="sf!rincon!ralden@alden.attmail.com" + WORK + PREF + INTERNET + EMAIL="ralden@sfgate.com" + INTERNET + EMAIL="242-2200" + MCIMail + LABEL="Roland H. Alden + Suite 2208 + One Pine Street + San Francisco, CA 94111" + DOM + POSTAL + PARCEL + HOME + WORK + QP + LABEL="Roland H. Alden + Suite 2208 + One Pine Street + San Francisco, CA 94111 + U.S.A." + POSTAL + PARCEL + HOME + WORK + QP + TEL="+1 415 296 9106" + WORK + PREF + MSG + TEL="+1 415 296 9016" + WORK + FAX + TEL="+1 415 608 5981" + MSG + CELL + ADR + EXT ADD="Suite 2208" + STREET="One Pine Street" + L="San Francisco" + R="CA" + PC="94111" + C="U.S.A." + SOUND="ROW-LAND H ALL-DIN" + LOGO=[raw data] + GIF + BASE64 + DataSize=1482 +VCALENDAR + DCREATED="19960523T100522" + PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN" + VERSION="0.3" + VEVENT + START="19960523T120000" + END="19960523T130000" + SUBTYPE="PHONE CALL" + SUMMARY="VERSIT PDI PR Teleconference/Interview" + DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland" + VEVENT + START="19960523T113000" + END="19960523T115500" + SUBTYPE="LUNCH" + SUMMARY="Eat in the cafeteria today" + +5. Building A VObject Representation of A VCard/VCalendar + ====================================================== +The parser in vcc.y converts an input file with one or more +VCard/VCalendar that is in their textual representation +into their corresponding VObject representation. + +VObject representation of a VCard/VCalendar can also be built +directly with calls to the VObject building APIs. e.g. + + VObject *prop; + VObject *vcard = newVObject(VCCardProp); + prop = addProp(vcard,VCNameProp); + addPropValue(prop,VCFamilyNameProp,"Alden"); + addPropValue(prop,VCGivenNameProp,"Roland"); + addPropValue(vcard,VCFullNameProp,"Roland H. Alden"); + .... + +6. Converting A VObject Representation Into Its Textual Representation + =================================================================== +The VObject representation can be converted back to its textual +representation via the call to writeVObject() or writeMemVObject() +API. e.g. + a. to write to a file: + // assume vcard is of type VObject + FILE *fp = fopen("alden.vcf","w"); + writeVObject(fp,vcard); + a. to write to memory, and let the API allocate the required memory. + char* clipboard = writeVObject(0,0,vcard); + ... do something to clipboard + free(clipboard); + b. to write to a user allocated buffer: + char clipboard[16384]; + int len = 16384; + char *buf = writeVObject(clipboard,&len,vcard); + ... buf will be equal to clipboard if the write + is successful otherwise 0. + +In the case of writing to memory, the memory buffer can be either +allocated by the API or the user. If the user allocate the +memory for the buffer, then the length of the buffer needs to be +communicated to the API via a variable. The variable passed as +the length argument will be overwritten with the actual size +of the text output. A 0 return value from writeMemVObject() +indicates an error which could be caused by overflowing the +size of the buffer or lack of heap memory. + +7. Miscellaneous Notes On VObject APIs usages + ========================================== +a. vcc.h -- contains basic interfaces to the parser: + VObject* Parse_MIME(const char *input, unsigned long len); + VObject* Parse_MIME_FromFile(FILE *file); + -- both of this return a null-terminated list of + VObject that is either a VCARD or VCALENDAR. + To iterate through this list, do + VObject *t, *v; + v = Parse_Mime_FromFile(fp); + while (v) { + // ... do something to v. + t = v; + v = nextVObjectInList(v); + cleanVObject(t); + } + note that call to cleanVObject will release + resource used to represent the VObject. + +b. vobject.h -- contains basic interfaces to the VObject APIs. + see the header for more details. + The structure of VObject is purposely (hiddened) not exposed + to the user. Every access has to be done via + the APIs. This way, if we need to change the + structure or implementation, the client need not + recompile as long as the interfaces remain the + same. + +c. values of a property is determined by the property definition + itself. The vobject APIs does not attempt to enforce + any of such definition. It is the consumer responsibility + to know what value is expected from a property. e.g + most properties have unicode string value, so to access + the value of these type of properties, you will use + the vObjectUStringZValue() to read the value and + setVObjectUStringZValue() to set or modify the value. + Refer to the VCard and VCalendar specifications for + the definition of each property. + +d. properties name (id) are case incensitive. + +8. Brief descriptions of each APIs + =============================== + * the predefined properties' names (id) are listed under vobject.h + each is of the form VC*Prop. e.g. + #define VC7bitProp "7BIT" + #define VCAAlarmProp "AALARM" + .... + + * consumer of a VObject can only define pointers to VObject. + + * a variable of type VObjectIterator, say "i", can be used to iterate + through a VObject's properties, say "o". The APIs related to + VObjectIterator are: + void initPropIterator(VObjectIterator *i, VObject *o); + -- e.g. usage + initPropIterator(&i,o); + int moreIteration(VObjectIterator *i); + -- e.g. usage + while (moreIteration(&i)) { ... } + VObject* nextVObject(VObjectIterator *i); + -- e.g. usage + while (moreIteration(&i)) { + VObject *each = nextVObject(&i); + } + + * VObject can be chained together to form a list. e.g. of such + use is in the parser where the return value of the parser is + a link list of VObject. A link list of VObject can be + built by: + void addList(VObject **o, VObject *p); + and iterated by + VObject* nextVObjectInList(VObject *o); + -- next VObjectInList return 0 if the list + is exhausted. + + * the following APIs are mainly used to construct a VObject tree: + VObject* newVObject(const char *id); + -- used extensively internally by VObject APIs but when + used externally, its use is mainly limited to the + construction of top level object (e.g. an object + with VCCardProp or VCCalendarProp id). + + void deleteVObject(VObject *p); + -- to deallocate single VObject, for most user, use + cleanVObject(VObject *o) instead for freeing all + resources associated with the VObject. + + char* dupStr(const char *s, unsigned int size); + -- duplicate a string s. If size is 0, the string is + assume to be a null-terminated. + + void deleteStr(const char *p); + -- used to deallocate a string allocated by dupStr(); + + void setVObjectName(VObject *o, const char* id); + -- set the id of VObject o. This function is not + normally used by the user. The setting of id + is normally done as part of other APIs (e.g. + addProp()). + + void setVObjectStringZValue(VObject *o, const char *s); + -- set a string value of a VObject. + + void setVObjectUStringZValue(VObject *o, const wchar_t *s); + -- set a Unicode string value of a VObject. + + void setVObjectIntegerValue(VObject *o, unsigned int i); + -- set an integer value of a VObject. + + void setVObjectLongValue(VObject *o, unsigned long l); + -- set an long integer value of a VObject. + + void setVObjectAnyValue(VObject *o, void *t); + -- set any value of a VObject. The value type is + unspecified. + + VObject* setValueWithSize(VObject *prop, void *val, unsigned int size); + -- set a raw data (stream of bytes) value of a VObject + whose size is size. The internal VObject representation + is + this object = val + VCDataSizeProp=size + i.e. the value val will be attached to the VObject prop + and a property of VCDataSize whose value is size + is also added to the object. + + void setVObjectVObjectValue(VObject *o, VObject *p); + -- set a VObject as the value of another VObject. + + const char* vObjectName(VObject *o); + -- retrieve the VObject's Name (i.e. id). + + const char* vObjectStringZValue(VObject *o); + -- retrieve the VObject's value interpreted as + null-terminated string. + + const wchar_t* vObjectUStringZValue(VObject *o); + -- retrieve the VObject's value interpreted as + null-terminated unicode string. + + unsigned int vObjectIntegerValue(VObject *o); + -- retrieve the VObject's value interpreted as + integer. + + unsigned long vObjectLongValue(VObject *o); + -- retrieve the VObject's value interpreted as + long integer. + + void* vObjectAnyValue(VObject *o); + -- retrieve the VObject's value interpreted as + any value. + + VObject* vObjectVObjectValue(VObject *o); + -- retrieve the VObject's value interpreted as + a VObject. + + VObject* addVObjectProp(VObject *o, VObject *p); + -- add a VObject p as a property of VObject o. + (not normally used externally for building a + VObject). + + VObject* addProp(VObject *o, const char *id); + -- add a property whose name is id to VObject o. + + VObject* addPropValue(VObject *o, const char *id, const char *v); + -- add a property whose name is id and whose value + is a null-terminated string to VObject o. + + VObject* addPropSizedValue(VObject *o, const char *id, + const char *v, unsigned int size); + -- add a property whose name is id and whose value + is a stream of bytes of size size, to VObject o. + + VObject* addGroup(VObject *o, const char *g); + -- add a group g to VObject o. + e.g. if g is a.b.c, you will have + o + c + VCGroupingProp=b + VCGroupingProp=a + and the object c is returned. + + VObject* isAPropertyOf(VObject *o, const char *id); + -- query if a property by the name id is in o and + return the VObject that represent that property. + + void printVObject(VObject *o); + -- pretty print VObject o to stdout (for debugging use). + + void writeVObject(FILE *fp, VObject *o); + -- convert VObject o to its textual representation and + write it to file. + + char* writeMemVObject(char *s, int *len, VObject *o); + -- convert VObject o to its textual representation and + write it to memory. If s is 0, then memory required + to hold the textual representation will be allocated + by this API. If a variable len is passed, len will + be overwritten with the byte size of the textual + representation. If s is non-zero, then s has to + be a user allocated buffer whose size has be passed + in len as a variable. Memory allocated by the API + has to be freed with call to free. The return value + of this API is either the user supplied buffer, + the memory allocated by the API, or 0 (in case of + failure). + + void cleanStrTbl(); + -- this function has to be called when all + VObject has been destroyed. + + void cleanVObject(VObject *o); + -- release all resources used by VObject o. + + wchar_t* fakeUnicode(const char *ps, int *bytes); + -- convert char* to wchar_t*. + + extern int uStrLen(const wchar_t *u); + -- length of unicode u. + + char *fakeCString(const wchar_t *u); + -- convert wchar_t to CString (blindly assumes that + this could be done). + +9. Additional Programming Notes + ============================ +In the following notes, please refers to the listing +of Example.vcf and its VObject Representation +(shown at the end of this section). + +* Handling the Return Value of the VCard/VCalendar Parser + The example input text file contains two root VObjects + (a VCalendar and a VCard). The output of the VCard/VCalendar + parser is a null-terminated list of VObjects. For this + particular input file, the list will have two VObjects. + The following shows a template for iterating through the + output of the Parser: + + VObject *t, *v; + v = Parse_Mime_fromFileName("example.vcf"); + while (v) { + // currently, v will either be a VCard or a VCalendar + // do whatever your application need to do to + // v here ... + t = v; + v = nextVObjectInList(v); + cleanVObject(t); + } + +* Iterating Through a VCard/VCalendar VObject + From the VObject APIs point of view, a VCard VObject + is the same as a VCalendar VObject. However, the application + needs to know what are in a VCard or a VCalendar. + For example, A VCalendar VObject can have VCDCreatedProp, + a VCGEOLocationProp, etc, and one or more VCEventProp and + or VCTodoProp. The VCEventProp and VCTodoProp can have + many properties of their own, which in turn could have + more properties (e.g. VCDAlarmProp can be a VCEventProp + VObject's property, and VCRunTimeProp can be a + VCDAlarmProp VObject's property. Because a VObject tree + can be arbitrarily complex, in general, to process all + properties and values of a VObject tree, a recursive walk + is desirable. An example recursive VObject tree walk + can be found in the vobject.c source lines for printVObject* + and writeVObject* APIs. Depending on what the application need + to do with a VCard or a VCalendar, a recursive walk + of the VObject tree may or may not be desirable. An example + template of a non-recursive walk is shown below: + + void processVCardVCalendar(char *inputFile) + { + VObject *t, *v; + v = Parse_Mime_fromFileName(inputFile); + while (v) { + char *n = vObjectName(v); + if (strcmp(n,VCCardProp) == 0) { + do_VCard(v); + } + else if (strcmp(n,VCCalendarProp) == 0) { + do_VCalendar(v); + } + else { + // don't know how to handle anything else! + } + t = v; + v = nextVObjectInList(v); + cleanVObject(t); + } + } + + void do_VCard(VObject *vcard) + { + VObjectIterator t; + initPropIterator(&t,vcard); + while (moreIteration(&t)) { + VObject *eachProp = nextVObject(&t); + // The primary purpose of this example is to + // show how to iterate through a VCard VObject, + // it is not meant to be efficient at all. + char *n = vObjectName(eachProp); + if (strcmp(n,VCNameProp)==0) { + do_name(eachProp); + } + else if (strcmp(n,VCEmailProp)==0) { + do_email(eachProp); + } + else if (strcmp(n,VCLabelProp)==0) { + do_label(eachProp); + } + else if .... + } + } + + void do_VCalendar(VObject *vcal) + { + VObjectIterator t; + initPropIterator(&t,vcard); + while (moreIteration(&t)) { + VObject *eachProp = nextVObject(&t); + // The primary purpose of this example is to + // show how to iterate through a VCalendar VObject, + // it is not meant to be efficient at all. + char *n = vObjectName(eachProp); + if (strcmp(n,VCDCreatedProp)==0) { + do_DCreated(eachProp); + } + else if (strcmp(n,VCVersionProp)==0) { + do_Version(eachProp); + } + else if (strcmp(n,VCTodoProp)==0) { + do_Todo(eachProp); + } + else if (strcmp(n,VCEventProp)==0) { + do_Event(eachProp); + } + else if .... + } + } + + void do_Todo(VObject *vtodo) { ... } + + void do_Event(VObject *vevent) { ... } + + ... + +* Property's Values and Properties + The VObject APIs do not attempt to check for the + correctness of the values of a property. Nor do they + will prevent the user from attaching a non-VCard/VCalendar + standard property to a VCard/VCalendar property. Take + the example of line [11] of the example, "O.K" is not + a valid value of VCStatusProp. It is up to the application + to accept or reject the value of a property. + +* Output of printVObject + PrintVObject pretty prints a VObject tree in human + readable form. See the listing at the end of the file + for an example output of printVObject on the example + input file "Example.vcf". + + Note that binary data are not shown in the output of + printVObject. Instead, a note is made ([raw data]) to + indicate that there exists such a binary data. + +* Note on Binary Data + When the value of a property is a binary data, it is only + useful to know the size of the binary data. + + In the case of the VCard/VCalendar parser, it chooses + to represent the size information as a separate property + called VCDataSizeProp whose value is the size of the binary + data. The APIs sequence to construct the VObject subtree + of line [44] of Example.vcf is + + // VObject *vcard; + VObject *p1 = addProp(vcard,VCLogoProp); + (void) addProp(p1,VCGIFProp); + (void) addProp(p1,VCBASE64Prop); + VObject *p2 = addProp(p1,VCDataSizeProp); + (void) setVObjectLongValue(p2,1482); + setVObjectAnyValue(vcard,...pointer to binary data); + + Note the presence of VCBase64Prop will cause the + writeVObject API to output the binary data as BASE64 text. + For VCard/VCalendar application, having the VCBase64Prop + property is practically always necessary for property with + binary data as its value. + +* Note on Quoted-Printable String + String value with embedded newline are written out as + quoted-prinatable string. It is therefore important + to mark a property with a string value that has + one or more embedded newlines, with the VCQutedPrintableProp + property. e.g. + + // VObject *root; + char *msg="To be\nor\nnot to be"; + VObject *p = addPropValue(root,VCDescriptionProp,msg); + // the following is how you mark a property with + // a property. In this case, the marker is + // VCQuotedPrintableProp + addProp(p,VCQuotedPrintableProp); + +* Note on Unicode + Although, the current parser takes ASCII text file only, + string values are all stored as Unicode in the VObject tree. + For now, when using the VObject APIs to construct a + VObject tree, one should always convert ASCII string value + to a Unicode string value: + + // VObject *root; + VObject *p = addProp(root,VCSomeProp); + setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue)); + + An API is provided to simplify the above process: + + addPropValue(root,VCSomeProp,someASCIIStringZValue); + + Note that someASCIISTringZValue is automatically converted to + Unicode by addPropValue API, where as, the former code + sequence do an explicit call to fakeUnicode. + + To read back the value, one should use the vObjectUStringZValue + API not vObjectStringZValue API. The value returned by the + vObjectUStringZValue API is a Unicode string. If the application + do not know how to handle Unicode string, it can use the + fakeCString API to convert it back to ASCII string (as long + as the conversion is meaningful). + + Note that fakeCString return a heap allocated memory. It is + important to call deleteStr on fakeCString return value if + it is not longer required (or there will be memory leak). + + NOTE: Unfortunately, at the point when this document is written, + there is still no consensus on how Unicode is to be handled + in the textual representation of VCard/VCalendar. So, there + is no version of writeVObject and the parser to output and + input Unicode textual representation of VCard/VCalendar. + + +Example.vcf +----------- +line +number Input Text (example.vcf) +------ ---------- +1 BEGIN:VCALENDAR +2 DCREATED:19961102T100522 +3 GEO:0,0 +4 VERSION:1.0 +5 BEGIN:VEVENT +6 DTSTART:19961103T000000 +7 DTEND:20000101T000000 +8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A= +9 or =0A= +10 not to be +11 STATUS:O.K. +12 X-ACTION:No action required +13 DALARM:19961103T114500;5;3;Enjoy +14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom. +15 END:VEVENT +16 +17 BEGIN:VTODO +18 DUE:19960614T0173000 +19 DESCRIPTION:Relex. +20 END:VTODO +21 +22 END:VCALENDAR +23 +24 BEGIN:VCARD +25 N:Alden;Roland +26 FN:Roland H. Alden +27 ORG:AT&T;Versit Project Office +28 TITLE:Consultant +29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com +30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +31 Suite 2208=0A= +32 One Pine Street=0A= +33 San Francisco, CA 94111 +34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +35 Suite 2208=0A= +36 One Pine Street=0A= +37 San Francisco, CA 94111=0A= +38 U.S.A. +39 TEL;WORK;PREF;MSG:+1 415 296 9106 +40 TEL;WORK;FAX:+1 415 296 9016 +41 TEL;MSG;CELL:+1 415 608 5981 +42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. +43 SOUND:ROW-LAND H ALL-DIN +44 LOGO;GIF;BASE64: +45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC + ... 30 lines of BASE64 data not shown here. +76 END:VCARD + + +VObject Representation of Example.vcf: +------------------------------------- +line +in +text +file VObject Tree as Printed by printVObject API +---- ------------------------------------------- +1 VCALENDAR +2 DCREATED="19961102T100522" +3 GEO="0,0" +4 VERSION="1.0" +5 VEVENT +6 DTSTART="19961103T000000" +7 DTEND="20000101T000000" +8 DESCRIPTION="To be +9 or +10 not to be" +8 QUOTED-PRINTABLE +11 STATUS="O.K." +12 X-ACTION="No action required" +13 DALARM +13 RUNTIME="19961103T114500" +13 SNOOZETIME="5" +13 REPEATCOUNT="3" +13 DISPLAYSTRING="Enjoy" +14 MALARM +14 RUNTIME="19970101T120000" +14 EMAIL="johny@nowhere.com" +14 NOTE="Call Mom" +17 VTODO +18 DUE="19960614T0173000" +19 DESCRIPTION="Relex." +24 VCARD +25 N +25 F="Alden" +25 G="Roland" +26 FN="Roland H. Alden" +27 ORG +27 ORGNAME="AT&T" +27 OUN="Versit Project Office" +28 TITLE="Consultant" +29 EMAIL="ralden@alden.com" +29 WORK +29 PREF +29 INTERNET +30 LABEL="Roland H. Alden +31 Suite 2208 +32 One Pine Street +33 San Francisco, CA 94111" +30 DOM +30 POSTAL +30 PARCEL +30 HOME +30 WORK +30 QUOTED-PRINTABLE +34 LABEL="Roland H. Alden +35 Suite 2208 +36 One Pine Street +37 San Francisco, CA 94111 +38 U.S.A." +34 POSTAL +34 PARCEL +34 HOME +34 WORK +34 QUOTED-PRINTABLE +39 TEL="+1 415 296 9106" +39 WORK +39 PREF +39 MSG +40 TEL="+1 415 296 9016" +40 WORK +40 FAX +41 TEL="+1 415 608 5981" +41 MSG +41 CELL +42 ADR +42 EXT ADD="Suite 2208" +42 STREET="One Pine Street" +42 L="San Francisco" +42 R="CA" +42 PC="94111" +42 C="U.S.A." +43 SOUND="ROW-LAND H ALL-DIN" +44 LOGO=[raw data] +44 GIF +44 BASE64 +44 DATASIZE=1482 + diff --git a/src/libicalvcal/icalvcal.c b/src/libicalvcal/icalvcal.c index 1c330187..a4389603 100644 --- a/src/libicalvcal/icalvcal.c +++ b/src/libicalvcal/icalvcal.c @@ -1258,7 +1258,7 @@ static void *rule_prop(int icaltype, VObject *object, icalcomponent *comp, return (void *)prop; } -/* directly convertable property. The string representation of vcal is +/* directly convertible property. The string representation of vcal is the same as ical */ void *dc_prop(int icaltype, VObject *object, icalcomponent *comp, icalvcal_defaults *defaults) diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 3eb80d2c..1e11d7a5 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -743,7 +743,7 @@ static char* lexLookaheadWord() { #ifdef _SUPPORT_LINE_FOLDING static void handleMoreRFC822LineBreak(int c) { - /* suport RFC 822 line break in cases like + /* support RFC 822 line break in cases like * ADR: foo; * morefoo; * more foo; @@ -1142,7 +1142,7 @@ int yylex() { } } else { - /* unknow token */ + /* unknown token */ return 0; } break; diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index 834f6b98..9643e562 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -709,7 +709,7 @@ static char* lexLookaheadWord() { #ifdef _SUPPORT_LINE_FOLDING static void handleMoreRFC822LineBreak(int c) { - /* suport RFC 822 line break in cases like + /* support RFC 822 line break in cases like * ADR: foo; * morefoo; * more foo; @@ -1108,7 +1108,7 @@ int yylex() { } } else { - /* unknow token */ + /* unknown token */ return 0; } break; diff --git a/src/python/ChangeLog b/src/python/ChangeLog index f6499f49..4cc5e099 100644 --- a/src/python/ChangeLog +++ b/src/python/ChangeLog @@ -3,19 +3,19 @@ * Component.py Added Calendar class. * Componeny.py Changed all component constructor so they cannot - take string arguments. Now, only NewComponent() can turn an iCal - string into a component. + take string arguments. Now, only NewComponent() can turn an iCal + string into a component. 2001-04-02 Eric Busboom * Component.py removed arguments from the Event constructor, since - I presume that the Component derived classes will always be - constructed with no arguments. + I presume that the Component derived classes will always be + constructed with no arguments. * Property.py Split out Attendee, Organizer, Time, Duration and - Period into their own files. Moved remaining classes to Derived - Properties.pm + Period into their own files. Moved remaining classes to Derived + Properties.pm 2001-03-13 Eric Busboom @@ -42,10 +42,10 @@ 2001-03-05 Eric Busboom * Property.py Added a lot of exception code to signal failure to - create a Property. + create a Property. * DerivedProperties.py Added derived property classes for RDATE - and TRIGGER, two properties that can have one of two value types. + and TRIGGER, two properties that can have one of two value types. 2001-03-04 Eric Busboom @@ -53,7 +53,7 @@ * Property.pm Added Property.ConstructorFailedError exception * Component.pm fixed bug in Collection.__setslice__. "," used - instead of ":" + instead of ":" 2001-03-04 Patrick Lewis @@ -73,30 +73,30 @@ 2001-02-28 Eric Busboom * Property Remove most internal data. The property now work - alsmost entirely off of the icalproperty that it holds a reference - to. Made changes in all derived Properties to accomodate the - change. + almost entirely off of the icalproperty that it holds a reference + to. Made changes in all derived Properties to accommodate the + change. * Property Added __del__ * Component Component.properties() now caches properties that it - constructs, so two calls to properties() to that get the same - icalproperty will also get the same Property. + constructs, so two calls to properties() to that get the same + icalproperty will also get the same Property. * Property Added Property.__cmp__ to test equality of properties - based on ical string values + based on ical string values 2001-02-27 Eric Busboom * Property Added Property.ref() to set/get the reference to the - Property's internal icalproperty + Property's internal icalproperty * Property Property._update_value now changes the icalproperty - value if a reference has been set. + value if a reference has been set. * Component re-instituted Component.properties(). The routine now - adds a 'ref' key to the dict that holds the python pointer - string. The C hex value of the pointer is in the 'pid' key + adds a 'ref' key to the dict that holds the python pointer + string. The C hex value of the pointer is in the 'pid' key 2001-02-27 Patrick Lewis @@ -110,17 +110,17 @@ * Period implemented methods in period - * Time Addedd addition and subtraction operators + * Time Added addition and subtraction operators 2001-02-25 Eric Busboom * Libical.py Added test routine for time, time_test() * Libical.py Remove end of line chars ('\r\n" ) from - Property._str__. Caller should add these lines itself + Property._str__. Caller should add these lines itself * Liical.py CHanges Time._update_values to set time VALUE type - based on use of is_date, rather than length of string. + based on use of is_date, rather than length of string. * Libical.py Removed call to _update_value in TIme::timezone diff --git a/src/python/Collection.py b/src/python/Collection.py index 1df6c351..389689e0 100644 --- a/src/python/Collection.py +++ b/src/python/Collection.py @@ -24,7 +24,7 @@ class Collection: """A group of components that can be modified somewhat like a list. Usage: - Collection(componet, propSequence) + Collection(component, propSequence) component is a Component object propSequence is a list or tuple of Property (or subclass of Property) diff --git a/src/python/Gauge.py b/src/python/Gauge.py index e56f949d..44954006 100644 --- a/src/python/Gauge.py +++ b/src/python/Gauge.py @@ -28,7 +28,7 @@ class Gauge: """ class ConstructorFailedError(LibicalError): - "Failed to create a Guage " + "Failed to create a Gauge " class CloneFailedError(LibicalError): "Failed to clone a component given Gauge " diff --git a/src/python/LibicalWrap_icaltime.i b/src/python/LibicalWrap_icaltime.i index 062c7746..f82a7706 100644 --- a/src/python/LibicalWrap_icaltime.i +++ b/src/python/LibicalWrap_icaltime.i @@ -123,7 +123,7 @@ return icaltime_days_in_month(month, year); } - /** Returns whether you've specified a leapyear or not. */ + /** Returns whether you've specified a leap year or not. */ static int is_leap_year (const int year) { return icaltime_is_leap_year(year); } diff --git a/src/python/Period.py b/src/python/Period.py index 6c95edee..60c2f304 100644 --- a/src/python/Period.py +++ b/src/python/Period.py @@ -116,7 +116,7 @@ class Period(Property): The return value is an instance of Time. If the Period has a duration set, but not an end time, this - method will caluculate the end time from the duration. """ + method will calculate the end time from the duration. """ if v != None: diff --git a/src/python/python-binding.txt b/src/python/python-binding.txt index 613022a6..514a95ab 100644 --- a/src/python/python-binding.txt +++ b/src/python/python-binding.txt @@ -92,14 +92,14 @@ component. But, if the component already has a DURATION property, then this is an error -- a component can't have both. icalcomponent_set_dtend determines if the component already has a -DURATION. If it does, it substracts the dtstart time from the new +DURATION. If it does, it subtracts the dtstart time from the new dtend time and sets the duration to that. Otherwise, it creates aor changes the DTEND. Also, icalcomponent_set_duration works the same regardless if the component is a VCALENDAR or a VEVENT. If it is a VCALENDAR, the routine descends into the VEVENT before making any changes. If it is -allready a VEVENT ( or VTODO or VJOURNAL ) the routine just makes the +already a VEVENT ( or VTODO or VJOURNAL ) the routine just makes the changes. With icalcomponent_add_property, you need to do this check yourself. diff --git a/src/python/test.py b/src/python/test.py index b8a78455..2de1fe61 100644 --- a/src/python/test.py +++ b/src/python/test.py @@ -32,7 +32,7 @@ PRODID:-//ABC Corporation//NONSGML My Product//EN METHOD:REQUEST BEGIN:VEVENT ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com -COMMENT: When in the course of writting comments and nonsense text\, it +COMMENT: When in the course of writing comments and nonsense text\, it becomes necessary to insert a newline DTSTART:19972512T120000 DTSTART:19970101T120000Z @@ -395,7 +395,7 @@ def test_event(): assert(len(event.x_properties('X-TEST'))==2) - event.description("A short description. Longer ones break things. Really. What does it break. The code is supposed to handle realy long lines, longer, in fact, than any sane person would create except by writting a random text generator or by excerpting text from a less sane person. Actually, it did \"break\" and I had to remove an \n assert to fix it.") + event.description("A short description. Longer ones break things. Really. What does it break. The code is supposed to handle really long lines, longer, in fact, than any sane person would create except by writing a random text generator or by excerpting text from a less sane person. Actually, it did \"break\" and I had to remove an \n assert to fix it.") event.status('TeNtAtIvE') print event.as_ical_string() diff --git a/src/test/regression-classify.c b/src/test/regression-classify.c index 38cacfee..7e5d4aa7 100644 --- a/src/test/regression-classify.c +++ b/src/test/regression-classify.c @@ -147,7 +147,7 @@ void test_classify(void) if (this_uid != 0) { /* Look in the calendar for a component with the same UID - as the incoming component. We should reall also be + as the incoming component. We should really also be checking the RECURRENCE-ID. Another way to do this operation is to us icalset_find_match(), which does use the RECURRENCE-ID. */ -- cgit v1.2.1 From 9246dc6317bcccba8661515820f77980bae1a4fe Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 6 Dec 2021 18:10:51 -0500 Subject: Fix a crash in cleanVObject on invalid values --- src/libicalvcal/vcc.c | 6 ++++-- src/test/regression.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index 1e11d7a5..19eb9a16 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -850,10 +850,12 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) } static void finiLex() { - VObject* vobj; + VObject* vobj, *topobj = 0; while(vobj = popVObject(), vobj) { - cleanVObject(vobj); + topobj = vobj; } + if(topobj) + cleanVObject(topobj); free(lexBuf.strs); } diff --git a/src/test/regression.c b/src/test/regression.c index c070a92e..41171169 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4672,6 +4672,49 @@ static void test_vcc_vcard_parse(void) "DTSTART;VALUE=DATE:20210902\r\n" "END:VEVENT\r\n" "END:VCALENDAR\r\n"; + const char *vcalendar_broken = + "BEGIN:VCALENDAR\r\n" + "BEGIN:VTIMEZONE\r\n" + "TZID:tz/id\r\n" + "BEGIN:STANDARD\r\n" + "TZNAME:PMT\r\n" + "TZOFFSETFROM:+005744\r\n" + "TZOFFSETTO:+005744\r\n" + "DTSTART:18500101T000000\r\n" + "END:STANDARD\r\n" + "BEGIN:STANDARD\r\n" + "TZNAME:CET\r\n" + "TZOFFSETFROM:+005744\r\n" + "TZOFFSETTO:+0100\r\n" + "DTSTART:18911001T000000\r\n" + "END:STANDARD\r\n" + "BEGIN:DAYLIGHT\r\n" + "TZNAME:CEST\r\n" + "TZOFFSETFROM:+0100\r\n" + "TZOFFSETTO:+0200\r\n" + "DTSTART:19160430T230000\r\n" + "END:DAYLIGHT\r\n" + "END:VTIMEZONE\r\n" + "BEGIN:VEVENT\r\n" + "UID:321\r\n" + "SUMMARY:Summary\r\n" + "DTSTAMP:20210803T063522Z\r\n" + "DTSTART;VALUE=DATE:20210902\r\n" + "END:VEVENT\r\n" + "BEGIN:VEVENT\r\n" + "UID:123\r\n" + "DTSTAMP:20210803T063522Z\r\n" + "DTSTART;VALUE=DATE:20210902\r\n" + "BEGIN:VALARM\r\n" + "ACTION:DISPLAY\r\n" + "TRIGGER:-PT15M\r\n" + "END:VALARM\r\n" + "DESCRIPTION:aaa \r\n" + "\r\n" + " aaa\\naaa 1\\n \r\n" + "SUMMARY:Summary\r\n" + "END:VEVENT\r\n" + "END:VCALENDAR\r\n"; VObject *vcal; vcal = Parse_MIME(vcard1, (unsigned long)strlen(vcard1)); @@ -4724,6 +4767,9 @@ static void test_vcc_vcard_parse(void) cleanVObject(vcal); } + + vcal = Parse_MIME(vcalendar_broken, (unsigned long)strlen(vcalendar_broken)); + ok("vCalendar-broken cannot be parsed", (vcal == NULL)); } int main(int argc, char *argv[]) -- cgit v1.2.1 From b2ef2ec399d309201a0f71f878e905445d59fd43 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 8 Dec 2021 17:31:51 -0500 Subject: update zoneinfo to tzdata2021e --- zoneinfo/Africa/Abidjan.ics | 4 ++-- zoneinfo/Africa/Accra.ics | 4 ++-- zoneinfo/Africa/Addis_Ababa.ics | 4 ++-- zoneinfo/Africa/Algiers.ics | 4 ++-- zoneinfo/Africa/Asmara.ics | 4 ++-- zoneinfo/Africa/Asmera.ics | 4 ++-- zoneinfo/Africa/Bamako.ics | 4 ++-- zoneinfo/Africa/Bangui.ics | 4 ++-- zoneinfo/Africa/Banjul.ics | 4 ++-- zoneinfo/Africa/Bissau.ics | 4 ++-- zoneinfo/Africa/Blantyre.ics | 4 ++-- zoneinfo/Africa/Brazzaville.ics | 4 ++-- zoneinfo/Africa/Bujumbura.ics | 4 ++-- zoneinfo/Africa/Cairo.ics | 4 ++-- zoneinfo/Africa/Casablanca.ics | 4 ++-- zoneinfo/Africa/Ceuta.ics | 4 ++-- zoneinfo/Africa/Conakry.ics | 4 ++-- zoneinfo/Africa/Dakar.ics | 4 ++-- zoneinfo/Africa/Dar_es_Salaam.ics | 4 ++-- zoneinfo/Africa/Djibouti.ics | 4 ++-- zoneinfo/Africa/Douala.ics | 4 ++-- zoneinfo/Africa/El_Aaiun.ics | 4 ++-- zoneinfo/Africa/Freetown.ics | 4 ++-- zoneinfo/Africa/Gaborone.ics | 4 ++-- zoneinfo/Africa/Harare.ics | 4 ++-- zoneinfo/Africa/Johannesburg.ics | 4 ++-- zoneinfo/Africa/Juba.ics | 4 ++-- zoneinfo/Africa/Kampala.ics | 4 ++-- zoneinfo/Africa/Khartoum.ics | 4 ++-- zoneinfo/Africa/Kigali.ics | 4 ++-- zoneinfo/Africa/Kinshasa.ics | 4 ++-- zoneinfo/Africa/Lagos.ics | 4 ++-- zoneinfo/Africa/Libreville.ics | 4 ++-- zoneinfo/Africa/Lome.ics | 4 ++-- zoneinfo/Africa/Luanda.ics | 4 ++-- zoneinfo/Africa/Lubumbashi.ics | 4 ++-- zoneinfo/Africa/Lusaka.ics | 4 ++-- zoneinfo/Africa/Malabo.ics | 4 ++-- zoneinfo/Africa/Maputo.ics | 4 ++-- zoneinfo/Africa/Maseru.ics | 4 ++-- zoneinfo/Africa/Mbabane.ics | 4 ++-- zoneinfo/Africa/Mogadishu.ics | 4 ++-- zoneinfo/Africa/Monrovia.ics | 4 ++-- zoneinfo/Africa/Nairobi.ics | 4 ++-- zoneinfo/Africa/Ndjamena.ics | 4 ++-- zoneinfo/Africa/Niamey.ics | 4 ++-- zoneinfo/Africa/Nouakchott.ics | 4 ++-- zoneinfo/Africa/Ouagadougou.ics | 4 ++-- zoneinfo/Africa/Porto-Novo.ics | 4 ++-- zoneinfo/Africa/Sao_Tome.ics | 4 ++-- zoneinfo/Africa/Timbuktu.ics | 4 ++-- zoneinfo/Africa/Tripoli.ics | 4 ++-- zoneinfo/Africa/Tunis.ics | 4 ++-- zoneinfo/Africa/Windhoek.ics | 4 ++-- zoneinfo/America/Adak.ics | 4 ++-- zoneinfo/America/Anchorage.ics | 4 ++-- zoneinfo/America/Anguilla.ics | 4 ++-- zoneinfo/America/Antigua.ics | 4 ++-- zoneinfo/America/Araguaina.ics | 4 ++-- zoneinfo/America/Argentina/Buenos_Aires.ics | 4 ++-- zoneinfo/America/Argentina/Catamarca.ics | 4 ++-- zoneinfo/America/Argentina/ComodRivadavia.ics | 4 ++-- zoneinfo/America/Argentina/Cordoba.ics | 4 ++-- zoneinfo/America/Argentina/Jujuy.ics | 4 ++-- zoneinfo/America/Argentina/La_Rioja.ics | 4 ++-- zoneinfo/America/Argentina/Mendoza.ics | 4 ++-- zoneinfo/America/Argentina/Rio_Gallegos.ics | 4 ++-- zoneinfo/America/Argentina/Salta.ics | 4 ++-- zoneinfo/America/Argentina/San_Juan.ics | 4 ++-- zoneinfo/America/Argentina/San_Luis.ics | 4 ++-- zoneinfo/America/Argentina/Tucuman.ics | 4 ++-- zoneinfo/America/Argentina/Ushuaia.ics | 4 ++-- zoneinfo/America/Aruba.ics | 4 ++-- zoneinfo/America/Asuncion.ics | 4 ++-- zoneinfo/America/Atikokan.ics | 4 ++-- zoneinfo/America/Atka.ics | 4 ++-- zoneinfo/America/Bahia.ics | 4 ++-- zoneinfo/America/Bahia_Banderas.ics | 4 ++-- zoneinfo/America/Barbados.ics | 4 ++-- zoneinfo/America/Belem.ics | 4 ++-- zoneinfo/America/Belize.ics | 4 ++-- zoneinfo/America/Blanc-Sablon.ics | 4 ++-- zoneinfo/America/Boa_Vista.ics | 4 ++-- zoneinfo/America/Bogota.ics | 4 ++-- zoneinfo/America/Boise.ics | 4 ++-- zoneinfo/America/Buenos_Aires.ics | 4 ++-- zoneinfo/America/Cambridge_Bay.ics | 4 ++-- zoneinfo/America/Campo_Grande.ics | 4 ++-- zoneinfo/America/Cancun.ics | 4 ++-- zoneinfo/America/Caracas.ics | 4 ++-- zoneinfo/America/Catamarca.ics | 4 ++-- zoneinfo/America/Cayenne.ics | 4 ++-- zoneinfo/America/Cayman.ics | 4 ++-- zoneinfo/America/Chicago.ics | 4 ++-- zoneinfo/America/Chihuahua.ics | 4 ++-- zoneinfo/America/Coral_Harbour.ics | 4 ++-- zoneinfo/America/Cordoba.ics | 4 ++-- zoneinfo/America/Costa_Rica.ics | 4 ++-- zoneinfo/America/Creston.ics | 4 ++-- zoneinfo/America/Cuiaba.ics | 4 ++-- zoneinfo/America/Curacao.ics | 4 ++-- zoneinfo/America/Danmarkshavn.ics | 4 ++-- zoneinfo/America/Dawson.ics | 4 ++-- zoneinfo/America/Dawson_Creek.ics | 4 ++-- zoneinfo/America/Denver.ics | 4 ++-- zoneinfo/America/Detroit.ics | 4 ++-- zoneinfo/America/Dominica.ics | 4 ++-- zoneinfo/America/Edmonton.ics | 4 ++-- zoneinfo/America/Eirunepe.ics | 4 ++-- zoneinfo/America/El_Salvador.ics | 4 ++-- zoneinfo/America/Ensenada.ics | 4 ++-- zoneinfo/America/Fort_Nelson.ics | 4 ++-- zoneinfo/America/Fort_Wayne.ics | 4 ++-- zoneinfo/America/Fortaleza.ics | 4 ++-- zoneinfo/America/Glace_Bay.ics | 4 ++-- zoneinfo/America/Godthab.ics | 4 ++-- zoneinfo/America/Goose_Bay.ics | 4 ++-- zoneinfo/America/Grand_Turk.ics | 4 ++-- zoneinfo/America/Grenada.ics | 4 ++-- zoneinfo/America/Guadeloupe.ics | 4 ++-- zoneinfo/America/Guatemala.ics | 4 ++-- zoneinfo/America/Guayaquil.ics | 4 ++-- zoneinfo/America/Guyana.ics | 4 ++-- zoneinfo/America/Halifax.ics | 4 ++-- zoneinfo/America/Havana.ics | 4 ++-- zoneinfo/America/Hermosillo.ics | 4 ++-- zoneinfo/America/Indiana/Indianapolis.ics | 4 ++-- zoneinfo/America/Indiana/Knox.ics | 4 ++-- zoneinfo/America/Indiana/Marengo.ics | 4 ++-- zoneinfo/America/Indiana/Petersburg.ics | 4 ++-- zoneinfo/America/Indiana/Tell_City.ics | 4 ++-- zoneinfo/America/Indiana/Vevay.ics | 4 ++-- zoneinfo/America/Indiana/Vincennes.ics | 4 ++-- zoneinfo/America/Indiana/Winamac.ics | 4 ++-- zoneinfo/America/Indianapolis.ics | 4 ++-- zoneinfo/America/Inuvik.ics | 4 ++-- zoneinfo/America/Iqaluit.ics | 4 ++-- zoneinfo/America/Jamaica.ics | 4 ++-- zoneinfo/America/Jujuy.ics | 4 ++-- zoneinfo/America/Juneau.ics | 4 ++-- zoneinfo/America/Kentucky/Louisville.ics | 4 ++-- zoneinfo/America/Kentucky/Monticello.ics | 4 ++-- zoneinfo/America/Knox_IN.ics | 4 ++-- zoneinfo/America/Kralendijk.ics | 4 ++-- zoneinfo/America/La_Paz.ics | 4 ++-- zoneinfo/America/Lima.ics | 4 ++-- zoneinfo/America/Los_Angeles.ics | 4 ++-- zoneinfo/America/Louisville.ics | 4 ++-- zoneinfo/America/Lower_Princes.ics | 4 ++-- zoneinfo/America/Maceio.ics | 4 ++-- zoneinfo/America/Managua.ics | 4 ++-- zoneinfo/America/Manaus.ics | 4 ++-- zoneinfo/America/Marigot.ics | 4 ++-- zoneinfo/America/Martinique.ics | 4 ++-- zoneinfo/America/Matamoros.ics | 4 ++-- zoneinfo/America/Mazatlan.ics | 4 ++-- zoneinfo/America/Mendoza.ics | 4 ++-- zoneinfo/America/Menominee.ics | 4 ++-- zoneinfo/America/Merida.ics | 4 ++-- zoneinfo/America/Metlakatla.ics | 4 ++-- zoneinfo/America/Mexico_City.ics | 4 ++-- zoneinfo/America/Miquelon.ics | 4 ++-- zoneinfo/America/Moncton.ics | 4 ++-- zoneinfo/America/Monterrey.ics | 4 ++-- zoneinfo/America/Montevideo.ics | 4 ++-- zoneinfo/America/Montreal.ics | 4 ++-- zoneinfo/America/Montserrat.ics | 4 ++-- zoneinfo/America/Nassau.ics | 4 ++-- zoneinfo/America/New_York.ics | 4 ++-- zoneinfo/America/Nipigon.ics | 4 ++-- zoneinfo/America/Nome.ics | 4 ++-- zoneinfo/America/Noronha.ics | 4 ++-- zoneinfo/America/North_Dakota/Beulah.ics | 4 ++-- zoneinfo/America/North_Dakota/Center.ics | 4 ++-- zoneinfo/America/North_Dakota/New_Salem.ics | 4 ++-- zoneinfo/America/Nuuk.ics | 4 ++-- zoneinfo/America/Ojinaga.ics | 4 ++-- zoneinfo/America/Panama.ics | 4 ++-- zoneinfo/America/Pangnirtung.ics | 4 ++-- zoneinfo/America/Paramaribo.ics | 4 ++-- zoneinfo/America/Phoenix.ics | 4 ++-- zoneinfo/America/Port-au-Prince.ics | 4 ++-- zoneinfo/America/Port_of_Spain.ics | 4 ++-- zoneinfo/America/Porto_Acre.ics | 4 ++-- zoneinfo/America/Porto_Velho.ics | 4 ++-- zoneinfo/America/Puerto_Rico.ics | 4 ++-- zoneinfo/America/Punta_Arenas.ics | 4 ++-- zoneinfo/America/Rainy_River.ics | 4 ++-- zoneinfo/America/Rankin_Inlet.ics | 4 ++-- zoneinfo/America/Recife.ics | 4 ++-- zoneinfo/America/Regina.ics | 4 ++-- zoneinfo/America/Resolute.ics | 4 ++-- zoneinfo/America/Rio_Branco.ics | 4 ++-- zoneinfo/America/Rosario.ics | 4 ++-- zoneinfo/America/Santa_Isabel.ics | 4 ++-- zoneinfo/America/Santarem.ics | 4 ++-- zoneinfo/America/Santiago.ics | 4 ++-- zoneinfo/America/Santo_Domingo.ics | 4 ++-- zoneinfo/America/Sao_Paulo.ics | 4 ++-- zoneinfo/America/Scoresbysund.ics | 4 ++-- zoneinfo/America/Shiprock.ics | 4 ++-- zoneinfo/America/Sitka.ics | 4 ++-- zoneinfo/America/St_Barthelemy.ics | 4 ++-- zoneinfo/America/St_Johns.ics | 4 ++-- zoneinfo/America/St_Kitts.ics | 4 ++-- zoneinfo/America/St_Lucia.ics | 4 ++-- zoneinfo/America/St_Thomas.ics | 4 ++-- zoneinfo/America/St_Vincent.ics | 4 ++-- zoneinfo/America/Swift_Current.ics | 4 ++-- zoneinfo/America/Tegucigalpa.ics | 4 ++-- zoneinfo/America/Thule.ics | 4 ++-- zoneinfo/America/Thunder_Bay.ics | 4 ++-- zoneinfo/America/Tijuana.ics | 4 ++-- zoneinfo/America/Toronto.ics | 4 ++-- zoneinfo/America/Tortola.ics | 4 ++-- zoneinfo/America/Vancouver.ics | 4 ++-- zoneinfo/America/Virgin.ics | 4 ++-- zoneinfo/America/Whitehorse.ics | 4 ++-- zoneinfo/America/Winnipeg.ics | 4 ++-- zoneinfo/America/Yakutat.ics | 4 ++-- zoneinfo/America/Yellowknife.ics | 4 ++-- zoneinfo/Antarctica/Casey.ics | 4 ++-- zoneinfo/Antarctica/Davis.ics | 4 ++-- zoneinfo/Antarctica/DumontDUrville.ics | 4 ++-- zoneinfo/Antarctica/Macquarie.ics | 4 ++-- zoneinfo/Antarctica/Mawson.ics | 4 ++-- zoneinfo/Antarctica/McMurdo.ics | 4 ++-- zoneinfo/Antarctica/Palmer.ics | 4 ++-- zoneinfo/Antarctica/Rothera.ics | 4 ++-- zoneinfo/Antarctica/South_Pole.ics | 4 ++-- zoneinfo/Antarctica/Syowa.ics | 4 ++-- zoneinfo/Antarctica/Troll.ics | 4 ++-- zoneinfo/Antarctica/Vostok.ics | 4 ++-- zoneinfo/Arctic/Longyearbyen.ics | 4 ++-- zoneinfo/Asia/Aden.ics | 4 ++-- zoneinfo/Asia/Almaty.ics | 4 ++-- zoneinfo/Asia/Amman.ics | 4 ++-- zoneinfo/Asia/Anadyr.ics | 4 ++-- zoneinfo/Asia/Aqtau.ics | 4 ++-- zoneinfo/Asia/Aqtobe.ics | 4 ++-- zoneinfo/Asia/Ashgabat.ics | 4 ++-- zoneinfo/Asia/Ashkhabad.ics | 4 ++-- zoneinfo/Asia/Atyrau.ics | 4 ++-- zoneinfo/Asia/Baghdad.ics | 4 ++-- zoneinfo/Asia/Bahrain.ics | 4 ++-- zoneinfo/Asia/Baku.ics | 4 ++-- zoneinfo/Asia/Bangkok.ics | 4 ++-- zoneinfo/Asia/Barnaul.ics | 4 ++-- zoneinfo/Asia/Beirut.ics | 4 ++-- zoneinfo/Asia/Bishkek.ics | 4 ++-- zoneinfo/Asia/Brunei.ics | 4 ++-- zoneinfo/Asia/Calcutta.ics | 4 ++-- zoneinfo/Asia/Chita.ics | 4 ++-- zoneinfo/Asia/Choibalsan.ics | 4 ++-- zoneinfo/Asia/Chongqing.ics | 4 ++-- zoneinfo/Asia/Chungking.ics | 4 ++-- zoneinfo/Asia/Colombo.ics | 4 ++-- zoneinfo/Asia/Dacca.ics | 4 ++-- zoneinfo/Asia/Damascus.ics | 4 ++-- zoneinfo/Asia/Dhaka.ics | 4 ++-- zoneinfo/Asia/Dili.ics | 4 ++-- zoneinfo/Asia/Dubai.ics | 4 ++-- zoneinfo/Asia/Dushanbe.ics | 4 ++-- zoneinfo/Asia/Famagusta.ics | 4 ++-- zoneinfo/Asia/Gaza.ics | 8 ++++---- zoneinfo/Asia/Harbin.ics | 4 ++-- zoneinfo/Asia/Hebron.ics | 8 ++++---- zoneinfo/Asia/Ho_Chi_Minh.ics | 4 ++-- zoneinfo/Asia/Hong_Kong.ics | 4 ++-- zoneinfo/Asia/Hovd.ics | 4 ++-- zoneinfo/Asia/Irkutsk.ics | 4 ++-- zoneinfo/Asia/Istanbul.ics | 4 ++-- zoneinfo/Asia/Jakarta.ics | 4 ++-- zoneinfo/Asia/Jayapura.ics | 4 ++-- zoneinfo/Asia/Jerusalem.ics | 4 ++-- zoneinfo/Asia/Kabul.ics | 4 ++-- zoneinfo/Asia/Kamchatka.ics | 4 ++-- zoneinfo/Asia/Karachi.ics | 4 ++-- zoneinfo/Asia/Kashgar.ics | 4 ++-- zoneinfo/Asia/Kathmandu.ics | 4 ++-- zoneinfo/Asia/Katmandu.ics | 4 ++-- zoneinfo/Asia/Khandyga.ics | 4 ++-- zoneinfo/Asia/Kolkata.ics | 4 ++-- zoneinfo/Asia/Krasnoyarsk.ics | 4 ++-- zoneinfo/Asia/Kuala_Lumpur.ics | 4 ++-- zoneinfo/Asia/Kuching.ics | 4 ++-- zoneinfo/Asia/Kuwait.ics | 4 ++-- zoneinfo/Asia/Macao.ics | 4 ++-- zoneinfo/Asia/Macau.ics | 4 ++-- zoneinfo/Asia/Magadan.ics | 4 ++-- zoneinfo/Asia/Makassar.ics | 4 ++-- zoneinfo/Asia/Manila.ics | 4 ++-- zoneinfo/Asia/Muscat.ics | 4 ++-- zoneinfo/Asia/Nicosia.ics | 4 ++-- zoneinfo/Asia/Novokuznetsk.ics | 4 ++-- zoneinfo/Asia/Novosibirsk.ics | 4 ++-- zoneinfo/Asia/Omsk.ics | 4 ++-- zoneinfo/Asia/Oral.ics | 4 ++-- zoneinfo/Asia/Phnom_Penh.ics | 4 ++-- zoneinfo/Asia/Pontianak.ics | 4 ++-- zoneinfo/Asia/Pyongyang.ics | 4 ++-- zoneinfo/Asia/Qatar.ics | 4 ++-- zoneinfo/Asia/Qostanay.ics | 4 ++-- zoneinfo/Asia/Qyzylorda.ics | 4 ++-- zoneinfo/Asia/Rangoon.ics | 4 ++-- zoneinfo/Asia/Riyadh.ics | 4 ++-- zoneinfo/Asia/Saigon.ics | 4 ++-- zoneinfo/Asia/Sakhalin.ics | 4 ++-- zoneinfo/Asia/Samarkand.ics | 4 ++-- zoneinfo/Asia/Seoul.ics | 4 ++-- zoneinfo/Asia/Shanghai.ics | 4 ++-- zoneinfo/Asia/Singapore.ics | 4 ++-- zoneinfo/Asia/Srednekolymsk.ics | 4 ++-- zoneinfo/Asia/Taipei.ics | 4 ++-- zoneinfo/Asia/Tashkent.ics | 4 ++-- zoneinfo/Asia/Tbilisi.ics | 4 ++-- zoneinfo/Asia/Tehran.ics | 4 ++-- zoneinfo/Asia/Tel_Aviv.ics | 4 ++-- zoneinfo/Asia/Thimbu.ics | 4 ++-- zoneinfo/Asia/Thimphu.ics | 4 ++-- zoneinfo/Asia/Tokyo.ics | 4 ++-- zoneinfo/Asia/Tomsk.ics | 4 ++-- zoneinfo/Asia/Ujung_Pandang.ics | 4 ++-- zoneinfo/Asia/Ulaanbaatar.ics | 4 ++-- zoneinfo/Asia/Ulan_Bator.ics | 4 ++-- zoneinfo/Asia/Urumqi.ics | 4 ++-- zoneinfo/Asia/Ust-Nera.ics | 4 ++-- zoneinfo/Asia/Vientiane.ics | 4 ++-- zoneinfo/Asia/Vladivostok.ics | 4 ++-- zoneinfo/Asia/Yakutsk.ics | 4 ++-- zoneinfo/Asia/Yangon.ics | 4 ++-- zoneinfo/Asia/Yekaterinburg.ics | 4 ++-- zoneinfo/Asia/Yerevan.ics | 4 ++-- zoneinfo/Atlantic/Azores.ics | 4 ++-- zoneinfo/Atlantic/Bermuda.ics | 4 ++-- zoneinfo/Atlantic/Canary.ics | 4 ++-- zoneinfo/Atlantic/Cape_Verde.ics | 4 ++-- zoneinfo/Atlantic/Faeroe.ics | 4 ++-- zoneinfo/Atlantic/Faroe.ics | 4 ++-- zoneinfo/Atlantic/Jan_Mayen.ics | 4 ++-- zoneinfo/Atlantic/Madeira.ics | 4 ++-- zoneinfo/Atlantic/Reykjavik.ics | 4 ++-- zoneinfo/Atlantic/South_Georgia.ics | 4 ++-- zoneinfo/Atlantic/St_Helena.ics | 4 ++-- zoneinfo/Atlantic/Stanley.ics | 4 ++-- zoneinfo/Australia/ACT.ics | 4 ++-- zoneinfo/Australia/Adelaide.ics | 4 ++-- zoneinfo/Australia/Brisbane.ics | 4 ++-- zoneinfo/Australia/Broken_Hill.ics | 4 ++-- zoneinfo/Australia/Canberra.ics | 4 ++-- zoneinfo/Australia/Currie.ics | 4 ++-- zoneinfo/Australia/Darwin.ics | 4 ++-- zoneinfo/Australia/Eucla.ics | 4 ++-- zoneinfo/Australia/Hobart.ics | 4 ++-- zoneinfo/Australia/LHI.ics | 4 ++-- zoneinfo/Australia/Lindeman.ics | 4 ++-- zoneinfo/Australia/Lord_Howe.ics | 4 ++-- zoneinfo/Australia/Melbourne.ics | 4 ++-- zoneinfo/Australia/NSW.ics | 4 ++-- zoneinfo/Australia/North.ics | 4 ++-- zoneinfo/Australia/Perth.ics | 4 ++-- zoneinfo/Australia/Queensland.ics | 4 ++-- zoneinfo/Australia/South.ics | 4 ++-- zoneinfo/Australia/Sydney.ics | 4 ++-- zoneinfo/Australia/Tasmania.ics | 4 ++-- zoneinfo/Australia/Victoria.ics | 4 ++-- zoneinfo/Australia/West.ics | 4 ++-- zoneinfo/Australia/Yancowinna.ics | 4 ++-- zoneinfo/Brazil/Acre.ics | 4 ++-- zoneinfo/Brazil/DeNoronha.ics | 4 ++-- zoneinfo/Brazil/East.ics | 4 ++-- zoneinfo/Brazil/West.ics | 4 ++-- zoneinfo/CET.ics | 4 ++-- zoneinfo/CST6CDT.ics | 4 ++-- zoneinfo/Canada/Atlantic.ics | 4 ++-- zoneinfo/Canada/Central.ics | 4 ++-- zoneinfo/Canada/Eastern.ics | 4 ++-- zoneinfo/Canada/Mountain.ics | 4 ++-- zoneinfo/Canada/Newfoundland.ics | 4 ++-- zoneinfo/Canada/Pacific.ics | 4 ++-- zoneinfo/Canada/Saskatchewan.ics | 4 ++-- zoneinfo/Canada/Yukon.ics | 4 ++-- zoneinfo/Chile/Continental.ics | 4 ++-- zoneinfo/Chile/EasterIsland.ics | 4 ++-- zoneinfo/Cuba.ics | 4 ++-- zoneinfo/EET.ics | 4 ++-- zoneinfo/EST.ics | 4 ++-- zoneinfo/EST5EDT.ics | 4 ++-- zoneinfo/Egypt.ics | 4 ++-- zoneinfo/Eire.ics | 4 ++-- zoneinfo/Etc/GMT+0.ics | 4 ++-- zoneinfo/Etc/GMT+1.ics | 4 ++-- zoneinfo/Etc/GMT+10.ics | 4 ++-- zoneinfo/Etc/GMT+11.ics | 4 ++-- zoneinfo/Etc/GMT+12.ics | 4 ++-- zoneinfo/Etc/GMT+2.ics | 4 ++-- zoneinfo/Etc/GMT+3.ics | 4 ++-- zoneinfo/Etc/GMT+4.ics | 4 ++-- zoneinfo/Etc/GMT+5.ics | 4 ++-- zoneinfo/Etc/GMT+6.ics | 4 ++-- zoneinfo/Etc/GMT+7.ics | 4 ++-- zoneinfo/Etc/GMT+8.ics | 4 ++-- zoneinfo/Etc/GMT+9.ics | 4 ++-- zoneinfo/Etc/GMT-0.ics | 4 ++-- zoneinfo/Etc/GMT-1.ics | 4 ++-- zoneinfo/Etc/GMT-10.ics | 4 ++-- zoneinfo/Etc/GMT-11.ics | 4 ++-- zoneinfo/Etc/GMT-12.ics | 4 ++-- zoneinfo/Etc/GMT-13.ics | 4 ++-- zoneinfo/Etc/GMT-14.ics | 4 ++-- zoneinfo/Etc/GMT-2.ics | 4 ++-- zoneinfo/Etc/GMT-3.ics | 4 ++-- zoneinfo/Etc/GMT-4.ics | 4 ++-- zoneinfo/Etc/GMT-5.ics | 4 ++-- zoneinfo/Etc/GMT-6.ics | 4 ++-- zoneinfo/Etc/GMT-7.ics | 4 ++-- zoneinfo/Etc/GMT-8.ics | 4 ++-- zoneinfo/Etc/GMT-9.ics | 4 ++-- zoneinfo/Etc/GMT.ics | 4 ++-- zoneinfo/Etc/GMT0.ics | 4 ++-- zoneinfo/Etc/Greenwich.ics | 4 ++-- zoneinfo/Etc/UCT.ics | 4 ++-- zoneinfo/Etc/UTC.ics | 4 ++-- zoneinfo/Etc/Universal.ics | 4 ++-- zoneinfo/Etc/Zulu.ics | 4 ++-- zoneinfo/Europe/Amsterdam.ics | 4 ++-- zoneinfo/Europe/Andorra.ics | 4 ++-- zoneinfo/Europe/Astrakhan.ics | 4 ++-- zoneinfo/Europe/Athens.ics | 4 ++-- zoneinfo/Europe/Belfast.ics | 4 ++-- zoneinfo/Europe/Belgrade.ics | 4 ++-- zoneinfo/Europe/Berlin.ics | 4 ++-- zoneinfo/Europe/Bratislava.ics | 4 ++-- zoneinfo/Europe/Brussels.ics | 4 ++-- zoneinfo/Europe/Bucharest.ics | 4 ++-- zoneinfo/Europe/Budapest.ics | 4 ++-- zoneinfo/Europe/Busingen.ics | 4 ++-- zoneinfo/Europe/Chisinau.ics | 4 ++-- zoneinfo/Europe/Copenhagen.ics | 4 ++-- zoneinfo/Europe/Dublin.ics | 4 ++-- zoneinfo/Europe/Gibraltar.ics | 4 ++-- zoneinfo/Europe/Guernsey.ics | 4 ++-- zoneinfo/Europe/Helsinki.ics | 4 ++-- zoneinfo/Europe/Isle_of_Man.ics | 4 ++-- zoneinfo/Europe/Istanbul.ics | 4 ++-- zoneinfo/Europe/Jersey.ics | 4 ++-- zoneinfo/Europe/Kaliningrad.ics | 4 ++-- zoneinfo/Europe/Kiev.ics | 4 ++-- zoneinfo/Europe/Kirov.ics | 4 ++-- zoneinfo/Europe/Lisbon.ics | 4 ++-- zoneinfo/Europe/Ljubljana.ics | 4 ++-- zoneinfo/Europe/London.ics | 4 ++-- zoneinfo/Europe/Luxembourg.ics | 4 ++-- zoneinfo/Europe/Madrid.ics | 4 ++-- zoneinfo/Europe/Malta.ics | 4 ++-- zoneinfo/Europe/Mariehamn.ics | 4 ++-- zoneinfo/Europe/Minsk.ics | 4 ++-- zoneinfo/Europe/Monaco.ics | 4 ++-- zoneinfo/Europe/Moscow.ics | 4 ++-- zoneinfo/Europe/Nicosia.ics | 4 ++-- zoneinfo/Europe/Oslo.ics | 4 ++-- zoneinfo/Europe/Paris.ics | 4 ++-- zoneinfo/Europe/Podgorica.ics | 4 ++-- zoneinfo/Europe/Prague.ics | 4 ++-- zoneinfo/Europe/Riga.ics | 4 ++-- zoneinfo/Europe/Rome.ics | 4 ++-- zoneinfo/Europe/Samara.ics | 4 ++-- zoneinfo/Europe/San_Marino.ics | 4 ++-- zoneinfo/Europe/Sarajevo.ics | 4 ++-- zoneinfo/Europe/Saratov.ics | 4 ++-- zoneinfo/Europe/Simferopol.ics | 4 ++-- zoneinfo/Europe/Skopje.ics | 4 ++-- zoneinfo/Europe/Sofia.ics | 4 ++-- zoneinfo/Europe/Stockholm.ics | 4 ++-- zoneinfo/Europe/Tallinn.ics | 4 ++-- zoneinfo/Europe/Tirane.ics | 4 ++-- zoneinfo/Europe/Tiraspol.ics | 4 ++-- zoneinfo/Europe/Ulyanovsk.ics | 4 ++-- zoneinfo/Europe/Uzhgorod.ics | 4 ++-- zoneinfo/Europe/Vaduz.ics | 4 ++-- zoneinfo/Europe/Vatican.ics | 4 ++-- zoneinfo/Europe/Vienna.ics | 4 ++-- zoneinfo/Europe/Vilnius.ics | 4 ++-- zoneinfo/Europe/Volgograd.ics | 4 ++-- zoneinfo/Europe/Warsaw.ics | 4 ++-- zoneinfo/Europe/Zagreb.ics | 4 ++-- zoneinfo/Europe/Zaporozhye.ics | 4 ++-- zoneinfo/Europe/Zurich.ics | 4 ++-- zoneinfo/GB-Eire.ics | 4 ++-- zoneinfo/GB.ics | 4 ++-- zoneinfo/GMT+0.ics | 4 ++-- zoneinfo/GMT-0.ics | 4 ++-- zoneinfo/GMT.ics | 4 ++-- zoneinfo/GMT0.ics | 4 ++-- zoneinfo/Greenwich.ics | 4 ++-- zoneinfo/HST.ics | 4 ++-- zoneinfo/Hongkong.ics | 4 ++-- zoneinfo/Iceland.ics | 4 ++-- zoneinfo/Indian/Antananarivo.ics | 4 ++-- zoneinfo/Indian/Chagos.ics | 4 ++-- zoneinfo/Indian/Christmas.ics | 4 ++-- zoneinfo/Indian/Cocos.ics | 4 ++-- zoneinfo/Indian/Comoro.ics | 4 ++-- zoneinfo/Indian/Kerguelen.ics | 4 ++-- zoneinfo/Indian/Mahe.ics | 4 ++-- zoneinfo/Indian/Maldives.ics | 4 ++-- zoneinfo/Indian/Mauritius.ics | 4 ++-- zoneinfo/Indian/Mayotte.ics | 4 ++-- zoneinfo/Indian/Reunion.ics | 4 ++-- zoneinfo/Iran.ics | 4 ++-- zoneinfo/Israel.ics | 4 ++-- zoneinfo/Jamaica.ics | 4 ++-- zoneinfo/Japan.ics | 4 ++-- zoneinfo/Kwajalein.ics | 4 ++-- zoneinfo/Libya.ics | 4 ++-- zoneinfo/MET.ics | 4 ++-- zoneinfo/MST.ics | 4 ++-- zoneinfo/MST7MDT.ics | 4 ++-- zoneinfo/Mexico/BajaNorte.ics | 4 ++-- zoneinfo/Mexico/BajaSur.ics | 4 ++-- zoneinfo/Mexico/General.ics | 4 ++-- zoneinfo/NZ-CHAT.ics | 4 ++-- zoneinfo/NZ.ics | 4 ++-- zoneinfo/Navajo.ics | 4 ++-- zoneinfo/PRC.ics | 4 ++-- zoneinfo/PST8PDT.ics | 4 ++-- zoneinfo/Pacific/Apia.ics | 4 ++-- zoneinfo/Pacific/Auckland.ics | 4 ++-- zoneinfo/Pacific/Bougainville.ics | 4 ++-- zoneinfo/Pacific/Chatham.ics | 4 ++-- zoneinfo/Pacific/Chuuk.ics | 4 ++-- zoneinfo/Pacific/Easter.ics | 4 ++-- zoneinfo/Pacific/Efate.ics | 4 ++-- zoneinfo/Pacific/Enderbury.ics | 4 ++-- zoneinfo/Pacific/Fakaofo.ics | 4 ++-- zoneinfo/Pacific/Fiji.ics | 18 +++++++++--------- zoneinfo/Pacific/Funafuti.ics | 4 ++-- zoneinfo/Pacific/Galapagos.ics | 4 ++-- zoneinfo/Pacific/Gambier.ics | 4 ++-- zoneinfo/Pacific/Guadalcanal.ics | 4 ++-- zoneinfo/Pacific/Guam.ics | 4 ++-- zoneinfo/Pacific/Honolulu.ics | 4 ++-- zoneinfo/Pacific/Johnston.ics | 4 ++-- zoneinfo/Pacific/Kanton.ics | 4 ++-- zoneinfo/Pacific/Kiritimati.ics | 4 ++-- zoneinfo/Pacific/Kosrae.ics | 4 ++-- zoneinfo/Pacific/Kwajalein.ics | 4 ++-- zoneinfo/Pacific/Majuro.ics | 4 ++-- zoneinfo/Pacific/Marquesas.ics | 4 ++-- zoneinfo/Pacific/Midway.ics | 4 ++-- zoneinfo/Pacific/Nauru.ics | 4 ++-- zoneinfo/Pacific/Niue.ics | 4 ++-- zoneinfo/Pacific/Norfolk.ics | 4 ++-- zoneinfo/Pacific/Noumea.ics | 4 ++-- zoneinfo/Pacific/Pago_Pago.ics | 4 ++-- zoneinfo/Pacific/Palau.ics | 4 ++-- zoneinfo/Pacific/Pitcairn.ics | 4 ++-- zoneinfo/Pacific/Pohnpei.ics | 4 ++-- zoneinfo/Pacific/Ponape.ics | 4 ++-- zoneinfo/Pacific/Port_Moresby.ics | 4 ++-- zoneinfo/Pacific/Rarotonga.ics | 4 ++-- zoneinfo/Pacific/Saipan.ics | 4 ++-- zoneinfo/Pacific/Samoa.ics | 4 ++-- zoneinfo/Pacific/Tahiti.ics | 4 ++-- zoneinfo/Pacific/Tarawa.ics | 4 ++-- zoneinfo/Pacific/Tongatapu.ics | 4 ++-- zoneinfo/Pacific/Truk.ics | 4 ++-- zoneinfo/Pacific/Wake.ics | 4 ++-- zoneinfo/Pacific/Wallis.ics | 4 ++-- zoneinfo/Pacific/Yap.ics | 4 ++-- zoneinfo/Poland.ics | 4 ++-- zoneinfo/Portugal.ics | 4 ++-- zoneinfo/ROC.ics | 4 ++-- zoneinfo/ROK.ics | 4 ++-- zoneinfo/Singapore.ics | 4 ++-- zoneinfo/Turkey.ics | 4 ++-- zoneinfo/UCT.ics | 4 ++-- zoneinfo/US/Alaska.ics | 4 ++-- zoneinfo/US/Aleutian.ics | 4 ++-- zoneinfo/US/Arizona.ics | 4 ++-- zoneinfo/US/Central.ics | 4 ++-- zoneinfo/US/East-Indiana.ics | 4 ++-- zoneinfo/US/Eastern.ics | 4 ++-- zoneinfo/US/Hawaii.ics | 4 ++-- zoneinfo/US/Indiana-Starke.ics | 4 ++-- zoneinfo/US/Michigan.ics | 4 ++-- zoneinfo/US/Mountain.ics | 4 ++-- zoneinfo/US/Pacific.ics | 4 ++-- zoneinfo/US/Samoa.ics | 4 ++-- zoneinfo/UTC.ics | 4 ++-- zoneinfo/Universal.ics | 4 ++-- zoneinfo/W-SU.ics | 4 ++-- zoneinfo/WET.ics | 4 ++-- zoneinfo/Zulu.ics | 4 ++-- 594 files changed, 1199 insertions(+), 1199 deletions(-) diff --git a/zoneinfo/Africa/Abidjan.ics b/zoneinfo/Africa/Abidjan.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Abidjan.ics +++ b/zoneinfo/Africa/Abidjan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Accra.ics b/zoneinfo/Africa/Accra.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Accra.ics +++ b/zoneinfo/Africa/Accra.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Addis_Ababa.ics b/zoneinfo/Africa/Addis_Ababa.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Addis_Ababa.ics +++ b/zoneinfo/Africa/Addis_Ababa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Algiers.ics b/zoneinfo/Africa/Algiers.ics index 7752339d..3ce8569b 100644 --- a/zoneinfo/Africa/Algiers.ics +++ b/zoneinfo/Africa/Algiers.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Algiers -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Algiers +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Algiers BEGIN:STANDARD TZNAME:CET diff --git a/zoneinfo/Africa/Asmara.ics b/zoneinfo/Africa/Asmara.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Asmara.ics +++ b/zoneinfo/Africa/Asmara.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Asmera.ics b/zoneinfo/Africa/Asmera.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Asmera.ics +++ b/zoneinfo/Africa/Asmera.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Bamako.ics b/zoneinfo/Africa/Bamako.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Bamako.ics +++ b/zoneinfo/Africa/Bamako.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Bangui.ics b/zoneinfo/Africa/Bangui.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Bangui.ics +++ b/zoneinfo/Africa/Bangui.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Banjul.ics b/zoneinfo/Africa/Banjul.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Banjul.ics +++ b/zoneinfo/Africa/Banjul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Bissau.ics b/zoneinfo/Africa/Bissau.ics index 44bff060..f0eea376 100644 --- a/zoneinfo/Africa/Bissau.ics +++ b/zoneinfo/Africa/Bissau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Bissau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Bissau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Bissau BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Blantyre.ics b/zoneinfo/Africa/Blantyre.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Blantyre.ics +++ b/zoneinfo/Africa/Blantyre.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Brazzaville.ics b/zoneinfo/Africa/Brazzaville.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Brazzaville.ics +++ b/zoneinfo/Africa/Brazzaville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Bujumbura.ics b/zoneinfo/Africa/Bujumbura.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Bujumbura.ics +++ b/zoneinfo/Africa/Bujumbura.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Cairo.ics b/zoneinfo/Africa/Cairo.ics index 3d8dee3d..6b5c8970 100644 --- a/zoneinfo/Africa/Cairo.ics +++ b/zoneinfo/Africa/Cairo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Cairo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Cairo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Cairo BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Africa/Casablanca.ics b/zoneinfo/Africa/Casablanca.ics index 55f85437..aa8ebf9f 100644 --- a/zoneinfo/Africa/Casablanca.ics +++ b/zoneinfo/Africa/Casablanca.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Casablanca +TZID:/citadel.org/20211207_1/Africa/Casablanca TZUNTIL:20870511T020001Z -LAST-MODIFIED:20211009T133001Z +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Casablanca BEGIN:STANDARD TZNAME:+01 diff --git a/zoneinfo/Africa/Ceuta.ics b/zoneinfo/Africa/Ceuta.ics index 1df3accf..a0172a5b 100644 --- a/zoneinfo/Africa/Ceuta.ics +++ b/zoneinfo/Africa/Ceuta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Ceuta -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Ceuta +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Ceuta BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Africa/Conakry.ics b/zoneinfo/Africa/Conakry.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Conakry.ics +++ b/zoneinfo/Africa/Conakry.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Dakar.ics b/zoneinfo/Africa/Dakar.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Dakar.ics +++ b/zoneinfo/Africa/Dakar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Dar_es_Salaam.ics b/zoneinfo/Africa/Dar_es_Salaam.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Dar_es_Salaam.ics +++ b/zoneinfo/Africa/Dar_es_Salaam.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Djibouti.ics b/zoneinfo/Africa/Djibouti.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Djibouti.ics +++ b/zoneinfo/Africa/Djibouti.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Douala.ics b/zoneinfo/Africa/Douala.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Douala.ics +++ b/zoneinfo/Africa/Douala.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/El_Aaiun.ics b/zoneinfo/Africa/El_Aaiun.ics index fe768916..9d1810f1 100644 --- a/zoneinfo/Africa/El_Aaiun.ics +++ b/zoneinfo/Africa/El_Aaiun.ics @@ -2,9 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/El_Aaiun +TZID:/citadel.org/20211207_1/Africa/El_Aaiun TZUNTIL:20870511T020001Z -LAST-MODIFIED:20211009T133001Z +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/El_Aaiun BEGIN:STANDARD TZNAME:+01 diff --git a/zoneinfo/Africa/Freetown.ics b/zoneinfo/Africa/Freetown.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Freetown.ics +++ b/zoneinfo/Africa/Freetown.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Gaborone.ics b/zoneinfo/Africa/Gaborone.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Gaborone.ics +++ b/zoneinfo/Africa/Gaborone.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Harare.ics b/zoneinfo/Africa/Harare.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Harare.ics +++ b/zoneinfo/Africa/Harare.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Johannesburg.ics b/zoneinfo/Africa/Johannesburg.ics index da9a0be3..3ae60e9c 100644 --- a/zoneinfo/Africa/Johannesburg.ics +++ b/zoneinfo/Africa/Johannesburg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Johannesburg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Johannesburg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZNAME:SAST diff --git a/zoneinfo/Africa/Juba.ics b/zoneinfo/Africa/Juba.ics index f66f30e6..5301b79e 100644 --- a/zoneinfo/Africa/Juba.ics +++ b/zoneinfo/Africa/Juba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Juba -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Juba +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Juba BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Kampala.ics b/zoneinfo/Africa/Kampala.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Kampala.ics +++ b/zoneinfo/Africa/Kampala.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Khartoum.ics b/zoneinfo/Africa/Khartoum.ics index 3b609b36..8baedb8d 100644 --- a/zoneinfo/Africa/Khartoum.ics +++ b/zoneinfo/Africa/Khartoum.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Khartoum -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Khartoum +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Khartoum BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Kigali.ics b/zoneinfo/Africa/Kigali.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Kigali.ics +++ b/zoneinfo/Africa/Kigali.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Kinshasa.ics b/zoneinfo/Africa/Kinshasa.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Kinshasa.ics +++ b/zoneinfo/Africa/Kinshasa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Lagos.ics b/zoneinfo/Africa/Lagos.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Lagos.ics +++ b/zoneinfo/Africa/Lagos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Libreville.ics b/zoneinfo/Africa/Libreville.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Libreville.ics +++ b/zoneinfo/Africa/Libreville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Lome.ics b/zoneinfo/Africa/Lome.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Lome.ics +++ b/zoneinfo/Africa/Lome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Luanda.ics b/zoneinfo/Africa/Luanda.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Luanda.ics +++ b/zoneinfo/Africa/Luanda.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Lubumbashi.ics b/zoneinfo/Africa/Lubumbashi.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Lubumbashi.ics +++ b/zoneinfo/Africa/Lubumbashi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Lusaka.ics b/zoneinfo/Africa/Lusaka.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Lusaka.ics +++ b/zoneinfo/Africa/Lusaka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Malabo.ics b/zoneinfo/Africa/Malabo.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Malabo.ics +++ b/zoneinfo/Africa/Malabo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Maputo.ics b/zoneinfo/Africa/Maputo.ics index 94326f56..772540b0 100644 --- a/zoneinfo/Africa/Maputo.ics +++ b/zoneinfo/Africa/Maputo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Maputo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Maputo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Maputo BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/Africa/Maseru.ics b/zoneinfo/Africa/Maseru.ics index da9a0be3..3ae60e9c 100644 --- a/zoneinfo/Africa/Maseru.ics +++ b/zoneinfo/Africa/Maseru.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Johannesburg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Johannesburg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZNAME:SAST diff --git a/zoneinfo/Africa/Mbabane.ics b/zoneinfo/Africa/Mbabane.ics index da9a0be3..3ae60e9c 100644 --- a/zoneinfo/Africa/Mbabane.ics +++ b/zoneinfo/Africa/Mbabane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Johannesburg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Johannesburg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Johannesburg BEGIN:STANDARD TZNAME:SAST diff --git a/zoneinfo/Africa/Mogadishu.ics b/zoneinfo/Africa/Mogadishu.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Mogadishu.ics +++ b/zoneinfo/Africa/Mogadishu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Monrovia.ics b/zoneinfo/Africa/Monrovia.ics index 46996ce1..219c1c9c 100644 --- a/zoneinfo/Africa/Monrovia.ics +++ b/zoneinfo/Africa/Monrovia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Monrovia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Monrovia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Monrovia BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Nairobi.ics b/zoneinfo/Africa/Nairobi.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Africa/Nairobi.ics +++ b/zoneinfo/Africa/Nairobi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Africa/Ndjamena.ics b/zoneinfo/Africa/Ndjamena.ics index 30d3e3a9..23d05c57 100644 --- a/zoneinfo/Africa/Ndjamena.ics +++ b/zoneinfo/Africa/Ndjamena.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Ndjamena -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Ndjamena +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Ndjamena BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Niamey.ics b/zoneinfo/Africa/Niamey.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Niamey.ics +++ b/zoneinfo/Africa/Niamey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Nouakchott.ics b/zoneinfo/Africa/Nouakchott.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Nouakchott.ics +++ b/zoneinfo/Africa/Nouakchott.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Ouagadougou.ics b/zoneinfo/Africa/Ouagadougou.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Ouagadougou.ics +++ b/zoneinfo/Africa/Ouagadougou.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Porto-Novo.ics b/zoneinfo/Africa/Porto-Novo.ics index 9e48ef5f..2e94b8b0 100644 --- a/zoneinfo/Africa/Porto-Novo.ics +++ b/zoneinfo/Africa/Porto-Novo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Lagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Lagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Lagos BEGIN:STANDARD TZNAME:WAT diff --git a/zoneinfo/Africa/Sao_Tome.ics b/zoneinfo/Africa/Sao_Tome.ics index 6bf4d088..bded29bb 100644 --- a/zoneinfo/Africa/Sao_Tome.ics +++ b/zoneinfo/Africa/Sao_Tome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Sao_Tome -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Sao_Tome +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Sao_Tome BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Timbuktu.ics b/zoneinfo/Africa/Timbuktu.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Africa/Timbuktu.ics +++ b/zoneinfo/Africa/Timbuktu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Africa/Tripoli.ics b/zoneinfo/Africa/Tripoli.ics index adf663b2..72f0e425 100644 --- a/zoneinfo/Africa/Tripoli.ics +++ b/zoneinfo/Africa/Tripoli.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Tripoli -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Tripoli +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Tripoli BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Africa/Tunis.ics b/zoneinfo/Africa/Tunis.ics index 5d9ff703..131c3e18 100644 --- a/zoneinfo/Africa/Tunis.ics +++ b/zoneinfo/Africa/Tunis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Tunis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Tunis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Tunis BEGIN:STANDARD TZNAME:CET diff --git a/zoneinfo/Africa/Windhoek.ics b/zoneinfo/Africa/Windhoek.ics index f65f250d..3d5c13ee 100644 --- a/zoneinfo/Africa/Windhoek.ics +++ b/zoneinfo/Africa/Windhoek.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Windhoek -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Windhoek +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Windhoek BEGIN:STANDARD TZNAME:CAT diff --git a/zoneinfo/America/Adak.ics b/zoneinfo/America/Adak.ics index 8c4197f4..f6af5b1c 100644 --- a/zoneinfo/America/Adak.ics +++ b/zoneinfo/America/Adak.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Adak -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Adak +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZNAME:HDT diff --git a/zoneinfo/America/Anchorage.ics b/zoneinfo/America/Anchorage.ics index 452152b1..573012dd 100644 --- a/zoneinfo/America/Anchorage.ics +++ b/zoneinfo/America/Anchorage.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Anchorage -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Anchorage +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Anchorage BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Anguilla.ics b/zoneinfo/America/Anguilla.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Anguilla.ics +++ b/zoneinfo/America/Anguilla.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Antigua.ics b/zoneinfo/America/Antigua.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Antigua.ics +++ b/zoneinfo/America/Antigua.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Araguaina.ics b/zoneinfo/America/Araguaina.ics index fc4831d1..519c8b39 100644 --- a/zoneinfo/America/Araguaina.ics +++ b/zoneinfo/America/Araguaina.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Araguaina -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Araguaina +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Araguaina BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Buenos_Aires.ics b/zoneinfo/America/Argentina/Buenos_Aires.ics index 15d53c36..f497ce6c 100644 --- a/zoneinfo/America/Argentina/Buenos_Aires.ics +++ b/zoneinfo/America/Argentina/Buenos_Aires.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Buenos_Aires -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Buenos_Aires +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Buenos_Aires BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Catamarca.ics b/zoneinfo/America/Argentina/Catamarca.ics index 451b8a05..9e6dd0bf 100644 --- a/zoneinfo/America/Argentina/Catamarca.ics +++ b/zoneinfo/America/Argentina/Catamarca.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Catamarca -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Catamarca +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/ComodRivadavia.ics b/zoneinfo/America/Argentina/ComodRivadavia.ics index 451b8a05..9e6dd0bf 100644 --- a/zoneinfo/America/Argentina/ComodRivadavia.ics +++ b/zoneinfo/America/Argentina/ComodRivadavia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Catamarca -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Catamarca +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Cordoba.ics b/zoneinfo/America/Argentina/Cordoba.ics index 256d0595..deccae2d 100644 --- a/zoneinfo/America/Argentina/Cordoba.ics +++ b/zoneinfo/America/Argentina/Cordoba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Cordoba -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Cordoba +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Jujuy.ics b/zoneinfo/America/Argentina/Jujuy.ics index 3634507a..e616bab5 100644 --- a/zoneinfo/America/Argentina/Jujuy.ics +++ b/zoneinfo/America/Argentina/Jujuy.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Jujuy -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Jujuy +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Jujuy BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/La_Rioja.ics b/zoneinfo/America/Argentina/La_Rioja.ics index 88f55a96..ff0e9178 100644 --- a/zoneinfo/America/Argentina/La_Rioja.ics +++ b/zoneinfo/America/Argentina/La_Rioja.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/La_Rioja -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/La_Rioja +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/La_Rioja BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Mendoza.ics b/zoneinfo/America/Argentina/Mendoza.ics index 1d610ba9..5f58bc2c 100644 --- a/zoneinfo/America/Argentina/Mendoza.ics +++ b/zoneinfo/America/Argentina/Mendoza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Mendoza -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Mendoza +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Mendoza BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Rio_Gallegos.ics b/zoneinfo/America/Argentina/Rio_Gallegos.ics index aded1dc3..a453c5da 100644 --- a/zoneinfo/America/Argentina/Rio_Gallegos.ics +++ b/zoneinfo/America/Argentina/Rio_Gallegos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Rio_Gallegos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Rio_Gallegos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Rio_Gallegos BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Salta.ics b/zoneinfo/America/Argentina/Salta.ics index 225b5605..3628fe7c 100644 --- a/zoneinfo/America/Argentina/Salta.ics +++ b/zoneinfo/America/Argentina/Salta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Salta -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Salta +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Salta BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/San_Juan.ics b/zoneinfo/America/Argentina/San_Juan.ics index a965f7f0..605701c1 100644 --- a/zoneinfo/America/Argentina/San_Juan.ics +++ b/zoneinfo/America/Argentina/San_Juan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/San_Juan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/San_Juan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/San_Juan BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/San_Luis.ics b/zoneinfo/America/Argentina/San_Luis.ics index 77e176b7..248340f7 100644 --- a/zoneinfo/America/Argentina/San_Luis.ics +++ b/zoneinfo/America/Argentina/San_Luis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/San_Luis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/San_Luis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/San_Luis BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Tucuman.ics b/zoneinfo/America/Argentina/Tucuman.ics index 7656c8e5..1f1a259c 100644 --- a/zoneinfo/America/Argentina/Tucuman.ics +++ b/zoneinfo/America/Argentina/Tucuman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Tucuman -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Tucuman +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Tucuman BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Argentina/Ushuaia.ics b/zoneinfo/America/Argentina/Ushuaia.ics index cc1fe190..90835b02 100644 --- a/zoneinfo/America/Argentina/Ushuaia.ics +++ b/zoneinfo/America/Argentina/Ushuaia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Ushuaia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Ushuaia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Ushuaia BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Aruba.ics b/zoneinfo/America/Aruba.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Aruba.ics +++ b/zoneinfo/America/Aruba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Asuncion.ics b/zoneinfo/America/Asuncion.ics index d3fa60f6..2e68c3a4 100644 --- a/zoneinfo/America/Asuncion.ics +++ b/zoneinfo/America/Asuncion.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Asuncion -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Asuncion +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Asuncion BEGIN:DAYLIGHT TZNAME:-03 diff --git a/zoneinfo/America/Atikokan.ics b/zoneinfo/America/Atikokan.ics index d2493fa4..83c840b3 100644 --- a/zoneinfo/America/Atikokan.ics +++ b/zoneinfo/America/Atikokan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Panama -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Panama +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Atka.ics b/zoneinfo/America/Atka.ics index 8c4197f4..f6af5b1c 100644 --- a/zoneinfo/America/Atka.ics +++ b/zoneinfo/America/Atka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Adak -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Adak +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZNAME:HDT diff --git a/zoneinfo/America/Bahia.ics b/zoneinfo/America/Bahia.ics index caac3174..264b0390 100644 --- a/zoneinfo/America/Bahia.ics +++ b/zoneinfo/America/Bahia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Bahia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Bahia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Bahia BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Bahia_Banderas.ics b/zoneinfo/America/Bahia_Banderas.ics index c54b67e5..c432a273 100644 --- a/zoneinfo/America/Bahia_Banderas.ics +++ b/zoneinfo/America/Bahia_Banderas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Bahia_Banderas -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Bahia_Banderas +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Bahia_Banderas BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Barbados.ics b/zoneinfo/America/Barbados.ics index 9d22d134..9bd174a6 100644 --- a/zoneinfo/America/Barbados.ics +++ b/zoneinfo/America/Barbados.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Barbados -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Barbados +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Barbados BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Belem.ics b/zoneinfo/America/Belem.ics index 636c31eb..a163de68 100644 --- a/zoneinfo/America/Belem.ics +++ b/zoneinfo/America/Belem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Belem -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Belem +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Belem BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Belize.ics b/zoneinfo/America/Belize.ics index 334d3143..1d3c638f 100644 --- a/zoneinfo/America/Belize.ics +++ b/zoneinfo/America/Belize.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Belize -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Belize +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Belize BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Blanc-Sablon.ics b/zoneinfo/America/Blanc-Sablon.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Blanc-Sablon.ics +++ b/zoneinfo/America/Blanc-Sablon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Boa_Vista.ics b/zoneinfo/America/Boa_Vista.ics index ca34a3b6..f194c143 100644 --- a/zoneinfo/America/Boa_Vista.ics +++ b/zoneinfo/America/Boa_Vista.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Boa_Vista -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Boa_Vista +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Boa_Vista BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Bogota.ics b/zoneinfo/America/Bogota.ics index 1be53ae3..44f9ac3a 100644 --- a/zoneinfo/America/Bogota.ics +++ b/zoneinfo/America/Bogota.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Bogota -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Bogota +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Bogota BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Boise.ics b/zoneinfo/America/Boise.ics index cb675467..7b59585d 100644 --- a/zoneinfo/America/Boise.ics +++ b/zoneinfo/America/Boise.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Boise -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Boise +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Boise BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Buenos_Aires.ics b/zoneinfo/America/Buenos_Aires.ics index 15d53c36..f497ce6c 100644 --- a/zoneinfo/America/Buenos_Aires.ics +++ b/zoneinfo/America/Buenos_Aires.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Buenos_Aires -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Buenos_Aires +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Buenos_Aires BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Cambridge_Bay.ics b/zoneinfo/America/Cambridge_Bay.ics index 6a747661..e74408e9 100644 --- a/zoneinfo/America/Cambridge_Bay.ics +++ b/zoneinfo/America/Cambridge_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Cambridge_Bay -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Cambridge_Bay +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Cambridge_Bay BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Campo_Grande.ics b/zoneinfo/America/Campo_Grande.ics index 2b504f82..5d9a5fb9 100644 --- a/zoneinfo/America/Campo_Grande.ics +++ b/zoneinfo/America/Campo_Grande.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Campo_Grande -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Campo_Grande +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Campo_Grande BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Cancun.ics b/zoneinfo/America/Cancun.ics index 791e80b4..50625a0f 100644 --- a/zoneinfo/America/Cancun.ics +++ b/zoneinfo/America/Cancun.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Cancun -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Cancun +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Cancun BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Caracas.ics b/zoneinfo/America/Caracas.ics index 1c9e2f52..eac90af5 100644 --- a/zoneinfo/America/Caracas.ics +++ b/zoneinfo/America/Caracas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Caracas -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Caracas +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Caracas BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Catamarca.ics b/zoneinfo/America/Catamarca.ics index 451b8a05..9e6dd0bf 100644 --- a/zoneinfo/America/Catamarca.ics +++ b/zoneinfo/America/Catamarca.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Catamarca -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Catamarca +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Catamarca BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Cayenne.ics b/zoneinfo/America/Cayenne.ics index 692d53f4..6e0d959e 100644 --- a/zoneinfo/America/Cayenne.ics +++ b/zoneinfo/America/Cayenne.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Cayenne -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Cayenne +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Cayenne BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Cayman.ics b/zoneinfo/America/Cayman.ics index d2493fa4..83c840b3 100644 --- a/zoneinfo/America/Cayman.ics +++ b/zoneinfo/America/Cayman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Panama -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Panama +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Chicago.ics b/zoneinfo/America/Chicago.ics index 5e5b3f76..0bad1652 100644 --- a/zoneinfo/America/Chicago.ics +++ b/zoneinfo/America/Chicago.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Chicago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Chicago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Chicago BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Chihuahua.ics b/zoneinfo/America/Chihuahua.ics index 3edd715c..37793cdd 100644 --- a/zoneinfo/America/Chihuahua.ics +++ b/zoneinfo/America/Chihuahua.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Chihuahua -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Chihuahua +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Chihuahua BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Coral_Harbour.ics b/zoneinfo/America/Coral_Harbour.ics index d2493fa4..83c840b3 100644 --- a/zoneinfo/America/Coral_Harbour.ics +++ b/zoneinfo/America/Coral_Harbour.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Panama -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Panama +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Cordoba.ics b/zoneinfo/America/Cordoba.ics index 256d0595..deccae2d 100644 --- a/zoneinfo/America/Cordoba.ics +++ b/zoneinfo/America/Cordoba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Cordoba -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Cordoba +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Costa_Rica.ics b/zoneinfo/America/Costa_Rica.ics index 664457d3..7b514108 100644 --- a/zoneinfo/America/Costa_Rica.ics +++ b/zoneinfo/America/Costa_Rica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Costa_Rica -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Costa_Rica +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Costa_Rica BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Creston.ics b/zoneinfo/America/Creston.ics index de8d3ee6..93db33c3 100644 --- a/zoneinfo/America/Creston.ics +++ b/zoneinfo/America/Creston.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Phoenix -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Phoenix +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Cuiaba.ics b/zoneinfo/America/Cuiaba.ics index 7b93a7ee..5e81ef02 100644 --- a/zoneinfo/America/Cuiaba.ics +++ b/zoneinfo/America/Cuiaba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Cuiaba -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Cuiaba +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Cuiaba BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Curacao.ics b/zoneinfo/America/Curacao.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Curacao.ics +++ b/zoneinfo/America/Curacao.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Danmarkshavn.ics b/zoneinfo/America/Danmarkshavn.ics index 4df33c04..00e58db3 100644 --- a/zoneinfo/America/Danmarkshavn.ics +++ b/zoneinfo/America/Danmarkshavn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Danmarkshavn -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Danmarkshavn +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Danmarkshavn BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/America/Dawson.ics b/zoneinfo/America/Dawson.ics index 23fbdd5c..fcb041d3 100644 --- a/zoneinfo/America/Dawson.ics +++ b/zoneinfo/America/Dawson.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Dawson -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Dawson +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Dawson BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Dawson_Creek.ics b/zoneinfo/America/Dawson_Creek.ics index 128b5aa4..f358281f 100644 --- a/zoneinfo/America/Dawson_Creek.ics +++ b/zoneinfo/America/Dawson_Creek.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Dawson_Creek -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Dawson_Creek +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Dawson_Creek BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Denver.ics b/zoneinfo/America/Denver.ics index c5697a29..76584cb4 100644 --- a/zoneinfo/America/Denver.ics +++ b/zoneinfo/America/Denver.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Denver -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Denver +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Detroit.ics b/zoneinfo/America/Detroit.ics index db491782..c653a38b 100644 --- a/zoneinfo/America/Detroit.ics +++ b/zoneinfo/America/Detroit.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Detroit -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Detroit +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Detroit BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Dominica.ics b/zoneinfo/America/Dominica.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Dominica.ics +++ b/zoneinfo/America/Dominica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Edmonton.ics b/zoneinfo/America/Edmonton.ics index de34f330..7a06ce41 100644 --- a/zoneinfo/America/Edmonton.ics +++ b/zoneinfo/America/Edmonton.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Edmonton -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Edmonton +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Edmonton BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Eirunepe.ics b/zoneinfo/America/Eirunepe.ics index 90f5f0aa..cf0d6050 100644 --- a/zoneinfo/America/Eirunepe.ics +++ b/zoneinfo/America/Eirunepe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Eirunepe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Eirunepe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Eirunepe BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/El_Salvador.ics b/zoneinfo/America/El_Salvador.ics index 2301f495..f149ddb3 100644 --- a/zoneinfo/America/El_Salvador.ics +++ b/zoneinfo/America/El_Salvador.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/El_Salvador -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/El_Salvador +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/El_Salvador BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Ensenada.ics b/zoneinfo/America/Ensenada.ics index e4f7ae6f..20014d51 100644 --- a/zoneinfo/America/Ensenada.ics +++ b/zoneinfo/America/Ensenada.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Tijuana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Tijuana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Fort_Nelson.ics b/zoneinfo/America/Fort_Nelson.ics index df1e82ae..eb11bec4 100644 --- a/zoneinfo/America/Fort_Nelson.ics +++ b/zoneinfo/America/Fort_Nelson.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Fort_Nelson -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Fort_Nelson +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Fort_Nelson BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Fort_Wayne.ics b/zoneinfo/America/Fort_Wayne.ics index 8319a36b..15781f51 100644 --- a/zoneinfo/America/Fort_Wayne.ics +++ b/zoneinfo/America/Fort_Wayne.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Fortaleza.ics b/zoneinfo/America/Fortaleza.ics index 81b5795b..904aaa09 100644 --- a/zoneinfo/America/Fortaleza.ics +++ b/zoneinfo/America/Fortaleza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Fortaleza -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Fortaleza +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Fortaleza BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Glace_Bay.ics b/zoneinfo/America/Glace_Bay.ics index c1553aa1..9caf7d8c 100644 --- a/zoneinfo/America/Glace_Bay.ics +++ b/zoneinfo/America/Glace_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Glace_Bay -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Glace_Bay +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Glace_Bay BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Godthab.ics b/zoneinfo/America/Godthab.ics index 36ff4069..c6d55d33 100644 --- a/zoneinfo/America/Godthab.ics +++ b/zoneinfo/America/Godthab.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Nuuk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Nuuk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Nuuk BEGIN:DAYLIGHT TZNAME:-02 diff --git a/zoneinfo/America/Goose_Bay.ics b/zoneinfo/America/Goose_Bay.ics index 3ca987dc..8ea92acd 100644 --- a/zoneinfo/America/Goose_Bay.ics +++ b/zoneinfo/America/Goose_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Goose_Bay -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Goose_Bay +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Goose_Bay BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Grand_Turk.ics b/zoneinfo/America/Grand_Turk.ics index 0f78b1c6..0f10eeda 100644 --- a/zoneinfo/America/Grand_Turk.ics +++ b/zoneinfo/America/Grand_Turk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Grand_Turk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Grand_Turk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Grand_Turk BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Grenada.ics b/zoneinfo/America/Grenada.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Grenada.ics +++ b/zoneinfo/America/Grenada.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Guadeloupe.ics b/zoneinfo/America/Guadeloupe.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Guadeloupe.ics +++ b/zoneinfo/America/Guadeloupe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Guatemala.ics b/zoneinfo/America/Guatemala.ics index 8d1acd35..299ea55f 100644 --- a/zoneinfo/America/Guatemala.ics +++ b/zoneinfo/America/Guatemala.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Guatemala -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Guatemala +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Guatemala BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Guayaquil.ics b/zoneinfo/America/Guayaquil.ics index 438b027f..443405fb 100644 --- a/zoneinfo/America/Guayaquil.ics +++ b/zoneinfo/America/Guayaquil.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Guayaquil -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Guayaquil +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Guayaquil BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Guyana.ics b/zoneinfo/America/Guyana.ics index 0032e4e0..b48e8074 100644 --- a/zoneinfo/America/Guyana.ics +++ b/zoneinfo/America/Guyana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Guyana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Guyana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Guyana BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Halifax.ics b/zoneinfo/America/Halifax.ics index a16d5d69..f6933249 100644 --- a/zoneinfo/America/Halifax.ics +++ b/zoneinfo/America/Halifax.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Halifax -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Halifax +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Halifax BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Havana.ics b/zoneinfo/America/Havana.ics index 432da95e..edd18faa 100644 --- a/zoneinfo/America/Havana.ics +++ b/zoneinfo/America/Havana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Havana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Havana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Havana BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Hermosillo.ics b/zoneinfo/America/Hermosillo.ics index 612d4a3b..c5357ce1 100644 --- a/zoneinfo/America/Hermosillo.ics +++ b/zoneinfo/America/Hermosillo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Hermosillo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Hermosillo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Hermosillo BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Indiana/Indianapolis.ics b/zoneinfo/America/Indiana/Indianapolis.ics index 8319a36b..15781f51 100644 --- a/zoneinfo/America/Indiana/Indianapolis.ics +++ b/zoneinfo/America/Indiana/Indianapolis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Knox.ics b/zoneinfo/America/Indiana/Knox.ics index faa66d0a..7c457cc5 100644 --- a/zoneinfo/America/Indiana/Knox.ics +++ b/zoneinfo/America/Indiana/Knox.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Knox -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Knox +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Indiana/Marengo.ics b/zoneinfo/America/Indiana/Marengo.ics index bcfebf93..15d0245f 100644 --- a/zoneinfo/America/Indiana/Marengo.ics +++ b/zoneinfo/America/Indiana/Marengo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Marengo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Marengo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Marengo BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Petersburg.ics b/zoneinfo/America/Indiana/Petersburg.ics index 3cc71d0b..1cad4d11 100644 --- a/zoneinfo/America/Indiana/Petersburg.ics +++ b/zoneinfo/America/Indiana/Petersburg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Petersburg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Petersburg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Petersburg BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Tell_City.ics b/zoneinfo/America/Indiana/Tell_City.ics index 95d878fc..06f07d69 100644 --- a/zoneinfo/America/Indiana/Tell_City.ics +++ b/zoneinfo/America/Indiana/Tell_City.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Tell_City -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Tell_City +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Tell_City BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Indiana/Vevay.ics b/zoneinfo/America/Indiana/Vevay.ics index f63ebcaa..5f3f3140 100644 --- a/zoneinfo/America/Indiana/Vevay.ics +++ b/zoneinfo/America/Indiana/Vevay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Vevay -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Vevay +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Vevay BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Vincennes.ics b/zoneinfo/America/Indiana/Vincennes.ics index 0eac7739..e3ebf17c 100644 --- a/zoneinfo/America/Indiana/Vincennes.ics +++ b/zoneinfo/America/Indiana/Vincennes.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Vincennes -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Vincennes +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Vincennes BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Indiana/Winamac.ics b/zoneinfo/America/Indiana/Winamac.ics index ff293b39..0439be03 100644 --- a/zoneinfo/America/Indiana/Winamac.ics +++ b/zoneinfo/America/Indiana/Winamac.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Winamac -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Winamac +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Winamac BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Indianapolis.ics b/zoneinfo/America/Indianapolis.ics index 8319a36b..15781f51 100644 --- a/zoneinfo/America/Indianapolis.ics +++ b/zoneinfo/America/Indianapolis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Inuvik.ics b/zoneinfo/America/Inuvik.ics index ab853291..d013fc13 100644 --- a/zoneinfo/America/Inuvik.ics +++ b/zoneinfo/America/Inuvik.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Inuvik -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Inuvik +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Inuvik BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Iqaluit.ics b/zoneinfo/America/Iqaluit.ics index 0adca411..0f905d4a 100644 --- a/zoneinfo/America/Iqaluit.ics +++ b/zoneinfo/America/Iqaluit.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Iqaluit -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Iqaluit +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Iqaluit BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Jamaica.ics b/zoneinfo/America/Jamaica.ics index b7a45b61..286f140f 100644 --- a/zoneinfo/America/Jamaica.ics +++ b/zoneinfo/America/Jamaica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Jamaica -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Jamaica +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Jamaica BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Jujuy.ics b/zoneinfo/America/Jujuy.ics index 3634507a..e616bab5 100644 --- a/zoneinfo/America/Jujuy.ics +++ b/zoneinfo/America/Jujuy.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Jujuy -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Jujuy +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Jujuy BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Juneau.ics b/zoneinfo/America/Juneau.ics index 4e2b5a23..ec3815f6 100644 --- a/zoneinfo/America/Juneau.ics +++ b/zoneinfo/America/Juneau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Juneau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Juneau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Juneau BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Kentucky/Louisville.ics b/zoneinfo/America/Kentucky/Louisville.ics index 6be581c4..e854ce8f 100644 --- a/zoneinfo/America/Kentucky/Louisville.ics +++ b/zoneinfo/America/Kentucky/Louisville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Kentucky/Louisville -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Kentucky/Louisville +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Kentucky/Louisville BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Kentucky/Monticello.ics b/zoneinfo/America/Kentucky/Monticello.ics index 2838c861..e0e640d5 100644 --- a/zoneinfo/America/Kentucky/Monticello.ics +++ b/zoneinfo/America/Kentucky/Monticello.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Kentucky/Monticello -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Kentucky/Monticello +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Kentucky/Monticello BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Knox_IN.ics b/zoneinfo/America/Knox_IN.ics index faa66d0a..7c457cc5 100644 --- a/zoneinfo/America/Knox_IN.ics +++ b/zoneinfo/America/Knox_IN.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Knox -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Knox +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Kralendijk.ics b/zoneinfo/America/Kralendijk.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Kralendijk.ics +++ b/zoneinfo/America/Kralendijk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/La_Paz.ics b/zoneinfo/America/La_Paz.ics index 626d9fa4..19a37eab 100644 --- a/zoneinfo/America/La_Paz.ics +++ b/zoneinfo/America/La_Paz.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/La_Paz -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/La_Paz +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/La_Paz BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Lima.ics b/zoneinfo/America/Lima.ics index c60f688d..fa258cda 100644 --- a/zoneinfo/America/Lima.ics +++ b/zoneinfo/America/Lima.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Lima -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Lima +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Lima BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Los_Angeles.ics b/zoneinfo/America/Los_Angeles.ics index 8545d95d..02d2810c 100644 --- a/zoneinfo/America/Los_Angeles.ics +++ b/zoneinfo/America/Los_Angeles.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Los_Angeles -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Los_Angeles +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Louisville.ics b/zoneinfo/America/Louisville.ics index 6be581c4..e854ce8f 100644 --- a/zoneinfo/America/Louisville.ics +++ b/zoneinfo/America/Louisville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Kentucky/Louisville -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Kentucky/Louisville +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Kentucky/Louisville BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Lower_Princes.ics b/zoneinfo/America/Lower_Princes.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Lower_Princes.ics +++ b/zoneinfo/America/Lower_Princes.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Maceio.ics b/zoneinfo/America/Maceio.ics index 08b130c9..6e6a4111 100644 --- a/zoneinfo/America/Maceio.ics +++ b/zoneinfo/America/Maceio.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Maceio -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Maceio +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Maceio BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Managua.ics b/zoneinfo/America/Managua.ics index 37cb0d8d..496cd898 100644 --- a/zoneinfo/America/Managua.ics +++ b/zoneinfo/America/Managua.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Managua -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Managua +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Managua BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Manaus.ics b/zoneinfo/America/Manaus.ics index 5ceb8664..3afb9f05 100644 --- a/zoneinfo/America/Manaus.ics +++ b/zoneinfo/America/Manaus.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Manaus -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Manaus +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Manaus BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Marigot.ics b/zoneinfo/America/Marigot.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Marigot.ics +++ b/zoneinfo/America/Marigot.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Martinique.ics b/zoneinfo/America/Martinique.ics index 93dd1a88..aff1a416 100644 --- a/zoneinfo/America/Martinique.ics +++ b/zoneinfo/America/Martinique.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Martinique -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Martinique +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Martinique BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Matamoros.ics b/zoneinfo/America/Matamoros.ics index 89c6512e..453c5d8d 100644 --- a/zoneinfo/America/Matamoros.ics +++ b/zoneinfo/America/Matamoros.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Matamoros -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Matamoros +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Matamoros BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Mazatlan.ics b/zoneinfo/America/Mazatlan.ics index bfd98fbc..d859310b 100644 --- a/zoneinfo/America/Mazatlan.ics +++ b/zoneinfo/America/Mazatlan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Mazatlan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Mazatlan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Mazatlan BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Mendoza.ics b/zoneinfo/America/Mendoza.ics index 1d610ba9..5f58bc2c 100644 --- a/zoneinfo/America/Mendoza.ics +++ b/zoneinfo/America/Mendoza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Mendoza -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Mendoza +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Mendoza BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Menominee.ics b/zoneinfo/America/Menominee.ics index 3a9f4728..1f0f8d15 100644 --- a/zoneinfo/America/Menominee.ics +++ b/zoneinfo/America/Menominee.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Menominee -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Menominee +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Menominee BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Merida.ics b/zoneinfo/America/Merida.ics index 46b03913..bbb50789 100644 --- a/zoneinfo/America/Merida.ics +++ b/zoneinfo/America/Merida.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Merida -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Merida +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Merida BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Metlakatla.ics b/zoneinfo/America/Metlakatla.ics index 4cf63b0d..cd2bbe09 100644 --- a/zoneinfo/America/Metlakatla.ics +++ b/zoneinfo/America/Metlakatla.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Metlakatla -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Metlakatla +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Metlakatla BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Mexico_City.ics b/zoneinfo/America/Mexico_City.ics index 3def11f5..c869740c 100644 --- a/zoneinfo/America/Mexico_City.ics +++ b/zoneinfo/America/Mexico_City.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Mexico_City -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Mexico_City +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Mexico_City BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Miquelon.ics b/zoneinfo/America/Miquelon.ics index 9877303c..6b35eb1f 100644 --- a/zoneinfo/America/Miquelon.ics +++ b/zoneinfo/America/Miquelon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Miquelon -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Miquelon +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Miquelon BEGIN:DAYLIGHT TZNAME:-02 diff --git a/zoneinfo/America/Moncton.ics b/zoneinfo/America/Moncton.ics index 690c39f6..7db45fba 100644 --- a/zoneinfo/America/Moncton.ics +++ b/zoneinfo/America/Moncton.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Moncton -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Moncton +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Moncton BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Monterrey.ics b/zoneinfo/America/Monterrey.ics index ab238033..f76c3e6e 100644 --- a/zoneinfo/America/Monterrey.ics +++ b/zoneinfo/America/Monterrey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Monterrey -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Monterrey +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Monterrey BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Montevideo.ics b/zoneinfo/America/Montevideo.ics index 97628c26..e958c4ba 100644 --- a/zoneinfo/America/Montevideo.ics +++ b/zoneinfo/America/Montevideo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Montevideo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Montevideo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Montevideo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Montreal.ics b/zoneinfo/America/Montreal.ics index 30761dab..811a6158 100644 --- a/zoneinfo/America/Montreal.ics +++ b/zoneinfo/America/Montreal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Toronto -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Toronto +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Montserrat.ics b/zoneinfo/America/Montserrat.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Montserrat.ics +++ b/zoneinfo/America/Montserrat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Nassau.ics b/zoneinfo/America/Nassau.ics index 30761dab..811a6158 100644 --- a/zoneinfo/America/Nassau.ics +++ b/zoneinfo/America/Nassau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Toronto -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Toronto +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/New_York.ics b/zoneinfo/America/New_York.ics index d81c013c..3738a5bb 100644 --- a/zoneinfo/America/New_York.ics +++ b/zoneinfo/America/New_York.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/New_York -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/New_York +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Nipigon.ics b/zoneinfo/America/Nipigon.ics index 5d5435cf..2ab99168 100644 --- a/zoneinfo/America/Nipigon.ics +++ b/zoneinfo/America/Nipigon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Nipigon -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Nipigon +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Nipigon BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Nome.ics b/zoneinfo/America/Nome.ics index b060b88b..4e7c7534 100644 --- a/zoneinfo/America/Nome.ics +++ b/zoneinfo/America/Nome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Nome -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Nome +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Nome BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Noronha.ics b/zoneinfo/America/Noronha.ics index 20804163..e663fd80 100644 --- a/zoneinfo/America/Noronha.ics +++ b/zoneinfo/America/Noronha.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Noronha -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Noronha +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Noronha BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/America/North_Dakota/Beulah.ics b/zoneinfo/America/North_Dakota/Beulah.ics index e45c32b7..065b7ce0 100644 --- a/zoneinfo/America/North_Dakota/Beulah.ics +++ b/zoneinfo/America/North_Dakota/Beulah.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/North_Dakota/Beulah -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/North_Dakota/Beulah +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/North_Dakota/Beulah BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/North_Dakota/Center.ics b/zoneinfo/America/North_Dakota/Center.ics index a1f0eff5..2e184d51 100644 --- a/zoneinfo/America/North_Dakota/Center.ics +++ b/zoneinfo/America/North_Dakota/Center.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/North_Dakota/Center -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/North_Dakota/Center +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/North_Dakota/Center BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/North_Dakota/New_Salem.ics b/zoneinfo/America/North_Dakota/New_Salem.ics index 9460e80d..f84a1981 100644 --- a/zoneinfo/America/North_Dakota/New_Salem.ics +++ b/zoneinfo/America/North_Dakota/New_Salem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/North_Dakota/New_Salem -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/North_Dakota/New_Salem +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/North_Dakota/New_Salem BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Nuuk.ics b/zoneinfo/America/Nuuk.ics index 36ff4069..c6d55d33 100644 --- a/zoneinfo/America/Nuuk.ics +++ b/zoneinfo/America/Nuuk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Nuuk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Nuuk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Nuuk BEGIN:DAYLIGHT TZNAME:-02 diff --git a/zoneinfo/America/Ojinaga.ics b/zoneinfo/America/Ojinaga.ics index f16a4d11..db45d8dc 100644 --- a/zoneinfo/America/Ojinaga.ics +++ b/zoneinfo/America/Ojinaga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Ojinaga -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Ojinaga +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Ojinaga BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Panama.ics b/zoneinfo/America/Panama.ics index d2493fa4..83c840b3 100644 --- a/zoneinfo/America/Panama.ics +++ b/zoneinfo/America/Panama.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Panama -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Panama +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Panama BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/America/Pangnirtung.ics b/zoneinfo/America/Pangnirtung.ics index 6a0fe6d2..1fbdd179 100644 --- a/zoneinfo/America/Pangnirtung.ics +++ b/zoneinfo/America/Pangnirtung.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Pangnirtung -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Pangnirtung +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Pangnirtung BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Paramaribo.ics b/zoneinfo/America/Paramaribo.ics index 9821d3e4..d308a10e 100644 --- a/zoneinfo/America/Paramaribo.ics +++ b/zoneinfo/America/Paramaribo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Paramaribo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Paramaribo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Paramaribo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Phoenix.ics b/zoneinfo/America/Phoenix.ics index de8d3ee6..93db33c3 100644 --- a/zoneinfo/America/Phoenix.ics +++ b/zoneinfo/America/Phoenix.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Phoenix -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Phoenix +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Port-au-Prince.ics b/zoneinfo/America/Port-au-Prince.ics index bed6c047..dd032d14 100644 --- a/zoneinfo/America/Port-au-Prince.ics +++ b/zoneinfo/America/Port-au-Prince.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Port-au-Prince -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Port-au-Prince +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Port-au-Prince BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Port_of_Spain.ics b/zoneinfo/America/Port_of_Spain.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Port_of_Spain.ics +++ b/zoneinfo/America/Port_of_Spain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Porto_Acre.ics b/zoneinfo/America/Porto_Acre.ics index 70e10b53..4b1798f8 100644 --- a/zoneinfo/America/Porto_Acre.ics +++ b/zoneinfo/America/Porto_Acre.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Rio_Branco -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Rio_Branco +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Porto_Velho.ics b/zoneinfo/America/Porto_Velho.ics index f8a3c36a..657b0931 100644 --- a/zoneinfo/America/Porto_Velho.ics +++ b/zoneinfo/America/Porto_Velho.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Porto_Velho -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Porto_Velho +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Porto_Velho BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Puerto_Rico.ics b/zoneinfo/America/Puerto_Rico.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Puerto_Rico.ics +++ b/zoneinfo/America/Puerto_Rico.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Punta_Arenas.ics b/zoneinfo/America/Punta_Arenas.ics index c0d02f38..6dda7c15 100644 --- a/zoneinfo/America/Punta_Arenas.ics +++ b/zoneinfo/America/Punta_Arenas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Punta_Arenas -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Punta_Arenas +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Punta_Arenas BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Rainy_River.ics b/zoneinfo/America/Rainy_River.ics index 1c05224c..983495fc 100644 --- a/zoneinfo/America/Rainy_River.ics +++ b/zoneinfo/America/Rainy_River.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Rainy_River -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Rainy_River +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Rainy_River BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Rankin_Inlet.ics b/zoneinfo/America/Rankin_Inlet.ics index 2d5a08a8..20c60e30 100644 --- a/zoneinfo/America/Rankin_Inlet.ics +++ b/zoneinfo/America/Rankin_Inlet.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Rankin_Inlet -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Rankin_Inlet +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Rankin_Inlet BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Recife.ics b/zoneinfo/America/Recife.ics index 292bff3f..39d1e3a6 100644 --- a/zoneinfo/America/Recife.ics +++ b/zoneinfo/America/Recife.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Recife -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Recife +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Recife BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Regina.ics b/zoneinfo/America/Regina.ics index 499a516c..b6b0b770 100644 --- a/zoneinfo/America/Regina.ics +++ b/zoneinfo/America/Regina.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Regina -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Regina +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Regina BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Resolute.ics b/zoneinfo/America/Resolute.ics index e7cd550b..37c080b5 100644 --- a/zoneinfo/America/Resolute.ics +++ b/zoneinfo/America/Resolute.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Resolute -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Resolute +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Resolute BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Rio_Branco.ics b/zoneinfo/America/Rio_Branco.ics index 70e10b53..4b1798f8 100644 --- a/zoneinfo/America/Rio_Branco.ics +++ b/zoneinfo/America/Rio_Branco.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Rio_Branco -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Rio_Branco +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/America/Rosario.ics b/zoneinfo/America/Rosario.ics index 256d0595..deccae2d 100644 --- a/zoneinfo/America/Rosario.ics +++ b/zoneinfo/America/Rosario.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Argentina/Cordoba -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Argentina/Cordoba +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Argentina/Cordoba BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Santa_Isabel.ics b/zoneinfo/America/Santa_Isabel.ics index e4f7ae6f..20014d51 100644 --- a/zoneinfo/America/Santa_Isabel.ics +++ b/zoneinfo/America/Santa_Isabel.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Tijuana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Tijuana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Santarem.ics b/zoneinfo/America/Santarem.ics index 1dca2df7..255a203e 100644 --- a/zoneinfo/America/Santarem.ics +++ b/zoneinfo/America/Santarem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Santarem -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Santarem +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Santarem BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Santiago.ics b/zoneinfo/America/Santiago.ics index db805e2b..e96b1501 100644 --- a/zoneinfo/America/Santiago.ics +++ b/zoneinfo/America/Santiago.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Santiago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Santiago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Santiago BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/America/Santo_Domingo.ics b/zoneinfo/America/Santo_Domingo.ics index 01ce74f9..abf14b27 100644 --- a/zoneinfo/America/Santo_Domingo.ics +++ b/zoneinfo/America/Santo_Domingo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Santo_Domingo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Santo_Domingo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Santo_Domingo BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Sao_Paulo.ics b/zoneinfo/America/Sao_Paulo.ics index 6c44e413..8ff52510 100644 --- a/zoneinfo/America/Sao_Paulo.ics +++ b/zoneinfo/America/Sao_Paulo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Sao_Paulo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Sao_Paulo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Sao_Paulo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/America/Scoresbysund.ics b/zoneinfo/America/Scoresbysund.ics index 529ac08c..72127d81 100644 --- a/zoneinfo/America/Scoresbysund.ics +++ b/zoneinfo/America/Scoresbysund.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Scoresbysund -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Scoresbysund +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Scoresbysund BEGIN:DAYLIGHT TZNAME:+00 diff --git a/zoneinfo/America/Shiprock.ics b/zoneinfo/America/Shiprock.ics index c5697a29..76584cb4 100644 --- a/zoneinfo/America/Shiprock.ics +++ b/zoneinfo/America/Shiprock.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Denver -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Denver +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/America/Sitka.ics b/zoneinfo/America/Sitka.ics index 8c2c2d9c..cd19b61c 100644 --- a/zoneinfo/America/Sitka.ics +++ b/zoneinfo/America/Sitka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Sitka -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Sitka +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Sitka BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/St_Barthelemy.ics b/zoneinfo/America/St_Barthelemy.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/St_Barthelemy.ics +++ b/zoneinfo/America/St_Barthelemy.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/St_Johns.ics b/zoneinfo/America/St_Johns.ics index 81921e8c..584f3300 100644 --- a/zoneinfo/America/St_Johns.ics +++ b/zoneinfo/America/St_Johns.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/St_Johns -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/St_Johns +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/St_Johns BEGIN:STANDARD TZNAME:NST diff --git a/zoneinfo/America/St_Kitts.ics b/zoneinfo/America/St_Kitts.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/St_Kitts.ics +++ b/zoneinfo/America/St_Kitts.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/St_Lucia.ics b/zoneinfo/America/St_Lucia.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/St_Lucia.ics +++ b/zoneinfo/America/St_Lucia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/St_Thomas.ics b/zoneinfo/America/St_Thomas.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/St_Thomas.ics +++ b/zoneinfo/America/St_Thomas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/St_Vincent.ics b/zoneinfo/America/St_Vincent.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/St_Vincent.ics +++ b/zoneinfo/America/St_Vincent.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Swift_Current.ics b/zoneinfo/America/Swift_Current.ics index 86ce049c..3a864298 100644 --- a/zoneinfo/America/Swift_Current.ics +++ b/zoneinfo/America/Swift_Current.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Swift_Current -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Swift_Current +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Swift_Current BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Tegucigalpa.ics b/zoneinfo/America/Tegucigalpa.ics index 6ca11f70..8b881b50 100644 --- a/zoneinfo/America/Tegucigalpa.ics +++ b/zoneinfo/America/Tegucigalpa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Tegucigalpa -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Tegucigalpa +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Tegucigalpa BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/America/Thule.ics b/zoneinfo/America/Thule.ics index a123d368..efa6f8f7 100644 --- a/zoneinfo/America/Thule.ics +++ b/zoneinfo/America/Thule.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Thule -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Thule +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Thule BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/America/Thunder_Bay.ics b/zoneinfo/America/Thunder_Bay.ics index 6f235fff..52f568bd 100644 --- a/zoneinfo/America/Thunder_Bay.ics +++ b/zoneinfo/America/Thunder_Bay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Thunder_Bay -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Thunder_Bay +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Thunder_Bay BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Tijuana.ics b/zoneinfo/America/Tijuana.ics index e4f7ae6f..20014d51 100644 --- a/zoneinfo/America/Tijuana.ics +++ b/zoneinfo/America/Tijuana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Tijuana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Tijuana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Toronto.ics b/zoneinfo/America/Toronto.ics index 30761dab..811a6158 100644 --- a/zoneinfo/America/Toronto.ics +++ b/zoneinfo/America/Toronto.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Toronto -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Toronto +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/America/Tortola.ics b/zoneinfo/America/Tortola.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Tortola.ics +++ b/zoneinfo/America/Tortola.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Vancouver.ics b/zoneinfo/America/Vancouver.ics index 313e9353..d7a912c4 100644 --- a/zoneinfo/America/Vancouver.ics +++ b/zoneinfo/America/Vancouver.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Vancouver -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Vancouver +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Vancouver BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/America/Virgin.ics b/zoneinfo/America/Virgin.ics index 150f6b67..c0bfd092 100644 --- a/zoneinfo/America/Virgin.ics +++ b/zoneinfo/America/Virgin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Puerto_Rico -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Puerto_Rico +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Puerto_Rico BEGIN:STANDARD TZNAME:AST diff --git a/zoneinfo/America/Whitehorse.ics b/zoneinfo/America/Whitehorse.ics index 6b0ee092..0e1383ce 100644 --- a/zoneinfo/America/Whitehorse.ics +++ b/zoneinfo/America/Whitehorse.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Whitehorse -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Whitehorse +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Whitehorse BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/America/Winnipeg.ics b/zoneinfo/America/Winnipeg.ics index 71bc0693..8dcd6087 100644 --- a/zoneinfo/America/Winnipeg.ics +++ b/zoneinfo/America/Winnipeg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Winnipeg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Winnipeg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Winnipeg BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/America/Yakutat.ics b/zoneinfo/America/Yakutat.ics index 410500a0..0011f634 100644 --- a/zoneinfo/America/Yakutat.ics +++ b/zoneinfo/America/Yakutat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Yakutat -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Yakutat +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Yakutat BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/America/Yellowknife.ics b/zoneinfo/America/Yellowknife.ics index fb648a36..5bcfdc71 100644 --- a/zoneinfo/America/Yellowknife.ics +++ b/zoneinfo/America/Yellowknife.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Yellowknife -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Yellowknife +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Yellowknife BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Antarctica/Casey.ics b/zoneinfo/Antarctica/Casey.ics index de999fb1..96b2f648 100644 --- a/zoneinfo/Antarctica/Casey.ics +++ b/zoneinfo/Antarctica/Casey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Casey -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Casey +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Casey BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Antarctica/Davis.ics b/zoneinfo/Antarctica/Davis.ics index 0a688743..3c92e40d 100644 --- a/zoneinfo/Antarctica/Davis.ics +++ b/zoneinfo/Antarctica/Davis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Davis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Davis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Davis BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Antarctica/DumontDUrville.ics b/zoneinfo/Antarctica/DumontDUrville.ics index b2ee3c97..07460e5e 100644 --- a/zoneinfo/Antarctica/DumontDUrville.ics +++ b/zoneinfo/Antarctica/DumontDUrville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Port_Moresby -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Port_Moresby +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Port_Moresby BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Antarctica/Macquarie.ics b/zoneinfo/Antarctica/Macquarie.ics index 9c116162..d88fa75b 100644 --- a/zoneinfo/Antarctica/Macquarie.ics +++ b/zoneinfo/Antarctica/Macquarie.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Macquarie -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Macquarie +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Macquarie BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Antarctica/Mawson.ics b/zoneinfo/Antarctica/Mawson.ics index c5f9880d..752acbd6 100644 --- a/zoneinfo/Antarctica/Mawson.ics +++ b/zoneinfo/Antarctica/Mawson.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Mawson -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Mawson +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Mawson BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Antarctica/McMurdo.ics b/zoneinfo/Antarctica/McMurdo.ics index 96762274..ae1b4b12 100644 --- a/zoneinfo/Antarctica/McMurdo.ics +++ b/zoneinfo/Antarctica/McMurdo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Auckland -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Auckland +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Antarctica/Palmer.ics b/zoneinfo/Antarctica/Palmer.ics index 8b0ce0a0..4845bd24 100644 --- a/zoneinfo/Antarctica/Palmer.ics +++ b/zoneinfo/Antarctica/Palmer.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Palmer -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Palmer +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Palmer BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Antarctica/Rothera.ics b/zoneinfo/Antarctica/Rothera.ics index 20afc145..faea198f 100644 --- a/zoneinfo/Antarctica/Rothera.ics +++ b/zoneinfo/Antarctica/Rothera.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Rothera -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Rothera +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Rothera BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Antarctica/South_Pole.ics b/zoneinfo/Antarctica/South_Pole.ics index 96762274..ae1b4b12 100644 --- a/zoneinfo/Antarctica/South_Pole.ics +++ b/zoneinfo/Antarctica/South_Pole.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Auckland -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Auckland +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Antarctica/Syowa.ics b/zoneinfo/Antarctica/Syowa.ics index 6c7fd19a..748c16c4 100644 --- a/zoneinfo/Antarctica/Syowa.ics +++ b/zoneinfo/Antarctica/Syowa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Riyadh -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Riyadh +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Antarctica/Troll.ics b/zoneinfo/Antarctica/Troll.ics index a21d26d0..d5b6ba3a 100644 --- a/zoneinfo/Antarctica/Troll.ics +++ b/zoneinfo/Antarctica/Troll.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Troll -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Troll +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Troll BEGIN:DAYLIGHT TZNAME:+02 diff --git a/zoneinfo/Antarctica/Vostok.ics b/zoneinfo/Antarctica/Vostok.ics index 3651f507..61444977 100644 --- a/zoneinfo/Antarctica/Vostok.ics +++ b/zoneinfo/Antarctica/Vostok.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Antarctica/Vostok -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Antarctica/Vostok +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Antarctica/Vostok BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Arctic/Longyearbyen.ics b/zoneinfo/Arctic/Longyearbyen.ics index 9f8f9a19..8274486e 100644 --- a/zoneinfo/Arctic/Longyearbyen.ics +++ b/zoneinfo/Arctic/Longyearbyen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Oslo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Oslo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Asia/Aden.ics b/zoneinfo/Asia/Aden.ics index 6c7fd19a..748c16c4 100644 --- a/zoneinfo/Asia/Aden.ics +++ b/zoneinfo/Asia/Aden.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Riyadh -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Riyadh +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Almaty.ics b/zoneinfo/Asia/Almaty.ics index 88bcc40e..22e30583 100644 --- a/zoneinfo/Asia/Almaty.ics +++ b/zoneinfo/Asia/Almaty.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Almaty -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Almaty +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Almaty BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Amman.ics b/zoneinfo/Asia/Amman.ics index 890afae8..93bf0d2f 100644 --- a/zoneinfo/Asia/Amman.ics +++ b/zoneinfo/Asia/Amman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Amman -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Amman +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Amman BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Asia/Anadyr.ics b/zoneinfo/Asia/Anadyr.ics index 371c1b28..b220cc3f 100644 --- a/zoneinfo/Asia/Anadyr.ics +++ b/zoneinfo/Asia/Anadyr.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Anadyr -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Anadyr +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Anadyr BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Asia/Aqtau.ics b/zoneinfo/Asia/Aqtau.ics index 974f55dd..406af0f6 100644 --- a/zoneinfo/Asia/Aqtau.ics +++ b/zoneinfo/Asia/Aqtau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Aqtau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Aqtau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Aqtau BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Aqtobe.ics b/zoneinfo/Asia/Aqtobe.ics index d2dc7b4c..e10823cf 100644 --- a/zoneinfo/Asia/Aqtobe.ics +++ b/zoneinfo/Asia/Aqtobe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Aqtobe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Aqtobe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Aqtobe BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Ashgabat.ics b/zoneinfo/Asia/Ashgabat.ics index 4c378f14..82b3a799 100644 --- a/zoneinfo/Asia/Ashgabat.ics +++ b/zoneinfo/Asia/Ashgabat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ashgabat -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ashgabat +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ashgabat BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Ashkhabad.ics b/zoneinfo/Asia/Ashkhabad.ics index 4c378f14..82b3a799 100644 --- a/zoneinfo/Asia/Ashkhabad.ics +++ b/zoneinfo/Asia/Ashkhabad.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ashgabat -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ashgabat +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ashgabat BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Atyrau.ics b/zoneinfo/Asia/Atyrau.ics index 9b7e7a61..7b05d9e4 100644 --- a/zoneinfo/Asia/Atyrau.ics +++ b/zoneinfo/Asia/Atyrau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Atyrau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Atyrau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Atyrau BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Baghdad.ics b/zoneinfo/Asia/Baghdad.ics index 88dce613..30c84e4b 100644 --- a/zoneinfo/Asia/Baghdad.ics +++ b/zoneinfo/Asia/Baghdad.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Baghdad -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Baghdad +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Baghdad BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Bahrain.ics b/zoneinfo/Asia/Bahrain.ics index 1bc4082b..38144386 100644 --- a/zoneinfo/Asia/Bahrain.ics +++ b/zoneinfo/Asia/Bahrain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Qatar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Qatar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Qatar BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Baku.ics b/zoneinfo/Asia/Baku.ics index 454d643d..56f3d14d 100644 --- a/zoneinfo/Asia/Baku.ics +++ b/zoneinfo/Asia/Baku.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Baku -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Baku +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Baku BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Bangkok.ics b/zoneinfo/Asia/Bangkok.ics index a2da49b8..2fbf4b07 100644 --- a/zoneinfo/Asia/Bangkok.ics +++ b/zoneinfo/Asia/Bangkok.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Bangkok -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Bangkok +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Barnaul.ics b/zoneinfo/Asia/Barnaul.ics index c1311ae6..c4c58d78 100644 --- a/zoneinfo/Asia/Barnaul.ics +++ b/zoneinfo/Asia/Barnaul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Barnaul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Barnaul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Barnaul BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Beirut.ics b/zoneinfo/Asia/Beirut.ics index aa4aed1c..8395923c 100644 --- a/zoneinfo/Asia/Beirut.ics +++ b/zoneinfo/Asia/Beirut.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Beirut -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Beirut +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Beirut BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Asia/Bishkek.ics b/zoneinfo/Asia/Bishkek.ics index 085420af..ebcedea3 100644 --- a/zoneinfo/Asia/Bishkek.ics +++ b/zoneinfo/Asia/Bishkek.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Bishkek -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Bishkek +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Bishkek BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Brunei.ics b/zoneinfo/Asia/Brunei.ics index f0e9d303..58c1f397 100644 --- a/zoneinfo/Asia/Brunei.ics +++ b/zoneinfo/Asia/Brunei.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Brunei -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Brunei +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Brunei BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Calcutta.ics b/zoneinfo/Asia/Calcutta.ics index 75e96821..c7a9b1ed 100644 --- a/zoneinfo/Asia/Calcutta.ics +++ b/zoneinfo/Asia/Calcutta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kolkata -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kolkata +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kolkata BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Asia/Chita.ics b/zoneinfo/Asia/Chita.ics index a8515175..3e7dd00b 100644 --- a/zoneinfo/Asia/Chita.ics +++ b/zoneinfo/Asia/Chita.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Chita -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Chita +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Chita BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Choibalsan.ics b/zoneinfo/Asia/Choibalsan.ics index 470c0397..e82b6534 100644 --- a/zoneinfo/Asia/Choibalsan.ics +++ b/zoneinfo/Asia/Choibalsan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Choibalsan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Choibalsan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Choibalsan BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Chongqing.ics b/zoneinfo/Asia/Chongqing.ics index fb552ce7..6ef4af39 100644 --- a/zoneinfo/Asia/Chongqing.ics +++ b/zoneinfo/Asia/Chongqing.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Shanghai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Shanghai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Chungking.ics b/zoneinfo/Asia/Chungking.ics index fb552ce7..6ef4af39 100644 --- a/zoneinfo/Asia/Chungking.ics +++ b/zoneinfo/Asia/Chungking.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Shanghai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Shanghai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Colombo.ics b/zoneinfo/Asia/Colombo.ics index 8ecd9b4c..d181d7c7 100644 --- a/zoneinfo/Asia/Colombo.ics +++ b/zoneinfo/Asia/Colombo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Colombo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Colombo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Colombo BEGIN:STANDARD TZNAME:+0530 diff --git a/zoneinfo/Asia/Dacca.ics b/zoneinfo/Asia/Dacca.ics index 899b48d4..427b99bb 100644 --- a/zoneinfo/Asia/Dacca.ics +++ b/zoneinfo/Asia/Dacca.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Dhaka -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Dhaka +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Dhaka BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Damascus.ics b/zoneinfo/Asia/Damascus.ics index 75d601c5..c09d7db3 100644 --- a/zoneinfo/Asia/Damascus.ics +++ b/zoneinfo/Asia/Damascus.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Damascus -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Damascus +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Damascus BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Asia/Dhaka.ics b/zoneinfo/Asia/Dhaka.ics index 899b48d4..427b99bb 100644 --- a/zoneinfo/Asia/Dhaka.ics +++ b/zoneinfo/Asia/Dhaka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Dhaka -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Dhaka +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Dhaka BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Dili.ics b/zoneinfo/Asia/Dili.ics index 0ff60c4c..219df590 100644 --- a/zoneinfo/Asia/Dili.ics +++ b/zoneinfo/Asia/Dili.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Dili -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Dili +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Dili BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Dubai.ics b/zoneinfo/Asia/Dubai.ics index da7a0a10..ff025bd8 100644 --- a/zoneinfo/Asia/Dubai.ics +++ b/zoneinfo/Asia/Dubai.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Dubai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Dubai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Dubai BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Dushanbe.ics b/zoneinfo/Asia/Dushanbe.ics index 56ee07a8..78f38045 100644 --- a/zoneinfo/Asia/Dushanbe.ics +++ b/zoneinfo/Asia/Dushanbe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Dushanbe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Dushanbe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Dushanbe BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Famagusta.ics b/zoneinfo/Asia/Famagusta.ics index c321efc1..990a6b78 100644 --- a/zoneinfo/Asia/Famagusta.ics +++ b/zoneinfo/Asia/Famagusta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Famagusta -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Famagusta +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Famagusta BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Asia/Gaza.ics b/zoneinfo/Asia/Gaza.ics index 471ef59b..4949a4d5 100644 --- a/zoneinfo/Asia/Gaza.ics +++ b/zoneinfo/Asia/Gaza.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Gaza -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Gaza +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Gaza BEGIN:DAYLIGHT TZNAME:EEST @@ -16,8 +16,8 @@ BEGIN:STANDARD TZNAME:EET TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -DTSTART:19701024T010000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA +DTSTART:19701030T010000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR END:STANDARD END:VTIMEZONE END:VCALENDAR diff --git a/zoneinfo/Asia/Harbin.ics b/zoneinfo/Asia/Harbin.ics index fb552ce7..6ef4af39 100644 --- a/zoneinfo/Asia/Harbin.ics +++ b/zoneinfo/Asia/Harbin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Shanghai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Shanghai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Hebron.ics b/zoneinfo/Asia/Hebron.ics index 1cedf7eb..3774294f 100644 --- a/zoneinfo/Asia/Hebron.ics +++ b/zoneinfo/Asia/Hebron.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Hebron -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Hebron +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Hebron BEGIN:DAYLIGHT TZNAME:EEST @@ -16,8 +16,8 @@ BEGIN:STANDARD TZNAME:EET TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -DTSTART:19701024T010000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA +DTSTART:19701030T010000 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1FR END:STANDARD END:VTIMEZONE END:VCALENDAR diff --git a/zoneinfo/Asia/Ho_Chi_Minh.ics b/zoneinfo/Asia/Ho_Chi_Minh.ics index c9e6c7ed..4ddfc2aa 100644 --- a/zoneinfo/Asia/Ho_Chi_Minh.ics +++ b/zoneinfo/Asia/Ho_Chi_Minh.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ho_Chi_Minh -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ho_Chi_Minh +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ho_Chi_Minh BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Hong_Kong.ics b/zoneinfo/Asia/Hong_Kong.ics index 79e66e86..3795c449 100644 --- a/zoneinfo/Asia/Hong_Kong.ics +++ b/zoneinfo/Asia/Hong_Kong.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Hong_Kong -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Hong_Kong +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Hong_Kong BEGIN:STANDARD TZNAME:HKT diff --git a/zoneinfo/Asia/Hovd.ics b/zoneinfo/Asia/Hovd.ics index 2d7533de..1774d0ac 100644 --- a/zoneinfo/Asia/Hovd.ics +++ b/zoneinfo/Asia/Hovd.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Hovd -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Hovd +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Hovd BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Irkutsk.ics b/zoneinfo/Asia/Irkutsk.ics index 9f00186f..6b78b395 100644 --- a/zoneinfo/Asia/Irkutsk.ics +++ b/zoneinfo/Asia/Irkutsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Irkutsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Irkutsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Irkutsk BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Istanbul.ics b/zoneinfo/Asia/Istanbul.ics index 19e3965d..8234cbbb 100644 --- a/zoneinfo/Asia/Istanbul.ics +++ b/zoneinfo/Asia/Istanbul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Istanbul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Istanbul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Jakarta.ics b/zoneinfo/Asia/Jakarta.ics index 102e0d45..b9c16aa3 100644 --- a/zoneinfo/Asia/Jakarta.ics +++ b/zoneinfo/Asia/Jakarta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Jakarta -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Jakarta +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Jakarta BEGIN:STANDARD TZNAME:WIB diff --git a/zoneinfo/Asia/Jayapura.ics b/zoneinfo/Asia/Jayapura.ics index fe25d9f9..158e2cd3 100644 --- a/zoneinfo/Asia/Jayapura.ics +++ b/zoneinfo/Asia/Jayapura.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Jayapura -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Jayapura +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Jayapura BEGIN:STANDARD TZNAME:WIT diff --git a/zoneinfo/Asia/Jerusalem.ics b/zoneinfo/Asia/Jerusalem.ics index 68e86813..00e44fca 100644 --- a/zoneinfo/Asia/Jerusalem.ics +++ b/zoneinfo/Asia/Jerusalem.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Jerusalem -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Jerusalem +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZNAME:IDT diff --git a/zoneinfo/Asia/Kabul.ics b/zoneinfo/Asia/Kabul.ics index b81aa649..c369590f 100644 --- a/zoneinfo/Asia/Kabul.ics +++ b/zoneinfo/Asia/Kabul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kabul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kabul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kabul BEGIN:STANDARD TZNAME:+0430 diff --git a/zoneinfo/Asia/Kamchatka.ics b/zoneinfo/Asia/Kamchatka.ics index 8224ee57..37379528 100644 --- a/zoneinfo/Asia/Kamchatka.ics +++ b/zoneinfo/Asia/Kamchatka.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kamchatka -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kamchatka +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kamchatka BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Asia/Karachi.ics b/zoneinfo/Asia/Karachi.ics index 241fd589..98e635d6 100644 --- a/zoneinfo/Asia/Karachi.ics +++ b/zoneinfo/Asia/Karachi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Karachi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Karachi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Karachi BEGIN:STANDARD TZNAME:PKT diff --git a/zoneinfo/Asia/Kashgar.ics b/zoneinfo/Asia/Kashgar.ics index cfbb7ba0..b4cc8345 100644 --- a/zoneinfo/Asia/Kashgar.ics +++ b/zoneinfo/Asia/Kashgar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Urumqi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Urumqi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Urumqi BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Kathmandu.ics b/zoneinfo/Asia/Kathmandu.ics index 8faf1729..6d1fae8b 100644 --- a/zoneinfo/Asia/Kathmandu.ics +++ b/zoneinfo/Asia/Kathmandu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kathmandu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kathmandu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kathmandu BEGIN:STANDARD TZNAME:+0545 diff --git a/zoneinfo/Asia/Katmandu.ics b/zoneinfo/Asia/Katmandu.ics index 8faf1729..6d1fae8b 100644 --- a/zoneinfo/Asia/Katmandu.ics +++ b/zoneinfo/Asia/Katmandu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kathmandu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kathmandu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kathmandu BEGIN:STANDARD TZNAME:+0545 diff --git a/zoneinfo/Asia/Khandyga.ics b/zoneinfo/Asia/Khandyga.ics index 2a133310..73db90ae 100644 --- a/zoneinfo/Asia/Khandyga.ics +++ b/zoneinfo/Asia/Khandyga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Khandyga -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Khandyga +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Khandyga BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Kolkata.ics b/zoneinfo/Asia/Kolkata.ics index 75e96821..c7a9b1ed 100644 --- a/zoneinfo/Asia/Kolkata.ics +++ b/zoneinfo/Asia/Kolkata.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kolkata -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kolkata +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kolkata BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Asia/Krasnoyarsk.ics b/zoneinfo/Asia/Krasnoyarsk.ics index 80ea6992..b01da79f 100644 --- a/zoneinfo/Asia/Krasnoyarsk.ics +++ b/zoneinfo/Asia/Krasnoyarsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Krasnoyarsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Krasnoyarsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Krasnoyarsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Kuala_Lumpur.ics b/zoneinfo/Asia/Kuala_Lumpur.ics index d98deca8..e3aa0375 100644 --- a/zoneinfo/Asia/Kuala_Lumpur.ics +++ b/zoneinfo/Asia/Kuala_Lumpur.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kuala_Lumpur -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kuala_Lumpur +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kuala_Lumpur BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Kuching.ics b/zoneinfo/Asia/Kuching.ics index 0812afb9..6820ddb2 100644 --- a/zoneinfo/Asia/Kuching.ics +++ b/zoneinfo/Asia/Kuching.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Kuching -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Kuching +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Kuching BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Kuwait.ics b/zoneinfo/Asia/Kuwait.ics index 6c7fd19a..748c16c4 100644 --- a/zoneinfo/Asia/Kuwait.ics +++ b/zoneinfo/Asia/Kuwait.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Riyadh -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Riyadh +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Macao.ics b/zoneinfo/Asia/Macao.ics index 4fafaa79..a8fb7881 100644 --- a/zoneinfo/Asia/Macao.ics +++ b/zoneinfo/Asia/Macao.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Macau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Macau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Macau BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Macau.ics b/zoneinfo/Asia/Macau.ics index 4fafaa79..a8fb7881 100644 --- a/zoneinfo/Asia/Macau.ics +++ b/zoneinfo/Asia/Macau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Macau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Macau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Macau BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Magadan.ics b/zoneinfo/Asia/Magadan.ics index 640ff43e..f5d4390a 100644 --- a/zoneinfo/Asia/Magadan.ics +++ b/zoneinfo/Asia/Magadan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Magadan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Magadan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Magadan BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Asia/Makassar.ics b/zoneinfo/Asia/Makassar.ics index ff1b7508..d1f08056 100644 --- a/zoneinfo/Asia/Makassar.ics +++ b/zoneinfo/Asia/Makassar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Makassar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Makassar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Makassar BEGIN:STANDARD TZNAME:WITA diff --git a/zoneinfo/Asia/Manila.ics b/zoneinfo/Asia/Manila.ics index 467436b5..bec4f556 100644 --- a/zoneinfo/Asia/Manila.ics +++ b/zoneinfo/Asia/Manila.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Manila -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Manila +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Manila BEGIN:STANDARD TZNAME:PST diff --git a/zoneinfo/Asia/Muscat.ics b/zoneinfo/Asia/Muscat.ics index da7a0a10..ff025bd8 100644 --- a/zoneinfo/Asia/Muscat.ics +++ b/zoneinfo/Asia/Muscat.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Dubai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Dubai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Dubai BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Nicosia.ics b/zoneinfo/Asia/Nicosia.ics index 8ed99e7e..f34f04f7 100644 --- a/zoneinfo/Asia/Nicosia.ics +++ b/zoneinfo/Asia/Nicosia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Nicosia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Nicosia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Nicosia BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Asia/Novokuznetsk.ics b/zoneinfo/Asia/Novokuznetsk.ics index 985a9e44..44c17588 100644 --- a/zoneinfo/Asia/Novokuznetsk.ics +++ b/zoneinfo/Asia/Novokuznetsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Novokuznetsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Novokuznetsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Novokuznetsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Novosibirsk.ics b/zoneinfo/Asia/Novosibirsk.ics index 18066895..c87ef1b6 100644 --- a/zoneinfo/Asia/Novosibirsk.ics +++ b/zoneinfo/Asia/Novosibirsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Novosibirsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Novosibirsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Novosibirsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Omsk.ics b/zoneinfo/Asia/Omsk.ics index d7c52cbb..9b6dec15 100644 --- a/zoneinfo/Asia/Omsk.ics +++ b/zoneinfo/Asia/Omsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Omsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Omsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Omsk BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Oral.ics b/zoneinfo/Asia/Oral.ics index 70ffa56a..33b5e3e4 100644 --- a/zoneinfo/Asia/Oral.ics +++ b/zoneinfo/Asia/Oral.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Oral -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Oral +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Oral BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Phnom_Penh.ics b/zoneinfo/Asia/Phnom_Penh.ics index a2da49b8..2fbf4b07 100644 --- a/zoneinfo/Asia/Phnom_Penh.ics +++ b/zoneinfo/Asia/Phnom_Penh.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Bangkok -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Bangkok +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Pontianak.ics b/zoneinfo/Asia/Pontianak.ics index 68407db7..3e6de70b 100644 --- a/zoneinfo/Asia/Pontianak.ics +++ b/zoneinfo/Asia/Pontianak.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Pontianak -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Pontianak +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Pontianak BEGIN:STANDARD TZNAME:WIB diff --git a/zoneinfo/Asia/Pyongyang.ics b/zoneinfo/Asia/Pyongyang.ics index 9555cccd..410ed9a1 100644 --- a/zoneinfo/Asia/Pyongyang.ics +++ b/zoneinfo/Asia/Pyongyang.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Pyongyang -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Pyongyang +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Pyongyang BEGIN:STANDARD TZNAME:KST diff --git a/zoneinfo/Asia/Qatar.ics b/zoneinfo/Asia/Qatar.ics index 1bc4082b..38144386 100644 --- a/zoneinfo/Asia/Qatar.ics +++ b/zoneinfo/Asia/Qatar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Qatar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Qatar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Qatar BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Qostanay.ics b/zoneinfo/Asia/Qostanay.ics index 5f940c3b..84e1d33d 100644 --- a/zoneinfo/Asia/Qostanay.ics +++ b/zoneinfo/Asia/Qostanay.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Qostanay -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Qostanay +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Qostanay BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Qyzylorda.ics b/zoneinfo/Asia/Qyzylorda.ics index aa2e3f33..c439c070 100644 --- a/zoneinfo/Asia/Qyzylorda.ics +++ b/zoneinfo/Asia/Qyzylorda.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Qyzylorda -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Qyzylorda +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Qyzylorda BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Rangoon.ics b/zoneinfo/Asia/Rangoon.ics index a7e050d3..c0b7dd1f 100644 --- a/zoneinfo/Asia/Rangoon.ics +++ b/zoneinfo/Asia/Rangoon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Yangon -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Yangon +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Yangon BEGIN:STANDARD TZNAME:+0630 diff --git a/zoneinfo/Asia/Riyadh.ics b/zoneinfo/Asia/Riyadh.ics index 6c7fd19a..748c16c4 100644 --- a/zoneinfo/Asia/Riyadh.ics +++ b/zoneinfo/Asia/Riyadh.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Riyadh -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Riyadh +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Riyadh BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Asia/Saigon.ics b/zoneinfo/Asia/Saigon.ics index c9e6c7ed..4ddfc2aa 100644 --- a/zoneinfo/Asia/Saigon.ics +++ b/zoneinfo/Asia/Saigon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ho_Chi_Minh -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ho_Chi_Minh +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ho_Chi_Minh BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Sakhalin.ics b/zoneinfo/Asia/Sakhalin.ics index e9a3399f..c9bd39d1 100644 --- a/zoneinfo/Asia/Sakhalin.ics +++ b/zoneinfo/Asia/Sakhalin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Sakhalin -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Sakhalin +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Sakhalin BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Asia/Samarkand.ics b/zoneinfo/Asia/Samarkand.ics index ddb440d2..ccbaafcf 100644 --- a/zoneinfo/Asia/Samarkand.ics +++ b/zoneinfo/Asia/Samarkand.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Samarkand -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Samarkand +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Samarkand BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Seoul.ics b/zoneinfo/Asia/Seoul.ics index c8a576a1..746d0209 100644 --- a/zoneinfo/Asia/Seoul.ics +++ b/zoneinfo/Asia/Seoul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Seoul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Seoul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Seoul BEGIN:STANDARD TZNAME:KST diff --git a/zoneinfo/Asia/Shanghai.ics b/zoneinfo/Asia/Shanghai.ics index fb552ce7..6ef4af39 100644 --- a/zoneinfo/Asia/Shanghai.ics +++ b/zoneinfo/Asia/Shanghai.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Shanghai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Shanghai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Singapore.ics b/zoneinfo/Asia/Singapore.ics index 90ada0f4..00e23374 100644 --- a/zoneinfo/Asia/Singapore.ics +++ b/zoneinfo/Asia/Singapore.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Singapore -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Singapore +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Singapore BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Srednekolymsk.ics b/zoneinfo/Asia/Srednekolymsk.ics index 6f9f85af..9316be26 100644 --- a/zoneinfo/Asia/Srednekolymsk.ics +++ b/zoneinfo/Asia/Srednekolymsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Srednekolymsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Srednekolymsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Srednekolymsk BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Asia/Taipei.ics b/zoneinfo/Asia/Taipei.ics index cbf247a1..d836d436 100644 --- a/zoneinfo/Asia/Taipei.ics +++ b/zoneinfo/Asia/Taipei.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Taipei -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Taipei +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Taipei BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Asia/Tashkent.ics b/zoneinfo/Asia/Tashkent.ics index 550a1775..e2863a72 100644 --- a/zoneinfo/Asia/Tashkent.ics +++ b/zoneinfo/Asia/Tashkent.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tashkent -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tashkent +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tashkent BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Tbilisi.ics b/zoneinfo/Asia/Tbilisi.ics index f2104bf4..3b5d40df 100644 --- a/zoneinfo/Asia/Tbilisi.ics +++ b/zoneinfo/Asia/Tbilisi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tbilisi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tbilisi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tbilisi BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Asia/Tehran.ics b/zoneinfo/Asia/Tehran.ics index 9e2d4fb1..cfbab1fe 100644 --- a/zoneinfo/Asia/Tehran.ics +++ b/zoneinfo/Asia/Tehran.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tehran -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tehran +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tehran BEGIN:DAYLIGHT TZNAME:+0430 diff --git a/zoneinfo/Asia/Tel_Aviv.ics b/zoneinfo/Asia/Tel_Aviv.ics index 68e86813..00e44fca 100644 --- a/zoneinfo/Asia/Tel_Aviv.ics +++ b/zoneinfo/Asia/Tel_Aviv.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Jerusalem -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Jerusalem +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZNAME:IDT diff --git a/zoneinfo/Asia/Thimbu.ics b/zoneinfo/Asia/Thimbu.ics index 42169547..84dcec80 100644 --- a/zoneinfo/Asia/Thimbu.ics +++ b/zoneinfo/Asia/Thimbu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Thimphu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Thimphu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Thimphu BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Thimphu.ics b/zoneinfo/Asia/Thimphu.ics index 42169547..84dcec80 100644 --- a/zoneinfo/Asia/Thimphu.ics +++ b/zoneinfo/Asia/Thimphu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Thimphu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Thimphu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Thimphu BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Tokyo.ics b/zoneinfo/Asia/Tokyo.ics index 397e64aa..5c0806fc 100644 --- a/zoneinfo/Asia/Tokyo.ics +++ b/zoneinfo/Asia/Tokyo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tokyo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tokyo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tokyo BEGIN:STANDARD TZNAME:JST diff --git a/zoneinfo/Asia/Tomsk.ics b/zoneinfo/Asia/Tomsk.ics index 329981cb..22088c82 100644 --- a/zoneinfo/Asia/Tomsk.ics +++ b/zoneinfo/Asia/Tomsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tomsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tomsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tomsk BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Ujung_Pandang.ics b/zoneinfo/Asia/Ujung_Pandang.ics index ff1b7508..d1f08056 100644 --- a/zoneinfo/Asia/Ujung_Pandang.ics +++ b/zoneinfo/Asia/Ujung_Pandang.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Makassar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Makassar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Makassar BEGIN:STANDARD TZNAME:WITA diff --git a/zoneinfo/Asia/Ulaanbaatar.ics b/zoneinfo/Asia/Ulaanbaatar.ics index c4c578e3..dae691b4 100644 --- a/zoneinfo/Asia/Ulaanbaatar.ics +++ b/zoneinfo/Asia/Ulaanbaatar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ulaanbaatar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ulaanbaatar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ulaanbaatar BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Ulan_Bator.ics b/zoneinfo/Asia/Ulan_Bator.ics index c4c578e3..dae691b4 100644 --- a/zoneinfo/Asia/Ulan_Bator.ics +++ b/zoneinfo/Asia/Ulan_Bator.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ulaanbaatar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ulaanbaatar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ulaanbaatar BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Asia/Urumqi.ics b/zoneinfo/Asia/Urumqi.ics index cfbb7ba0..b4cc8345 100644 --- a/zoneinfo/Asia/Urumqi.ics +++ b/zoneinfo/Asia/Urumqi.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Urumqi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Urumqi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Urumqi BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Asia/Ust-Nera.ics b/zoneinfo/Asia/Ust-Nera.ics index af0f1fdf..68feda78 100644 --- a/zoneinfo/Asia/Ust-Nera.ics +++ b/zoneinfo/Asia/Ust-Nera.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Ust-Nera -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Ust-Nera +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Ust-Nera BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Asia/Vientiane.ics b/zoneinfo/Asia/Vientiane.ics index a2da49b8..2fbf4b07 100644 --- a/zoneinfo/Asia/Vientiane.ics +++ b/zoneinfo/Asia/Vientiane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Bangkok -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Bangkok +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Bangkok BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Asia/Vladivostok.ics b/zoneinfo/Asia/Vladivostok.ics index 1cd6167d..5e8be04c 100644 --- a/zoneinfo/Asia/Vladivostok.ics +++ b/zoneinfo/Asia/Vladivostok.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Vladivostok -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Vladivostok +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Vladivostok BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Asia/Yakutsk.ics b/zoneinfo/Asia/Yakutsk.ics index db4a6871..6ebd9bc8 100644 --- a/zoneinfo/Asia/Yakutsk.ics +++ b/zoneinfo/Asia/Yakutsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Yakutsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Yakutsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Yakutsk BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Asia/Yangon.ics b/zoneinfo/Asia/Yangon.ics index a7e050d3..c0b7dd1f 100644 --- a/zoneinfo/Asia/Yangon.ics +++ b/zoneinfo/Asia/Yangon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Yangon -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Yangon +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Yangon BEGIN:STANDARD TZNAME:+0630 diff --git a/zoneinfo/Asia/Yekaterinburg.ics b/zoneinfo/Asia/Yekaterinburg.ics index e6900187..ffcfb18a 100644 --- a/zoneinfo/Asia/Yekaterinburg.ics +++ b/zoneinfo/Asia/Yekaterinburg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Yekaterinburg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Yekaterinburg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Yekaterinburg BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Asia/Yerevan.ics b/zoneinfo/Asia/Yerevan.ics index 94694464..ed5f0771 100644 --- a/zoneinfo/Asia/Yerevan.ics +++ b/zoneinfo/Asia/Yerevan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Yerevan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Yerevan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Yerevan BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Atlantic/Azores.ics b/zoneinfo/Atlantic/Azores.ics index 148ab7ae..2ff68097 100644 --- a/zoneinfo/Atlantic/Azores.ics +++ b/zoneinfo/Atlantic/Azores.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Azores -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Azores +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Azores BEGIN:DAYLIGHT TZNAME:+00 diff --git a/zoneinfo/Atlantic/Bermuda.ics b/zoneinfo/Atlantic/Bermuda.ics index 16d7eced..3b2e62fc 100644 --- a/zoneinfo/Atlantic/Bermuda.ics +++ b/zoneinfo/Atlantic/Bermuda.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Bermuda -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Bermuda +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Bermuda BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/Atlantic/Canary.ics b/zoneinfo/Atlantic/Canary.ics index 0df7e9ef..fbeebdb6 100644 --- a/zoneinfo/Atlantic/Canary.ics +++ b/zoneinfo/Atlantic/Canary.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Canary -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Canary +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Canary BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Cape_Verde.ics b/zoneinfo/Atlantic/Cape_Verde.ics index 5af5f23a..91ed2d73 100644 --- a/zoneinfo/Atlantic/Cape_Verde.ics +++ b/zoneinfo/Atlantic/Cape_Verde.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Cape_Verde -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Cape_Verde +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Cape_Verde BEGIN:STANDARD TZNAME:-01 diff --git a/zoneinfo/Atlantic/Faeroe.ics b/zoneinfo/Atlantic/Faeroe.ics index ed3b8189..987b3a1b 100644 --- a/zoneinfo/Atlantic/Faeroe.ics +++ b/zoneinfo/Atlantic/Faeroe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Faroe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Faroe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Faroe BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Faroe.ics b/zoneinfo/Atlantic/Faroe.ics index ed3b8189..987b3a1b 100644 --- a/zoneinfo/Atlantic/Faroe.ics +++ b/zoneinfo/Atlantic/Faroe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Faroe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Faroe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Faroe BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Jan_Mayen.ics b/zoneinfo/Atlantic/Jan_Mayen.ics index 9f8f9a19..8274486e 100644 --- a/zoneinfo/Atlantic/Jan_Mayen.ics +++ b/zoneinfo/Atlantic/Jan_Mayen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Oslo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Oslo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Atlantic/Madeira.ics b/zoneinfo/Atlantic/Madeira.ics index 0d012e1b..ec2b75ba 100644 --- a/zoneinfo/Atlantic/Madeira.ics +++ b/zoneinfo/Atlantic/Madeira.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Madeira -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Madeira +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Madeira BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Atlantic/Reykjavik.ics b/zoneinfo/Atlantic/Reykjavik.ics index 83bd2607..56942646 100644 --- a/zoneinfo/Atlantic/Reykjavik.ics +++ b/zoneinfo/Atlantic/Reykjavik.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Reykjavik -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Reykjavik +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Reykjavik BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Atlantic/South_Georgia.ics b/zoneinfo/Atlantic/South_Georgia.ics index 44e8d11b..9a15b0e6 100644 --- a/zoneinfo/Atlantic/South_Georgia.ics +++ b/zoneinfo/Atlantic/South_Georgia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/South_Georgia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/South_Georgia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/South_Georgia BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/Atlantic/St_Helena.ics b/zoneinfo/Atlantic/St_Helena.ics index 5abec10b..d7fc42c8 100644 --- a/zoneinfo/Atlantic/St_Helena.ics +++ b/zoneinfo/Atlantic/St_Helena.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Abidjan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Abidjan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Abidjan BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Atlantic/Stanley.ics b/zoneinfo/Atlantic/Stanley.ics index 7d988bf7..d2fd1af3 100644 --- a/zoneinfo/Atlantic/Stanley.ics +++ b/zoneinfo/Atlantic/Stanley.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Stanley -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Stanley +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Stanley BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Australia/ACT.ics b/zoneinfo/Australia/ACT.ics index 70cee47a..b5aa558d 100644 --- a/zoneinfo/Australia/ACT.ics +++ b/zoneinfo/Australia/ACT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Sydney -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Sydney +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Adelaide.ics b/zoneinfo/Australia/Adelaide.ics index 806bbd7e..db12ad50 100644 --- a/zoneinfo/Australia/Adelaide.ics +++ b/zoneinfo/Australia/Adelaide.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Adelaide -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Adelaide +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Adelaide BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Brisbane.ics b/zoneinfo/Australia/Brisbane.ics index 1414af10..42e12f3e 100644 --- a/zoneinfo/Australia/Brisbane.ics +++ b/zoneinfo/Australia/Brisbane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Brisbane -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Brisbane +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Brisbane BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Broken_Hill.ics b/zoneinfo/Australia/Broken_Hill.ics index 8811e3ef..8732e248 100644 --- a/zoneinfo/Australia/Broken_Hill.ics +++ b/zoneinfo/Australia/Broken_Hill.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Broken_Hill -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Broken_Hill +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Broken_Hill BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Canberra.ics b/zoneinfo/Australia/Canberra.ics index 70cee47a..b5aa558d 100644 --- a/zoneinfo/Australia/Canberra.ics +++ b/zoneinfo/Australia/Canberra.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Sydney -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Sydney +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Currie.ics b/zoneinfo/Australia/Currie.ics index 96740123..6b64add8 100644 --- a/zoneinfo/Australia/Currie.ics +++ b/zoneinfo/Australia/Currie.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Hobart -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Hobart +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZNAME:AEDT diff --git a/zoneinfo/Australia/Darwin.ics b/zoneinfo/Australia/Darwin.ics index da50b89d..9e277146 100644 --- a/zoneinfo/Australia/Darwin.ics +++ b/zoneinfo/Australia/Darwin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Darwin -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Darwin +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Darwin BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Eucla.ics b/zoneinfo/Australia/Eucla.ics index d8934648..6522fe43 100644 --- a/zoneinfo/Australia/Eucla.ics +++ b/zoneinfo/Australia/Eucla.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Eucla -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Eucla +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Eucla BEGIN:STANDARD TZNAME:+0845 diff --git a/zoneinfo/Australia/Hobart.ics b/zoneinfo/Australia/Hobart.ics index 96740123..6b64add8 100644 --- a/zoneinfo/Australia/Hobart.ics +++ b/zoneinfo/Australia/Hobart.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Hobart -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Hobart +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZNAME:AEDT diff --git a/zoneinfo/Australia/LHI.ics b/zoneinfo/Australia/LHI.ics index 67ebbac6..774c8433 100644 --- a/zoneinfo/Australia/LHI.ics +++ b/zoneinfo/Australia/LHI.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Lord_Howe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Lord_Howe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Lord_Howe BEGIN:STANDARD TZNAME:+1030 diff --git a/zoneinfo/Australia/Lindeman.ics b/zoneinfo/Australia/Lindeman.ics index d63257da..bf8a3d64 100644 --- a/zoneinfo/Australia/Lindeman.ics +++ b/zoneinfo/Australia/Lindeman.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Lindeman -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Lindeman +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Lindeman BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Lord_Howe.ics b/zoneinfo/Australia/Lord_Howe.ics index 67ebbac6..774c8433 100644 --- a/zoneinfo/Australia/Lord_Howe.ics +++ b/zoneinfo/Australia/Lord_Howe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Lord_Howe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Lord_Howe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Lord_Howe BEGIN:STANDARD TZNAME:+1030 diff --git a/zoneinfo/Australia/Melbourne.ics b/zoneinfo/Australia/Melbourne.ics index 5633a18a..74473748 100644 --- a/zoneinfo/Australia/Melbourne.ics +++ b/zoneinfo/Australia/Melbourne.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Melbourne -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Melbourne +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Melbourne BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/NSW.ics b/zoneinfo/Australia/NSW.ics index 70cee47a..b5aa558d 100644 --- a/zoneinfo/Australia/NSW.ics +++ b/zoneinfo/Australia/NSW.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Sydney -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Sydney +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/North.ics b/zoneinfo/Australia/North.ics index da50b89d..9e277146 100644 --- a/zoneinfo/Australia/North.ics +++ b/zoneinfo/Australia/North.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Darwin -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Darwin +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Darwin BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Perth.ics b/zoneinfo/Australia/Perth.ics index e5363ac5..7c9d9eee 100644 --- a/zoneinfo/Australia/Perth.ics +++ b/zoneinfo/Australia/Perth.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Perth -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Perth +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Perth BEGIN:STANDARD TZNAME:AWST diff --git a/zoneinfo/Australia/Queensland.ics b/zoneinfo/Australia/Queensland.ics index 1414af10..42e12f3e 100644 --- a/zoneinfo/Australia/Queensland.ics +++ b/zoneinfo/Australia/Queensland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Brisbane -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Brisbane +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Brisbane BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/South.ics b/zoneinfo/Australia/South.ics index 806bbd7e..db12ad50 100644 --- a/zoneinfo/Australia/South.ics +++ b/zoneinfo/Australia/South.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Adelaide -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Adelaide +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Adelaide BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Australia/Sydney.ics b/zoneinfo/Australia/Sydney.ics index 70cee47a..b5aa558d 100644 --- a/zoneinfo/Australia/Sydney.ics +++ b/zoneinfo/Australia/Sydney.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Sydney -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Sydney +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Sydney BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/Tasmania.ics b/zoneinfo/Australia/Tasmania.ics index 96740123..6b64add8 100644 --- a/zoneinfo/Australia/Tasmania.ics +++ b/zoneinfo/Australia/Tasmania.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Hobart -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Hobart +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Hobart BEGIN:DAYLIGHT TZNAME:AEDT diff --git a/zoneinfo/Australia/Victoria.ics b/zoneinfo/Australia/Victoria.ics index 5633a18a..74473748 100644 --- a/zoneinfo/Australia/Victoria.ics +++ b/zoneinfo/Australia/Victoria.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Melbourne -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Melbourne +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Melbourne BEGIN:STANDARD TZNAME:AEST diff --git a/zoneinfo/Australia/West.ics b/zoneinfo/Australia/West.ics index e5363ac5..7c9d9eee 100644 --- a/zoneinfo/Australia/West.ics +++ b/zoneinfo/Australia/West.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Perth -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Perth +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Perth BEGIN:STANDARD TZNAME:AWST diff --git a/zoneinfo/Australia/Yancowinna.ics b/zoneinfo/Australia/Yancowinna.ics index 8811e3ef..8732e248 100644 --- a/zoneinfo/Australia/Yancowinna.ics +++ b/zoneinfo/Australia/Yancowinna.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Australia/Broken_Hill -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Australia/Broken_Hill +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Australia/Broken_Hill BEGIN:STANDARD TZNAME:ACST diff --git a/zoneinfo/Brazil/Acre.ics b/zoneinfo/Brazil/Acre.ics index 70e10b53..4b1798f8 100644 --- a/zoneinfo/Brazil/Acre.ics +++ b/zoneinfo/Brazil/Acre.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Rio_Branco -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Rio_Branco +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Rio_Branco BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/Brazil/DeNoronha.ics b/zoneinfo/Brazil/DeNoronha.ics index 20804163..e663fd80 100644 --- a/zoneinfo/Brazil/DeNoronha.ics +++ b/zoneinfo/Brazil/DeNoronha.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Noronha -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Noronha +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Noronha BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/Brazil/East.ics b/zoneinfo/Brazil/East.ics index 6c44e413..8ff52510 100644 --- a/zoneinfo/Brazil/East.ics +++ b/zoneinfo/Brazil/East.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Sao_Paulo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Sao_Paulo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Sao_Paulo BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Brazil/West.ics b/zoneinfo/Brazil/West.ics index 5ceb8664..3afb9f05 100644 --- a/zoneinfo/Brazil/West.ics +++ b/zoneinfo/Brazil/West.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Manaus -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Manaus +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Manaus BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/CET.ics b/zoneinfo/CET.ics index ec6c3128..a54f5581 100644 --- a/zoneinfo/CET.ics +++ b/zoneinfo/CET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/CET -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/CET +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:CET BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/CST6CDT.ics b/zoneinfo/CST6CDT.ics index 27d9ce4a..b6dd7417 100644 --- a/zoneinfo/CST6CDT.ics +++ b/zoneinfo/CST6CDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/CST6CDT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/CST6CDT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:CST6CDT BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/Canada/Atlantic.ics b/zoneinfo/Canada/Atlantic.ics index a16d5d69..f6933249 100644 --- a/zoneinfo/Canada/Atlantic.ics +++ b/zoneinfo/Canada/Atlantic.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Halifax -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Halifax +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Halifax BEGIN:DAYLIGHT TZNAME:ADT diff --git a/zoneinfo/Canada/Central.ics b/zoneinfo/Canada/Central.ics index 71bc0693..8dcd6087 100644 --- a/zoneinfo/Canada/Central.ics +++ b/zoneinfo/Canada/Central.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Winnipeg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Winnipeg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Winnipeg BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/Canada/Eastern.ics b/zoneinfo/Canada/Eastern.ics index 30761dab..811a6158 100644 --- a/zoneinfo/Canada/Eastern.ics +++ b/zoneinfo/Canada/Eastern.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Toronto -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Toronto +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Toronto BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/Canada/Mountain.ics b/zoneinfo/Canada/Mountain.ics index de34f330..7a06ce41 100644 --- a/zoneinfo/Canada/Mountain.ics +++ b/zoneinfo/Canada/Mountain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Edmonton -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Edmonton +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Edmonton BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Canada/Newfoundland.ics b/zoneinfo/Canada/Newfoundland.ics index 81921e8c..584f3300 100644 --- a/zoneinfo/Canada/Newfoundland.ics +++ b/zoneinfo/Canada/Newfoundland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/St_Johns -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/St_Johns +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/St_Johns BEGIN:STANDARD TZNAME:NST diff --git a/zoneinfo/Canada/Pacific.ics b/zoneinfo/Canada/Pacific.ics index 313e9353..d7a912c4 100644 --- a/zoneinfo/Canada/Pacific.ics +++ b/zoneinfo/Canada/Pacific.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Vancouver -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Vancouver +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Vancouver BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/Canada/Saskatchewan.ics b/zoneinfo/Canada/Saskatchewan.ics index 499a516c..b6b0b770 100644 --- a/zoneinfo/Canada/Saskatchewan.ics +++ b/zoneinfo/Canada/Saskatchewan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Regina -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Regina +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Regina BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/Canada/Yukon.ics b/zoneinfo/Canada/Yukon.ics index 6b0ee092..0e1383ce 100644 --- a/zoneinfo/Canada/Yukon.ics +++ b/zoneinfo/Canada/Yukon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Whitehorse -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Whitehorse +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Whitehorse BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/Chile/Continental.ics b/zoneinfo/Chile/Continental.ics index db805e2b..e96b1501 100644 --- a/zoneinfo/Chile/Continental.ics +++ b/zoneinfo/Chile/Continental.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Santiago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Santiago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Santiago BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/Chile/EasterIsland.ics b/zoneinfo/Chile/EasterIsland.ics index 5b3c6a95..d9a2f772 100644 --- a/zoneinfo/Chile/EasterIsland.ics +++ b/zoneinfo/Chile/EasterIsland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Easter -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Easter +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Easter BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Cuba.ics b/zoneinfo/Cuba.ics index 432da95e..edd18faa 100644 --- a/zoneinfo/Cuba.ics +++ b/zoneinfo/Cuba.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Havana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Havana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Havana BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/EET.ics b/zoneinfo/EET.ics index d28334df..7bc0484f 100644 --- a/zoneinfo/EET.ics +++ b/zoneinfo/EET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/EET -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/EET +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:EET BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/EST.ics b/zoneinfo/EST.ics index 8df9d40e..9abb4f03 100644 --- a/zoneinfo/EST.ics +++ b/zoneinfo/EST.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/EST -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/EST +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:EST BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/EST5EDT.ics b/zoneinfo/EST5EDT.ics index 255e0963..8a6e949a 100644 --- a/zoneinfo/EST5EDT.ics +++ b/zoneinfo/EST5EDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/EST5EDT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/EST5EDT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:EST5EDT BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/Egypt.ics b/zoneinfo/Egypt.ics index 3d8dee3d..6b5c8970 100644 --- a/zoneinfo/Egypt.ics +++ b/zoneinfo/Egypt.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Cairo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Cairo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Cairo BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Eire.ics b/zoneinfo/Eire.ics index 6f828f29..1c493edb 100644 --- a/zoneinfo/Eire.ics +++ b/zoneinfo/Eire.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Dublin -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Dublin +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Dublin BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Etc/GMT+0.ics b/zoneinfo/Etc/GMT+0.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/Etc/GMT+0.ics +++ b/zoneinfo/Etc/GMT+0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/GMT+1.ics b/zoneinfo/Etc/GMT+1.ics index d7833c33..3dc12927 100644 --- a/zoneinfo/Etc/GMT+1.ics +++ b/zoneinfo/Etc/GMT+1.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+1 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+1 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+1 BEGIN:STANDARD TZNAME:-01 diff --git a/zoneinfo/Etc/GMT+10.ics b/zoneinfo/Etc/GMT+10.ics index 9df07ee2..bfb5061a 100644 --- a/zoneinfo/Etc/GMT+10.ics +++ b/zoneinfo/Etc/GMT+10.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+10 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+10 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+10 BEGIN:STANDARD TZNAME:-10 diff --git a/zoneinfo/Etc/GMT+11.ics b/zoneinfo/Etc/GMT+11.ics index 68f01643..c661808f 100644 --- a/zoneinfo/Etc/GMT+11.ics +++ b/zoneinfo/Etc/GMT+11.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+11 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+11 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+11 BEGIN:STANDARD TZNAME:-11 diff --git a/zoneinfo/Etc/GMT+12.ics b/zoneinfo/Etc/GMT+12.ics index 17b0b2fe..67fd7f7e 100644 --- a/zoneinfo/Etc/GMT+12.ics +++ b/zoneinfo/Etc/GMT+12.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+12 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+12 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+12 BEGIN:STANDARD TZNAME:-12 diff --git a/zoneinfo/Etc/GMT+2.ics b/zoneinfo/Etc/GMT+2.ics index a02e6154..87a7e84f 100644 --- a/zoneinfo/Etc/GMT+2.ics +++ b/zoneinfo/Etc/GMT+2.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+2 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+2 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+2 BEGIN:STANDARD TZNAME:-02 diff --git a/zoneinfo/Etc/GMT+3.ics b/zoneinfo/Etc/GMT+3.ics index 5b158ddf..020bfabb 100644 --- a/zoneinfo/Etc/GMT+3.ics +++ b/zoneinfo/Etc/GMT+3.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+3 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+3 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+3 BEGIN:STANDARD TZNAME:-03 diff --git a/zoneinfo/Etc/GMT+4.ics b/zoneinfo/Etc/GMT+4.ics index 0f45133f..b78527c0 100644 --- a/zoneinfo/Etc/GMT+4.ics +++ b/zoneinfo/Etc/GMT+4.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+4 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+4 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+4 BEGIN:STANDARD TZNAME:-04 diff --git a/zoneinfo/Etc/GMT+5.ics b/zoneinfo/Etc/GMT+5.ics index d0498ce4..66864886 100644 --- a/zoneinfo/Etc/GMT+5.ics +++ b/zoneinfo/Etc/GMT+5.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+5 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+5 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+5 BEGIN:STANDARD TZNAME:-05 diff --git a/zoneinfo/Etc/GMT+6.ics b/zoneinfo/Etc/GMT+6.ics index 7b8ce597..786bc8e4 100644 --- a/zoneinfo/Etc/GMT+6.ics +++ b/zoneinfo/Etc/GMT+6.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+6 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+6 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+6 BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Etc/GMT+7.ics b/zoneinfo/Etc/GMT+7.ics index f9829484..4134d1e2 100644 --- a/zoneinfo/Etc/GMT+7.ics +++ b/zoneinfo/Etc/GMT+7.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+7 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+7 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+7 BEGIN:STANDARD TZNAME:-07 diff --git a/zoneinfo/Etc/GMT+8.ics b/zoneinfo/Etc/GMT+8.ics index eee9b172..f3814489 100644 --- a/zoneinfo/Etc/GMT+8.ics +++ b/zoneinfo/Etc/GMT+8.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+8 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+8 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+8 BEGIN:STANDARD TZNAME:-08 diff --git a/zoneinfo/Etc/GMT+9.ics b/zoneinfo/Etc/GMT+9.ics index 6074e97f..82966b25 100644 --- a/zoneinfo/Etc/GMT+9.ics +++ b/zoneinfo/Etc/GMT+9.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT+9 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT+9 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT+9 BEGIN:STANDARD TZNAME:-09 diff --git a/zoneinfo/Etc/GMT-0.ics b/zoneinfo/Etc/GMT-0.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/Etc/GMT-0.ics +++ b/zoneinfo/Etc/GMT-0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/GMT-1.ics b/zoneinfo/Etc/GMT-1.ics index a05027e8..8d89a6e0 100644 --- a/zoneinfo/Etc/GMT-1.ics +++ b/zoneinfo/Etc/GMT-1.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-1 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-1 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-1 BEGIN:STANDARD TZNAME:+01 diff --git a/zoneinfo/Etc/GMT-10.ics b/zoneinfo/Etc/GMT-10.ics index 397de111..d8293b84 100644 --- a/zoneinfo/Etc/GMT-10.ics +++ b/zoneinfo/Etc/GMT-10.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-10 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-10 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-10 BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Etc/GMT-11.ics b/zoneinfo/Etc/GMT-11.ics index 5184c655..e81cb420 100644 --- a/zoneinfo/Etc/GMT-11.ics +++ b/zoneinfo/Etc/GMT-11.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-11 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-11 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-11 BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Etc/GMT-12.ics b/zoneinfo/Etc/GMT-12.ics index 37db6bc2..3643bee7 100644 --- a/zoneinfo/Etc/GMT-12.ics +++ b/zoneinfo/Etc/GMT-12.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-12 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-12 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-12 BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Etc/GMT-13.ics b/zoneinfo/Etc/GMT-13.ics index acf164a5..4279355e 100644 --- a/zoneinfo/Etc/GMT-13.ics +++ b/zoneinfo/Etc/GMT-13.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-13 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-13 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-13 BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Etc/GMT-14.ics b/zoneinfo/Etc/GMT-14.ics index 4e49b3e9..38ecbbc1 100644 --- a/zoneinfo/Etc/GMT-14.ics +++ b/zoneinfo/Etc/GMT-14.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-14 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-14 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-14 BEGIN:STANDARD TZNAME:+14 diff --git a/zoneinfo/Etc/GMT-2.ics b/zoneinfo/Etc/GMT-2.ics index 17ec95a5..ec57e8b5 100644 --- a/zoneinfo/Etc/GMT-2.ics +++ b/zoneinfo/Etc/GMT-2.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-2 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-2 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-2 BEGIN:STANDARD TZNAME:+02 diff --git a/zoneinfo/Etc/GMT-3.ics b/zoneinfo/Etc/GMT-3.ics index 86d43c38..ac56ab83 100644 --- a/zoneinfo/Etc/GMT-3.ics +++ b/zoneinfo/Etc/GMT-3.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-3 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-3 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-3 BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Etc/GMT-4.ics b/zoneinfo/Etc/GMT-4.ics index c73be897..0720a178 100644 --- a/zoneinfo/Etc/GMT-4.ics +++ b/zoneinfo/Etc/GMT-4.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-4 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-4 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-4 BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Etc/GMT-5.ics b/zoneinfo/Etc/GMT-5.ics index 8ec69f7c..e15dcff0 100644 --- a/zoneinfo/Etc/GMT-5.ics +++ b/zoneinfo/Etc/GMT-5.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-5 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-5 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-5 BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Etc/GMT-6.ics b/zoneinfo/Etc/GMT-6.ics index f5e4d95a..57324bc5 100644 --- a/zoneinfo/Etc/GMT-6.ics +++ b/zoneinfo/Etc/GMT-6.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-6 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-6 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-6 BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Etc/GMT-7.ics b/zoneinfo/Etc/GMT-7.ics index 30139f8a..5e6b2bb6 100644 --- a/zoneinfo/Etc/GMT-7.ics +++ b/zoneinfo/Etc/GMT-7.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-7 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-7 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-7 BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Etc/GMT-8.ics b/zoneinfo/Etc/GMT-8.ics index 59fe0783..8042af1e 100644 --- a/zoneinfo/Etc/GMT-8.ics +++ b/zoneinfo/Etc/GMT-8.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-8 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-8 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-8 BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Etc/GMT-9.ics b/zoneinfo/Etc/GMT-9.ics index 1937ba1a..d4b7a77f 100644 --- a/zoneinfo/Etc/GMT-9.ics +++ b/zoneinfo/Etc/GMT-9.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT-9 -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT-9 +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT-9 BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Etc/GMT.ics b/zoneinfo/Etc/GMT.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/Etc/GMT.ics +++ b/zoneinfo/Etc/GMT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/GMT0.ics b/zoneinfo/Etc/GMT0.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/Etc/GMT0.ics +++ b/zoneinfo/Etc/GMT0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/Greenwich.ics b/zoneinfo/Etc/Greenwich.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/Etc/Greenwich.ics +++ b/zoneinfo/Etc/Greenwich.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Etc/UCT.ics b/zoneinfo/Etc/UCT.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/Etc/UCT.ics +++ b/zoneinfo/Etc/UCT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Etc/UTC.ics b/zoneinfo/Etc/UTC.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/Etc/UTC.ics +++ b/zoneinfo/Etc/UTC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Etc/Universal.ics b/zoneinfo/Etc/Universal.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/Etc/Universal.ics +++ b/zoneinfo/Etc/Universal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Etc/Zulu.ics b/zoneinfo/Etc/Zulu.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/Etc/Zulu.ics +++ b/zoneinfo/Etc/Zulu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Europe/Amsterdam.ics b/zoneinfo/Europe/Amsterdam.ics index 990cd196..6ba8e6c4 100644 --- a/zoneinfo/Europe/Amsterdam.ics +++ b/zoneinfo/Europe/Amsterdam.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Amsterdam -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Amsterdam +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Amsterdam BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Andorra.ics b/zoneinfo/Europe/Andorra.ics index f6b38144..c6a51627 100644 --- a/zoneinfo/Europe/Andorra.ics +++ b/zoneinfo/Europe/Andorra.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Andorra -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Andorra +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Andorra BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Astrakhan.ics b/zoneinfo/Europe/Astrakhan.ics index 574566e2..0e743e9f 100644 --- a/zoneinfo/Europe/Astrakhan.ics +++ b/zoneinfo/Europe/Astrakhan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Astrakhan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Astrakhan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Astrakhan BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/Athens.ics b/zoneinfo/Europe/Athens.ics index 3044379f..fac3860b 100644 --- a/zoneinfo/Europe/Athens.ics +++ b/zoneinfo/Europe/Athens.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Athens -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Athens +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Athens BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Belfast.ics b/zoneinfo/Europe/Belfast.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/Europe/Belfast.ics +++ b/zoneinfo/Europe/Belfast.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Belgrade.ics b/zoneinfo/Europe/Belgrade.ics index 4a7abf9a..0e522cb6 100644 --- a/zoneinfo/Europe/Belgrade.ics +++ b/zoneinfo/Europe/Belgrade.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Belgrade -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Belgrade +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Berlin.ics b/zoneinfo/Europe/Berlin.ics index 344a2c8c..44697092 100644 --- a/zoneinfo/Europe/Berlin.ics +++ b/zoneinfo/Europe/Berlin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Berlin -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Berlin +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Berlin BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Bratislava.ics b/zoneinfo/Europe/Bratislava.ics index b02461c9..ca590934 100644 --- a/zoneinfo/Europe/Bratislava.ics +++ b/zoneinfo/Europe/Bratislava.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Prague -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Prague +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Prague BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Brussels.ics b/zoneinfo/Europe/Brussels.ics index 98517524..149ddf21 100644 --- a/zoneinfo/Europe/Brussels.ics +++ b/zoneinfo/Europe/Brussels.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Brussels -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Brussels +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Brussels BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Bucharest.ics b/zoneinfo/Europe/Bucharest.ics index fc61d955..8ff4cb98 100644 --- a/zoneinfo/Europe/Bucharest.ics +++ b/zoneinfo/Europe/Bucharest.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Bucharest -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Bucharest +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Bucharest BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Budapest.ics b/zoneinfo/Europe/Budapest.ics index a8ed0140..67a69200 100644 --- a/zoneinfo/Europe/Budapest.ics +++ b/zoneinfo/Europe/Budapest.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Budapest -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Budapest +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Budapest BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Busingen.ics b/zoneinfo/Europe/Busingen.ics index 8f592862..093b0731 100644 --- a/zoneinfo/Europe/Busingen.ics +++ b/zoneinfo/Europe/Busingen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Zurich -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Zurich +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Chisinau.ics b/zoneinfo/Europe/Chisinau.ics index 48d60759..921d8a79 100644 --- a/zoneinfo/Europe/Chisinau.ics +++ b/zoneinfo/Europe/Chisinau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Chisinau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Chisinau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Chisinau BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Copenhagen.ics b/zoneinfo/Europe/Copenhagen.ics index 15bb097b..baaeae98 100644 --- a/zoneinfo/Europe/Copenhagen.ics +++ b/zoneinfo/Europe/Copenhagen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Copenhagen -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Copenhagen +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Copenhagen BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Dublin.ics b/zoneinfo/Europe/Dublin.ics index 6f828f29..1c493edb 100644 --- a/zoneinfo/Europe/Dublin.ics +++ b/zoneinfo/Europe/Dublin.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Dublin -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Dublin +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Dublin BEGIN:STANDARD TZNAME:IST diff --git a/zoneinfo/Europe/Gibraltar.ics b/zoneinfo/Europe/Gibraltar.ics index 3146e13f..08d3e617 100644 --- a/zoneinfo/Europe/Gibraltar.ics +++ b/zoneinfo/Europe/Gibraltar.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Gibraltar -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Gibraltar +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Gibraltar BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Guernsey.ics b/zoneinfo/Europe/Guernsey.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/Europe/Guernsey.ics +++ b/zoneinfo/Europe/Guernsey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Helsinki.ics b/zoneinfo/Europe/Helsinki.ics index c831f13b..56674704 100644 --- a/zoneinfo/Europe/Helsinki.ics +++ b/zoneinfo/Europe/Helsinki.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Helsinki -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Helsinki +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Helsinki BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Isle_of_Man.ics b/zoneinfo/Europe/Isle_of_Man.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/Europe/Isle_of_Man.ics +++ b/zoneinfo/Europe/Isle_of_Man.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Istanbul.ics b/zoneinfo/Europe/Istanbul.ics index 19e3965d..8234cbbb 100644 --- a/zoneinfo/Europe/Istanbul.ics +++ b/zoneinfo/Europe/Istanbul.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Istanbul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Istanbul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Jersey.ics b/zoneinfo/Europe/Jersey.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/Europe/Jersey.ics +++ b/zoneinfo/Europe/Jersey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Kaliningrad.ics b/zoneinfo/Europe/Kaliningrad.ics index aabc8c79..b9c5142b 100644 --- a/zoneinfo/Europe/Kaliningrad.ics +++ b/zoneinfo/Europe/Kaliningrad.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Kaliningrad -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Kaliningrad +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Kaliningrad BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Europe/Kiev.ics b/zoneinfo/Europe/Kiev.ics index dae8232e..7b74f022 100644 --- a/zoneinfo/Europe/Kiev.ics +++ b/zoneinfo/Europe/Kiev.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Kiev -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Kiev +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Kiev BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Kirov.ics b/zoneinfo/Europe/Kirov.ics index 8db12441..cc172460 100644 --- a/zoneinfo/Europe/Kirov.ics +++ b/zoneinfo/Europe/Kirov.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Kirov -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Kirov +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Kirov BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Lisbon.ics b/zoneinfo/Europe/Lisbon.ics index 03df53bc..f3dc7908 100644 --- a/zoneinfo/Europe/Lisbon.ics +++ b/zoneinfo/Europe/Lisbon.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Lisbon -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Lisbon +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Lisbon BEGIN:STANDARD TZNAME:WET diff --git a/zoneinfo/Europe/Ljubljana.ics b/zoneinfo/Europe/Ljubljana.ics index 4a7abf9a..0e522cb6 100644 --- a/zoneinfo/Europe/Ljubljana.ics +++ b/zoneinfo/Europe/Ljubljana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Belgrade -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Belgrade +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/London.ics b/zoneinfo/Europe/London.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/Europe/London.ics +++ b/zoneinfo/Europe/London.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/Europe/Luxembourg.ics b/zoneinfo/Europe/Luxembourg.ics index 01e96f10..c5e8d23e 100644 --- a/zoneinfo/Europe/Luxembourg.ics +++ b/zoneinfo/Europe/Luxembourg.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Luxembourg -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Luxembourg +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Luxembourg BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Madrid.ics b/zoneinfo/Europe/Madrid.ics index 5961174c..f8e322a2 100644 --- a/zoneinfo/Europe/Madrid.ics +++ b/zoneinfo/Europe/Madrid.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Madrid -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Madrid +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Madrid BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Malta.ics b/zoneinfo/Europe/Malta.ics index 5377a99a..995cde3f 100644 --- a/zoneinfo/Europe/Malta.ics +++ b/zoneinfo/Europe/Malta.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Malta -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Malta +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Malta BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Mariehamn.ics b/zoneinfo/Europe/Mariehamn.ics index c831f13b..56674704 100644 --- a/zoneinfo/Europe/Mariehamn.ics +++ b/zoneinfo/Europe/Mariehamn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Helsinki -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Helsinki +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Helsinki BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Minsk.ics b/zoneinfo/Europe/Minsk.ics index 1f5b6304..637025de 100644 --- a/zoneinfo/Europe/Minsk.ics +++ b/zoneinfo/Europe/Minsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Minsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Minsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Minsk BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Monaco.ics b/zoneinfo/Europe/Monaco.ics index 554eb76d..33f40446 100644 --- a/zoneinfo/Europe/Monaco.ics +++ b/zoneinfo/Europe/Monaco.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Monaco -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Monaco +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Monaco BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Moscow.ics b/zoneinfo/Europe/Moscow.ics index 7396b02b..5b3a00f4 100644 --- a/zoneinfo/Europe/Moscow.ics +++ b/zoneinfo/Europe/Moscow.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Moscow -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Moscow +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Moscow BEGIN:STANDARD TZNAME:MSK diff --git a/zoneinfo/Europe/Nicosia.ics b/zoneinfo/Europe/Nicosia.ics index 8ed99e7e..f34f04f7 100644 --- a/zoneinfo/Europe/Nicosia.ics +++ b/zoneinfo/Europe/Nicosia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Nicosia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Nicosia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Nicosia BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/Europe/Oslo.ics b/zoneinfo/Europe/Oslo.ics index 9f8f9a19..8274486e 100644 --- a/zoneinfo/Europe/Oslo.ics +++ b/zoneinfo/Europe/Oslo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Oslo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Oslo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Oslo BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Paris.ics b/zoneinfo/Europe/Paris.ics index e9caa654..76ac2cd7 100644 --- a/zoneinfo/Europe/Paris.ics +++ b/zoneinfo/Europe/Paris.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Paris -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Paris +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Paris BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Podgorica.ics b/zoneinfo/Europe/Podgorica.ics index 4a7abf9a..0e522cb6 100644 --- a/zoneinfo/Europe/Podgorica.ics +++ b/zoneinfo/Europe/Podgorica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Belgrade -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Belgrade +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Prague.ics b/zoneinfo/Europe/Prague.ics index b02461c9..ca590934 100644 --- a/zoneinfo/Europe/Prague.ics +++ b/zoneinfo/Europe/Prague.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Prague -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Prague +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Prague BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Riga.ics b/zoneinfo/Europe/Riga.ics index 09ed8c01..0d509f6d 100644 --- a/zoneinfo/Europe/Riga.ics +++ b/zoneinfo/Europe/Riga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Riga -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Riga +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Riga BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Rome.ics b/zoneinfo/Europe/Rome.ics index 0a7114db..cb4d7d1b 100644 --- a/zoneinfo/Europe/Rome.ics +++ b/zoneinfo/Europe/Rome.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Rome -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Rome +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Samara.ics b/zoneinfo/Europe/Samara.ics index b7fc061a..bd1e55f3 100644 --- a/zoneinfo/Europe/Samara.ics +++ b/zoneinfo/Europe/Samara.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Samara -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Samara +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Samara BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/San_Marino.ics b/zoneinfo/Europe/San_Marino.ics index 0a7114db..cb4d7d1b 100644 --- a/zoneinfo/Europe/San_Marino.ics +++ b/zoneinfo/Europe/San_Marino.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Rome -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Rome +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Sarajevo.ics b/zoneinfo/Europe/Sarajevo.ics index 4a7abf9a..0e522cb6 100644 --- a/zoneinfo/Europe/Sarajevo.ics +++ b/zoneinfo/Europe/Sarajevo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Belgrade -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Belgrade +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Saratov.ics b/zoneinfo/Europe/Saratov.ics index 21a2c047..df3657a9 100644 --- a/zoneinfo/Europe/Saratov.ics +++ b/zoneinfo/Europe/Saratov.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Saratov -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Saratov +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Saratov BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/Simferopol.ics b/zoneinfo/Europe/Simferopol.ics index 230ea507..6f85d842 100644 --- a/zoneinfo/Europe/Simferopol.ics +++ b/zoneinfo/Europe/Simferopol.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Simferopol -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Simferopol +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Simferopol BEGIN:STANDARD TZNAME:MSK diff --git a/zoneinfo/Europe/Skopje.ics b/zoneinfo/Europe/Skopje.ics index 4a7abf9a..0e522cb6 100644 --- a/zoneinfo/Europe/Skopje.ics +++ b/zoneinfo/Europe/Skopje.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Belgrade -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Belgrade +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Sofia.ics b/zoneinfo/Europe/Sofia.ics index ab7230d7..43e07e57 100644 --- a/zoneinfo/Europe/Sofia.ics +++ b/zoneinfo/Europe/Sofia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Sofia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Sofia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Sofia BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Stockholm.ics b/zoneinfo/Europe/Stockholm.ics index 5df34ec1..954f87fe 100644 --- a/zoneinfo/Europe/Stockholm.ics +++ b/zoneinfo/Europe/Stockholm.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Stockholm -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Stockholm +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Stockholm BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Tallinn.ics b/zoneinfo/Europe/Tallinn.ics index 9cb97bb3..f4204339 100644 --- a/zoneinfo/Europe/Tallinn.ics +++ b/zoneinfo/Europe/Tallinn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Tallinn -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Tallinn +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Tallinn BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Tirane.ics b/zoneinfo/Europe/Tirane.ics index 43c66c01..d305aa3a 100644 --- a/zoneinfo/Europe/Tirane.ics +++ b/zoneinfo/Europe/Tirane.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Tirane -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Tirane +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Tirane BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Tiraspol.ics b/zoneinfo/Europe/Tiraspol.ics index 48d60759..921d8a79 100644 --- a/zoneinfo/Europe/Tiraspol.ics +++ b/zoneinfo/Europe/Tiraspol.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Chisinau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Chisinau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Chisinau BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Ulyanovsk.ics b/zoneinfo/Europe/Ulyanovsk.ics index 85724cac..4bd12c8e 100644 --- a/zoneinfo/Europe/Ulyanovsk.ics +++ b/zoneinfo/Europe/Ulyanovsk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Ulyanovsk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Ulyanovsk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Ulyanovsk BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Europe/Uzhgorod.ics b/zoneinfo/Europe/Uzhgorod.ics index 5d0e5324..4ae4f32c 100644 --- a/zoneinfo/Europe/Uzhgorod.ics +++ b/zoneinfo/Europe/Uzhgorod.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Uzhgorod -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Uzhgorod +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Uzhgorod BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Vaduz.ics b/zoneinfo/Europe/Vaduz.ics index 8f592862..093b0731 100644 --- a/zoneinfo/Europe/Vaduz.ics +++ b/zoneinfo/Europe/Vaduz.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Zurich -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Zurich +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Vatican.ics b/zoneinfo/Europe/Vatican.ics index 0a7114db..cb4d7d1b 100644 --- a/zoneinfo/Europe/Vatican.ics +++ b/zoneinfo/Europe/Vatican.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Rome -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Rome +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Rome BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Vienna.ics b/zoneinfo/Europe/Vienna.ics index 6aff9fc9..b34dfe6e 100644 --- a/zoneinfo/Europe/Vienna.ics +++ b/zoneinfo/Europe/Vienna.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Vienna -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Vienna +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Vienna BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Vilnius.ics b/zoneinfo/Europe/Vilnius.ics index 22274d41..bb703a03 100644 --- a/zoneinfo/Europe/Vilnius.ics +++ b/zoneinfo/Europe/Vilnius.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Vilnius -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Vilnius +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Vilnius BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Volgograd.ics b/zoneinfo/Europe/Volgograd.ics index 8f87d665..241ba94e 100644 --- a/zoneinfo/Europe/Volgograd.ics +++ b/zoneinfo/Europe/Volgograd.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Volgograd -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Volgograd +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Volgograd BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/Europe/Warsaw.ics b/zoneinfo/Europe/Warsaw.ics index 99f620a9..e93dac14 100644 --- a/zoneinfo/Europe/Warsaw.ics +++ b/zoneinfo/Europe/Warsaw.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Warsaw -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Warsaw +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Warsaw BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Zagreb.ics b/zoneinfo/Europe/Zagreb.ics index 4a7abf9a..0e522cb6 100644 --- a/zoneinfo/Europe/Zagreb.ics +++ b/zoneinfo/Europe/Zagreb.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Belgrade -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Belgrade +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Belgrade BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Europe/Zaporozhye.ics b/zoneinfo/Europe/Zaporozhye.ics index 0f4b6578..d1c7a236 100644 --- a/zoneinfo/Europe/Zaporozhye.ics +++ b/zoneinfo/Europe/Zaporozhye.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Zaporozhye -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Zaporozhye +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Zaporozhye BEGIN:DAYLIGHT TZNAME:EEST diff --git a/zoneinfo/Europe/Zurich.ics b/zoneinfo/Europe/Zurich.ics index 8f592862..093b0731 100644 --- a/zoneinfo/Europe/Zurich.ics +++ b/zoneinfo/Europe/Zurich.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Zurich -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Zurich +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Zurich BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/GB-Eire.ics b/zoneinfo/GB-Eire.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/GB-Eire.ics +++ b/zoneinfo/GB-Eire.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/GB.ics b/zoneinfo/GB.ics index 220c97d6..0323f905 100644 --- a/zoneinfo/GB.ics +++ b/zoneinfo/GB.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/London -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/London +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/London BEGIN:DAYLIGHT TZNAME:BST diff --git a/zoneinfo/GMT+0.ics b/zoneinfo/GMT+0.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/GMT+0.ics +++ b/zoneinfo/GMT+0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/GMT-0.ics b/zoneinfo/GMT-0.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/GMT-0.ics +++ b/zoneinfo/GMT-0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/GMT.ics b/zoneinfo/GMT.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/GMT.ics +++ b/zoneinfo/GMT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/GMT0.ics b/zoneinfo/GMT0.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/GMT0.ics +++ b/zoneinfo/GMT0.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Greenwich.ics b/zoneinfo/Greenwich.ics index bb97d987..ccd04894 100644 --- a/zoneinfo/Greenwich.ics +++ b/zoneinfo/Greenwich.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/GMT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/GMT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/GMT BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/HST.ics b/zoneinfo/HST.ics index b73773bb..164d263d 100644 --- a/zoneinfo/HST.ics +++ b/zoneinfo/HST.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/HST -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/HST +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:HST BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/Hongkong.ics b/zoneinfo/Hongkong.ics index 79e66e86..3795c449 100644 --- a/zoneinfo/Hongkong.ics +++ b/zoneinfo/Hongkong.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Hong_Kong -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Hong_Kong +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Hong_Kong BEGIN:STANDARD TZNAME:HKT diff --git a/zoneinfo/Iceland.ics b/zoneinfo/Iceland.ics index 83bd2607..56942646 100644 --- a/zoneinfo/Iceland.ics +++ b/zoneinfo/Iceland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Atlantic/Reykjavik -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Atlantic/Reykjavik +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Atlantic/Reykjavik BEGIN:STANDARD TZNAME:GMT diff --git a/zoneinfo/Indian/Antananarivo.ics b/zoneinfo/Indian/Antananarivo.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Indian/Antananarivo.ics +++ b/zoneinfo/Indian/Antananarivo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Indian/Chagos.ics b/zoneinfo/Indian/Chagos.ics index 8bb3a3ec..03a84995 100644 --- a/zoneinfo/Indian/Chagos.ics +++ b/zoneinfo/Indian/Chagos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Chagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Chagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Chagos BEGIN:STANDARD TZNAME:+06 diff --git a/zoneinfo/Indian/Christmas.ics b/zoneinfo/Indian/Christmas.ics index b3c90d3e..fc8e702d 100644 --- a/zoneinfo/Indian/Christmas.ics +++ b/zoneinfo/Indian/Christmas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Christmas -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Christmas +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Christmas BEGIN:STANDARD TZNAME:+07 diff --git a/zoneinfo/Indian/Cocos.ics b/zoneinfo/Indian/Cocos.ics index a5d7ba24..6035ad14 100644 --- a/zoneinfo/Indian/Cocos.ics +++ b/zoneinfo/Indian/Cocos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Cocos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Cocos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Cocos BEGIN:STANDARD TZNAME:+0630 diff --git a/zoneinfo/Indian/Comoro.ics b/zoneinfo/Indian/Comoro.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Indian/Comoro.ics +++ b/zoneinfo/Indian/Comoro.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Indian/Kerguelen.ics b/zoneinfo/Indian/Kerguelen.ics index f9d7b6d1..5b8d48a7 100644 --- a/zoneinfo/Indian/Kerguelen.ics +++ b/zoneinfo/Indian/Kerguelen.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Kerguelen -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Kerguelen +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Kerguelen BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Indian/Mahe.ics b/zoneinfo/Indian/Mahe.ics index f82fabea..622032a1 100644 --- a/zoneinfo/Indian/Mahe.ics +++ b/zoneinfo/Indian/Mahe.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Mahe -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Mahe +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Mahe BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Indian/Maldives.ics b/zoneinfo/Indian/Maldives.ics index 18faf04a..f35e53c0 100644 --- a/zoneinfo/Indian/Maldives.ics +++ b/zoneinfo/Indian/Maldives.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Maldives -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Maldives +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Maldives BEGIN:STANDARD TZNAME:+05 diff --git a/zoneinfo/Indian/Mauritius.ics b/zoneinfo/Indian/Mauritius.ics index ccd76bff..c47f578d 100644 --- a/zoneinfo/Indian/Mauritius.ics +++ b/zoneinfo/Indian/Mauritius.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Mauritius -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Mauritius +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Mauritius BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Indian/Mayotte.ics b/zoneinfo/Indian/Mayotte.ics index 8e453cb7..63e544b5 100644 --- a/zoneinfo/Indian/Mayotte.ics +++ b/zoneinfo/Indian/Mayotte.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Nairobi -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Nairobi +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Nairobi BEGIN:STANDARD TZNAME:EAT diff --git a/zoneinfo/Indian/Reunion.ics b/zoneinfo/Indian/Reunion.ics index d3ced2bf..da30689b 100644 --- a/zoneinfo/Indian/Reunion.ics +++ b/zoneinfo/Indian/Reunion.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Indian/Reunion -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Indian/Reunion +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Indian/Reunion BEGIN:STANDARD TZNAME:+04 diff --git a/zoneinfo/Iran.ics b/zoneinfo/Iran.ics index 9e2d4fb1..cfbab1fe 100644 --- a/zoneinfo/Iran.ics +++ b/zoneinfo/Iran.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tehran -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tehran +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tehran BEGIN:DAYLIGHT TZNAME:+0430 diff --git a/zoneinfo/Israel.ics b/zoneinfo/Israel.ics index 68e86813..00e44fca 100644 --- a/zoneinfo/Israel.ics +++ b/zoneinfo/Israel.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Jerusalem -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Jerusalem +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Jerusalem BEGIN:DAYLIGHT TZNAME:IDT diff --git a/zoneinfo/Jamaica.ics b/zoneinfo/Jamaica.ics index b7a45b61..286f140f 100644 --- a/zoneinfo/Jamaica.ics +++ b/zoneinfo/Jamaica.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Jamaica -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Jamaica +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Jamaica BEGIN:STANDARD TZNAME:EST diff --git a/zoneinfo/Japan.ics b/zoneinfo/Japan.ics index 397e64aa..5c0806fc 100644 --- a/zoneinfo/Japan.ics +++ b/zoneinfo/Japan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Tokyo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Tokyo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Tokyo BEGIN:STANDARD TZNAME:JST diff --git a/zoneinfo/Kwajalein.ics b/zoneinfo/Kwajalein.ics index 2be6b7c1..5eaca9b7 100644 --- a/zoneinfo/Kwajalein.ics +++ b/zoneinfo/Kwajalein.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Kwajalein -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Kwajalein +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Kwajalein BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Libya.ics b/zoneinfo/Libya.ics index adf663b2..72f0e425 100644 --- a/zoneinfo/Libya.ics +++ b/zoneinfo/Libya.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Africa/Tripoli -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Africa/Tripoli +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Africa/Tripoli BEGIN:STANDARD TZNAME:EET diff --git a/zoneinfo/MET.ics b/zoneinfo/MET.ics index b5395c51..b06ca2a6 100644 --- a/zoneinfo/MET.ics +++ b/zoneinfo/MET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/MET -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/MET +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:MET BEGIN:DAYLIGHT TZNAME:MEST diff --git a/zoneinfo/MST.ics b/zoneinfo/MST.ics index 1851f3a7..ae82c296 100644 --- a/zoneinfo/MST.ics +++ b/zoneinfo/MST.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/MST -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/MST +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:MST BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/MST7MDT.ics b/zoneinfo/MST7MDT.ics index f7ffe774..9e3bb351 100644 --- a/zoneinfo/MST7MDT.ics +++ b/zoneinfo/MST7MDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/MST7MDT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/MST7MDT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:MST7MDT BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Mexico/BajaNorte.ics b/zoneinfo/Mexico/BajaNorte.ics index e4f7ae6f..20014d51 100644 --- a/zoneinfo/Mexico/BajaNorte.ics +++ b/zoneinfo/Mexico/BajaNorte.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Tijuana -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Tijuana +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Tijuana BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/Mexico/BajaSur.ics b/zoneinfo/Mexico/BajaSur.ics index bfd98fbc..d859310b 100644 --- a/zoneinfo/Mexico/BajaSur.ics +++ b/zoneinfo/Mexico/BajaSur.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Mazatlan -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Mazatlan +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Mazatlan BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/Mexico/General.ics b/zoneinfo/Mexico/General.ics index 3def11f5..c869740c 100644 --- a/zoneinfo/Mexico/General.ics +++ b/zoneinfo/Mexico/General.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Mexico_City -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Mexico_City +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Mexico_City BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/NZ-CHAT.ics b/zoneinfo/NZ-CHAT.ics index 825c2414..cdfaa3db 100644 --- a/zoneinfo/NZ-CHAT.ics +++ b/zoneinfo/NZ-CHAT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Chatham -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Chatham +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Chatham BEGIN:DAYLIGHT TZNAME:+1345 diff --git a/zoneinfo/NZ.ics b/zoneinfo/NZ.ics index 96762274..ae1b4b12 100644 --- a/zoneinfo/NZ.ics +++ b/zoneinfo/NZ.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Auckland -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Auckland +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Navajo.ics b/zoneinfo/Navajo.ics index c5697a29..76584cb4 100644 --- a/zoneinfo/Navajo.ics +++ b/zoneinfo/Navajo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Denver -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Denver +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/PRC.ics b/zoneinfo/PRC.ics index fb552ce7..6ef4af39 100644 --- a/zoneinfo/PRC.ics +++ b/zoneinfo/PRC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Shanghai -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Shanghai +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Shanghai BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/PST8PDT.ics b/zoneinfo/PST8PDT.ics index 7d9dd5f8..16dc1a46 100644 --- a/zoneinfo/PST8PDT.ics +++ b/zoneinfo/PST8PDT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/PST8PDT -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/PST8PDT +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:PST8PDT BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/Pacific/Apia.ics b/zoneinfo/Pacific/Apia.ics index e4d59aea..cab045c1 100644 --- a/zoneinfo/Pacific/Apia.ics +++ b/zoneinfo/Pacific/Apia.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Apia -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Apia +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Apia BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Auckland.ics b/zoneinfo/Pacific/Auckland.ics index 96762274..ae1b4b12 100644 --- a/zoneinfo/Pacific/Auckland.ics +++ b/zoneinfo/Pacific/Auckland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Auckland -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Auckland +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Auckland BEGIN:DAYLIGHT TZNAME:NZDT diff --git a/zoneinfo/Pacific/Bougainville.ics b/zoneinfo/Pacific/Bougainville.ics index 44c2e3a7..1fef9761 100644 --- a/zoneinfo/Pacific/Bougainville.ics +++ b/zoneinfo/Pacific/Bougainville.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Bougainville -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Bougainville +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Bougainville BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Chatham.ics b/zoneinfo/Pacific/Chatham.ics index 825c2414..cdfaa3db 100644 --- a/zoneinfo/Pacific/Chatham.ics +++ b/zoneinfo/Pacific/Chatham.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Chatham -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Chatham +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Chatham BEGIN:DAYLIGHT TZNAME:+1345 diff --git a/zoneinfo/Pacific/Chuuk.ics b/zoneinfo/Pacific/Chuuk.ics index 8cf293db..5a79b476 100644 --- a/zoneinfo/Pacific/Chuuk.ics +++ b/zoneinfo/Pacific/Chuuk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Chuuk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Chuuk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Pacific/Easter.ics b/zoneinfo/Pacific/Easter.ics index 5b3c6a95..d9a2f772 100644 --- a/zoneinfo/Pacific/Easter.ics +++ b/zoneinfo/Pacific/Easter.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Easter -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Easter +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Easter BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Pacific/Efate.ics b/zoneinfo/Pacific/Efate.ics index 849b1ddd..ec3f5d8a 100644 --- a/zoneinfo/Pacific/Efate.ics +++ b/zoneinfo/Pacific/Efate.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Efate -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Efate +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Efate BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Enderbury.ics b/zoneinfo/Pacific/Enderbury.ics index 6047c444..6631f00c 100644 --- a/zoneinfo/Pacific/Enderbury.ics +++ b/zoneinfo/Pacific/Enderbury.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Kanton -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Kanton +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Kanton BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Fakaofo.ics b/zoneinfo/Pacific/Fakaofo.ics index 7495f498..7001fea4 100644 --- a/zoneinfo/Pacific/Fakaofo.ics +++ b/zoneinfo/Pacific/Fakaofo.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Fakaofo -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Fakaofo +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Fakaofo BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Fiji.ics b/zoneinfo/Pacific/Fiji.ics index 52fcacd1..484cd8be 100644 --- a/zoneinfo/Pacific/Fiji.ics +++ b/zoneinfo/Pacific/Fiji.ics @@ -2,16 +2,9 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Fiji -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Fiji +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Fiji -BEGIN:STANDARD -TZNAME:+12 -TZOFFSETFROM:+1300 -TZOFFSETTO:+1200 -DTSTART:19700118T030000 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=-2SU -END:STANDARD BEGIN:DAYLIGHT TZNAME:+13 TZOFFSETFROM:+1200 @@ -19,5 +12,12 @@ TZOFFSETTO:+1300 DTSTART:19701108T020000 RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=2SU END:DAYLIGHT +BEGIN:STANDARD +TZNAME:+12 +TZOFFSETFROM:+1300 +TZOFFSETTO:+1200 +DTSTART:19700118T030000 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=-2SU +END:STANDARD END:VTIMEZONE END:VCALENDAR diff --git a/zoneinfo/Pacific/Funafuti.ics b/zoneinfo/Pacific/Funafuti.ics index 5ac4fcd9..358fb707 100644 --- a/zoneinfo/Pacific/Funafuti.ics +++ b/zoneinfo/Pacific/Funafuti.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Funafuti -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Funafuti +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Funafuti BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Galapagos.ics b/zoneinfo/Pacific/Galapagos.ics index a58d9850..7f4f9296 100644 --- a/zoneinfo/Pacific/Galapagos.ics +++ b/zoneinfo/Pacific/Galapagos.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Galapagos -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Galapagos +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Galapagos BEGIN:STANDARD TZNAME:-06 diff --git a/zoneinfo/Pacific/Gambier.ics b/zoneinfo/Pacific/Gambier.ics index ff34cbe1..e94fff84 100644 --- a/zoneinfo/Pacific/Gambier.ics +++ b/zoneinfo/Pacific/Gambier.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Gambier -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Gambier +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Gambier BEGIN:STANDARD TZNAME:-09 diff --git a/zoneinfo/Pacific/Guadalcanal.ics b/zoneinfo/Pacific/Guadalcanal.ics index a0b8c884..25cc2a79 100644 --- a/zoneinfo/Pacific/Guadalcanal.ics +++ b/zoneinfo/Pacific/Guadalcanal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Guadalcanal -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Guadalcanal +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Guadalcanal BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Guam.ics b/zoneinfo/Pacific/Guam.ics index c7a4a42a..6ad9f14e 100644 --- a/zoneinfo/Pacific/Guam.ics +++ b/zoneinfo/Pacific/Guam.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Guam -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Guam +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Guam BEGIN:STANDARD TZNAME:ChST diff --git a/zoneinfo/Pacific/Honolulu.ics b/zoneinfo/Pacific/Honolulu.ics index 617c83fb..c97c440e 100644 --- a/zoneinfo/Pacific/Honolulu.ics +++ b/zoneinfo/Pacific/Honolulu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Honolulu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Honolulu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/Pacific/Johnston.ics b/zoneinfo/Pacific/Johnston.ics index 617c83fb..c97c440e 100644 --- a/zoneinfo/Pacific/Johnston.ics +++ b/zoneinfo/Pacific/Johnston.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Honolulu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Honolulu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/Pacific/Kanton.ics b/zoneinfo/Pacific/Kanton.ics index 6047c444..6631f00c 100644 --- a/zoneinfo/Pacific/Kanton.ics +++ b/zoneinfo/Pacific/Kanton.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Kanton -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Kanton +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Kanton BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Kiritimati.ics b/zoneinfo/Pacific/Kiritimati.ics index 05d255b0..61329cf7 100644 --- a/zoneinfo/Pacific/Kiritimati.ics +++ b/zoneinfo/Pacific/Kiritimati.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Kiritimati -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Kiritimati +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Kiritimati BEGIN:STANDARD TZNAME:+14 diff --git a/zoneinfo/Pacific/Kosrae.ics b/zoneinfo/Pacific/Kosrae.ics index 47f314c6..af071c21 100644 --- a/zoneinfo/Pacific/Kosrae.ics +++ b/zoneinfo/Pacific/Kosrae.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Kosrae -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Kosrae +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Kosrae BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Kwajalein.ics b/zoneinfo/Pacific/Kwajalein.ics index 2be6b7c1..5eaca9b7 100644 --- a/zoneinfo/Pacific/Kwajalein.ics +++ b/zoneinfo/Pacific/Kwajalein.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Kwajalein -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Kwajalein +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Kwajalein BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Majuro.ics b/zoneinfo/Pacific/Majuro.ics index f246bf96..91b62ca8 100644 --- a/zoneinfo/Pacific/Majuro.ics +++ b/zoneinfo/Pacific/Majuro.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Majuro -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Majuro +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Majuro BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Marquesas.ics b/zoneinfo/Pacific/Marquesas.ics index ea4fe326..55347fcd 100644 --- a/zoneinfo/Pacific/Marquesas.ics +++ b/zoneinfo/Pacific/Marquesas.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Marquesas -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Marquesas +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Marquesas BEGIN:STANDARD TZNAME:-0930 diff --git a/zoneinfo/Pacific/Midway.ics b/zoneinfo/Pacific/Midway.ics index 25c20123..aec83b7a 100644 --- a/zoneinfo/Pacific/Midway.ics +++ b/zoneinfo/Pacific/Midway.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pago_Pago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pago_Pago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/Pacific/Nauru.ics b/zoneinfo/Pacific/Nauru.ics index f08aef20..182671e7 100644 --- a/zoneinfo/Pacific/Nauru.ics +++ b/zoneinfo/Pacific/Nauru.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Nauru -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Nauru +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Nauru BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Niue.ics b/zoneinfo/Pacific/Niue.ics index 2659890f..1f9d6437 100644 --- a/zoneinfo/Pacific/Niue.ics +++ b/zoneinfo/Pacific/Niue.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Niue -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Niue +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Niue BEGIN:STANDARD TZNAME:-11 diff --git a/zoneinfo/Pacific/Norfolk.ics b/zoneinfo/Pacific/Norfolk.ics index e0ac779e..1e19535a 100644 --- a/zoneinfo/Pacific/Norfolk.ics +++ b/zoneinfo/Pacific/Norfolk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Norfolk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Norfolk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Norfolk BEGIN:DAYLIGHT TZNAME:+12 diff --git a/zoneinfo/Pacific/Noumea.ics b/zoneinfo/Pacific/Noumea.ics index dade5946..a221353d 100644 --- a/zoneinfo/Pacific/Noumea.ics +++ b/zoneinfo/Pacific/Noumea.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Noumea -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Noumea +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Noumea BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Pago_Pago.ics b/zoneinfo/Pacific/Pago_Pago.ics index 25c20123..aec83b7a 100644 --- a/zoneinfo/Pacific/Pago_Pago.ics +++ b/zoneinfo/Pacific/Pago_Pago.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pago_Pago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pago_Pago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/Pacific/Palau.ics b/zoneinfo/Pacific/Palau.ics index 8382066c..321acf82 100644 --- a/zoneinfo/Pacific/Palau.ics +++ b/zoneinfo/Pacific/Palau.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Palau -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Palau +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Palau BEGIN:STANDARD TZNAME:+09 diff --git a/zoneinfo/Pacific/Pitcairn.ics b/zoneinfo/Pacific/Pitcairn.ics index dab739e3..18647bc6 100644 --- a/zoneinfo/Pacific/Pitcairn.ics +++ b/zoneinfo/Pacific/Pitcairn.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pitcairn -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pitcairn +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pitcairn BEGIN:STANDARD TZNAME:-08 diff --git a/zoneinfo/Pacific/Pohnpei.ics b/zoneinfo/Pacific/Pohnpei.ics index 1e7791ac..dac85612 100644 --- a/zoneinfo/Pacific/Pohnpei.ics +++ b/zoneinfo/Pacific/Pohnpei.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pohnpei -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pohnpei +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pohnpei BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Ponape.ics b/zoneinfo/Pacific/Ponape.ics index 1e7791ac..dac85612 100644 --- a/zoneinfo/Pacific/Ponape.ics +++ b/zoneinfo/Pacific/Ponape.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pohnpei -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pohnpei +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pohnpei BEGIN:STANDARD TZNAME:+11 diff --git a/zoneinfo/Pacific/Port_Moresby.ics b/zoneinfo/Pacific/Port_Moresby.ics index b2ee3c97..07460e5e 100644 --- a/zoneinfo/Pacific/Port_Moresby.ics +++ b/zoneinfo/Pacific/Port_Moresby.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Port_Moresby -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Port_Moresby +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Port_Moresby BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Pacific/Rarotonga.ics b/zoneinfo/Pacific/Rarotonga.ics index d2ec882e..91a921ce 100644 --- a/zoneinfo/Pacific/Rarotonga.ics +++ b/zoneinfo/Pacific/Rarotonga.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Rarotonga -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Rarotonga +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Rarotonga BEGIN:STANDARD TZNAME:-10 diff --git a/zoneinfo/Pacific/Saipan.ics b/zoneinfo/Pacific/Saipan.ics index c7a4a42a..6ad9f14e 100644 --- a/zoneinfo/Pacific/Saipan.ics +++ b/zoneinfo/Pacific/Saipan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Guam -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Guam +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Guam BEGIN:STANDARD TZNAME:ChST diff --git a/zoneinfo/Pacific/Samoa.ics b/zoneinfo/Pacific/Samoa.ics index 25c20123..aec83b7a 100644 --- a/zoneinfo/Pacific/Samoa.ics +++ b/zoneinfo/Pacific/Samoa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pago_Pago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pago_Pago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/Pacific/Tahiti.ics b/zoneinfo/Pacific/Tahiti.ics index e192599f..f572edde 100644 --- a/zoneinfo/Pacific/Tahiti.ics +++ b/zoneinfo/Pacific/Tahiti.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Tahiti -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Tahiti +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Tahiti BEGIN:STANDARD TZNAME:-10 diff --git a/zoneinfo/Pacific/Tarawa.ics b/zoneinfo/Pacific/Tarawa.ics index d621bc20..8ede8f2e 100644 --- a/zoneinfo/Pacific/Tarawa.ics +++ b/zoneinfo/Pacific/Tarawa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Tarawa -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Tarawa +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Tarawa BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Tongatapu.ics b/zoneinfo/Pacific/Tongatapu.ics index 7888e695..203aa8af 100644 --- a/zoneinfo/Pacific/Tongatapu.ics +++ b/zoneinfo/Pacific/Tongatapu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Tongatapu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Tongatapu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Tongatapu BEGIN:STANDARD TZNAME:+13 diff --git a/zoneinfo/Pacific/Truk.ics b/zoneinfo/Pacific/Truk.ics index 8cf293db..5a79b476 100644 --- a/zoneinfo/Pacific/Truk.ics +++ b/zoneinfo/Pacific/Truk.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Chuuk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Chuuk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Pacific/Wake.ics b/zoneinfo/Pacific/Wake.ics index 5008fa14..64a846b1 100644 --- a/zoneinfo/Pacific/Wake.ics +++ b/zoneinfo/Pacific/Wake.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Wake -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Wake +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Wake BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Wallis.ics b/zoneinfo/Pacific/Wallis.ics index ee33e522..8b1bbe5d 100644 --- a/zoneinfo/Pacific/Wallis.ics +++ b/zoneinfo/Pacific/Wallis.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Wallis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Wallis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Wallis BEGIN:STANDARD TZNAME:+12 diff --git a/zoneinfo/Pacific/Yap.ics b/zoneinfo/Pacific/Yap.ics index 8cf293db..5a79b476 100644 --- a/zoneinfo/Pacific/Yap.ics +++ b/zoneinfo/Pacific/Yap.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Chuuk -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Chuuk +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Chuuk BEGIN:STANDARD TZNAME:+10 diff --git a/zoneinfo/Poland.ics b/zoneinfo/Poland.ics index 99f620a9..e93dac14 100644 --- a/zoneinfo/Poland.ics +++ b/zoneinfo/Poland.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Warsaw -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Warsaw +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Warsaw BEGIN:DAYLIGHT TZNAME:CEST diff --git a/zoneinfo/Portugal.ics b/zoneinfo/Portugal.ics index 03df53bc..f3dc7908 100644 --- a/zoneinfo/Portugal.ics +++ b/zoneinfo/Portugal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Lisbon -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Lisbon +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Lisbon BEGIN:STANDARD TZNAME:WET diff --git a/zoneinfo/ROC.ics b/zoneinfo/ROC.ics index cbf247a1..d836d436 100644 --- a/zoneinfo/ROC.ics +++ b/zoneinfo/ROC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Taipei -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Taipei +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Taipei BEGIN:STANDARD TZNAME:CST diff --git a/zoneinfo/ROK.ics b/zoneinfo/ROK.ics index c8a576a1..746d0209 100644 --- a/zoneinfo/ROK.ics +++ b/zoneinfo/ROK.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Seoul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Seoul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Seoul BEGIN:STANDARD TZNAME:KST diff --git a/zoneinfo/Singapore.ics b/zoneinfo/Singapore.ics index 90ada0f4..00e23374 100644 --- a/zoneinfo/Singapore.ics +++ b/zoneinfo/Singapore.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Asia/Singapore -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Asia/Singapore +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Asia/Singapore BEGIN:STANDARD TZNAME:+08 diff --git a/zoneinfo/Turkey.ics b/zoneinfo/Turkey.ics index 19e3965d..8234cbbb 100644 --- a/zoneinfo/Turkey.ics +++ b/zoneinfo/Turkey.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Istanbul -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Istanbul +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Istanbul BEGIN:STANDARD TZNAME:+03 diff --git a/zoneinfo/UCT.ics b/zoneinfo/UCT.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/UCT.ics +++ b/zoneinfo/UCT.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/US/Alaska.ics b/zoneinfo/US/Alaska.ics index 452152b1..573012dd 100644 --- a/zoneinfo/US/Alaska.ics +++ b/zoneinfo/US/Alaska.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Anchorage -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Anchorage +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Anchorage BEGIN:DAYLIGHT TZNAME:AKDT diff --git a/zoneinfo/US/Aleutian.ics b/zoneinfo/US/Aleutian.ics index 8c4197f4..f6af5b1c 100644 --- a/zoneinfo/US/Aleutian.ics +++ b/zoneinfo/US/Aleutian.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Adak -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Adak +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Adak BEGIN:DAYLIGHT TZNAME:HDT diff --git a/zoneinfo/US/Arizona.ics b/zoneinfo/US/Arizona.ics index de8d3ee6..93db33c3 100644 --- a/zoneinfo/US/Arizona.ics +++ b/zoneinfo/US/Arizona.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Phoenix -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Phoenix +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Phoenix BEGIN:STANDARD TZNAME:MST diff --git a/zoneinfo/US/Central.ics b/zoneinfo/US/Central.ics index 5e5b3f76..0bad1652 100644 --- a/zoneinfo/US/Central.ics +++ b/zoneinfo/US/Central.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Chicago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Chicago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Chicago BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/US/East-Indiana.ics b/zoneinfo/US/East-Indiana.ics index 8319a36b..15781f51 100644 --- a/zoneinfo/US/East-Indiana.ics +++ b/zoneinfo/US/East-Indiana.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Indianapolis -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Indianapolis +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Indianapolis BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/US/Eastern.ics b/zoneinfo/US/Eastern.ics index d81c013c..3738a5bb 100644 --- a/zoneinfo/US/Eastern.ics +++ b/zoneinfo/US/Eastern.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/New_York -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/New_York +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/New_York BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/US/Hawaii.ics b/zoneinfo/US/Hawaii.ics index 617c83fb..c97c440e 100644 --- a/zoneinfo/US/Hawaii.ics +++ b/zoneinfo/US/Hawaii.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Honolulu -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Honolulu +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Honolulu BEGIN:STANDARD TZNAME:HST diff --git a/zoneinfo/US/Indiana-Starke.ics b/zoneinfo/US/Indiana-Starke.ics index faa66d0a..7c457cc5 100644 --- a/zoneinfo/US/Indiana-Starke.ics +++ b/zoneinfo/US/Indiana-Starke.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Indiana/Knox -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Indiana/Knox +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Indiana/Knox BEGIN:DAYLIGHT TZNAME:CDT diff --git a/zoneinfo/US/Michigan.ics b/zoneinfo/US/Michigan.ics index db491782..c653a38b 100644 --- a/zoneinfo/US/Michigan.ics +++ b/zoneinfo/US/Michigan.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Detroit -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Detroit +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Detroit BEGIN:DAYLIGHT TZNAME:EDT diff --git a/zoneinfo/US/Mountain.ics b/zoneinfo/US/Mountain.ics index c5697a29..76584cb4 100644 --- a/zoneinfo/US/Mountain.ics +++ b/zoneinfo/US/Mountain.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Denver -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Denver +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Denver BEGIN:DAYLIGHT TZNAME:MDT diff --git a/zoneinfo/US/Pacific.ics b/zoneinfo/US/Pacific.ics index 8545d95d..02d2810c 100644 --- a/zoneinfo/US/Pacific.ics +++ b/zoneinfo/US/Pacific.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/America/Los_Angeles -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/America/Los_Angeles +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:America/Los_Angeles BEGIN:DAYLIGHT TZNAME:PDT diff --git a/zoneinfo/US/Samoa.ics b/zoneinfo/US/Samoa.ics index 25c20123..aec83b7a 100644 --- a/zoneinfo/US/Samoa.ics +++ b/zoneinfo/US/Samoa.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Pacific/Pago_Pago -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Pacific/Pago_Pago +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Pacific/Pago_Pago BEGIN:STANDARD TZNAME:SST diff --git a/zoneinfo/UTC.ics b/zoneinfo/UTC.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/UTC.ics +++ b/zoneinfo/UTC.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/Universal.ics b/zoneinfo/Universal.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/Universal.ics +++ b/zoneinfo/Universal.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC diff --git a/zoneinfo/W-SU.ics b/zoneinfo/W-SU.ics index 7396b02b..5b3a00f4 100644 --- a/zoneinfo/W-SU.ics +++ b/zoneinfo/W-SU.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Europe/Moscow -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Europe/Moscow +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Europe/Moscow BEGIN:STANDARD TZNAME:MSK diff --git a/zoneinfo/WET.ics b/zoneinfo/WET.ics index ca0b1c0f..6232ccb5 100644 --- a/zoneinfo/WET.ics +++ b/zoneinfo/WET.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/WET -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/WET +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:WET BEGIN:DAYLIGHT TZNAME:WEST diff --git a/zoneinfo/Zulu.ics b/zoneinfo/Zulu.ics index def848c1..8240c7a1 100644 --- a/zoneinfo/Zulu.ics +++ b/zoneinfo/Zulu.ics @@ -2,8 +2,8 @@ BEGIN:VCALENDAR PRODID:-//citadel.org//NONSGML Citadel calendar//EN VERSION:2.0 BEGIN:VTIMEZONE -TZID:/citadel.org/20211009_1/Etc/UTC -LAST-MODIFIED:20211009T133001Z +TZID:/citadel.org/20211207_1/Etc/UTC +LAST-MODIFIED:20211207T194144Z X-LIC-LOCATION:Etc/UTC BEGIN:STANDARD TZNAME:UTC -- cgit v1.2.1 From cbd068b2af2beac1d6aa97fe1dc69f9e91cbc236 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 8 Dec 2021 17:32:26 -0500 Subject: ReleaseNotes.txt - update --- ReleaseNotes.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index dfad6610..c80308c9 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -3,10 +3,12 @@ Release Highlights Version 3.0.12 (UNRELEASED): ---------------------------- - * Improved FindICU (copied from official CMake. see files in cmake/Kitware) + * 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): --------------------------------- -- cgit v1.2.1 From 3af3c6406bbbf4fe4f2e6d79863d685fd84378c1 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 8 Dec 2021 18:36:12 -0500 Subject: ReleaseNotes.txt - prep for 3.0.12 release --- ReleaseNotes.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index c80308c9..f18ed590 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,8 +1,8 @@ Release Highlights ================== -Version 3.0.12 (UNRELEASED): ----------------------------- +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 -- cgit v1.2.1 From 178e51030f91936479d0db7d5a8f46ffd491124b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 8 Dec 2021 18:49:36 -0500 Subject: This becomes version 3.0.13 --- CMakeLists.txt | 2 +- ReleaseNotes.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d31b325e..9553cbf5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,7 +112,7 @@ endif() 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}" ) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index f18ed590..cd82f85c 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,6 +1,10 @@ Release Highlights ================== +Version 3.0.13 (UNRELEASED): +---------------------------- + * + Version 3.0.12 (08 December 2021): ---------------------------------- * Fix a libicalval crash in cleanVObject -- cgit v1.2.1 From 96a7ca87bb8986703761f33660f1fd7ff188e92b Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 6 Jan 2022 15:34:07 -0500 Subject: restrictions.csv: fix typo --- design-data/restrictions.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/design-data/restrictions.csv b/design-data/restrictions.csv index 036210b3..62f571ec 100644 --- a/design-data/restrictions.csv +++ b/design-data/restrictions.csv @@ -1898,7 +1898,7 @@ NONE,XVOTE,POLLITEMID,NONE,ZEROORONE NONE,XVOTE,RESPONSE,NONE,ZEROORONE NONE,XVOTE,COMMENT,NONE,ZEROPLUS NONE,XVOTE,X,NONE,ZEROPLUS -NONE,XVOTE,NONE,VALARM,ZEROP +NONE,XVOTE,NONE,VALARM,ZERO NONE,XVOTE,NONE,VTIMEZONE,ZERO NONE,XVOTE,NONE,VEVENT,ZERO NONE,XVOTE,NONE,VFREEBUSY,ZERO -- cgit v1.2.1 From a9fb0936a3d75ef1e463f6d2ed02bf02daa41a7a Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 6 Jan 2022 15:38:48 -0500 Subject: icalenums.h: add terminating value to icalcomponent_kind enum --- src/libical/icalenums.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libical/icalenums.h b/src/libical/icalenums.h index 6d3ac09e..8eb98c5d 100644 --- a/src/libical/icalenums.h +++ b/src/libical/icalenums.h @@ -64,7 +64,8 @@ typedef enum icalcomponent_kind ICAL_VVOTER_COMPONENT, ICAL_XVOTE_COMPONENT, ICAL_VPATCH_COMPONENT, - ICAL_XPATCH_COMPONENT + ICAL_XPATCH_COMPONENT, + ICAL_NUM_COMPONENT_TYPES /* MUST be last (unless we can put NO_COMP last) */ } icalcomponent_kind; /*********************************************************************** -- cgit v1.2.1 From ab139b5dbe7c0104b96ec0fe0c6277a7ec296ac6 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 6 Jan 2022 15:39:57 -0500 Subject: mkrestrictiontable.pl: add component restrictions to table --- scripts/mkrestrictiontable.pl | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/scripts/mkrestrictiontable.pl b/scripts/mkrestrictiontable.pl index 21bc499a..ca8c8355 100755 --- a/scripts/mkrestrictiontable.pl +++ b/scripts/mkrestrictiontable.pl @@ -47,8 +47,9 @@ if ($opt_i) { sub insert_code { - # First build the property restriction table - print "static const icalrestriction_property_record icalrestriction_property_records[] = {\n"; + # First parse the restrictions file and make a hash of the restrictions + my @prop_restr = (); + my @comp_restr = (); while () { @@ -67,17 +68,36 @@ sub insert_code } $restr =~ s/\s+$//; - if ($prop ne "NONE") { - print( -" \{ICAL_METHOD_${method}, ICAL_${targetcomp}_COMPONENT, ICAL_${prop}_PROPERTY, ICAL_RESTRICTION_${restr}, $sub},\n" - ); + if ($prop eq "NONE") { + $prop = "NO"; + } + if ($subcomp eq "NONE") { + $subcomp = "NO"; } + my @value = ($restr, $sub); + $prop_restr{$method}{$targetcomp}{$prop}{$subcomp} = \@value; } + # Build the restriction table + print "static const icalrestriction_record icalrestriction_records[] = {\n"; + + for $method ( sort keys %prop_restr ) { + for $targetcomp ( sort keys %{ $prop_restr{$method} } ) { + for $prop ( sort keys %{ $prop_restr{$method}{$targetcomp} } ) { + for $subcomp ( sort keys %{ $prop_restr{$method}{$targetcomp}{$prop} } ) { + my ($restr, $sub) = @{$prop_restr{$method}{$targetcomp}{$prop}{$subcomp}}; + print( +" \{ICAL_METHOD_${method}, ICAL_${targetcomp}_COMPONENT, ICAL_${prop}_PROPERTY, ICAL_${subcomp}_COMPONENT, ICAL_RESTRICTION_${restr}, $sub},\n" + ); + } + } + } +} + # Print the terminating line print - " {ICAL_METHOD_NONE, ICAL_NO_COMPONENT, ICAL_NO_PROPERTY, ICAL_RESTRICTION_NONE, NULL}\n"; + " {ICAL_METHOD_NONE, ICAL_NO_COMPONENT, ICAL_NO_PROPERTY, ICAL_NO_COMPONENT, ICAL_RESTRICTION_NONE, NULL}\n"; print "};\n"; -- cgit v1.2.1 From 5dd69f234e551ea010d5b3f4f965fcb1fa1e467f Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 6 Jan 2022 15:41:55 -0500 Subject: icalrestriction.c.in: check restrictions for nested components at ANY level --- src/libical/icalrestriction.c.in | 269 ++++++++++++++++++++++++--------------- 1 file changed, 165 insertions(+), 104 deletions(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index e36773f1..e880a310 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -28,34 +28,29 @@ /* Define the structs for the restrictions. these data are filled out in machine generated code below */ -struct icalrestriction_property_record; +struct icalrestriction_record; -typedef const char *(*restriction_func) (const struct icalrestriction_property_record * rec, +typedef const char *(*restriction_func) (const struct icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop); -typedef struct icalrestriction_property_record +typedef struct icalrestriction_record { icalproperty_method method; icalcomponent_kind component; icalproperty_kind property; - icalrestriction_kind restriction; - restriction_func function; -} icalrestriction_property_record; - -typedef struct icalrestriction_component_record -{ - icalproperty_method method; - icalcomponent_kind component; icalcomponent_kind subcomponent; icalrestriction_kind restriction; restriction_func function; -} icalrestriction_component_record; +} icalrestriction_record; -static const icalrestriction_property_record *icalrestriction_get_property_restriction( - icalproperty_method method, icalcomponent_kind component, icalproperty_kind property); +static const icalrestriction_record *icalrestriction_get_restriction( + const icalrestriction_record *start, + icalproperty_method method, icalcomponent_kind component, + icalproperty_kind property, icalcomponent_kind subcomp); -static const icalrestriction_property_record null_prop_record = - { ICAL_METHOD_NONE, ICAL_NO_COMPONENT, ICAL_NO_PROPERTY, ICAL_RESTRICTION_UNKNOWN, NULL }; +static const icalrestriction_record null_restriction_record = + { ICAL_METHOD_NONE, ICAL_NO_COMPONENT, + ICAL_NO_PROPERTY, ICAL_NO_COMPONENT, ICAL_RESTRICTION_UNKNOWN, NULL }; /** Each row gives the result of comparing a restriction against a count. The columns in each row represent 0,1,2+. '-1' indicates @@ -105,7 +100,7 @@ int icalrestriction_compare(icalrestriction_kind restr, int count) /* Special case routines */ static const char *icalrestriction_may_be_draft_final_canceled( - const icalrestriction_property_record *rec, icalcomponent *comp, icalproperty *prop) + const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) { icalproperty_status stat = icalproperty_get_status(prop); @@ -123,7 +118,7 @@ static const char *icalrestriction_may_be_draft_final_canceled( return 0; } -static const char *icalrestriction_may_be_comp_need_process(const icalrestriction_property_record * +static const char *icalrestriction_may_be_comp_need_process(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { @@ -142,7 +137,7 @@ static const char *icalrestriction_may_be_comp_need_process(const icalrestrictio return 0; } -static const char *icalrestriction_may_be_tent_conf(const icalrestriction_property_record * rec, +static const char *icalrestriction_may_be_tent_conf(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { icalproperty_status stat = icalproperty_get_status(prop); @@ -159,7 +154,7 @@ static const char *icalrestriction_may_be_tent_conf(const icalrestriction_proper return 0; } -static const char *icalrestriction_may_be_tent_conf_cancel(const icalrestriction_property_record * +static const char *icalrestriction_may_be_tent_conf_cancel(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { @@ -179,7 +174,7 @@ static const char *icalrestriction_may_be_tent_conf_cancel(const icalrestriction } static const char *icalrestriction_must_be_cancel_if_present( - const icalrestriction_property_record *rec, icalcomponent *comp, icalproperty *prop) + const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) { /* This routine will not be called if prop == 0 */ icalproperty_status stat = icalproperty_get_status(prop); @@ -195,7 +190,7 @@ static const char *icalrestriction_must_be_cancel_if_present( } static const char *icalrestriction_must_be_canceled_no_attendee( - const icalrestriction_property_record *rec, icalcomponent *comp, icalproperty *prop) + const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); _unused(comp); @@ -207,7 +202,7 @@ static const char *icalrestriction_must_be_canceled_no_attendee( return 0; } -static const char *icalrestriction_must_be_recurring(const icalrestriction_property_record * rec, +static const char *icalrestriction_must_be_recurring(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); @@ -216,7 +211,7 @@ static const char *icalrestriction_must_be_recurring(const icalrestriction_prope return 0; } -static const char *icalrestriction_must_have_duration(const icalrestriction_property_record * rec, +static const char *icalrestriction_must_have_duration(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); @@ -230,7 +225,7 @@ static const char *icalrestriction_must_have_duration(const icalrestriction_prop return 0; } -static const char *icalrestriction_must_have_repeat(const icalrestriction_property_record * rec, +static const char *icalrestriction_must_have_repeat(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); @@ -244,7 +239,7 @@ static const char *icalrestriction_must_have_repeat(const icalrestriction_proper return 0; } -const char *icalrestriction_must_if_tz_ref(const icalrestriction_property_record * rec, +const char *icalrestriction_must_if_tz_ref(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); @@ -253,7 +248,7 @@ const char *icalrestriction_must_if_tz_ref(const icalrestriction_property_record return 0; } -static const char *icalrestriction_no_dtend(const icalrestriction_property_record * rec, +static const char *icalrestriction_no_dtend(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); @@ -267,7 +262,7 @@ static const char *icalrestriction_no_dtend(const icalrestriction_property_recor return 0; } -static const char *icalrestriction_no_duration(const icalrestriction_property_record * rec, +static const char *icalrestriction_no_duration(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); @@ -278,7 +273,7 @@ static const char *icalrestriction_no_duration(const icalrestriction_property_re return 0; } -static const char *icalrestriction_must_be_email(const icalrestriction_property_record * rec, +static const char *icalrestriction_must_be_email(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { icalproperty_action stat = icalproperty_get_action(prop); @@ -293,95 +288,169 @@ static const char *icalrestriction_must_be_email(const icalrestriction_property_ return 0; } -static int icalrestriction_check_component(icalproperty_method method, icalcomponent *comp) +static int _check_restriction(icalcomponent *comp, + const icalrestriction_record *record, + int count, icalproperty *prop) { - icalproperty_kind kind; - icalcomponent_kind comp_kind; icalrestriction_kind restr; - const icalrestriction_property_record *prop_record; const char *funcr = 0; - icalproperty *prop; + int compare; + + restr = record->restriction; + + if (restr == ICAL_RESTRICTION_ONEEXCLUSIVE || restr == ICAL_RESTRICTION_ONEMUTUAL) { + + /* First treat is as a 0/1 restriction */ + restr = ICAL_RESTRICTION_ZEROORONE; + compare = icalrestriction_compare(restr, count); + + } else { + + compare = icalrestriction_compare(restr, count); + } + + assert(compare != -1); + + if (compare == 0) { +#define TMP_BUF_SIZE 1024 + char temp[TMP_BUF_SIZE]; + icalproperty *errProp; + icalparameter *errParam; + const char *type, *kind; + + if (record->subcomponent != ICAL_NO_COMPONENT) { + type = "component"; + kind = icalenum_component_kind_to_string(record->subcomponent); + } else { + type = "property"; + kind = icalenum_property_kind_to_string(record->property); + } + + snprintf(temp, TMP_BUF_SIZE, + "Failed iTIP restrictions for %s %s. " + "Expected %s instances of the %s and got %d", + kind, type, restr_string_map[restr], type, count); + errParam = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); + errProp = icalproperty_vanew_xlicerror(temp, errParam, 0); + icalcomponent_add_property(comp, errProp); + icalproperty_free(errProp); + } + + if (record->function != NULL && + (prop || record->subcomponent != ICAL_NO_COMPONENT)) { + funcr = record->function(record, comp, prop); + } + if (funcr != 0) { + icalproperty *errProp; + icalparameter *errParam; + + errParam = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); + errProp = icalproperty_vanew_xlicerror(funcr, errParam, 0); + icalcomponent_add_property(comp, errProp); + icalproperty_free(errProp); + + compare = 0; + } + + return compare; +} + +static int icalrestriction_check_component(icalproperty_method method, + icalcomponent *comp) +{ + icalcomponent_kind comp_kind, inner_kind; + icalproperty_kind prop_kind; + const icalrestriction_record *start_record; + icalproperty *method_prop = NULL; + icalcomponent *inner_comp; int count; int compare; int valid = 1; comp_kind = icalcomponent_isa(comp); + switch (comp_kind) { + case ICAL_VCALENDAR_COMPONENT: + /* Get the Method value from the component */ + method_prop = icalcomponent_get_first_property(comp, ICAL_METHOD_PROPERTY); + break; + + case ICAL_VTIMEZONE_COMPONENT: + method = ICAL_METHOD_NONE; + break; + + default: + break; + } + /* Check all of the properties in this component */ - for (kind = ICAL_ANY_PROPERTY + 1; kind != ICAL_NO_PROPERTY; kind++) { - count = icalcomponent_count_properties(comp, kind); + start_record = icalrestriction_get_restriction(NULL, method, comp_kind, + ICAL_ANY_PROPERTY, + ICAL_NO_COMPONENT); - prop_record = icalrestriction_get_property_restriction(method, comp_kind, kind); + for (prop_kind = ICAL_ANY_PROPERTY + 1; + prop_kind != ICAL_NO_PROPERTY; prop_kind++) { - restr = prop_record->restriction; + const icalrestriction_record *record = + icalrestriction_get_restriction(start_record, method, comp_kind, + prop_kind, ICAL_NO_COMPONENT); - if (restr == ICAL_RESTRICTION_ONEEXCLUSIVE || restr == ICAL_RESTRICTION_ONEMUTUAL) { + icalproperty *prop = icalcomponent_get_first_property(comp, prop_kind); - /* First treat is as a 0/1 restriction */ - restr = ICAL_RESTRICTION_ZEROORONE; - compare = icalrestriction_compare(restr, count); + count = icalcomponent_count_properties(comp, prop_kind); - } else { + compare = _check_restriction(comp, record, count, prop); - compare = icalrestriction_compare(restr, count); - } + valid = valid && compare; + } - assert(compare != -1); + /* Now check the inner components */ - if (compare == 0) { -#define TMP_BUF_SIZE 1024 - char temp[TMP_BUF_SIZE]; - icalproperty *errProp; - icalparameter *errParam; - - snprintf(temp, TMP_BUF_SIZE, - "Failed iTIP restrictions for %s property. " - "Expected %s instances of the property and got %d", - icalenum_property_kind_to_string(kind), restr_string_map[restr], count); - errParam = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); - errProp = icalproperty_vanew_xlicerror(temp, errParam, 0); - icalcomponent_add_property(comp, errProp); - icalproperty_free(errProp); - } + start_record = icalrestriction_get_restriction(start_record, method, comp_kind, + ICAL_NO_PROPERTY, + ICAL_ANY_COMPONENT); - prop = icalcomponent_get_first_property(comp, kind); + for (inner_kind = ICAL_NO_COMPONENT + 3; + inner_kind != ICAL_NUM_COMPONENT_TYPES; inner_kind++) { - if (prop != 0 && prop_record->function != NULL) { - funcr = prop_record->function(prop_record, comp, prop); - } + const icalrestriction_record *record = + icalrestriction_get_restriction(start_record, method, comp_kind, + ICAL_NO_PROPERTY, inner_kind); - if (funcr != 0) { - icalproperty *errProp; - icalparameter *errParam; + inner_comp = icalcomponent_get_first_component(comp, inner_kind); - errParam = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); - errProp = icalproperty_vanew_xlicerror(funcr, errParam, 0); - icalcomponent_add_property(comp, errProp); - icalproperty_free(errProp); + count = icalcomponent_count_components(comp, inner_kind); - compare = 0; - } + compare = _check_restriction(comp, record, count, NULL); valid = valid && compare; } + if (method_prop == 0) { + method = ICAL_METHOD_NONE; + } else { + method = icalproperty_get_method(method_prop); + } + + for (inner_comp = icalcomponent_get_first_component(comp, ICAL_ANY_COMPONENT); + inner_comp != 0; + inner_comp = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT)) { + + valid = valid && icalrestriction_check_component(method, inner_comp); + } + return valid; } int icalrestriction_check(icalcomponent *outer_comp) { icalcomponent_kind comp_kind; - icalproperty_method method; - icalcomponent *inner_comp; - icalproperty *method_prop; int valid; icalerror_check_arg_rz((outer_comp != 0), "outer comp"); - /* Get the Method value from the outer component */ - comp_kind = icalcomponent_isa(outer_comp); if (comp_kind != ICAL_VCALENDAR_COMPONENT) { @@ -389,43 +458,35 @@ int icalrestriction_check(icalcomponent *outer_comp) return 0; } - method_prop = icalcomponent_get_first_property(outer_comp, ICAL_METHOD_PROPERTY); - - if (method_prop == 0) { - method = ICAL_METHOD_NONE; - } else { - method = icalproperty_get_method(method_prop); - } - /* Check the VCALENDAR wrapper */ valid = icalrestriction_check_component(ICAL_METHOD_NONE, outer_comp); - /* Now check the inner components */ - - for (inner_comp = icalcomponent_get_first_component(outer_comp, ICAL_ANY_COMPONENT); - inner_comp != 0; - inner_comp = icalcomponent_get_next_component(outer_comp, ICAL_ANY_COMPONENT)) { - valid = valid && icalrestriction_check_component(method, inner_comp); - } - return valid; } -static const icalrestriction_property_record *icalrestriction_get_property_restriction( - icalproperty_method method, icalcomponent_kind component, icalproperty_kind property) +static const icalrestriction_record *icalrestriction_get_restriction( + const icalrestriction_record *start, + icalproperty_method method, icalcomponent_kind component, + icalproperty_kind property, icalcomponent_kind subcomp) { - int i; + const icalrestriction_record *rec; + + if (!start) { + start = &icalrestriction_records[0]; + } - for (i = 0; icalrestriction_property_records[i].restriction != ICAL_RESTRICTION_NONE; i++) { + for (rec = start; rec && rec->restriction != ICAL_RESTRICTION_NONE; rec++) { - if (method == icalrestriction_property_records[i].method && - component == icalrestriction_property_records[i].component && - property == icalrestriction_property_records[i].property) { - return &icalrestriction_property_records[i]; + if (method == rec->method && + (component == ICAL_ANY_COMPONENT || + (component == rec->component && + (property == ICAL_ANY_PROPERTY || property == rec->property) && + (subcomp == ICAL_ANY_COMPONENT || subcomp == rec->subcomponent)))) { + return rec; } } - return &null_prop_record; + return &null_restriction_record; } -- cgit v1.2.1 From f3679ccc791df28e617971ee55eb12aa81e224f6 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 10 Jan 2022 09:30:54 -0500 Subject: icalrestriction.c.in: make sure we always recurse into child components --- src/libical/icalrestriction.c.in | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index e880a310..8e0cb1d3 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -438,7 +438,9 @@ static int icalrestriction_check_component(icalproperty_method method, inner_comp != 0; inner_comp = icalcomponent_get_next_component(comp, ICAL_ANY_COMPONENT)) { - valid = valid && icalrestriction_check_component(method, inner_comp); + compare = icalrestriction_check_component(method, inner_comp); + + valid = valid && compare; } return valid; -- cgit v1.2.1 From df8e57fc5e78c078623b3d54d006cad56d5df333 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 10 Jan 2022 12:17:02 -0500 Subject: icalrestriction.c.in: add checks for mandatory components in VCALENADR and VTIMEZONE --- src/libical/icalrestriction.c.in | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index 8e0cb1d3..ee279d36 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -364,6 +364,7 @@ static int icalrestriction_check_component(icalproperty_method method, const icalrestriction_record *start_record; icalproperty *method_prop = NULL; icalcomponent *inner_comp; + const char *errStr = NULL; int count; int compare; int valid = 1; @@ -372,11 +373,24 @@ static int icalrestriction_check_component(icalproperty_method method, switch (comp_kind) { case ICAL_VCALENDAR_COMPONENT: - /* Get the Method value from the component */ + if (!icalcomponent_get_first_real_component(comp)) { + + errStr = "Failed iTIP restrictions for VCALENDAR component. " + "Expected one or more \"real\" sub-components and got 0"; + } + + /* Get the Method property from the component */ method_prop = icalcomponent_get_first_property(comp, ICAL_METHOD_PROPERTY); break; case ICAL_VTIMEZONE_COMPONENT: + if (!icalcomponent_get_first_component(comp, ICAL_XSTANDARD_COMPONENT) && + !icalcomponent_get_first_component(comp, ICAL_XDAYLIGHT_COMPONENT)) { + + errStr = "Failed iTIP restrictions for VTIMEZONE component. " + "Expected one or more STANDARD/DAYLIGHT sub-components and got 0"; + } + method = ICAL_METHOD_NONE; break; @@ -384,6 +398,18 @@ static int icalrestriction_check_component(icalproperty_method method, break; } + if (errStr != NULL) { + icalproperty *errProp; + icalparameter *errParam; + + errParam = icalparameter_new_xlicerrortype(ICAL_XLICERRORTYPE_INVALIDITIP); + errProp = icalproperty_vanew_xlicerror(errStr, errParam, 0); + icalcomponent_add_property(comp, errProp); + icalproperty_free(errProp); + + valid = 0; + } + /* Check all of the properties in this component */ start_record = icalrestriction_get_restriction(NULL, method, comp_kind, -- cgit v1.2.1 From ccac39c85b051569dbb384141d4dea6d928200da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Tue, 4 Jan 2022 17:11:56 +0200 Subject: =?UTF-8?q?icalcomponent=5Fget=5Fduration()=20=E2=80=94=20calculat?= =?UTF-8?q?e=20the=20duration=20differently=20for=20VEVENT=20and=20VTODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit icalcomponent_get_dtend() — return null-time, unless called on VEVENT, VAVAILABILITY or VFREEBUSY. --- ReleaseNotes.txt | 2 ++ src/libical/icalcomponent.c | 68 +++++++++++++++++++++++++++++++++++---------- src/libical/icalcomponent.h | 20 ++++++++----- src/test/regression.c | 61 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 22 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 157c14e8..a6ee06a7 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -39,6 +39,8 @@ Version 3.1.0 (NOT RELEASED YET): (were in the public headers but not used at all) + struct icaltimezonetype + struct icaltimezonephase + * 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 Version 3.0.13 (UNRELEASED): ---------------------------- diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 33010449..7c626082 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -1406,10 +1406,23 @@ struct icaltimetype icalcomponent_get_dtstart(icalcomponent *comp) 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) { @@ -1426,13 +1439,17 @@ struct icaltimetype icalcomponent_get_dtend(icalcomponent *comp) 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 */ @@ -1488,12 +1505,32 @@ void icalcomponent_set_duration(icalcomponent *comp, struct icaldurationtype v) 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); @@ -1505,15 +1542,16 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp) * 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 --git a/src/libical/icalcomponent.h b/src/libical/icalcomponent.h index 8b68c5e7..6a182d01 100644 --- a/src/libical/icalcomponent.h +++ b/src/libical/icalcomponent.h @@ -281,6 +281,13 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icalcomponent_get_dtstart(icalcomponent * 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); @@ -345,15 +352,14 @@ LIBICAL_ICAL_EXPORT void icalcomponent_set_duration(icalcomponent *comp, /** @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 --git a/src/test/regression.c b/src/test/regression.c index 98bf2e15..0963d37c 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -5009,6 +5009,66 @@ static void test_vcc_vcard_parse(void) 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) @@ -5154,6 +5214,7 @@ int main(int argc, char *argv[]) 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... **/ -- cgit v1.2.1 From 19e0baaa50deebdfc4368ca0a4216f71b5998bce Mon Sep 17 00:00:00 2001 From: Nicolas Fella Date: Sun, 10 Oct 2021 23:54:19 +0200 Subject: Add include path to the exported target definition Otherwise the libical headers are not found by consumers if libical is installed in a non-standard location --- src/libical/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index 9d8b51ee..47d11309 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -265,6 +265,8 @@ elseif(STATIC_ONLY) add_library(ical-static ALIAS ical) endif() +target_include_directories(ical INTERFACE "$") + target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT}) if(ICU_FOUND) -- cgit v1.2.1 From d7e46baed224ca54e448fd506c9271e7da21b28f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B8=D0=BB=D1=8F=D0=BD=20=D0=9F=D0=B0=D0=BB=D0=B0?= =?UTF-8?q?=D1=83=D0=B7=D0=BE=D0=B2?= Date: Tue, 4 Jan 2022 17:11:56 +0200 Subject: =?UTF-8?q?icalcomponent=5Fget=5Fduration()=20=E2=80=94=20calculat?= =?UTF-8?q?e=20the=20duration=20differently=20for=20VEVENT=20and=20VTODO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit icalcomponent_get_dtend() — return null-time, unless called on VEVENT, VAVAILABILITY or VFREEBUSY. --- ReleaseNotes.txt | 3 +- src/libical/icalcomponent.c | 68 +++++++++++++++++++++++++++++++++++---------- src/libical/icalcomponent.h | 20 ++++++++----- src/test/regression.c | 61 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 129 insertions(+), 23 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index cd82f85c..c7bd29de 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -3,7 +3,8 @@ Release Highlights Version 3.0.13 (UNRELEASED): ---------------------------- - * + * 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 Version 3.0.12 (08 December 2021): ---------------------------------- diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 1a3655b9..dc085709 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -1337,10 +1337,23 @@ struct icaltimetype icalcomponent_get_dtstart(icalcomponent *comp) 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 @@ struct icaltimetype icalcomponent_get_dtend(icalcomponent *comp) 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 @@ void icalcomponent_set_duration(icalcomponent *comp, struct icaldurationtype v) 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 @@ struct icaldurationtype icalcomponent_get_duration(icalcomponent *comp) * 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 --git a/src/libical/icalcomponent.h b/src/libical/icalcomponent.h index 5e44fe26..70533a34 100644 --- a/src/libical/icalcomponent.h +++ b/src/libical/icalcomponent.h @@ -263,6 +263,13 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icalcomponent_get_dtstart(icalcomponent * 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 @@ LIBICAL_ICAL_EXPORT void icalcomponent_set_duration(icalcomponent *comp, /** @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 --git a/src/test/regression.c b/src/test/regression.c index 41171169..076922b5 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4772,6 +4772,66 @@ static void test_vcc_vcard_parse(void) 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 @@ int main(int argc, char *argv[]) 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... **/ -- cgit v1.2.1 From 905cbb44d02c8e8f922099432cc6b6a1beeddd88 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 09:35:17 -0500 Subject: buildsystem - replace our ancient FindBDB with more modern FindBerkeleyDB Copied from https://github.com/sum01/FindBerkeleyDB This file has an "unlicense" --- .krazy | 2 +- CMakeLists.txt | 12 ++- ReleaseNotes.txt | 1 + cmake/modules/FindBerkeleyDB.cmake | 184 +++++++++++++++++++++++++++++++++++++ 4 files changed, 194 insertions(+), 5 deletions(-) create mode 100644 cmake/modules/FindBerkeleyDB.cmake diff --git a/.krazy b/.krazy index 6a4b02b9..73637b29 100644 --- a/.krazy +++ b/.krazy @@ -30,7 +30,7 @@ SKIP /src/libical/caldate\.c 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 --git a/CMakeLists.txt b/CMakeLists.txt index 9553cbf5..8f9df2be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -235,19 +235,23 @@ if(ICU_FOUND) endif() # compile in Berkeley DB support -find_package(BDB) -set_package_properties(BDB PROPERTIES +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 --git a/ReleaseNotes.txt b/ReleaseNotes.txt index c7bd29de..2be88400 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -5,6 +5,7 @@ Version 3.0.13 (UNRELEASED): ---------------------------- * 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) Version 3.0.12 (08 December 2021): ---------------------------------- diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake new file mode 100644 index 00000000..f2d0a658 --- /dev/null +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -0,0 +1,184 @@ +# Author: sum01 +# 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 +# + +# 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_HINTS "$ENV{BERKELEYDB_ROOT}") +elseif(NOT "$ENV{Berkeleydb_ROOT}" STREQUAL "") + set(_BERKELEYDB_HINTS "$ENV{Berkeleydb_ROOT}") +elseif(NOT "$ENV{BERKELEYDBROOT}" STREQUAL "") + set(_BERKELEYDB_HINTS "$ENV{BERKELEYDBROOT}") +else() + # Set just in case, as it's used regardless if it's empty or not + set(_BERKELEYDB_HINTS "") +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_HINTS "${_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_HINTS} + PATH_SUFFIXES "include" "includes" + PATHS ${_BERKELEYDB_PATHS} +) + +# 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_HINTS} + PATH_SUFFIXES "lib" "lib64" "libs" "libs64" + PATHS ${_BERKELEYDB_PATHS} + ) + # 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}]]" +) -- cgit v1.2.1 From 9222bbc947c12dd5326cdfcaa8706a112e315822 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 11:06:22 -0500 Subject: config.h.cmake, icalbdbset.c - fix compile with BDB on Windows now that we can find BerkeleyDB on Windows we ran into a couple of compile errors. --- config.h.cmake | 2 ++ src/libicalss/icalbdbset.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/config.h.cmake b/config.h.cmake index b7e1d5c9..43767758 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -211,8 +211,10 @@ typedef unsigned long size_t; /* 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 --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index 81c6e21f..1ce28980 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -83,7 +83,11 @@ int icalbdbset_init_dbenv(char *db_env_dir, 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) //krazy2: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); */ -- cgit v1.2.1 From 9f682cebf30561a4412b13836477b1ff45231dea Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 11:08:39 -0500 Subject: src/libicalss/icalbdbset.c - fix the Krazy exclude --- src/libicalss/icalbdbset.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index 1ce28980..773c20b5 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -83,7 +83,7 @@ int icalbdbset_init_dbenv(char *db_env_dir, 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) //krazy2:exclude=cpp +#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); -- cgit v1.2.1 From e4aea4dc7c23f58bfdf7fa00a7c32f8837236f5f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 11:19:11 -0500 Subject: src/test/regression-component.c - fix compile warning implicit conversion from time_t to int --- src/test/regression-component.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/regression-component.c b/src/test/regression-component.c index 311cf1f8..caed9af4 100644 --- a/src/test/regression-component.c +++ b/src/test/regression-component.c @@ -448,7 +448,7 @@ void test_icalcomponent_get_span() 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 -- cgit v1.2.1 From 5321c56b584aa39b39c449656dd31649a5824861 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 11:43:01 -0500 Subject: CMakeLists.txt - Mac provided ICU doesn't have development files The MacOS provided ICU doesn't provide a developer SDK. Therefore we set a default ICU_ROOT to look in the homebrew. ICU_ROOT can be overridden by user to look elsewhere. --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f9df2be..bad4fcdc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -199,6 +199,12 @@ endif() 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") #look for the homebrew version first + endif() +endif() find_package(ICU COMPONENTS uc i18n) set_package_properties(ICU PROPERTIES TYPE RECOMMENDED -- cgit v1.2.1 From 4f0a0b6470a821ae186ac5451e55d30417eab80a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 12:19:08 -0500 Subject: CMakeLists.txt - Apple Xcodec provided BDB doesn't work here The Apple Xcode provided db doesn't work in our code. Therefore, set a default BerekelyDB_ROOT_DIR to look in homebrew. BerekelyDB_ROOT_DIR can be overridden by user to look elsewhere. --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bad4fcdc..dad87cda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,7 +202,7 @@ 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") #look for the homebrew version first + set(ICU_ROOT "/usr/local/opt/icu4c") endif() endif() find_package(ICU COMPONENTS uc i18n) @@ -241,6 +241,12 @@ if(ICU_FOUND) endif() # compile in Berkeley DB support +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 -- cgit v1.2.1 From 2000285cf2b5544450b6181fe208aa01cd3265bb Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 12:23:02 -0500 Subject: cmake/modules/FindBerkeleyDB.cmake - fix searching with find_paths modern CMake uses HINTS to find files --- cmake/modules/FindBerkeleyDB.cmake | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index f2d0a658..401a36c4 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -29,14 +29,14 @@ # Checks if environment paths are empty, set them if they aren't if(NOT "$ENV{BERKELEYDB_ROOT}" STREQUAL "") - set(_BERKELEYDB_HINTS "$ENV{BERKELEYDB_ROOT}") + set(_BERKELEYDB_PATHS "$ENV{BERKELEYDB_ROOT}") elseif(NOT "$ENV{Berkeleydb_ROOT}" STREQUAL "") - set(_BERKELEYDB_HINTS "$ENV{Berkeleydb_ROOT}") + set(_BERKELEYDB_PATHS "$ENV{Berkeleydb_ROOT}") elseif(NOT "$ENV{BERKELEYDBROOT}" STREQUAL "") - set(_BERKELEYDB_HINTS "$ENV{BERKELEYDBROOT}") + set(_BERKELEYDB_PATHS "$ENV{BERKELEYDBROOT}") else() # Set just in case, as it's used regardless if it's empty or not - set(_BERKELEYDB_HINTS "") + set(_BERKELEYDB_PATHS "") endif() # Allow user to pass a path instead of guessing @@ -46,7 +46,7 @@ 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_HINTS "${_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/ @@ -75,9 +75,8 @@ endif() # Find includes path find_path(BerkeleyDB_INCLUDE_DIRS NAMES "db.h" - HINTS ${_BERKELEYDB_HINTS} + HINTS ${_BERKELEYDB_PATHS} PATH_SUFFIXES "include" "includes" - PATHS ${_BERKELEYDB_PATHS} ) # Checks if the version file exists, save the version file to a var, and fail if there's no version file @@ -123,9 +122,8 @@ macro(findpackage_berkeleydb_get_lib _BERKELEYDB_OUTPUT_VARNAME _TARGET_BERKELEY "lib${_TARGET_BERKELEYDB_LIB}${BerkeleyDB_VERSION_MAJOR}" "lib${_TARGET_BERKELEYDB_LIB}-${BerkeleyDB_VERSION_MAJOR}" "lib${_TARGET_BERKELEYDB_LIB}_${BerkeleyDB_VERSION_MAJOR}" - HINTS ${_BERKELEYDB_HINTS} + HINTS ${_BERKELEYDB_PATHS} PATH_SUFFIXES "lib" "lib64" "libs" "libs64" - PATHS ${_BERKELEYDB_PATHS} ) # If the library was found, add it to our list of libraries if(${_BERKELEYDB_OUTPUT_VARNAME}) -- cgit v1.2.1 From 9219d438960f8b668000e906c83a64d297e70503 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 12:34:38 -0500 Subject: ReleaseNotes.txt - add blurb about BDB and ICU discovery on Mac --- ReleaseNotes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 2be88400..b1cbe812 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -6,6 +6,7 @@ Version 3.0.13 (UNRELEASED): * 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): ---------------------------------- -- cgit v1.2.1 From d3ed9471f7fcffea1cecaadf4e185a175163dfcf Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 16 Jan 2022 12:41:09 -0500 Subject: README.md becomes the definite "readme" no more symlink to the .txt version --- README.md | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ReadMe.md | 1 - ReadMe.txt | 100 ----------------------------------------------------------- 3 files changed, 102 insertions(+), 101 deletions(-) create mode 100644 README.md delete mode 120000 ReadMe.md delete mode 100644 ReadMe.txt diff --git a/README.md b/README.md new file mode 100644 index 00000000..698a027e --- /dev/null +++ b/README.md @@ -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 , 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 +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 +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 + + +For general discussions about libical and related projects + + +Report bugs to our issue tracker at + diff --git a/ReadMe.md b/ReadMe.md deleted file mode 120000 index 3cefeef2..00000000 --- a/ReadMe.md +++ /dev/null @@ -1 +0,0 @@ -ReadMe.txt \ No newline at end of file diff --git a/ReadMe.txt b/ReadMe.txt deleted file mode 100644 index bcbc1654..00000000 --- a/ReadMe.txt +++ /dev/null @@ -1,100 +0,0 @@ -# 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 , 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 -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 -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 - - -For general discussions about libical and related projects - - -Report bugs to our issue tracker at - -- cgit v1.2.1 From a8034ce04de60d71bbcd2c6bd0df7056160007c9 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 17 Jan 2022 10:19:56 -0500 Subject: ReleaseNotes.txt - update for release 3.0.13 --- ReleaseNotes.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index b1cbe812..db84624a 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,8 +1,8 @@ Release Highlights ================== -Version 3.0.13 (UNRELEASED): ----------------------------- +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) -- cgit v1.2.1 From a4a00e7a56e306e0375f443643963e9d0f9c6762 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 17 Jan 2022 12:21:34 -0500 Subject: CMakeLists.txt, ReleaseNotes.txt - this will be become 3.0.14 --- CMakeLists.txt | 2 +- ReleaseNotes.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dad87cda..762f7f4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,7 +112,7 @@ endif() set(LIBICAL_LIB_MAJOR_VERSION "3") set(LIBICAL_LIB_MINOR_VERSION "0") -set(LIBICAL_LIB_PATCH_VERSION "13") +set(LIBICAL_LIB_PATCH_VERSION "14") set(LIBICAL_LIB_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}" ) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index db84624a..e69bb845 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,6 +1,10 @@ Release Highlights ================== +Version 3.0.13 (UNRELEASED): +---------------------------- + * + Version 3.0.13 (17 January 2022): --------------------------------- * icalcomponent_get_dtend() return icaltime_null_time(), unless called on VEVENT, VAVAILABILITY or VFREEBUSY -- cgit v1.2.1 From 7e7d5b270200ea73e1460b611e9c6363d8f6f3cb Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 17 Jan 2022 12:28:11 -0500 Subject: ReleaseNotes.txt - fix typo --- ReleaseNotes.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index e69bb845..c74d5198 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,7 +1,7 @@ Release Highlights ================== -Version 3.0.13 (UNRELEASED): +Version 3.0.14 (UNRELEASED): ---------------------------- * -- cgit v1.2.1 From f82b6b53d71e33149c3d1fa2cb000b44206dab56 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 17 Jan 2022 15:00:29 -0500 Subject: icalrestriction.c.in: remove unused assignment --- src/libical/icalrestriction.c.in | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index ee279d36..533ac0fa 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -445,8 +445,6 @@ static int icalrestriction_check_component(icalproperty_method method, icalrestriction_get_restriction(start_record, method, comp_kind, ICAL_NO_PROPERTY, inner_kind); - inner_comp = icalcomponent_get_first_component(comp, inner_kind); - count = icalcomponent_count_components(comp, inner_kind); compare = _check_restriction(comp, record, count, NULL); -- cgit v1.2.1 From 58f1ea33d94d875a1a1c4f5296c7350943caad79 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 17 Jan 2022 16:22:58 -0500 Subject: icalrestriction.c.in: no need to iterate all props/comps if no restriction for method/comp --- src/libical/icalrestriction.c.in | 41 +++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index 533ac0fa..a213a741 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -416,20 +416,24 @@ static int icalrestriction_check_component(icalproperty_method method, ICAL_ANY_PROPERTY, ICAL_NO_COMPONENT); - for (prop_kind = ICAL_ANY_PROPERTY + 1; - prop_kind != ICAL_NO_PROPERTY; prop_kind++) { + if (start_record != &null_restriction_record) { - const icalrestriction_record *record = - icalrestriction_get_restriction(start_record, method, comp_kind, - prop_kind, ICAL_NO_COMPONENT); + for (prop_kind = ICAL_ANY_PROPERTY + 1; + prop_kind != ICAL_NO_PROPERTY; prop_kind++) { - icalproperty *prop = icalcomponent_get_first_property(comp, prop_kind); + const icalrestriction_record *record = + icalrestriction_get_restriction(start_record, method, comp_kind, + prop_kind, ICAL_NO_COMPONENT); - count = icalcomponent_count_properties(comp, prop_kind); + icalproperty *prop = + icalcomponent_get_first_property(comp, prop_kind); - compare = _check_restriction(comp, record, count, prop); + count = icalcomponent_count_properties(comp, prop_kind); - valid = valid && compare; + compare = _check_restriction(comp, record, count, prop); + + valid = valid && compare; + } } /* Now check the inner components */ @@ -438,18 +442,21 @@ static int icalrestriction_check_component(icalproperty_method method, ICAL_NO_PROPERTY, ICAL_ANY_COMPONENT); - for (inner_kind = ICAL_NO_COMPONENT + 3; - inner_kind != ICAL_NUM_COMPONENT_TYPES; inner_kind++) { + if (start_record != &null_restriction_record) { - const icalrestriction_record *record = - icalrestriction_get_restriction(start_record, method, comp_kind, - ICAL_NO_PROPERTY, inner_kind); + for (inner_kind = ICAL_NO_COMPONENT + 3; + inner_kind != ICAL_NUM_COMPONENT_TYPES; inner_kind++) { - count = icalcomponent_count_components(comp, inner_kind); + const icalrestriction_record *record = + icalrestriction_get_restriction(start_record, method, comp_kind, + ICAL_NO_PROPERTY, inner_kind); - compare = _check_restriction(comp, record, count, NULL); + count = icalcomponent_count_components(comp, inner_kind); - valid = valid && compare; + compare = _check_restriction(comp, record, count, NULL); + + valid = valid && compare; + } } if (method_prop == 0) { -- cgit v1.2.1 From bd5b3660223386f69ea056c9e95a42d447162bf3 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 09:06:17 -0500 Subject: Add/update: VALARM Extensions (RFC 9074) properties, parameters, values --- design-data/parameters.csv | 2 +- design-data/params-in-prop.txt | 1 + design-data/properties.csv | 3 ++- design-data/value-types.csv | 2 ++ 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/design-data/parameters.csv b/design-data/parameters.csv index 21696b8c..f0e7e17f 100644 --- a/design-data/parameters.csv +++ b/design-data/parameters.csv @@ -15,7 +15,7 @@ "PARTSTAT","20","icalparameter_partstat","X=20600;NEEDS-ACTION;ACCEPTED;DECLINED;TENTATIVE;DELEGATED;COMPLETED;INPROCESS;FAILED;NONE=20699" "RANGE","21","icalparameter_range","X=20700;THISANDPRIOR;THISANDFUTURE;NONE=20799" "RELATED","22","icalparameter_related","X=20800;START;END;NONE=20899" -"RELTYPE","23","icalparameter_reltype","X=20900;PARENT;CHILD;SIBLING;POLL;NONE=20999" +"RELTYPE","23","icalparameter_reltype","X=20900;PARENT;CHILD;SIBLING;POLL;SNOOZE;NONE=20999" "ROLE","24","icalparameter_role","X=21100;CHAIR;REQ-PARTICIPANT;OPT-PARTICIPANT;NON-PARTICIPANT;NONE=21199" "RSVP","25","icalparameter_rsvp","X=21200;TRUE;FALSE;NONE=21299" "SENT-BY","26","const char*", diff --git a/design-data/params-in-prop.txt b/design-data/params-in-prop.txt index d455e231..ca1288b1 100644 --- a/design-data/params-in-prop.txt +++ b/design-data/params-in-prop.txt @@ -77,3 +77,4 @@ PATCH-ORDER X PATCH-TARGET X PATCH-DELETE X PATCH-PARAMETER ANY +PROXIMITY X diff --git a/design-data/properties.csv b/design-data/properties.csv index 7e36ded7..6facf479 100644 --- a/design-data/properties.csv +++ b/design-data/properties.csv @@ -109,8 +109,9 @@ "X-LIC-CLASS","91","X-LIC-CLASS","X-LIC-CLASS" "ANY","0","NO","NO" "NO","100","NO","NO" -"#VALARM Extension Properties","draft-daboo-valarm-extensions Section 13.1", +"#VALARM Extension Properties", "RFC 9073 Sections 6.1, 8.1", "ACKNOWLEDGED","1","DATE-TIME","DATE-TIME" +"PROXIMITY","126","PROXIMITY","PROXIMITY" "#VAVAILABILITY Properties","RFC 7953 Section 3.2", "BUSYTYPE","101","BUSYTYPE","BUSYTYPE" "#VPOLL Properties","draft-york-vpoll", diff --git a/design-data/value-types.csv b/design-data/value-types.csv index 3e628344..a1854927 100644 --- a/design-data/value-types.csv +++ b/design-data/value-types.csv @@ -44,6 +44,8 @@ "POLLCOMPLETION","5034","(a)enum icalproperty_pollcompletion","string","unitary","X=10600;SERVER;SERVER-SUBMIT;SERVER-CHOICE;CLIENT;NONE=10699" "#Task Extension types","draft-apthorp-ical-tasks",,, "TASKMODE","5035","(a)enum icalproperty_taskmode","string","unitary","X=11200;AUTOMATIC-COMPLETION;AUTOMATIC-FAILURE;AUTOMATIC-STATUS;NONE=11299" +"#VALARM Extension types","RFC 9074 Section 8.1",,, +"PROXIMITY","5036","(a)enum icalproperty_proximity","string","unitary","X=11300;ARRIVE;DEPART;CONNECT;DISCONNECT;NONE=11399" "#NOTE for updaters. Preserve the icalvalue_kind Enum values and property Enum values to aid forward compatibility" "# New Enum values for an existing icalvalue_kind should be inserted before the corresponding NONE value" "# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11299)" -- cgit v1.2.1 From 104b8c316acc13cfc04563860965a45dd5f66e30 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 09:16:28 -0500 Subject: value-types.csv: fix comment --- design-data/value-types.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/design-data/value-types.csv b/design-data/value-types.csv index a1854927..a4f2819b 100644 --- a/design-data/value-types.csv +++ b/design-data/value-types.csv @@ -48,4 +48,4 @@ "PROXIMITY","5036","(a)enum icalproperty_proximity","string","unitary","X=11300;ARRIVE;DEPART;CONNECT;DISCONNECT;NONE=11399" "#NOTE for updaters. Preserve the icalvalue_kind Enum values and property Enum values to aid forward compatibility" "# New Enum values for an existing icalvalue_kind should be inserted before the corresponding NONE value" -"# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11299)" +"# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11399)" -- cgit v1.2.1 From 8694583714d16455c63fc9713de3ea0784275cc8 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 09:21:26 -0500 Subject: parameters.csv: add blank lines for readability --- design-data/parameters.csv | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/design-data/parameters.csv b/design-data/parameters.csv index f0e7e17f..a76e6516 100644 --- a/design-data/parameters.csv +++ b/design-data/parameters.csv @@ -24,10 +24,12 @@ "X","29","const char*", "X-LIC-ERRORTYPE","31","icalparameter_xlicerrortype","X=21800;COMPONENT-PARSE-ERROR;PROPERTY-PARSE-ERROR;PARAMETER-NAME-PARSE-ERROR;PARAMETER-VALUE-PARSE-ERROR;VALUE-PARSE-ERROR;INVALID-ITIP;UNKNOWN-VCAL-PROP-ERROR;MIME-PARSE-ERROR;VCAL-PROP-PARSE-ERROR;NONE=21899" "X-LIC-COMPARETYPE","30","icalparameter_xliccomparetype","X=21700;EQUAL;NOTEQUAL;LESS;GREATER;LESSEQUAL;GREATEREQUAL;REGEX;ISNULL;ISNOTNULL;NONE=21799" + "#Parameters from Scheduling Extensions to CalDAV (RFC 6638)" "SCHEDULE-AGENT","34","icalparameter_scheduleagent","X=21300;SERVER;CLIENT;NONE=21399" "SCHEDULE-FORCE-SEND","35","icalparameter_scheduleforcesend","X=21400;REQUEST;REPLY;NONE=21499" "SCHEDULE-STATUS","36","const char*", + "#CAP Parameters","Draft 8", "#this parameter should really be called ACTION, but this conflicts with the ACTION property" "ACTIONPARAM","1","icalparameter_action","X=20000;ASK;ABORT;NONE=20099" @@ -38,30 +40,37 @@ "LOCALIZE","17","const char*", "OPTIONS","19","const char*", "NO","32",, + "#In practice any unknown parameter that is not an xparam is treated as an ianaparam" "IANA","33","const char*", "ANY","0",, + "#VPOLL Parameters","draft-york-vpoll","PUBLIC-COMMENT and RESPONSE are deprecated" "PUBLIC-COMMENT","37","const char*", "RESPONSE","38","int", "REQUIRED","43","icalparameter_required","X=21000;TRUE;FALSE;NONE=21099" "STAY-INFORMED","39","icalparameter_stayinformed","X=21500;TRUE;FALSE;NONE=21599" + "#CalDAV Managed Attachment Parameters","draft-ietf-calext-caldav-attachments" "MANAGED-ID","40","const char*", "SIZE","41","const char*", "FILENAME","42","const char*", + "#Task Extension Parameters","draft-apthorp-ical-tasks" "REASON","43","const char*", "MODIFIED","44","const char*", "SUBSTATE","45","icalparameter_substate",X=21900;OK;ERROR;SUSPENDED;NONE=21999", + "#Parameters from New Properties for iCalendar","RFC 7986 Section 6" "DISPLAY","46","icalparameter_display",X=22000;BADGE;GRAPHIC;FULLSIZE;THUMBNAIL;NONE=22099", "EMAIL","47","const char*", "FEATURE","48","icalparameter_feature",X=22100;AUDIO;CHAT;FEED;MODERATOR;PHONE;SCREEN;VIDEO;NONE=22199", "LABEL","49","const char*", "EMAIL","50","const char*", + "#VPATCH Extension Parameters","draft-daboo-icalendar-vpatch" "PATCH-ACTION","51","icalparameter_patchaction",X=22200;CREATE;BYNAME;BYVALUE;BYPARAM;NONE=22299", + "#NOTE for updaters. Preserve the icalparameter_kind Enum values to aid forward compatibility" "# New Enum values for an existing icalparameter_kind should be inserted before the corresponding NONE value" "# New icalparamter_kind types should start their Enum value after the highest NONE value (currently 22299)" -- cgit v1.2.1 From bc239c7fc51229a7f8d76c2d252282abcbf78dfe Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 09:22:29 -0500 Subject: parameters.csv: add comment for RELTYPE:SNOOZE --- design-data/parameters.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/design-data/parameters.csv b/design-data/parameters.csv index a76e6516..ec2db165 100644 --- a/design-data/parameters.csv +++ b/design-data/parameters.csv @@ -15,6 +15,7 @@ "PARTSTAT","20","icalparameter_partstat","X=20600;NEEDS-ACTION;ACCEPTED;DECLINED;TENTATIVE;DELEGATED;COMPLETED;INPROCESS;FAILED;NONE=20699" "RANGE","21","icalparameter_range","X=20700;THISANDPRIOR;THISANDFUTURE;NONE=20799" "RELATED","22","icalparameter_related","X=20800;START;END;NONE=20899" +"#RELTYPE:SNOOZE from RFC9073",,, "RELTYPE","23","icalparameter_reltype","X=20900;PARENT;CHILD;SIBLING;POLL;SNOOZE;NONE=20999" "ROLE","24","icalparameter_role","X=21100;CHAIR;REQ-PARTICIPANT;OPT-PARTICIPANT;NON-PARTICIPANT;NONE=21199" "RSVP","25","icalparameter_rsvp","X=21200;TRUE;FALSE;NONE=21299" -- cgit v1.2.1 From 36af73ef4fec8013e181a1aa49eaedf09c9fbe53 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 09:28:06 -0500 Subject: properties.csv: add blank lines for readability --- design-data/properties.csv | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/design-data/properties.csv b/design-data/properties.csv index 6facf479..9714fc8f 100644 --- a/design-data/properties.csv +++ b/design-data/properties.csv @@ -1,5 +1,6 @@ ,, "#Property Name","C icalproperty_kind Enum","libical Value type","iCalendar default value",Property Flags + "#iCalendar Properties","RFC 5545 Sections 3.7 and 3.8", "CALSCALE","8","TEXT","TEXT" "METHOD","48","METHOD","METHOD" @@ -48,8 +49,10 @@ "SEQUENCE","75","INTEGER","INTEGER" "REQUEST-STATUS","70","REQUEST-STATUS","REQUEST-STATUS" "X","90","X","X",is_multivalued + "#Deprecated RFC 2445 Properties","See RFC 5545 Section A.3", "EXRULE","37","RECUR","RECUR" + "#CAP Properties","RFC 4324 Section 2.1.2", ,"FIXME","Should be BOOLEAN" "ALLOW-CONFLICT","3","TEXT","TEXT" @@ -90,6 +93,7 @@ "SCOPE","74","TEXT","TEXT" "STORES-EXPANDED","77","TEXT","TEXT" "TARGET","79","CAL-ADDRESS","CAL-ADDRESS" + "#Miscellaneous Properties","Origin Unknown", "MAXRESULTS","46","INTEGER","INTEGER" "MAXRESULTSSIZE","47","INTEGER","INTEGER" @@ -97,6 +101,7 @@ "RELCALID","68","TEXT","TEXT" "DATE-MAX","21","DATE-TIME","DATE-TIME" "DATE-MIN","22","DATE-TIME","DATE-TIME" + "#libical Internal Properties",, "X-LIC-ERROR","93","TEXT","TEXT" "X-LIC-CLUSTERCOUNT","92","STRING","STRING" @@ -109,11 +114,14 @@ "X-LIC-CLASS","91","X-LIC-CLASS","X-LIC-CLASS" "ANY","0","NO","NO" "NO","100","NO","NO" + "#VALARM Extension Properties", "RFC 9073 Sections 6.1, 8.1", "ACKNOWLEDGED","1","DATE-TIME","DATE-TIME" "PROXIMITY","126","PROXIMITY","PROXIMITY" + "#VAVAILABILITY Properties","RFC 7953 Section 3.2", "BUSYTYPE","101","BUSYTYPE","BUSYTYPE" + "#VPOLL Properties","draft-york-vpoll", "ACCEPT-RESPONSE","102","TEXT,"TEXT",is_multivalued "POLL-COMPLETION","110","POLLCOMPLETION,"POLLCOMPLETION" @@ -124,12 +132,15 @@ "REPLY-URL","111","URI,"URI" "RESPONSE","112","INTEGER,"INTEGER" "VOTER","107","CAL-ADDRESS,"CAL-ADDRESS" + "#TZdist Properties","RFC 7808 Section 7", "TZID-ALIAS-OF","108","TEXT","TEXT" "TZUNTIL","109","DATE-TIME","DATE-TIME" + "#Task Extension Properties","draft-apthorp-ical-tasks", "ESTIMATED-DURATION","113","DURATION","DURATION" "TASK-MODE","114","TASKMODE","TASKMODE" + "#New Properties for iCalendar","RFC 7986 Section 5", "NAME","115","TEXT","TEXT" "REFRESH-INTERVAL","116","DURATION","NO" @@ -137,10 +148,12 @@ "COLOR","118","TEXT","TEXT" "IMAGE","119","ATTACH","NO",is_structured "CONFERENCE","120","URI","NO" + "#VPATCH Extension Properties", "draft-daboo_icalendar-vpatch Section 4", "PATCH-VERSION","121","TEXT","TEXT" "PATCH-ORDER","122","INTEGER","INTEGER" "PATCH-TARGET","123","TEXT","TEXT" "PATCH-DELETE","124","TEXT","TEXT" "PATCH-PARAMETER","125","TEXT","TEXT" + "#NOTE for updaters. Preserve the icalproperty_kind Enum values to aid forward compatibility" -- cgit v1.2.1 From 0c3fb5d73b00eed774b7df71085910874fdb69da Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 09:57:39 -0500 Subject: value-types.csv: add blank lines for readability --- design-data/value-types.csv | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/design-data/value-types.csv b/design-data/value-types.csv index a4f2819b..1cba2fa1 100644 --- a/design-data/value-types.csv +++ b/design-data/value-types.csv @@ -13,11 +13,13 @@ "URI","5018","(a)const char*","string","unitary", "UTC-OFFSET","5029","(a)int","integer","unitary", "QUERY","5001","(a)const char*","string","unitary", + "#Non-standard multi-valued types",,,, "ATTACH","5003","(m)icalattach *","none","URI;BINARY", "DATE-TIME-DATE","5036","(m)struct icaltimetype","Time","DATE-TIME;DATE", "DATE-TIME-PERIOD","5015","(m)struct icaldatetimeperiodtype","none","DATE-TIME;DATE;PERIOD", "TRIGGER","5024","(m)struct icaltriggertype","string","DURATION;DATE-TIME", + "#Non-standard property enumeration types",,,, "#METHOD:POLLSTATUS from draft-york-vpoll",,,, "METHOD","5030","(a)enum icalproperty_method","string","unitary","X=10500;PUBLISH;REQUEST;REPLY;ADD;CANCEL;REFRESH;COUNTER;DECLINECOUNTER;CREATE;READ;RESPONSE;MOVE;MODIFY;GENERATEUID;DELETE;POLLSTATUS;NONE=10599" @@ -26,26 +28,33 @@ "STATUS","5005","(a)enum icalproperty_status","string","unitary","X=10900;TENTATIVE;CONFIRMED;COMPLETED;NEEDS-ACTION;CANCELLED;IN-PROCESS;DRAFT;FINAL;SUBMITTED;PENDING;FAILED;DELETED;NONE=10999" "TRANSP","5006","(a)enum icalproperty_transp","string","unitary","X=11000;OPAQUE;OPAQUE-NOCONFLICT;TRANSPARENT;TRANSPARENT-NOCONFLICT;NONE=11099" "CLASS","5019","(m)enum icalproperty_class","string","unitary","X=10300;PUBLIC;PRIVATE;CONFIDENTIAL;NONE=10399" + "#Other non-standard",,,, "REQUEST-STATUS","5009","(a)struct icalreqstattype","string","unitary" "GEO","5004","(m)struct icalgeotype","tuple","unitary", "STRING","5007","(a)const char*","string","unitary", "X","5022","(m)const char*","string","unitary", + "#CAP enumeration types",,,, "CMD","5010","(a)enum icalproperty_cmd","string","unitary","X=10400;ABORT;CONTINUE;CREATE;DELETE;GENERATE-UID;GET-CAPABILITY;IDENTIFY;MODIFY;MOVE;REPLY;SEARCH;SET-LOCALE;NONE=10499" "QUERY-LEVEL","5012","(a)enum icalproperty_querylevel","string","unitary","X=10800;CAL-QL-1;CAL-QL-NONE;NONE=10899" "CAR-LEVEL","5016","(a)enum icalproperty_carlevel","string","unitary","X=10200;CAR-NONE;CAR-MIN;CAR-FULL-1;NONE=10299" "ANY","5000",,,, "NO","5031",,,, + "#VAVAILABILITY types","RFC 7953 Section 3.2",,, "BUSYTYPE","5032","(a)enum icalproperty_busytype","string","unitary","X=10100;BUSY;BUSY-UNAVAILABLE;BUSY-TENTATIVE;NONE=10199" + "#VPOLL types","draft-york-vpoll",,, "POLLMODE","5033","(a)enum icalproperty_pollmode","string","unitary","X=10700;BASIC;NONE=10799" "POLLCOMPLETION","5034","(a)enum icalproperty_pollcompletion","string","unitary","X=10600;SERVER;SERVER-SUBMIT;SERVER-CHOICE;CLIENT;NONE=10699" + "#Task Extension types","draft-apthorp-ical-tasks",,, "TASKMODE","5035","(a)enum icalproperty_taskmode","string","unitary","X=11200;AUTOMATIC-COMPLETION;AUTOMATIC-FAILURE;AUTOMATIC-STATUS;NONE=11299" + "#VALARM Extension types","RFC 9074 Section 8.1",,, "PROXIMITY","5036","(a)enum icalproperty_proximity","string","unitary","X=11300;ARRIVE;DEPART;CONNECT;DISCONNECT;NONE=11399" + "#NOTE for updaters. Preserve the icalvalue_kind Enum values and property Enum values to aid forward compatibility" "# New Enum values for an existing icalvalue_kind should be inserted before the corresponding NONE value" "# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11399)" -- cgit v1.2.1 From ad429dbd685f650e7e2a485b3fc6e9a8cf73cc8d Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 5 Jan 2022 11:54:46 -0500 Subject: Add Event Publishing Extensions (RFC 9073) components, properties, parameters, values --- design-data/components.txt | 5 +- design-data/parameters.csv | 9 +- design-data/params-in-prop.txt | 6 + design-data/properties.csv | 8 ++ design-data/restrictions.csv | 278 +++++++++++++++++++++++++++++++++++++++++ design-data/value-types.csv | 6 +- src/libical/icalcomponent.c | 5 + src/libical/icalcomponent.h | 6 + src/libical/icalenums.h | 3 + 9 files changed, 323 insertions(+), 3 deletions(-) diff --git a/design-data/components.txt b/design-data/components.txt index 09108903..83156544 100644 --- a/design-data/components.txt +++ b/design-data/components.txt @@ -1,4 +1,5 @@ ANY +PARTICIPANT VAGENDA VALARM VAVAILABILITY @@ -8,9 +9,11 @@ VCOMMAND VEVENT VFREEBUSY VJOURNAL -VQUERY +VLOCATION VPATCH VPOLL +VQUERY +VRESOURCE VSCHEDULE VTIMEZONE VTODO diff --git a/design-data/parameters.csv b/design-data/parameters.csv index ec2db165..3ff82dfb 100644 --- a/design-data/parameters.csv +++ b/design-data/parameters.csv @@ -23,6 +23,8 @@ "TZID","27","const char*", "VALUE","28","icalparameter_value","X=21600;BINARY;BOOLEAN;DATE;DURATION;FLOAT;INTEGER;PERIOD;RECUR;TEXT;URI;ERROR;DATE-TIME;UTC-OFFSET;CAL-ADDRESS;NONE=21699" "X","29","const char*", + +"#libical Internal Properties" "X-LIC-ERRORTYPE","31","icalparameter_xlicerrortype","X=21800;COMPONENT-PARSE-ERROR;PROPERTY-PARSE-ERROR;PARAMETER-NAME-PARSE-ERROR;PARAMETER-VALUE-PARSE-ERROR;VALUE-PARSE-ERROR;INVALID-ITIP;UNKNOWN-VCAL-PROP-ERROR;MIME-PARSE-ERROR;VCAL-PROP-PARSE-ERROR;NONE=21899" "X-LIC-COMPARETYPE","30","icalparameter_xliccomparetype","X=21700;EQUAL;NOTEQUAL;LESS;GREATER;LESSEQUAL;GREATEREQUAL;REGEX;ISNULL;ISNOTNULL;NONE=21799" @@ -72,6 +74,11 @@ "#VPATCH Extension Parameters","draft-daboo-icalendar-vpatch" "PATCH-ACTION","51","icalparameter_patchaction",X=22200;CREATE;BYNAME;BYVALUE;BYPARAM;NONE=22299", +"#Event Publishing Extensions Parameters","RFC 9073 Section 5" +"ORDER","52","int", +"SCHEMA","53","const char*", +"DERIVED","54","icalparameter_derived","X=22300;TRUE;FALSE;NONE=22399" + "#NOTE for updaters. Preserve the icalparameter_kind Enum values to aid forward compatibility" "# New Enum values for an existing icalparameter_kind should be inserted before the corresponding NONE value" -"# New icalparamter_kind types should start their Enum value after the highest NONE value (currently 22299)" +"# New icalparamter_kind types should start their Enum value after the highest NONE value (currently 22399)" diff --git a/design-data/params-in-prop.txt b/design-data/params-in-prop.txt index ca1288b1..633a3f63 100644 --- a/design-data/params-in-prop.txt +++ b/design-data/params-in-prop.txt @@ -78,3 +78,9 @@ PATCH-TARGET X PATCH-DELETE X PATCH-PARAMETER ANY PROXIMITY X +LOCATION-TYPE X +PARTICIPANT-TYPE X +RESOURCE-TYPE X +CALENDAR-ADDRESS X +STYLED-DESCRIPTION ALTREP DERIVED FMTTYPE LANGUAGE VALUE X +STRUCTURED-DATA ENCODING FMTTYPE SCHEMA VALUE X diff --git a/design-data/properties.csv b/design-data/properties.csv index 9714fc8f..4817192b 100644 --- a/design-data/properties.csv +++ b/design-data/properties.csv @@ -156,4 +156,12 @@ "PATCH-DELETE","124","TEXT","TEXT" "PATCH-PARAMETER","125","TEXT","TEXT" +"#Event Publication Extensions Properies","RFC 9073 Section 6", +"LOCATION-TYPE","127","TEXT","TEXT" +"PARTICIPANT-TYPE","128","PARTICIPANTTYPE","PARTICIPANTTYPE" +"RESOURCE-TYPE","129","RESOURCETYPE","RESOURCETYPE" +"CALENDAR-ADDRESS","130","CAL-ADDRESS","CAL-ADDRESS" +"STYLED-DESCRIPTION","131","TEXT","NO" +"STRUCTURED-DATA","132","ATTACH","NO",is_structured + "#NOTE for updaters. Preserve the icalproperty_kind Enum values to aid forward compatibility" diff --git a/design-data/restrictions.csv b/design-data/restrictions.csv index 62f571ec..974738c8 100644 --- a/design-data/restrictions.csv +++ b/design-data/restrictions.csv @@ -42,6 +42,14 @@ PUBLISH,VEVENT,NONE,VTODO,ZERO PUBLISH,VEVENT,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref PUBLISH,VEVENT,NONE,X,ZEROPLUS PUBLISH,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +PUBLISH,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +PUBLISH,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +PUBLISH,VEVENT,NONE,PARTICIPANT,ZEROPLUS +PUBLISH,VEVENT,NONE,VLOCATION,ZEROPLUS +PUBLISH,VEVENT,NONE,VRESOURCE,ZEROPLUS + REQUEST,VEVENT,NONE,NONE,ONEPLUS REQUEST,VEVENT,ATTENDEE,NONE,ONEPLUS REQUEST,VEVENT,DTSTAMP,NONE,ONE @@ -85,6 +93,14 @@ REQUEST,VEVENT,NONE,VFREEBUSY,ZERO REQUEST,VEVENT,NONE,VJOURNAL,ZERO REQUEST,VEVENT,NONE,VTODO,ZERO REQUEST,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +REQUEST,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +REQUEST,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +REQUEST,VEVENT,NONE,PARTICIPANT,ZEROPLUS +REQUEST,VEVENT,NONE,VLOCATION,ZEROPLUS +REQUEST,VEVENT,NONE,VRESOURCE,ZEROPLUS + REPLY,VEVENT,NONE,NONE,ONEPLUS REPLY,VEVENT,ATTENDEE,NONE,ONE REPLY,VEVENT,DTSTAMP,NONE,ONE @@ -128,6 +144,14 @@ REPLY,VEVENT,NONE,VFREEBUSY,ZERO REPLY,VEVENT,NONE,VJOURNAL,ZERO REPLY,VEVENT,NONE,VTODO,ZERO REPLY,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +REPLY,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +REPLY,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +REPLY,VEVENT,NONE,PARTICIPANT,ZEROPLUS +REPLY,VEVENT,NONE,VLOCATION,ZEROPLUS +REPLY,VEVENT,NONE,VRESOURCE,ZEROPLUS + ADD,VEVENT,NONE,NONE,ONE ADD,VEVENT,DTSTAMP,NONE,ONE ADD,VEVENT,DTSTART,NONE,ONE @@ -171,6 +195,14 @@ ADD,VEVENT,NONE,VFREEBUSY,ZERO ADD,VEVENT,NONE,VTODO,ZERO ADD,VEVENT,NONE,VJOURNAL,ZERO ADD,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +ADD,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +ADD,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +ADD,VEVENT,NONE,PARTICIPANT,ZEROPLUS +ADD,VEVENT,NONE,VLOCATION,ZEROPLUS +ADD,VEVENT,NONE,VRESOURCE,ZEROPLUS + CANCEL,VEVENT,NONE,NONE,ONEPLUS CANCEL,VEVENT,ATTENDEE,NONE,ZEROPLUS CANCEL,VEVENT,DTSTAMP,NONE,ONE @@ -214,6 +246,14 @@ CANCEL,VEVENT,NONE,VJOURNAL,ZERO CANCEL,VEVENT,NONE,VFREEBUSY,ZERO CANCEL,VEVENT,NONE,VALARM,ZERO CANCEL,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +CANCEL,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +CANCEL,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +CANCEL,VEVENT,NONE,PARTICIPANT,ZEROPLUS +CANCEL,VEVENT,NONE,VLOCATION,ZEROPLUS +CANCEL,VEVENT,NONE,VRESOURCE,ZEROPLUS + REFRESH,VEVENT,NONE,NONE,ONE REFRESH,VEVENT,ATTENDEE,NONE,ONE REFRESH,VEVENT,DTSTAMP,NONE,ONE @@ -257,6 +297,14 @@ REFRESH,VEVENT,NONE,VFREEBUSY,ZERO REFRESH,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref REFRESH,VEVENT,NONE,VALARM,ZERO REFRESH,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +REFRESH,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +REFRESH,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +REFRESH,VEVENT,NONE,PARTICIPANT,ZEROPLUS +REFRESH,VEVENT,NONE,VLOCATION,ZEROPLUS +REFRESH,VEVENT,NONE,VRESOURCE,ZEROPLUS + COUNTER,VEVENT,NONE,NONE,ONE COUNTER,VEVENT,DTSTAMP,NONE,ONE COUNTER,VEVENT,DTSTART,NONE,ONE @@ -300,6 +348,14 @@ COUNTER,VEVENT,NONE,VTODO,ZERO COUNTER,VEVENT,NONE,VJOURNAL,ZERO COUNTER,VEVENT,NONE,VFREEBUSY,ZERO COUNTER,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +COUNTER,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +COUNTER,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +COUNTER,VEVENT,NONE,PARTICIPANT,ZEROPLUS +COUNTER,VEVENT,NONE,VLOCATION,ZEROPLUS +COUNTER,VEVENT,NONE,VRESOURCE,ZEROPLUS + DECLINECOUNTER,VEVENT,NONE,NONE,ONE DECLINECOUNTER,VEVENT,DTSTAMP,NONE,ONE DECLINECOUNTER,VEVENT,ORGANIZER,NONE,ONE @@ -343,6 +399,14 @@ DECLINECOUNTER,VEVENT,NONE,VFREEBUSY,ZERO DECLINECOUNTER,VEVENT,NONE,VTIMEZONE,ZERO,must_if_tz_ref DECLINECOUNTER,VEVENT,NONE,VALARM,ZERO DECLINECOUNTER,VEVENT,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +DECLINECOUNTER,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +DECLINECOUNTER,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +DECLINECOUNTER,VEVENT,NONE,PARTICIPANT,ZEROPLUS +DECLINECOUNTER,VEVENT,NONE,VLOCATION,ZEROPLUS +DECLINECOUNTER,VEVENT,NONE,VRESOURCE,ZEROPLUS + PUBLISH,VFREEBUSY,NONE,NONE,ONEPLUS PUBLISH,VFREEBUSY,DTSTAMP,NONE,ONE PUBLISH,VFREEBUSY,DTSTART,NONE,ONE @@ -363,6 +427,13 @@ PUBLISH,VFREEBUSY,NONE,VTODO,ZERO PUBLISH,VFREEBUSY,NONE,VJOURNAL,ZERO PUBLISH,VFREEBUSY,NONE,VTIMEZONE,ZERO,must_if_tz_ref PUBLISH,VFREEBUSY,NONE,VALARM,ZERO + +# Event Publishing Extensions (RFC 9073) +PUBLISH,VFREEBUSY,STYLEDDESCRIPTION,NONE,ZEROPLUS +PUBLISH,VFREEBUSY,NONE,PARTICIPANT,ZEROPLUS +PUBLISH,VFREEBUSY,NONE,VLOCATION,ZEROPLUS +PUBLISH,VFREEBUSY,NONE,VRESOURCE,ZEROPLUS + REQUEST,VFREEBUSY,NONE,NONE,ONE REQUEST,VFREEBUSY,ATTENDEE,NONE,ONEPLUS REQUEST,VFREEBUSY,DTEND,NONE,ONE @@ -383,6 +454,13 @@ REQUEST,VFREEBUSY,NONE,VEVENT,ZERO REQUEST,VFREEBUSY,NONE,VTODO,ZERO REQUEST,VFREEBUSY,NONE,VJOURNAL,ZERO REQUEST,VFREEBUSY,NONE,VTIMEZONE,ZERO + +# Event Publishing Extensions (RFC 9073) +REQUEST,VFREEBUSY,STYLEDDESCRIPTION,NONE,ZEROPLUS +REQUEST,VFREEBUSY,NONE,PARTICIPANT,ZEROPLUS +REQUEST,VFREEBUSY,NONE,VLOCATION,ZEROPLUS +REQUEST,VFREEBUSY,NONE,VRESOURCE,ZEROPLUS + REPLY,VFREEBUSY,NONE,NONE,ONE REPLY,VFREEBUSY,ATTENDEE,NONE,ONE REPLY,VFREEBUSY,DTSTAMP,NONE,ONE @@ -404,6 +482,13 @@ REPLY,VFREEBUSY,NONE,VEVENT,ZERO REPLY,VFREEBUSY,NONE,VTODO,ZERO REPLY,VFREEBUSY,NONE,VJOURNAL,ZERO REPLY,VFREEBUSY,NONE,VTIMEZONE,ZERO + +# Event Publishing Extensions (RFC 9073) +REPLY,VFREEBUSY,STYLEDDESCRIPTION,NONE,ZEROPLUS +REPLY,VFREEBUSY,NONE,PARTICIPANT,ZEROPLUS +REPLY,VFREEBUSY,NONE,VLOCATION,ZEROPLUS +REPLY,VFREEBUSY,NONE,VRESOURCE,ZEROPLUS + PUBLISH,VTODO,NONE,NONE,ONEPLUS PUBLISH,VTODO,DTSTAMP,NONE,ONE PUBLISH,VTODO,DTSTART,NONE,ONE @@ -447,6 +532,14 @@ PUBLISH,VTODO,NONE,VFREEBUSY,ZERO PUBLISH,VTODO,NONE,VEVENT,ZERO PUBLISH,VTODO,NONE,VJOURNAL,ZERO PUBLISH,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +PUBLISH,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +PUBLISH,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +PUBLISH,VTODO,NONE,PARTICIPANT,ZEROPLUS +PUBLISH,VTODO,NONE,VLOCATION,ZEROPLUS +PUBLISH,VTODO,NONE,VRESOURCE,ZEROPLUS + REQUEST,VTODO,NONE,NONE,ONEPLUS REQUEST,VTODO,ATTENDEE,NONE,ONEPLUS REQUEST,VTODO,DTSTAMP,NONE,ONE @@ -490,6 +583,14 @@ REQUEST,VTODO,NONE,VEVENT,ZERO REQUEST,VTODO,NONE,VFREEBUSY,ZERO REQUEST,VTODO,NONE,VJOURNAL,ZERO REQUEST,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +REQUEST,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +REQUEST,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +REQUEST,VTODO,NONE,PARTICIPANT,ZEROPLUS +REQUEST,VTODO,NONE,VLOCATION,ZEROPLUS +REQUEST,VTODO,NONE,VRESOURCE,ZEROPLUS + REPLY,VTODO,NONE,NONE,ONEPLUS REPLY,VTODO,ATTENDEE,NONE,ONEPLUS REPLY,VTODO,DTSTAMP,NONE,ONE @@ -532,6 +633,14 @@ REPLY,VTODO,NONE,VALARM,ZERO REPLY,VTODO,NONE,VEVENT,ZERO REPLY,VTODO,NONE,VFREEBUSY,ZERO REPLY,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +REPLY,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +REPLY,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +REPLY,VTODO,NONE,PARTICIPANT,ZEROPLUS +REPLY,VTODO,NONE,VLOCATION,ZEROPLUS +REPLY,VTODO,NONE,VRESOURCE,ZEROPLUS + ADD,VTODO,NONE,NONE,ONE ADD,VTODO,DTSTAMP,NONE,ONE ADD,VTODO,ORGANIZER,NONE,ONE @@ -575,6 +684,14 @@ ADD,VTODO,NONE,VEVENT,ZERO ADD,VTODO,NONE,VJOURNAL,ZERO ADD,VTODO,NONE,VFREEBUSY,ZERO ADD,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +ADD,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +ADD,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +ADD,VTODO,NONE,PARTICIPANT,ZEROPLUS +ADD,VTODO,NONE,VLOCATION,ZEROPLUS +ADD,VTODO,NONE,VRESOURCE,ZEROPLUS + CANCEL,VTODO,NONE,NONE,ONE CANCEL,VTODO,ATTENDEE,NONE,ZEROPLUS CANCEL,VTODO,UID,NONE,ONE @@ -616,6 +733,14 @@ CANCEL,VTODO,NONE,VALARM,ZERO CANCEL,VTODO,NONE,VEVENT,ZERO CANCEL,VTODO,NONE,VFREEBUSY,ZERO CANCEL,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +CANCEL,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +CANCEL,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +CANCEL,VTODO,NONE,PARTICIPANT,ZEROPLUS +CANCEL,VTODO,NONE,VLOCATION,ZEROPLUS +CANCEL,VTODO,NONE,VRESOURCE,ZEROPLUS + REFRESH,VTODO,NONE,NONE,ONE REFRESH,VTODO,ATTENDEE,NONE,ONE REFRESH,VTODO,DTSTAMP,NONE,ONE @@ -657,6 +782,14 @@ REFRESH,VTODO,NONE,VEVENT,ZERO REFRESH,VTODO,NONE,VFREEBUSY,ZERO REFRESH,VTODO,NONE,VTIMEZONE,ZERO REFRESH,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +REFRESH,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +REFRESH,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +REFRESH,VTODO,NONE,PARTICIPANT,ZEROPLUS +REFRESH,VTODO,NONE,VLOCATION,ZEROPLUS +REFRESH,VTODO,NONE,VRESOURCE,ZEROPLUS + COUNTER,VTODO,NONE,NONE,ONE COUNTER,VTODO,ATTENDEE,NONE,ONEPLUS COUNTER,VTODO,DTSTAMP,NONE,ONE @@ -699,6 +832,14 @@ COUNTER,VTODO,NONE,X,ZEROPLUS COUNTER,VTODO,NONE,VEVENT,ZERO COUNTER,VTODO,NONE,VFREEBUSY,ZERO COUNTER,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +COUNTER,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +COUNTER,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +COUNTER,VTODO,NONE,PARTICIPANT,ZEROPLUS +COUNTER,VTODO,NONE,VLOCATION,ZEROPLUS +COUNTER,VTODO,NONE,VRESOURCE,ZEROPLUS + DECLINECOUNTER,VTODO,NONE,NONE,ONE DECLINECOUNTER,VTODO,ATTENDEE,NONE,ONEPLUS DECLINECOUNTER,VTODO,DTSTAMP,NONE,ONE @@ -740,6 +881,14 @@ DECLINECOUNTER,VTODO,NONE,VALARM,ZERO DECLINECOUNTER,VTODO,NONE,VEVENT,ZERO DECLINECOUNTER,VTODO,NONE,VFREEBUSY,ZERO DECLINECOUNTER,VTODO,RELCALID,NONE,ZEROORONE + +# Event Publishing Extensions (RFC 9073) +DECLINECOUNTER,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +DECLINECOUNTER,VTODO,NONE,PARTICIPANT,ZEROPLUS +DECLINECOUNTER,VTODO,NONE,VLOCATION,ZEROPLUS +DECLINECOUNTER,VTODO,NONE,VRESOURCE,ZEROPLUS + PUBLISH,VJOURNAL,NONE,NONE,ONEPLUS PUBLISH,VJOURNAL,DESCRIPTION,NONE,ONE PUBLISH,VJOURNAL,DTSTAMP,NONE,ONE @@ -773,6 +922,14 @@ PUBLISH,VJOURNAL,NONE,X,ZEROPLUS PUBLISH,VJOURNAL,NONE,VEVENT,ZERO PUBLISH,VJOURNAL,NONE,VFREEBUSY,ZERO PUBLISH,VJOURNAL,NONE,VTODO,ZERO + +# Event Publishing Extensions (RFC 9073) +PUBLISH,VJOURNAL,STYLEDDESCRIPTION,NONE,ZEROPLUS +PUBLISH,VJOURNAL,STRUCTUREDDATA,NONE,ZEROPLUS +PUBLISH,VJOURNAL,NONE,PARTICIPANT,ZEROPLUS +PUBLISH,VJOURNAL,NONE,VLOCATION,ZEROPLUS +PUBLISH,VJOURNAL,NONE,VRESOURCE,ZEROPLUS + ADD,VJOURNAL,NONE,NONE,ONE ADD,VJOURNAL,DESCRIPTION,NONE,ONE ADD,VJOURNAL,DTSTAMP,NONE,ONE @@ -806,6 +963,14 @@ ADD,VJOURNAL,NONE,X,ZEROPLUS ADD,VJOURNAL,NONE,VEVENT,ZERO ADD,VJOURNAL,NONE,VFREEBUSY,ZERO ADD,VJOURNAL,NONE,VTODO,ZERO + +# Event Publishing Extensions (RFC 9073) +ADD,VJOURNAL,STYLEDDESCRIPTION,NONE,ZEROPLUS +ADD,VJOURNAL,STRUCTUREDDATA,NONE,ZEROPLUS +ADD,VJOURNAL,NONE,PARTICIPANT,ZEROPLUS +ADD,VJOURNAL,NONE,VLOCATION,ZEROPLUS +ADD,VJOURNAL,NONE,VRESOURCE,ZEROPLUS + CANCEL,VJOURNAL,NONE,NONE,ONEPLUS CANCEL,VJOURNAL,DTSTAMP,NONE,ONE CANCEL,VJOURNAL,ORGANIZER,NONE,ONE @@ -840,46 +1005,62 @@ CANCEL,VJOURNAL,NONE,VALARM,ZERO CANCEL,VJOURNAL,NONE,VEVENT,ZERO CANCEL,VJOURNAL,NONE,VFREEBUSY,ZERO CANCEL,VJOURNAL,NONE,VTODO,ZERO + +# Event Publishing Extensions (RFC 9073) +CANCEL,VJOURNAL,STYLEDDESCRIPTION,NONE,ZEROPLUS +CANCEL,VJOURNAL,STRUCTUREDDATA,NONE,ZEROPLUS +CANCEL,VJOURNAL,NONE,PARTICIPANT,ZEROPLUS +CANCEL,VJOURNAL,NONE,VLOCATION,ZEROPLUS +CANCEL,VJOURNAL,NONE,VRESOURCE,ZEROPLUS + PUBLISH,VAGENDA,NONE,NONE,ONEPLUS PUBLISH,VAGENDA,CALMASTER,NONE,ONE PUBLISH,VAGENDA,OWNER,NONE,ZEROORONE PUBLISH,VAGENDA,RELCALID,NONE,ZEROORONE PUBLISH,VAGENDA,TZID,NONE,ONE + REQUEST,VAGENDA,NONE,NONE,ONEPLUS REQUEST,VAGENDA,CALMASTER,NONE,ONE REQUEST,VAGENDA,OWNER,NONE,ZEROORONE REQUEST,VAGENDA,RELCALID,NONE,ZEROORONE REQUEST,VAGENDA,TZID,NONE,ONE + REPLY,VAGENDA,NONE,NONE,ONEPLUS REPLY,VAGENDA,CALMASTER,NONE,ONE REPLY,VAGENDA,OWNER,NONE,ZEROORONE REPLY,VAGENDA,RELCALID,NONE,ZEROORONE REPLY,VAGENDA,TZID,NONE,ONE + ADD,VAGENDA,NONE,NONE,ONEPLUS ADD,VAGENDA,CALMASTER,NONE,ONE ADD,VAGENDA,OWNER,NONE,ZEROORONE ADD,VAGENDA,RELCALID,NONE,ZEROORONE ADD,VAGENDA,TZID,NONE,ONE + CANCEL,VAGENDA,NONE,NONE,ONEPLUS CANCEL,VAGENDA,CALMASTER,NONE,ONE CANCEL,VAGENDA,OWNER,NONE,ZEROORONE CANCEL,VAGENDA,RELCALID,NONE,ZEROORONE CANCEL,VAGENDA,TZID,NONE,ONE + REFRESH,VAGENDA,NONE,NONE,ONEPLUS REFRESH,VAGENDA,CALMASTER,NONE,ONE REFRESH,VAGENDA,OWNER,NONE,ZEROORONE REFRESH,VAGENDA,RELCALID,NONE,ZEROORONE REFRESH,VAGENDA,TZID,NONE,ONE + COUNTER,VAGENDA,NONE,NONE,ONEPLUS COUNTER,VAGENDA,CALMASTER,NONE,ONE COUNTER,VAGENDA,OWNER,NONE,ZEROORONE COUNTER,VAGENDA,RELCALID,NONE,ZEROORONE COUNTER,VAGENDA,TZID,NONE,ONE + DECLINECOUNTER,VAGENDA,NONE,NONE,ONEPLUS DECLINECOUNTER,VAGENDA,CALMASTER,NONE,ONE DECLINECOUNTER,VAGENDA,OWNER,NONE,ZEROORONE DECLINECOUNTER,VAGENDA,RELCALID,NONE,ZEROORONE DECLINECOUNTER,VAGENDA,TZID,NONE,ONE + NONE,VAGENDA,ALLOWCONFLICT,NONE,ONE NONE,VAGENDA,CALMASTER,NONE,ONE NONE,VAGENDA,OWNER,NONE,ZEROORONE @@ -888,6 +1069,7 @@ NONE,VAGENDA,TZID,NONE,ONE NONE,VAGENDA,DEFAULTCHARSET,NONE,ONE NONE,VAGENDA,DEFAULTLOCALE,NONE,ONE NONE,VAGENDA,DEFAULTTZID,NONE,ONE + NONE,VCALENDAR,ACTION,NONE,ZERO NONE,VCALENDAR,ATTACH,NONE,ZERO NONE,VCALENDAR,ATTENDEE,NONE,ZERO @@ -942,6 +1124,7 @@ NONE,VCALENDAR,REFRESHINTERVAL,NONE,ZEROORONE NONE,VCALENDAR,SOURCE,NONE,ZEROORONE NONE,VCALENDAR,IMAGE,NONE,ZEROPLUS NONE,VCALENDAR,NAME,NONE,ZEROPLUS + NONE,VEVENT,ACTION,NONE,ZERO NONE,VEVENT,ATTACH,NONE,ZEROPLUS NONE,VEVENT,ATTENDEE,NONE,ZEROPLUS @@ -994,6 +1177,14 @@ NONE,VEVENT,RELCALID,NONE,ZEROORONE NONE,VEVENT,COLOR,NONE,ZEROORONE NONE,VEVENT,CONFERENCE,NONE,ZEROPLUS NONE,VEVENT,IMAGE,NONE,ZEROPLUS + +# Event Publishing Extensions (RFC 9073) +NONE,VEVENT,STYLEDDESCRIPTION,NONE,ZEROPLUS +NONE,VEVENT,STRUCTUREDDATA,NONE,ZEROPLUS +NONE,VEVENT,NONE,PARTICIPANT,ZEROPLUS +NONE,VEVENT,NONE,VLOCATION,ZEROPLUS +NONE,VEVENT,NONE,VRESOURCE,ZEROPLUS + NONE,VTODO,ACTION,NONE,ZERO NONE,VTODO,ATTACH,NONE,ZEROPLUS NONE,VTODO,ATTENDEE,NONE,ZEROPLUS @@ -1046,6 +1237,14 @@ NONE,VTODO,RELCALID,NONE,ZEROORONE NONE,VTODO,COLOR,NONE,ZEROORONE NONE,VTODO,CONFERENCE,NONE,ZEROPLUS NONE,VTODO,IMAGE,NONE,ZEROPLUS + +# Event Publishing Extensions (RFC 9073) +NONE,VTODO,STYLEDDESCRIPTION,NONE,ZEROPLUS +NONE,VTODO,STRUCTUREDDATA,NONE,ZEROPLUS +NONE,VTODO,NONE,PARTICIPANT,ZEROPLUS +NONE,VTODO,NONE,VLOCATION,ZEROPLUS +NONE,VTODO,NONE,VRESOURCE,ZEROPLUS + NONE,VJOURNAL,ACTION,NONE,ZERO NONE,VJOURNAL,ATTACH,NONE,ZEROPLUS NONE,VJOURNAL,ATTENDEE,NONE,ZEROPLUS @@ -1096,6 +1295,14 @@ NONE,VJOURNAL,VERSION,NONE,ZERO NONE,VJOURNAL,X,NONE,ZEROPLUS NONE,VJOURNAL,COLOR,NONE,ZEROORONE NONE,VJOURNAL,IMAGE,NONE,ZEROPLUS + +# Event Publishing Extensions (RFC 9073) +NONE,VJOURNAL,STYLEDDESCRIPTION,NONE,ZEROPLUS +NONE,VJOURNAL,STRUCTUREDDATA,NONE,ZEROPLUS +NONE,VJOURNAL,NONE,PARTICIPANT,ZEROPLUS +NONE,VJOURNAL,NONE,VLOCATION,ZEROPLUS +NONE,VJOURNAL,NONE,VRESOURCE,ZEROPLUS + NONE,VFREEBUSY,ACTION,NONE,ZERO NONE,VFREEBUSY,ATTACH,NONE,ZERO NONE,VFREEBUSY,ATTENDEE,NONE,ZEROPLUS @@ -1144,6 +1351,13 @@ NONE,VFREEBUSY,UID,NONE,ONE NONE,VFREEBUSY,URL,NONE,ZEROORONE NONE,VFREEBUSY,VERSION,NONE,ZERO NONE,VFREEBUSY,X,NONE,ZEROPLUS + +# Event Publishing Extensions (RFC 9073) +NONE,VFREEBUSY,STYLEDDESCRIPTION,NONE,ZEROPLUS +NONE,VFREEBUSY,NONE,PARTICIPANT,ZEROPLUS +NONE,VFREEBUSY,NONE,VLOCATION,ZEROPLUS +NONE,VFREEBUSY,NONE,VRESOURCE,ZEROPLUS + NONE,VTIMEZONE,ACTION,NONE,ZERO NONE,VTIMEZONE,ATTACH,NONE,ZERO NONE,VTIMEZONE,ATTENDEE,NONE,ZERO @@ -1196,6 +1410,7 @@ NONE,VTIMEZONE,VERSION,NONE,ZERO NONE,VTIMEZONE,X,NONE,ZEROPLUS NONE,VTIMEZONE,NONE,XSTANDARD,ZEROPLUS NONE,VTIMEZONE,NONE,XDAYLIGHT,ZEROPLUS + NONE,XSTANDARD,ACTION,NONE,ZERO NONE,XSTANDARD,ATTACH,NONE,ZERO NONE,XSTANDARD,ATTENDEE,NONE,ZERO @@ -1244,6 +1459,7 @@ NONE,XSTANDARD,UID,NONE,ZERO NONE,XSTANDARD,URL,NONE,ZERO NONE,XSTANDARD,VERSION,NONE,ZERO NONE,XSTANDARD,X,NONE,ZEROPLUS + NONE,XDAYLIGHT,ACTION,NONE,ZERO NONE,XDAYLIGHT,ATTACH,NONE,ZERO NONE,XDAYLIGHT,ATTENDEE,NONE,ZERO @@ -1292,6 +1508,7 @@ NONE,XDAYLIGHT,UID,NONE,ZERO NONE,XDAYLIGHT,URL,NONE,ZERO NONE,XDAYLIGHT,VERSION,NONE,ZERO NONE,XDAYLIGHT,X,NONE,ZEROPLUS + NONE,XAUDIOALARM,ACTION,NONE,ONE NONE,XAUDIOALARM,ATTACH,NONE,ZEROORONE NONE,XAUDIOALARM,ATTENDEE,NONE,ZERO @@ -1340,6 +1557,7 @@ NONE,XAUDIOALARM,UID,NONE,ZERO NONE,XAUDIOALARM,URL,NONE,ZERO NONE,XAUDIOALARM,VERSION,NONE,ZERO NONE,XAUDIOALARM,X,NONE,ZEROPLUS + NONE,XDISPLAYALARM,ACTION,NONE,ONE NONE,XDISPLAYALARM,ATTACH,NONE,ZERO NONE,XDISPLAYALARM,ATTENDEE,NONE,ZERO @@ -1388,6 +1606,7 @@ NONE,XDISPLAYALARM,UID,NONE,ZERO NONE,XDISPLAYALARM,URL,NONE,ZERO NONE,XDISPLAYALARM,VERSION,NONE,ZERO NONE,XDISPLAYALARM,X,NONE,ZEROPLUS + NONE,XEMAILALARM,ACTION,NONE,ONE,must_be_email NONE,XEMAILALARM,ATTACH,NONE,ZEROPLUS NONE,XEMAILALARM,ATTENDEE,NONE,ONEPLUS @@ -1436,6 +1655,7 @@ NONE,XEMAILALARM,UID,NONE,ZERO NONE,XEMAILALARM,URL,NONE,ZERO NONE,XEMAILALARM,VERSION,NONE,ZERO NONE,XEMAILALARM,X,NONE,ZEROPLUS + NONE,XPROCEDUREALARM,ACTION,NONE,ONE NONE,XPROCEDUREALARM,ATTACH,NONE,ZEROORONE NONE,XPROCEDUREALARM,ATTENDEE,NONE,ZERO @@ -1484,9 +1704,11 @@ NONE,XPROCEDUREALARM,UID,NONE,ZERO NONE,XPROCEDUREALARM,URL,NONE,ZERO NONE,XPROCEDUREALARM,VERSION,NONE,ZERO NONE,XPROCEDUREALARM,X,NONE,ZEROPLUS + NONE,VQUERY,QUERY,NONE,ZEROORONE NONE,VQUERY,QUERYNAME,NONE,ONE NONE,VQUERY,EXPAND,NONE,ONE + NONE,VAVAILABILITY,ACTION,NONE,ZERO NONE,VAVAILABILITY,ATTACH,NONE,ZERO NONE,VAVAILABILITY,ATTENDEE,NONE,ZERO @@ -1537,6 +1759,7 @@ NONE,VAVAILABILITY,URL,NONE,ZEROORONE NONE,VAVAILABILITY,VERSION,NONE,ZERO NONE,VAVAILABILITY,X,NONE,ZEROPLUS NONE,VAVAILABILITY,NONE,XAVAILABLE,ZEROPLUS + NONE,XAVAILABLE,ACTION,NONE,ZERO NONE,XAVAILABLE,ATTACH,NONE,ZERO NONE,XAVAILABLE,ATTENDEE,NONE,ZERO @@ -1585,6 +1808,7 @@ NONE,XAVAILABLE,UID,NONE,ONE NONE,XAVAILABLE,URL,NONE,ZERO NONE,XAVAILABLE,VERSION,NONE,ZERO NONE,XAVAILABLE,X,NONE,ZEROPLUS + PUBLISH,VPOLL,NONE,NONE,ONEPLUS PUBLISH,VPOLL,DTSTAMP,NONE,ONE PUBLISH,VPOLL,DTSTART,NONE,ZEROORONE @@ -1624,6 +1848,7 @@ PUBLISH,VPOLL,NONE,VJOURNAL,ZEROPLUS PUBLISH,VPOLL,NONE,VTODO,ZEROPLUS PUBLISH,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref PUBLISH,VPOLL,NONE,X,ZEROPLUS + REQUEST,VPOLL,NONE,NONE,ONE REQUEST,VPOLL,DTSTAMP,NONE,ONE REQUEST,VPOLL,DTSTART,NONE,ZEROORONE @@ -1666,6 +1891,7 @@ REQUEST,VPOLL,NONE,VFREEBUSY,ZERO REQUEST,VPOLL,NONE,VAVAILABILITY,ZERO REQUEST,VPOLL,NONE,VJOURNAL,ZEROPLUS REQUEST,VPOLL,NONE,VTODO,ZEROPLUS + REPLY,VPOLL,NONE,NONE,ONEPLUS REPLY,VPOLL,DTSTAMP,NONE,ONE REPLY,VPOLL,ORGANIZER,NONE,ONE @@ -1708,6 +1934,7 @@ REPLY,VPOLL,NONE,VFREEBUSY,ZERO REPLY,VPOLL,NONE,VAVAILABILITY,ZERO REPLY,VPOLL,NONE,VJOURNAL,ZERO REPLY,VPOLL,NONE,VTODO,ZERO + CANCEL,VPOLL,NONE,NONE,ONEPLUS CANCEL,VPOLL,UID,NONE,ONE CANCEL,VPOLL,DTSTAMP,NONE,ONE @@ -1750,6 +1977,7 @@ CANCEL,VPOLL,NONE,VFREEBUSY,ZERO CANCEL,VPOLL,NONE,VAVAILABILITY,ZERO CANCEL,VPOLL,NONE,VJOURNAL,ZERO CANCEL,VPOLL,NONE,VTODO,ZERO + REFRESH,VPOLL,NONE,NONE,ONE REFRESH,VPOLL,DTSTAMP,NONE,ONE REFRESH,VPOLL,ORGANIZER,NONE,ONE @@ -1791,6 +2019,7 @@ REFRESH,VPOLL,NONE,VJOURNAL,ZERO REFRESH,VPOLL,NONE,VEVENT,ZERO REFRESH,VPOLL,NONE,VFREEBUSY,ZERO REFRESH,VPOLL,NONE,VAVAILABILITY,ZERO + POLLSTATUS,VPOLL,NONE,NONE,ONEPLUS POLLSTATUS,VPOLL,COMPLETED,NONE,ZEROORONE POLLSTATUS,VPOLL,DTSTAMP,NONE,ONE @@ -1830,6 +2059,7 @@ POLLSTATUS,VPOLL,NONE,VJOURNAL,ZEROPLUS POLLSTATUS,VPOLL,NONE,VTODO,ZEROPLUS POLLSTATUS,VPOLL,NONE,VTIMEZONE,ZEROPLUS,must_if_tz_ref POLLSTATUS,VPOLL,NONE,X,ZEROPLUS + NONE,VPOLL,DTSTAMP,NONE,ONE NONE,VPOLL,UID,NONE,ONE NONE,VPOLL,ORGANIZER,NONE,ONE @@ -1868,6 +2098,7 @@ NONE,VPOLL,NONE,VAVAILABILITY,ZEROPLUS NONE,VPOLL,NONE,VJOURNAL,ZEROPLUS NONE,VPOLL,NONE,VTODO,ZEROPLUS NONE,VPOLL,NONE,VVOTER,ZEROPLUS + NONE,VVOTER,DTSTAMP,NONE,ONE NONE,VVOTER,VOTER,NONE,ONE NONE,VVOTER,CREATED,NONE,ZEROORONE @@ -1894,6 +2125,7 @@ NONE,VVOTER,NONE,VJOURNAL,ZERO NONE,VVOTER,NONE,VTODO,ZERO NONE,VVOTER,NONE,XVOTE,ZEROPLUS NONE,VVOTER,NONE,X,ZEROPLUS + NONE,XVOTE,POLLITEMID,NONE,ZEROORONE NONE,XVOTE,RESPONSE,NONE,ZEROORONE NONE,XVOTE,COMMENT,NONE,ZEROPLUS @@ -1907,6 +2139,7 @@ NONE,XVOTE,NONE,VJOURNAL,ZERO NONE,XVOTE,NONE,VTODO,ZERO NONE,XVOTE,NONE,VVOTER,ZERO NONE,XVOTE,NONE,X,ZEROPLUS + NONE,VPATCH,DTSTAMP,NONE,ONE NONE,VPATCH,UID,NONE,ONE NONE,VPATCH,PATCHVERSION,NONE,ZEROORONE @@ -1914,6 +2147,7 @@ NONE,VPATCH,PATCHORDER,NONE,ZEROORONE NONE,VPATCH,X,NONE,ZEROPLUS NONE,VPATCH,NONE,XPATCH,ONEPLUS NONE,VPATCH,NONE,X,ZEROPLUS + NONE,XPATCH,PATCHTARGET,NONE,ONE NONE,XPATCH,PATCHDELETE,NONE,ZEROPLUS NONE,XPATCH,PATCHPARAMETER,NONE,ZEROPLUS @@ -1921,3 +2155,47 @@ NONE,XPATCH,X,NONE,ZEROPLUS NONE,XPATCH,NONE,VPATCH,ZERO NONE,XPATCH,NONE,XPATCH,ZERO NONE,XPATCH,NONE,X,ZEROPLUS + +NONE,PARTICIPANT,UID,NONE,ONE +NONE,PARTICIPANT,PARTICIPANTTYPE,NONE,ONE +NONE,PARTICIPANT,CALENDARADDRESS,NONE,ZEROORONE +NONE,PARTICIPANT,CREATED,NONE,ZEROORONE +NONE,PARTICIPANT,DESCRIPTION,NONE,ZEROORONE +NONE,PARTICIPANT,DTSTAMP,NONE,ZEROORONE +NONE,PARTICIPANT,GEO,NONE,ZEROORONE +NONE,PARTICIPANT,LASTMODIFIED,NONE,ZEROORONE +NONE,PARTICIPANT,PRIORITY,NONE,ZEROORONE +NONE,PARTICIPANT,SEQUENCE,NONE,ZEROORONE +NONE,PARTICIPANT,STATUS,NONE,ZEROORONE +NONE,PARTICIPANT,SUMMARY,NONE,ZEROORONE +NONE,PARTICIPANT,URL,NONE,ZEROORONE +NONE,PARTICIPANT,ATTACH,NONE,ZEROPLUS +NONE,PARTICIPANT,CATEGORIES,NONE,ZEROPLUS +NONE,PARTICIPANT,COMMENT,NONE,ZEROPLUS +NONE,PARTICIPANT,CONTACT,NONE,ZEROPLUS +NONE,PARTICIPANT,LOCATION,NONE,ZEROPLUS +NONE,PARTICIPANT,REQUESTSTATUS,NONE,ZEROPLUS +NONE,PARTICIPANT,RELATEDTO,NONE,ZEROPLUS +NONE,PARTICIPANT,RESOURCES,NONE,ZEROPLUS +NONE,PARTICIPANT,STYLEDDESCRIPTION,NONE,ZEROPLUS +NONE,PARTICIPANT,STRUCTUREDDATA,NONE,ZEROPLUS +NONE,PARTICIPANT,X,NONE,ZEROPLUS +NONE,PARTICIPANT,NONE,VLOCATION,ZEROPLUS +NONE,PARTICIPANT,NONE,VRESOURCE,ZEROPLUS +NONE,PARTICIPANT,NONE,X,ZEROPLUS + +NONE,VLOCATION,UID,NONE,ONE +NONE,VLOCATION,DESCRIPTION,NONE,ZEROORONE +NONE,VLOCATION,GEO,NONE,ZEROORONE +NONE,VLOCATION,LOCATIONTYPE,NONE,ZEROORONE +NONE,VLOCATION,NAME,NONE,ZEROORONE +NONE,VLOCATION,STRUCTUREDDATA,NONE,ZEROPLUS +NONE,VLOCATION,X,NONE,ZEROPLUS + +NONE,VRESOURCE,UID,NONE,ONE +NONE,VRESOURCE,DESCRIPTION,NONE,ZEROORONE +NONE,VRESOURCE,GEO,NONE,ZEROORONE +NONE,VRESOURCE,NAME,NONE,ZEROORONE +NONE,VRESOURCE,RESOURCETYPE,NONE,ZEROORONE +NONE,VRESOURCE,STRUCTUREDDATA,NONE,ZEROPLUS +NONE,VRESOURCE,X,NONE,ZEROPLUS diff --git a/design-data/value-types.csv b/design-data/value-types.csv index 1cba2fa1..baafea1a 100644 --- a/design-data/value-types.csv +++ b/design-data/value-types.csv @@ -55,6 +55,10 @@ "#VALARM Extension types","RFC 9074 Section 8.1",,, "PROXIMITY","5036","(a)enum icalproperty_proximity","string","unitary","X=11300;ARRIVE;DEPART;CONNECT;DISCONNECT;NONE=11399" +"#Event Publication Extension types","RFC 9073 Section 6",,, +"PARTICIPANTTYPE","5037","(a)enum icalproperty_participanttype","string","unitary","X=11400;ACTIVE;INACTIVE;SPONSOR;CONTACT;BOOKING-CONTACT;EMERGENCY-CONTACT;PUBLICITY-CONTACT;PLANNER-CONTACT;PERFORMER;SPEAKER;NONE=11499" +"RESOURCETYPE","5038","(a)enum icalproperty_resourcetype","string","unitary","X=11500;ROOM;PROJECTOR;REMOTE-CONFERENCE-AUDIO;REMOTE-CONFERENCE-VIDEO;NONE=11599" + "#NOTE for updaters. Preserve the icalvalue_kind Enum values and property Enum values to aid forward compatibility" "# New Enum values for an existing icalvalue_kind should be inserted before the corresponding NONE value" -"# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11399)" +"# New icalvalue_kind types should start their Enum value after the highest NONE value (currently 11599)" diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 7c626082..c9703f8d 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -1182,6 +1182,11 @@ static const struct icalcomponent_kind_map component_map[] = { {ICAL_VPATCH_COMPONENT, "VPATCH"}, {ICAL_XPATCH_COMPONENT, "PATCH"}, + /* Event Publishing components */ + {ICAL_PARTICIPANT_COMPONENT, "PARTICIPANT"}, + {ICAL_VLOCATION_COMPONENT, "VLOCATION"}, + {ICAL_VRESOURCE_COMPONENT, "VRESOURCE"}, + /* End of list */ {ICAL_NO_COMPONENT, ""}, }; diff --git a/src/libical/icalcomponent.h b/src/libical/icalcomponent.h index 6a182d01..cd59f420 100644 --- a/src/libical/icalcomponent.h +++ b/src/libical/icalcomponent.h @@ -535,4 +535,10 @@ LIBICAL_ICAL_EXPORT icalcomponent *icalcomponent_new_vpatch(void); LIBICAL_ICAL_EXPORT icalcomponent *icalcomponent_new_xpatch(void); +LIBICAL_ICAL_EXPORT icalcomponent *icalcomponent_new_participant(void); + +LIBICAL_ICAL_EXPORT icalcomponent *icalcomponent_new_vlocation(void); + +LIBICAL_ICAL_EXPORT icalcomponent *icalcomponent_new_vresource(void); + #endif /* !ICALCOMPONENT_H */ diff --git a/src/libical/icalenums.h b/src/libical/icalenums.h index 8eb98c5d..ab2b454e 100644 --- a/src/libical/icalenums.h +++ b/src/libical/icalenums.h @@ -65,6 +65,9 @@ typedef enum icalcomponent_kind ICAL_XVOTE_COMPONENT, ICAL_VPATCH_COMPONENT, ICAL_XPATCH_COMPONENT, + ICAL_PARTICIPANT_COMPONENT, + ICAL_VLOCATION_COMPONENT, + ICAL_VRESOURCE_COMPONENT, ICAL_NUM_COMPONENT_TYPES /* MUST be last (unless we can put NO_COMP last) */ } icalcomponent_kind; -- cgit v1.2.1 From b73e66045d858ecafa493285b201df4dcf80897d Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Thu, 6 Jan 2022 11:19:02 -0500 Subject: icalcomponent.c: actually implement EventPub component constructors --- src/libical/icalcomponent.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index c9703f8d..0af56887 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -1965,6 +1965,21 @@ icalcomponent *icalcomponent_new_xpatch(void) return icalcomponent_new(ICAL_XPATCH_COMPONENT); } +icalcomponent *icalcomponent_new_participant(void) +{ + return icalcomponent_new(ICAL_PARTICIPANT_COMPONENT); +} + +icalcomponent *icalcomponent_new_vlocation(void) +{ + return icalcomponent_new(ICAL_VLOCATION_COMPONENT); +} + +icalcomponent *icalcomponent_new_vresource(void) +{ + return icalcomponent_new(ICAL_VRESOURCE_COMPONENT); +} + /* * Timezone stuff. */ -- cgit v1.2.1 From ee5ccffe8838f1c18e4d5343c2a491ad4be88bdc Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 10 Jan 2022 15:43:00 -0500 Subject: icalrestriction.c.in: consolidate STATUS value validation functions --- design-data/restrictions.csv | 24 +++--- src/libical/icalrestriction.c.in | 164 +++++++++++++++++---------------------- 2 files changed, 85 insertions(+), 103 deletions(-) diff --git a/design-data/restrictions.csv b/design-data/restrictions.csv index 974738c8..59b37568 100644 --- a/design-data/restrictions.csv +++ b/design-data/restrictions.csv @@ -26,7 +26,7 @@ PUBLISH,VEVENT,RDATE,NONE,ZEROPLUS PUBLISH,VEVENT,RELATEDTO,NONE,ZEROPLUS PUBLISH,VEVENT,RESOURCES,NONE,ZEROORONE PUBLISH,VEVENT,RRULE,NONE,ZEROPLUS -PUBLISH,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel +PUBLISH,VEVENT,STATUS,NONE,ZEROORONE,validate_status_value PUBLISH,VEVENT,TRANSP,NONE,ZEROORONE PUBLISH,VEVENT,URL,NONE,ZEROORONE PUBLISH,VEVENT,X,NONE,ZEROPLUS @@ -79,7 +79,7 @@ REQUEST,VEVENT,RELATEDTO,NONE,ZEROPLUS REQUEST,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS REQUEST,VEVENT,RESOURCES,NONE,ZEROORONE REQUEST,VEVENT,RRULE,NONE,ZEROPLUS -REQUEST,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf +REQUEST,VEVENT,STATUS,NONE,ZEROORONE,validate_status_value REQUEST,VEVENT,TRANSP,NONE,ZEROORONE REQUEST,VEVENT,URL,NONE,ZEROORONE REQUEST,VEVENT,X,NONE,ZEROPLUS @@ -179,7 +179,7 @@ ADD,VEVENT,RDATE,NONE,ZEROPLUS ADD,VEVENT,RELATEDTO,NONE,ZEROPLUS ADD,VEVENT,RESOURCES,NONE,ZEROORONE ADD,VEVENT,RRULE,NONE,ZEROPLUS -ADD,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf +ADD,VEVENT,STATUS,NONE,ZEROORONE,validate_status_value ADD,VEVENT,TRANSP,NONE,ZEROORONE ADD,VEVENT,URL,NONE,ZEROORONE ADD,VEVENT,X,NONE,ZEROPLUS @@ -230,7 +230,7 @@ CANCEL,VEVENT,RECURRENCEID,NONE,ZEROORONE,must_be_recurring CANCEL,VEVENT,RELATEDTO,NONE,ZEROPLUS CANCEL,VEVENT,RESOURCES,NONE,ZEROORONE CANCEL,VEVENT,RRULE,NONE,ZEROPLUS -CANCEL,VEVENT,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee +CANCEL,VEVENT,STATUS,NONE,ZEROORONE,validate_status_value CANCEL,VEVENT,SUMMARY,NONE,ZEROORONE CANCEL,VEVENT,TRANSP,NONE,ZEROORONE CANCEL,VEVENT,URL,NONE,ZEROORONE @@ -334,7 +334,7 @@ COUNTER,VEVENT,RELATEDTO,NONE,ZEROPLUS COUNTER,VEVENT,REQUESTSTATUS,NONE,ZEROPLUS COUNTER,VEVENT,RESOURCES,NONE,ZEROORONE COUNTER,VEVENT,RRULE,NONE,ZEROPLUS -COUNTER,VEVENT,STATUS,NONE,ZEROORONE,may_be_tent_conf_cancel +COUNTER,VEVENT,STATUS,NONE,ZEROORONE,validate_status_value COUNTER,VEVENT,TRANSP,NONE,ZEROORONE COUNTER,VEVENT,URL,NONE,ZEROORONE COUNTER,VEVENT,X,NONE,ZEROPLUS @@ -569,7 +569,7 @@ REQUEST,VTODO,RECURRENCEID,NONE,ZEROORONE,must_be_recurring REQUEST,VTODO,RELATEDTO,NONE,ZEROPLUS REQUEST,VTODO,RESOURCES,NONE,ZEROORONE REQUEST,VTODO,RRULE,NONE,ZEROPLUS -REQUEST,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process +REQUEST,VTODO,STATUS,NONE,ZEROORONE,validate_status_value REQUEST,VTODO,URL,NONE,ZEROORONE REQUEST,VTODO,X,NONE,ZEROPLUS REQUEST,VTODO,REQUESTSTATUS,NONE,ZERO @@ -669,7 +669,7 @@ ADD,VTODO,RDATE,NONE,ZEROPLUS ADD,VTODO,RELATEDTO,NONE,ZEROPLUS ADD,VTODO,RESOURCES,NONE,ZEROORONE ADD,VTODO,RRULE,NONE,ZEROPLUS -ADD,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process +ADD,VTODO,STATUS,NONE,ZEROORONE,validate_status_value ADD,VTODO,URL,NONE,ZEROORONE ADD,VTODO,X,NONE,ZEROPLUS ADD,VTODO,RECURRENCEID,NONE,ZERO,must_be_recurring @@ -720,7 +720,7 @@ CANCEL,VTODO,RELATEDTO,NONE,ZEROPLUS CANCEL,VTODO,RESOURCES,NONE,ZEROORONE CANCEL,VTODO,RRULE,NONE,ZEROPLUS CANCEL,VTODO,PRIORITY,NONE,ZEROORONE -CANCEL,VTODO,STATUS,NONE,ZEROORONE,must_be_canceled_no_attendee +CANCEL,VTODO,STATUS,NONE,ZEROORONE,validate_status_value CANCEL,VTODO,URL,NONE,ZEROORONE CANCEL,VTODO,X,NONE,ZEROPLUS CANCEL,VTODO,REQUESTSTATUS,NONE,ZERO @@ -820,7 +820,7 @@ COUNTER,VTODO,REQUESTSTATUS,NONE,ZEROPLUS COUNTER,VTODO,RESOURCES,NONE,ZEROORONE COUNTER,VTODO,RRULE,NONE,ZEROORONE COUNTER,VTODO,SEQUENCE,NONE,ZEROORONE -COUNTER,VTODO,STATUS,NONE,ZEROORONE,may_be_comp_need_process +COUNTER,VTODO,STATUS,NONE,ZEROORONE,validate_status_value COUNTER,VTODO,URL,NONE,ZEROORONE COUNTER,VTODO,X,NONE,ZEROPLUS COUNTER,VTODO,COLOR,NONE,ZEROORONE @@ -909,7 +909,7 @@ PUBLISH,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring PUBLISH,VJOURNAL,RELATEDTO,NONE,ZEROPLUS PUBLISH,VJOURNAL,RRULE,NONE,ZEROPLUS PUBLISH,VJOURNAL,SEQUENCE,NONE,ZEROORONE -PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE,may_be_draft_final_canceled +PUBLISH,VJOURNAL,STATUS,NONE,ZEROORONE,validate_status_value PUBLISH,VJOURNAL,SUMMARY,NONE,ZEROORONE PUBLISH,VJOURNAL,URL,NONE,ZEROORONE PUBLISH,VJOURNAL,X,NONE,ZEROPLUS @@ -992,7 +992,7 @@ CANCEL,VJOURNAL,RDATE,NONE,ZEROPLUS CANCEL,VJOURNAL,RECURRENCEID,NONE,ZEROORONE,must_be_recurring CANCEL,VJOURNAL,RELATEDTO,NONE,ZEROPLUS CANCEL,VJOURNAL,RRULE,NONE,ZEROPLUS -CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE,must_be_cancel_if_present +CANCEL,VJOURNAL,STATUS,NONE,ZEROORONE,validate_status_value CANCEL,VJOURNAL,SUMMARY,NONE,ZEROORONE CANCEL,VJOURNAL,URL,NONE,ZEROORONE CANCEL,VJOURNAL,X,NONE,ZEROPLUS @@ -1962,7 +1962,7 @@ CANCEL,VPOLL,POLLPROPERTIES,NONE,ZERO CANCEL,VPOLL,PRIORITY,NONE,ZEROORONE CANCEL,VPOLL,RELATEDTO,NONE,ZEROPLUS CANCEL,VPOLL,RESOURCES,NONE,ZEROPLUS -CANCEL,VPOLL,STATUS,NONE,ZEROORONE,must_be_cancel_if_present +CANCEL,VPOLL,STATUS,NONE,ZEROORONE,validate_status_value CANCEL,VPOLL,SUMMARY,NONE,ONE CANCEL,VPOLL,TRANSP,NONE,ZEROORONE CANCEL,VPOLL,URL,NONE,ZEROORONE diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index a213a741..a686784a 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -99,109 +99,91 @@ int icalrestriction_compare(icalrestriction_kind restr, int count) /* Special case routines */ -static const char *icalrestriction_may_be_draft_final_canceled( +static const char *icalrestriction_validate_status_value( const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) { icalproperty_status stat = icalproperty_get_status(prop); - _unused(rec); - _unused(comp); - - if (!(stat == ICAL_STATUS_DRAFT || - stat == ICAL_STATUS_FINAL || - stat == ICAL_STATUS_CANCELLED)) { - return - "Failed iTIP restrictions for STATUS property. " - "Value must be one of DRAFT, FINAL, or CANCELED"; - } - - return 0; -} - -static const char *icalrestriction_may_be_comp_need_process(const icalrestriction_record * - rec, icalcomponent *comp, - icalproperty *prop) -{ - icalproperty_status stat = icalproperty_get_status(prop); - - _unused(rec); - _unused(comp); - - if (!(stat == ICAL_STATUS_COMPLETED || - stat == ICAL_STATUS_NEEDSACTION || stat == ICAL_STATUS_INPROCESS)) { - return - "Failed iTIP restrictions for STATUS property. " - "Value must be one of COMPLETED, NEEDS-ACTION or IN-PROCESS"; - } - - return 0; -} - -static const char *icalrestriction_may_be_tent_conf(const icalrestriction_record * rec, - icalcomponent *comp, icalproperty *prop) -{ - icalproperty_status stat = icalproperty_get_status(prop); - - _unused(rec); - _unused(comp); - - if (!(stat == ICAL_STATUS_TENTATIVE || stat == ICAL_STATUS_CONFIRMED)) { - return - "Failed iTIP restrictions for STATUS property. " - "Value must be one of TENTATIVE or CONFIRMED"; - } - - return 0; -} - -static const char *icalrestriction_may_be_tent_conf_cancel(const icalrestriction_record * - rec, icalcomponent *comp, - icalproperty *prop) -{ - icalproperty_status stat = icalproperty_get_status(prop); - - _unused(rec); _unused(comp); - if (!(stat == ICAL_STATUS_TENTATIVE || - stat == ICAL_STATUS_CONFIRMED || stat == ICAL_STATUS_CANCELLED)) { - return - "Failed iTIP restrictions for STATUS property. " - "Value must be one of TENTATIVE, CONFIRMED or CANCELED"; + if (rec->method == ICAL_METHOD_CANCEL) { + switch (rec->component) { + case ICAL_VEVENT_COMPONENT: + case ICAL_VTODO_COMPONENT: + /* Hack. see rfc5546, 3.2.5 CANCEL for property STATUS. I don't + understand the note */ + break; + + case ICAL_VJOURNAL_COMPONENT: + case ICAL_VPOLL_COMPONENT: + if (stat != ICAL_STATUS_CANCELLED) { + return + "Failed iTIP restrictions for STATUS property. " + "Value must be CANCELLED"; + } + break; + + default: + break; + } } - - return 0; -} - -static const char *icalrestriction_must_be_cancel_if_present( - const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) -{ - /* This routine will not be called if prop == 0 */ - icalproperty_status stat = icalproperty_get_status(prop); - - _unused(rec); - _unused(comp); - - if (stat != ICAL_STATUS_CANCELLED) { - return "Failed iTIP restrictions for STATUS property. Value must be CANCELLED"; + else { + switch (rec->component) { + case ICAL_VEVENT_COMPONENT: + switch (rec->method) { + case ICAL_METHOD_PUBLISH: + case ICAL_METHOD_COUNTER: + if (!(stat == ICAL_STATUS_TENTATIVE || + stat == ICAL_STATUS_CONFIRMED || + stat == ICAL_STATUS_CANCELLED)) { + return + "Failed iTIP restrictions for STATUS property. " + "Value must be one of TENTATIVE, CONFIRMED or CANCELED"; + } + break; + + case ICAL_METHOD_REQUEST: + case ICAL_METHOD_ADD: + if (!(stat == ICAL_STATUS_TENTATIVE || + stat == ICAL_STATUS_CONFIRMED)) { + return + "Failed iTIP restrictions for STATUS property. " + "Value must be one of TENTATIVE or CONFIRMED"; + } + break; + + default: + break; + } + break; + + case ICAL_VTODO_COMPONENT: + switch (rec->method) { + case ICAL_METHOD_REQUEST: + case ICAL_METHOD_ADD: + case ICAL_METHOD_COUNTER: + if (!(stat == ICAL_STATUS_COMPLETED || + stat == ICAL_STATUS_NEEDSACTION || + stat == ICAL_STATUS_INPROCESS)) { + return + "Failed iTIP restrictions for STATUS property. " + "Value must be one of COMPLETED, NEEDS-ACTION or IN-PROCESS"; + } + break; + + default: + break; + } + break; + + default: + break; + } } return 0; } -static const char *icalrestriction_must_be_canceled_no_attendee( - const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) -{ - _unused(rec); - _unused(comp); - _unused(prop); - - /* Hack. see rfc5546, 3.2.5 CANCEL for property STATUS. I don't - understand the note */ - - return 0; -} - static const char *icalrestriction_must_be_recurring(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { -- cgit v1.2.1 From 96f75dc46003e5f6763f9ef4602bd913114f4791 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Tue, 11 Jan 2022 09:14:27 -0500 Subject: restrictions.csv, icalrestriction.c.in: consolidate VALARM restrictions and validation functions --- design-data/restrictions.csv | 252 +++++++++------------------------------ src/libical/icalrestriction.c.in | 222 ++++++++++++++++++++++++++-------- 2 files changed, 228 insertions(+), 246 deletions(-) diff --git a/design-data/restrictions.csv b/design-data/restrictions.csv index 59b37568..5d77c3f7 100644 --- a/design-data/restrictions.csv +++ b/design-data/restrictions.csv @@ -1509,201 +1509,63 @@ NONE,XDAYLIGHT,URL,NONE,ZERO NONE,XDAYLIGHT,VERSION,NONE,ZERO NONE,XDAYLIGHT,X,NONE,ZEROPLUS -NONE,XAUDIOALARM,ACTION,NONE,ONE -NONE,XAUDIOALARM,ATTACH,NONE,ZEROORONE -NONE,XAUDIOALARM,ATTENDEE,NONE,ZERO -NONE,XAUDIOALARM,CALSCALE,NONE,ZERO -NONE,XAUDIOALARM,CATEGORIES,NONE,ZERO -NONE,XAUDIOALARM,CLASS,NONE,ZERO -NONE,XAUDIOALARM,COMMENT,NONE,ZERO -NONE,XAUDIOALARM,COMPLETED,NONE,ZERO -NONE,XAUDIOALARM,CONTACT,NONE,ZERO -NONE,XAUDIOALARM,CREATED,NONE,ZERO -NONE,XAUDIOALARM,DESCRIPTION,NONE,ZERO -NONE,XAUDIOALARM,DTEND,NONE,ZERO -NONE,XAUDIOALARM,DTSTAMP,NONE,ZERO -NONE,XAUDIOALARM,DTSTART,NONE,ZERO -NONE,XAUDIOALARM,DUE,NONE,ZERO -NONE,XAUDIOALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat -NONE,XAUDIOALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration -NONE,XAUDIOALARM,EXDATE,NONE,ZERO -NONE,XAUDIOALARM,EXRULE,NONE,ZERO -NONE,XAUDIOALARM,FREEBUSY,NONE,ZERO -NONE,XAUDIOALARM,GEO,NONE,ZERO -NONE,XAUDIOALARM,LASTMODIFIED,NONE,ZERO -NONE,XAUDIOALARM,LOCATION,NONE,ZERO -NONE,XAUDIOALARM,METHOD,NONE,ZERO -NONE,XAUDIOALARM,ORGANIZER,NONE,ZERO -NONE,XAUDIOALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XAUDIOALARM,PRIORITY,NONE,ZERO -NONE,XAUDIOALARM,PRODID,NONE,ZERO -NONE,XAUDIOALARM,RDATE,NONE,ZERO -NONE,XAUDIOALARM,RECURRENCEID,NONE,ZERO -NONE,XAUDIOALARM,RELATEDTO,NONE,ZERO -NONE,XAUDIOALARM,REQUESTSTATUS,NONE,ZERO -NONE,XAUDIOALARM,RESOURCES,NONE,ZERO -NONE,XAUDIOALARM,RRULE,NONE,ZERO -NONE,XAUDIOALARM,SEQUENCE,NONE,ZERO -NONE,XAUDIOALARM,STATUS,NONE,ZERO -NONE,XAUDIOALARM,SUMMARY,NONE,ZERO -NONE,XAUDIOALARM,TRANSP,NONE,ZERO -NONE,XAUDIOALARM,TRIGGER,NONE,ONE -NONE,XAUDIOALARM,TZID,NONE,ZERO -NONE,XAUDIOALARM,TZNAME,NONE,ZERO -NONE,XAUDIOALARM,TZOFFSETFROM,NONE,ZERO -NONE,XAUDIOALARM,TZOFFSETTO,NONE,ZERO -NONE,XAUDIOALARM,TZURL,NONE,ZERO -NONE,XAUDIOALARM,UID,NONE,ZERO -NONE,XAUDIOALARM,URL,NONE,ZERO -NONE,XAUDIOALARM,VERSION,NONE,ZERO -NONE,XAUDIOALARM,X,NONE,ZEROPLUS - -NONE,XDISPLAYALARM,ACTION,NONE,ONE -NONE,XDISPLAYALARM,ATTACH,NONE,ZERO -NONE,XDISPLAYALARM,ATTENDEE,NONE,ZERO -NONE,XDISPLAYALARM,CALSCALE,NONE,ZERO -NONE,XDISPLAYALARM,CATEGORIES,NONE,ZERO -NONE,XDISPLAYALARM,CLASS,NONE,ZERO -NONE,XDISPLAYALARM,COMMENT,NONE,ZERO -NONE,XDISPLAYALARM,COMPLETED,NONE,ZERO -NONE,XDISPLAYALARM,CONTACT,NONE,ZERO -NONE,XDISPLAYALARM,CREATED,NONE,ZERO -NONE,XDISPLAYALARM,DESCRIPTION,NONE,ONE -NONE,XDISPLAYALARM,DTEND,NONE,ZERO -NONE,XDISPLAYALARM,DTSTAMP,NONE,ZERO -NONE,XDISPLAYALARM,DTSTART,NONE,ZERO -NONE,XDISPLAYALARM,DUE,NONE,ZERO -NONE,XDISPLAYALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat -NONE,XDISPLAYALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration -NONE,XDISPLAYALARM,EXDATE,NONE,ZERO -NONE,XDISPLAYALARM,EXRULE,NONE,ZERO -NONE,XDISPLAYALARM,FREEBUSY,NONE,ZERO -NONE,XDISPLAYALARM,GEO,NONE,ZERO -NONE,XDISPLAYALARM,LASTMODIFIED,NONE,ZERO -NONE,XDISPLAYALARM,LOCATION,NONE,ZERO -NONE,XDISPLAYALARM,METHOD,NONE,ZERO -NONE,XDISPLAYALARM,ORGANIZER,NONE,ZERO -NONE,XDISPLAYALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XDISPLAYALARM,PRIORITY,NONE,ZERO -NONE,XDISPLAYALARM,PRODID,NONE,ZERO -NONE,XDISPLAYALARM,RDATE,NONE,ZERO -NONE,XDISPLAYALARM,RECURRENCEID,NONE,ZERO -NONE,XDISPLAYALARM,RELATEDTO,NONE,ZERO -NONE,XDISPLAYALARM,REQUESTSTATUS,NONE,ZERO -NONE,XDISPLAYALARM,RESOURCES,NONE,ZERO -NONE,XDISPLAYALARM,RRULE,NONE,ZERO -NONE,XDISPLAYALARM,SEQUENCE,NONE,ZERO -NONE,XDISPLAYALARM,STATUS,NONE,ZERO -NONE,XDISPLAYALARM,SUMMARY,NONE,ZERO -NONE,XDISPLAYALARM,TRANSP,NONE,ZERO -NONE,XDISPLAYALARM,TRIGGER,NONE,ONE -NONE,XDISPLAYALARM,TZID,NONE,ZERO -NONE,XDISPLAYALARM,TZNAME,NONE,ZERO -NONE,XDISPLAYALARM,TZOFFSETFROM,NONE,ZERO -NONE,XDISPLAYALARM,TZOFFSETTO,NONE,ZERO -NONE,XDISPLAYALARM,TZURL,NONE,ZERO -NONE,XDISPLAYALARM,UID,NONE,ZERO -NONE,XDISPLAYALARM,URL,NONE,ZERO -NONE,XDISPLAYALARM,VERSION,NONE,ZERO -NONE,XDISPLAYALARM,X,NONE,ZEROPLUS - -NONE,XEMAILALARM,ACTION,NONE,ONE,must_be_email -NONE,XEMAILALARM,ATTACH,NONE,ZEROPLUS -NONE,XEMAILALARM,ATTENDEE,NONE,ONEPLUS -NONE,XEMAILALARM,CALSCALE,NONE,ZERO -NONE,XEMAILALARM,CATEGORIES,NONE,ZERO -NONE,XEMAILALARM,CLASS,NONE,ZERO -NONE,XEMAILALARM,COMMENT,NONE,ZERO -NONE,XEMAILALARM,COMPLETED,NONE,ZERO -NONE,XEMAILALARM,CONTACT,NONE,ZERO -NONE,XEMAILALARM,CREATED,NONE,ZERO -NONE,XEMAILALARM,DESCRIPTION,NONE,ONE -NONE,XEMAILALARM,DTEND,NONE,ZERO -NONE,XEMAILALARM,DTSTAMP,NONE,ZERO -NONE,XEMAILALARM,DTSTART,NONE,ZERO -NONE,XEMAILALARM,DUE,NONE,ZERO -NONE,XEMAILALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat -NONE,XEMAILALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration -NONE,XEMAILALARM,EXDATE,NONE,ZERO -NONE,XEMAILALARM,EXRULE,NONE,ZERO -NONE,XEMAILALARM,FREEBUSY,NONE,ZERO -NONE,XEMAILALARM,GEO,NONE,ZERO -NONE,XEMAILALARM,LASTMODIFIED,NONE,ZERO -NONE,XEMAILALARM,LOCATION,NONE,ZERO -NONE,XEMAILALARM,METHOD,NONE,ZERO -NONE,XEMAILALARM,ORGANIZER,NONE,ZERO -NONE,XEMAILALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XEMAILALARM,PRIORITY,NONE,ZERO -NONE,XEMAILALARM,PRODID,NONE,ZERO -NONE,XEMAILALARM,RDATE,NONE,ZERO -NONE,XEMAILALARM,RECURRENCEID,NONE,ZERO -NONE,XEMAILALARM,RELATEDTO,NONE,ZERO -NONE,XEMAILALARM,REQUESTSTATUS,NONE,ZERO -NONE,XEMAILALARM,RESOURCES,NONE,ZERO -NONE,XEMAILALARM,RRULE,NONE,ZERO -NONE,XEMAILALARM,SEQUENCE,NONE,ZERO -NONE,XEMAILALARM,STATUS,NONE,ZERO -NONE,XEMAILALARM,SUMMARY,NONE,ONE -NONE,XEMAILALARM,TRANSP,NONE,ZERO -NONE,XEMAILALARM,TRIGGER,NONE,ONE -NONE,XEMAILALARM,TZID,NONE,ZERO -NONE,XEMAILALARM,TZNAME,NONE,ZERO -NONE,XEMAILALARM,TZOFFSETFROM,NONE,ZERO -NONE,XEMAILALARM,TZOFFSETTO,NONE,ZERO -NONE,XEMAILALARM,TZURL,NONE,ZERO -NONE,XEMAILALARM,UID,NONE,ZERO -NONE,XEMAILALARM,URL,NONE,ZERO -NONE,XEMAILALARM,VERSION,NONE,ZERO -NONE,XEMAILALARM,X,NONE,ZEROPLUS - -NONE,XPROCEDUREALARM,ACTION,NONE,ONE -NONE,XPROCEDUREALARM,ATTACH,NONE,ZEROORONE -NONE,XPROCEDUREALARM,ATTENDEE,NONE,ZERO -NONE,XPROCEDUREALARM,CALSCALE,NONE,ZERO -NONE,XPROCEDUREALARM,CATEGORIES,NONE,ZERO -NONE,XPROCEDUREALARM,CLASS,NONE,ZERO -NONE,XPROCEDUREALARM,COMMENT,NONE,ZERO -NONE,XPROCEDUREALARM,COMPLETED,NONE,ZERO -NONE,XPROCEDUREALARM,CONTACT,NONE,ZERO -NONE,XPROCEDUREALARM,CREATED,NONE,ZERO -NONE,XPROCEDUREALARM,DESCRIPTION,NONE,ZEROORONE -NONE,XPROCEDUREALARM,DTEND,NONE,ZERO -NONE,XPROCEDUREALARM,DTSTAMP,NONE,ZERO -NONE,XPROCEDUREALARM,DTSTART,NONE,ZERO -NONE,XPROCEDUREALARM,DUE,NONE,ZERO -NONE,XPROCEDUREALARM,DURATION,NONE,ONEMUTUAL,must_have_repeat -NONE,XPROCEDUREALARM,REPEAT,NONE,ONEMUTUAL,must_have_duration -NONE,XPROCEDUREALARM,EXDATE,NONE,ZERO -NONE,XPROCEDUREALARM,EXRULE,NONE,ZERO -NONE,XPROCEDUREALARM,FREEBUSY,NONE,ZERO -NONE,XPROCEDUREALARM,GEO,NONE,ZERO -NONE,XPROCEDUREALARM,LASTMODIFIED,NONE,ZERO -NONE,XPROCEDUREALARM,LOCATION,NONE,ZERO -NONE,XPROCEDUREALARM,METHOD,NONE,ZERO -NONE,XPROCEDUREALARM,ORGANIZER,NONE,ZERO -NONE,XPROCEDUREALARM,PERCENTCOMPLETE,NONE,ZERO -NONE,XPROCEDUREALARM,PRIORITY,NONE,ZERO -NONE,XPROCEDUREALARM,PRODID,NONE,ZERO -NONE,XPROCEDUREALARM,RDATE,NONE,ZERO -NONE,XPROCEDUREALARM,RECURRENCEID,NONE,ZERO -NONE,XPROCEDUREALARM,RELATEDTO,NONE,ZERO -NONE,XPROCEDUREALARM,REQUESTSTATUS,NONE,ZERO -NONE,XPROCEDUREALARM,RESOURCES,NONE,ZERO -NONE,XPROCEDUREALARM,RRULE,NONE,ZERO -NONE,XPROCEDUREALARM,SEQUENCE,NONE,ZERO -NONE,XPROCEDUREALARM,STATUS,NONE,ZERO -NONE,XPROCEDUREALARM,SUMMARY,NONE,ZERO -NONE,XPROCEDUREALARM,TRANSP,NONE,ZERO -NONE,XPROCEDUREALARM,TRIGGER,NONE,ONE -NONE,XPROCEDUREALARM,TZID,NONE,ZERO -NONE,XPROCEDUREALARM,TZNAME,NONE,ZERO -NONE,XPROCEDUREALARM,TZOFFSETFROM,NONE,ZERO -NONE,XPROCEDUREALARM,TZOFFSETTO,NONE,ZERO -NONE,XPROCEDUREALARM,TZURL,NONE,ZERO -NONE,XPROCEDUREALARM,UID,NONE,ZERO -NONE,XPROCEDUREALARM,URL,NONE,ZERO -NONE,XPROCEDUREALARM,VERSION,NONE,ZERO -NONE,XPROCEDUREALARM,X,NONE,ZEROPLUS +NONE,VALARM,ACTION,NONE,ONE +NONE,VALARM,ATTACH,NONE,ZEROPLUS,validate_valarm_prop +NONE,VALARM,ATTENDEE,NONE,ZEROPLUS,validate_valarm_prop +NONE,VALARM,CALSCALE,NONE,ZERO +NONE,VALARM,CATEGORIES,NONE,ZERO +NONE,VALARM,CLASS,NONE,ZERO +NONE,VALARM,COMMENT,NONE,ZERO +NONE,VALARM,COMPLETED,NONE,ZERO +NONE,VALARM,CONTACT,NONE,ZERO +NONE,VALARM,CREATED,NONE,ZERO +NONE,VALARM,DESCRIPTION,NONE,ZEROORONE,validate_valarm_prop +NONE,VALARM,DTEND,NONE,ZERO +NONE,VALARM,DTSTAMP,NONE,ZERO +NONE,VALARM,DTSTART,NONE,ZERO +NONE,VALARM,DUE,NONE,ZERO +NONE,VALARM,DURATION,NONE,ONEMUTUAL,validate_valarm_prop +NONE,VALARM,REPEAT,NONE,ONEMUTUAL,validate_valarm_prop +NONE,VALARM,EXDATE,NONE,ZERO +NONE,VALARM,EXRULE,NONE,ZERO +NONE,VALARM,FREEBUSY,NONE,ZERO +NONE,VALARM,GEO,NONE,ZERO +NONE,VALARM,LASTMODIFIED,NONE,ZERO +NONE,VALARM,LOCATION,NONE,ZERO +NONE,VALARM,METHOD,NONE,ZERO +NONE,VALARM,ORGANIZER,NONE,ZERO +NONE,VALARM,PERCENTCOMPLETE,NONE,ZERO +NONE,VALARM,PRIORITY,NONE,ZERO +NONE,VALARM,PRODID,NONE,ZERO +NONE,VALARM,RDATE,NONE,ZERO +NONE,VALARM,RECURRENCEID,NONE,ZERO +NONE,VALARM,RELATEDTO,NONE,ZERO +NONE,VALARM,REQUESTSTATUS,NONE,ZERO +NONE,VALARM,RESOURCES,NONE,ZERO +NONE,VALARM,RRULE,NONE,ZERO +NONE,VALARM,SEQUENCE,NONE,ZERO +NONE,VALARM,STATUS,NONE,ZERO +NONE,VALARM,SUMMARY,NONE,ZEROORONE,validate_valarm_prop +NONE,VALARM,TRANSP,NONE,ZERO +NONE,VALARM,TRIGGER,NONE,ONE +NONE,VALARM,TZID,NONE,ZERO +NONE,VALARM,TZNAME,NONE,ZERO +NONE,VALARM,TZOFFSETFROM,NONE,ZERO +NONE,VALARM,TZOFFSETTO,NONE,ZERO +NONE,VALARM,TZURL,NONE,ZERO +NONE,VALARM,UID,NONE,ZEROORONE +NONE,VALARM,URL,NONE,ZERO +NONE,VALARM,VERSION,NONE,ZERO +NONE,VALARM,X,NONE,ZEROPLUS +NONE,VALARM,NONE,VLOCATION,ZEROPLUS,validate_valarm_prop +NONE,VALARM,NONE,VEVENT,ZERO +NONE,VALARM,NONE,VTODO,ZERO +NONE,VALARM,NONE,VJOURNAL,ZERO +NONE,VALARM,NONE,VFREEBUSY,ZERO +NONE,VALARM,NONE,VAVAILABILITY,ZERO +NONE,VALARM,NONE,VPOLL,ZERO +NONE,VALARM,NONE,VTIMEZONE,ZERO +NONE,VALARM,NONE,VALARM,ZERO NONE,VQUERY,QUERY,NONE,ZEROORONE NONE,VQUERY,QUERYNAME,NONE,ONE diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index a686784a..44447e6f 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -102,6 +102,8 @@ int icalrestriction_compare(icalrestriction_kind restr, int count) static const char *icalrestriction_validate_status_value( const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) { + if (!prop) return 0; + icalproperty_status stat = icalproperty_get_status(prop); _unused(comp); @@ -193,34 +195,6 @@ static const char *icalrestriction_must_be_recurring(const icalrestriction_recor return 0; } -static const char *icalrestriction_must_have_duration(const icalrestriction_record * rec, - icalcomponent *comp, icalproperty *prop) -{ - _unused(rec); - _unused(prop); - if (!icalcomponent_get_first_property(comp, ICAL_DURATION_PROPERTY)) { - return - "Failed iTIP restrictions for DURATION property. " - "This component must have a DURATION property"; - } - - return 0; -} - -static const char *icalrestriction_must_have_repeat(const icalrestriction_record * rec, - icalcomponent *comp, icalproperty *prop) -{ - _unused(rec); - _unused(prop); - if (!icalcomponent_get_first_property(comp, ICAL_REPEAT_PROPERTY)) { - return - "Failed iTIP restrictions for REPEAT property. " - "This component must have a REPEAT property"; - } - - return 0; -} - const char *icalrestriction_must_if_tz_ref(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { @@ -255,21 +229,6 @@ static const char *icalrestriction_no_duration(const icalrestriction_record * re return 0; } -static const char *icalrestriction_must_be_email(const icalrestriction_record * rec, - icalcomponent *comp, icalproperty *prop) -{ - icalproperty_action stat = icalproperty_get_action(prop); - - _unused(rec); - _unused(comp); - - if (!(stat == ICAL_ACTION_EMAIL)) { - return "Failed iTIP restrictions for ACTION property. Value must be EMAIL."; - } - - return 0; -} - static int _check_restriction(icalcomponent *comp, const icalrestriction_record *record, int count, icalproperty *prop) @@ -280,17 +239,15 @@ static int _check_restriction(icalcomponent *comp, restr = record->restriction; - if (restr == ICAL_RESTRICTION_ONEEXCLUSIVE || restr == ICAL_RESTRICTION_ONEMUTUAL) { + if (restr == ICAL_RESTRICTION_ONEEXCLUSIVE || + restr == ICAL_RESTRICTION_ONEMUTUAL) { /* First treat is as a 0/1 restriction */ restr = ICAL_RESTRICTION_ZEROORONE; - compare = icalrestriction_compare(restr, count); - - } else { - - compare = icalrestriction_compare(restr, count); } + compare = icalrestriction_compare(restr, count); + assert(compare != -1); if (compare == 0) { @@ -318,8 +275,7 @@ static int _check_restriction(icalcomponent *comp, icalproperty_free(errProp); } - if (record->function != NULL && - (prop || record->subcomponent != ICAL_NO_COMPONENT)) { + if (record->function != NULL) { funcr = record->function(record, comp, prop); } @@ -479,6 +435,170 @@ int icalrestriction_check(icalcomponent *outer_comp) return valid; } +static const char *icalrestriction_validate_valarm_prop( + const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) +{ + icalrestriction_record record = + { ICAL_METHOD_NONE, ICAL_VALARM_COMPONENT, + rec->property, ICAL_NO_COMPONENT, ICAL_RESTRICTION_UNKNOWN, NULL }; + const icalrestriction_record *myrec = NULL; + enum icalproperty_action action = ICAL_ACTION_NONE; + icalproperty *action_prop; + int count = 0; + + switch (rec->subcomponent) { + case ICAL_NO_COMPONENT: + action_prop = icalcomponent_get_first_property(comp, ICAL_ACTION_PROPERTY); + + if (action_prop) { + action = icalproperty_get_action(action_prop); + } + + if (prop) { + if (rec->restriction == ICAL_RESTRICTION_ZEROPLUS || + rec->restriction == ICAL_RESTRICTION_ONEPLUS) { + count = icalcomponent_count_properties(comp, rec->property); + } + else { + count = 1; + } + } + + switch (rec->property) { + case ICAL_DURATION_PROPERTY: + if (count && + !icalcomponent_get_first_property(comp, ICAL_DURATION_PROPERTY)) { + return + "Failed iTIP restrictions for REPEAT property. " + "This component must have a REPEAT property " + "if it has a DURATION property"; + } + break; + + case ICAL_REPEAT_PROPERTY: + if (count && + !icalcomponent_get_first_property(comp, ICAL_DURATION_PROPERTY)) { + return + "Failed iTIP restrictions for DURATION property. " + "This component must have a DURATION property " + "if it has a REPEAT property"; + } + break; + + case ICAL_ATTACH_PROPERTY: + if (count) { + switch (action) { + case ICAL_ACTION_AUDIO: + case ICAL_ACTION_PROCEDURE: + record.restriction = ICAL_RESTRICTION_ZEROORONE; + myrec = &record; + break; + + case ICAL_ACTION_DISPLAY: + record.restriction = ICAL_RESTRICTION_ZERO; + myrec = &record; + break; + + default: + break; + } + break; + } + break; + + case ICAL_ATTENDEE_PROPERTY: + switch (action) { + case ICAL_ACTION_AUDIO: + case ICAL_ACTION_DISPLAY: + case ICAL_ACTION_PROCEDURE: + if (count) { + record.restriction = ICAL_RESTRICTION_ZERO; + myrec = &record; + } + break; + + case ICAL_ACTION_EMAIL: + if (!count) { + record.restriction = ICAL_RESTRICTION_ONEPLUS; + myrec = &record; + } + break; + + default: + break; + } + break; + + case ICAL_DESCRIPTION_PROPERTY: + switch (action) { + case ICAL_ACTION_AUDIO: + if (count) { + record.restriction = ICAL_RESTRICTION_ZERO; + myrec = &record; + } + break; + + case ICAL_ACTION_DISPLAY: + case ICAL_ACTION_EMAIL: + if (!count) { + record.restriction = ICAL_RESTRICTION_ONE; + myrec = &record; + } + break; + + default: + break; + } + break; + + case ICAL_SUMMARY_PROPERTY: + switch (action) { + case ICAL_ACTION_AUDIO: + case ICAL_ACTION_DISPLAY: + case ICAL_ACTION_PROCEDURE: + if (count) { + record.restriction = ICAL_RESTRICTION_ZERO; + myrec = &record; + } + break; + + case ICAL_ACTION_EMAIL: + if (!count) { + record.restriction = ICAL_RESTRICTION_ONE; + myrec = &record; + } + break; + + default: + break; + } + break; + + default: + break; + } + break; + + case ICAL_VLOCATION_COMPONENT: + if (!icalcomponent_get_first_property(comp, ICAL_PROXIMITY_PROPERTY)) { + return + "Failed iTIP restrictions for VLOCATION component. " + "This component must only appear in a VALARM component " + "if the VALARM has a PROXIMITY property."; + } + break; + + default: + break; + } + + if (myrec) { + _check_restriction(comp, myrec, count, NULL); + } + + return 0; +} + static const icalrestriction_record *icalrestriction_get_restriction( -- cgit v1.2.1 From c2708e04dbe6538f5dec9707473111ce6f2d9725 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Tue, 11 Jan 2022 09:17:09 -0500 Subject: regression.c: add invalid VALARM to restriction test --- src/test/regression.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/test/regression.c b/src/test/regression.c index 0963d37c..8a967079 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -1145,7 +1145,15 @@ void test_restriction() icalproperty_vanew_dtend(atime, icalparameter_new_tzid("America/New_York"), (void *)0), - icalproperty_new_location("1CP Conference Room 4350"), (void *)0), (void *)0); + icalproperty_new_location("1CP Conference Room 4350"), + icalcomponent_vanew(ICAL_VALARM_COMPONENT, + icalproperty_new_action(ICAL_ACTION_EMAIL), + icalproperty_new_repeat(0), + icalcomponent_vanew(ICAL_VLOCATION_COMPONENT, + (void *)0), + (void *)0), + (void *)0), + (void *)0); valid = icalrestriction_check(comp); -- cgit v1.2.1 From 47445e7646440b2ed615e8ebc35a6e062daf8084 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Tue, 11 Jan 2022 09:20:04 -0500 Subject: LOCATION-TYPE is a multivalued property --- design-data/properties.csv | 2 +- src/libical/icalvalue.c | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/design-data/properties.csv b/design-data/properties.csv index 4817192b..7217a582 100644 --- a/design-data/properties.csv +++ b/design-data/properties.csv @@ -157,7 +157,7 @@ "PATCH-PARAMETER","125","TEXT","TEXT" "#Event Publication Extensions Properies","RFC 9073 Section 6", -"LOCATION-TYPE","127","TEXT","TEXT" +"LOCATION-TYPE","127","TEXT","TEXT",is_multivalued "PARTICIPANT-TYPE","128","PARTICIPANTTYPE","PARTICIPANTTYPE" "RESOURCE-TYPE","129","RESOURCETYPE","RESOURCETYPE" "CALENDAR-ADDRESS","130","CAL-ADDRESS","CAL-ADDRESS" diff --git a/src/libical/icalvalue.c b/src/libical/icalvalue.c index 81c48315..e8894152 100644 --- a/src/libical/icalvalue.c +++ b/src/libical/icalvalue.c @@ -311,7 +311,8 @@ static char *icalmemory_strdup_and_quote(const icalvalue *value, const char *unq https://tools.ietf.org/html/rfc5545#section-3.8.1.2 */ if ((icalproperty_isa(value->parent) == ICAL_CATEGORIES_PROPERTY) || (icalproperty_isa(value->parent) == ICAL_RESOURCES_PROPERTY) || - (icalproperty_isa(value->parent) == ICAL_POLLPROPERTIES_PROPERTY)) { + (icalproperty_isa(value->parent) == ICAL_POLLPROPERTIES_PROPERTY) || + (icalproperty_isa(value->parent) == ICAL_LOCATIONTYPE_PROPERTY)) { icalmemory_append_char(&str, &str_p, &buf_sz, *p); break; } -- cgit v1.2.1 From 2e46040d0671eaa0f6a0145bd2aa886fd3f6ce08 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 17 Jan 2022 15:16:03 -0500 Subject: Add RFC9073, RFC9074 to documentation --- README.md | 7 +++++-- doc/Mainpage.dox | 2 +- doc/UsingLibical.md | 9 +++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 698a027e..af3708f1 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,9 @@ 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][]; +Libical implements [RFC5545][], [RFC5546][], [RFC7529][]; +the CalDav scheduling extensions in [RFC6638][]; +iCalendar extensions in [RFC7986][], [RFC9073][], [RFC9074][]; plus the iCalendar iMIP protocol in [RFC6047][]. [RFC5545]: https://tools.ietf.org/html/rfc5545 @@ -26,6 +27,8 @@ plus the iCalendar iMIP protocol in [RFC6047][]. [RFC6638]: https://tools.ietf.org/html/rfc6638 [RFC6047]: https://tools.ietf.org/html/rfc6047 [RFC7986]: https://tools.ietf.org/html/rfc7986 +[RFC9073]: https://tools.ietf.org/html/rfc9073 +[RFC9074]: https://tools.ietf.org/html/rfc9074 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 diff --git a/doc/Mainpage.dox b/doc/Mainpage.dox index 7e9cd259..45fa36e0 100644 --- a/doc/Mainpage.dox +++ b/doc/Mainpage.dox @@ -10,7 +10,7 @@ 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; +iCalendar extensions in RFC7986, RFC9073, RFC9074; plus the iCalendar iMIP protocol in RFC6047. @section license License diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index 51103495..e8ab163c 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -11,8 +11,10 @@ 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 -iCalendar extensions in [RFC6638][]; and some of [RFC6047][]. +Libical implements [RFC5545][], [RFC5546][], [RFC7529][]; +the CalDav scheduling extensions in [RFC6638][]; +the iCalendar extensions in [RFC7986][], [RFC9073][], [RFC9074][]; +and some of [RFC6047][]. This documentation assumes that you are familiar with the iCalendar @@ -24,6 +26,9 @@ at the [IETF Tools][] website: [RFC7529]: https://tools.ietf.org/html/rfc7529 [RFC6638]: https://tools.ietf.org/html/rfc6638 [RFC6047]: https://tools.ietf.org/html/rfc6047 +[RFC6638]: https://tools.ietf.org/html/rfc7986 +[RFC9073]: https://tools.ietf.org/html/rfc9073 +[RFC9074]: https://tools.ietf.org/html/rfc9074 [IETF Tools]: https://tools.ietf.org/ ### 1.1 The libical project -- cgit v1.2.1 From 3af0b374dd8931adb289f5bf3805d683221b02d9 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 19 Jan 2022 08:19:25 -0500 Subject: icalrestriction.c.in: be legacy compiler friendly --- src/libical/icalrestriction.c.in | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index 44447e6f..77a59f14 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -102,12 +102,14 @@ int icalrestriction_compare(icalrestriction_kind restr, int count) static const char *icalrestriction_validate_status_value( const icalrestriction_record *rec, icalcomponent *comp, icalproperty *prop) { - if (!prop) return 0; - - icalproperty_status stat = icalproperty_get_status(prop); + icalproperty_status stat; _unused(comp); + if (!prop) return 0; + + stat = icalproperty_get_status(prop); + if (rec->method == ICAL_METHOD_CANCEL) { switch (rec->component) { case ICAL_VEVENT_COMPONENT: -- cgit v1.2.1 From 243aa0267d19f47ebe44a558ffa83675ede0aa5a Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 19 Jan 2022 15:26:24 +0100 Subject: icalvalue: Reset non-UTC icaltimetype::zone on set When setting an icaltimetype value, the passed-in structure can have set a timezone, which is tight to the source component of the passed-in value and which can be made invalid when the source component is freed. As the structure is copied completely even on clone of the component, then the 'zone' pointer can be passed forward in the clones. Related to https://bugzilla.redhat.com/show_bug.cgi?id=2038090 --- ReleaseNotes.txt | 2 +- src/libical/icalderivedvalue.c.in | 6 +++ src/test/regression.c | 93 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index c74d5198..dc428b86 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -3,7 +3,7 @@ Release Highlights Version 3.0.14 (UNRELEASED): ---------------------------- - * + * icalvalue: Reset non-UTC icaltimetype::zone on set Version 3.0.13 (17 January 2022): --------------------------------- diff --git a/src/libical/icalderivedvalue.c.in b/src/libical/icalderivedvalue.c.in index 2727e0b4..34c5488a 100644 --- a/src/libical/icalderivedvalue.c.in +++ b/src/libical/icalderivedvalue.c.in @@ -28,6 +28,7 @@ #include "icalvalueimpl.h" #include "icalerror.h" #include "icalmemory.h" +#include "icaltimezone.h" #include #include @@ -299,6 +300,11 @@ void icalvalue_set_datetimedate(icalvalue *value, struct icaltimetype v) impl = (struct icalvalue_impl *)value; impl->data.v_time = v; + /* preserve only built-in UTC time zone, otherwise unset any set on the 'v' */ + if(impl->data.v_time.zone != NULL && + impl->data.v_time.zone != icaltimezone_get_utc_timezone()) + impl->data.v_time.zone = NULL; + icalvalue_reset_kind(impl); } diff --git a/src/test/regression.c b/src/test/regression.c index 076922b5..f50717d5 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4832,6 +4832,98 @@ static void test_implicit_dtend_duration(void) icalcomponent_free(c); } +static void +test_icalvalue_resets_timezone_on_set(void) +{ + const char *strcomp = + "BEGIN:VCALENDAR\r\n" + "BEGIN:VTIMEZONE\r\n" + "TZID:my_zone\r\n" + "BEGIN:STANDARD\r\n" + "TZNAME:my_zone\r\n" + "DTSTART:19160429T230000\r\n" + "TZOFFSETFROM:+0100\r\n" + "TZOFFSETTO:+0200\r\n" + "RRULE:FREQ=YEARLY;UNTIL=19160430T220000Z;BYDAY=-1SU;BYMONTH=4\r\n" + "END:STANDARD\r\n" + "END:VTIMEZONE\r\n" + "BEGIN:VEVENT\r\n" + "UID:0\r\n" + "DTSTART;TZID=my_zone:20180101T010000\r\n" + "DTEND:20180202T020000Z\r\n" + "DUE:20180302T030000\r\n" + "END:VEVENT\r\n" + "END:VCALENDAR\r\n"; + icalcomponent *comp, *clone, *inner; + icaltimetype comp_dtstart, comp_dtend, comp_due; + icaltimetype clone_dtstart, clone_dtend, clone_due; + const char *orig_str, *clone_str; + int estate; + + estate = icalerror_get_errors_are_fatal(); + icalerror_set_errors_are_fatal(0); + + /* First try without calling 'set' */ + comp = icalcomponent_new_from_string(strcomp); + ok("1st - vCalendar can be parsed", (comp != NULL)); + inner = icalcomponent_get_inner(comp); + ok("1st - inner exists", (inner != NULL)); + orig_str = icalcomponent_as_ical_string(inner); + comp_dtstart = icalcomponent_get_dtstart(inner); + comp_dtend = icalcomponent_get_dtend(inner); + comp_due = icalcomponent_get_due(inner); + ok("1st - comp dtstart is non-UTC zone", (comp_dtstart.zone != NULL && comp_dtstart.zone != icaltimezone_get_utc_timezone())); + ok("1st - comp dtend is UTC zone", (comp_dtend.zone == icaltimezone_get_utc_timezone())); + ok("1st - comp due is floating", (comp_due.zone == NULL)); + clone = icalcomponent_new_clone(inner); + icalcomponent_free(comp); + /* note the comp_dtstart.zone points to a freed memory now (it was freed with the 'comp') */ + clone_dtstart = icalcomponent_get_dtstart(clone); + clone_dtend = icalcomponent_get_dtend(clone); + clone_due = icalcomponent_get_due(clone); + ok("1st - clone dtstart is null zone", (clone_dtstart.zone == NULL)); + ok("1st - clone dtend is UTC zone", (clone_dtend.zone == icaltimezone_get_utc_timezone())); + ok("1st - clone due is floating", (clone_due.zone == NULL)); + clone_str = icalcomponent_as_ical_string(clone); + ok("1st - clone and orig components match", (strcmp(orig_str, clone_str) == 0)); + icalcomponent_free(clone); + + /* Second try with calling 'set' */ + comp = icalcomponent_new_from_string(strcomp); + inner = icalcomponent_get_inner(comp); + orig_str = icalcomponent_as_ical_string(inner); + comp_dtstart = icalcomponent_get_dtstart(inner); + comp_dtend = icalcomponent_get_dtend(inner); + comp_due = icalcomponent_get_due(inner); + ok("2nd - comp dtstart is non-UTC zone", (comp_dtstart.zone != NULL && comp_dtstart.zone != icaltimezone_get_utc_timezone())); + ok("2nd - comp dtend is UTC zone", (comp_dtend.zone == icaltimezone_get_utc_timezone())); + ok("2nd - comp due is floating", (comp_due.zone == NULL)); + icalcomponent_set_dtstart(inner, comp_dtstart); + icalcomponent_set_dtend(inner, comp_dtend); + icalcomponent_set_due(inner, comp_due); + comp_dtstart = icalcomponent_get_dtstart(inner); + comp_dtend = icalcomponent_get_dtend(inner); + comp_due = icalcomponent_get_due(inner); + ok("2nd - comp dtstart is non-UTC zone", (comp_dtstart.zone != NULL && comp_dtstart.zone != icaltimezone_get_utc_timezone())); + ok("2nd - comp dtend is UTC zone after set", (comp_dtend.zone == icaltimezone_get_utc_timezone())); + ok("2nd - comp due is floating after set", (comp_due.zone == NULL)); + clone = icalcomponent_new_clone(inner); + icalcomponent_free(comp); + /* note the comp_dtstart.zone points to a freed memory now (it was freed with the 'comp') */ + clone_dtstart = icalcomponent_get_dtstart(clone); + clone_dtend = icalcomponent_get_dtend(clone); + clone_due = icalcomponent_get_due(clone); + ok("2nd - clone dtstart is null zone", (clone_dtstart.zone == NULL)); + ok("2nd - clone dtend is UTC zone", (clone_dtend.zone == icaltimezone_get_utc_timezone())); + ok("2nd - clone due is floating", (clone_due.zone == NULL)); + clone_str = icalcomponent_as_ical_string(clone); + ok("2nd - clone and orig components match", (strcmp(orig_str, clone_str) == 0)); + icalcomponent_free(clone); + + icalerror_set_errors_are_fatal(estate); + icalerror_clear_errno(); +} + int main(int argc, char *argv[]) { #if !defined(HAVE_UNISTD_H) @@ -4972,6 +5064,7 @@ int main(int argc, char *argv[]) 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); + test_run("Test icalvalue resets timezone on set", test_icalvalue_resets_timezone_on_set, do_test, do_header); /** OPTIONAL TESTS go here... **/ -- cgit v1.2.1 From 5d9ddac57dac43c516d2fbde03eedf75e653b51d Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Wed, 19 Jan 2022 10:33:44 -0500 Subject: icalrestriction.c.in: special restriction callbacks can be called with prop == NULL --- src/libical/icalrestriction.c.in | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index 77a59f14..fafa23a0 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -210,8 +210,9 @@ static const char *icalrestriction_no_dtend(const icalrestriction_record * rec, icalcomponent *comp, icalproperty *prop) { _unused(rec); - _unused(prop); - if (icalcomponent_get_first_property(comp, ICAL_DTEND_PROPERTY)) { + + if (prop != NULL && + icalcomponent_get_first_property(comp, ICAL_DTEND_PROPERTY)) { return "Failed iTIP restrictions for DTEND property. " "The component must not have both DURATION and DTEND"; @@ -224,10 +225,15 @@ static const char *icalrestriction_no_duration(const icalrestriction_record * re icalcomponent *comp, icalproperty *prop) { _unused(rec); - _unused(comp); - _unused(prop); - /* _no_dtend takes care of this one */ + if (prop != NULL && + icalcomponent_get_first_property(comp, ICAL_DURATION_PROPERTY)) { + return + "Failed iTIP restrictions for DURATION property. " + "The component must not have both DTEND and DURATION"; + } + + return 0; } -- cgit v1.2.1 From 6a53b7bff33ed4097e2e46458d69425fae0ccec9 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 20 Jan 2022 08:05:37 -0500 Subject: src/libical/icalrestriction.c.in - minor coding style --- src/libical/icalrestriction.c.in | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index fafa23a0..35da6970 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -106,7 +106,9 @@ static const char *icalrestriction_validate_status_value( _unused(comp); - if (!prop) return 0; + if (!prop) { + return 0; + } stat = icalproperty_get_status(prop); @@ -130,8 +132,7 @@ static const char *icalrestriction_validate_status_value( default: break; } - } - else { + } else { switch (rec->component) { case ICAL_VEVENT_COMPONENT: switch (rec->method) { @@ -233,7 +234,6 @@ static const char *icalrestriction_no_duration(const icalrestriction_record * re "The component must not have both DTEND and DURATION"; } - return 0; } @@ -466,8 +466,7 @@ static const char *icalrestriction_validate_valarm_prop( if (rec->restriction == ICAL_RESTRICTION_ZEROPLUS || rec->restriction == ICAL_RESTRICTION_ONEPLUS) { count = icalcomponent_count_properties(comp, rec->property); - } - else { + } else { count = 1; } } -- cgit v1.2.1 From 135d201161425bbb112daaef0bb5a5c837aea8d0 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 20 Jan 2022 08:13:06 -0500 Subject: ReleaseNotes.txt - mention rfc9073 and rfc9074 support --- ReleaseNotes.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index edc5c153..c3186512 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -6,7 +6,8 @@ Version 3.1.0 (NOT RELEASED YET): * MSVC 2013 or higher (when building on Windows with MSVC) * Requires CMake v3.11.0 or higher * libical-glib now requires glib 2.38 or higher - * Improved FindICU (from the official CMake) + * draft-ietf-calext-eventpub-extensions-19 (RFC 9073) support added + * draft-ietf-calext-valarm-extensions-07 (RFC 9074) support added * Allow previous recurrence iteration * Improved performance of recurrence iterators * All ical*_new_clone() functions have been deprecated in favour of ical*_clone() -- cgit v1.2.1 From eb3ce9bc29912b087b5868414f3028f60a13cc9d Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 20 Jan 2022 11:35:03 -0500 Subject: src/libical/icalderivedvalue.c.in - minor coding style --- src/libical/icalderivedvalue.c.in | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/libical/icalderivedvalue.c.in b/src/libical/icalderivedvalue.c.in index 34c5488a..dfbebba7 100644 --- a/src/libical/icalderivedvalue.c.in +++ b/src/libical/icalderivedvalue.c.in @@ -301,9 +301,10 @@ void icalvalue_set_datetimedate(icalvalue *value, struct icaltimetype v) impl->data.v_time = v; /* preserve only built-in UTC time zone, otherwise unset any set on the 'v' */ - if(impl->data.v_time.zone != NULL && - impl->data.v_time.zone != icaltimezone_get_utc_timezone()) - impl->data.v_time.zone = NULL; + if (impl->data.v_time.zone != NULL && + impl->data.v_time.zone != icaltimezone_get_utc_timezone()) { + impl->data.v_time.zone = NULL; + } icalvalue_reset_kind(impl); } -- cgit v1.2.1 From 8e22e9170eacbb94497776a62343b01f4a68ec1c Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Fri, 2 Mar 2018 16:39:58 +0100 Subject: Replaced malloc, realloc, free and strdup with corresponding icalmemory_* functions. --- scripts/mkderivedvalues.pl | 2 +- src/libical/icalarray.c | 17 ++++++----- src/libical/icalattach.c | 19 ++++++------ src/libical/icalcomponent.c | 50 +++++++++++++++--------------- src/libical/icalderivedvalue.c.in | 8 ++--- src/libical/icalduration.h | 4 +-- src/libical/icalerror.c | 7 +++-- src/libical/icallangbind.c | 14 ++++----- src/libical/icalmemory.c | 16 +++++----- src/libical/icalmemory.h | 12 +++++--- src/libical/icalmime.c | 18 +++++------ src/libical/icalparameter.c | 22 +++++++------- src/libical/icalparameter.h | 8 ++--- src/libical/icalparser.c | 8 ++--- src/libical/icalproperty.c | 26 ++++++++-------- src/libical/icalrecur.c | 20 ++++++------ src/libical/icaltimezone.c | 64 +++++++++++++++++++-------------------- src/libical/icaltz-util.c | 37 +++++++++++----------- src/libical/icalvalue.c | 36 +++++++++++----------- src/libical/pvl.c | 10 +++--- src/libical/sspm.c | 62 +++++++++++++++++++------------------ src/libicalss/icalclassify.c | 6 ++-- src/libicalss/icalfileset.c | 5 +-- src/test/regression.c | 8 ++--- 24 files changed, 245 insertions(+), 234 deletions(-) diff --git a/scripts/mkderivedvalues.pl b/scripts/mkderivedvalues.pl index a5b5a194..85170730 100755 --- a/scripts/mkderivedvalues.pl +++ b/scripts/mkderivedvalues.pl @@ -226,7 +226,7 @@ $pointer_check_rv\ if ($union_data eq 'string') { print -" if (impl->data.v_${union_data} != 0) {\n free((void *)impl->data.v_${union_data});\n }\n"; +" if (impl->data.v_${union_data} != 0) {\n icalmemory_free_buffer((void *)impl->data.v_${union_data});\n }\n"; } print "\ diff --git a/src/libical/icalarray.c b/src/libical/icalarray.c index 58c545d2..a3174b95 100644 --- a/src/libical/icalarray.c +++ b/src/libical/icalarray.c @@ -22,6 +22,7 @@ #include "icalarray.h" #include "icalerror.h" +#include "icalmemory.h" #include "qsort_gen.h" #include @@ -33,7 +34,7 @@ icalarray *icalarray_new(size_t element_size, size_t increment_size) { icalarray *array; - array = (icalarray *) malloc(sizeof(icalarray)); + array = (icalarray *) icalmemory_new_buffer(sizeof(icalarray)); if (!array) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return NULL; @@ -50,7 +51,7 @@ icalarray *icalarray_new(size_t element_size, size_t increment_size) static void *icalarray_alloc_chunk(icalarray *array) { - void *chunk = malloc(array->element_size * array->increment_size); + void *chunk = icalmemory_new_buffer(array->element_size * array->increment_size); if (!chunk) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); @@ -71,7 +72,7 @@ icalarray *icalarray_copy(icalarray *originalarray) array->num_elements = originalarray->num_elements; array->space_allocated = originalarray->space_allocated; - array->chunks = malloc(chunks * sizeof(void *)); + array->chunks = icalmemory_new_buffer(chunks * sizeof(void *)); if (array->chunks) { for (chunk = 0; chunk < chunks; chunk++) { array->chunks[chunk] = icalarray_alloc_chunk(array); @@ -95,12 +96,12 @@ void icalarray_free(icalarray *array) size_t chunk; for (chunk = 0; chunk < chunks; chunk++) { - free(array->chunks[chunk]); + icalmemory_free_buffer(array->chunks[chunk]); } - free(array->chunks); + icalmemory_free_buffer(array->chunks); array->chunks = 0; } - free(array); + icalmemory_free_buffer(array); } void icalarray_append(icalarray *array, const void *element) @@ -180,7 +181,7 @@ static void icalarray_expand(icalarray *array, size_t space_needed) num_new_chunks = 1; } - new_chunks = malloc((num_chunks + num_new_chunks) * sizeof(void *)); + new_chunks = icalmemory_new_buffer((num_chunks + num_new_chunks) * sizeof(void *)); if (new_chunks) { if (array->chunks && num_chunks) { @@ -190,7 +191,7 @@ static void icalarray_expand(icalarray *array, size_t space_needed) new_chunks[c + num_chunks] = icalarray_alloc_chunk(array); } if (array->chunks) { - free(array->chunks); + icalmemory_free_buffer(array->chunks); } array->chunks = new_chunks; array->space_allocated = array->space_allocated + num_new_chunks * array->increment_size; diff --git a/src/libical/icalattach.c b/src/libical/icalattach.c index 423cc27e..63147154 100644 --- a/src/libical/icalattach.c +++ b/src/libical/icalattach.c @@ -22,6 +22,7 @@ #include "icalattachimpl.h" #include "icalerror.h" +#include "icalmemory.h" #include #include @@ -33,13 +34,13 @@ icalattach *icalattach_new_from_url(const char *url) icalerror_check_arg_rz((url != NULL), "url"); - if ((attach = malloc(sizeof(icalattach))) == NULL) { + if ((attach = icalmemory_new_buffer(sizeof(icalattach))) == NULL) { errno = ENOMEM; return NULL; } - if ((url_copy = strdup(url)) == NULL) { - free(attach); + if ((url_copy = icalmemory_strdup(url)) == NULL) { + icalmemory_free_buffer(attach); errno = ENOMEM; return NULL; } @@ -54,7 +55,7 @@ icalattach *icalattach_new_from_url(const char *url) static void attach_data_free(char *data, void *free_fn_data) { _unused(free_fn_data); - free(data); + icalmemory_free_buffer(data); } icalattach *icalattach_new_from_data(const char *data, icalattach_free_fn_t free_fn, @@ -64,15 +65,15 @@ icalattach *icalattach_new_from_data(const char *data, icalattach_free_fn_t free icalerror_check_arg_rz((data != NULL), "data"); - if ((attach = malloc(sizeof(icalattach))) == NULL) { + if ((attach = icalmemory_new_buffer(sizeof(icalattach))) == NULL) { errno = ENOMEM; return NULL; } if (!free_fn) { - data = strdup(data); + data = icalmemory_strdup(data); if (!data) { - free(attach); + icalmemory_free_buffer(attach); errno = ENOMEM; return NULL; } @@ -107,12 +108,12 @@ void icalattach_unref(icalattach *attach) return; if (attach->is_url) { - free(attach->u.url.url); + icalmemory_free_buffer(attach->u.url.url); } else if (attach->u.data.free_fn) { (* attach->u.data.free_fn) (attach->u.data.data, attach->u.data.free_fn_data); } - free(attach); + icalmemory_free_buffer(attach); } int icalattach_get_is_url(icalattach *attach) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 0af56887..473110d2 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -91,7 +91,7 @@ static icalcomponent *icalcomponent_new_impl(icalcomponent_kind kind) if (!icalcomponent_kind_is_valid(kind)) return NULL; - if ((comp = (icalcomponent *) malloc(sizeof(icalcomponent))) == 0) { + if ((comp = (icalcomponent *) icalmemory_new_buffer(sizeof(icalcomponent))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -210,7 +210,7 @@ void icalcomponent_free(icalcomponent *c) pvl_free(c->components); if (c->x_name != 0) { - free(c->x_name); + icalmemory_free_buffer(c->x_name); } if (c->timezones) { @@ -227,7 +227,7 @@ void icalcomponent_free(icalcomponent *c) c->id[0] = 'X'; c->timezones = NULL; - free(c); + icalmemory_free_buffer(c); } } @@ -282,7 +282,7 @@ char *icalcomponent_as_ical_string_r(icalcomponent *impl) tmp_buf = icalproperty_as_ical_string_r(p); icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); - free(tmp_buf); + icalmemory_free_buffer(tmp_buf); } for (itr = pvl_head(impl->components); itr != 0; itr = pvl_next(itr)) { @@ -291,7 +291,7 @@ char *icalcomponent_as_ical_string_r(icalcomponent *impl) tmp_buf = icalcomponent_as_ical_string_r(c); icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); - free(tmp_buf); + icalmemory_free_buffer(tmp_buf); } icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:"); @@ -2015,7 +2015,7 @@ void icalcomponent_merge_component(icalcomponent *comp, icalcomponent *comp_to_m /* Now free the tzids_to_rename array. */ for (i = 0; i < tzids_to_rename->num_elements; i++) { - free(icalarray_element_at(tzids_to_rename, i)); + icalmemory_free_buffer(icalarray_element_at(tzids_to_rename, i)); } } icalarray_free(tzids_to_rename); @@ -2074,7 +2074,7 @@ static void icalcomponent_merge_vtimezone(icalcomponent *comp, unique one), so we compare the VTIMEZONE components to see if they are the same. If they are, we don't need to do anything. We make a copy of the tzid, since the parameter may get modified in these calls. */ - tzid_copy = strdup(tzid); + tzid_copy = icalmemory_strdup(tzid); if (!tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; @@ -2087,7 +2087,7 @@ static void icalcomponent_merge_vtimezone(icalcomponent *comp, icalcomponent_handle_conflicting_vtimezones(comp, vtimezone, tzid_prop, tzid_copy, tzids_to_rename); } - free(tzid_copy); + icalmemory_free_buffer(tzid_copy); } static void icalcomponent_handle_conflicting_vtimezones(icalcomponent *comp, @@ -2131,20 +2131,20 @@ static void icalcomponent_handle_conflicting_vtimezones(icalcomponent *comp, if (icalcomponent_compare_vtimezones(icaltimezone_get_component(zone), vtimezone)) { /* The VTIMEZONEs match, so we can use the existing VTIMEZONE. But we have to rename TZIDs to this TZID. */ - tzid_copy = strdup(tzid); + tzid_copy = icalmemory_strdup(tzid); if (!tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } - existing_tzid_copy = strdup(existing_tzid); + existing_tzid_copy = icalmemory_strdup(existing_tzid); if (!existing_tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); - free(tzid_copy); + icalmemory_free_buffer(tzid_copy); } else { icalarray_append(tzids_to_rename, tzid_copy); - free(tzid_copy); + icalmemory_free_buffer(tzid_copy); icalarray_append(tzids_to_rename, existing_tzid_copy); - free(existing_tzid_copy); + icalmemory_free_buffer(existing_tzid_copy); } return; } else { @@ -2161,17 +2161,17 @@ static void icalcomponent_handle_conflicting_vtimezones(icalcomponent *comp, /* We didn't find a VTIMEZONE that matched, so we have to rename the TZID, using the maximum numerical suffix found + 1. */ - tzid_copy = strdup(tzid); + tzid_copy = icalmemory_strdup(tzid); if (!tzid_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; } snprintf(suffix_buf, sizeof(suffix_buf), "%i", max_suffix + 1); - new_tzid = malloc(tzid_len + strlen(suffix_buf) + 1); + new_tzid = icalmemory_new_buffer(tzid_len + strlen(suffix_buf) + 1); if (!new_tzid) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); - free(tzid_copy); + icalmemory_free_buffer(tzid_copy); return; } @@ -2179,8 +2179,8 @@ static void icalcomponent_handle_conflicting_vtimezones(icalcomponent *comp, strcpy(new_tzid + tzid_len, suffix_buf); icalarray_append(tzids_to_rename, tzid_copy); icalarray_append(tzids_to_rename, new_tzid); - free(tzid_copy); - free(new_tzid); + icalmemory_free_buffer(tzid_copy); + icalmemory_free_buffer(new_tzid); } /* Returns the length of the TZID, without any trailing digits. */ @@ -2353,7 +2353,7 @@ static int icalcomponent_compare_vtimezones(icalcomponent *vtimezone1, icalcompo /* Copy the second TZID, and set the property to the same as the first TZID, since we don't care if these match of not. */ - tzid2_copy = strdup(tzid2); + tzid2_copy = icalmemory_strdup(tzid2); if (!tzid2_copy) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; @@ -2364,25 +2364,25 @@ static int icalcomponent_compare_vtimezones(icalcomponent *vtimezone1, icalcompo /* Now convert both VTIMEZONEs to strings and compare them. */ string1 = icalcomponent_as_ical_string_r(vtimezone1); if (!string1) { - free(tzid2_copy); + icalmemory_free_buffer(tzid2_copy); return -1; } string2 = icalcomponent_as_ical_string_r(vtimezone2); if (!string2) { - free(string1); - free(tzid2_copy); + icalmemory_free_buffer(string1); + icalmemory_free_buffer(tzid2_copy); return -1; } cmp = strcmp(string1, string2); - free(string1); - free(string2); + icalmemory_free_buffer(string1); + icalmemory_free_buffer(string2); /* Now reset the second TZID. */ icalproperty_set_tzid(prop2, tzid2_copy); - free(tzid2_copy); + icalmemory_free_buffer(tzid2_copy); return (cmp == 0) ? 1 : 0; } diff --git a/src/libical/icalderivedvalue.c.in b/src/libical/icalderivedvalue.c.in index dfbebba7..e2c1376d 100644 --- a/src/libical/icalderivedvalue.c.in +++ b/src/libical/icalderivedvalue.c.in @@ -115,7 +115,7 @@ void icalvalue_set_x(icalvalue *impl, const char *v) icalerror_check_arg_rv((v != 0), "v"); if (impl->x_value != 0) { - free((void *)impl->x_value); + icalmemory_free_buffer((void *)impl->x_value); } impl->x_value = icalmemory_strdup(v); @@ -151,12 +151,12 @@ void icalvalue_set_recur(icalvalue *impl, struct icalrecurrencetype v) icalerror_check_value_type(value, ICAL_RECUR_VALUE); if (impl->data.v_recur != 0) { - free(impl->data.v_recur->rscale); - free(impl->data.v_recur); + icalmemory_free_buffer(impl->data.v_recur->rscale); + icalmemory_free_buffer(impl->data.v_recur); impl->data.v_recur = 0; } - impl->data.v_recur = malloc(sizeof(struct icalrecurrencetype)); + impl->data.v_recur = icalmemory_new_buffer(sizeof(struct icalrecurrencetype)); if (impl->data.v_recur == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); diff --git a/src/libical/icalduration.h b/src/libical/icalduration.h index 228dab7c..8c1aa2ed 100644 --- a/src/libical/icalduration.h +++ b/src/libical/icalduration.h @@ -108,7 +108,7 @@ LIBICAL_ICAL_EXPORT int icaldurationtype_as_int(struct icaldurationtype duration * * @b Ownership * The string returned by this function is owned by the caller and needs to be - * released with `free()` after it's no longer needed. + * released with `icalmemory_free_buffer()` after it's no longer needed. * * @b Usage * ```c @@ -121,7 +121,7 @@ LIBICAL_ICAL_EXPORT int icaldurationtype_as_int(struct icaldurationtype duration * printf("%s\n", ical); * * // release string - * free(ical); + * icalmemory_free_buffer(ical); * ``` */ LIBICAL_ICAL_EXPORT char *icaldurationtype_as_ical_string(struct icaldurationtype d); diff --git a/src/libical/icalerror.c b/src/libical/icalerror.c index 12071ff8..34d134c4 100644 --- a/src/libical/icalerror.c +++ b/src/libical/icalerror.c @@ -23,6 +23,7 @@ #endif #include "icalerror.h" +#include "icalmemory.h" #include @@ -38,7 +39,7 @@ static pthread_once_t icalerrno_key_once = PTHREAD_ONCE_INIT; static void icalerrno_destroy(void *buf) { - free(buf); + icalmemory_free_buffer(buf); pthread_setspecific(icalerrno_key, NULL); } @@ -56,7 +57,7 @@ icalerrorenum *icalerrno_return(void) _errno = (icalerrorenum *) pthread_getspecific(icalerrno_key); if (!_errno) { - _errno = malloc(sizeof(icalerrorenum)); + _errno = icalmemory_new_buffer(sizeof(icalerrorenum)); *_errno = ICAL_NO_ERROR; pthread_setspecific(icalerrno_key, _errno); } @@ -277,6 +278,6 @@ void ical_bt(void) fprintf(stderr, "%p\n", stack_frames[i]); } } - free(strings); + icalmemory_free_buffer(strings); #endif } diff --git a/src/libical/icallangbind.c b/src/libical/icallangbind.c index 859d6c8e..bd4e5c11 100644 --- a/src/libical/icallangbind.c +++ b/src/libical/icallangbind.c @@ -29,14 +29,14 @@ int *icallangbind_new_array(int size) { - int *p = (int *)malloc(size * sizeof(int)); + int *p = (int *)icalmemory_new_buffer(size * sizeof(int)); return p; /* Caller handles failures */ } void icallangbind_free_array(int *array) { - free(array); + icalmemory_free_buffer(array); } int icallangbind_access_array(int *array, int index) @@ -195,7 +195,7 @@ char *icallangbind_property_eval_string_r(icalproperty *prop, const char *sep) default: { char *str = icalvalue_as_ical_string_r(value); - char *copy = (char *)malloc(strlen(str) + 1); + char *copy = (char *)icalmemory_new_buffer(strlen(str) + 1); const char *i; char *j; @@ -221,8 +221,8 @@ char *icallangbind_property_eval_string_r(icalproperty *prop, const char *sep) APPENDS(copy); APPENDC('\''); - free(copy); - free(str); + icalmemory_free_buffer(copy); + icalmemory_free_buffer(str); break; } } @@ -244,7 +244,7 @@ char *icallangbind_property_eval_string_r(icalproperty *prop, const char *sep) v = strchr(copy, '='); if (v == 0) { - free(copy); + icalmemory_free_buffer(copy); continue; } @@ -260,7 +260,7 @@ char *icallangbind_property_eval_string_r(icalproperty *prop, const char *sep) APPENDC('\''); APPENDS(v); APPENDC('\''); - free(copy); + icalmemory_free_buffer(copy); } APPENDC('}'); diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index 6c1bd9ca..db346e4f 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -74,10 +74,10 @@ static void icalmemory_free_ring_byval(buffer_ring * br) for (i = 0; i < BUFFER_RING_SIZE; i++) { if (br->ring[i] != 0) { - free(br->ring[i]); + icalmemory_free_buffer(br->ring[i]); } } - free(br); + icalmemory_free_buffer(br); } #if defined(HAVE_PTHREAD) @@ -109,7 +109,7 @@ static void icalmemory_free_tmp_buffer(void *buf) return; } - free(buf); + icalmemory_free_buffer(buf); } #endif @@ -122,7 +122,7 @@ static buffer_ring *buffer_ring_new(void) buffer_ring *br; int i; - br = (buffer_ring *) malloc(sizeof(buffer_ring)); + br = (buffer_ring *) icalmemory_new_buffer(sizeof(buffer_ring)); for (i = 0; i < BUFFER_RING_SIZE; i++) { br->ring[i] = 0; @@ -190,7 +190,7 @@ void icalmemory_add_tmp_buffer(void *buf) /* Free buffers as their slots are overwritten */ if (br->ring[br->pos] != 0) { - free(br->ring[br->pos]); + icalmemory_free_buffer(br->ring[br->pos]); } /* Assign the buffer to a slot */ @@ -210,7 +210,7 @@ void *icalmemory_tmp_buffer(size_t size) size = MIN_BUFFER_SIZE; } - buf = (void *)malloc(size); + buf = (void *)icalmemory_new_buffer(size); if (buf == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); @@ -314,7 +314,7 @@ void icalmemory_append_string(char **buf, char **pos, size_t *buf_size, const ch *buf_size = (*buf_size) * 2 + final_length; - new_buf = realloc(*buf, *buf_size); + new_buf = icalmemory_resize_buffer(*buf, *buf_size); new_pos = (void *)((size_t) new_buf + data_length); @@ -351,7 +351,7 @@ void icalmemory_append_char(char **buf, char **pos, size_t *buf_size, char ch) *buf_size = (*buf_size) * 2 + final_length + 1; - new_buf = realloc(*buf, *buf_size); + new_buf = icalmemory_resize_buffer(*buf, *buf_size); new_pos = (void *)((size_t) new_buf + data_length); diff --git a/src/libical/icalmemory.h b/src/libical/icalmemory.h index 7eb7e010..81d39909 100644 --- a/src/libical/icalmemory.h +++ b/src/libical/icalmemory.h @@ -142,7 +142,7 @@ LIBICAL_ICAL_EXPORT void icalmemory_add_tmp_buffer(void *buf); LIBICAL_ICAL_EXPORT void icalmemory_free_ring(void); /* Non-tmp buffers must be freed. These are mostly wrappers around - * malloc, etc, but are used so the caller can change the memory + * icalmemory_new_buffer, etc, but are used so the caller can change the memory * allocators in a future version of the library */ /** @@ -323,17 +323,19 @@ LIBICAL_ICAL_EXPORT void icalmemory_append_char(char **buf, char **pos, size_t * * * @par Ownership * The returned string is owned by the caller and needs to be released with the - * appropriate `free()` method. + * `icalmemory_free_buffer()` method. * - * A wrapper around `strdup()`. Partly to trap calls to `strdup()`, partly - * because in `-ansi`, `gcc` on Red Hat claims that `strdup()` is undeclared. + * Replaces `strdup()`. The function uses icalmemory_new_buffer() for memory + * allocation. It also helps trapping calls to `strdup()` and solves the + * problem that in `-ansi`, `gcc` on Red Hat claims that `strdup()` is + * undeclared. * * ### Usage * ```c * const char *my_str = "LibIcal"; * char *dup = icalmemory_strdup(my_str); * printf("%s\n", dup); - * free(dup); + * icalmemory_free_buffer(dup); * ``` */ LIBICAL_ICAL_EXPORT char *icalmemory_strdup(const char *s); diff --git a/src/libical/icalmime.c b/src/libical/icalmime.c index 37688d0f..a224218e 100644 --- a/src/libical/icalmime.c +++ b/src/libical/icalmime.c @@ -49,7 +49,7 @@ static void *icalmime_text_new_part(void) struct text_part *impl; - if ((impl = (struct text_part *)malloc(sizeof(struct text_part))) == 0) { + if ((impl = (struct text_part *)icalmemory_new_buffer(sizeof(struct text_part))) == 0) { return 0; } @@ -77,7 +77,7 @@ static void *icalmime_textcalendar_end_part(void *part) icalcomponent *c = icalparser_parse_string(impl->buf); icalmemory_free_buffer(impl->buf); - free(impl); + icalmemory_free_buffer(impl); return c; } @@ -88,7 +88,7 @@ static void *icalmime_text_end_part_r(void *part) struct text_part *impl = (struct text_part *)part; buf = impl->buf; - free(impl); + icalmemory_free_buffer(impl); return buf; } @@ -166,7 +166,7 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d int i, last_level = 0; icalcomponent *root = 0, *parent = 0, *comp = 0, *last = 0; - if ((parts = (struct sspm_part *)malloc(NUM_PARTS * sizeof(struct sspm_part))) == 0) { + if ((parts = (struct sspm_part *)icalmemory_new_buffer(NUM_PARTS * sizeof(struct sspm_part))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -245,7 +245,7 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d icalcomponent_add_property( comp, icalproperty_new_xlicmimecontenttype(mimeTypeCopy)); - free(mimeTypeCopy); + icalmemory_free_buffer(mimeTypeCopy); } if (parts[i].header.encoding != SSPM_NO_ENCODING) { @@ -288,7 +288,7 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d icalcomponent_add_property( comp, icalproperty_new_description(descStr)); - free(descStr); + icalmemory_free_buffer(descStr); parts[i].data = 0; } @@ -331,7 +331,7 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d } sspm_free_parts(parts, NUM_PARTS); - free(parts); + icalmemory_free_buffer(parts); return root; } @@ -342,7 +342,7 @@ int icalmime_test(char *(*get_string) (char *s, size_t size, void *d), void *dat struct sspm_part *parts; int i; - if ((parts = (struct sspm_part *)malloc(NUM_PARTS * sizeof(struct sspm_part))) == 0) { + if ((parts = (struct sspm_part *)icalmemory_new_buffer(NUM_PARTS * sizeof(struct sspm_part))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -363,7 +363,7 @@ int icalmime_test(char *(*get_string) (char *s, size_t size, void *d), void *dat sspm_write_mime(parts, NUM_PARTS, &out, "To: bob@bob.org"); printf("%s\n", out); - free(out); + icalmemory_free_buffer(out); return 0; } diff --git a/src/libical/icalparameter.c b/src/libical/icalparameter.c index 0856b3c2..c437e376 100644 --- a/src/libical/icalparameter.c +++ b/src/libical/icalparameter.c @@ -36,7 +36,7 @@ LIBICAL_ICAL_EXPORT struct icalparameter_impl *icalparameter_new_impl(icalparame { struct icalparameter_impl *v; - if ((v = (struct icalparameter_impl *)malloc(sizeof(struct icalparameter_impl))) == 0) { + if ((v = (struct icalparameter_impl *)icalmemory_new_buffer(sizeof(struct icalparameter_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -67,18 +67,18 @@ void icalparameter_free(icalparameter *param) } if (param->string != 0) { - free((void *)param->string); + icalmemory_free_buffer((void *)param->string); } if (param->x_name != 0) { - free((void *)param->x_name); + icalmemory_free_buffer((void *)param->x_name); } memset(param, 0, sizeof(icalparameter)); param->parent = 0; param->id[0] = 'X'; - free(param); + icalmemory_free_buffer(param); } icalparameter *icalparameter_clone(const icalparameter *old) @@ -141,7 +141,7 @@ icalparameter *icalparameter_new_from_string(const char *str) if (eq == 0) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - free(cpy); + icalmemory_free_buffer(cpy); return 0; } @@ -153,7 +153,7 @@ icalparameter *icalparameter_new_from_string(const char *str) if (kind == ICAL_NO_PARAMETER) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - free(cpy); + icalmemory_free_buffer(cpy); return 0; } @@ -165,7 +165,7 @@ icalparameter *icalparameter_new_from_string(const char *str) icalparameter_set_iana_name(param, cpy); } - free(cpy); + icalmemory_free_buffer(cpy); return param; } @@ -297,7 +297,7 @@ char *icalparameter_as_ical_string_r(icalparameter *param) if (param->kind == ICAL_NO_PARAMETER || param->kind == ICAL_ANY_PARAMETER || kind_string == 0) { icalerror_set_errno(ICAL_BADARG_ERROR); - free(buf); + icalmemory_free_buffer(buf); return 0; } @@ -315,7 +315,7 @@ char *icalparameter_as_ical_string_r(icalparameter *param) icalmemory_append_string(&buf, &buf_ptr, &buf_size, str); } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - free(buf); + icalmemory_free_buffer(buf); return 0; } @@ -352,7 +352,7 @@ void icalparameter_set_xname(icalparameter *param, const char *v) icalerror_check_arg_rv((v != 0), "v"); if (param->x_name != 0) { - free((void *)param->x_name); + icalmemory_free_buffer((void *)param->x_name); } param->x_name = icalmemory_strdup(v); @@ -375,7 +375,7 @@ void icalparameter_set_xvalue(icalparameter *param, const char *v) icalerror_check_arg_rv((v != 0), "v"); if (param->string != 0) { - free((void *)param->string); + icalmemory_free_buffer((void *)param->string); } param->string = icalmemory_strdup(v); diff --git a/src/libical/icalparameter.h b/src/libical/icalparameter.h index 8bbc96bc..c3c517f9 100644 --- a/src/libical/icalparameter.h +++ b/src/libical/icalparameter.h @@ -231,9 +231,9 @@ LIBICAL_ICAL_EXPORT char *icalparameter_as_ical_string(icalparameter *parameter) * * @par Ownership * Strings returned by this method are owned by the caller, thus they need - * to be manually `free()`d after use. A version of this function which returns - * strings that do not need to be freed manually is - * icalparameter_as_ical_string(). + * to be manually `icalmemory_free_buffer()`d after use. + * A version of this function which returns strings that do not + * need to be freed manually is icalparameter_as_ical_string(). * * ### Usage * ```c @@ -242,7 +242,7 @@ LIBICAL_ICAL_EXPORT char *icalparameter_as_ical_string(icalparameter *parameter) * if(param) { * char *str = icalparameter_as_ical_string(param); * printf("%s\n", str); - * free(str); + * icalmemory_free_buffer(str); * } * * icalparameter_free(param); diff --git a/src/libical/icalparser.c b/src/libical/icalparser.c index 4ab1b1ca..7bb0e7f6 100644 --- a/src/libical/icalparser.c +++ b/src/libical/icalparser.c @@ -102,7 +102,7 @@ icalparser *icalparser_new(void) { struct icalparser_impl *impl = 0; - if ((impl = (struct icalparser_impl *)malloc(sizeof(struct icalparser_impl))) == 0) { + if ((impl = (struct icalparser_impl *)icalmemory_new_buffer(sizeof(struct icalparser_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -135,7 +135,7 @@ void icalparser_free(icalparser *parser) pvl_free(parser->components); - free(parser); + icalmemory_free_buffer(parser); } void icalparser_set_gen_data(icalparser *parser, void *data) @@ -323,7 +323,7 @@ static char *parser_get_param_name_heap(char *line, char **end) *end = *end + 1; next = (**end == '"') ? *end : parser_get_next_char('"', *end, 0); if (next == 0) { - free(str); + icalmemory_free_buffer(str); *end = NULL; return 0; } @@ -557,7 +557,7 @@ char *icalparser_get_line(icalparser *parser, } else { /* No data in output; return and signal that there is no more input */ - free(line); + icalmemory_free_buffer(line); return 0; } } diff --git a/src/libical/icalproperty.c b/src/libical/icalproperty.c index a93d87ad..45e3a7d2 100644 --- a/src/libical/icalproperty.c +++ b/src/libical/icalproperty.c @@ -67,7 +67,7 @@ icalproperty *icalproperty_new_impl(icalproperty_kind kind) if (!icalproperty_kind_is_valid(kind)) return NULL; - if ((prop = (icalproperty *) malloc(sizeof(icalproperty))) == 0) { + if ((prop = (icalproperty *) icalmemory_new_buffer(sizeof(icalproperty))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -160,7 +160,7 @@ icalproperty *icalproperty_new_from_string(const char *str) if (comp == 0) { icalerror_set_errno(ICAL_PARSE_ERROR); - free(buf); + icalmemory_free_buffer(buf); return 0; } @@ -171,7 +171,7 @@ icalproperty *icalproperty_new_from_string(const char *str) icalcomponent_remove_property(comp, prop); icalcomponent_free(comp); - free(buf); + icalmemory_free_buffer(buf); if (errors > 0) { icalproperty_free(prop); @@ -203,7 +203,7 @@ void icalproperty_free(icalproperty *p) pvl_free(p->parameters); if (p->x_name != 0) { - free(p->x_name); + icalmemory_free_buffer(p->x_name); } p->kind = ICAL_NO_PROPERTY; @@ -213,7 +213,7 @@ void icalproperty_free(icalproperty *p) p->x_name = 0; p->id[0] = 'X'; - free(p); + icalmemory_free_buffer(p); } /* This returns where the start of the next line should be. chars_left does @@ -422,13 +422,13 @@ char *icalproperty_as_ical_string_r(icalproperty *prop) } if (kind == ICAL_VALUE_PARAMETER) { - free((char *)kind_string); + icalmemory_free_buffer((char *)kind_string); continue; } icalmemory_append_string(&buf, &buf_ptr, &buf_size, ";"); icalmemory_append_string(&buf, &buf_ptr, &buf_size, kind_string); - free((char *)kind_string); + icalmemory_free_buffer((char *)kind_string); } /* Append value */ @@ -447,7 +447,7 @@ char *icalproperty_as_ical_string_r(icalproperty *prop) icalmemory_append_string(&buf, &buf_ptr, &buf_size, "ERROR: No Value"); #endif } - free(str); + icalmemory_free_buffer(str); } else { #if ICAL_ALLOW_EMPTY_PROPERTIES == 0 icalmemory_append_string(&buf, &buf_ptr, &buf_size, "ERROR: No Value"); @@ -600,13 +600,13 @@ char *icalproperty_get_parameter_as_string_r(icalproperty *prop, const char *nam if (t == 0) { icalerror_set_errno(ICAL_INTERNAL_ERROR); - free(str); + icalmemory_free_buffer(str); return 0; } /* Strip the property name and the equal sign */ pv = icalmemory_strdup(t + 1); - free(str); + icalmemory_free_buffer(str); /* Is the string quoted? */ pvql = strchr(pv, '"'); @@ -616,13 +616,13 @@ char *icalproperty_get_parameter_as_string_r(icalproperty *prop, const char *nam /* Strip everything up to the first quote */ str = icalmemory_strdup(pvql + 1); - free(pv); + icalmemory_free_buffer(pv); /* Search for the end quote */ pvqr = strrchr(str, '"'); if (pvqr == 0) { icalerror_set_errno(ICAL_INTERNAL_ERROR); - free(str); + icalmemory_free_buffer(str); return 0; } @@ -852,7 +852,7 @@ void icalproperty_set_x_name(icalproperty *prop, const char *name) icalerror_check_arg_rv((prop != 0), "prop"); if (prop->x_name != 0) { - free(prop->x_name); + icalmemory_free_buffer(prop->x_name); } prop->x_name = icalmemory_strdup(name); diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index d0f03777..b183bc31 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -593,7 +593,7 @@ static int icalrecur_add_bydayrules(struct icalrecur_parser *parser, icalrecurrencetype_weekday wd; if (i == ICAL_BY_DAY_SIZE) { - free(vals_copy); + icalmemory_free_buffer(vals_copy); return -1; } @@ -624,7 +624,7 @@ static int icalrecur_add_bydayrules(struct icalrecur_parser *parser, /* Sanity check value */ if (wd == ICAL_NO_WEEKDAY || weekno >= ICAL_BY_WEEKNO_SIZE) { - free(vals_copy); + icalmemory_free_buffer(vals_copy); return -1; } @@ -632,7 +632,7 @@ static int icalrecur_add_bydayrules(struct icalrecur_parser *parser, array[i] = ICAL_RECURRENCE_ARRAY_MAX; } - free(vals_copy); + icalmemory_free_buffer(vals_copy); sort_bydayrules(parser); @@ -773,7 +773,7 @@ struct icalrecurrencetype icalrecurrencetype_from_string(const char *str) icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); } if (parser.rt.rscale) { - free(parser.rt.rscale); + icalmemory_free_buffer(parser.rt.rscale); } icalrecurrencetype_clear(&parser.rt); break; @@ -791,7 +791,7 @@ struct icalrecurrencetype icalrecurrencetype_from_string(const char *str) if (rruleHandlingSetting == ICAL_RRULE_TREAT_AS_ERROR) { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); if (parser.rt.rscale) { - free(parser.rt.rscale); + icalmemory_free_buffer(parser.rt.rscale); } icalrecurrencetype_clear(&parser.rt); break; @@ -801,7 +801,7 @@ struct icalrecurrencetype icalrecurrencetype_from_string(const char *str) } } - free(parser.copy); + icalmemory_free_buffer(parser.copy); return parser.rt; } @@ -1965,7 +1965,7 @@ icalrecur_iterator *icalrecur_iterator_new(struct icalrecurrencetype rule, return 0; } - if (!(impl = (icalrecur_iterator *)malloc(sizeof(icalrecur_iterator)))) { + if (!(impl = (icalrecur_iterator *)icalmemory_new_buffer(sizeof(icalrecur_iterator)))) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -2026,7 +2026,7 @@ icalrecur_iterator *icalrecur_iterator_new(struct icalrecurrencetype rule, impl->orig_data[byrule] = 0; } else { icalerror_set_errno(ICAL_MALFORMEDDATA_ERROR); - free(impl); + icalmemory_free_buffer(impl); return 0; } } @@ -2070,7 +2070,7 @@ void icalrecur_iterator_free(icalrecur_iterator *i) } #endif - free(i); + icalmemory_free_buffer(i); } /** Calculate the number of days between 2 dates */ @@ -3641,7 +3641,7 @@ int icalrecur_expand_recurrence(const char *rule, icalrecur_iterator_free(ritr); } if(recur.rscale) - free(recur.rscale); + icalmemory_free_buffer(recur.rscale); return 1; } diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index e57c08d2..1e48c3c5 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -212,7 +212,7 @@ icaltimezone *icaltimezone_new(void) { icaltimezone *zone; - zone = (icaltimezone *) malloc(sizeof(icaltimezone)); + zone = (icaltimezone *) icalmemory_new_buffer(sizeof(icaltimezone)); if (!zone) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return NULL; @@ -227,7 +227,7 @@ icaltimezone *icaltimezone_copy(icaltimezone *originalzone) { icaltimezone *zone; - zone = (icaltimezone *) malloc(sizeof(icaltimezone)); + zone = (icaltimezone *) icalmemory_new_buffer(sizeof(icaltimezone)); if (!zone) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return NULL; @@ -235,13 +235,13 @@ icaltimezone *icaltimezone_copy(icaltimezone *originalzone) memcpy(zone, originalzone, sizeof(icaltimezone)); if (zone->tzid != NULL) { - zone->tzid = strdup(zone->tzid); + zone->tzid = icalmemory_strdup(zone->tzid); } if (zone->location != NULL) { - zone->location = strdup(zone->location); + zone->location = icalmemory_strdup(zone->location); } if (zone->tznames != NULL) { - zone->tznames = strdup(zone->tznames); + zone->tznames = icalmemory_strdup(zone->tznames); } icaltimezone_changes_lock(); @@ -261,7 +261,7 @@ void icaltimezone_free(icaltimezone *zone, int free_struct) { icaltimezone_reset(zone); if (free_struct) - free(zone); + icalmemory_free_buffer(zone); } /** @brief Resets the icaltimezone to the initial state, freeing most of the @@ -270,13 +270,13 @@ void icaltimezone_free(icaltimezone *zone, int free_struct) static void icaltimezone_reset(icaltimezone *zone) { if (zone->tzid) - free(zone->tzid); + icalmemory_free_buffer(zone->tzid); if (zone->location) - free(zone->location); + icalmemory_free_buffer(zone->location); if (zone->tznames) - free(zone->tznames); + icalmemory_free_buffer(zone->tznames); if (zone->component) icalcomponent_free(zone->component); @@ -329,9 +329,9 @@ static int icaltimezone_get_vtimezone_properties(icaltimezone *zone, icalcompone } if (zone->tzid) { - free(zone->tzid); + icalmemory_free_buffer(zone->tzid); } - zone->tzid = strdup(tzid); + zone->tzid = icalmemory_strdup(tzid); if (zone->component) { icalcomponent_free(zone->component); @@ -339,12 +339,12 @@ static int icaltimezone_get_vtimezone_properties(icaltimezone *zone, icalcompone zone->component = component; if (zone->location) { - free(zone->location); + icalmemory_free_buffer(zone->location); } zone->location = icaltimezone_get_location_from_vtimezone(component); if (zone->tznames) { - free(zone->tznames); + icalmemory_free_buffer(zone->tznames); } zone->tznames = icaltimezone_get_tznames_from_vtimezone(component); @@ -361,7 +361,7 @@ char *icaltimezone_get_location_from_vtimezone(icalcomponent *component) if (prop) { location = icalproperty_get_location(prop); if (location) - return strdup(location); + return icalmemory_strdup(location); } prop = icalcomponent_get_first_property(component, ICAL_X_PROPERTY); @@ -370,7 +370,7 @@ char *icaltimezone_get_location_from_vtimezone(icalcomponent *component) if (name && !strcasecmp(name, "X-LIC-LOCATION")) { location = icalproperty_get_x(prop); if (location) - return strdup(location); + return icalmemory_strdup(location); } prop = icalcomponent_get_next_property(component, ICAL_X_PROPERTY); } @@ -463,11 +463,11 @@ char *icaltimezone_get_tznames_from_vtimezone(icalcomponent *component) char *tznames; if (!strcmp(standard_tzname, daylight_tzname)) - return strdup(standard_tzname); + return icalmemory_strdup(standard_tzname); standard_len = strlen(standard_tzname); daylight_len = strlen(daylight_tzname); - tznames = malloc(standard_len + daylight_len + 2); + tznames = icalmemory_new_buffer(standard_len + daylight_len + 2); strcpy(tznames, standard_tzname); tznames[standard_len] = '/'; strcpy(tznames + standard_len + 1, daylight_tzname); @@ -477,7 +477,7 @@ char *icaltimezone_get_tznames_from_vtimezone(icalcomponent *component) /* If either of the TZNAMEs was found just return that, else NULL. */ tznames = standard_tzname ? standard_tzname : daylight_tzname; - return tznames ? strdup(tznames) : NULL; + return tznames ? icalmemory_strdup(tznames) : NULL; } } @@ -1605,7 +1605,7 @@ static int fetch_lat_long_from_string(const char *str, sptr++; } len = (ptrdiff_t) (sptr - temp); - lat = (char *)malloc(len + 1); + lat = (char *)icalmemory_new_buffer(len + 1); memset(lat, '\0', len + 1); strncpy(lat, temp, len); lat[len] = '\0'; @@ -1647,11 +1647,11 @@ static int fetch_lat_long_from_string(const char *str, latitude_seconds) == 1 || parse_coord(lon, (int)strlen(lon), longitude_degrees, longitude_minutes, longitude_seconds) == 1) { - free(lat); + icalmemory_free_buffer(lat); return 1; } - free(lat); + icalmemory_free_buffer(lat); return 0; } @@ -1704,7 +1704,7 @@ static void icaltimezone_parse_zone_tab(void) filename_len += strlen(zonetab); filename_len += 2; /* for dir separator and final '\0' */ - filename = (char *)malloc(filename_len); + filename = (char *)icalmemory_new_buffer(filename_len); if (!filename) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return; @@ -1712,7 +1712,7 @@ static void icaltimezone_parse_zone_tab(void) snprintf(filename, filename_len, "%s/%s", zonedir, zonetab); fp = fopen(filename, "r"); - free(filename); + icalmemory_free_buffer(filename); icalerror_assert(fp, "Cannot open the zonetab file for reading"); if (!fp) { icalerror_set_errno(ICAL_INTERNAL_ERROR); @@ -1757,7 +1757,7 @@ static void icaltimezone_parse_zone_tab(void) } icaltimezone_init(&zone); - zone.location = strdup(location); + zone.location = icalmemory_strdup(location); if (latitude_degrees >= 0) { zone.latitude = @@ -1803,7 +1803,7 @@ void icaltimezone_release_zone_tab(void) builtin_timezones = NULL; for (i = 0; i < mybuiltin_timezones->num_elements; i++) { - free(((icaltimezone *) icalarray_element_at(mybuiltin_timezones, i))->location); + icalmemory_free_buffer(((icaltimezone *) icalarray_element_at(mybuiltin_timezones, i))->location); } icalarray_free(mybuiltin_timezones); } @@ -1839,7 +1839,7 @@ static void icaltimezone_load_builtin_timezone(icaltimezone *zone) filename_len = strlen(get_zone_directory()) + strlen(zone->location) + 6; - filename = (char *)malloc(filename_len); + filename = (char *)icalmemory_new_buffer(filename_len); if (!filename) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto out; @@ -1848,7 +1848,7 @@ static void icaltimezone_load_builtin_timezone(icaltimezone *zone) snprintf(filename, filename_len, "%s/%s.ics", get_zone_directory(), zone->location); fp = fopen(filename, "r"); - free(filename); + icalmemory_free_buffer(filename); if (!fp) { icalerror_set_errno(ICAL_FILE_ERROR); goto out; @@ -1880,11 +1880,11 @@ static void icaltimezone_load_builtin_timezone(icaltimezone *zone) const char *tzid_prefix = icaltimezone_tzid_prefix(); new_tzid_len = strlen(tzid_prefix) + strlen(zone->location) + 1; - new_tzid = (char *)malloc(sizeof(char) * (new_tzid_len + 1)); + new_tzid = (char *)icalmemory_new_buffer(sizeof(char) * (new_tzid_len + 1)); if(new_tzid) { snprintf(new_tzid, new_tzid_len, "%s%s", tzid_prefix, zone->location); icalproperty_set_tzid(prop, new_tzid); - free(new_tzid); + icalmemory_free_buffer(new_tzid); } else { icalerror_set_errno(ICAL_NEWFAILED_ERROR); } @@ -2139,7 +2139,7 @@ static const char *get_zone_directory(void) zislashp1 = zislash + 1; strcat(dirname, (char *)zislashp1); if (stat(dirname, &st) == 0 && S_ISDIR(st.st_mode)) { - cache = strdup(dirname); + cache = icalmemory_strdup(dirname); return cache; } } @@ -2154,7 +2154,7 @@ void set_zone_directory(const char *path) if (zone_files_directory) free_zone_directory(); - zone_files_directory = malloc(strlen(path) + 1); + zone_files_directory = icalmemory_new_buffer(strlen(path) + 1); if (zone_files_directory != NULL) strcpy(zone_files_directory, path); @@ -2163,7 +2163,7 @@ void set_zone_directory(const char *path) void free_zone_directory(void) { if (zone_files_directory != NULL) { - free(zone_files_directory); + icalmemory_free_buffer(zone_files_directory); zone_files_directory = NULL; } } diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index 88bd4ab6..c8bdbe17 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -24,6 +24,7 @@ #include "icaltz-util.h" #include "icalerror.h" #include "icaltimezone.h" +#include "icalmemory.h" #include #include @@ -190,7 +191,7 @@ static char *zname_from_stridx(char *str, size_t idx) size = i - idx; str += idx; - ret = (char *)malloc(size + 1); + ret = (char *)icalmemory_new_buffer(size + 1); ret = strncpy(ret, str, size); ret[size] = '\0'; @@ -484,7 +485,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) } size = strlen(zonedir) + strlen(location) + 2; - full_path = (char *)malloc(size); + full_path = (char *)icalmemory_new_buffer(size); if (full_path == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -548,17 +549,17 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) } /* read data block */ - transitions = calloc(num_trans+1, sizeof(time_t)); // +1 for TZ string + transitions = icalmemory_new_buffer((num_trans+1) * sizeof(time_t)); // +1 for TZ string if (transitions == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; } - r_trans = calloc(num_trans, (size_t)trans_size); + r_trans = icalmemory_new_buffer(num_trans * (size_t)trans_size); if (r_trans == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; } - trans_idx = calloc(num_trans+1, sizeof(int)); // +1 for TZ string + trans_idx = icalmemory_new_buffer((num_trans+1) * sizeof(int)); // +1 for TZ string if (trans_idx == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -583,7 +584,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) r_trans = temp; } - types = calloc(num_types+2, sizeof(ttinfo)); // +2 for TZ string + types = icalmemory_new_buffer((num_types+2) * sizeof(ttinfo)); // +2 for TZ string if (types == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -602,7 +603,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) types[i].gmtoff = decode(a); } - znames = (char *)malloc(num_chars); + znames = (char *)icalmemory_new_buffer(num_chars); if (znames == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -611,7 +612,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) /* We got all the information which we need */ - leaps = calloc(num_leaps, sizeof(leap)); + leaps = icalmemory_new_buffer(num_leaps * sizeof(leap)); if (leaps == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -739,7 +740,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) /* Add tzid property */ size = strlen(icaltimezone_tzid_prefix()) + strlen(location) + 1; - tzid = (char *)malloc(size); + tzid = (char *)icalmemory_new_buffer(size); if (tzid == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -915,34 +916,34 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) fclose(f); if (full_path) - free(full_path); + icalmemory_free_buffer(full_path); if (transitions) - free(transitions); + icalmemory_free_buffer(transitions); if (r_trans) - free(r_trans); + icalmemory_free_buffer(r_trans); if (trans_idx) - free(trans_idx); + icalmemory_free_buffer(trans_idx); if (types) { for (i = 0; i < num_types; i++) { if (types[i].zname) { - free(types[i].zname); + icalmemory_free_buffer(types[i].zname); } } - free(types); + icalmemory_free_buffer(types); } if (znames) - free(znames); + icalmemory_free_buffer(znames); if (leaps) - free(leaps); + icalmemory_free_buffer(leaps); if (tzid) - free(tzid); + icalmemory_free_buffer(tzid); return tz_comp; } diff --git a/src/libical/icalvalue.c b/src/libical/icalvalue.c index e8894152..1becb059 100644 --- a/src/libical/icalvalue.c +++ b/src/libical/icalvalue.c @@ -42,7 +42,7 @@ LIBICAL_ICAL_EXPORT struct icalvalue_impl *icalvalue_new_impl(icalvalue_kind kin if (!icalvalue_kind_is_valid(kind)) return NULL; - if ((v = (struct icalvalue_impl *)malloc(sizeof(struct icalvalue_impl))) == 0) { + if ((v = (struct icalvalue_impl *)icalmemory_new_buffer(sizeof(struct icalvalue_impl))) == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); return 0; } @@ -174,7 +174,7 @@ icalvalue *icalvalue_new_clone(const icalvalue *old) static char *icalmemory_strdup_and_dequote(const char *str) { const char *p; - char *out = (char *)malloc(sizeof(char) * strlen(str) + 1); + char *out = (char *)icalmemory_new_buffer(sizeof(char) * strlen(str) + 1); char *pout; int wroteNull = 0; @@ -570,7 +570,7 @@ static icalvalue *icalvalue_new_from_string_with_error(icalvalue_kind kind, char *dequoted_str = icalmemory_strdup_and_dequote(str); value = icalvalue_new_text(dequoted_str); - free(dequoted_str); + icalmemory_free_buffer(dequoted_str); break; } @@ -641,7 +641,7 @@ static icalvalue *icalvalue_new_from_string_with_error(icalvalue_kind kind, if (rt.freq != ICAL_NO_RECURRENCE) { value = icalvalue_new_recur(rt); } - free(rt.rscale); + icalmemory_free_buffer(rt.rscale); break; } @@ -728,7 +728,7 @@ static icalvalue *icalvalue_new_from_string_with_error(icalvalue_kind kind, char *dequoted_str = icalmemory_strdup_and_dequote(str); value = icalvalue_new_x(dequoted_str); - free(dequoted_str); + icalmemory_free_buffer(dequoted_str); } break; @@ -782,7 +782,7 @@ void icalvalue_free(icalvalue *v) } if (v->x_value != 0) { - free(v->x_value); + icalmemory_free_buffer(v->x_value); } switch (v->kind) { @@ -802,7 +802,7 @@ void icalvalue_free(icalvalue *v) case ICAL_QUERY_VALUE: { if (v->data.v_string != 0) { - free((void *)v->data.v_string); + icalmemory_free_buffer((void *)v->data.v_string); v->data.v_string = 0; } break; @@ -810,8 +810,8 @@ void icalvalue_free(icalvalue *v) case ICAL_RECUR_VALUE: { if (v->data.v_recur != 0) { - free(v->data.v_recur->rscale); - free((void *)v->data.v_recur); + icalmemory_free_buffer(v->data.v_recur->rscale); + icalmemory_free_buffer((void *)v->data.v_recur); v->data.v_recur = 0; } break; @@ -828,7 +828,7 @@ void icalvalue_free(icalvalue *v) v->parent = 0; memset(&(v->data), 0, sizeof(v->data)); v->id[0] = 'X'; - free(v); + icalmemory_free_buffer(v); } int icalvalue_is_valid(const icalvalue *value) @@ -1076,7 +1076,7 @@ static char *icalvalue_float_as_ical_string_r(const icalvalue *value) /* bypass current locale in order to make sure snprintf uses a '.' as a separator set locate to 'C' and keep old locale */ - old_locale = strdup(setlocale(LC_NUMERIC, NULL)); + old_locale = icalmemory_strdup(setlocale(LC_NUMERIC, NULL)); (void)setlocale(LC_NUMERIC, "C"); str = (char *)icalmemory_new_buffer(40); @@ -1085,7 +1085,7 @@ static char *icalvalue_float_as_ical_string_r(const icalvalue *value) /* restore saved locale */ (void)setlocale(LC_NUMERIC, old_locale); - free(old_locale); + icalmemory_free_buffer(old_locale); return str; } @@ -1103,7 +1103,7 @@ static char *icalvalue_geo_as_ical_string_r(const icalvalue *value) /* bypass current locale in order to make * sure snprintf uses a '.' as a separator * set locate to 'C' and keep old locale */ - old_locale = strdup(setlocale(LC_NUMERIC, NULL)); + old_locale = icalmemory_strdup(setlocale(LC_NUMERIC, NULL)); (void)setlocale(LC_NUMERIC, "C"); str = (char *)icalmemory_new_buffer(80); @@ -1112,7 +1112,7 @@ static char *icalvalue_geo_as_ical_string_r(const icalvalue *value) /* restore saved locale */ (void)setlocale(LC_NUMERIC, old_locale); - free(old_locale); + icalmemory_free_buffer(old_locale); return str; } @@ -1394,8 +1394,8 @@ icalparameter_xliccomparetype icalvalue_compare(const icalvalue *a, const icalva temp1 = icalvalue_as_ical_string_r(a); temp2 = icalvalue_as_ical_string_r(b); r = strcmp(temp1, temp2); - free(temp1); - free(temp2); + icalmemory_free_buffer(temp1); + icalmemory_free_buffer(temp2); if (r > 0) { return ICAL_XLICCOMPARETYPE_GREATER; @@ -1501,12 +1501,12 @@ int icalvalue_encode_ical_string(const char *szText, char *szEncText, int nMaxBu if ((int)strlen(ptr) >= nMaxBufferLen) { icalvalue_free(value); - free(ptr); + icalmemory_free_buffer(ptr); return 0; } strcpy(szEncText, ptr); - free(ptr); + icalmemory_free_buffer(ptr); icalvalue_free((icalvalue *) value); diff --git a/src/libical/pvl.c b/src/libical/pvl.c index 960941a7..3b7c48d2 100644 --- a/src/libical/pvl.c +++ b/src/libical/pvl.c @@ -22,6 +22,8 @@ #include "pvl.h" +#include "icalmemory.h" + #include #include #include @@ -80,7 +82,7 @@ pvl_list pvl_newlist() { struct pvl_list_t *L; - if ((L = (struct pvl_list_t *)malloc(sizeof(struct pvl_list_t))) == 0) { + if ((L = (struct pvl_list_t *)icalmemory_new_buffer(sizeof(struct pvl_list_t))) == 0) { errno = ENOMEM; return 0; } @@ -102,7 +104,7 @@ void pvl_free(pvl_list l) pvl_clear(l); - free(L); + icalmemory_free_buffer(L); } /** @@ -124,7 +126,7 @@ pvl_elem pvl_new_element(void *d, pvl_elem next, pvl_elem prior) { struct pvl_elem_t *E; - if ((E = (struct pvl_elem_t *)malloc(sizeof(struct pvl_elem_t))) == 0) { + if ((E = (struct pvl_elem_t *)icalmemory_new_buffer(sizeof(struct pvl_elem_t))) == 0) { errno = ENOMEM; return 0; } @@ -384,7 +386,7 @@ void *pvl_remove(pvl_list L, pvl_elem E) E->next = 0; E->d = 0; - free(E); + icalmemory_free_buffer(E); return data; } diff --git a/src/libical/sspm.c b/src/libical/sspm.c index 0174d23b..0d30c35d 100644 --- a/src/libical/sspm.c +++ b/src/libical/sspm.c @@ -35,6 +35,8 @@ #include "sspm.h" +#include "icalmemory.h" + #include #include #include @@ -136,7 +138,7 @@ static char *sspm_strdup(const char *str) { char *s; - s = strdup(str); + s = icalmemory_strdup(str); return s; } @@ -426,11 +428,11 @@ static enum sspm_major_type sspm_find_major_content_type(char *type) for (i = 0; major_content_type_map[i].type != SSPM_UNKNOWN_MAJOR_TYPE; i++) { if (strncmp(ltype, major_content_type_map[i].str, strlen(major_content_type_map[i].str)) == 0) { - free(ltype); + icalmemory_free_buffer(ltype); return major_content_type_map[i].type; } } - free(ltype); + icalmemory_free_buffer(ltype); return major_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } @@ -442,7 +444,7 @@ static enum sspm_minor_type sspm_find_minor_content_type(char *type) char *p = strchr(ltype, '/'); if (p == 0) { - free(ltype); + icalmemory_free_buffer(ltype); return SSPM_UNKNOWN_MINOR_TYPE; } @@ -450,12 +452,12 @@ static enum sspm_minor_type sspm_find_minor_content_type(char *type) for (i = 0; minor_content_type_map[i].type != SSPM_UNKNOWN_MINOR_TYPE; i++) { if (strncmp(p, minor_content_type_map[i].str, strlen(minor_content_type_map[i].str)) == 0) { - free(ltype); + icalmemory_free_buffer(ltype); return minor_content_type_map[i].type; } } - free(ltype); + icalmemory_free_buffer(ltype); return minor_content_type_map[i].type; /* Should return SSPM_UNKNOWN_MINOR_TYPE */ } @@ -523,7 +525,7 @@ static void sspm_build_header(struct sspm_header *header, char *line) char *p = strchr(val, '/'); if (header->minor_text != 0) { - free(header->minor_text); + icalmemory_free_buffer(header->minor_text); } if (p != 0) { p++; /* Skip the '/' */ @@ -536,7 +538,7 @@ static void sspm_build_header(struct sspm_header *header, char *line) } if (boundary != 0) { if (header->boundary != 0) { - free(header->boundary); + icalmemory_free_buffer(header->boundary); } header->boundary = sspm_strdup(boundary); } @@ -559,7 +561,7 @@ static void sspm_build_header(struct sspm_header *header, char *line) header->encoding = SSPM_UNKNOWN_ENCODING; } - free(lencoding); + icalmemory_free_buffer(lencoding); header->def = 0; @@ -567,13 +569,13 @@ static void sspm_build_header(struct sspm_header *header, char *line) char *cid = sspm_value(line); if (header->content_id != 0) { - free(header->content_id); + icalmemory_free_buffer(header->content_id); } header->content_id = sspm_strdup(cid); header->def = 0; } - free(val); - free(prop); + icalmemory_free_buffer(val); + icalmemory_free_buffer(prop); } static char *sspm_get_next_line(struct mime_impl *impl) @@ -603,7 +605,7 @@ static void sspm_set_error(struct sspm_header *header, enum sspm_error error, ch header->error = error; if (header->error_text != 0) { - free(header->error_text); + icalmemory_free_buffer(header->error_text); } header->def = 0; @@ -742,7 +744,7 @@ static void sspm_make_part(struct mime_impl *impl, sspm_set_error(header, SSPM_UNEXPECTED_BOUNDARY_ERROR, line); /* Read until the paired terminating boundary */ - if ((boundary = (char *)malloc(strlen(line) + 5)) == 0) { + if ((boundary = (char *)icalmemory_new_buffer(strlen(line) + 5)) == 0) { fprintf(stderr, "Out of memory"); abort(); } @@ -754,7 +756,7 @@ static void sspm_make_part(struct mime_impl *impl, break; } } - free(boundary); + icalmemory_free_buffer(boundary); break; } @@ -780,7 +782,7 @@ static void sspm_make_part(struct mime_impl *impl, sspm_set_error(parent_header, SSPM_WRONG_BOUNDARY_ERROR, msg); /* Read until the paired terminating boundary */ - if ((boundary = (char *)malloc(strlen(line) + 5)) == 0) { + if ((boundary = (char *)icalmemory_new_buffer(strlen(line) + 5)) == 0) { fprintf(stderr, "Out of memory"); abort(); } @@ -791,7 +793,7 @@ static void sspm_make_part(struct mime_impl *impl, break; } } - free(boundary); + icalmemory_free_buffer(boundary); } } else { char *data = 0; @@ -799,7 +801,7 @@ static void sspm_make_part(struct mime_impl *impl, *size = strlen(line); - data = (char *)malloc(*size + 2); + data = (char *)icalmemory_new_buffer(*size + 2); assert(data != 0); if (header->encoding == SSPM_BASE64_ENCODING) { rtrn = decode_base64(data, line, size); @@ -818,7 +820,7 @@ static void sspm_make_part(struct mime_impl *impl, action.add_line(part, header, data, *size); - free(data); + icalmemory_free_buffer(data); } } @@ -899,7 +901,7 @@ static void *sspm_make_multipart_subpart(struct mime_impl *impl, struct sspm_hea sspm_set_error(parent_header, SSPM_WRONG_BOUNDARY_ERROR, msg); /* Read until the paired terminating boundary */ - if ((boundary = (char *)malloc(strlen(line) + 5)) == 0) { + if ((boundary = (char *)icalmemory_new_buffer(strlen(line) + 5)) == 0) { fprintf(stderr, "Out of memory"); abort(); } @@ -910,7 +912,7 @@ static void *sspm_make_multipart_subpart(struct mime_impl *impl, struct sspm_hea break; } } - free(boundary); + icalmemory_free_buffer(boundary); return 0; } @@ -1024,22 +1026,22 @@ int sspm_parse_mime(struct sspm_part *parts, static void sspm_free_header(struct sspm_header *header) { if (header->boundary != 0) { - free(header->boundary); + icalmemory_free_buffer(header->boundary); } if (header->minor_text != 0) { - free(header->minor_text); + icalmemory_free_buffer(header->minor_text); } if (header->charset != 0) { - free(header->charset); + icalmemory_free_buffer(header->charset); } if (header->filename != 0) { - free(header->filename); + icalmemory_free_buffer(header->filename); } if (header->content_id != 0) { - free(header->content_id); + icalmemory_free_buffer(header->content_id); } if (header->error_text != 0) { - free(header->error_text); + icalmemory_free_buffer(header->error_text); } } @@ -1226,7 +1228,7 @@ static void sspm_append_char(struct sspm_buffer *buf, char ch) buf->buf_size = (buf->buf_size) * 2 + final_length + 1; - new_buf = realloc(buf->buffer, buf->buf_size); + new_buf = icalmemory_resize_buffer(buf->buffer, buf->buf_size); new_pos = (void *)((size_t) new_buf + data_length); @@ -1255,7 +1257,7 @@ void sspm_append_string(struct sspm_buffer *buf, const char *string) buf->buf_size = (buf->buf_size) * 2 + final_length; - new_buf = realloc(buf->buffer, buf->buf_size); + new_buf = icalmemory_resize_buffer(buf->buffer, buf->buf_size); new_pos = (void *)((size_t) new_buf + data_length); @@ -1529,7 +1531,7 @@ int sspm_write_mime(struct sspm_part *parts, size_t num_parts, _unused(num_parts); - buf.buffer = malloc(4096); + buf.buffer = icalmemory_new_buffer(4096); buf.buffer[0] = '\0'; buf.pos = buf.buffer; buf.buf_size = 10; diff --git a/src/libicalss/icalclassify.c b/src/libicalss/icalclassify.c index 00e72fed..cdce09b8 100644 --- a/src/libicalss/icalclassify.c +++ b/src/libicalss/icalclassify.c @@ -49,7 +49,7 @@ char *icalclassify_lowercase(const char *str) return 0; } - xnew = icalmemory_strdup(str); + xnew = strdup(str); for (p = xnew; *p != 0; p++) { *p = tolower((int)*p); } @@ -292,8 +292,8 @@ int icalssutil_is_rescheduled(icalcomponent *a, icalcomponent *b) temp1 = icalproperty_as_ical_string_r(p1); temp2 = icalproperty_as_ical_string_r(p2); cmp = strcmp(temp1, temp2); - free(temp1); - free(temp2); + icalmemory_free_buffer(temp1); + icalmemory_free_buffer(temp2); if (p1 && cmp != 0) { return 1; diff --git a/src/libicalss/icalfileset.c b/src/libicalss/icalfileset.c index 6085c23c..8ba82225 100644 --- a/src/libicalss/icalfileset.c +++ b/src/libicalss/icalfileset.c @@ -27,6 +27,7 @@ #include "icalfilesetimpl.h" #include "icalparser.h" #include "icalvalue.h" +#include "icalmemory.h" #include #include @@ -397,11 +398,11 @@ icalerrorenum icalfileset_commit(icalset *set) if (sz != (IO_SSIZE_T) strlen(str)) { perror("write"); icalerror_set_errno(ICAL_FILE_ERROR); - free(str); + icalmemory_free_buffer(str); return ICAL_FILE_ERROR; } - free(str); + icalmemory_free_buffer(str); write_size += sz; } diff --git a/src/test/regression.c b/src/test/regression.c index 3f9d87f5..b09b6f27 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -806,7 +806,7 @@ void test_memory() ok("final buffer size == 806", (bufsize == 806)); - free(f); + icalmemory_free_buffer(f); bufsize = 4; @@ -895,7 +895,7 @@ void test_memory() if (VERBOSE) printf("Char-by-Char buffer: %s\n", f); - free(f); + icalmemory_free_buffer(f); for (i = 0; i < 100; i++) { f = icalmemory_tmp_buffer(bufsize); @@ -2730,7 +2730,7 @@ void test_recur_parser() rt = icalrecurrencetype_from_string(str); icalerror_restore("MALFORMEDDATA", es); ok(str, rt.freq == ICAL_NO_RECURRENCE); - free(v); + icalmemory_free_buffer(v); } @@ -4672,7 +4672,7 @@ void test_timezone_from_builtin(void) comp = icaltimezone_get_component(zone); strcomp = icalcomponent_as_ical_string_r(comp); comp = icalcomponent_new_from_string(strcomp); - free(strcomp); + icalmemory_free_buffer(strcomp); ok("VTIMEZONE icalcomponent_new_from_string()", (comp != NULL)); -- cgit v1.2.1 From 09ffd50324c55f38effc64a75d958b6fbfa65164 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Fri, 21 Jan 2022 23:34:29 +0100 Subject: Implement `icalmemory_strdup` based on `icalmemory_new_buffer` rather than on `strdup` to allow replacement of memory management functions. --- src/libical/icalmemory.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index db346e4f..3012568d 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -250,7 +250,20 @@ char *icalmemory_tmp_copy(const char *str) char *icalmemory_strdup(const char *s) { - return strdup(s); + size_t l; + char *res; + + if (!s) + return NULL; + + l = (strlen(s) + 1) * sizeof(char); + res = (char *) icalmemory_new_buffer(l); + if (res == NULL) + return NULL; + + memcpy(res, s, l); + + return res; } /* -- cgit v1.2.1 From a1986d42808cc8ffcf9fd6f32b9fd1fd66ba9a0f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 22 Jan 2022 08:53:14 -0500 Subject: .krazy - extend maxline length to 120 chars --- .krazy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.krazy b/.krazy index a07b908c..1675131f 100644 --- a/.krazy +++ b/.krazy @@ -37,5 +37,5 @@ SKIP /cmake/Toolchain-iOS.cmake|/cmake/Toolchain-QNX65.cmake|/cmake/Toolchain-QN #Skip zoneinfo SKIP /zoneinfo/ -STYLE_LINEMAX 100 +STYLE_LINEMAX 120 STYLE_PYTHONSTYLE_OFFSET 4 -- cgit v1.2.1 From d1962bffa362d5c6d84c5d117e1b6fd7cbcad7e7 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Thu, 15 Mar 2018 22:44:18 +0100 Subject: Allow configuring implementation of `fprintf` and `assert` to allow more flexible use or to reduce program size. --- config.h.cmake | 3 +++ src/libical/icalcomponent.c | 6 +++--- src/libical/icalerror.c | 8 ++++---- src/libical/icalerror.h | 12 ++++++------ src/libical/icalmime.c | 8 ++++---- src/libical/icalparser.c | 10 +++++----- src/libical/icalproperty.c | 2 +- src/libical/icalrecur.c | 4 ++-- src/libical/icaltimezone.c | 12 ++++++------ src/libical/icptrholder_cxx.h | 4 ++-- src/libical/pvl.c | 2 +- src/libical/sspm.c | 28 ++++++++++++++-------------- 12 files changed, 51 insertions(+), 48 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index 43767758..93f7c6e7 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -548,3 +548,6 @@ typedef ssize_t IO_SSIZE_T; #define _unused(x) (void)x #endif #endif + +#define icalassert(...) assert(__VA_ARGS__) +#define icalerrprintf(...) fprintf(stderr, __VA_ARGS__) diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 473110d2..2c7369f7 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -73,7 +73,7 @@ void icalcomponent_add_children(icalcomponent *impl, va_list args) while ((vp = va_arg(args, void *)) != 0) { - assert(icalcomponent_isa_component(vp) != 0 || icalproperty_isa_property(vp) != 0); + icalassert(icalcomponent_isa_component(vp) != 0 || icalproperty_isa_property(vp) != 0); if (icalcomponent_isa_component(vp) != 0) { icalcomponent_add_component(impl, (icalcomponent *) vp); @@ -1991,8 +1991,8 @@ void icalcomponent_merge_component(icalcomponent *comp, icalcomponent *comp_to_m size_t i; /* Check that both components are VCALENDAR components. */ - assert(icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT); - assert(icalcomponent_isa(comp_to_merge) == ICAL_VCALENDAR_COMPONENT); + icalassert(icalcomponent_isa(comp) == ICAL_VCALENDAR_COMPONENT); + icalassert(icalcomponent_isa(comp_to_merge) == ICAL_VCALENDAR_COMPONENT); /* Step through each subcomponent of comp_to_merge, looking for VTIMEZONEs. For each VTIMEZONE found, check if we need to add it to comp and if we diff --git a/src/libical/icalerror.c b/src/libical/icalerror.c index 34d134c4..1a61755c 100644 --- a/src/libical/icalerror.c +++ b/src/libical/icalerror.c @@ -91,7 +91,7 @@ void icalerror_crash_here(void) *p = 1; /* cppcheck-suppress nullPointer */ - assert(*p); + icalassert(*p); #endif } @@ -124,7 +124,7 @@ void icalerror_set_errno(icalerrorenum x) (icalerror_get_error_state(x) == ICAL_ERROR_DEFAULT && icalerror_errors_are_fatal == 1)) { icalerror_warn(icalerror_strerror(x)); ical_bt(); - assert(0); + icalassert(0); } } @@ -273,9 +273,9 @@ void ical_bt(void) strings = backtrace_symbols(stack_frames, num); for (i = 0; i < num; i++) { if (strings != NULL) { - fprintf(stderr, "%s\n", strings[i]); + icalerrprintf("%s\n", strings[i]); } else { - fprintf(stderr, "%p\n", stack_frames[i]); + icalerrprintf("%p\n", stack_frames[i]); } } icalmemory_free_buffer(strings); diff --git a/src/libical/icalerror.h b/src/libical/icalerror.h index 7fd1253a..130df0b3 100644 --- a/src/libical/icalerror.h +++ b/src/libical/icalerror.h @@ -187,10 +187,10 @@ LIBICAL_ICAL_EXPORT int icalerror_get_errors_are_fatal(void); #ifdef __GNUC__ca #define icalerror_warn(message) \ -{fprintf(stderr, "%s(), %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, message);} +{icalerrprintf("%s(), %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, message);} #else /* __GNU_C__ */ #define icalerror_warn(message) \ -{fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, message);} +{icalerrprintf("%s:%d: %s\n", __FILE__, __LINE__, message);} #endif /* __GNU_C__ */ /** @@ -343,7 +343,7 @@ if(icalerror_get_error_state(x) == ICAL_ERROR_FATAL || \ icalerror_get_errors_are_fatal() == 1)){ \ icalerror_warn(icalerror_strerror(x)); \ ical_bt(); \ - assert(0); \ + icalassert(0); \ } } #else /** @@ -405,13 +405,13 @@ LIBICAL_ICAL_EXPORT void icalerror_set_errno(icalerrorenum x); #ifdef __GNUC__ #define icalerror_assert(test,message) \ if (!(test)) { \ - fprintf(stderr, "%s(), %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, message); \ + icalerrprintf("%s(), %s:%d: %s\n", __FUNCTION__, __FILE__, __LINE__, message); \ icalerror_stop_here(); \ abort();} #else /*__GNUC__*/ #define icalerror_assert(test,message) \ if (!(test)) { \ - fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, message); \ + icalerrprintf("%s:%d: %s\n", __FILE__, __LINE__, message); \ icalerror_stop_here(); \ abort();} #endif /*__GNUC__*/ @@ -518,7 +518,7 @@ if (!(test)) { \ #define icalerror_check_arg_re(test,arg,error) \ if (!(test)) { \ icalerror_stop_here(); \ - assert(0); \ + icalassert(0); \ return error; \ } diff --git a/src/libical/icalmime.c b/src/libical/icalmime.c index a224218e..0c5c39ce 100644 --- a/src/libical/icalmime.c +++ b/src/libical/icalmime.c @@ -185,7 +185,7 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d const char *minor = sspm_minor_type_string(parts[i].header.minor); if (parts[i].header.minor == SSPM_UNKNOWN_MINOR_TYPE) { - assert(parts[i].header.minor_text != 0); + icalassert(parts[i].header.minor_text != 0); minor = parts[i].header.minor_text; } @@ -195,7 +195,7 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d if (comp == 0) { /* HACK Handle Error */ - assert(0); + icalassert(0); } if (parts[i].header.error != SSPM_NO_ERROR) { @@ -322,12 +322,12 @@ icalcomponent *icalmime_parse(char *(*get_string) (char *s, size_t size, void *d icalcomponent_add_component(parent, comp); } else { - assert(0); + icalassert(0); } last = comp; last_level = parts[i].level; - assert(parts[i].data == 0); + icalassert(parts[i].data == 0); } sspm_free_parts(parts, NUM_PARTS); diff --git a/src/libical/icalparser.c b/src/libical/icalparser.c index 7bb0e7f6..6681ed42 100644 --- a/src/libical/icalparser.c +++ b/src/libical/icalparser.c @@ -661,8 +661,8 @@ icalcomponent *icalparser_parse(icalparser *parser, /* This is bad news... assert? */ } - assert(parser->root_component == 0); - assert(pvl_count(parser->components) == 0); + icalassert(parser->root_component == 0); + icalassert(pvl_count(parser->components) == 0); if (root == 0) { /* Just one component */ @@ -682,7 +682,7 @@ icalcomponent *icalparser_parse(icalparser *parser, } else { /* Badness */ - assert(0); + icalassert(0); } c = 0; @@ -820,7 +820,7 @@ icalcomponent *icalparser_add_line(icalparser *parser, char *line) (void)icalparser_clean(parser); /* may reset parser->root_component */ } - assert(pvl_count(parser->components) == 0); + icalassert(pvl_count(parser->components) == 0); parser->state = ICALPARSER_SUCCESS; rtrn = parser->root_component; @@ -1247,7 +1247,7 @@ icalcomponent *icalparser_add_line(icalparser *parser, char *line) if (pvl_data(pvl_tail(parser->components)) == 0 && parser->level == 0) { /* HACK. Does this clause ever get executed? */ parser->state = ICALPARSER_SUCCESS; - assert(0); + icalassert(0); return parser->root_component; } else { parser->state = ICALPARSER_IN_PROGRESS; diff --git a/src/libical/icalproperty.c b/src/libical/icalproperty.c index 45e3a7d2..8202fa32 100644 --- a/src/libical/icalproperty.c +++ b/src/libical/icalproperty.c @@ -812,7 +812,7 @@ void icalproperty_set_value_from_string(icalproperty *prop, const char *str, con if (nval == 0) { /* icalvalue_new_from_string sets errno */ - assert(icalerrno != ICAL_NO_ERROR); + icalassert(icalerrno != ICAL_NO_ERROR); return; } diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index b183bc31..886fd75b 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -2180,7 +2180,7 @@ static int next_unit(icalrecur_iterator *impl, int end_of_data = 0; - assert(has_by_unit || this_frequency); + icalassert(has_by_unit || this_frequency); if (next_sub_unit && next_sub_unit(impl) == 0) { return 0; @@ -2252,7 +2252,7 @@ static int prev_unit(icalrecur_iterator *impl, int end_of_data = 0; - assert(has_by_unit || this_frequency); + icalassert(has_by_unit || this_frequency); if (prev_sub_unit && prev_sub_unit(impl) == 0) { return 0; diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index 1e48c3c5..ba581dc0 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -1575,7 +1575,7 @@ static int parse_coord(char *coord, int len, int *degrees, int *minutes, int *se } else if (len == 8) { sscanf(coord + 1, "%3d%2d%2d", degrees, minutes, seconds); } else { - fprintf(stderr, "Invalid coordinate: %s\n", coord); + icalerrprintf("Invalid coordinate: %s\n", coord); return 1; } @@ -1732,7 +1732,7 @@ static void icaltimezone_parse_zone_tab(void) if (sscanf(buf, "%1000s", location) != 1) { /*limit location to 1000chars */ /*increase as needed */ /*see location and buf declarations */ - fprintf(stderr, "Invalid timezone description line: %s\n", buf); + icalerrprintf("Invalid timezone description line: %s\n", buf); continue; } } else if (sscanf(buf, "%4d%2d%2d %4d%2d%2d %1000s", /*limit location to 1000chars */ @@ -1742,7 +1742,7 @@ static void icaltimezone_parse_zone_tab(void) &latitude_seconds, &longitude_degrees, &longitude_minutes, &longitude_seconds, location) != 7) { - fprintf(stderr, "Invalid timezone description line: %s\n", buf); + icalerrprintf("Invalid timezone description line: %s\n", buf); continue; } } else { @@ -1751,7 +1751,7 @@ static void icaltimezone_parse_zone_tab(void) &latitude_seconds, &longitude_degrees, &longitude_minutes, &longitude_seconds, location)) { - fprintf(stderr, "Invalid timezone description line: %s\n", buf); + icalerrprintf("Invalid timezone description line: %s\n", buf); continue; } } @@ -1856,7 +1856,7 @@ static void icaltimezone_load_builtin_timezone(icaltimezone *zone) /* ##### B.# Sun, 11 Nov 2001 04:04:29 +1100 this is where the MALFORMEDDATA error is being set, after the call to 'icalparser_parse' - fprintf(stderr, "** WARNING ** %s: %d %s\n", + icalerrprintf("** WARNING ** %s: %d %s\n", __FILE__, __LINE__, icalerror_strerror(icalerrno)); */ @@ -2003,7 +2003,7 @@ static void format_utc_offset(int utc_offset, char *buffer, size_t buffer_size) hours, and daylight saving shouldn't change it by more than a few hours. (The maximum offset is 15 hours 56 minutes at present.) */ if (hours < 0 || hours >= 24 || minutes < 0 || minutes >= 60 || seconds < 0 || seconds >= 60) { - fprintf(stderr, "Warning: Strange timezone offset: H:%i M:%i S:%i\n", + icalerrprintf("Warning: Strange timezone offset: H:%i M:%i S:%i\n", hours, minutes, seconds); } diff --git a/src/libical/icptrholder_cxx.h b/src/libical/icptrholder_cxx.h index bd63fe5a..c361803c 100644 --- a/src/libical/icptrholder_cxx.h +++ b/src/libical/icptrholder_cxx.h @@ -106,13 +106,13 @@ public: T *operator->() const { - assert(ptr); + icalassert(ptr); return ptr; } T &operator*() { - assert(ptr); + icalassert(ptr); return *ptr; } diff --git a/src/libical/pvl.c b/src/libical/pvl.c index 3b7c48d2..fdb7e0a5 100644 --- a/src/libical/pvl.c +++ b/src/libical/pvl.c @@ -277,7 +277,7 @@ void pvl_insert_ordered(pvl_list L, pvl_comparef f, void *d) /* badness, choke */ #if !defined(lint) - assert(0); + icalassert(0); #endif } diff --git a/src/libical/sspm.c b/src/libical/sspm.c index 0d30c35d..0539a154 100644 --- a/src/libical/sspm.c +++ b/src/libical/sspm.c @@ -399,7 +399,7 @@ static struct sspm_action_map get_action(struct mime_impl *impl, return sspm_action_map[i]; } } - assert(i < len); /*should return before now */ + icalassert(i < len); /*should return before now */ return sspm_action_map[0]; } @@ -654,7 +654,7 @@ static void sspm_read_header(struct mime_impl *impl, struct sspm_header *header) impl->state = IN_HEADER; current_line++; - assert(strlen(buf) < TMP_BUF_SIZE); + icalassert(strlen(buf) < TMP_BUF_SIZE); strncpy(header_lines[current_line], buf, TMP_BUF_SIZE); header_lines[current_line][TMP_BUF_SIZE - 1] = '\0'; @@ -686,7 +686,7 @@ static void sspm_read_header(struct mime_impl *impl, struct sspm_header *header) buf_start++; } - assert(strlen(buf_start) + strlen(last_line) < TMP_BUF_SIZE); + icalassert(strlen(buf_start) + strlen(last_line) < TMP_BUF_SIZE); strncat(last_line, buf_start, TMP_BUF_SIZE - strlen(last_line) - 1); @@ -745,7 +745,7 @@ static void sspm_make_part(struct mime_impl *impl, /* Read until the paired terminating boundary */ if ((boundary = (char *)icalmemory_new_buffer(strlen(line) + 5)) == 0) { - fprintf(stderr, "Out of memory"); + icalerrprintf("Out of memory"); abort(); } strcpy(boundary, line); @@ -783,7 +783,7 @@ static void sspm_make_part(struct mime_impl *impl, /* Read until the paired terminating boundary */ if ((boundary = (char *)icalmemory_new_buffer(strlen(line) + 5)) == 0) { - fprintf(stderr, "Out of memory"); + icalerrprintf("Out of memory"); abort(); } strcpy(boundary, line); @@ -802,7 +802,7 @@ static void sspm_make_part(struct mime_impl *impl, *size = strlen(line); data = (char *)icalmemory_new_buffer(*size + 2); - assert(data != 0); + icalassert(data != 0); if (header->encoding == SSPM_BASE64_ENCODING) { rtrn = decode_base64(data, line, size); } else if (header->encoding == SSPM_QUOTED_PRINTABLE_ENCODING) { @@ -882,7 +882,7 @@ static void *sspm_make_multipart_subpart(struct mime_impl *impl, struct sspm_hea while ((line = sspm_get_next_line(impl)) != 0) { if (sspm_is_mime_boundary(line)) { - assert(parent_header != 0); + icalassert(parent_header != 0); /* Check if it is the right boundary */ if (!sspm_is_mime_terminating_boundary(line) && @@ -902,7 +902,7 @@ static void *sspm_make_multipart_subpart(struct mime_impl *impl, struct sspm_hea /* Read until the paired terminating boundary */ if ((boundary = (char *)icalmemory_new_buffer(strlen(line) + 5)) == 0) { - fprintf(stderr, "Out of memory"); + icalerrprintf("Out of memory"); abort(); } strcpy(boundary, line); @@ -1144,7 +1144,7 @@ char *decode_base64(char *dest, char *src, size_t *size) cc = -1; } - assert(cc < 64); + icalassert(cc < 64); /* If we've reached the end, fill the remaining slots in the bucket and do a final conversion */ @@ -1352,7 +1352,7 @@ static void sspm_write_base64(struct sspm_buffer *buf, char *inbuf, int size) break; default: - assert(0); + icalassert(0); } for (i = 0; i < 4; i++) { @@ -1387,7 +1387,7 @@ static void sspm_encode_base64(struct sspm_buffer *buf, char *data, size_t size) inbuf[0] = inbuf[1] = inbuf[2] = 0; } - assert(lpos % 4 == 0); + icalassert(lpos % 4 == 0); if (lpos == 72) { sspm_append_string(buf, "\n"); @@ -1425,7 +1425,7 @@ static void sspm_write_header(struct sspm_buffer *buf, struct sspm_header *heade minor = sspm_minor_type_string(header->minor); if (header->minor == SSPM_UNKNOWN_MINOR_TYPE) { - assert(header->minor_text != 0); + icalassert(header->minor_text != 0); minor = header->minor_text; } @@ -1473,7 +1473,7 @@ static void sspm_write_part(struct sspm_buffer *buf, struct sspm_part *part, int } if (part->header.encoding == SSPM_BASE64_ENCODING) { - assert(part->data_size != 0); + icalassert(part->data_size != 0); sspm_encode_base64(buf, part->data, part->data_size); } else if (part->header.encoding == SSPM_QUOTED_PRINTABLE_ENCODING) { sspm_encode_quoted_printable(buf, part->data); @@ -1501,7 +1501,7 @@ static void sspm_write_multipart_part(struct sspm_buffer *buf, while (parts[*part_num].header.major != SSPM_NO_MAJOR_TYPE && level == parent_level + 1) { - assert(header->boundary != NULL); + icalassert(header->boundary != NULL); sspm_append_string(buf, header->boundary); sspm_append_char(buf, '\n'); -- cgit v1.2.1 From 71d09589f291bc9b95974a4d4db4087121ed4bc9 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 22 Jan 2022 12:02:30 -0500 Subject: make it more explicit that C99 compliance is necessary --- CMakeLists.txt | 4 ++++ Install.txt | 2 +- scripts/buildtests.sh | 1 + 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b087a86..2d43e6fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -281,6 +281,10 @@ if(BerkeleyDB_FOUND) set(BDB_LIBRARY ${BerkeleyDB_LIBRARIES}) endif() +# C99 compliant compiler is required +set(CMAKE_C_STANDARD 99) +set(CMAKE_C_STANDARD_REQUIRED ON) + # MSVC specific definitions if(WIN32) if(MSVC) diff --git a/Install.txt b/Install.txt index 3117d350..779c6b86 100644 --- a/Install.txt +++ b/Install.txt @@ -13,7 +13,7 @@ To build libical you will need: - CMake version 3.11.0 or higher - Perl - libicu (not required but strongly recommended) - - a C compiler (let us know if the build fails with your C compiler) + - a C99-compliant C compiler (let us know if the build fails with your C compiler) Building on Unix with gcc or clang: % mkdir build diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index d682f367..5b062505 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -373,6 +373,7 @@ SPLINT() { splint $files \ -badflag \ + -preproc \ -weak -warnposix \ -modobserver -initallelements -redef \ -linelen 1000 \ -- cgit v1.2.1 From 90320c9b4383d6a766f493fd5b22779fd927d21a Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Sat, 22 Jan 2022 10:03:12 -0600 Subject: icalcomponent_set_due wasn't removing TZID when the icaltimetype doesn't have a zone This would result in strings like "DUE;TZID=America/Chicago:20220122" where the TZID wouldn't get removed even though the type is a DATE --- ReleaseNotes.txt | 1 + src/libical/icalcomponent.c | 1 + src/test/regression.c | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index dc428b86..55d29556 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -4,6 +4,7 @@ Release Highlights Version 3.0.14 (UNRELEASED): ---------------------------- * icalvalue: Reset non-UTC icaltimetype::zone on set + * Fix icalcomponent_set_due not removing TZID when necessary Version 3.0.13 (17 January 2022): --------------------------------- diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index dc085709..cef5df5d 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -2382,6 +2382,7 @@ void icalcomponent_set_due(icalcomponent *comp, struct icaltimetype v) icalcomponent_add_property(inner, due_prop); } else if (due_prop != 0) { icalproperty_set_due(due_prop, v); + icalproperty_remove_parameter_by_kind(due_prop, ICAL_TZID_PARAMETER); } else if (dur_prop != 0) { struct icaltimetype start = icalcomponent_get_dtstart(inner); diff --git a/src/test/regression.c b/src/test/regression.c index f50717d5..0e25b121 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4924,6 +4924,27 @@ test_icalvalue_resets_timezone_on_set(void) icalerror_clear_errno(); } +static void test_remove_tzid_from_due(void) +{ + icalproperty *due = icalproperty_vanew_due(icaltime_from_string("20220120T120000"), 0); + icalcomponent *c; + + icalproperty_add_parameter(due, icalparameter_new_tzid("America/New_York")); + + c = icalcomponent_vanew( + ICAL_VCALENDAR_COMPONENT, + icalcomponent_vanew( + ICAL_VTODO_COMPONENT, + due, + 0), + 0); + + icalcomponent_set_due(c, icaltime_from_string("20220120")); + str_is("icalproperty_as_ical_string()", "DUE;VALUE=DATE:20220120\r\n", icalproperty_as_ical_string(icalcomponent_get_first_property(icalcomponent_get_inner(c), ICAL_DUE_PROPERTY))); + + icalcomponent_free(c); +} + int main(int argc, char *argv[]) { #if !defined(HAVE_UNISTD_H) @@ -5065,6 +5086,7 @@ int main(int argc, char *argv[]) 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); test_run("Test icalvalue resets timezone on set", test_icalvalue_resets_timezone_on_set, do_test, do_header); + test_run("Test removing TZID from DUE with icalcomponent_set_due", test_remove_tzid_from_due, do_test, do_header); /** OPTIONAL TESTS go here... **/ -- cgit v1.2.1 From db48f11b7ad125fd9ec75658afd2a995b9703c04 Mon Sep 17 00:00:00 2001 From: Ken Murchison Date: Mon, 24 Jan 2022 08:35:53 -0500 Subject: ReleaseNotes.txt: updated to note RFC9073/9074 support --- ReleaseNotes.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index a7090c5a..414154fe 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -11,6 +11,7 @@ Version 3.1.0 (NOT RELEASED YET): * Allow previous recurrence iteration * Improved performance of recurrence iterators * All ical*_new_clone() functions have been deprecated in favour of ical*_clone() + * Added support for Event Publishing (RFC 9073) and VALARM (RFC 9074) Extensions * New publicly available functions: + icalrecurrencetype_encode_day + icalrecurrencetype_encode_month -- cgit v1.2.1 From aca6cfa41b95cc5c4a017cf2dfed9aa989547e90 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Tue, 6 Mar 2018 18:20:56 +0100 Subject: Make icalmemory, icalarray and some selected functions from other files more robust against out-of-memory errors. --- src/libical/icalarray.c | 22 +++++++++++++++++++--- src/libical/icalcomponent.c | 22 ++++++++++++++++------ src/libical/icalmemory.c | 25 ++++++++++++++++++++++++- src/libical/icalparser.c | 3 +++ 4 files changed, 62 insertions(+), 10 deletions(-) diff --git a/src/libical/icalarray.c b/src/libical/icalarray.c index a3174b95..e55d0e19 100644 --- a/src/libical/icalarray.c +++ b/src/libical/icalarray.c @@ -69,9 +69,6 @@ icalarray *icalarray_copy(icalarray *originalarray) return NULL; } - array->num_elements = originalarray->num_elements; - array->space_allocated = originalarray->space_allocated; - array->chunks = icalmemory_new_buffer(chunks * sizeof(void *)); if (array->chunks) { for (chunk = 0; chunk < chunks; chunk++) { @@ -79,13 +76,24 @@ icalarray *icalarray_copy(icalarray *originalarray) if (array->chunks[chunk]) { memcpy(array->chunks[chunk], originalarray->chunks[chunk], array->increment_size * array->element_size); + + array->space_allocated += array->increment_size; + } + else { + icalerror_set_errno(ICAL_ALLOCATION_ERROR); + icalarray_free(array); + return NULL; } } } else { icalerror_set_errno(ICAL_ALLOCATION_ERROR); + icalarray_free(array); + return NULL; } + array->num_elements = originalarray->num_elements; + return array; } @@ -110,6 +118,10 @@ void icalarray_append(icalarray *array, const void *element) if (array->num_elements >= array->space_allocated) { icalarray_expand(array, 1); + if (array->num_elements >= array->space_allocated) { + /* expansion failed. Error has already been set. */ + return; + } } pos = array->num_elements++; @@ -189,6 +201,10 @@ static void icalarray_expand(icalarray *array, size_t space_needed) } for (c = 0; c < num_new_chunks; c++) { new_chunks[c + num_chunks] = icalarray_alloc_chunk(array); + if (!new_chunks[c + num_chunks]) { + num_new_chunks = c; + break; + } } if (array->chunks) { icalmemory_free_buffer(array->chunks); diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 0889c482..4fb5924b 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -236,7 +236,8 @@ char *icalcomponent_as_ical_string(icalcomponent *impl) char *buf; buf = icalcomponent_as_ical_string_r(impl); - icalmemory_add_tmp_buffer(buf); + if (buf) + icalmemory_add_tmp_buffer(buf); return buf; } @@ -269,6 +270,9 @@ char *icalcomponent_as_ical_string_r(icalcomponent *impl) icalerror_check_arg_rz((kind_string != 0), "Unknown kind of component"); buf = icalmemory_new_buffer(buf_size); + if (buf == NULL) + return NULL; + buf_ptr = buf; icalmemory_append_string(&buf, &buf_ptr, &buf_size, "BEGIN:"); @@ -289,9 +293,10 @@ char *icalcomponent_as_ical_string_r(icalcomponent *impl) c = (icalcomponent *) pvl_data(itr); tmp_buf = icalcomponent_as_ical_string_r(c); - - icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); - icalmemory_free_buffer(tmp_buf); + if (tmp_buf != NULL) { + icalmemory_append_string(&buf, &buf_ptr, &buf_size, tmp_buf); + icalmemory_free_buffer(tmp_buf); + } } icalmemory_append_string(&buf, &buf_ptr, &buf_size, "END:"); @@ -532,7 +537,8 @@ void icalcomponent_add_component(icalcomponent *parent, icalcomponent *child) if (!parent->timezones) parent->timezones = icaltimezone_array_new(); - icaltimezone_array_append_from_vtimezone(parent->timezones, child); + if (parent->timezones) + icaltimezone_array_append_from_vtimezone(parent->timezones, child); /* Flag that we need to sort it before doing any binary searches. */ parent->timezones_sorted = 0; @@ -796,7 +802,8 @@ int icalproperty_recurrence_is_excluded(icalcomponent *comp, /** exrule_time > recurtime **/ } - icalrecur_iterator_free(exrule_itr); + if (exrule_itr) + icalrecur_iterator_free(exrule_itr); } comp->property_iterator = property_iterator; @@ -1998,6 +2005,9 @@ void icalcomponent_merge_component(icalcomponent *comp, icalcomponent *comp_to_m For each VTIMEZONE found, check if we need to add it to comp and if we need to rename it and all TZID references to it. */ tzids_to_rename = icalarray_new(sizeof(char *), 16); + if (!tzids_to_rename) + return; + subcomp = icalcomponent_get_first_component(comp_to_merge, ICAL_VTIMEZONE_COMPONENT); while (subcomp) { next_subcomp = icalcomponent_get_next_component(comp_to_merge, ICAL_VTIMEZONE_COMPONENT); diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index 3012568d..3650cfe3 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -123,6 +123,8 @@ static buffer_ring *buffer_ring_new(void) int i; br = (buffer_ring *) icalmemory_new_buffer(sizeof(buffer_ring)); + if (!br) + return NULL; for (i = 0; i < BUFFER_RING_SIZE; i++) { br->ring[i] = 0; @@ -182,6 +184,9 @@ static buffer_ring *get_buffer_ring(void) void icalmemory_add_tmp_buffer(void *buf) { buffer_ring *br = get_buffer_ring(); + if (!br) { + return; + } /* Wrap around the ring */ if (++(br->pos) == BUFFER_RING_SIZE) { @@ -229,6 +234,8 @@ void icalmemory_free_ring() buffer_ring *br; br = get_buffer_ring(); + if (!br) + return; icalmemory_free_ring_byval(br); #if defined(HAVE_PTHREAD) @@ -241,7 +248,15 @@ void icalmemory_free_ring() /* Like strdup, but the buffer is on the ring. */ char *icalmemory_tmp_copy(const char *str) { - char *b = icalmemory_tmp_buffer(strlen(str) + 1); + char *b; + + if (!str) + return NULL; + + b = icalmemory_tmp_buffer(strlen(str) + 1); + + if (!b) + return NULL; strcpy(b, str); @@ -328,6 +343,10 @@ void icalmemory_append_string(char **buf, char **pos, size_t *buf_size, const ch *buf_size = (*buf_size) * 2 + final_length; new_buf = icalmemory_resize_buffer(*buf, *buf_size); + if (!new_buf) { + // an error was set in the resize function, so we just return here. + return; + } new_pos = (void *)((size_t) new_buf + data_length); @@ -365,6 +384,10 @@ void icalmemory_append_char(char **buf, char **pos, size_t *buf_size, char ch) *buf_size = (*buf_size) * 2 + final_length + 1; new_buf = icalmemory_resize_buffer(*buf, *buf_size); + if (!new_buf) { + // an error was set in the resize function, so we just return here. + return; + } new_pos = (void *)((size_t) new_buf + data_length); diff --git a/src/libical/icalparser.c b/src/libical/icalparser.c index 6681ed42..90a41e63 100644 --- a/src/libical/icalparser.c +++ b/src/libical/icalparser.c @@ -1365,6 +1365,9 @@ icalcomponent *icalparser_parse_string(const char *str) d.str = str; p = icalparser_new(); + if (!p) + return NULL; + icalparser_set_gen_data(p, &d); icalerror_set_error_state(ICAL_MALFORMEDDATA_ERROR, ICAL_ERROR_NONFATAL); -- cgit v1.2.1 From 098fb68688b853410daed96812a6fe0a22e0e15f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Feb 2022 09:02:47 -0500 Subject: ReleaseNotes.txt - 3.0.14 --- ReleaseNotes.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 55d29556..f1652bf9 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,8 +1,8 @@ Release Highlights ================== -Version 3.0.14 (UNRELEASED): ----------------------------- +Version 3.0.14 (05 February 2022): +---------------------------------- * icalvalue: Reset non-UTC icaltimetype::zone on set * Fix icalcomponent_set_due not removing TZID when necessary -- cgit v1.2.1 From 0f33ebaff96143b2ab9001f3841f1c51c8cc2814 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Feb 2022 09:16:47 -0500 Subject: CMakeLists.txt, ReleaseNotes.txt - this will be become 3.0.15 --- CMakeLists.txt | 2 +- ReleaseNotes.txt | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 762f7f4e..f889f985 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -112,7 +112,7 @@ endif() set(LIBICAL_LIB_MAJOR_VERSION "3") set(LIBICAL_LIB_MINOR_VERSION "0") -set(LIBICAL_LIB_PATCH_VERSION "14") +set(LIBICAL_LIB_PATCH_VERSION "15") set(LIBICAL_LIB_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}" ) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index f1652bf9..dec99624 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,6 +1,10 @@ Release Highlights ================== +Version 3.0.15 (UNRELEASED): +---------------------------- + * + Version 3.0.14 (05 February 2022): ---------------------------------- * icalvalue: Reset non-UTC icaltimetype::zone on set -- cgit v1.2.1 From bb3139054b1077e0b6baf1b4cf0d87b2299398d5 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Feb 2022 12:48:33 -0500 Subject: minor coding style fixes --- src/libical/icalarray.c | 3 +-- src/libical/icalcomponent.c | 3 ++- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libical/icalarray.c b/src/libical/icalarray.c index e55d0e19..5010baf6 100644 --- a/src/libical/icalarray.c +++ b/src/libical/icalarray.c @@ -78,8 +78,7 @@ icalarray *icalarray_copy(icalarray *originalarray) array->increment_size * array->element_size); array->space_allocated += array->increment_size; - } - else { + } else { icalerror_set_errno(ICAL_ALLOCATION_ERROR); icalarray_free(array); return NULL; diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 4fb5924b..0207fa70 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -236,8 +236,9 @@ char *icalcomponent_as_ical_string(icalcomponent *impl) char *buf; buf = icalcomponent_as_ical_string_r(impl); - if (buf) + if (buf) { icalmemory_add_tmp_buffer(buf); + } return buf; } -- cgit v1.2.1 From 91cbf0e58f897050aaa525bf45094846832206da Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Feb 2022 12:49:01 -0500 Subject: buildsystem - require C++11 compliance for the C++ bindings --- CMakeLists.txt | 2 ++ Install.txt | 1 + ReleaseNotes.txt | 1 + 3 files changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d43e6fb..82b14260 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -151,6 +151,8 @@ set(LIBRARY_TYPE SHARED) option(WITH_CXX_BINDINGS "Build the C++ bindings." True) if(WITH_CXX_BINDINGS) enable_language(CXX) + set(CMAKE_CXX_STANDARD 11) + set(CMAKE_CXX_STANDARD_REQUIRED ON) if(CMAKE_CXX_COMPILER) add_definitions(-DWITH_CXX_BINDINGS) else() diff --git a/Install.txt b/Install.txt index 779c6b86..cd9507c0 100644 --- a/Install.txt +++ b/Install.txt @@ -14,6 +14,7 @@ To build libical you will need: - Perl - libicu (not required but strongly recommended) - a C99-compliant C compiler (let us know if the build fails with your C compiler) + - for C++ bindings, a C++11 compliant compiler Building on Unix with gcc or clang: % mkdir build diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index a2253ecf..30f86fa9 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -4,6 +4,7 @@ Release Highlights Version 3.1.0 (NOT RELEASED YET): -------------------------------- * MSVC 2013 or higher (when building on Windows with MSVC) + * For the C++ bindings, a C++11 compliant complier is required * Requires CMake v3.11.0 or higher * libical-glib now requires glib 2.38 or higher * draft-ietf-calext-eventpub-extensions-19 (RFC 9073) support added -- cgit v1.2.1 From f109855e238f7857d4683be838e8acd5fcafd0a2 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 6 Feb 2022 06:24:22 -0500 Subject: buildsystem - a C11-compliant C compiler is required for libical-glib --- Install.txt | 5 +++-- ReleaseNotes.txt | 3 ++- src/libical-glib/CMakeLists.txt | 4 ++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Install.txt b/Install.txt index cd9507c0..30b4de99 100644 --- a/Install.txt +++ b/Install.txt @@ -10,11 +10,12 @@ passing -DCMAKE_INSTALL_PREFIX=/install/path to cmake. To build a debug version pass -DCMAKE_BUILD_TYPE=Debug to cmake. To build libical you will need: + - a C99-compliant C compiler (let us know if the build fails with your C compiler) + - a C11-compliant C compiler for libical-glib + - a C++11 compliant compiler for C++ bindings - CMake version 3.11.0 or higher - Perl - libicu (not required but strongly recommended) - - a C99-compliant C compiler (let us know if the build fails with your C compiler) - - for C++ bindings, a C++11 compliant compiler Building on Unix with gcc or clang: % mkdir build diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 30f86fa9..57a95536 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -6,7 +6,8 @@ Version 3.1.0 (NOT RELEASED YET): * MSVC 2013 or higher (when building on Windows with MSVC) * For the C++ bindings, a C++11 compliant complier is required * Requires CMake v3.11.0 or higher - * libical-glib now requires glib 2.38 or higher + * libical-glib requires glib 2.38 or higher + * libical-glib requires a C11 compliant compiler * draft-ietf-calext-eventpub-extensions-19 (RFC 9073) support added * draft-ietf-calext-valarm-extensions-07 (RFC 9074) support added * Allow previous recurrence iteration diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt index de5e6210..6e7cf424 100644 --- a/src/libical-glib/CMakeLists.txt +++ b/src/libical-glib/CMakeLists.txt @@ -1,5 +1,9 @@ add_definitions(-Dlibical_ical_EXPORTS) +# a C11 compliant compiler is required to build this library +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED ON) + # build ical-glib-src-generator add_executable(ical-glib-src-generator tools/generator.c -- cgit v1.2.1 From 6634726906548b00cb14cada82b3aa6fd445c8d4 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Fri, 2 Mar 2018 17:40:36 +0100 Subject: icalmemory: Making memory management functions configurable. --- config.h.cmake | 4 +++ src/libical/icalmemory.c | 63 +++++++++++++++++++++++++++++++++++++++++++++--- src/libical/icalmemory.h | 57 ++++++++++++++++++++++++++++++++++++++----- 3 files changed, 115 insertions(+), 9 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index 93f7c6e7..834dd7b1 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -551,3 +551,7 @@ typedef ssize_t IO_SSIZE_T; #define icalassert(...) assert(__VA_ARGS__) #define icalerrprintf(...) fprintf(stderr, __VA_ARGS__) + +#define ICALMEMORY_DEFAULT_MALLOC malloc +#define ICALMEMORY_DEFAULT_REALLOC realloc +#define ICALMEMORY_DEFAULT_FREE free \ No newline at end of file diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index 3650cfe3..de52c94a 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -281,6 +281,44 @@ char *icalmemory_strdup(const char *s) return res; } +#if defined(ICALMEMORY_DEFAULT_MALLOC) +static icalmemory_malloc_f global_icalmem_malloc = &ICALMEMORY_DEFAULT_MALLOC; +#else +static icalmemory_malloc_f global_icalmem_malloc = NULL; +#endif + +#if defined(ICALMEMORY_DEFAULT_REALLOC) +static icalmemory_realloc_f global_icalmem_realloc = &ICALMEMORY_DEFAULT_REALLOC; +#else +static icalmemory_realloc_f global_icalmem_realloc = NULL; +#endif + +#if defined(ICALMEMORY_DEFAULT_FREE) +static icalmemory_free_f global_icalmem_free = &ICALMEMORY_DEFAULT_FREE; +#else +static icalmemory_free_f global_icalmem_free = NULL; +#endif + + +void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, icalmemory_realloc_f f_realloc, icalmemory_free_f f_free) +{ + global_icalmem_malloc = f_malloc; + global_icalmem_realloc = f_realloc; + global_icalmem_free = f_free; +} + +void icalmemory_get_mem_alloc_funcs(icalmemory_malloc_f* f_malloc, icalmemory_realloc_f* f_realloc, icalmemory_free_f* f_free) { + if (f_malloc) { + *f_malloc = global_icalmem_malloc; + } + if (f_realloc) { + *f_realloc = global_icalmem_realloc; + } + if (f_free) { + *f_free = global_icalmem_free; + } +} + /* * These buffer routines create memory the old fashioned way -- so the * caller will have to deallocate the new memory @@ -288,7 +326,14 @@ char *icalmemory_strdup(const char *s) void *icalmemory_new_buffer(size_t size) { - void *b = malloc(size); + void *b; + + if (global_icalmem_malloc == NULL) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + b = global_icalmem_malloc(size); if (b == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); @@ -302,7 +347,14 @@ void *icalmemory_new_buffer(size_t size) void *icalmemory_resize_buffer(void *buf, size_t size) { - void *b = realloc(buf, size); + void *b; + + if (global_icalmem_realloc == NULL) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return 0; + } + + b = global_icalmem_realloc(buf, size); if (b == 0) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); @@ -314,7 +366,12 @@ void *icalmemory_resize_buffer(void *buf, size_t size) void icalmemory_free_buffer(void *buf) { - free(buf); + if (global_icalmem_free == NULL) { + icalerror_set_errno(ICAL_NEWFAILED_ERROR); + return; + } + + global_icalmem_free(buf); } void icalmemory_append_string(char **buf, char **pos, size_t *buf_size, const char *string) diff --git a/src/libical/icalmemory.h b/src/libical/icalmemory.h index 81d39909..e0e036e0 100644 --- a/src/libical/icalmemory.h +++ b/src/libical/icalmemory.h @@ -103,7 +103,11 @@ LIBICAL_ICAL_EXPORT char *icalmemory_tmp_copy(const char *str); * Adds an externally allocated buffer to the ring. This ensures that libical * will `free()` the buffer automatically, either after ::BUFFER_RING_SIZE other * buffers have been created or added, or after ::icalmemory_free_ring() has - * been called. + * been called. Note that freeing the buffers is done using the + * icalmemory_free_buffer() function, which by default is a wrapper around stdlib's + * free() function. However, if the memory management functions are + * customized by the user, the user must make sure to only pass in buffers + * that have been allocated in a compatible manner. * * @par Error handling * No error is raised if @a buf is `NULL`. @@ -141,10 +145,42 @@ LIBICAL_ICAL_EXPORT void icalmemory_add_tmp_buffer(void *buf); */ LIBICAL_ICAL_EXPORT void icalmemory_free_ring(void); -/* Non-tmp buffers must be freed. These are mostly wrappers around - * icalmemory_new_buffer, etc, but are used so the caller can change the memory - * allocators in a future version of the library */ +typedef void* (*icalmemory_malloc_f)(size_t); +typedef void* (*icalmemory_realloc_f)(void*, size_t); +typedef void (*icalmemory_free_f)(void*); + +/** + * @brief Configures the functions to use for memory management. + * + * @param f_malloc The function to use for memory allocation. + * @param f_realloc The function to use for memory reallocation. + * @param f_free The function to use for memory deallocation. + * + * This function configures the library to use the specified functions for + * memory management. By default the standard system memory management + * functions malloc(), realloc() and free() are used. + * + * Note: The memory management functions configured via this + * functions are used throughout the core libical component but not within + * other components like libicalvcal. + * @since 3.1.0 + */ +LIBICAL_ICAL_EXPORT void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, icalmemory_realloc_f f_realloc, icalmemory_free_f f_free); + +/** + * @brief Returns the functions used for memory management. + * + * @param f_malloc A pointer to the function to use for memory allocation. + * @param f_realloc A pointer to the function to use for memory reallocation. + * @param f_free A pointer to the function to use for memory deallocation. + * + * Retrieves the functions used by the library for memory management. + * @since 3.1.0 + */ +LIBICAL_ICAL_EXPORT void icalmemory_get_mem_alloc_funcs(icalmemory_malloc_f* f_malloc, icalmemory_realloc_f* f_realloc, icalmemory_free_f* f_free); + + /** * @brief Creates new buffer with the specified size. * @param size The size of the buffer that is to be created. @@ -156,12 +192,15 @@ LIBICAL_ICAL_EXPORT void icalmemory_free_ring(void); * ::ICAL_NEWFAILED_ERROR and returns `NULL`. * * @par Ownership - * Buffers created with this method are owned by the caller. The must be - * released with the appropriate icalmemory_free_buffer() method. + * Buffers created with this method are owned by the caller. They must be + * released with the icalmemory_free_buffer() method. * * This creates a new (non-temporary) buffer of the specified @a size. All * buffers returned by this method are zeroed-out. * + * By default this function delegates to stdlib's malloc() but + * the used function can be changed via icalmemory_set_mem_alloc_funcs(). + * * ### Usage * ```c * // create buffer @@ -194,6 +233,9 @@ LIBICAL_ICAL_EXPORT void *icalmemory_new_buffer(size_t size); * appropriate icalmemory_free_buffer() method. The old buffer, @a buf, can not * be used anymore after calling this method. * + * By default this function delegates to stdlib's realloc() but + * the used function can be configured via icalmemory_set_mem_alloc_funcs(). + * * ### Usage * ```c * // create new buffer @@ -220,6 +262,9 @@ LIBICAL_ICAL_EXPORT void *icalmemory_resize_buffer(void *buf, size_t size); * @sa icalmemory_new_buffer() * * Releases the memory of the buffer. + * + * By default this function delegates to stdlib's free() but + * the used function can be configured via icalmemory_set_mem_alloc_funcs(). */ LIBICAL_ICAL_EXPORT void icalmemory_free_buffer(void *buf); -- cgit v1.2.1 From f23716fdcb99fc95c0b82a8624bad38cb23bfa62 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Mon, 5 Mar 2018 16:59:07 +0100 Subject: Tests: Introducing custom memory allocation functions that allow testing for consistency and robustness of memory management. --- src/test/CMakeLists.txt | 2 + src/test/regression-utils.c | 14 ++++ src/test/regression.c | 7 ++ src/test/test-malloc.c | 180 ++++++++++++++++++++++++++++++++++++++++++++ src/test/test-malloc.h | 67 +++++++++++++++++ 5 files changed, 270 insertions(+) create mode 100644 src/test/test-malloc.c create mode 100644 src/test/test-malloc.h diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 9e008c86..29001dba 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -96,6 +96,8 @@ set(regression_SRCS regression-utils.c regression-recur.c regression-storage.c + test-malloc.c + test-malloc.h ) if(WITH_CXX_BINDINGS) list(APPEND regression_SRCS regression-cxx.cpp) diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index 431cef85..8daa1797 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -23,6 +23,8 @@ #include "libical/ical.h" +#include "test-malloc.h" + #include int QUIET = 0; @@ -212,7 +214,19 @@ void test_run(const char *test_name, void (*test_fcn) (void), int do_test, int h test_header(test_name, test_set); if (!headeronly && (do_test == 0 || do_test == test_set)) { + testmalloc_reset(); (*test_fcn) (); + + /* TODO: Check for memory leaks here. We could do a check like the + following but we would have to implement the test-cases in a way + that all memory is freed at the end of each test. This would include + freeing built in and cached timezones. + + ok("no memory leaked", + (global_testmalloc_statistics.mem_allocated_current == 0) + && (global_testmalloc_statistics.blocks_allocated == 0)); + */ + if (!QUIET) printf("\n"); } diff --git a/src/test/regression.c b/src/test/regression.c index 3c344f26..be3a2a20 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -27,6 +27,7 @@ #include "regression.h" #include "libical/astime.h" +#include "test-malloc.h" #include "libical/ical.h" #include "libicalss/icalss.h" #include "libicalvcal/icalvcal.h" @@ -5205,6 +5206,12 @@ int main(int argc, char *argv[]) int do_header = 0; int failed_count = 0; + // We specify special versions of malloc et al. that perform some extra verifications. + // Most notably they ensure, that memory allocated with icalmemory_new_buffer() is freed + // using icalmemory_free() rather than using free() directly and vice versa. Failing to + // do so would cause the test to fail with assertions or access violations. + icalmemory_set_mem_alloc_funcs(&test_malloc, &test_realloc, &test_free); + set_zone_directory(TEST_ZONEDIR); icaltimezone_set_tzid_prefix(TESTS_TZID_PREFIX); diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c new file mode 100644 index 00000000..49de3b3c --- /dev/null +++ b/src/test/test-malloc.c @@ -0,0 +1,180 @@ +/*====================================================================== +FILE: test-malloc.c + +(C) COPYRIGHT 2018-2022, Markus Minichmayr + + This library is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html + + Or: + + The Mozilla Public License Version 2.0. You may obtain a copy of + the License at https://www.mozilla.org/MPL/ +======================================================================*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include "test-malloc.h" +#include "regression.h" + +#include +#include +#include + + + +struct testmalloc_statistics global_testmalloc_statistics; +static int global_testmalloc_remaining_attempts = -1; + +#define TESTMALLOC_MAGIC_NO 0x1234abcd +struct testmalloc_hdr { + uint32_t magic_no; + size_t size; +}; + +struct testmalloc_hdrlayout { + + struct testmalloc_hdr hdr; + int data; +}; + +#define TESTMALLOC_HDR_SIZE ((size_t) &((struct testmalloc_hdrlayout*) 0)->data) + + +void *test_malloc(size_t size) { + + void* block; + struct testmalloc_hdr* hdr; + + global_testmalloc_statistics.malloc_cnt++; + if (global_testmalloc_remaining_attempts == 0) { + global_testmalloc_statistics.malloc_failed_cnt++; + return NULL; + } + + block = malloc(size + TESTMALLOC_HDR_SIZE); + if (block == NULL) { + global_testmalloc_statistics.malloc_failed_cnt++; + return NULL; + } + + hdr = (struct testmalloc_hdr*) block; + hdr->magic_no = TESTMALLOC_MAGIC_NO; + hdr->size = size; + + global_testmalloc_statistics.mem_allocated_current += size; + if (global_testmalloc_statistics.mem_allocated_current > global_testmalloc_statistics.mem_allocated_max) { + global_testmalloc_statistics.mem_allocated_max = global_testmalloc_statistics.mem_allocated_current; + } + + global_testmalloc_statistics.blocks_allocated++; + + if (global_testmalloc_remaining_attempts > 0) { + global_testmalloc_remaining_attempts--; + } + + // cppcheck-suppress memleak + return (void*) &((struct testmalloc_hdrlayout *) hdr)->data; +} + +void *test_realloc(void* p, size_t size) { + + struct testmalloc_hdr* hdr; + size_t old_size; + + global_testmalloc_statistics.realloc_cnt++; + if (global_testmalloc_remaining_attempts == 0) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + if (p == NULL) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + hdr = (struct testmalloc_hdr *) (((uint8_t *) p) - TESTMALLOC_HDR_SIZE); + if (hdr->magic_no != TESTMALLOC_MAGIC_NO) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + old_size = hdr->size; + hdr->magic_no = 0; + + // cppcheck-suppress memleakOnRealloc; the mem block p passed to this function stays valid. + hdr = (struct testmalloc_hdr*) realloc(hdr, size + TESTMALLOC_HDR_SIZE); + if (hdr == NULL) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + hdr->magic_no = TESTMALLOC_MAGIC_NO; + hdr->size = size; + + global_testmalloc_statistics.mem_allocated_current += size - old_size; + if (global_testmalloc_statistics.mem_allocated_current > global_testmalloc_statistics.mem_allocated_max) { + global_testmalloc_statistics.mem_allocated_max = global_testmalloc_statistics.mem_allocated_current; + } + + if (global_testmalloc_remaining_attempts > 0) { + global_testmalloc_remaining_attempts--; + } + + return (void*) &((struct testmalloc_hdrlayout*)hdr)->data; +} + +void test_free(void* p) { + + struct testmalloc_hdr* hdr; + size_t old_size; + + if (p == NULL) { + return; + } + + global_testmalloc_statistics.free_cnt++; + + hdr = (struct testmalloc_hdr *) (((uint8_t *) p) - TESTMALLOC_HDR_SIZE); + + // The main objective of this check is to ensure, that only memory, that has been allocated via icalmemory is freed + // via icalmemory_free(). A side objective is to make sure, the block of memory hasn't been corrupted. + if (hdr->magic_no != TESTMALLOC_MAGIC_NO) { + + // If we end up here, then probably either of the following happened: + // * The calling code tries to free a block of memory via icalmemory_free() that has been allocated outside of + // icalmemory, e.g. via malloc(). + // * The header in front of the memory block being freed has been corrupted. + + ok("freed memory was allocated via icalmemory and has not been corrupted", hdr->magic_no == TESTMALLOC_MAGIC_NO); + assert(hdr->magic_no == TESTMALLOC_MAGIC_NO); + global_testmalloc_statistics.free_failed_cnt++; + return; + } + + old_size = hdr->size; + hdr->magic_no = 0; + + free(hdr); + + global_testmalloc_statistics.mem_allocated_current -= old_size; + global_testmalloc_statistics.blocks_allocated--; +} + + + +void testmalloc_reset() { + memset(&global_testmalloc_statistics, 0, sizeof(global_testmalloc_statistics)); + global_testmalloc_remaining_attempts = -1; +} + +/** Sets the maximum number of malloc or realloc attemts that will succeed. If +* the number is negative, no limit will be applied. */ +void testmalloc_set_max_successful_allocs(int n) { + global_testmalloc_remaining_attempts = n; +} diff --git a/src/test/test-malloc.h b/src/test/test-malloc.h new file mode 100644 index 00000000..f66d8703 --- /dev/null +++ b/src/test/test-malloc.h @@ -0,0 +1,67 @@ +/*====================================================================== +FILE: test-malloc.h + +(C) COPYRIGHT 2018-2022, Markus Minichmayr + + This library is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html + + Or: + + The Mozilla Public License Version 2.0. You may obtain a copy of + the License at https://www.mozilla.org/MPL/ +======================================================================*/ + +#ifndef TESTMALLOC_H +#define TESTMALLOC_H + +#include + + +struct testmalloc_statistics { + int malloc_cnt; + int realloc_cnt; + int free_cnt; + + int malloc_failed_cnt; + int realloc_failed_cnt; + int free_failed_cnt; + + size_t mem_allocated_max; + size_t mem_allocated_current; + int blocks_allocated; +}; + +extern struct testmalloc_statistics global_testmalloc_statistics; + +/** Allocates the specified amount of memory and returns a pointer to the allocated memory. + * Memory allocated using this function must be freed using test_free(). + * The number of allocations that can be made using this function can be limited via + * testmalloc_set_max_successful_allocs(). + */ +void *test_malloc(size_t size); + +/** Resizes the specified buffer. + * Can only be used with memory that has previously been allocated using test_malloc(). + */ +void *test_realloc(void* p, size_t size); + +/** Frees a block of memory that has previously been allocated via the test_malloc() function. Specifying memory that + * has not been allocated via test_malloc() causes an assertion. + */ +void test_free(void* p); + +/** Resets the memory management statistics and sets the number of successful + * allocations limit to infinite. + */ +void testmalloc_reset(); + +/** Sets the maximum number of malloc or realloc attemts that will succeed. If + * the number is negative, no limit will be applied. + */ +void testmalloc_set_max_successful_allocs(int n); + +#endif /* !TESTMALLOC_H */ \ No newline at end of file -- cgit v1.2.1 From 84953215d7b7ca5a431f2b53e67f06be280816ad Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Mon, 7 Feb 2022 15:36:29 +0100 Subject: Fix memory allocation in parse_posix_zone(). --- src/libical/icaltz-util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index c8bdbe17..fad41b6e 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -271,7 +271,7 @@ static char *parse_posix_zone(char *p, ttinfo *type) size = strcspn(p, "-+0123456789,\n"); } - type->zname = (char *) malloc(size + 1); + type->zname = (char *) icalmemory_new_buffer(size + 1); strncpy(type->zname, p, size); type->zname[size] = '\0'; p += size; -- cgit v1.2.1 From 73588e6b429655f72fba50d690e16f445d7c9f00 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 18 Feb 2022 12:33:41 -0500 Subject: minor coding style fixes after latest merge --- src/libical/icalmemory.c | 11 +- src/libical/icalmemory.h | 23 ++-- src/test/test-malloc.c | 307 +++++++++++++++++++++++------------------------ src/test/test-malloc.h | 97 ++++++++------- 4 files changed, 218 insertions(+), 220 deletions(-) diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index de52c94a..8e4faae2 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -249,7 +249,7 @@ void icalmemory_free_ring() char *icalmemory_tmp_copy(const char *str) { char *b; - + if (!str) return NULL; @@ -299,15 +299,18 @@ static icalmemory_free_f global_icalmem_free = &ICALMEMORY_DEFAULT_FREE; static icalmemory_free_f global_icalmem_free = NULL; #endif - -void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, icalmemory_realloc_f f_realloc, icalmemory_free_f f_free) +void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, + icalmemory_realloc_f f_realloc, + icalmemory_free_f f_free) { global_icalmem_malloc = f_malloc; global_icalmem_realloc = f_realloc; global_icalmem_free = f_free; } -void icalmemory_get_mem_alloc_funcs(icalmemory_malloc_f* f_malloc, icalmemory_realloc_f* f_realloc, icalmemory_free_f* f_free) { +void icalmemory_get_mem_alloc_funcs(icalmemory_malloc_f *f_malloc, + icalmemory_realloc_f *f_realloc, + icalmemory_free_f *f_free) { if (f_malloc) { *f_malloc = global_icalmem_malloc; } diff --git a/src/libical/icalmemory.h b/src/libical/icalmemory.h index e0e036e0..aa3e5165 100644 --- a/src/libical/icalmemory.h +++ b/src/libical/icalmemory.h @@ -145,32 +145,33 @@ LIBICAL_ICAL_EXPORT void icalmemory_add_tmp_buffer(void *buf); */ LIBICAL_ICAL_EXPORT void icalmemory_free_ring(void); - -typedef void* (*icalmemory_malloc_f)(size_t); -typedef void* (*icalmemory_realloc_f)(void*, size_t); -typedef void (*icalmemory_free_f)(void*); +typedef void *(*icalmemory_malloc_f)(size_t); +typedef void *(*icalmemory_realloc_f)(void *, size_t); +typedef void (*icalmemory_free_f)(void *); /** * @brief Configures the functions to use for memory management. - * + * * @param f_malloc The function to use for memory allocation. * @param f_realloc The function to use for memory reallocation. * @param f_free The function to use for memory deallocation. - * + * * This function configures the library to use the specified functions for * memory management. By default the standard system memory management * functions malloc(), realloc() and free() are used. - * + * * Note: The memory management functions configured via this * functions are used throughout the core libical component but not within * other components like libicalvcal. * @since 3.1.0 */ -LIBICAL_ICAL_EXPORT void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, icalmemory_realloc_f f_realloc, icalmemory_free_f f_free); +LIBICAL_ICAL_EXPORT void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, + icalmemory_realloc_f f_realloc, + icalmemory_free_f f_free); /** * @brief Returns the functions used for memory management. - * + * * @param f_malloc A pointer to the function to use for memory allocation. * @param f_realloc A pointer to the function to use for memory reallocation. * @param f_free A pointer to the function to use for memory deallocation. @@ -178,9 +179,9 @@ LIBICAL_ICAL_EXPORT void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_ma * Retrieves the functions used by the library for memory management. * @since 3.1.0 */ -LIBICAL_ICAL_EXPORT void icalmemory_get_mem_alloc_funcs(icalmemory_malloc_f* f_malloc, icalmemory_realloc_f* f_realloc, icalmemory_free_f* f_free); +LIBICAL_ICAL_EXPORT void icalmemory_get_mem_alloc_funcs(icalmemory_malloc_f *f_malloc, + icalmemory_realloc_f *f_realloc, icalmemory_free_f *f_free); - /** * @brief Creates new buffer with the specified size. * @param size The size of the buffer that is to be created. diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index 49de3b3c..2c027419 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -19,162 +19,157 @@ FILE: test-malloc.c #include #endif -#include "test-malloc.h" -#include "regression.h" - +#include "test-malloc.h" +#include "regression.h" + #include #include #include - - - -struct testmalloc_statistics global_testmalloc_statistics; -static int global_testmalloc_remaining_attempts = -1; - -#define TESTMALLOC_MAGIC_NO 0x1234abcd -struct testmalloc_hdr { - uint32_t magic_no; - size_t size; -}; - -struct testmalloc_hdrlayout { - - struct testmalloc_hdr hdr; - int data; -}; - -#define TESTMALLOC_HDR_SIZE ((size_t) &((struct testmalloc_hdrlayout*) 0)->data) - - -void *test_malloc(size_t size) { - - void* block; - struct testmalloc_hdr* hdr; - - global_testmalloc_statistics.malloc_cnt++; - if (global_testmalloc_remaining_attempts == 0) { - global_testmalloc_statistics.malloc_failed_cnt++; - return NULL; - } - - block = malloc(size + TESTMALLOC_HDR_SIZE); - if (block == NULL) { - global_testmalloc_statistics.malloc_failed_cnt++; - return NULL; - } - - hdr = (struct testmalloc_hdr*) block; - hdr->magic_no = TESTMALLOC_MAGIC_NO; - hdr->size = size; - - global_testmalloc_statistics.mem_allocated_current += size; - if (global_testmalloc_statistics.mem_allocated_current > global_testmalloc_statistics.mem_allocated_max) { - global_testmalloc_statistics.mem_allocated_max = global_testmalloc_statistics.mem_allocated_current; - } - - global_testmalloc_statistics.blocks_allocated++; - - if (global_testmalloc_remaining_attempts > 0) { - global_testmalloc_remaining_attempts--; - } - - // cppcheck-suppress memleak - return (void*) &((struct testmalloc_hdrlayout *) hdr)->data; -} - -void *test_realloc(void* p, size_t size) { - - struct testmalloc_hdr* hdr; - size_t old_size; - - global_testmalloc_statistics.realloc_cnt++; - if (global_testmalloc_remaining_attempts == 0) { - global_testmalloc_statistics.realloc_failed_cnt++; - return NULL; - } - - if (p == NULL) { - global_testmalloc_statistics.realloc_failed_cnt++; - return NULL; - } - - hdr = (struct testmalloc_hdr *) (((uint8_t *) p) - TESTMALLOC_HDR_SIZE); - if (hdr->magic_no != TESTMALLOC_MAGIC_NO) { - global_testmalloc_statistics.realloc_failed_cnt++; - return NULL; - } - - old_size = hdr->size; - hdr->magic_no = 0; - - // cppcheck-suppress memleakOnRealloc; the mem block p passed to this function stays valid. - hdr = (struct testmalloc_hdr*) realloc(hdr, size + TESTMALLOC_HDR_SIZE); - if (hdr == NULL) { - global_testmalloc_statistics.realloc_failed_cnt++; - return NULL; - } - - hdr->magic_no = TESTMALLOC_MAGIC_NO; - hdr->size = size; - - global_testmalloc_statistics.mem_allocated_current += size - old_size; - if (global_testmalloc_statistics.mem_allocated_current > global_testmalloc_statistics.mem_allocated_max) { - global_testmalloc_statistics.mem_allocated_max = global_testmalloc_statistics.mem_allocated_current; - } - - if (global_testmalloc_remaining_attempts > 0) { - global_testmalloc_remaining_attempts--; - } - - return (void*) &((struct testmalloc_hdrlayout*)hdr)->data; -} - -void test_free(void* p) { - - struct testmalloc_hdr* hdr; - size_t old_size; - - if (p == NULL) { - return; - } - - global_testmalloc_statistics.free_cnt++; - - hdr = (struct testmalloc_hdr *) (((uint8_t *) p) - TESTMALLOC_HDR_SIZE); - - // The main objective of this check is to ensure, that only memory, that has been allocated via icalmemory is freed - // via icalmemory_free(). A side objective is to make sure, the block of memory hasn't been corrupted. - if (hdr->magic_no != TESTMALLOC_MAGIC_NO) { - - // If we end up here, then probably either of the following happened: - // * The calling code tries to free a block of memory via icalmemory_free() that has been allocated outside of - // icalmemory, e.g. via malloc(). - // * The header in front of the memory block being freed has been corrupted. - - ok("freed memory was allocated via icalmemory and has not been corrupted", hdr->magic_no == TESTMALLOC_MAGIC_NO); - assert(hdr->magic_no == TESTMALLOC_MAGIC_NO); - global_testmalloc_statistics.free_failed_cnt++; - return; - } - - old_size = hdr->size; - hdr->magic_no = 0; - - free(hdr); - - global_testmalloc_statistics.mem_allocated_current -= old_size; - global_testmalloc_statistics.blocks_allocated--; -} - - - -void testmalloc_reset() { - memset(&global_testmalloc_statistics, 0, sizeof(global_testmalloc_statistics)); - global_testmalloc_remaining_attempts = -1; -} - -/** Sets the maximum number of malloc or realloc attemts that will succeed. If -* the number is negative, no limit will be applied. */ -void testmalloc_set_max_successful_allocs(int n) { - global_testmalloc_remaining_attempts = n; -} + +struct testmalloc_statistics global_testmalloc_statistics; +static int global_testmalloc_remaining_attempts = -1; + +#define TESTMALLOC_MAGIC_NO 0x1234abcd +struct testmalloc_hdr { + uint32_t magic_no; + size_t size; +}; + +struct testmalloc_hdrlayout { + struct testmalloc_hdr hdr; + int data; +}; + +#define TESTMALLOC_HDR_SIZE ((size_t) &((struct testmalloc_hdrlayout*) 0)->data) + +void *test_malloc(size_t size) { + + void *block; + struct testmalloc_hdr *hdr; + + global_testmalloc_statistics.malloc_cnt++; + if (global_testmalloc_remaining_attempts == 0) { + global_testmalloc_statistics.malloc_failed_cnt++; + return NULL; + } + + block = malloc(size + TESTMALLOC_HDR_SIZE); + if (block == NULL) { + global_testmalloc_statistics.malloc_failed_cnt++; + return NULL; + } + + hdr = (struct testmalloc_hdr *)block; + hdr->magic_no = TESTMALLOC_MAGIC_NO; + hdr->size = size; + + global_testmalloc_statistics.mem_allocated_current += size; + if (global_testmalloc_statistics.mem_allocated_current > global_testmalloc_statistics.mem_allocated_max) { + global_testmalloc_statistics.mem_allocated_max = global_testmalloc_statistics.mem_allocated_current; + } + + global_testmalloc_statistics.blocks_allocated++; + + if (global_testmalloc_remaining_attempts > 0) { + global_testmalloc_remaining_attempts--; + } + + // cppcheck-suppress memleak + return (void*) &((struct testmalloc_hdrlayout *) hdr)->data; +} + +void *test_realloc(void *p, size_t size) { + + struct testmalloc_hdr *hdr; + size_t old_size; + + global_testmalloc_statistics.realloc_cnt++; + if (global_testmalloc_remaining_attempts == 0) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + if (p == NULL) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + hdr = (struct testmalloc_hdr *) (((uint8_t *) p) - TESTMALLOC_HDR_SIZE); + if (hdr->magic_no != TESTMALLOC_MAGIC_NO) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + old_size = hdr->size; + hdr->magic_no = 0; + + // cppcheck-suppress memleakOnRealloc; the mem block p passed to this function stays valid. + hdr = (struct testmalloc_hdr *)realloc(hdr, size + TESTMALLOC_HDR_SIZE); + if (hdr == NULL) { + global_testmalloc_statistics.realloc_failed_cnt++; + return NULL; + } + + hdr->magic_no = TESTMALLOC_MAGIC_NO; + hdr->size = size; + + global_testmalloc_statistics.mem_allocated_current += size - old_size; + if (global_testmalloc_statistics.mem_allocated_current > global_testmalloc_statistics.mem_allocated_max) { + global_testmalloc_statistics.mem_allocated_max = global_testmalloc_statistics.mem_allocated_current; + } + + if (global_testmalloc_remaining_attempts > 0) { + global_testmalloc_remaining_attempts--; + } + + return (void *) &((struct testmalloc_hdrlayout *)hdr)->data; +} + +void test_free(void *p) { + + struct testmalloc_hdr *hdr; + size_t old_size; + + if (p == NULL) { + return; + } + + global_testmalloc_statistics.free_cnt++; + + hdr = (struct testmalloc_hdr *) (((uint8_t *) p) - TESTMALLOC_HDR_SIZE); + + // The main objective of this check is to ensure, that only memory, that has been allocated via icalmemory is freed + // via icalmemory_free(). A side objective is to make sure, the block of memory hasn't been corrupted. + if (hdr->magic_no != TESTMALLOC_MAGIC_NO) { + + // If we end up here, then probably either of the following happened: + // * The calling code tries to free a block of memory via icalmemory_free() that has been allocated outside of + // icalmemory, e.g. via malloc(). + // * The header in front of the memory block being freed has been corrupted. + + ok("freed memory was allocated via icalmemory and has not been corrupted", + hdr->magic_no == TESTMALLOC_MAGIC_NO); + assert(hdr->magic_no == TESTMALLOC_MAGIC_NO); + global_testmalloc_statistics.free_failed_cnt++; + return; + } + + old_size = hdr->size; + hdr->magic_no = 0; + + free(hdr); + + global_testmalloc_statistics.mem_allocated_current -= old_size; + global_testmalloc_statistics.blocks_allocated--; +} + +void testmalloc_reset() { + memset(&global_testmalloc_statistics, 0, sizeof(global_testmalloc_statistics)); + global_testmalloc_remaining_attempts = -1; +} + +/** Sets the maximum number of malloc or realloc attemts that will succeed. If +* the number is negative, no limit will be applied. */ +void testmalloc_set_max_successful_allocs(int n) { + global_testmalloc_remaining_attempts = n; +} diff --git a/src/test/test-malloc.h b/src/test/test-malloc.h index f66d8703..f92055d0 100644 --- a/src/test/test-malloc.h +++ b/src/test/test-malloc.h @@ -14,54 +14,53 @@ FILE: test-malloc.h The Mozilla Public License Version 2.0. You may obtain a copy of the License at https://www.mozilla.org/MPL/ ======================================================================*/ - + #ifndef TESTMALLOC_H #define TESTMALLOC_H - -#include - - -struct testmalloc_statistics { - int malloc_cnt; - int realloc_cnt; - int free_cnt; - - int malloc_failed_cnt; - int realloc_failed_cnt; - int free_failed_cnt; - - size_t mem_allocated_max; - size_t mem_allocated_current; - int blocks_allocated; -}; - -extern struct testmalloc_statistics global_testmalloc_statistics; - -/** Allocates the specified amount of memory and returns a pointer to the allocated memory. - * Memory allocated using this function must be freed using test_free(). - * The number of allocations that can be made using this function can be limited via - * testmalloc_set_max_successful_allocs(). - */ -void *test_malloc(size_t size); - -/** Resizes the specified buffer. - * Can only be used with memory that has previously been allocated using test_malloc(). - */ -void *test_realloc(void* p, size_t size); - -/** Frees a block of memory that has previously been allocated via the test_malloc() function. Specifying memory that - * has not been allocated via test_malloc() causes an assertion. - */ -void test_free(void* p); - -/** Resets the memory management statistics and sets the number of successful - * allocations limit to infinite. - */ -void testmalloc_reset(); - -/** Sets the maximum number of malloc or realloc attemts that will succeed. If - * the number is negative, no limit will be applied. - */ -void testmalloc_set_max_successful_allocs(int n); - -#endif /* !TESTMALLOC_H */ \ No newline at end of file + +#include + +struct testmalloc_statistics { + int malloc_cnt; + int realloc_cnt; + int free_cnt; + + int malloc_failed_cnt; + int realloc_failed_cnt; + int free_failed_cnt; + + size_t mem_allocated_max; + size_t mem_allocated_current; + int blocks_allocated; +}; + +extern struct testmalloc_statistics global_testmalloc_statistics; + +/** Allocates the specified amount of memory and returns a pointer to the allocated memory. + * Memory allocated using this function must be freed using test_free(). + * The number of allocations that can be made using this function can be limited via + * testmalloc_set_max_successful_allocs(). + */ +void *test_malloc(size_t size); + +/** Resizes the specified buffer. + * Can only be used with memory that has previously been allocated using test_malloc(). + */ +void *test_realloc(void *p, size_t size); + +/** Frees a block of memory that has previously been allocated via the test_malloc() function. Specifying memory that + * has not been allocated via test_malloc() causes an assertion. + */ +void test_free(void *p); + +/** Resets the memory management statistics and sets the number of successful + * allocations limit to infinite. + */ +void testmalloc_reset(); + +/** Sets the maximum number of malloc or realloc attemts that will succeed. If + * the number is negative, no limit will be applied. + */ +void testmalloc_set_max_successful_allocs(int n); + +#endif /* !TESTMALLOC_H */ -- cgit v1.2.1 From 17f9f15d81e7fabafb86fbb9e494ed427dfe9750 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 18 Feb 2022 15:03:24 -0500 Subject: src/test/test-malloc.c - remove bad cppcheck-suppress --- src/test/test-malloc.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index 2c027419..a54d91da 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -74,7 +74,6 @@ void *test_malloc(size_t size) { global_testmalloc_remaining_attempts--; } - // cppcheck-suppress memleak return (void*) &((struct testmalloc_hdrlayout *) hdr)->data; } -- cgit v1.2.1 From 9f3b1c181d0f7e2f1e097f04cfbac9586c82840f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 18 Feb 2022 15:03:48 -0500 Subject: scripts/buildtests.sh - add ICALMEMORY_DEFAULT defines needed to make cppcheck happy --- scripts/buildtests.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 5b062505..9097fdca 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -314,6 +314,9 @@ CPPCHECK() { -D PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP=0 \ -D _unused="(void)" \ -D _deprecated="(void)" \ + -D ICALMEMORY_DEFAULT_FREE="free" \ + -D ICALMEMORY_DEFAULT_MALLOC="malloc" \ + -D ICALMEMORY_DEFAULT_REALLOC="realloc" \ -D F_OK=0 \ -D R_OK=0 \ -U YYSTYPE \ -- cgit v1.2.1 From 8f135b184a0a5395dccf484dd9555d3cb4e7e57c Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 18 Feb 2022 15:33:47 -0500 Subject: src/libical/icalmemory.c - skip splint false positives --- src/libical/icalmemory.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index 8e4faae2..722bdd2c 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -281,19 +281,19 @@ char *icalmemory_strdup(const char *s) return res; } -#if defined(ICALMEMORY_DEFAULT_MALLOC) +#if defined(ICALMEMORY_DEFAULT_MALLOC) && !defined(S_SPLINT_S) static icalmemory_malloc_f global_icalmem_malloc = &ICALMEMORY_DEFAULT_MALLOC; #else static icalmemory_malloc_f global_icalmem_malloc = NULL; #endif -#if defined(ICALMEMORY_DEFAULT_REALLOC) +#if defined(ICALMEMORY_DEFAULT_REALLOC) && !defined(S_SPLINT_S) static icalmemory_realloc_f global_icalmem_realloc = &ICALMEMORY_DEFAULT_REALLOC; #else static icalmemory_realloc_f global_icalmem_realloc = NULL; #endif -#if defined(ICALMEMORY_DEFAULT_FREE) +#if defined(ICALMEMORY_DEFAULT_FREE) && !defined(S_SPLINT_S) static icalmemory_free_f global_icalmem_free = &ICALMEMORY_DEFAULT_FREE; #else static icalmemory_free_f global_icalmem_free = NULL; -- cgit v1.2.1 From 5e1cc0394ba4e18ab9d9f57599316bd1e8c53e26 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 18 Feb 2022 17:10:04 -0500 Subject: buildsystem - entire project can be built with memory consistency Introduce a new CMake option LIBICAL_DEVMODE_MEMORY_CONSISTENCY that allows all the project libraries to be built with the memory consistency functions. --- CMakeLists.txt | 14 ++++++++++++++ config.h.cmake | 2 +- src/libical/CMakeLists.txt | 6 ++++++ src/libical/icalmemory.c | 15 ++++++++++++--- src/test/regression.c | 5 +++++ src/test/test-malloc.c | 5 ++--- 6 files changed, 40 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82b14260..3f726faa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,14 @@ # Build for the abi-dumper (requires gcc) # Default=false # +# -DLIBICAL_DEVMODE_MEMORY_CONSISTENCY=[true|false] +# Build using special memory consistency versions of malloc(), realloc() and free() +# that perform some extra verifications. Most notably they ensure that memory allocated +# with icalmemory_new_buffer() is freed using icalmemory_free() rather than using free() +# directly and vice versa. Failing to do so would cause the test to fail with assertions +# or access violations. +# Default=false +# # -DADDRESS_SANITIZER=[true|false] # Build with the address sanitizer (requires gcc or clang) # Default=false @@ -537,6 +545,12 @@ if(ABI_DUMPER) endif() endif() +libical_option(LIBICAL_DEVMODE_MEMORY_CONSISTENCY "(Developer-only) Build with memory consistency functions." False) +if(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) + add_definitions(-DMEMORY_CONSISTENCY) +endif() +mark_as_advanced(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) + libical_option(ADDRESS_SANITIZER "(Developer-only) Build with the address sanitizer." False) mark_as_advanced(ADDRESS_SANITIZER) if(ADDRESS_SANITIZER) diff --git a/config.h.cmake b/config.h.cmake index 834dd7b1..e8796974 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -554,4 +554,4 @@ typedef ssize_t IO_SSIZE_T; #define ICALMEMORY_DEFAULT_MALLOC malloc #define ICALMEMORY_DEFAULT_REALLOC realloc -#define ICALMEMORY_DEFAULT_FREE free \ No newline at end of file +#define ICALMEMORY_DEFAULT_FREE free diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index addd8343..441889d5 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -12,6 +12,9 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ) +if(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) + include_directories(${CMAKE_SOURCE_DIR}/src/test) +endif() if(ICU_FOUND) include_directories(${ICU_INCLUDE_DIRS}) @@ -243,6 +246,9 @@ set(ical_LIB_SRCS caldate.c astime.h ) +if(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) + list(APPEND ical_LIB_SRCS ${PROJECT_SOURCE_DIR}/src/test/test-malloc.c) +endif() add_custom_command( OUTPUT diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index 722bdd2c..a1021ebe 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -33,6 +33,9 @@ #include "icalmemory.h" #include "icalerror.h" +#if defined(MEMORY_CONSISTENCY) +#include "test-malloc.h" +#endif #include @@ -281,19 +284,25 @@ char *icalmemory_strdup(const char *s) return res; } -#if defined(ICALMEMORY_DEFAULT_MALLOC) && !defined(S_SPLINT_S) +#if defined(MEMORY_CONSISTENCY) +static icalmemory_malloc_f global_icalmem_malloc = &test_malloc; +#elif defined(ICALMEMORY_DEFAULT_MALLOC) && !defined(S_SPLINT_S) static icalmemory_malloc_f global_icalmem_malloc = &ICALMEMORY_DEFAULT_MALLOC; #else static icalmemory_malloc_f global_icalmem_malloc = NULL; #endif -#if defined(ICALMEMORY_DEFAULT_REALLOC) && !defined(S_SPLINT_S) +#if defined(MEMORY_CONSISTENCY) +static icalmemory_realloc_f global_icalmem_realloc = &test_realloc; +#elif defined(ICALMEMORY_DEFAULT_REALLOC) && !defined(S_SPLINT_S) static icalmemory_realloc_f global_icalmem_realloc = &ICALMEMORY_DEFAULT_REALLOC; #else static icalmemory_realloc_f global_icalmem_realloc = NULL; #endif -#if defined(ICALMEMORY_DEFAULT_FREE) && !defined(S_SPLINT_S) +#if defined(MEMORY_CONSISTENCY) +static icalmemory_free_f global_icalmem_free = &test_free; +#elif defined(ICALMEMORY_DEFAULT_FREE) && !defined(S_SPLINT_S) static icalmemory_free_f global_icalmem_free = &ICALMEMORY_DEFAULT_FREE; #else static icalmemory_free_f global_icalmem_free = NULL; diff --git a/src/test/regression.c b/src/test/regression.c index be3a2a20..b32bc37b 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -5206,11 +5206,16 @@ int main(int argc, char *argv[]) int do_header = 0; int failed_count = 0; +#if !defined(MEMORY_CONSISTENCY) + // With MEMORY_CONSISTENCY we are building the entire library using the + // test_* functions; therefore, no need to set them here again. + // We specify special versions of malloc et al. that perform some extra verifications. // Most notably they ensure, that memory allocated with icalmemory_new_buffer() is freed // using icalmemory_free() rather than using free() directly and vice versa. Failing to // do so would cause the test to fail with assertions or access violations. icalmemory_set_mem_alloc_funcs(&test_malloc, &test_realloc, &test_free); +#endif set_zone_directory(TEST_ZONEDIR); icaltimezone_set_tzid_prefix(TESTS_TZID_PREFIX); diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index a54d91da..bc55af1c 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -20,7 +20,6 @@ FILE: test-malloc.c #endif #include "test-malloc.h" -#include "regression.h" #include #include @@ -146,8 +145,8 @@ void test_free(void *p) { // icalmemory, e.g. via malloc(). // * The header in front of the memory block being freed has been corrupted. - ok("freed memory was allocated via icalmemory and has not been corrupted", - hdr->magic_no == TESTMALLOC_MAGIC_NO); + //ok("freed memory was allocated via icalmemory and has not been corrupted", + // hdr->magic_no == TESTMALLOC_MAGIC_NO); assert(hdr->magic_no == TESTMALLOC_MAGIC_NO); global_testmalloc_statistics.free_failed_cnt++; return; -- cgit v1.2.1 From ac58828ee1108239145dbb0976522bc8e9e7fe73 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Sat, 19 Feb 2022 17:43:37 +0100 Subject: Fix inconsistencies in use of icalmemory. - icalrecur_test: free rrule.rscale using icalmemory, as it was also allocated via icalmemory. - icalmessage: don't use icalmemory_strdup for now --- src/libicalss/icalmessage.c | 3 +-- src/test/icalrecur_test.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libicalss/icalmessage.c b/src/libicalss/icalmessage.c index d9a7f2a9..c16a163f 100644 --- a/src/libicalss/icalmessage.c +++ b/src/libicalss/icalmessage.c @@ -22,7 +22,6 @@ #include "icalmessage.h" #include "icalerror.h" -#include "icalmemory.h" #include "icalversion.h" /* for ICAL_PACKAGE, ICAL_VERSION */ #include @@ -46,7 +45,7 @@ static char *lowercase(const char *str) return 0; } - n = icalmemory_strdup(str); + n = strdup(str); for (p = n; *p != 0; p++) { *p = tolower((int)*p); diff --git a/src/test/icalrecur_test.c b/src/test/icalrecur_test.c index 3b1f0ceb..d070d040 100644 --- a/src/test/icalrecur_test.c +++ b/src/test/icalrecur_test.c @@ -670,7 +670,7 @@ int main(int argc, char *argv[]) } icalrecur_iterator_free(ritr); - free(rrule.rscale); + icalmemory_free_buffer(rrule.rscale); } fclose(fp); -- cgit v1.2.1 From e3b0c92c4b478ce8d3d83da5977595e30a988635 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 20 Feb 2022 13:01:47 -0500 Subject: CMakeLists.txt - force debug of LIBICAL_DEV_MODE_MEMORY_CONSISTENCY if LIBICAL_DEV_MODE_MEMORY_CONSISTENCY then build in debug mode --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f726faa..43575d81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -547,6 +547,7 @@ endif() libical_option(LIBICAL_DEVMODE_MEMORY_CONSISTENCY "(Developer-only) Build with memory consistency functions." False) if(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) + set(CMAKE_BUILD_TYPE "Debug") add_definitions(-DMEMORY_CONSISTENCY) endif() mark_as_advanced(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) -- cgit v1.2.1 From 7d8a08f78b6c3339420436b166c2b9f99ca9b1e4 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 20 Feb 2022 13:03:37 -0500 Subject: src/test/test-malloc.c - use liberror_assert also use the regression ok() in the regular case. --- src/test/test-malloc.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index bc55af1c..55e5a097 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -20,10 +20,13 @@ FILE: test-malloc.c #endif #include "test-malloc.h" +#include "icalerror.h" +#if !defined(MEMORY_CONSISTENCY) +#include "regression.h" +#endif #include #include -#include struct testmalloc_statistics global_testmalloc_statistics; static int global_testmalloc_remaining_attempts = -1; @@ -145,9 +148,12 @@ void test_free(void *p) { // icalmemory, e.g. via malloc(). // * The header in front of the memory block being freed has been corrupted. - //ok("freed memory was allocated via icalmemory and has not been corrupted", - // hdr->magic_no == TESTMALLOC_MAGIC_NO); - assert(hdr->magic_no == TESTMALLOC_MAGIC_NO); +#if !defined(MEMORY_CONSISTENCY) + ok("freed memory was allocated via icalmemory and has not been corrupted", + hdr->magic_no == TESTMALLOC_MAGIC_NO); +#endif + icalerror_assert(hdr->magic_no == TESTMALLOC_MAGIC_NO, + "freed memory was allocated via icalmemory and has been corrupted"); global_testmalloc_statistics.free_failed_cnt++; return; } -- cgit v1.2.1 From 3ade8d16b0089a6e3c1234a904f0dbf43762956a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 21 Feb 2022 07:42:31 -0500 Subject: buildtests.sh - add tests for LIBICAL_DEVMODE_MEMORY_CONSISTENCY --- scripts/buildtests.sh | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 9097fdca..d7ac9b5b 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -40,6 +40,7 @@ HELP() { echo " -a, --no-asan-build Don't run any ASAN-build (sanitize-address) tests" echo " -d, --no-tsan-build Don't run any TSAN-build (sanitize-threads) tests" echo " -u, --no-ubsan-build Don't run any UBSAN-build (sanitize-undefined) tests" + echo " -x, --no-memc-build Don't run any MEMCONSIST-build (memory consistency) tests" echo } @@ -230,8 +231,24 @@ CLANG_BUILD() { echo "===== END CLANG BUILD: $1 ======" } +#function MEMCONSIST_BUILD: +# runs a gcc memory consistency build test +# $1 = the name of the test (which will have "-mem" appended to it) +# $2 = CMake options +MEMCONSIST_BUILD() { + name="$1-mem" + if ( test $runmemcbuild -ne 1 ) + then + echo "===== MEMCONSIST BUILD TEST $1 DISABLED DUE TO COMMAND LINE OPTION =====" + return + fi + echo "===== START MEMCONSIST BUILD: $1 ======" + BUILD "$name" "-DLIBICAL_DEVMODE_MEMORY_CONSISTENCY=True $2" + echo "===== END MEMCONSIST BUILD: $1 ======" +} + #function ASAN_BUILD: -# runs an clang ASAN build test +# runs a clang ASAN build test # $1 = the name of the test (which will have "-asan" appended to it) # $2 = CMake options ASAN_BUILD() { @@ -248,7 +265,7 @@ ASAN_BUILD() { } #function TSAN_BUILD: -# runs an clang TSAN build test +# runs a clang TSAN build test # $1 = the name of the test (which will have "-tsan" appended to it) # $2 = CMake options TSAN_BUILD() { @@ -265,7 +282,7 @@ TSAN_BUILD() { } #function UBSAN_BUILD: -# runs an clang UBSAN build test +# runs a clang UBSAN build test # $1 = the name of the test (which will have "-ubsan" appended to it) # $2 = CMake options UBSAN_BUILD() { @@ -280,6 +297,7 @@ UBSAN_BUILD() { BUILD "$name" "-DUNDEFINED_SANITIZER=True $2" echo "===== END UBSAN BUILD: $1 ======" } + #function CPPCHECK # runs a cppcheck test, which means: configure, compile, link and run cppcheck # $1 = the name of the test (which will have "-cppcheck" appended to it) @@ -500,8 +518,8 @@ KRAZY() { ##### END FUNCTIONS ##### -#TEMP=`getopt -o hmkctbsnlgadu --long help,no-cmake-compat,no-krazy,no-cppcheck,no-tidy,no-scan,no-splint,no-ninja,no-clang-build,no-gcc-build,no-asan-build,no-tsan-build,no-ubsan-build -- "$@"` -TEMP=`getopt hmkctbsnlgadu $*` +#TEMP=`getopt -o hmkctbsnlgadu --long help,no-cmake-compat,no-krazy,no-cppcheck,no-tidy,no-scan,no-splint,no-ninja,no-clang-build,no-gcc-build,no-asan-build,no-tsan-build,no-ubsan-build,no-memc-build -- "$@"` +TEMP=`getopt hmkctbsnlgadux $*` if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi # Note the quotes around `$TEMP': they are essential! eval set -- "$TEMP" @@ -517,6 +535,7 @@ rungccbuild=1 runasanbuild=1 runtsanbuild=1 runubsanbuild=1 +runmemcbuild=1 runsplint=1 while true; do case "$1" in @@ -533,6 +552,7 @@ while true; do -a|--no-asan-build) runasanbuild=0; shift;; -d|--no-tsan-build) runtsanbuild=0; shift;; -u|--no-ubsan-build) runubsanbuild=0; shift;; + -x|--no-memc-build) runmemcbuild=0; shift;; --) shift; break;; *) echo "Internal error!"; exit 1;; esac @@ -633,6 +653,14 @@ then # CLANG_BUILD testclang2cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake $CMAKEOPTS" fi +#Memory consistency check +MEMCONSIST_BUILD test1memc "" +MEMCONSIST_BUILD test2memc "$CMAKEOPTS" +MEMCONSIST_BUILD test3memc "$TZCMAKEOPTS" +MEMCONSIST_BUILD test4memc "$UUCCMAKEOPTS" +#FIXME: the python test scripts needs for introspection need some love +#MEMCONSIST_BUILD test5memc "$GLIBOPTS" + #Address sanitizer ASAN_BUILD test1asan "" ASAN_BUILD test2asan "$CMAKEOPTS" -- cgit v1.2.1 From c35967f6fad19e3bd805c5fe1aa942e1b84d915b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 21 Feb 2022 08:10:06 -0500 Subject: buildsystem - prepend dev cmake options with "LIBICAL_DEMODE" deprecate the old CMake option names. Issue#547 --- CMakeLists.txt | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43575d81..cf1adbdf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,7 +74,7 @@ # ## DO NOT USE IF YOU ARE AN END-USER. FOR THE DEVELOPERS ONLY!! ## Special CMake Options for Developers # -# -DABI_DUMPER=[true|false] +# -DLIBICAL_DEVMODE_ABI_DUMPER=[true|false] # Build for the abi-dumper (requires gcc) # Default=false # @@ -86,15 +86,15 @@ # or access violations. # Default=false # -# -DADDRESS_SANITIZER=[true|false] +# -DLIBICAL_DEVMODE_ADDRESS_SANITIZER=[true|false] # Build with the address sanitizer (requires gcc or clang) # Default=false # -# -DTHREAD_SANITIZER=[true|false] +# -DLIBICAL_DEVMODE_THREAD_SANITIZER=[true|false] # Build with the thread sanitizer (requires gcc or clang) # Default=false # -# -DUNDEFINED_SANITIZER=[true|false] +# -DLIBICAL_DEVMODE_UNDEFINED_SANITIZER=[true|false] # Build with the undefined sanitizer (requires gcc or clang) # Default=false # @@ -533,9 +533,9 @@ if(SIZEOF_TIME_T EQUAL 4) endif() ################ Developer Options ##################### -libical_option(ABI_DUMPER "(Developer-only) Build for abi-dumper." False) -mark_as_advanced(ABI_DUMPER) -if(ABI_DUMPER) +libical_deprecated_option(ABI_DUMPER LIBICAL_DEVMODE_ABI_DUMPER "(Developer-only) Build for abi-dumper." False) +mark_as_advanced(LIBICAL_DEVMODE_ABI_DUMPER) +if(LIBICAL_DEVMODE_ABI_DUMPER) if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS "-g -Og") set(CMAKE_CXX_FLAGS "-g -Og") @@ -552,9 +552,9 @@ if(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) endif() mark_as_advanced(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) -libical_option(ADDRESS_SANITIZER "(Developer-only) Build with the address sanitizer." False) -mark_as_advanced(ADDRESS_SANITIZER) -if(ADDRESS_SANITIZER) +libical_deprecated_option(ADDRESS_SANITIZER LIBICAL_DEVMODE_ADDRESS_SANITIZER "(Developer-only) Build with the address sanitizer." False) +mark_as_advanced(LIBICAL_DEVMODE_ADDRESS_SANITIZER) +if(LIBICAL_DEVMODE_ADDRESS_SANITIZER) if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g -DADDRESS_SANITIZER") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g -DADDRESS_SANITIZER") @@ -578,9 +578,9 @@ if(ADDRESS_SANITIZER) endif() endif() -libical_option(THREAD_SANITIZER "(Developer-only) Build with the thread sanitizer." False) -mark_as_advanced(THREAD_SANITIZER) -if(THREAD_SANITIZER) +libical_deprecated_option(THREAD_SANITIZER LIBICAL_DEVMODE_THREAD_SANITIZER "(Developer-only) Build with the thread sanitizer." False) +mark_as_advanced(LIBICAL_DEVMODE_THREAD_SANITIZER) +if(LIBICAL_DEVMODE_THREAD_SANITIZER) if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -O1 -g -DTHREAD_SANITIZER") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -O1 -g -DTHREAD_SANITIZER") @@ -604,9 +604,9 @@ if(THREAD_SANITIZER) endif() endif() -libical_option(UNDEFINED_SANITIZER "(Developer-only) Build with the undefined sanitizer." False) -mark_as_advanced(UNDEFINED_SANITIZER) -if(UNDEFINED_SANITIZER) +libical_deprecated_option(UNDEFINED_SANITIZER LIBICAL_DEVMODE_UNDEFINED_SANITIZER "(Developer-only) Build with the undefined sanitizer." False) +mark_as_advanced(LIBICAL_DEVMODE_UNDEFINED_SANITIZER) +if(LIBICAL_DEVMODE_UNDEFINED_SANITIZER) if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -O1 -g -DUNDEFINED_SANITIZER -lubsan") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -O1 -g -DUNDEFINED_SANITIZER -lubsan") -- cgit v1.2.1 From 598690c8badfcdc02e0394f2c24f0ee2f77a4476 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 21 Feb 2022 09:34:56 -0500 Subject: buildtests.sh - follow CMake LIBICAL_DEVMODE option namechange --- scripts/buildtests.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index d7ac9b5b..6c989953 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -260,7 +260,7 @@ ASAN_BUILD() { fi echo "===== START ASAN BUILD: $1 ======" SET_CLANG - BUILD "$name" "-DADDRESS_SANITIZER=True $2" + BUILD "$name" "-DLIBICAL_DEVMODE_ADDRESS_SANITIZER=True $2" echo "===== END ASAN BUILD: $1 ======" } @@ -277,7 +277,7 @@ TSAN_BUILD() { fi echo "===== START TSAN BUILD: $1 ======" SET_CLANG - BUILD "$name" "-DTHREAD_SANITIZER=True $2" + BUILD "$name" "-DLIBICAL_DEVMODE_THREAD_SANITIZER=True $2" echo "===== END TSAN BUILD: $1 ======" } @@ -294,7 +294,7 @@ UBSAN_BUILD() { fi echo "===== START UBSAN BUILD: $1 ======" SET_CLANG - BUILD "$name" "-DUNDEFINED_SANITIZER=True $2" + BUILD "$name" "-DLIBICAL_DEVMODE_UNDEFINED_SANITIZER=True $2" echo "===== END UBSAN BUILD: $1 ======" } -- cgit v1.2.1 From 0892379d877ca44fd0c6580dae36b2ab22fefd46 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 21 Feb 2022 11:17:45 -0500 Subject: src/libical/icaltz-util.c - fix truncated stdio return cast return of fgetc to char found by Coverity --- src/libical/icaltz-util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index fad41b6e..ec096c19 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -657,7 +657,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) /* Read the footer */ if (trans_size == 8 && - (footer[0] = fgetc(f)) == '\n' && + (footer[0] = (char)fgetc(f)) == '\n' && fgets(footer+1, (int) sizeof(footer)-1, f) && footer[strlen(footer)-1] == '\n') { tzstr = footer+1; -- cgit v1.2.1 From 37825bc6013e0344cabfa6679f8fc91a2c1a52f0 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 21 Feb 2022 11:58:35 -0500 Subject: LibIcalMacrosInternal.cmake - improve libical_deprecated_option() --- cmake/modules/LibIcalMacrosInternal.cmake | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmake/modules/LibIcalMacrosInternal.cmake b/cmake/modules/LibIcalMacrosInternal.cmake index cbea8155..ed197a15 100644 --- a/cmake/modules/LibIcalMacrosInternal.cmake +++ b/cmake/modules/LibIcalMacrosInternal.cmake @@ -11,7 +11,10 @@ endfunction() function(libical_deprecated_option deprecated_option option description) set(extra_option_arguments ${ARGN}) - message(STATUS "WARNING: ${deprecated_option} is deprecated. Use ${option} instead") + if(${deprecated_option}) + message(WARNING "${deprecated_option} is deprecated. Use ${option} instead") + set(${option} ${deprecated_option} CACHE BOOL "${description}") + endif() libical_option(${option} "${description}" ${extra_option_arguments}) endfunction() -- cgit v1.2.1 From e5f8690a34a8effbcc034f0a3009e30f9a47509e Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Fri, 25 Feb 2022 18:41:04 +0100 Subject: regression-utils - fix inconsistent function signatures of _ok() and related. --- src/test/regression-utils.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index 8daa1797..35a6241f 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -95,7 +95,7 @@ void die_on_errors_set(int val) die_on_errors = val; } -void _ok(const char *test_name, int success, char *file, int linenum, const char *test) +void _ok(const char *test_name, int success, const char *file, int linenum, const char *test) { testnumber++; @@ -116,7 +116,7 @@ void _ok(const char *test_name, int success, char *file, int linenum, const char } } -void _is(const char *test_name, const char *str1, const char *str2, char *file, int linenum) +void _is(const char *test_name, const char *str1, const char *str2, const char *file, int linenum) { int diff; @@ -137,7 +137,7 @@ void _is(const char *test_name, const char *str1, const char *str2, char *file, } } -void _int_is(char *test_name, int i1, int i2, char *file, int linenum) +void _int_is(const char *test_name, int i1, int i2, const char *file, int linenum) { _ok(test_name, (i1 == i2), file, linenum, ""); -- cgit v1.2.1 From dc203c3d92d25e23e7f6442756e37a8945b18e30 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Fri, 25 Feb 2022 20:44:13 +0100 Subject: test-malloc - Export functions and access global members only via getters to allow accessing the same statistics from across multiple modules in case of dynamic linking. Previously the test executables couldn't access the statistics generated withing the libical shared library, because it didn't share the global statistics variable. --- src/test/test-malloc.c | 7 +++++++ src/test/test-malloc.h | 17 ++++++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index 55e5a097..3c61d1ee 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -177,3 +177,10 @@ void testmalloc_reset() { void testmalloc_set_max_successful_allocs(int n) { global_testmalloc_remaining_attempts = n; } + +void testmalloc_get_statistics(struct testmalloc_statistics* statistics) { + + if (statistics) { + *statistics = global_testmalloc_statistics; + } +} diff --git a/src/test/test-malloc.h b/src/test/test-malloc.h index f92055d0..a68df8aa 100644 --- a/src/test/test-malloc.h +++ b/src/test/test-malloc.h @@ -20,6 +20,8 @@ FILE: test-malloc.h #include +#include "libical_ical_export.h" + struct testmalloc_statistics { int malloc_cnt; int realloc_cnt; @@ -34,33 +36,34 @@ struct testmalloc_statistics { int blocks_allocated; }; -extern struct testmalloc_statistics global_testmalloc_statistics; - /** Allocates the specified amount of memory and returns a pointer to the allocated memory. * Memory allocated using this function must be freed using test_free(). * The number of allocations that can be made using this function can be limited via * testmalloc_set_max_successful_allocs(). */ -void *test_malloc(size_t size); +LIBICAL_ICAL_EXPORT void *test_malloc(size_t size); /** Resizes the specified buffer. * Can only be used with memory that has previously been allocated using test_malloc(). */ -void *test_realloc(void *p, size_t size); +LIBICAL_ICAL_EXPORT void *test_realloc(void *p, size_t size); /** Frees a block of memory that has previously been allocated via the test_malloc() function. Specifying memory that * has not been allocated via test_malloc() causes an assertion. */ -void test_free(void *p); +LIBICAL_ICAL_EXPORT void test_free(void *p); /** Resets the memory management statistics and sets the number of successful * allocations limit to infinite. */ -void testmalloc_reset(); +LIBICAL_ICAL_EXPORT void testmalloc_reset(); /** Sets the maximum number of malloc or realloc attemts that will succeed. If * the number is negative, no limit will be applied. */ -void testmalloc_set_max_successful_allocs(int n); +LIBICAL_ICAL_EXPORT void testmalloc_set_max_successful_allocs(int n); + +/** Gets current memory allocation statistics. */ +LIBICAL_ICAL_EXPORT void testmalloc_get_statistics(struct testmalloc_statistics *statistics); #endif /* !TESTMALLOC_H */ -- cgit v1.2.1 From b8ed2d7d9621e27acf8656b1d8a5915fcf0652cc Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Fri, 25 Feb 2022 18:34:56 +0100 Subject: test - check for memory leaks during regression tests --- src/test/regression-utils.c | 45 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index 35a6241f..a99ea8b5 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -24,6 +24,7 @@ #include "libical/ical.h" #include "test-malloc.h" +#include "regression.h" #include @@ -206,6 +207,24 @@ int test_end(void) return failed; } +/** + * Bring all memory that is allocated as side effect into a stable state, so we can calculate + * stable memory allocation statistics. + */ +static void cleanup_nondeterministic_memory() { + + // icalerrno_return() allocates a buffer on it's first use per thread. Let's allocate it + // now, so it doesn't disturb our test statistics. + icalerrno_return(); + + // Built-in timezones are cached by libical. By freeing them, they don't influence our statistics. + icaltimezone_free_builtin_timezones(); + + // Memory that was added to the ring buffer is not required to be freed by the caller, so + // we free it here to keep our statistics clean. + icalmemory_free_ring(); +} + void test_run(const char *test_name, void (*test_fcn) (void), int do_test, int headeronly) { static int test_set = 1; @@ -214,18 +233,28 @@ void test_run(const char *test_name, void (*test_fcn) (void), int do_test, int h test_header(test_name, test_set); if (!headeronly && (do_test == 0 || do_test == test_set)) { + + struct testmalloc_statistics mem_statistics; + + // Clean up cached and other kind of non-deterministic memory. + cleanup_nondeterministic_memory(); + + // Now that we are in a stable state, reset the memory statistics and start counting. testmalloc_reset(); + + // Run the test. (*test_fcn) (); - /* TODO: Check for memory leaks here. We could do a check like the - following but we would have to implement the test-cases in a way - that all memory is freed at the end of each test. This would include - freeing built in and cached timezones. + // Before getting the statistics, clean up any non-deterministic memory again, so it + // doesn't influence the statistics. + cleanup_nondeterministic_memory(); + + // Now we should get clean statistics. + testmalloc_get_statistics(&mem_statistics); - ok("no memory leaked", - (global_testmalloc_statistics.mem_allocated_current == 0) - && (global_testmalloc_statistics.blocks_allocated == 0)); - */ + ok("no memory leaked", + (mem_statistics.mem_allocated_current == 0) + && (mem_statistics.blocks_allocated == 0)); if (!QUIET) printf("\n"); -- cgit v1.2.1 From 1717e715b87188671ccd4c72f84396dd5929a19a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 26 Feb 2022 11:24:49 -0500 Subject: fix some minor coding style issues after recent commits --- src/test/regression-utils.c | 9 ++++----- src/test/test-malloc.c | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index a99ea8b5..9987a640 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -199,7 +199,6 @@ int test_end(void) printf("%s%d/%d ", prefix, this_set, failed_tests[i].test); } printf("\n"); - } else { printf("\n All Tests Successful.\n"); } @@ -207,12 +206,12 @@ int test_end(void) return failed; } -/** +/** * Bring all memory that is allocated as side effect into a stable state, so we can calculate * stable memory allocation statistics. */ static void cleanup_nondeterministic_memory() { - + // icalerrno_return() allocates a buffer on it's first use per thread. Let's allocate it // now, so it doesn't disturb our test statistics. icalerrno_return(); @@ -253,8 +252,8 @@ void test_run(const char *test_name, void (*test_fcn) (void), int do_test, int h testmalloc_get_statistics(&mem_statistics); ok("no memory leaked", - (mem_statistics.mem_allocated_current == 0) - && (mem_statistics.blocks_allocated == 0)); + (mem_statistics.mem_allocated_current == 0) && + (mem_statistics.blocks_allocated == 0)); if (!QUIET) printf("\n"); diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index 3c61d1ee..5296369f 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -178,7 +178,7 @@ void testmalloc_set_max_successful_allocs(int n) { global_testmalloc_remaining_attempts = n; } -void testmalloc_get_statistics(struct testmalloc_statistics* statistics) { +void testmalloc_get_statistics(struct testmalloc_statistics *statistics) { if (statistics) { *statistics = global_testmalloc_statistics; -- cgit v1.2.1 From 03c02ced21494413920744a400c638b0cb5d493f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Mar 2022 10:33:50 -0500 Subject: buildsystem - fix all uninitialized cmake warnings --- CMakeLists.txt | 58 ++++++++++++++++++-------- appveyor.yml | 4 +- cmake/modules/FindBerkeleyDB.cmake | 24 +++++++---- cmake/modules/GObjectIntrospectionMacros.cmake | 40 ++++++++++++++---- cmake/modules/GtkDoc.cmake | 2 +- scripts/buildtests.sh | 4 +- src/libical-glib/CMakeLists.txt | 2 +- src/test/libical-glib/CMakeLists.txt | 17 +++++++- 8 files changed, 107 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf1adbdf..604cd533 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -224,10 +224,12 @@ if(DEFINED ICU_BASE) #to make --warn-uninitialized happy set(ICU_ROOT $ENV{ICU_BASE}) endif() 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") +if(DEFINED ICU_ROOT) #to make --warn-uninitialized happy + 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() endif() find_package(ICU COMPONENTS uc i18n) @@ -266,10 +268,12 @@ if(ICU_FOUND) endif() # compile in Berkeley DB support -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") +if(DEFINED BerkeleyDB_ROOT_DIR) #to make --warn-uninitialized happy + 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() endif() find_package(BerkeleyDB) @@ -496,7 +500,16 @@ endif() # # Compiler settings # -if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") +set(CMAKE_C_COMPILER_IS_CLANG False) +set(CMAKE_C_COMPILER_IS_GCC False) +if(DEFINED CMAKE_C_COMPILER_ID) + if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") + set(CMAKE_C_COMPILER_IS_CLANG True) + elseif("${CMAKE_C_COMPILER_ID}" MATCHES "GNU") + set(CMAKE_C_COMPILER_IS_GCC True) + endif() +endif() +if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -Wno-deprecated -Wall -Wno-unknown-pragmas -Wextra -Winit-self -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type") libical_add_cflag(-Wunused-but-set-variable UNUSED_BUT_SET) libical_add_cflag(-Wlogical-op LOGICAL_OP) @@ -507,11 +520,20 @@ if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_XOPEN_SOURCE=500 -D_DEFAULT_SOURCE -D_GNU_SOURCE") endif() endif() -if("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") +if(CMAKE_C_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments") endif() -if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") +set(CMAKE_CXX_COMPILER_IS_CLANG False) +set(CMAKE_CXX_COMPILER_IS_GCC False) +if(DEFINED CMAKE_CXX_COMPILER_ID) + if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + set(CMAKE_CXX_COMPILER_IS_CLANG True) + elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") + set(CMAKE_CXX_COMPILER_IS_GCC True) + endif() +endif() +if(CMAKE_CXX_COMPILER_IS_GCC OR CMAKE_CXX_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Weffc++ -Wno-deprecated -Wall -Wextra -Woverloaded-virtual -Winit-self -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type") libical_add_cxxflag(-Wunused-but-set-variable UNUSED_BUT_SET) libical_add_cxxflag(-Wlogical-op LOGICAL_OP) @@ -523,7 +545,7 @@ if(CMAKE_COMPILER_IS_GNUCXX OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_XOPEN_SOURCE=500 -D_DEFAULT_SOURCE -D_GNU_SOURCE") endif() endif() -if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") +if(CMAKE_CXX_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments") endif() @@ -536,7 +558,7 @@ endif() libical_deprecated_option(ABI_DUMPER LIBICAL_DEVMODE_ABI_DUMPER "(Developer-only) Build for abi-dumper." False) mark_as_advanced(LIBICAL_DEVMODE_ABI_DUMPER) if(LIBICAL_DEVMODE_ABI_DUMPER) - if(CMAKE_COMPILER_IS_GNUCC) + if(CMAKE_C_COMPILER_IS_GCC) set(CMAKE_C_FLAGS "-g -Og") set(CMAKE_CXX_FLAGS "-g -Og") else() @@ -555,7 +577,7 @@ mark_as_advanced(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) libical_deprecated_option(ADDRESS_SANITIZER LIBICAL_DEVMODE_ADDRESS_SANITIZER "(Developer-only) Build with the address sanitizer." False) mark_as_advanced(LIBICAL_DEVMODE_ADDRESS_SANITIZER) if(LIBICAL_DEVMODE_ADDRESS_SANITIZER) - if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") + if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g -DADDRESS_SANITIZER") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g -DADDRESS_SANITIZER") else() @@ -581,7 +603,7 @@ endif() libical_deprecated_option(THREAD_SANITIZER LIBICAL_DEVMODE_THREAD_SANITIZER "(Developer-only) Build with the thread sanitizer." False) mark_as_advanced(LIBICAL_DEVMODE_THREAD_SANITIZER) if(LIBICAL_DEVMODE_THREAD_SANITIZER) - if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") + if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=thread -O1 -g -DTHREAD_SANITIZER") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -O1 -g -DTHREAD_SANITIZER") else() @@ -607,7 +629,7 @@ endif() libical_deprecated_option(UNDEFINED_SANITIZER LIBICAL_DEVMODE_UNDEFINED_SANITIZER "(Developer-only) Build with the undefined sanitizer." False) mark_as_advanced(LIBICAL_DEVMODE_UNDEFINED_SANITIZER) if(LIBICAL_DEVMODE_UNDEFINED_SANITIZER) - if(CMAKE_COMPILER_IS_GNUCC OR "${CMAKE_C_COMPILER_ID}" MATCHES "Clang") + if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=undefined -O1 -g -DUNDEFINED_SANITIZER -lubsan") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined -O1 -g -DUNDEFINED_SANITIZER -lubsan") else() @@ -632,7 +654,7 @@ endif() libical_option(ENABLE_LTO_BUILD "Build a link-time optimized version." False) if(ENABLE_LTO_BUILD) - if(CMAKE_COMPILER_IS_GNUCC) + if(CMAKE_C_COMPILER_IS_GCC) libical_add_cflag(-flto LTO) if(C_SUPPORTS_LTO) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wlto-type-mismatch -fuse-linker-plugin") @@ -642,7 +664,7 @@ if(ENABLE_LTO_BUILD) message(FATAL_ERROR "Your C compiler ${CMAKE_C_COMPILER_ID} does not support the LTO building.") endif() - if(WITH_CXX_BINDINGS AND CMAKE_COMPILER_IS_GNUCXX) + if(WITH_CXX_BINDINGS AND CMAKE_CXX_COMPILER_IS_GCC) include(CheckCXXCompilerFlag) libical_add_cxxflag(-flto LTO) if(CXX_SUPPORTS_LTO) diff --git a/appveyor.yml b/appveyor.yml index 5fe3bb92..ac9656bc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -51,8 +51,8 @@ before_build: build_script: - mkdir build - cd build - - cmd: cmake -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. - - sh: if [ "`uname -s`" = "Darwin" ]; then BUILD_EXTRAS="False"; else BUILD_EXTRAS="True"; fi; cmake -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=$BUILD_EXTRAS -DICAL_GLIB_VAPI=$BUILD_EXTRAS .. + - cmd: cmake --warn-uninitialized -Werror=dev -G Ninja -DCMAKE_BUILD_TYPE=%CONFIGURATION% -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=False .. + - sh: if [ "`uname -s`" = "Darwin" ]; then BUILD_EXTRAS="False"; else BUILD_EXTRAS="True"; fi; cmake --warn-uninitialized -Werror=dev -G Ninja -DCMAKE_BUILD_TYPE=$CONFIGURATION -DLIBICAL_BUILD_TESTING=True -DENABLE_GTK_DOC=True -DICAL_GLIB=True -DGOBJECT_INTROSPECTION=$BUILD_EXTRAS -DICAL_GLIB_VAPI=$BUILD_EXTRAS .. - cmake --build . - cmd: cmake --build . --target install - sh: sudo cmake --build . --target install diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index 401a36c4..d9f2cc8d 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -28,15 +28,21 @@ # 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 "") +set(_BERKELEYDB_PATHS "") +if(NOT _BERKELEYDB_PATHS AND DEFINED BERKELEYDB_ROOT) + if($ENV{BERKELEYDB_ROOT} AND NOT "$ENV{BERKELEYDB_ROOT}" STREQUAL "") + set(_BERKELEYDB_PATHS "$ENV{BERKELEYDB_ROOT}") + endif() +endif() +if(NOT _BERKELEYDB_PATHS AND DEFINED Berkeleydb_ROOT) + if($ENV{Berkeleydb_ROOT} AND NOT "$ENV{Berkeleydb_ROOT}" STREQUAL "") + set(_BERKELEYDB_PATHS "$ENV{Berkeleydb_ROOT}") + endif() +endif() +if(NOT _BERKELEYDB_PATHS AND DEFINED BERKELEYDBROOT) + if($ENV{BERKELEYDBROOT} AND NOT "$ENV{BERKELEYDBROOT}" STREQUAL "") + set(_BERKELEYDB_PATHS "$ENV{BERKELEYDBROOT}") + endif() endif() # Allow user to pass a path instead of guessing diff --git a/cmake/modules/GObjectIntrospectionMacros.cmake b/cmake/modules/GObjectIntrospectionMacros.cmake index 83aff931..198e809a 100644 --- a/cmake/modules/GObjectIntrospectionMacros.cmake +++ b/cmake/modules/GObjectIntrospectionMacros.cmake @@ -26,20 +26,45 @@ macro(gir_add_introspections introspections_girs) # Namespace and Version is either fetched from the gir filename # or the _NAMESPACE/_VERSION variable combo - set(_gir_namespace "${${_gir_name}_NAMESPACE}") + set(_gir_namespace "") + if(DEFINED ${_gir_name}_NAMESPACE) + set(_gir_namespace "${${_gir_name}_NAMESPACE}") + endif() if (_gir_namespace STREQUAL "") string(REGEX REPLACE "([^-]+)-.*" "\\1" _gir_namespace "${gir}") endif () - set(_gir_version "${${_gir_name}_VERSION}") + + set(_gir_version "") + if(DEFINED ${_gir_name}_VERSION) + set(_gir_version "${${_gir_name}_VERSION}") + endif() if (_gir_version STREQUAL "") string(REGEX REPLACE ".*-([^-]+).gir" "\\1" _gir_version "${gir}") endif () # _PROGRAM is an optional variable which needs its own --program argument - set(_gir_program "${${_gir_name}_PROGRAM}") + set(_gir_program "") + if(DEFINED ${_gir_name}_PROGRAM) + set(_gir_program "${${_gir_name}_PROGRAM}") + endif() if (NOT _gir_program STREQUAL "") set(_gir_program "--program=${_gir_program}") - endif () + endif() + + # _SCANNERFLAGS is optional + set(_gir_scannerflags "") + if(DEFINED ${_gir_name}_SCANNERFLAGS) + set(_gir_scannerflags "${${_gir_name}_SCANNERFLAGS}") + endif() + + # _FILES + set(_gir_files "") + if(DEFINED ${_gir_name}_FILES) + set(_gir_files "${${_gir_name}_FILES}") + else() + message(ERROR "Unspecified or empty ${_gir_name}_FILES variable") + endif() + # Variables which provides a list of things _gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=") @@ -60,12 +85,12 @@ macro(gir_add_introspections introspections_girs) ${_gir_libraries} ${_gir_packages} ${_gir_includes} - ${${_gir_name}_SCANNERFLAGS} + ${_gir_scannerflags} ${${_gir_name}_CFLAGS} - ${${_gir_name}_FILES} + ${_gir_files} --output ${CMAKE_CURRENT_BINARY_DIR}/${gir} --accept-unprefixed - DEPENDS ${${_gir_name}_FILES} + DEPENDS ${_gir_files} ${${_gir_name}_LIBS} OUTPUT ${gir} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} @@ -77,7 +102,6 @@ macro(gir_add_introspections introspections_girs) string(REPLACE ".gir" ".typelib" _typelib "${gir}") add_custom_command( COMMAND ${GObjectIntrospection_COMPILER} - ${GObjectIntrospection_COMPILER_ARGS} --includedir=. ${CMAKE_CURRENT_BINARY_DIR}/${gir} -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake index 2cf76aaa..3356f437 100644 --- a/cmake/modules/GtkDoc.cmake +++ b/cmake/modules/GtkDoc.cmake @@ -210,7 +210,7 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign ${GTKDOC_SCAN} --module=${_module} --deprecated-guards="${_deprecated_guards}" - --ignore-headers="${_ignore_headers}" + --ignore-headers="${${_ignoreheadersvar}}" --rebuild-sections --rebuild-types ${_srcdirs} diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 6c989953..79eea13b 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -140,9 +140,7 @@ CONFIGURE() { mkdir -p $BDIR cd $BDIR rm -rf * - #lots of work needed to eliminate uninit vars - #cmake --warn-uninitialized -Werror=dev .. $2 || exit 1 - cmake .. $2 || exit 1 + cmake --warn-uninitialized -Werror=dev .. $2 || exit 1 } #function CLEAN: diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt index 6e7cf424..473de675 100644 --- a/src/libical-glib/CMakeLists.txt +++ b/src/libical-glib/CMakeLists.txt @@ -176,7 +176,7 @@ if(HAVE_INTROSPECTION) set(ICalGLib_${LIB_VERSION}_gir_VERSION ${LIBICAL_GLIB_GIR_VERSION_STRING}) set(ICalGLib_${LIB_VERSION}_gir_LIBRARY "ICalGLib") set(ICalGLib_${LIB_VERSION}_gir_INCLUDES GObject-2.0 GLib-2.0) - set(ICalGLib_${LIB_VERSION}_gir_CFLAGS ${_includes} ${GLIB_CFLAGS} -DLIBICAL_GLIB_COMPILATION -I${CMAKE_CURRENT_BINARY_DIR} -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_BINARY_DIR}/src/libical -I${CMAKE_SOURCE_DIR}/src/libical -I${CMAKE_BINARY_DIR}/src/libical-glib) + set(ICalGLib_${LIB_VERSION}_gir_CFLAGS ${GLIB_CFLAGS} -DLIBICAL_GLIB_COMPILATION -I${CMAKE_CURRENT_BINARY_DIR} -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_BINARY_DIR}/src/libical -I${CMAKE_SOURCE_DIR}/src/libical -I${CMAKE_BINARY_DIR}/src/libical-glib) set(ICalGLib_${LIB_VERSION}_gir_LIBS ical-glib) set(ICalGLib_${LIB_VERSION}_gir_FILES ${LIBICAL_GLIB_GIR_SOURCES}) diff --git a/src/test/libical-glib/CMakeLists.txt b/src/test/libical-glib/CMakeLists.txt index 4d239dba..e0f14b14 100644 --- a/src/test/libical-glib/CMakeLists.txt +++ b/src/test/libical-glib/CMakeLists.txt @@ -19,9 +19,22 @@ list(APPEND TEST_FILES ) if(PYTHON3) + set(GI_TYPELIB_PATH_STR "${CMAKE_BINARY_DIR}/src/libical-glib") + if(DEFINED GI_TYPELIB_PATH) + if($ENV{GI_TYPELIB_PATH}) + set(GI_TYPELIB_PATH_STR "${GI_TYPELIB_PATH_STR}:$ENV{GI_TYPELIB_PATH}") + endif() + endif() + set(LD_LIBRARY_PATH_STR "${LIBRARY_OUTPUT_PATH}") + if(DEFINED LD_LIBRARY_PATH) + if($ENV{LD_LIBRARY_PATH}) + set(LD_LIBRARY_PATH_STR "${LD_LIBRARY_PATH_STR}:$ENV{LD_LIBRARY_PATH}") + endif() + endif() + list(APPEND test_env - "GI_TYPELIB_PATH=${CMAKE_BINARY_DIR}/src/libical-glib;$ENV{GI_TYPELIB_PATH}" - "LD_LIBRARY_PATH=${LIBRARY_OUTPUT_PATH};$ENV{LD_LIBRARY_PATH}" + "GI_TYPELIB_PATH=${GI_TYPELIB_PATH_STR}" + "LD_LIBRARY_PATH=${LD_LIBRARY_PATH_STR}" "ZONEINFO_DIRECTORY=${CMAKE_SOURCE_DIR}/zoneinfo" ) -- cgit v1.2.1 From e6a7b1f1595b0609e69752144cdae3efed0ab610 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Mar 2022 13:05:47 -0500 Subject: buildsystem - fix more uninitialized cmake variables --- CMakeLists.txt | 5 ++++- config.h.cmake | 2 +- examples/CMakeLists.txt | 4 +++- src/libical/CMakeLists.txt | 9 ++++++--- src/libicalss/CMakeLists.txt | 4 +++- src/test/CMakeLists.txt | 4 +++- 6 files changed, 20 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 604cd533..a8733d24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -286,6 +286,7 @@ add_feature_info( BerkeleyDB_FOUND "build in support for Berkeley DB storage" ) +set(BDB_FOUND False) if(BerkeleyDB_FOUND) set(HAVE_BDB True) add_definitions(-DDB_DBM_HSEARCH=0) #set to 1 if hsearch support is needed @@ -714,7 +715,9 @@ if(IS_ABSOLUTE ${INCLUDE_INSTALL_DIR}) else() set(includedir "\${prefix}/include") endif() -set(PTHREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}") +if(DEFINED CMAKE_THREAD_LIBS_INIT) + set(PTHREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}") +endif() configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/libical.pc.in diff --git a/config.h.cmake b/config.h.cmake index e8796974..958ffd1d 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -543,7 +543,7 @@ typedef ssize_t IO_SSIZE_T; /* Unused argument macro */ #if !defined(_unused) #if defined(__LCLINT__) || defined(S_SPLINT_S) -#define _unused(x) /*@unused@*/ x +#define _unused(x) x #else #define _unused(x) (void)x #endif diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0c241f4d..46bde676 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -28,7 +28,9 @@ else() icalss-static icalvcal-static ) - target_link_libraries(doesnothing ${CMAKE_THREAD_LIBS_INIT}) + if(DEFINED CMAKE_THREAD_LIBS_INIT) + target_link_libraries(doesnothing ${CMAKE_THREAD_LIBS_INIT}) + endif() if(ICU_FOUND) target_link_libraries(doesnothing ${ICU_LIBRARIES}) endif() diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index 441889d5..920885e9 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -273,8 +273,9 @@ endif() target_include_directories(ical INTERFACE "$") -target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT}) - +if(DEFINED CMAKE_THREAD_LIBS_INIT) + target_link_libraries(ical ${CMAKE_THREAD_LIBS_INIT}) +endif() if(ICU_FOUND) target_link_libraries(ical ${ICU_LIBRARIES}) endif() @@ -340,7 +341,9 @@ if(WITH_CXX_BINDINGS) elseif(STATIC_ONLY) add_library(ical_cxx-static ALIAS ical_cxx) endif() - target_link_libraries(ical_cxx ical ${CMAKE_THREAD_LIBS_INIT}) + if(${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(ical_cxx ical ${CMAKE_THREAD_LIBS_INIT}) + endif() if(MSVC) set_target_properties(ical_cxx PROPERTIES PREFIX "lib") diff --git a/src/libicalss/CMakeLists.txt b/src/libicalss/CMakeLists.txt index 7857cb56..b449b043 100644 --- a/src/libicalss/CMakeLists.txt +++ b/src/libicalss/CMakeLists.txt @@ -144,7 +144,9 @@ if(WITH_CXX_BINDINGS) add_library(icalss_cxx-static ALIAS icalss_cxx) endif() - target_link_libraries(icalss_cxx icalss ical_cxx ${CMAKE_THREAD_LIBS_INIT}) + if(DEFINED CMAKE_THREAD_LIBS_INIT) + target_link_libraries(icalss_cxx icalss ical_cxx ${CMAKE_THREAD_LIBS_INIT}) + endif() if(MSVC) set_target_properties(icalss_cxx PROPERTIES PREFIX "lib") diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 29001dba..8bba8747 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -61,7 +61,9 @@ macro(buildme _name _srcs) target_link_libraries(${_name} ical_cxx icalss_cxx) endif() - target_link_libraries(${_name} ${CMAKE_THREAD_LIBS_INIT}) + if(DEFINED CMAKE_THREAD_LIBS_INIT) + target_link_libraries(${_name} ${CMAKE_THREAD_LIBS_INIT}) + endif() if(ICU_FOUND) target_link_libraries(${_name} ${ICU_LIBRARIES}) endif() -- cgit v1.2.1 From db4eb1eeb32ef97cb3abe55f288ade41e862450f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Mar 2022 14:50:12 -0500 Subject: appveyor.yml - don't install gobject-introspection vala for Mac We haven't been building GOBJECT_INTROSPECTION or ICAL_GLIB_VAPI anyway and now the homebrew packages for cairo are broken ie. ==> Pouring xorgproto--2021.5.all.bottle.tar.gz Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink include/X11 Target /usr/local/include/X11 already exists. You may want to remove it: rm '/usr/local/include/X11' To force the link and overwrite all conflicting files: brew link --overwrite xorgproto To list all files that would be deleted: brew link --overwrite --dry-run xorgproto Possible conflicting files are: /usr/local/include/X11 -> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Tk.framework/Versions/Current/Headers/X11 --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index ac9656bc..bcb85b28 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,7 +43,7 @@ configuration: - Debug install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi before_build: - cmd: call scripts\set_compiler_env.bat -- cgit v1.2.1 From 5c9d4cf40fb34cd9294bbf89edbeb44304c7edc3 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Mar 2022 16:19:50 -0500 Subject: buildsystem - fix more uninitialized cmake variables, again --- CMakeLists.txt | 13 ++++++++----- cmake/modules/FindBerkeleyDB.cmake | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a8733d24..52ecad2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -243,7 +243,6 @@ add_feature_info( "build in RSCALE support" ) if(ICU_FOUND) - set(REQUIRES_PRIVATE_ICU "Requires.private: icu-i18n") #for libical.pc set(HAVE_LIBICU 1) if(ICU_VERSION VERSION_GREATER 50) set(HAVE_ICU_DANGI TRUE) @@ -276,6 +275,7 @@ if(DEFINED BerkeleyDB_ROOT_DIR) #to make --warn-uninitialized happy endif() endif() endif() +set(BerkeleyDB_FIND_QUIETLY True) find_package(BerkeleyDB) set_package_properties(BerkeleyDB PROPERTIES TYPE OPTIONAL @@ -334,10 +334,6 @@ else() set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) endif() -if(APPLE) - set(CMAKE_INSTALL_NAME_DIR ${LIB_DESTINATION}) -endif() - libical_option(ICAL_ERRORS_ARE_FATAL "icalerror_* calls will abort instead of internally signaling an error." False) if(ICAL_ERRORS_ARE_FATAL) set(ICAL_ERRORS_ARE_FATAL 1) @@ -717,6 +713,13 @@ else() endif() if(DEFINED CMAKE_THREAD_LIBS_INIT) set(PTHREAD_LIBS "${CMAKE_THREAD_LIBS_INIT}") +else() + set(PTHREAD_LIBS "") +endif() +if(ICU_FOUND) + set(REQUIRES_PRIVATE_ICU "Requires.private: icu-i18n") #for libical.pc +else() + set(REQUIRES_PRIVATE_ICU "") endif() configure_file( diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index d9f2cc8d..26d6caf0 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -140,6 +140,7 @@ macro(findpackage_berkeleydb_get_lib _BERKELEYDB_OUTPUT_VARNAME _TARGET_BERKELEY endif() endmacro() +list(APPEND BerkeleyDB_LIBRARIES) # 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 -- cgit v1.2.1 From 86d40b566517fcf2167c75d36389d2f0599907a2 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 5 Mar 2022 18:07:38 -0500 Subject: buildsystem - fix linking after recent commits --- src/libical/CMakeLists.txt | 5 +++-- src/libicalss/CMakeLists.txt | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index 920885e9..aa4311ad 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -341,8 +341,9 @@ if(WITH_CXX_BINDINGS) elseif(STATIC_ONLY) add_library(ical_cxx-static ALIAS ical_cxx) endif() - if(${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(ical_cxx ical ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(ical_cxx ical) + if(DEFINED CMAKE_THREAD_LIBS_INIT) + target_link_libraries(ical_cxx ${CMAKE_THREAD_LIBS_INIT}) endif() if(MSVC) diff --git a/src/libicalss/CMakeLists.txt b/src/libicalss/CMakeLists.txt index b449b043..45cc802c 100644 --- a/src/libicalss/CMakeLists.txt +++ b/src/libicalss/CMakeLists.txt @@ -144,8 +144,9 @@ if(WITH_CXX_BINDINGS) add_library(icalss_cxx-static ALIAS icalss_cxx) endif() + target_link_libraries(icalss_cxx icalss ical_cxx) if(DEFINED CMAKE_THREAD_LIBS_INIT) - target_link_libraries(icalss_cxx icalss ical_cxx ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(icalss_cxx ${CMAKE_THREAD_LIBS_INIT}) endif() if(MSVC) -- cgit v1.2.1 From 98b9ae7dee369e5797ed5cbfd1cd31d04b46fa16 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 6 Mar 2022 07:02:17 -0500 Subject: cmake/modules/GtkDoc.cmake - deal with unset (DY)LD_LIBRARY_PATH --- cmake/modules/GtkDoc.cmake | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake index 3356f437..d32d4b18 100644 --- a/cmake/modules/GtkDoc.cmake +++ b/cmake/modules/GtkDoc.cmake @@ -136,7 +136,18 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign # Add it as the last, thus in-tree libs have precedence set(_scangobj_ldflags "${_scangobj_ldflags} -L${LIB_INSTALL_DIR}") - set(_scangobj_prefix ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH="${_scangobj_ld_lib_dirs}:${LIB_INSTALL_DIR}:$ENV{LD_LIBRARY_PATH}") + if(APPLE) + set(ld_lib_path "DYLD_LIBRARY_PATH=${_scangobj_ld_lib_dirs}:${LIB_INSTALL_DIR}") + if(DEFINED DYLD_LIBRARY_PATH) + set(ld_lib_path "${ld_lib_path}:$ENV{DYLD_LIBRARY_PATH}") + endif() + elseif(NOT WIN32 AND NOT WINCE) #ie. unix-like + set(ld_lib_path "LD_LIBRARY_PATH=${_scangobj_ld_lib_dirs}:${LIB_INSTALL_DIR}") + if(DEFINED LD_LIBRARY_PATH) + set(ld_lib_path "${ld_lib_path}:$ENV{LD_LIBRARY_PATH}") + endif() + endif() + set(_scangobj_prefix ${CMAKE_COMMAND} -E env "${ld_lib_path}") # if(NOT (_scangobj_cflags STREQUAL "")) # set(_scangobj_cflags --cflags "${_scangobj_cflags}") -- cgit v1.2.1 From cd724c16f276b1b7a1859634f8dba4e2250245d9 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 6 Mar 2022 07:11:10 -0500 Subject: cmake/modules/FindBerkeleyDB.cmake - set BerkeleyDB_LIBRARIES make sure BerkeleyDB_LIBRARIES is set --- cmake/modules/FindBerkeleyDB.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index 26d6caf0..8acffb36 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -110,6 +110,7 @@ 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}") +set(BerkeleyDB_LIBRARIES "") # 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... @@ -140,7 +141,6 @@ macro(findpackage_berkeleydb_get_lib _BERKELEYDB_OUTPUT_VARNAME _TARGET_BERKELEY endif() endmacro() -list(APPEND BerkeleyDB_LIBRARIES) # 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 -- cgit v1.2.1 From d979f9309295a8d18f7808d1a761308ec0c49c19 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 6 Mar 2022 08:50:40 -0500 Subject: scripts/buildtests.sh - lto builds only on linux with gcc --- scripts/buildtests.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 79eea13b..fd0504f0 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -617,7 +617,10 @@ CLANGTIDY test2builtin "$TZCMAKEOPTS" GCC_BUILD testgcc1 "" GCC_BUILD testgcc2 "$CMAKEOPTS" GCC_BUILD testgcc3 "$UUCCMAKEOPTS" -GCC_BUILD testgcc4lto "$LTOCMAKEOPTS" +if (test "`uname -s`" = "Linux") +then + GCC_BUILD testgcc4lto "$LTOCMAKEOPTS" +fi GCC_BUILD testgcc4glib "$GLIBOPTS" GCC_BUILD testgccnocxx "$CMAKEOPTS -DWITH_CXX_BINDINGS=off" if (test "`uname -s`" = "Linux") @@ -642,8 +645,8 @@ NINJA_GCC_BUILD testninjagcc9 "-DSHARED_ONLY=True -DICAL_GLIB=True -DGOBJECT_INT CLANG_BUILD testclang1 "" CLANG_BUILD testclang2 "$CMAKEOPTS" CLANG_BUILD testclang3 "$UUCCMAKEOPTS" -#broken with clang7 on Fedora29 CLANG_BUILD testclang4lto "$LTOCMAKEOPTS" -#broken with clang7 on Fedora29 CLANG_BUILD testclang4glib "$GLIBOPTS" +#not supported with clang yet CLANG_BUILD testclang4lto "$LTOCMAKEOPTS" +CLANG_BUILD testclang4glib "$GLIBOPTS" if (test "`uname -s`" = "Linux") then echo "Temporarily disable cross-compile tests" -- cgit v1.2.1 From e947506ed1e5f3366cde413fe746a3a63f7a1efa Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 6 Mar 2022 10:14:19 -0500 Subject: icalenums.c - ensure we can't overflow request_status_map based on a patch by yukuan --- src/libical/icalenums.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/libical/icalenums.c b/src/libical/icalenums.c index 4e184795..6f2ee32a 100644 --- a/src/libical/icalenums.c +++ b/src/libical/icalenums.c @@ -81,7 +81,8 @@ const char *icalenum_reqstat_desc(icalrequeststatus stat) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { return request_status_map[i].str; } @@ -104,7 +105,8 @@ char *icalenum_reqstat_code_r(icalrequeststatus stat) int i, major, minor; char tmpbuf[36]; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { major = request_status_map[i].major; minor = request_status_map[i].minor; @@ -119,7 +121,8 @@ short icalenum_reqstat_major(icalrequeststatus stat) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { return request_status_map[i].major; } @@ -131,7 +134,8 @@ short icalenum_reqstat_minor(icalrequeststatus stat) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].kind == stat) { return request_status_map[i].minor; } @@ -143,7 +147,8 @@ icalrequeststatus icalenum_num_to_reqstat(short major, short minor) { int i; - for (i = 0; request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { + int len = (int)(sizeof(request_status_map) / sizeof(request_status_map[0])); + for (i = 0; i < len && request_status_map[i].kind != ICAL_UNKNOWN_STATUS; i++) { if (request_status_map[i].major == major && request_status_map[i].minor == minor) { return request_status_map[i].kind; } -- cgit v1.2.1 From 1ce122c2893eb2ce09fd520f12c819d8097f56b3 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sun, 6 Mar 2022 10:15:25 -0500 Subject: scripts/buildtests.sh - blacklist vcc.c in cppcheck --- scripts/buildtests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 4d747634..e1eafd41 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -310,6 +310,7 @@ CPPCHECK() { grep -v Net-ICal | \ grep -v icalssyacc\.c | \ grep -v icalsslexer\.c | \ + grep -v vcc\.c | \ grep -v _cxx\. | tee cppcheck.out CPPCHECK_WARNINGS cppcheck.out rm -f cppcheck.out -- cgit v1.2.1 From bd3e04552a2beb105510eefb631c82de286237fb Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 3 Mar 2022 20:10:04 -0800 Subject: cmake: Do not export CC into gir compiler this helps cross compilers where full compiler commandline defines the compiler rather than just CC variable, therefore let it use the default values from environment and not synthesize it from CMAKE_C_COMPILER just for this case. Signed-off-by: Khem Raj --- cmake/modules/GObjectIntrospectionMacros.cmake | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmake/modules/GObjectIntrospectionMacros.cmake b/cmake/modules/GObjectIntrospectionMacros.cmake index 198e809a..d8b37f29 100644 --- a/cmake/modules/GObjectIntrospectionMacros.cmake +++ b/cmake/modules/GObjectIntrospectionMacros.cmake @@ -75,8 +75,7 @@ macro(gir_add_introspections introspections_girs) set(_gir_libtool "--no-libtool") add_custom_command( - COMMAND ${CMAKE_COMMAND} -E env "CC='${CMAKE_C_COMPILER}'" - ${GObjectIntrospection_SCANNER} + COMMAND ${GObjectIntrospection_SCANNER} ${GObjectIntrospection_SCANNER_ARGS} --namespace=${_gir_namespace} --nsversion=${_gir_version} -- cgit v1.2.1 From 5764f71b2e064ff622e67449e5bec770c0ae28b6 Mon Sep 17 00:00:00 2001 From: Michael McClurg Date: Fri, 8 Apr 2022 11:39:44 -0600 Subject: Add UsingLibical.md to Doxygen --- doc/CMakeLists.txt | 2 +- doc/Doxyfile.cmake | 3 ++- doc/Mainpage.dox | 3 +++ doc/UsingLibical.md | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 5a33a4d3..e126e1ed 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -18,7 +18,7 @@ set_package_properties(Doxygen PROPERTIES PURPOSE "Needed to build the API documentation." ) if(DOXYGEN_FOUND) - file(GLOB _dox_deps *.dox *.html) + file(GLOB _dox_deps *.dox *.html *.md) file(GLOB _all_hdrs ${CMAKE_SOURCE_DIR}/src/libical/*.h ${CMAKE_SOURCE_DIR}/src/libical/*.c diff --git a/doc/Doxyfile.cmake b/doc/Doxyfile.cmake index 0573c0e7..daa9bae4 100644 --- a/doc/Doxyfile.cmake +++ b/doc/Doxyfile.cmake @@ -86,6 +86,7 @@ FILE_PATTERNS = *.cpp \ *.hh \ *.hxx \ *.hpp \ + *.md \ *.dox RECURSIVE = YES EXCLUDE = @CMAKE_SOURCE_DIR@/src/java \ @@ -106,7 +107,7 @@ EXCLUDE_PATTERNS = */.svn/* \ EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO -IMAGE_PATH = @CMAKE_SOURCE_DIR@/docs +IMAGE_PATH = @CMAKE_SOURCE_DIR@/doc INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO diff --git a/doc/Mainpage.dox b/doc/Mainpage.dox index 45fa36e0..28b43b76 100644 --- a/doc/Mainpage.dox +++ b/doc/Mainpage.dox @@ -13,6 +13,9 @@ the CalDav scheduling extensions in RFC6638; iCalendar extensions in RFC7986, RFC9073, RFC9074; plus the iCalendar iMIP protocol in RFC6047. +For a conceptual overview of the library, see +[Using Libical](@ref UsingLibical). + @section license License The code and datafiles in this distribution are licensed under the diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index e8ab163c..4e13d02b 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -1,4 +1,4 @@ -# Using Libical +# Using Libical {#UsingLibical} > Author: Eric Busboom > -- cgit v1.2.1 From d8049e841c6b1bf191ad66d8392c5387141330a0 Mon Sep 17 00:00:00 2001 From: Michael McClurg Date: Fri, 8 Apr 2022 15:42:05 -0600 Subject: Fix table in UsingLibical.md & missing period --- doc/UsingLibical.md | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index 4e13d02b..abd297ca 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -34,7 +34,7 @@ at the [IETF Tools][] website: ### 1.1 The libical project This code is under active development. If you would like to contribute -to the project, visit +to the project, visit . ### 1.2 License @@ -1330,30 +1330,12 @@ RFC5545. There are a few routines to manipulate error properties: -[ The following data is supposed to be in a table. It looks OK in LyX, -but does not format properly in output. ] - -+-------------------------------------+---------------------------------------------------------+ -| Routine | Purpose | -+-------------------------------------+---------------------------------------------------------+ -| void icalrestriction_check() | Check a component against RFC5546 and insert | -+-------------------------------------+---------------------------------------------------------+ -| | error properties to indicate non compliance | -+-------------------------------------+---------------------------------------------------------+ -| int icalcomponent_count_errors() | Return the number of error properties | -+-------------------------------------+---------------------------------------------------------+ -| | in a component | -+-------------------------------------+---------------------------------------------------------+ -| void icalcomponent_strip_errors() | Remove all error properties in as | -+-------------------------------------+---------------------------------------------------------+ -| | component | -+-------------------------------------+---------------------------------------------------------+ -| void icalcomponent_convert_errors() | Convert some error properties into | -+-------------------------------------+---------------------------------------------------------+ -| | REQUESTS-STATUS proprties to indicate the inability to | -+-------------------------------------+---------------------------------------------------------+ -| | process the component as an iTIP request. | -+-------------------------------------+---------------------------------------------------------+ +| Routine | Purpose | +|---------|---------| +| `void icalrestriction_check()` | Check a component against RFC5546 and insert error properties to indicate non compliance | +| `int icalcomponent_count_errors()` | Return the number of error properties in a component | +| `void icalcomponent_strip_errors()` | Remove all error properties in a component | +| `void icalcomponent_convert_errors()` | Convert some error properties into REQUESTS-STATUS proprties to indicate the inability to process the component as an iTIP request. | The types of errors are listed in icalerror.h. They are: -- cgit v1.2.1 From 7ac64a1047cdc9786e5f9a163159a59c60e831db Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 9 Apr 2022 08:42:42 -0400 Subject: CMakeLists.txt - the PROJECT_VERSION is 3.1 not 3.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 52ecad2d..2d54c5d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -148,7 +148,7 @@ set(LIBICAL_LIB_VERSION_STRING "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}.${LIBICAL_LIB_PATCH_VERSION}" ) -set(PROJECT_VERSION "${LIBICAL_LIB_MAJOR_VERSION}.${LIBICAL_LIB_MINOR_VERSION}") +set(PROJECT_VERSION "3.1") set(PROJECT_URL "https://libical.github.io/libical/") # library build types -- cgit v1.2.1 From 7f704bd9dd9e76f055456fec39b5d037bfdce697 Mon Sep 17 00:00:00 2001 From: Michael McClurg Date: Sat, 23 Apr 2022 17:59:06 -0600 Subject: WIP: use README.md copy as doxygen mainpage --- README.md | 25 ++++++++++++++----------- doc/CMakeLists.txt | 2 +- doc/Mainpage.dox | 40 ---------------------------------------- 3 files changed, 15 insertions(+), 52 deletions(-) delete mode 100644 doc/Mainpage.dox diff --git a/README.md b/README.md index af3708f1..66b7a785 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# Libical +# Libical — an implementation of iCalendar protocols and data formats {#mainpage} [![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 +## About Libical — an implementation of iCalendar protocols and data formats @@ -31,8 +31,8 @@ plus the iCalendar iMIP protocol in [RFC6047][]. [RFC9074]: https://tools.ietf.org/html/rfc9074 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 , to indicate that the library user +Until it is considered stable, there should be defined `LIBICAL_GLIB_UNSTABLE_API=1` +before including ``, to indicate that the library user is aware of it and is prepared to change the calls anytime. ## License @@ -56,12 +56,15 @@ 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) +Documentation is hosted at . + +For a conceptual overview of the library, see [UsingLibical.md](@ref UsingLibical). +There is other rudimentary, unfinished documentation in the `doc/` directory of +the source distribution, 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) +which is available at the apidocs site. ## Acknowledgments @@ -86,10 +89,10 @@ In no particular order: * [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... +* 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 diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index e126e1ed..699913f0 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -18,7 +18,7 @@ set_package_properties(Doxygen PROPERTIES PURPOSE "Needed to build the API documentation." ) if(DOXYGEN_FOUND) - file(GLOB _dox_deps *.dox *.html *.md) + file(GLOB _dox_deps *.dox *.html *.md ${CMAKE_SOURCE_DIR}/README.md) file(GLOB _all_hdrs ${CMAKE_SOURCE_DIR}/src/libical/*.h ${CMAKE_SOURCE_DIR}/src/libical/*.c diff --git a/doc/Mainpage.dox b/doc/Mainpage.dox deleted file mode 100644 index 28b43b76..00000000 --- a/doc/Mainpage.dox +++ /dev/null @@ -1,40 +0,0 @@ -/*! -@mainpage Libical - an implementation of iCalendar protocols and data formats - -@section about About - -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, RFC9073, RFC9074; -plus the iCalendar iMIP protocol in RFC6047. - -For a conceptual overview of the library, see -[Using Libical](@ref UsingLibical). - -@section license 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 the license. - -Alternately, you may use libical under the terms of the GNU Library -General Public License (LGPL) v2.1. See https://www.gnu.org/licenses/lgpl-2.1.txt -for a copy of the 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. - -@section acknowledgements 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 for details. - -*/ -- cgit v1.2.1 From 2bf3ccf864921067aa35c3754b28edd5bf55c36b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 27 Apr 2022 08:58:30 -0400 Subject: appveyor.yml - remove /usr/local/include/X11 on Mac see https://github.com/appveyor/ci/issues/3786 should be fixed by appveyor at some point --- appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/appveyor.yml b/appveyor.yml index 5fe3bb92..b8ede61d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -43,7 +43,7 @@ configuration: - Debug install: - - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi + - sh: if [ "`uname -s`" = "Darwin" ]; then export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig; export XML_CATALOG_FILES=/usr/local/etc/xml/catalog; rm -f /usr/local/include/X11; brew install pkg-config ninja gtk-doc glib libxml2 icu4c berkeley-db gobject-introspection vala; else sudo apt-get -y install gtk-doc-tools xml-core libdb-dev gobject-introspection libgirepository1.0-dev valac; fi before_build: - cmd: call scripts\set_compiler_env.bat -- cgit v1.2.1 From 9ee5a18d9a1b64740a2ac93ab4a5840810487641 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 27 Apr 2022 09:00:02 -0400 Subject: .pre-commit-config.yaml - pre-commit configuration --- .pre-commit-config.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..6c956eb6 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,24 @@ +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.2.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-added-large-files + - id: check-case-conflict + - id: check-yaml + - id: check-json +- repo: https://github.com/pre-commit/mirrors-clang-format + rev: v13.0.0 + hooks: + - id: clang-format +- repo: https://github.com/PyCQA/pylint + rev: v2.12.2 + hooks: + - id: pylint +- repo: https://github.com/codespell-project/codespell + rev: v2.1.0 + hooks: + - id: codespell -- cgit v1.2.1 From cc179999936389d528a440f5effe05ad7334e8d5 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Wed, 27 Apr 2022 12:10:19 +0200 Subject: Add missing property parameters into libical-glib These had been available in the libical, but not in the libical-glib. --- ReleaseNotes.txt | 2 +- src/libical-glib/api/i-cal-derived-parameter.xml | 107 +++++++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index dec99624..6f66a838 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -3,7 +3,7 @@ Release Highlights Version 3.0.15 (UNRELEASED): ---------------------------- - * + * Add missing property parameters into libical-glib Version 3.0.14 (05 February 2022): ---------------------------------- diff --git a/src/libical-glib/api/i-cal-derived-parameter.xml b/src/libical-glib/api/i-cal-derived-parameter.xml index 54122a0d..a0799a74 100644 --- a/src/libical-glib/api/i-cal-derived-parameter.xml +++ b/src/libical-glib/api/i-cal-derived-parameter.xml @@ -24,13 +24,17 @@ + + + + @@ -40,6 +44,7 @@ + @@ -78,6 +83,14 @@ + + + + + + + + @@ -98,6 +111,17 @@ + + + + + + + + + + + @@ -116,6 +140,14 @@ + + + + + + + + @@ -345,6 +377,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -390,6 +452,21 @@ + + + + + + + + + + + + + + + @@ -450,6 +527,21 @@ + + + + + + + + + + + + + + + @@ -585,6 +677,21 @@ + + + + + + + + + + + + + + + -- cgit v1.2.1 From e9c1b56aadc077a5316e2009e64863717faf4997 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 28 Apr 2022 17:25:20 -0400 Subject: design-data/properties.csv - remove dupe entry for "NAME" There were 2 NAME properties: * CAP Properties","RFC 4324 Section 2.1.2", NAME - used to add locale-specific descs to components. * Properties for iCalendar","RFC 7986 Section 5", NAME - specifies the name of the calendar. Now we have 1 property that can have either context but uses the same enum value (151). RFCs shouldn't use the same identifier string to describe two different contexts. --- design-data/properties.csv | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/design-data/properties.csv b/design-data/properties.csv index 7217a582..7f019653 100644 --- a/design-data/properties.csv +++ b/design-data/properties.csv @@ -80,7 +80,7 @@ "MAX-COMPONENT-SIZE","44","INTEGER","INTEGER" "MINDATE","49","DATE-TIME","DATE-TIME" "MULTIPART","50","TEXT","TEXT" -"NAME","51","TEXT","TEXT" +"NAME","115","TEXT","TEXT" "OWNER","53","TEXT","TEXT" "PERMISSION","55","TEXT","TEXT" "QUERY","58","QUERY","QUERY" @@ -142,7 +142,7 @@ "TASK-MODE","114","TASKMODE","TASKMODE" "#New Properties for iCalendar","RFC 7986 Section 5", -"NAME","115","TEXT","TEXT" +#"NAME","115","TEXT","TEXT" (conflicts with NAME from rfc4324#section-2.1.2) "REFRESH-INTERVAL","116","DURATION","NO" "SOURCE","117","URI","NO" "COLOR","118","TEXT","TEXT" @@ -156,7 +156,7 @@ "PATCH-DELETE","124","TEXT","TEXT" "PATCH-PARAMETER","125","TEXT","TEXT" -"#Event Publication Extensions Properies","RFC 9073 Section 6", +"#Event Publication Extensions Properties","RFC 9073 Section 6", "LOCATION-TYPE","127","TEXT","TEXT",is_multivalued "PARTICIPANT-TYPE","128","PARTICIPANTTYPE","PARTICIPANTTYPE" "RESOURCE-TYPE","129","RESOURCETYPE","RESOURCETYPE" -- cgit v1.2.1 From b92e1a41c59b4a829736580ddf73ac574344900e Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 28 Apr 2022 17:26:11 -0400 Subject: design-data/value-types.csv - fix enum ICAL_ICAL_PROXIMITY_VALUE ICAL_DATETIMEDATE_VALUE and ICAL_PROXIMITY_VALUE were set to the same value (5036). Now ICAL_DATETIMEDATE_VALUE=5036 and ICAL_PROXIMITY_VALUE=5039 --- design-data/value-types.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/design-data/value-types.csv b/design-data/value-types.csv index baafea1a..af0ac9e5 100644 --- a/design-data/value-types.csv +++ b/design-data/value-types.csv @@ -53,7 +53,7 @@ "TASKMODE","5035","(a)enum icalproperty_taskmode","string","unitary","X=11200;AUTOMATIC-COMPLETION;AUTOMATIC-FAILURE;AUTOMATIC-STATUS;NONE=11299" "#VALARM Extension types","RFC 9074 Section 8.1",,, -"PROXIMITY","5036","(a)enum icalproperty_proximity","string","unitary","X=11300;ARRIVE;DEPART;CONNECT;DISCONNECT;NONE=11399" +"PROXIMITY","5039","(a)enum icalproperty_proximity","string","unitary","X=11300;ARRIVE;DEPART;CONNECT;DISCONNECT;NONE=11399" "#Event Publication Extension types","RFC 9073 Section 6",,, "PARTICIPANTTYPE","5037","(a)enum icalproperty_participanttype","string","unitary","X=11400;ACTIVE;INACTIVE;SPONSOR;CONTACT;BOOKING-CONTACT;EMERGENCY-CONTACT;PUBLICITY-CONTACT;PLANNER-CONTACT;PERFORMER;SPEAKER;NONE=11499" -- cgit v1.2.1 From 43cb2e215a8ed10e03989f19db5457f89fc2412a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 28 Apr 2022 17:31:47 -0400 Subject: design-data/parameters.csv: Fix enum value clashing From: Milan Crha Date: Wed, 27 Apr 2022 12:37:46 +0200 Subject: [PATCH] parameters.csv: Fix enum value clashing Two problems: * EMAIL being defined twice * REASON and REQUIRED use the same value The effect of this patch is that only the ICAL_REASON_PARAMETER value changes from 43 to 47, the ICAL_EMAIL_PARAMETER value stays unchanged. --- design-data/parameters.csv | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/design-data/parameters.csv b/design-data/parameters.csv index 3ff82dfb..32962c00 100644 --- a/design-data/parameters.csv +++ b/design-data/parameters.csv @@ -60,16 +60,15 @@ "FILENAME","42","const char*", "#Task Extension Parameters","draft-apthorp-ical-tasks" -"REASON","43","const char*", +"REASON","47","const char*", "MODIFIED","44","const char*", "SUBSTATE","45","icalparameter_substate",X=21900;OK;ERROR;SUSPENDED;NONE=21999", "#Parameters from New Properties for iCalendar","RFC 7986 Section 6" "DISPLAY","46","icalparameter_display",X=22000;BADGE;GRAPHIC;FULLSIZE;THUMBNAIL;NONE=22099", -"EMAIL","47","const char*", +"EMAIL","50","const char*", "FEATURE","48","icalparameter_feature",X=22100;AUDIO;CHAT;FEED;MODERATOR;PHONE;SCREEN;VIDEO;NONE=22199", "LABEL","49","const char*", -"EMAIL","50","const char*", "#VPATCH Extension Parameters","draft-daboo-icalendar-vpatch" "PATCH-ACTION","51","icalparameter_patchaction",X=22200;CREATE;BYNAME;BYVALUE;BYPARAM;NONE=22299", -- cgit v1.2.1 From 61ecac16f68c7c7c1459e1ebf708edb91c373586 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 28 Apr 2022 17:32:37 -0400 Subject: scripts/readvaluesfile.pl - add some sanity checking errors if: - a Name is used more than once - a kind enum is used more than once --- scripts/readvaluesfile.pl | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/scripts/readvaluesfile.pl b/scripts/readvaluesfile.pl index 460cf7e7..255ceb05 100644 --- a/scripts/readvaluesfile.pl +++ b/scripts/readvaluesfile.pl @@ -18,10 +18,13 @@ sub read_values_file my $path = shift; my %h; + my @SEEN_ENUMS; open(F, $path) || die "Can't open values file $path"; + my $line = 0; while () { + $line++; chop; @@ -34,8 +37,16 @@ sub read_values_file @column = split(/,/, $_); my $value_name = $column[0]; - my $enumConst = $column[1]; - + if (exists($h{$value_name})) { + die "Previously defined value=$value_name line $line in $path"; + } + my $enumConst = $column[1]; + if ($enumConst !~ /FIXME/) { + if (grep(/^$enumConst$/, @SEEN)) { + die "Reusing kindEnum=$enumConst line $line in $path"; + } + push(@SEEN, $enumConst); + } my $c_type_str = $column[2]; my $c_autogen = ($c_type_str =~ /\(a\)/); @@ -79,11 +90,13 @@ sub read_properties_file my $path = shift; my %h; + my @SEEN; open(F, $path) || die "Can't open properties file $path"; + my $line = 0; while () { - + $line++; chop; s/#.*$//g; @@ -95,8 +108,16 @@ sub read_properties_file @column = split(/,/, $_); my $property_name = $column[0]; - - my $enumConst = $column[1]; + if ($property_name && exists($h{$property_name})) { + die "Previously defined property=$property_name line $line in $path"; + } + my $enumConst = $column[1]; + if ($enumConst !~ /FIXME/) { + if (grep(/^$enumConst$/, @SEEN)) { + die "Reusing kindEnum=$enumConst line $line in $path"; + } + push(@SEEN, $enumConst); + } my $lic_value = $column[2]; my $default_value = $column[3]; my $flags = $column[4]; @@ -124,10 +145,13 @@ sub read_parameters_file my $path = shift; my %h; + my @SEEN; open(F, $path) || die "Can't open parameters file $path"; + my $line = 0; while () { + $line++; chop; @@ -140,8 +164,16 @@ sub read_parameters_file @column = split(/\,/, $_); my $parameter_name = $column[0]; - - my $enumConst = $column[1]; + if (exists($h{$parameter_name})) { + die "Previously defined parameter=$parameter_name line $line in $path"; + } + my $enumConst = $column[1]; + if ($enumConst !~ /FIXME/) { + if (grep(/^$enumConst$/, @SEEN)) { + die "Reusing kindEnum=$enumConst line $line in $path"; + } + push(@SEEN, $enumConst); + } my $data_type = $column[2]; my $enum_string = $column[3]; -- cgit v1.2.1 From 11ca9164090e1bbb9c520a9a3eabbaa713dc46ea Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 1 Jun 2022 17:08:58 -0400 Subject: Create codeql.yml --- codeql.yml | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 codeql.yml diff --git a/codeql.yml b/codeql.yml new file mode 100644 index 00000000..49b78ca6 --- /dev/null +++ b/codeql.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ 3.0 ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ 3.0 ] + schedule: + - cron: '32 22 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'cpp', 'java', 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 -- cgit v1.2.1 From dd14cc2e6f9df83f2e1390b89dbf6a1a75afe0ca Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 1 Jun 2022 17:11:07 -0400 Subject: Create codacy.yml --- .github/workflows/codacy.yml | 60 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 .github/workflows/codacy.yml diff --git a/.github/workflows/codacy.yml b/.github/workflows/codacy.yml new file mode 100644 index 00000000..d2000770 --- /dev/null +++ b/.github/workflows/codacy.yml @@ -0,0 +1,60 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# This workflow checks out code, performs a Codacy security scan +# and integrates the results with the +# GitHub Advanced Security code scanning feature. For more information on +# the Codacy security scan action usage and parameters, see +# https://github.com/codacy/codacy-analysis-cli-action. +# For more information on Codacy Analysis CLI in general, see +# https://github.com/codacy/codacy-analysis-cli. + +name: Codacy Security Scan + +on: + push: + branches: [ 3.0 ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ 3.0 ] + schedule: + - cron: '18 8 * * 4' + +permissions: + contents: read + +jobs: + codacy-security-scan: + permissions: + contents: read # for actions/checkout to fetch code + security-events: write # for github/codeql-action/upload-sarif to upload SARIF results + name: Codacy Security Scan + runs-on: ubuntu-latest + steps: + # Checkout the repository to the GitHub Actions runner + - name: Checkout code + uses: actions/checkout@v3 + + # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis + - name: Run Codacy Analysis CLI + uses: codacy/codacy-analysis-cli-action@d840f886c4bd4edc059706d09c6a1586111c540b + with: + # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository + # You can also omit the token and run the tools that support default configurations + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + verbose: true + output: results.sarif + format: sarif + # Adjust severity of non-security issues + gh-code-scanning-compat: true + # Force 0 exit code to allow SARIF file generation + # This will handover control about PR rejection to the GitHub side + max-allowed-issues: 2147483647 + + # Upload the SARIF file generated in the previous step + - name: Upload SARIF results file + uses: github/codeql-action/upload-sarif@v2 + with: + sarif_file: results.sarif -- cgit v1.2.1 From ab8c10c88b987e756e746b63f1a7b29668a338bd Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 1 Jun 2022 17:30:35 -0400 Subject: pre-commit-config.yaml - add cmake-lint hook --- .pre-commit-config.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6c956eb6..e41c34c1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,3 +22,9 @@ repos: rev: v2.1.0 hooks: - id: codespell +repos: + - repo: https://github.com/cheshirekow/cmake-format-precommit + rev: v0.6.13 + hooks: + - id: cmake-lint + exclude: cmake/Toolchain-* -- cgit v1.2.1 From acf22732a262139e1710330bb102bb7fe54c3fe1 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 1 Jun 2022 17:31:03 -0400 Subject: CMake files - cmake-linting --- .cmake-format.py | 241 +++++++++++++++++++++++++ .krazy | 1 + CMakeLists.txt | 88 +++++++-- cmake/modules/FindGObjectIntrospection.cmake | 3 +- cmake/modules/GObjectIntrospectionMacros.cmake | 58 +++--- cmake/modules/GtkDoc.cmake | 38 +++- cmake/modules/LibIcalMacrosInternal.cmake | 9 + cmake/run_test.cmake | 6 +- doc/CMakeLists.txt | 2 + src/test/CMakeLists.txt | 13 +- 10 files changed, 401 insertions(+), 58 deletions(-) create mode 100644 .cmake-format.py diff --git a/.cmake-format.py b/.cmake-format.py new file mode 100644 index 00000000..b78b7969 --- /dev/null +++ b/.cmake-format.py @@ -0,0 +1,241 @@ +# ---------------------------------- +# Options affecting listfile parsing +# ---------------------------------- +with section("parse"): + + # Specify structure for custom cmake functions + additional_commands = { 'foo': { 'flags': ['BAR', 'BAZ'], + 'kwargs': {'DEPENDS': '*', 'HEADERS': '*', 'SOURCES': '*'}}} + + # Override configurations per-command where available + override_spec = {} + + # Specify variable tags. + vartags = [] + + # Specify property tags. + proptags = [] + +# ----------------------------- +# Options affecting formatting. +# ----------------------------- +with section("format"): + + # Disable formatting entirely, making cmake-format a no-op + disable = False + + # How wide to allow formatted cmake files + line_width = 120 + + # How many spaces to tab for indent + tab_size = 2 + + # If true, lines are indented using tab characters (utf-8 0x09) instead of + # space characters (utf-8 0x20). In cases where the layout would + # require a fractional tab character, the behavior of the fractional + # indentation is governed by + use_tabchars = False + + # If is True, then the value of this variable indicates how + # fractional indentions are handled during whitespace replacement. If set to + # 'use-space', fractional indentation is left as spaces (utf-8 0x20). If set + # to `round-up` fractional indentation is replaced with a single tab character + # (utf-8 0x09) effectively shifting the column to the next tabstop + fractional_tab_policy = 'use-space' + + # If an argument group contains more than this many sub-groups (parg or kwarg + # groups) then force it to a vertical layout. + max_subgroups_hwrap = 2 + + # If a positional argument group contains more than this many arguments, then + # force it to a vertical layout. + max_pargs_hwrap = 6 + + # If a cmdline positional group consumes more than this many lines without + # nesting, then invalidate the layout (and nest) + max_rows_cmdline = 2 + + # If true, separate flow control names from their parentheses with a space + separate_ctrl_name_with_space = False + + # If true, separate function names from parentheses with a space + separate_fn_name_with_space = False + + # If a statement is wrapped to more than one line, than dangle the closing + # parenthesis on its own line. + dangle_parens = False + + # If the trailing parenthesis must be 'dangled' on its on line, then align it + # to this reference: `prefix`: the start of the statement, `prefix-indent`: + # the start of the statement, plus one indentation level, `child`: align to + # the column of the arguments + dangle_align = 'prefix' + + # If the statement spelling length (including space and parenthesis) is + # smaller than this amount, then force reject nested layouts. + min_prefix_chars = 4 + + # If the statement spelling length (including space and parenthesis) is larger + # than the tab width by more than this amount, then force reject un-nested + # layouts. + max_prefix_chars = 10 + + # If a candidate layout is wrapped horizontally but it exceeds this many + # lines, then reject the layout. + max_lines_hwrap = 2 + + # What style line endings to use in the output. + line_ending = 'unix' + + # Format command names consistently as 'lower' or 'upper' case + command_case = 'lower' + + # Format keywords consistently as 'lower' or 'upper' case + keyword_case = 'upper' + + # A list of command names which should always be wrapped + always_wrap = [] + + # If true, the argument lists which are known to be sortable will be sorted + # lexicographicall + enable_sort = True + + # If true, the parsers may infer whether or not an argument list is sortable + # (without annotation). + autosort = False + + # By default, if cmake-format cannot successfully fit everything into the + # desired linewidth it will apply the last, most agressive attempt that it + # made. If this flag is True, however, cmake-format will print error, exit + # with non-zero status code, and write-out nothing + require_valid_layout = False + + # A dictionary mapping layout nodes to a list of wrap decisions. See the + # documentation for more information. + layout_passes = {} + +# ------------------------------------------------ +# Options affecting comment reflow and formatting. +# ------------------------------------------------ +with section("markup"): + + # What character to use for bulleted lists + bullet_char = '*' + + # What character to use as punctuation after numerals in an enumerated list + enum_char = '.' + + # If comment markup is enabled, don't reflow the first comment block in each + # listfile. Use this to preserve formatting of your copyright/license + # statements. + first_comment_is_literal = False + + # If comment markup is enabled, don't reflow any comment block which matches + # this (regex) pattern. Default is `None` (disabled). + literal_comment_pattern = None + + # Regular expression to match preformat fences in comments default= + # ``r'^\s*([`~]{3}[`~]*)(.*)$'`` + fence_pattern = '^\\s*([`~]{3}[`~]*)(.*)$' + + # Regular expression to match rulers in comments default= + # ``r'^\s*[^\w\s]{3}.*[^\w\s]{3}$'`` + ruler_pattern = '^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$' + + # If a comment line matches starts with this pattern then it is explicitly a + # trailing comment for the preceeding argument. Default is '#<' + explicit_trailing_pattern = '#<' + + # If a comment line starts with at least this many consecutive hash + # characters, then don't lstrip() them off. This allows for lazy hash rulers + # where the first hash char is not separated by space + hashruler_min_length = 10 + + # If true, then insert a space between the first hash char and remaining hash + # chars in a hash ruler, and normalize its length to fill the column + canonicalize_hashrulers = True + + # enable comment markup parsing and reflow + enable_markup = True + +# ---------------------------- +# Options affecting the linter +# ---------------------------- +with section("lint"): + + # a list of lint codes to disable + disabled_codes = [] + + # regular expression pattern describing valid function names + function_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid macro names + macro_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid names for variables with global + # (cache) scope + global_var_pattern = '[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with global + # scope (but internal semantic) + internal_var_pattern = '[A-Z][0-9A-Z_]+' + + # regular expression pattern describing valid names for variables with local + # scope + local_var_pattern = '[a-z][a-z0-9_]+' + + # regular expression pattern describing valid names for privatedirectory + # variables + private_var_pattern = '[0-9a-z_]+' + + # regular expression pattern describing valid names for public directory + # variables + public_var_pattern = '.*' + + # regular expression pattern describing valid names for function/macro + # arguments and loop variables. + argument_var_pattern = '[a-z_][a-z0-9_]+' + + # regular expression pattern describing valid names for keywords used in + # functions or macros + keyword_pattern = '[A-Z][0-9A-Z_]+' + + # In the heuristic for C0201, how many conditionals to match within a loop in + # before considering the loop a parser. + max_conditionals_custom_parser = 2 + + # Require at least this many newlines between statements + min_statement_spacing = 1 + + # Require no more than this many newlines between statements + max_statement_spacing = 2 + max_returns = 6 + max_branches = 15 + max_arguments = 10 + max_localvars = 15 + max_statements = 50 + +# ------------------------------- +# Options affecting file encoding +# ------------------------------- +with section("encode"): + + # If true, emit the unicode byte-order mark (BOM) at the start of the file + emit_byteorder_mark = False + + # Specify the encoding of the input file. Defaults to utf-8 + input_encoding = 'utf-8' + + # Specify the encoding of the output file. Defaults to utf-8. Note that cmake + # only claims to support utf-8 so be careful when using anything else + output_encoding = 'utf-8' + +# ------------------------------------- +# Miscellaneous configurations options. +# ------------------------------------- +with section("misc"): + + # A dictionary containing any per-command configuration overrides. Currently + # only `command_case` is supported. + per_command = {} + diff --git a/.krazy b/.krazy index 1675131f..ae81b742 100644 --- a/.krazy +++ b/.krazy @@ -17,6 +17,7 @@ SKIP /examples/ SKIP /java/ #For now skip python SKIP /python/ +SKIP \.cmake-format\.py #For now skip perl SKIP /Net-ICal-Libical/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d54c5d0..f8929603 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,7 +128,10 @@ if(MSVC) endif() endif() if(BAD_C_MESSAGE) - message(FATAL_ERROR "\nSorry, ${BAD_C_MESSAGE} is required to build this software. Please retry using a modern C compiler that supports the C99 standard.") + message(FATAL_ERROR + "\nSorry, ${BAD_C_MESSAGE} is required to build this software. " + "Please retry using a modern C compiler that supports the C99 standard." + ) endif() # Enable the test harness @@ -182,7 +185,10 @@ if(STATIC_ONLY) set(LIBRARY_TYPE STATIC) endif() -libical_option(SHARED_ONLY "Build shared (dynamic) libraries only. Takes precedence over STATIC_ONLY." False) +libical_option(SHARED_ONLY + "Build shared (dynamic) libraries only. Takes precedence over STATIC_ONLY." + False +) if(SHARED_ONLY) set(STATIC_ONLY False) set(LIBRARY_TYPE SHARED) @@ -263,7 +269,7 @@ if(ICU_FOUND) message(FATAL_ERROR "Unable to locate the ICU runtime path. Is your ICU installation broken?") endif() - set(ICU_BINARY_DIR ${ICU_EXEC} CACHE STRING DOC "Runtime binaries directory for the ICU library") + set(ICU_BINARY_DIR ${ICU_EXEC} CACHE STRING "Runtime binaries directory for the ICU library") endif() # compile in Berkeley DB support @@ -304,7 +310,10 @@ set(CMAKE_C_STANDARD_REQUIRED ON) if(WIN32) if(MSVC) add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -DYY_NO_UNISTD_H) - libical_option(USE_32BIT_TIME_T "Build using a 32bit time_t (ignored unless building with MSVC on Windows)." False) + libical_option(USE_32BIT_TIME_T + "Build using a 32bit time_t (ignored unless building with MSVC on Windows)." + False + ) if(USE_32BIT_TIME_T) add_definitions(-D_USE_32BIT_TIME_T) endif() @@ -334,14 +343,20 @@ else() set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib) endif() -libical_option(ICAL_ERRORS_ARE_FATAL "icalerror_* calls will abort instead of internally signaling an error." False) +libical_option(ICAL_ERRORS_ARE_FATAL + "icalerror_* calls will abort instead of internally signaling an error." + False +) if(ICAL_ERRORS_ARE_FATAL) set(ICAL_ERRORS_ARE_FATAL 1) else() set(ICAL_ERRORS_ARE_FATAL 0) endif() -libical_option(ICAL_ALLOW_EMPTY_PROPERTIES "Prevents empty properties from being replaced with X-LIC-ERROR properties." False) +libical_option(ICAL_ALLOW_EMPTY_PROPERTIES + "Prevents empty properties from being replaced with X-LIC-ERROR properties." + False +) if(ICAL_ALLOW_EMPTY_PROPERTIES) set(ICAL_ALLOW_EMPTY_PROPERTIES 1) else() @@ -353,7 +368,12 @@ if(WIN32 OR WINCE) else() set(DEF_USE_BUILTIN_TZDATA False) endif() -libical_option(USE_BUILTIN_TZDATA "(Careful) Build using libical's built-in timezone data, else use the system timezone data on non-Windows systems. ALWAYS true on Windows. Non-Windows users should know what they're doing if they choose not to use system provided timezone data. The libical project does not guarantee that the built-in timezone data is up-to-date." ${DEF_USE_BUILTIN_TZDATA}) +libical_option(USE_BUILTIN_TZDATA + "(Careful) Build using libical's built-in timezone data, else use the system timezone data on non-Windows systems. " + "ALWAYS true on Windows. Non-Windows users should know what they're doing if they choose not to use system provided " + "timezone data. The libical project does not guarantee that the built-in timezone data is up-to-date." + ${DEF_USE_BUILTIN_TZDATA} +) mark_as_advanced(USE_BUILTIN_TZDATA) if(USE_BUILTIN_TZDATA) set(USE_BUILTIN_TZDATA 1) @@ -386,7 +406,11 @@ set(INSTALL_TARGETS_DEFAULT_ARGS find_package(PkgConfig QUIET) set(MIN_GOBJECT_INTROSPECTION "0.6.7") -libical_option(GOBJECT_INTROSPECTION "Build GObject introspection \"typelib\" files. Requires GObject Introspection development package ${MIN_GOBJECT_INTROSPECTION} or higher." False) +libical_option(GOBJECT_INTROSPECTION + "Build GObject introspection \"typelib\" files. " + "Requires GObject Introspection development package ${MIN_GOBJECT_INTROSPECTION} or higher." + False +) if(GOBJECT_INTROSPECTION) if(NOT PKG_CONFIG_FOUND) message(FATAL_ERROR @@ -452,7 +476,11 @@ endif() set(MIN_GLIB "2.44") set(MIN_LIBXML "2.7.3") -libical_option(ICAL_GLIB "Build libical-glib interface. Requires glib ${MIN_GLIB} and libxml ${MIN_LIBXML} development packages or higher." True) +libical_option(ICAL_GLIB + "Build libical-glib interface. " + "Requires glib ${MIN_GLIB} and libxml ${MIN_LIBXML} development packages or higher." + True +) if(ICAL_GLIB) if(NOT PKG_CONFIG_FOUND) message(FATAL_ERROR @@ -507,7 +535,11 @@ if(DEFINED CMAKE_C_COMPILER_ID) endif() endif() if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -Wno-deprecated -Wall -Wno-unknown-pragmas -Wextra -Winit-self -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type") + set(CMAKE_C_FLAGS + "${CMAKE_C_FLAGS} -fvisibility=hidden " + "-Wno-deprecated -Wall -Wno-unknown-pragmas -Wextra -Winit-self -Wunused -Wno-div-by-zero " + "-Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type" + ) libical_add_cflag(-Wunused-but-set-variable UNUSED_BUT_SET) libical_add_cflag(-Wlogical-op LOGICAL_OP) libical_add_cflag(-Wsizeof-pointer-memaccess POINTER_MEMACCESS) @@ -531,7 +563,11 @@ if(DEFINED CMAKE_CXX_COMPILER_ID) endif() endif() if(CMAKE_CXX_COMPILER_IS_GCC OR CMAKE_CXX_COMPILER_IS_CLANG) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -Weffc++ -Wno-deprecated -Wall -Wextra -Woverloaded-virtual -Winit-self -Wunused -Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type") + set(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -fvisibility=hidden " + "-Weffc++ -Wno-deprecated -Wall -Wextra -Woverloaded-virtual -Winit-self -Wunused " + "-Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type" + ) libical_add_cxxflag(-Wunused-but-set-variable UNUSED_BUT_SET) libical_add_cxxflag(-Wlogical-op LOGICAL_OP) libical_add_cxxflag(-Wsizeof-pointer-memaccess POINTER_MEMACCESS) @@ -552,7 +588,11 @@ if(SIZEOF_TIME_T EQUAL 4) endif() ################ Developer Options ##################### -libical_deprecated_option(ABI_DUMPER LIBICAL_DEVMODE_ABI_DUMPER "(Developer-only) Build for abi-dumper." False) +libical_deprecated_option(ABI_DUMPER + LIBICAL_DEVMODE_ABI_DUMPER + "(Developer-only) Build for abi-dumper." + False +) mark_as_advanced(LIBICAL_DEVMODE_ABI_DUMPER) if(LIBICAL_DEVMODE_ABI_DUMPER) if(CMAKE_C_COMPILER_IS_GCC) @@ -564,14 +604,21 @@ if(LIBICAL_DEVMODE_ABI_DUMPER) endif() endif() -libical_option(LIBICAL_DEVMODE_MEMORY_CONSISTENCY "(Developer-only) Build with memory consistency functions." False) +libical_option(LIBICAL_DEVMODE_MEMORY_CONSISTENCY + "(Developer-only) Build with memory consistency functions." + False +) if(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) set(CMAKE_BUILD_TYPE "Debug") add_definitions(-DMEMORY_CONSISTENCY) endif() mark_as_advanced(LIBICAL_DEVMODE_MEMORY_CONSISTENCY) -libical_deprecated_option(ADDRESS_SANITIZER LIBICAL_DEVMODE_ADDRESS_SANITIZER "(Developer-only) Build with the address sanitizer." False) +libical_deprecated_option(ADDRESS_SANITIZER + LIBICAL_DEVMODE_ADDRESS_SANITIZER + "(Developer-only) Build with the address sanitizer." + False +) mark_as_advanced(LIBICAL_DEVMODE_ADDRESS_SANITIZER) if(LIBICAL_DEVMODE_ADDRESS_SANITIZER) if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) @@ -597,7 +644,11 @@ if(LIBICAL_DEVMODE_ADDRESS_SANITIZER) endif() endif() -libical_deprecated_option(THREAD_SANITIZER LIBICAL_DEVMODE_THREAD_SANITIZER "(Developer-only) Build with the thread sanitizer." False) +libical_deprecated_option(THREAD_SANITIZER + LIBICAL_DEVMODE_THREAD_SANITIZER + "(Developer-only) Build with the thread sanitizer." + False +) mark_as_advanced(LIBICAL_DEVMODE_THREAD_SANITIZER) if(LIBICAL_DEVMODE_THREAD_SANITIZER) if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) @@ -623,7 +674,11 @@ if(LIBICAL_DEVMODE_THREAD_SANITIZER) endif() endif() -libical_deprecated_option(UNDEFINED_SANITIZER LIBICAL_DEVMODE_UNDEFINED_SANITIZER "(Developer-only) Build with the undefined sanitizer." False) +libical_deprecated_option(UNDEFINED_SANITIZER + LIBICAL_DEVMODE_UNDEFINED_SANITIZER + "(Developer-only) Build with the undefined sanitizer." + False +) mark_as_advanced(LIBICAL_DEVMODE_UNDEFINED_SANITIZER) if(LIBICAL_DEVMODE_UNDEFINED_SANITIZER) if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) @@ -768,6 +823,7 @@ if(NOT TARGET uninstall) add_custom_target(uninstall COMMAND "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" + COMMENT "Target for uninstalling everything" ) endif() diff --git a/cmake/modules/FindGObjectIntrospection.cmake b/cmake/modules/FindGObjectIntrospection.cmake index 02841f4f..07098b82 100644 --- a/cmake/modules/FindGObjectIntrospection.cmake +++ b/cmake/modules/FindGObjectIntrospection.cmake @@ -16,6 +16,7 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# Get gobject-introspection's specified pkg-config variable macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) execute_process( COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=${_varname} gobject-introspection-1.0 @@ -27,7 +28,7 @@ macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) else() string(REGEX REPLACE "[\r\n]" " " _result "${_result}") string(REGEX REPLACE " +$" "" _result "${_result}") - separate_arguments(_result) + separate_arguments(_result UNIX_COMMAND ${_result}) set(${_outvar} ${_result} CACHE INTERNAL "") endif() endmacro(_GIR_GET_PKGCONFIG_VAR) diff --git a/cmake/modules/GObjectIntrospectionMacros.cmake b/cmake/modules/GObjectIntrospectionMacros.cmake index d8b37f29..69b7e78f 100644 --- a/cmake/modules/GObjectIntrospectionMacros.cmake +++ b/cmake/modules/GObjectIntrospectionMacros.cmake @@ -3,6 +3,7 @@ # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# Generate list from another list, but with each item prepended with a prefix macro(_gir_list_prefix _outvar _listvar _prefix) set(${_outvar}) foreach(_item IN LISTS ${_listvar}) @@ -10,13 +11,12 @@ macro(_gir_list_prefix _outvar _listvar _prefix) endforeach() endmacro(_gir_list_prefix) +# cmake-lint: disable=R0915 macro(gir_add_introspections introspections_girs) - set(_gir_girs) set(_gir_typelibs) foreach(gir IN LISTS ${introspections_girs}) - set(_gir_name "${gir}") ## Transform the gir filename to something which can reference through a variable @@ -65,7 +65,6 @@ macro(gir_add_introspections introspections_girs) message(ERROR "Unspecified or empty ${_gir_name}_FILES variable") endif() - # Variables which provides a list of things _gir_list_prefix(_gir_libraries ${_gir_name}_LIBS "--library=") _gir_list_prefix(_gir_packages ${_gir_name}_PACKAGES "--pkg=") @@ -75,45 +74,54 @@ macro(gir_add_introspections introspections_girs) set(_gir_libtool "--no-libtool") add_custom_command( - COMMAND ${GObjectIntrospection_SCANNER} - ${GObjectIntrospection_SCANNER_ARGS} - --namespace=${_gir_namespace} - --nsversion=${_gir_version} - ${_gir_libtool} - ${_gir_program} - ${_gir_libraries} - ${_gir_packages} - ${_gir_includes} - ${_gir_scannerflags} - ${${_gir_name}_CFLAGS} - ${_gir_files} - --output ${CMAKE_CURRENT_BINARY_DIR}/${gir} - --accept-unprefixed - DEPENDS ${_gir_files} - ${${_gir_name}_LIBS} OUTPUT ${gir} + COMMAND ${GObjectIntrospection_SCANNER} + ${GObjectIntrospection_SCANNER_ARGS} + --namespace=${_gir_namespace} + --nsversion=${_gir_version} + ${_gir_libtool} + ${_gir_program} + ${_gir_libraries} + ${_gir_packages} + ${_gir_includes} + ${_gir_scannerflags} + ${${_gir_name}_CFLAGS} + ${_gir_files} + --output ${CMAKE_CURRENT_BINARY_DIR}/${gir} + --accept-unprefixed + DEPENDS ${_gir_files} ${${_gir_name}_LIBS} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} VERBATIM + COMMENT "Run the gobject introspection scanner" ) list(APPEND _gir_girs ${CMAKE_CURRENT_BINARY_DIR}/${gir}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${gir} DESTINATION ${SHARE_INSTALL_DIR}/gir-1.0) string(REPLACE ".gir" ".typelib" _typelib "${gir}") add_custom_command( + OUTPUT ${_typelib} COMMAND ${GObjectIntrospection_COMPILER} - --includedir=. - ${CMAKE_CURRENT_BINARY_DIR}/${gir} - -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} + --includedir=. + ${CMAKE_CURRENT_BINARY_DIR}/${gir} + -o ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${gir} - OUTPUT ${_typelib} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Run the gobject introspection compiler" ) list(APPEND _gir_typelibs ${CMAKE_CURRENT_BINARY_DIR}/${_typelib}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_typelib} DESTINATION ${LIB_INSTALL_DIR}/girepository-1.0) endforeach() - add_custom_target(gir-girs-${_gir_name} ALL DEPENDS ${_gir_girs}) - add_custom_target(gir-typelibs-${_gir_name} ALL DEPENDS ${_gir_typelibs}) + add_custom_target(gir-girs-${_gir_name} + ALL + DEPENDS ${_gir_girs} + COMMENT "Target for the gobject introspection compiler" + ) + add_custom_target(gir-typelibs-${_gir_name} + ALL + DEPENDS ${_gir_typelibs} + COMMENT "Target for the gobject introspection typelibs" + ) endmacro(gir_add_introspections) diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake index d32d4b18..4234cbb0 100644 --- a/cmake/modules/GtkDoc.cmake +++ b/cmake/modules/GtkDoc.cmake @@ -30,13 +30,14 @@ if(NOT (GTKDOC_SCAN AND GTKDOC_MKDB AND GTKDOC_MKHTML AND GTKDOC_FIXXREF)) endif() if(NOT TARGET gtkdocs) - add_custom_target(gtkdocs ALL) + add_custom_target(gtkdocs ALL COMMENT "Target to run gtkdoc for all modules") endif() if(NOT TARGET gtkdoc-rebuild-sgmls) - add_custom_target(gtkdoc-rebuild-sgmls) + add_custom_target(gtkdoc-rebuild-sgmls COMMENT "Target to rebuild sgml for all modules") endif() +# cmake-lint: disable=R0912,R0915 macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ignoreheadersvar) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in @@ -55,7 +56,10 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign if(APPLE) if(NOT DEFINED ENV{XML_CATALOG_FILES}) - message(FATAL_ERROR "On OSX, please run \'export XML_CATALOG_FILES=/usr/local/etc/xml/catalog\' first; else the gtk entities cannot be located.") + message(FATAL_ERROR + "On OSX, please run \'export XML_CATALOG_FILES=/usr/local/etc/xml/catalog\' first; " + "else the gtk entities cannot be located." + ) endif() endif() @@ -69,7 +73,9 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign if(TARGET ${opt}) set(_target_type) get_target_property(_target_type ${opt} TYPE) - if((_target_type STREQUAL "STATIC_LIBRARY") OR (_target_type STREQUAL "SHARED_LIBRARY") OR (_target_type STREQUAL "MODULE_LIBRARY")) + if((_target_type STREQUAL "STATIC_LIBRARY") OR + (_target_type STREQUAL "SHARED_LIBRARY") OR + (_target_type STREQUAL "MODULE_LIBRARY")) set(_compile_options) set(_link_libraries) @@ -107,7 +113,9 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign if(TARGET ${opt}) set(_target_type) get_target_property(_target_type ${opt} TYPE) - if((_target_type STREQUAL "STATIC_LIBRARY") OR (_target_type STREQUAL "SHARED_LIBRARY") OR (_target_type STREQUAL "MODULE_LIBRARY")) + if((_target_type STREQUAL "STATIC_LIBRARY") OR + (_target_type STREQUAL "SHARED_LIBRARY") OR + (_target_type STREQUAL "MODULE_LIBRARY")) set(_output_name "") get_target_property(_output_name ${opt} OUTPUT_NAME) if(NOT _output_name) @@ -181,7 +189,11 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/html" - COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/html" ${GTKDOC_MKHTML} --path=.. ${_module} ../${_module}-docs.sgml + COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/html" + ${GTKDOC_MKHTML} + --path=.. + ${_module} + ../${_module}-docs.sgml COMMAND ${GTKDOC_FIXXREF} --module=${_module} @@ -197,6 +209,7 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign add_custom_target(gtkdoc-${_module} DEPENDS html/index.html + COMMENT "Target for running gtkdoc for module" ) if(${_depsvar}) @@ -226,7 +239,9 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign --rebuild-types ${_srcdirs} - COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}" ${_scangobj_prefix} ${GTKDOC_SCANGOBJ} + COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}" + ${_scangobj_prefix} + ${GTKDOC_SCANGOBJ} --module=${_module} ${_scangobj_cflags} ${_scangobj_ldflags} @@ -240,9 +255,14 @@ macro(add_gtkdoc _module _namespace _deprecated_guards _srcdirsvar _depsvar _ign --output-format=xml ${_srcdirs} - COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/tmp/${_module}-docs.sgml ${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in + COMMAND ${CMAKE_COMMAND} -E rename + ${CMAKE_CURRENT_BINARY_DIR}/tmp/${_module}-docs.sgml + ${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in - COMMAND ${CMAKE_COMMAND} -E echo "File '${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in' overwritten, make sure you replace generated strings with proper content before committing." + COMMAND ${CMAKE_COMMAND} -E echo + "File '${CMAKE_CURRENT_SOURCE_DIR}/${_module}-docs.sgml.in' overwritten, " + "make sure to replace generated strings with proper content before committing." + COMMENT "Target to rebuild the sgml for the specified module" ) add_dependencies(gtkdoc-rebuild-sgmls gtkdoc-rebuild-${_module}-sgml) diff --git a/cmake/modules/LibIcalMacrosInternal.cmake b/cmake/modules/LibIcalMacrosInternal.cmake index ed197a15..bc527636 100644 --- a/cmake/modules/LibIcalMacrosInternal.cmake +++ b/cmake/modules/LibIcalMacrosInternal.cmake @@ -3,12 +3,14 @@ include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) +# Call option() and then add_feature_info() function(libical_option option description) set(extra_option_arguments ${ARGN}) option(${option} "${description}" ${extra_option_arguments}) add_feature_info("Option ${option}" ${option} "${description}") endfunction() +# Warn about deprecated cmake options then call libical_option function(libical_deprecated_option deprecated_option option description) set(extra_option_arguments ${ARGN}) if(${deprecated_option}) @@ -18,6 +20,7 @@ function(libical_deprecated_option deprecated_option option description) libical_option(${option} "${description}" ${extra_option_arguments}) endfunction() +# If condition is True, append the specified value to each ARGN function(libical_append_if condition value) if(${condition}) foreach(variable ${ARGN}) @@ -26,11 +29,17 @@ function(libical_append_if condition value) endif() endfunction() +# Create a variable C_SUPPORTS_ with a boolean denoting +# if the C compiler supports that flag; if so, append the flag +# to the global CMAKE_C_FLAGS variable. macro(libical_add_cflag flag name) check_c_compiler_flag("${flag}" "C_SUPPORTS_${name}") libical_append_if("C_SUPPORTS_${name}" "${flag}" CMAKE_C_FLAGS) endmacro() +# Create a variable CXX_SUPPORTS_ with a boolean denoting +# if the C++ compiler supports that flag; if so, append the flag +# to the global CMAKE_CXX_FLAGS variable. macro(libical_add_cxxflag flag name) check_cxx_compiler_flag("${flag}" "CXX_SUPPORTS_${name}") libical_append_if("CXX_SUPPORTS_${name}" "${flag}" CMAKE_CXX_FLAGS) diff --git a/cmake/run_test.cmake b/cmake/run_test.cmake index db6c5c4d..157ae44d 100644 --- a/cmake/run_test.cmake +++ b/cmake/run_test.cmake @@ -16,7 +16,7 @@ if(NOT output_test) endif() # convert the space-separated string to a list -separate_arguments(test_args) +separate_arguments(test_args UNIX_COMMAND ${test_args}) execute_process( COMMAND ${test_cmd} ${test_args} @@ -40,5 +40,7 @@ execute_process( ) if(test_not_successful) - message(SEND_ERROR "Output does not match for ${output_blessed} and ${output_test}: ${err} : shell output: ${test_not_successful}!") + message(SEND_ERROR + "Output does not match for ${output_blessed} and ${output_test}: ${err} : shell output: ${test_not_successful}!" + ) endif() diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index e126e1ed..68b42cac 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -52,9 +52,11 @@ if(DOXYGEN_FOUND) COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile DEPENDS ${_all_hdrs} ${_dox_deps} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.cmake WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMENT "Run Doxygen" ) add_custom_target(docs DEPENDS ${CMAKE_BINARY_DIR}/apidocs/html/index.html + COMMENT "Target to build the documentation" ) add_dependencies(docs ical icalss icalvcal) if(WITH_CXX_BINDINGS) diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 8bba8747..77b85a9a 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -20,6 +20,7 @@ set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}) set(TEST_DATADIR "\"${CMAKE_SOURCE_DIR}/test-data\"") add_definitions(-DTEST_DATADIR=${TEST_DATADIR} -DTEST_ZONEDIR="${CMAKE_SOURCE_DIR}/zoneinfo") +# Set properties for the test macro(setprops _name) if(UNIX) set_tests_properties(${_name} PROPERTIES @@ -72,6 +73,7 @@ macro(buildme _name _srcs) endif() endmacro() +# Build the test and add the test, making sure the test properties are set macro(testme _name _srcs) buildme(${_name} "${_srcs}") add_test(NAME ${_name} COMMAND ${_name}) @@ -112,10 +114,10 @@ set(parser_SRCS icaltestparser.c) buildme(parser "${parser_SRCS}") file(GLOB TEST_FILES ${CMAKE_SOURCE_DIR}/test-data/*.ics) -foreach(TEST_FILE ${TEST_FILES}) - get_filename_component(TEST_NAME ${TEST_FILE} NAME_WE) - add_test(NAME parser-${TEST_NAME} COMMAND parser ${TEST_FILE}) - setprops(parser-${TEST_NAME}) +foreach(test_file ${TEST_FILES}) + get_filename_component(test_name ${test_file} NAME_WE) + add_test(NAME parser-${test_name} COMMAND parser ${test_file}) + setprops(parser-${test_name}) endforeach() ########### next target ############### @@ -181,7 +183,8 @@ if(NOT ${CMAKE_VERSION} VERSION_LESS 3.14) set(CMAKE_COMPARE_FILES_IGNORE_EOL TRUE) endif() if(NOT WIN32 OR CMAKE_COMPARE_FILES_IGNORE_EOL) - if(NOT CYGWIN AND NOT USE_32BIT_TIME_T) #ignore_eol doesn't work on Cygwin. tests for years greater than 2037 will fail + #ignore_eol doesn't work on Cygwin. testing years greater than 2037 will fail + if(NOT CYGWIN AND NOT USE_32BIT_TIME_T) set(icalrecurtest_SRCS icalrecur_test.c) add_executable(icalrecurtest ${icalrecurtest_SRCS}) target_link_libraries(icalrecurtest ical icalss icalvcal) -- cgit v1.2.1 From 03b1648a3babe2a7cb51bb5cb18c9edc825f7f5a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Wed, 1 Jun 2022 19:17:09 -0400 Subject: CMakeLists.txt - fix line continuations --- CMakeLists.txt | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f8929603..f88bf312 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -369,9 +369,9 @@ else() set(DEF_USE_BUILTIN_TZDATA False) endif() libical_option(USE_BUILTIN_TZDATA - "(Careful) Build using libical's built-in timezone data, else use the system timezone data on non-Windows systems. " - "ALWAYS true on Windows. Non-Windows users should know what they're doing if they choose not to use system provided " - "timezone data. The libical project does not guarantee that the built-in timezone data is up-to-date." + "(Careful) Build using libical's built-in timezone data, else use the system timezone data on non-Windows systems. \ + ALWAYS true on Windows. Non-Windows users should know what they're doing if they choose not to use system provided \ + timezone data. The libical project does not guarantee that the built-in timezone data is up-to-date." ${DEF_USE_BUILTIN_TZDATA} ) mark_as_advanced(USE_BUILTIN_TZDATA) @@ -407,8 +407,8 @@ find_package(PkgConfig QUIET) set(MIN_GOBJECT_INTROSPECTION "0.6.7") libical_option(GOBJECT_INTROSPECTION - "Build GObject introspection \"typelib\" files. " - "Requires GObject Introspection development package ${MIN_GOBJECT_INTROSPECTION} or higher." + "Build GObject introspection \"typelib\" files. \ + Requires GObject Introspection development package ${MIN_GOBJECT_INTROSPECTION} or higher." False ) if(GOBJECT_INTROSPECTION) @@ -477,8 +477,8 @@ endif() set(MIN_GLIB "2.44") set(MIN_LIBXML "2.7.3") libical_option(ICAL_GLIB - "Build libical-glib interface. " - "Requires glib ${MIN_GLIB} and libxml ${MIN_LIBXML} development packages or higher." + "Build libical-glib interface. \ + Requires glib ${MIN_GLIB} and libxml ${MIN_LIBXML} development packages or higher." True ) if(ICAL_GLIB) @@ -536,9 +536,9 @@ if(DEFINED CMAKE_C_COMPILER_ID) endif() if(CMAKE_C_COMPILER_IS_GCC OR CMAKE_C_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS - "${CMAKE_C_FLAGS} -fvisibility=hidden " - "-Wno-deprecated -Wall -Wno-unknown-pragmas -Wextra -Winit-self -Wunused -Wno-div-by-zero " - "-Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type" + "${CMAKE_C_FLAGS} -fvisibility=hidden \ + -Wno-deprecated -Wall -Wno-unknown-pragmas -Wextra -Winit-self -Wunused -Wno-div-by-zero \ + -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type" ) libical_add_cflag(-Wunused-but-set-variable UNUSED_BUT_SET) libical_add_cflag(-Wlogical-op LOGICAL_OP) @@ -564,9 +564,9 @@ if(DEFINED CMAKE_CXX_COMPILER_ID) endif() if(CMAKE_CXX_COMPILER_IS_GCC OR CMAKE_CXX_COMPILER_IS_CLANG) set(CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -fvisibility=hidden " - "-Weffc++ -Wno-deprecated -Wall -Wextra -Woverloaded-virtual -Winit-self -Wunused " - "-Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type" + "${CMAKE_CXX_FLAGS} -fvisibility=hidden \ + -Weffc++ -Wno-deprecated -Wall -Wextra -Woverloaded-virtual -Winit-self -Wunused \ + -Wno-div-by-zero -Wundef -Wpointer-arith -Wtype-limits -Wwrite-strings -Werror=return-type" ) libical_add_cxxflag(-Wunused-but-set-variable UNUSED_BUT_SET) libical_add_cxxflag(-Wlogical-op LOGICAL_OP) -- cgit v1.2.1 From a2ce6419ff642c2bbee9b0e60d3354e16334b255 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 07:34:00 -0400 Subject: codeql.yml - move into .github/workflows --- .github/workflows/codeql.yml | 72 ++++++++++++++++++++++++++++++++++++++++++++ codeql.yml | 72 -------------------------------------------- 2 files changed, 72 insertions(+), 72 deletions(-) create mode 100644 .github/workflows/codeql.yml delete mode 100644 codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..512e8b9e --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ 3.0 ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ 3.0 ] + schedule: + - cron: '32 22 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'cpp', 'java', 'python' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/codeql.yml b/codeql.yml deleted file mode 100644 index 49b78ca6..00000000 --- a/codeql.yml +++ /dev/null @@ -1,72 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ 3.0 ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ 3.0 ] - schedule: - - cron: '32 22 * * 5' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'cpp', 'java', 'python' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 -- cgit v1.2.1 From a70844787b461cddcbc965c6a355eaff3e8bf052 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 07:44:00 -0400 Subject: .pre-commit-config.yaml - disable clang-format since we don't have a .clang-format style yet --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6c956eb6..ddbaf1c1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,10 +10,10 @@ repos: - id: check-case-conflict - id: check-yaml - id: check-json -- repo: https://github.com/pre-commit/mirrors-clang-format - rev: v13.0.0 - hooks: - - id: clang-format +#- repo: https://github.com/pre-commit/mirrors-clang-format +# rev: v13.0.0 +# hooks: +# - id: clang-format - repo: https://github.com/PyCQA/pylint rev: v2.12.2 hooks: -- cgit v1.2.1 From 4b5d892f9ec77985b4a313a4da8d8a0f43537f65 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 07:44:48 -0400 Subject: src/libical/icalvalue.c - fix format-truncation warning --- src/libical/icalvalue.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libical/icalvalue.c b/src/libical/icalvalue.c index 7a3c48e9..55921680 100644 --- a/src/libical/icalvalue.c +++ b/src/libical/icalvalue.c @@ -899,10 +899,13 @@ static char *icalvalue_utcoffset_as_ical_string_r(const icalvalue *value) m = (data - (h * 3600)) / 60; s = (data - (h * 3600) - (m * 60)); + h = MIN(abs(h), 23); + m = MIN(abs(m), 59); + s = MIN(abs(s), 59); if (s != 0) { - snprintf(str, 9, "%c%02d%02d%02d", sign, abs(h), abs(m), abs(s)); + snprintf(str, 9, "%c%02d%02d%02d", sign, h, m, s); } else { - snprintf(str, 9, "%c%02d%02d", sign, abs(h), abs(m)); + snprintf(str, 9, "%c%02d%02d", sign, h, m); } return str; -- cgit v1.2.1 From acc6806c7f3e18392aeae7fb7992312cdc4007ed Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 07:45:35 -0400 Subject: scripts/buildtests.sh - teach cppcheck about MIN() macro --- scripts/buildtests.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index e1eafd41..b670ea09 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -293,6 +293,7 @@ CPPCHECK() { -D size_t="unsigned long" \ -D bswap32="" \ -D PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP=0 \ + -D MIN="" \ -D _unused="(void)" \ -D F_OK=0 \ -D R_OK=0 \ -- cgit v1.2.1 From 38d661c85b5b51219a78bb88cc30800b687609be Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 08:22:19 -0400 Subject: icaltime.c - icaltime_days_in_month - ensure a valid month --- src/libical/icaltime.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libical/icaltime.c b/src/libical/icaltime.c index b6247d56..223ebb0a 100644 --- a/src/libical/icaltime.c +++ b/src/libical/icaltime.c @@ -434,7 +434,7 @@ static const int _days_in_month[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, int icaltime_days_in_month(const int month, const int year) { - int days = _days_in_month[month]; + int days; /* The old code aborting if it was passed a parameter like BYMONTH=0 * Unfortunately it's not practical right now to pass an error all @@ -448,6 +448,8 @@ int icaltime_days_in_month(const int month, const int year) return 30; } + days = _days_in_month[month]; + if (month == 2) { days += icaltime_is_leap_year(year); } -- cgit v1.2.1 From b7bbcbb9b43e7c3dcc5057cbd0f79ab8d525ab0e Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 08:24:11 -0400 Subject: codeql workflow - don't check java or python --- .github/workflows/codeql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 512e8b9e..67130d3b 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -32,7 +32,7 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'cpp', 'java', 'python' ] + language: [ 'cpp' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support -- cgit v1.2.1 From c610034f51f4092c9fbfaf491fc3cc0b65e674db Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 08:38:48 -0400 Subject: Revert "codeql.yml - move into .github/workflows" This reverts commit a2ce6419ff642c2bbee9b0e60d3354e16334b255. --- .github/workflows/codeql.yml | 72 -------------------------------------------- codeql.yml | 72 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 72 deletions(-) delete mode 100644 .github/workflows/codeql.yml create mode 100644 codeql.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml deleted file mode 100644 index 67130d3b..00000000 --- a/.github/workflows/codeql.yml +++ /dev/null @@ -1,72 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ 3.0 ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ 3.0 ] - schedule: - - cron: '32 22 * * 5' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'cpp' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 diff --git a/codeql.yml b/codeql.yml new file mode 100644 index 00000000..b745d467 --- /dev/null +++ b/codeql.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ 3.0 ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ 3.0 ] + schedule: + - cron: '32 22 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'cpp' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 -- cgit v1.2.1 From 7b192eba6f89ea69e95e3d097497fea01b96ae9f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 08:51:26 -0400 Subject: remove codacy and codeql workflows not needed in this branch --- .github/workflows/codacy.yml | 60 ------------------------------------ codeql.yml | 72 -------------------------------------------- 2 files changed, 132 deletions(-) delete mode 100644 .github/workflows/codacy.yml delete mode 100644 codeql.yml diff --git a/.github/workflows/codacy.yml b/.github/workflows/codacy.yml deleted file mode 100644 index d2000770..00000000 --- a/.github/workflows/codacy.yml +++ /dev/null @@ -1,60 +0,0 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# This workflow checks out code, performs a Codacy security scan -# and integrates the results with the -# GitHub Advanced Security code scanning feature. For more information on -# the Codacy security scan action usage and parameters, see -# https://github.com/codacy/codacy-analysis-cli-action. -# For more information on Codacy Analysis CLI in general, see -# https://github.com/codacy/codacy-analysis-cli. - -name: Codacy Security Scan - -on: - push: - branches: [ 3.0 ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ 3.0 ] - schedule: - - cron: '18 8 * * 4' - -permissions: - contents: read - -jobs: - codacy-security-scan: - permissions: - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - name: Codacy Security Scan - runs-on: ubuntu-latest - steps: - # Checkout the repository to the GitHub Actions runner - - name: Checkout code - uses: actions/checkout@v3 - - # Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis - - name: Run Codacy Analysis CLI - uses: codacy/codacy-analysis-cli-action@d840f886c4bd4edc059706d09c6a1586111c540b - with: - # Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository - # You can also omit the token and run the tools that support default configurations - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - verbose: true - output: results.sarif - format: sarif - # Adjust severity of non-security issues - gh-code-scanning-compat: true - # Force 0 exit code to allow SARIF file generation - # This will handover control about PR rejection to the GitHub side - max-allowed-issues: 2147483647 - - # Upload the SARIF file generated in the previous step - - name: Upload SARIF results file - uses: github/codeql-action/upload-sarif@v2 - with: - sarif_file: results.sarif diff --git a/codeql.yml b/codeql.yml deleted file mode 100644 index b745d467..00000000 --- a/codeql.yml +++ /dev/null @@ -1,72 +0,0 @@ -# For most projects, this workflow file will not need changing; you simply need -# to commit it to your repository. -# -# You may wish to alter this file to override the set of languages analyzed, -# or to provide custom queries or build logic. -# -# ******** NOTE ******** -# We have attempted to detect the languages in your repository. Please check -# the `language` matrix defined below to confirm you have the correct set of -# supported CodeQL languages. -# -name: "CodeQL" - -on: - push: - branches: [ 3.0 ] - pull_request: - # The branches below must be a subset of the branches above - branches: [ 3.0 ] - schedule: - - cron: '32 22 * * 5' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: [ 'cpp' ] - # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] - # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - - # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs - # queries: security-extended,security-and-quality - - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - # ℹ️ Command-line programs to run using the OS shell. - # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun - - # If the Autobuild fails above, remove it and uncomment the following three lines. - # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. - - # - run: | - # echo "Run, Build Application using script" - # ./location_of_script_within_repo/buildscript.sh - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 -- cgit v1.2.1 From 92dbdb8691bc2a15915eff4d99e42700a9f67b38 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 10:18:20 -0400 Subject: .pre-commit-config.yaml - add markdownlint --- .pre-commit-config.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ddbaf1c1..13bdcd3d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -22,3 +22,10 @@ repos: rev: v2.1.0 hooks: - id: codespell +- repo: https://github.com/markdownlint/markdownlint + rev: v0.11.0 + hooks: + - id: markdownlint + entry: mdl + language: ruby + files: \.(md|mdown|markdown)$ -- cgit v1.2.1 From 6166e2ffd1decdeeaa080586e91f4843991d3ba2 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 10:42:08 -0400 Subject: README.md, doc/UsingLibical.md - fixes markdownlint issues --- .mdlrc | 1 + .mdlrc.rb | 4 + README.md | 16 ++-- doc/UsingLibical.md | 219 ++++++++++++++++++++++++++-------------------------- 4 files changed, 121 insertions(+), 119 deletions(-) create mode 100644 .mdlrc create mode 100644 .mdlrc.rb diff --git a/.mdlrc b/.mdlrc new file mode 100644 index 00000000..3acbfeca --- /dev/null +++ b/.mdlrc @@ -0,0 +1 @@ +style ".mdlrc.rb" diff --git a/.mdlrc.rb b/.mdlrc.rb new file mode 100644 index 00000000..406f45b3 --- /dev/null +++ b/.mdlrc.rb @@ -0,0 +1,4 @@ +all +rule 'MD013', :line_length => 100 +rule 'MD029', :style => :ordered +exclude_rule 'MD033' diff --git a/README.md b/README.md index 698a027e..f1634cd8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # 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) +[![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 @@ -9,7 +10,7 @@ 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. +at . Libical is an Open Source implementation of the iCalendar protocols and protocol data units. The iCalendar specification describes how @@ -75,18 +76,17 @@ 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... +* KDE: + * [Kontact](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 diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index 04b22306..f3e49d44 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -1,8 +1,8 @@ # Using Libical -> Author: Eric Busboom -> -> Date: January 2001 +> Author: Eric Busboom +> +> Date: January 2001 ## 1 Introduction @@ -11,10 +11,9 @@ 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 +Libical implements [RFC5545][], [RFC5546][], [RFC7529][]; the iCalendar extensions in [RFC6638][]; and some of [RFC6047][]. - This documentation assumes that you are familiar with the iCalendar standards RFC5545 and RFC5546. These specifications are available at the [IETF Tools][] website: @@ -156,7 +155,7 @@ or union. #### 3.2.2 The parser -The libical parser offers a variety of ways to convert [RFC5545][] text +The libical parser offers a variety of ways to convert [RFC5545][] text into a libical internal component structure. The parser can parse blocks of text as a string, or it can parse line-by-line. @@ -167,9 +166,9 @@ errors and component usage errors. #### 3.2.4 Memory Management -Since many of libicals interfaces return strings, the library has its +Since many of libical's interfaces return strings, the library has its own memory management system to eliminate the need to free every string -returned from the library. +returned from the library. See [Memory Management](#memory). #### 3.2.5 Storage classes @@ -190,7 +189,7 @@ by maintaining a self-similar interface. Libical defines components for groups of properties that look and act like components, but are not defined as components in the specification. `XDAYLIGHT` and `XSTANDARD` are notable examples. These pseudo components -group properties within the `VTIMEZONE` components. For instanace, the +group properties within the `VTIMEZONE` components. For instance, the timezone properties associated with daylight savings time starts with `BEGIN:DAYLIGHT` and ends with `END:DAYLIGHT`, just like other components, but is not defined as a component in [RFC5545][] (see [section 3.6.5][RFC5545 3.6.5]) @@ -225,7 +224,7 @@ It is natural to have interfaces that would return the value of a property, but it is cumbersome for a single routine to return multiple types. So, in libical, properties that can have multiple types are given a single type that is the union of their RFC5545 types. For instance, -in libical, the value of the `TRIGGER` property resolves to struct +in libical, the value of the `TRIGGER` property resolves to struct `icaltriggertype`. This type is a union of a `DURATION` and a `DATE-TIME`. ### 4.3 Multi-Valued Properties @@ -261,10 +260,11 @@ into one. ### 5.1 Creating Components -There are three ways to create components in Libical: -1. creating individual objects and assembling them, -2. building entire objects in massive vaargs calls, -3. and parsing a text file containing iCalendar data. +There are three ways to create components in Libical: + +1. creating individual objects and assembling them, +2. building entire objects in massive vargs calls, +3. parsing a text file containing iCalendar data. #### 5.1.1 Constructor Interfaces @@ -300,7 +300,7 @@ Most things you work with are objects, that are instantiated with a constructor that has "new" in the name. Also note that, other than the object reference, most structure data is passed in to libical routines by value. Libical has some complex but very regular memory -handling rules. These are detailed in section [sec:memory]. +handling rules. These are detailed in section [Memory Management](#memory). If any of the constructors fail, they will return 0. If you try to insert 0 into a property or component, or use a zero-valued object @@ -349,9 +349,9 @@ calendar = This form is similar to the constructor form, except that the constructors have `vanew` instead of `new` in the name. The arguments are similar too, except that the component constructor can have a list of properties, -and the property constructor can have a list of parameters. +and the property constructor can have a list of parameters. -*Be sure to terminate every list with a `NULL` (or a *`(void 0)`*, or your code +*Be sure to terminate every list with a `NULL` (or a *`(void 0)`*, or your code will crash, if you are lucky*. The reason you can't use 0 itself is that depending on what platform you are on, `sizeof(int) ≠ sizeof(void*)`. @@ -367,7 +367,7 @@ icalcomponent* icalparser_parse_string(char* str); If the string contains only one component, the parser will return the component in libical form. If the string contains multiple components, -the multiple components will be returned as the children of an +the multiple components will be returned as the children of an `ICAL_XROOT_COMPONENT` component. Parsing a whole string may seem wasteful if you want to pull a large @@ -404,7 +404,7 @@ char* read_stream(char *s, size_t size, void *d) return fgets(s, size, (FILE*)d); } -int main(int argc, char *argv[]) +int main(int argc, char *argv[]) { char *line; icalcomponent *component; @@ -474,7 +474,7 @@ char* read_stream(char *s, size_t size, void *d) return fgets(s, size, (FILE*)d); } -int main(int argc, char *argv[]) +int main(int argc, char *argv[]) { char* line; icalcomponent *component; @@ -522,13 +522,13 @@ icalcomponent* icalcomponent_get_first_component( This routine will return a reference to the first component of the type `kind`. The key kind values, listed in icalenums.h are: -- `ICAL_ANY_COMPONENT` -- `ICAL_VEVENT_COMPONENT` -- `ICAL_VTODO_COMPONENT` -- `ICAL_VJOURNAL_COMPONENT` -- `ICAL_VCALENDAR_COMPONENT` -- `ICAL_VFREEBUSY_COMPONENT` -- `ICAL_VALARM_COMPONENT` +- `ICAL_ANY_COMPONENT` +- `ICAL_VEVENT_COMPONENT` +- `ICAL_VTODO_COMPONENT` +- `ICAL_VJOURNAL_COMPONENT` +- `ICAL_VCALENDAR_COMPONENT` +- `ICAL_VFREEBUSY_COMPONENT` +- `ICAL_VALARM_COMPONENT` These are only the most common components; there are many more listed in icalenums.h. @@ -613,7 +613,7 @@ Here is an example of a loop using these routines: ```c for(i = icalcomponent_begin_component(impl->cluster, ICAL_ANY_COMPONENT); icalcompiter_deref(&i)!= 0; - icalcompiter_next(&i)) + icalcompiter_next(&i)) { icalcomponent *this = icalcompiter_deref(&i); } @@ -640,7 +640,7 @@ for(c = icalcomponent_get_first_component(parent_comp, ICAL_ANY_COMPONENT); } ``` -Another way to remove components is to rely on the side effect of +Another way to remove components is to rely on the side effect of `icalcomponent_remove_component()`: if component iterator in the parent component is pointing to the child that will be removed, it will move the iterator to the component after @@ -716,13 +716,13 @@ the properties that contain them. This involves fewer routine calls and intermediate variables than working with them independently, and it is type-safe. -For each property, there are a `_get_()` and a `_set_()` routine that -accesses the internal value. For instanace, for the `UID` property, the +For each property, there are a `_get_()` and a `_set_()` routine that +accesses the internal value. For instanace, for the `UID` property, the routines are: ```c void icalproperty_set_uid( - icalproperty* prop, + icalproperty* prop, const char* v); const char* icalproperty_get_uid( @@ -740,7 +740,7 @@ icalvalue* icalproperty_get_value( icalproperty* prop); void icalproperty_set_value( - icalproperty* prop, + icalproperty* prop, icalvalue* value); ``` @@ -754,7 +754,7 @@ struct icaltimetype icalvalue_get_datetime( icalvalue* value); void icalvalue_set_datetime( - icalvalue* value, + icalvalue* value, struct icaltimetype v); ``` @@ -764,7 +764,7 @@ always a string. To get and set the value, use: ```x void icalproperty_set_x( - icalproperty* prop, + icalproperty* prop, char* v); char* icalproperty_get_x( @@ -779,7 +779,7 @@ char* icalproperty_get_x_name( icalproperty* prop) void icalproperty_set_x_name( - icalproperty* prop, + icalproperty* prop, char* name); ``` @@ -792,7 +792,7 @@ declares what operation a remote receiver should use to process a component. For instance, if the `METHOD` is `REQUEST` and the component is a `VEVENT`, the sender is probably asking the receiver to join in a meeting. In this case, RFC5546 says that the component must specify -a start time (`DTSTART`) and list the receiver as an attendee +a start time (`DTSTART`) and list the receiver as an attendee (`ATTENDEE`). Libical can check these restrictions with the routine: @@ -850,11 +850,11 @@ struct icaltimetype { int minute; int second; int is_utc; /* 1-> time is in UTC timezone */ - int is_date; /* 1 -> interpret this as date. */ + int is_date; /* 1 -> interpret this as date. */ }; ``` -The `year`, `month`, `day`, `hour`, `minute` and `second` fields +The `year`, `month`, `day`, `hour`, `minute` and `second` fields hold the broken-out time values. The `is_utc` field distinguishes between times in UTC and a local time zone. The `is_date` field indicates if the time should @@ -928,19 +928,19 @@ short icaltime_day_of_year( struct icaltimetype t); struct icaltimetype icaltime_from_day_of_year( - short doy, + short doy, short year); short icaltime_day_of_week( struct icaltimetype t); short icaltime_start_doy_week( - struct icaltimetype t, + struct icaltimetype t, int fdow); short icaltime_week_number( - short day_of_month, - short month, + short day_of_month, + short month, short year); short icaltime_days_in_month( @@ -966,7 +966,7 @@ The compare routine works exactly like `strcmp()`, but on time structures. ```c int icaltime_compare( - struct icaltimetype a, + struct icaltimetype a, struct icaltimetype b); ``` @@ -987,17 +987,17 @@ time all year. ```c int icaltime_utc_offset( - struct icaltimetype tt, + struct icaltimetype tt, char* tzid); int icaltime_local_utc_offset(); struct icaltimetype icaltime_as_utc( - struct icaltimetype tt, + struct icaltimetype tt, char* tzid); struct icaltimetype icaltime_as_zone( - struct icaltimetype tt, + struct icaltimetype tt, char* tzid); struct icaltimetype icaltime_as_local( @@ -1035,38 +1035,38 @@ icalerrorenum icaldirset_commit( icaldirset* store); icalerrorenum icaldirset_add_component( - icaldirset* store, + icaldirset* store, icalcomponent* comp); icalerrorenum icaldirset_remove_component( - icaldirset* store, + icaldirset* store, icalcomponent* comp); int icaldirset_count_components( - icaldirset* store, + icaldirset* store, icalcomponent_kind kind); icalerrorenum icaldirset_select( - icaldirset* store, + icaldirset* store, icalcomponent* gauge); void icaldirset_clear( icaldirset* store); icalcomponent* icaldirset_fetch( - icaldirset* store, + icaldirset* store, const char* uid); int icaldirset_has_uid( - icaldirset* store, + icaldirset* store, const char* uid); icalcomponent* icaldirset_fetch_match( - icaldirset* set, + icaldirset* set, icalcomponent *c); icalerrorenum icaldirset_modify( - icaldirset* store, + icaldirset* store, icalcomponent *oldc, icalcomponent *newc); @@ -1103,8 +1103,8 @@ icalfileset* icalfileset_new( const char* path); icalfileset* icalfileset_new_open( - const char* path, - int flags, + const char* path, + int flags, int mode); ``` @@ -1125,7 +1125,7 @@ To add components to a set, use: ```c icalerrorenum icalfileset_add_component( - icalfileset* cluster, + icalfileset* cluster, icalcomponent* child); ``` @@ -1170,7 +1170,7 @@ Then, you can add the gauge to the set with : ```c icalerrorenum icalfileset_select( - icalfileset* store, + icalfileset* store, icalgauge* gauge); ``` @@ -1217,41 +1217,41 @@ has month of i */ There are several other routines in the icalset interface, but they not fully implemented yet. -#### 5.5 Memory Management +#### 5.5 Memory Management Libical relies heavily on dynamic allocation for both the core objects and for the strings used to hold values. Some of this memory the library caller owns and must free, and some of the memory is managed by the library. Here is a summary of the memory rules. -1. If the function name has "new" in it (such as `icalcomponent_new()`, - or `icalpropert_new_clone()`), the caller gets control - of the memory. +1. If the function name has "new" in it (such as `icalcomponent_new()`, + or `icalpropert_new_clone()`), the caller gets control + of the memory. -2. If you got the memory from a routine with new in it, you must - call the corresponding `*_free()` routine to free the memory, for - example use `icalcomponent_free()` to free objects created with - `icalcomponent_new()`) +2. If you got the memory from a routine with new in it, you must + call the corresponding `*_free()` routine to free the memory, for + example use `icalcomponent_free()` to free objects created with + `icalcomponent_new()`) -3. If the function name has "add" in it, the caller is transferring - control of the memory to the routine, for example the function - ` icalproperty_add_parameter()` +3. If the function name has "add" in it, the caller is transferring + control of the memory to the routine, for example the function + ` icalproperty_add_parameter()` -4. If the function name has "remove" in it, the caller passes in - a pointer to an object and after the call returns, the caller owns - the object. So, before you call `icalcomponent_remove_property(comp, foo)`, - you do not own "foo" and after the call returns, you do. +4. If the function name has "remove" in it, the caller passes in + a pointer to an object and after the call returns, the caller owns + the object. So, before you call `icalcomponent_remove_property(comp, foo)`, + you do not own "foo" and after the call returns, you do. -5. If the routine returns a string and its name does NOT end in `_r`, - libical owns the memory and will put it on a ring buffer to reclaim - later. For example, `icalcomponent_as_ical_string()`. You better - `strdup()` it if you want to keep it, and you don't have to delete it. +5. If the routine returns a string and its name does NOT end in `_r`, + libical owns the memory and will put it on a ring buffer to reclaim + later. For example, `icalcomponent_as_ical_string()`. You better + `strdup()` it if you want to keep it, and you don't have to delete it. -6. If the routine returns a string and its name *does* end in `_r`, the - caller gets control of the memory and is responsible for freeing it. - For example, `icalcomponent_as_ical_string_r()` does the same thing as - `icalcomponent_as_ical_string()`, except you now have control of the - string buffer it returns. +6. If the routine returns a string and its name *does* end in `_r`, the + caller gets control of the memory and is responsible for freeing it. + For example, `icalcomponent_as_ical_string_r()` does the same thing as + `icalcomponent_as_ical_string()`, except you now have control of the + string buffer it returns. ### 5.6 Error Handling @@ -1270,36 +1270,34 @@ of enum `icalerrorenum`. Most routines will set the global error value `icalerrno` on errors. This variable is an enumeration; permissible values can be found in `libical/icalerror.h`. If the routine returns an enum icalerrorenum, -then the return value will be the same as icalerrno. You can use -`icalerror_strerror()` to get a string that describes the error. +then the return value will be the same as icalerrno. You can use +`icalerror_strerror()` to get a string that describes the error. The enumerations are: -- `ICAL_BADARG_ERROR`: One of the arguments to a routine was bad. - Typically for a null pointer. +- `ICAL_BADARG_ERROR`: One of the arguments to a routine was bad. + Typically for a null pointer. -- `ICAL_NEWFAILED_ERROR`: A `new()` or `malloc()` failed. +- `ICAL_NEWFAILED_ERROR`: A `new()` or `malloc()` failed. -- `ICAL_MALFORMEDDATA_ERROR`: An input string was not in the correct - format +- `ICAL_MALFORMEDDATA_ERROR`: An input string was not in the correct format -- `ICAL_PARSE_ERROR`: The parser failed to parse an incoming component +- `ICAL_PARSE_ERROR`: The parser failed to parse an incoming component -- `ICAL_INTERNAL_ERROR`: Largely equivalent to an assert +- `ICAL_INTERNAL_ERROR`: Largely equivalent to an assert -- `ICAL_FILE_ERROR`: A file operation failed. Check errno for more - detail. +- `ICAL_FILE_ERROR`: A file operation failed. Check errno for more detail. -- `ICAL_ALLOCATION_ERROR`: ? +- `ICAL_ALLOCATION_ERROR`: ? -- `ICAL_USAGE_ERROR`: ? +- `ICAL_USAGE_ERROR`: ? -- `ICAL_NO_ERROR`: No error +- `ICAL_NO_ERROR`: No error -- `ICAL_MULTIPLEINCLUSION_ERROR`: ? +- `ICAL_MULTIPLEINCLUSION_ERROR`: ? -- `ICAL_TIMEDOUT_ERROR`: For CSTP and acquiring locks +- `ICAL_TIMEDOUT_ERROR`: For CSTP and acquiring locks -- `ICAL_UNKNOWN_ERROR`: ? +- `ICAL_UNKNOWN_ERROR`: ? #### 5.6.3 `X-LIC-ERROR` and `X-LIC-INVALID-COMPONENT` @@ -1324,8 +1322,8 @@ RFC5545. There are a few routines to manipulate error properties: -[ The following data is supposed to be in a table. It looks OK in LyX, -but does not format properly in output. ] +The following data is supposed to be in a table. It looks OK in LyX, +but does not format properly in output. +-------------------------------------+---------------------------------------------------------+ | Routine | Purpose | @@ -1349,16 +1347,15 @@ but does not format properly in output. ] | | process the component as an iTIP request. | +-------------------------------------+---------------------------------------------------------+ - The types of errors are listed in icalerror.h. They are: -- `ICAL_XLICERRORTYPE_COMPONENTPARSEERROR` -- `ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR` -- `ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR` -- `ICAL_XLICERRORTYPE_PROPERTYPARSEERROR` -- `ICAL_XLICERRORTYPE_VALUEPARSEERROR` -- `ICAL_XLICERRORTYPE_UNKVCALPROP` -- `ICAL_XLICERRORTYPE_INVALIDITIP` +- `ICAL_XLICERRORTYPE_COMPONENTPARSEERROR` +- `ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR` +- `ICAL_XLICERRORTYPE_PARAMETERNAMEPARSEERROR` +- `ICAL_XLICERRORTYPE_PROPERTYPARSEERROR` +- `ICAL_XLICERRORTYPE_VALUEPARSEERROR` +- `ICAL_XLICERRORTYPE_UNKVCALPROP` +- `ICAL_XLICERRORTYPE_INVALIDITIP` The libical parser will generate the error that end in `PARSEERROR` when it encounters garbage in the input steam. `ICAL_XLICERRORTYPE_INVALIDITIP` @@ -1406,7 +1403,7 @@ Enums that identify a component, property, value or parameter end with `_COMPONENT`, `_PROPERTY`, `_VALUE`, or `_PARAMETER`" Enums that identify a parameter value have the name of the parameter -as the second word. For instance: `ICAL_ROLE_REQPARTICIPANT` or +as the second word. For instance: `ICAL_ROLE_REQPARTICIPANT` or `ICAL_PARTSTAT_ACCEPTED`. The enums for the parts of a recurrence rule and request statuses -- cgit v1.2.1 From 6908abbf9238295910aef8d5259a8cc38c87329b Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 2 Jun 2022 18:20:20 -0400 Subject: .pylintrc - config file for pylint --- .pylintrc | 590 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 590 insertions(+) create mode 100644 .pylintrc diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 00000000..b3bb2f6d --- /dev/null +++ b/.pylintrc @@ -0,0 +1,590 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold to be exceeded before program exits with error. +fail-under=10.0 + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the ignore-list. The +# regex matches against paths and can be in Posix or Windows format. +ignore-paths= + +# Files or directories matching the regex patterns are skipped. The regex +# matches against base names, not paths. The default value ignores emacs file +# locks +ignore-patterns=^\.# + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.10 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _ + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +#notes-rgx= + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=no + +# Signatures are removed from the similarity computation +ignore-signatures=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: en (aspell), en_AG +# (hunspell), en_AU (aspell), en_BS (hunspell), en_BW (hunspell), en_BZ +# (hunspell), en_CA (aspell), en_DK (hunspell), en_GB (aspell), en_GH +# (hunspell), en_HK (hunspell), en_IE (hunspell), en_IN (hunspell), en_JM +# (hunspell), en_MW (hunspell), en_NA (hunspell), en_NG (hunspell), en_NZ +# (hunspell), en_PH (hunspell), en_SG (hunspell), en_TT (hunspell), en_US +# (aspell), en_ZA (hunspell), en_ZM (hunspell), en_ZW (hunspell). +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear and the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# class is considered mixin if its name matches the mixin-class-rgx option. +ignore-mixin-members=yes + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins ignore-mixin- +# members is set to 'yes' +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=cls + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "BaseException, Exception". +overgeneral-exceptions=BaseException, + Exception -- cgit v1.2.1 From c883bc9fff66ed4579ec39f10c48b083dbec9f3a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 3 Jun 2022 10:24:20 -0400 Subject: doc/UsingLibical.md - minor tweaks --- .mdlrc.rb | 2 +- doc/UsingLibical.md | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.mdlrc.rb b/.mdlrc.rb index 406f45b3..edb59bc8 100644 --- a/.mdlrc.rb +++ b/.mdlrc.rb @@ -1,4 +1,4 @@ all -rule 'MD013', :line_length => 100 +rule 'MD013', :line_length => 100, :tables => false rule 'MD029', :style => :ordered exclude_rule 'MD033' diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index de3dda59..12fb9bcc 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -24,10 +24,11 @@ at the [IETF Tools][] website: [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 -[RFC6638]: https://tools.ietf.org/html/rfc7986 +[RFC7986]: https://tools.ietf.org/html/rfc7986 [RFC9073]: https://tools.ietf.org/html/rfc9073 [RFC9074]: https://tools.ietf.org/html/rfc9074 +[RFC6047]: https://tools.ietf.org/html/rfc6047 + [IETF Tools]: https://tools.ietf.org/ ### 1.1 The libical project @@ -1221,7 +1222,8 @@ DTSTART <= '20000106T120000Z'"); There are several other routines in the icalset interface, but they not fully implemented yet. -#### 5.5 Memory Management + +#### 5.5 Memory Management Libical relies heavily on dynamic allocation for both the core objects and for the strings used to hold values. Some of this memory the library @@ -1328,14 +1330,11 @@ RFC5545. There are a few routines to manipulate error properties: | Routine | Purpose | -|---------------------------------------|------------------------------------------------------| -| `void icalrestriction_check()` | Check a component against RFC5546 and insert error | -| | properties to indicate non compliance | +|:--------------------------------------|:-----------------------------------------------------| +| `void icalrestriction_check()` | Check a component against RFC5546 and insert error properties to indicate non compliance | | `int icalcomponent_count_errors()` | Return the number of error properties in a component | | `void icalcomponent_strip_errors()` | Remove all error properties in a component | -| `void icalcomponent_convert_errors()` | Convert some error properties into REQUESTS-STATUS | -| | properties to indicate the inability to process the | -| | component as an iTIP request. | +| `void icalcomponent_convert_errors()` | Convert some error properties into REQUESTS-STATUS properties to indicate the inability to process the component as an iTIP request | The types of errors are listed in icalerror.h. They are: -- cgit v1.2.1 From d88473bc53f32a54f18d976a97cc4d39f8902848 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Wed, 23 Feb 2022 15:20:19 +0100 Subject: Introducing config_public.h.cmake, which contains configuration to be included in ical.h. --- CMakeLists.txt | 1 + config.h.cmake | 2 ++ config_public.h.cmake | 1 + src/libical/ical_file.cmake | 1 + 4 files changed, 5 insertions(+) create mode 100644 config_public.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f88bf312..062f3de8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -392,6 +392,7 @@ endif() include(ConfigureChecks.cmake) add_definitions(-DHAVE_CONFIG_H) +configure_file(config_public.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_public.h) configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) set(INSTALL_TARGETS_DEFAULT_ARGS diff --git a/config.h.cmake b/config.h.cmake index 958ffd1d..aae1cf8a 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -1,5 +1,7 @@ /* config.h. Generated by cmake from config.h.cmake */ +#include "config_public.h" + /* Define if you have the ICU library. */ #cmakedefine HAVE_LIBICU 1 diff --git a/config_public.h.cmake b/config_public.h.cmake new file mode 100644 index 00000000..d6dd111c --- /dev/null +++ b/config_public.h.cmake @@ -0,0 +1 @@ +/* config_public.h. Generated by cmake from config_public.h.cmake */ diff --git a/src/libical/ical_file.cmake b/src/libical/ical_file.cmake index e1db0cc8..8a13d07c 100644 --- a/src/libical/ical_file.cmake +++ b/src/libical/ical_file.cmake @@ -1,6 +1,7 @@ # ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. # It is required to make the combined header ical.h properly. set(COMBINEDHEADERSICAL + ${TOPB}/config_public.h ${TOPB}/src/libical/icalversion.h ${TOPS}/src/libical/icaltime.h ${TOPS}/src/libical/icalduration.h -- cgit v1.2.1 From acf1ae1dacb43f967b289e0922856703c1e15d1f Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Wed, 23 Feb 2022 15:39:05 +0100 Subject: time_t - replace type `time_t` and related functions with our own `icaltime_t`, etc. and define it centrally in `config_public.h.cmake` and `config.h.cmake`. This allows for easy replacement, should the system-defined time_t not be suitable. This might especially be the case on 32-bit systems where the range of time_t ends 2038. --- config.h.cmake | 13 +++++++++- config_public.h.cmake | 4 +++ doc/UsingLibical.md | 8 +++--- src/libical/icalcomponent.c | 10 ++++---- src/libical/icalderivedproperty.h.in | 1 - src/libical/icalduration.c | 4 +-- src/libical/icalrecur.c | 12 ++++----- src/libical/icalrecur.h | 6 ++--- src/libical/icaltime.c | 50 ++++++++++++++++++------------------ src/libical/icaltime.h | 16 ++++++------ src/libical/icaltimezone.c | 10 ++++---- src/libical/icaltz-util.c | 20 +++++++-------- src/libicalss/icalspanlist.c | 16 ++++++------ src/libicalvcal/icalvcal.c | 10 ++++---- src/test/recur.c | 2 +- src/test/regression-component.c | 6 ++--- src/test/regression-recur.c | 2 +- src/test/regression-utils.c | 6 ++--- src/test/regression.c | 30 +++++++++++----------- src/test/regression.h | 2 +- src/test/timezones.c | 8 +++--- 21 files changed, 125 insertions(+), 111 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index aae1cf8a..561b91a8 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -522,7 +522,18 @@ typedef ssize_t IO_SSIZE_T; /* FYI: The localtime() in Microsoft's C library is MT-safe */ #define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0) #endif -#include + +#define SIZEOF_ICALTIME_T SIZEOF_TIME_T + +/* + * Substitute functions for those from time.h but working with icaltime_t instead of time_t. + * icaltime_t is defined in config_public.h.cmake. + */ +#define icaltime(timer) time(timer) +#define icalctime(timer) ctime(timer) +#define icalmktime(timeptr) mktime(timeptr) +#define icalgmtime_r(timer, buf) gmtime_r(timer, buf) +#define icallocaltime_r(timer, buf) localtime_r(timer, buf) /* define MAXPATHLEN */ #if defined(_WIN32) diff --git a/config_public.h.cmake b/config_public.h.cmake index d6dd111c..2cffaced 100644 --- a/config_public.h.cmake +++ b/config_public.h.cmake @@ -1 +1,5 @@ /* config_public.h. Generated by cmake from config_public.h.cmake */ + +#include + +typedef time_t icaltime_t; diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index 12fb9bcc..4d3b80e3 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -876,7 +876,7 @@ struct icaltimetype icaltime_from_string( const char* str); struct icaltimetype icaltime_from_timet_with_zone( - time_t v, + icaltime_t v, int is_date, icaltimezone* zone); ``` @@ -887,7 +887,7 @@ struct icaltimetype icaltime_from_timet_with_zone( struct icaltimetype tt = icaltime_from_string("19970101T103000"); ``` -`icaltime_from_timet_with_zone()` takes a `time_t` value, representing seconds past +`icaltime_from_timet_with_zone()` takes a `icaltime_t` value, representing seconds past the POSIX epoch, a flag to indicate if the time is a date, and a time zone. Dates have an identical structure to a time, but the time portion (hours, minutes and seconds) is always 00:00:00. Dates act differently in @@ -960,11 +960,11 @@ the hour, minute and second fields should be used in the conversion. ```c struct icaltimetype icaltime_from_timet_with_zone( - time_t v, + icaltime_t v, int is_date, icaltimezone* zone); -time_t icaltime_as_timet( +icaltime_t icaltime_as_timet( struct icaltimetype); ``` diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index 0207fa70..bc179b73 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -871,8 +871,8 @@ void icalcomponent_foreach_recurrence(icalcomponent *comp, { struct icaltimetype dtstart, dtend; icaltime_span recurspan, basespan, limit_span; - time_t limit_start, limit_end; - time_t dtduration; + icaltime_t limit_start, limit_end; + icaltime_t dtduration; icalproperty *rrule, *rdate; pvl_elem property_iterator; /* for saving the iterator */ @@ -906,10 +906,10 @@ void icalcomponent_foreach_recurrence(icalcomponent *comp, limit_end = icaltime_as_timet_with_zone(end, icaltimezone_get_utc_timezone()); } else { -#if (SIZEOF_TIME_T > 4) - limit_end = (time_t) LONG_MAX; +#if (SIZEOF_ICALTIME_T > 4) + limit_end = (icaltime_t) LONG_MAX; #else - limit_end = (time_t) INT_MAX; + limit_end = (icaltime_t) INT_MAX; #endif } limit_span.start = limit_start; diff --git a/src/libical/icalderivedproperty.h.in b/src/libical/icalderivedproperty.h.in index 0ebec067..034cfe1b 100644 --- a/src/libical/icalderivedproperty.h.in +++ b/src/libical/icalderivedproperty.h.in @@ -19,7 +19,6 @@ #ifndef ICALDERIVEDPROPERTY_H #define ICALDERIVEDPROPERTY_H -#include #include "icalparameter.h" #include "icalderivedvalue.h" #include "icalrecur.h" diff --git a/src/libical/icalduration.c b/src/libical/icalduration.c index c978fb79..79789d97 100644 --- a/src/libical/icalduration.c +++ b/src/libical/icalduration.c @@ -338,8 +338,8 @@ struct icaltimetype icaltime_add(struct icaltimetype t, struct icaldurationtype struct icaldurationtype icaltime_subtract(struct icaltimetype t1, struct icaltimetype t2) { - time_t t1t = icaltime_as_timet(t1); - time_t t2t = icaltime_as_timet(t2); + icaltime_t t1t = icaltime_as_timet(t1); + icaltime_t t2t = icaltime_as_timet(t2); return icaldurationtype_from_int((int)(t1t - t2t)); } diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index 886fd75b..c41e258d 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -169,12 +169,12 @@ static ical_invalid_rrule_handling invalidRruleHandling = ICAL_RRULE_TREAT_AS_ER #define ICAL_BY_YEARDAY_SIZE 367 /* 1 to 366 */ #endif -#if (SIZEOF_TIME_T > 4) +#if (SIZEOF_ICALTIME_T > 4) /** Arbitrarily go up to 1000th anniversary of Gregorian calendar, since - 64-bit time_t values get us up to the tm_year limit of 2+ billion years. */ + 64-bit icaltime_t values get us up to the tm_year limit of 2+ billion years. */ #define MAX_TIME_T_YEAR 2582 #else -/** This is the last year we will go up to, since 32-bit time_t values +/** This is the last year we will go up to, since 32-bit icaltime_t values only go up to the start of 2038. */ #define MAX_TIME_T_YEAR 2037 #endif @@ -3613,15 +3613,15 @@ short icalrecurrencetype_encode_month(int month, int is_leap) } int icalrecur_expand_recurrence(const char *rule, - time_t start, int count, time_t *array) + icaltime_t start, int count, icaltime_t*array) { struct icalrecurrencetype recur; icalrecur_iterator *ritr; - time_t tt; + icaltime_t tt; struct icaltimetype icstart, next; int i = 0; - memset(array, 0, count * sizeof(time_t)); + memset(array, 0, count * sizeof(icaltime_t)); icstart = icaltime_from_timet_with_zone(start, 0, 0); diff --git a/src/libical/icalrecur.h b/src/libical/icalrecur.h index f7fe5ce4..98e74a75 100644 --- a/src/libical/icalrecur.h +++ b/src/libical/icalrecur.h @@ -359,15 +359,15 @@ LIBICAL_ICAL_EXPORT void icalrecur_iterator_free(icalrecur_iterator *); /** @brief Fills an array with the 'count' number of occurrences generated by * the rrule. * - * Specifically, this fills @p array up with at most 'count' time_t values, each + * Specifically, this fills @p array up with at most 'count' icaltime_t values, each * representing an occurrence time in seconds past the POSIX epoch. * * Note that the times are returned in UTC, but the times * are calculated in local time. You will have to convert the results * back into local time before using them. */ -LIBICAL_ICAL_EXPORT int icalrecur_expand_recurrence(const char *rule, time_t start, - int count, time_t *array); +LIBICAL_ICAL_EXPORT int icalrecur_expand_recurrence(const char *rule, icaltime_t start, + int count, icaltime_t*array); /* ical_invalid_rrule_handling : * How should the ICAL library handle RRULEs with invalid BYxxx part combos? diff --git a/src/libical/icaltime.c b/src/libical/icaltime.c index 33209508..8e77cc4b 100644 --- a/src/libical/icaltime.c +++ b/src/libical/icaltime.c @@ -77,16 +77,16 @@ static int icaltime_leap_days(int y1, int y2) /* * Code adapted from Python 2.4.1 sources (Lib/calendar.py). */ -static time_t icaltime_timegm(const struct tm *tm) +static icaltime_t icaltime_timegm(const struct tm *tm) { int year; - time_t days; - time_t hours; - time_t minutes; - time_t seconds; + icaltime_t days; + icaltime_t hours; + icaltime_t minutes; + icaltime_t seconds; year = 1900 + tm->tm_year; - days = (time_t)(365 * (year - 1970) + icaltime_leap_days(1970, year)); + days = (icaltime_t)(365 * (year - 1970) + icaltime_leap_days(1970, year)); days += days_in_year_passed_month[0][tm->tm_mon]; if (tm->tm_mon > 1 && icaltime_is_leap_year(year)) @@ -102,40 +102,40 @@ static time_t icaltime_timegm(const struct tm *tm) /* * Function to convert a struct tm time specification - * to an ANSI time_t using the specified time zone. + * to an ANSI-compatible icaltime_t using the specified time zone. * This is different from the standard mktime() function * in that we don't want the automatic adjustments for * local daylight savings time applied to the result. * This function expects well-formed input. */ -static time_t make_time(struct tm *tm, int tzm) +static icaltime_t make_time(struct tm *tm, int tzm) { - time_t tim; + icaltime_t tim; static int days[] = { -1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364 }; /* check that month specification within range */ if (tm->tm_mon < 0 || tm->tm_mon > 11) - return ((time_t) - 1); + return ((icaltime_t) - 1); -#if (SIZEOF_TIME_T == 4) +#if (SIZEOF_ICALTIME_T == 4) /* check that year specification within range */ if (tm->tm_year < 70 || tm->tm_year > 138) - return ((time_t) - 1); + return ((icaltime_t) - 1); /* check for upper bound of Jan 17, 2038 (to avoid possibility of 32-bit arithmetic overflow) */ if (tm->tm_year == 138) { if (tm->tm_mon > 0) { - return ((time_t) - 1); + return ((icaltime_t) - 1); } else if (tm->tm_mday > 17) { - return ((time_t) - 1); + return ((icaltime_t) - 1); } } -#endif /* SIZEOF_TIME_T */ +#endif /* SIZEOF_ICALTIME_T */ /* * calculate elapsed days since start of the epoch (midnight Jan @@ -143,7 +143,7 @@ static time_t make_time(struct tm *tm, int tzm) * (number of leap days to subtract) */ - tim = (time_t) ((tm->tm_year - 70) * 365 + ((tm->tm_year - 1) / 4) - 17); + tim = (icaltime_t) ((tm->tm_year - 70) * 365 + ((tm->tm_year - 1) / 4) - 17); /* add number of days elapsed in the current year */ @@ -180,7 +180,7 @@ static time_t make_time(struct tm *tm, int tzm) return (tim); } -struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, const int is_date, +struct icaltimetype icaltime_from_timet_with_zone(const icaltime_t tm, const int is_date, const icaltimezone *zone) { struct icaltimetype tt; @@ -189,8 +189,8 @@ struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, const int is_ utc_zone = icaltimezone_get_utc_timezone(); - /* Convert the time_t to a struct tm in UTC time. We can trust gmtime for this. */ - if (!gmtime_r(&tm, &t)) + /* Convert the icaltime_t to a struct tm in UTC time. We can trust gmtime for this. */ + if (!icalgmtime_r(&tm, &t)) return is_date ? icaltime_null_date () : icaltime_null_time (); tt.year = t.tm_year + 1900; @@ -220,18 +220,18 @@ struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, const int is_ struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone) { - return icaltime_from_timet_with_zone(time(NULL), 0, zone); + return icaltime_from_timet_with_zone(icaltime(NULL), 0, zone); } struct icaltimetype icaltime_today(void) { - return icaltime_from_timet_with_zone(time(NULL), 1, NULL); + return icaltime_from_timet_with_zone(icaltime(NULL), 1, NULL); } -time_t icaltime_as_timet(const struct icaltimetype tt) +icaltime_t icaltime_as_timet(const struct icaltimetype tt) { struct tm stm; - time_t t; + icaltime_t t; /* If the time is the special null time, return 0. */ if (icaltime_is_null_time(tt)) { @@ -259,11 +259,11 @@ time_t icaltime_as_timet(const struct icaltimetype tt) return t; } -time_t icaltime_as_timet_with_zone(const struct icaltimetype tt, const icaltimezone *zone) +icaltime_t icaltime_as_timet_with_zone(const struct icaltimetype tt, const icaltimezone *zone) { icaltimezone *utc_zone; struct tm stm; - time_t t; + icaltime_t t; struct icaltimetype local_tt; utc_zone = icaltimezone_get_utc_timezone(); diff --git a/src/libical/icaltime.h b/src/libical/icaltime.h index 1e28492b..c663ba2e 100644 --- a/src/libical/icaltime.h +++ b/src/libical/icaltime.h @@ -37,7 +37,7 @@ * - icaltime_null_date() * - icaltime_current_time_with_zone() * - icaltime_today() - * - icaltime_from_timet_with_zone(time_t tm, int is_date, + * - icaltime_from_timet_with_zone(icaltime_t tm, int is_date, * icaltimezone *zone) * - icaltime_from_day_of_year(int doy, int year) * @@ -82,7 +82,7 @@ #include "libical_ical_export.h" -#include +#include "config_public.h" /* An opaque struct representing a timezone. We declare this here to avoid a circular dependency. */ @@ -94,8 +94,8 @@ typedef struct _icaltimezone icaltimezone; /** icaltime_span is returned by icalcomponent_get_span() */ struct icaltime_span { - time_t start; /**< in UTC */ - time_t end; /**< in UTC */ + icaltime_t start; /**< in UTC */ + icaltime_t end; /**< in UTC */ int is_busy; /**< 1->busy time, 0-> free time */ }; @@ -169,7 +169,7 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_today(void); * target timezone with no need to store the source timezone. * */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_timet_with_zone(const time_t tm, +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_timet_with_zone(const icaltime_t tm, const int is_date, const icaltimezone *zone); @@ -199,7 +199,7 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_day_of_year(const int doy, * only pass an icaltime in UTC, since no conversion is done. Even in that case, * it's probably better to just use icaltime_as_timet_with_zone(). */ -LIBICAL_ICAL_EXPORT time_t icaltime_as_timet(const struct icaltimetype); +LIBICAL_ICAL_EXPORT icaltime_t icaltime_as_timet(const struct icaltimetype); /** @brief Returns the time as seconds past the UNIX epoch, using the * given timezone. @@ -207,9 +207,9 @@ LIBICAL_ICAL_EXPORT time_t icaltime_as_timet(const struct icaltimetype); * This convenience method combines a call to icaltime_convert_to_zone() * with a call to icaltime_as_timet(). * If the input timezone is null, no conversion is done; that is, the - * time is simply returned as time_t in its native timezone. + * time is simply returned as icaltime_t in its native timezone. */ -LIBICAL_ICAL_EXPORT time_t icaltime_as_timet_with_zone(const struct icaltimetype tt, +LIBICAL_ICAL_EXPORT icaltime_t icaltime_as_timet_with_zone(const struct icaltimetype tt, const icaltimezone *zone); /** diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index ba581dc0..4fc46c99 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -85,12 +85,12 @@ static char s_ical_tzid_prefix[BUILTIN_TZID_PREFIX_LEN] = {0}; the timezone changes. */ #define ICALTIMEZONE_EXTRA_COVERAGE 5 -#if (SIZEOF_TIME_T > 4) +#if (SIZEOF_ICALTIME_T > 4) /** Arbitrarily go up to 1000th anniversary of Gregorian calendar, since - 64-bit time_t values get us up to the tm_year limit of 2+ billion years. */ + 64-bit icaltime_t values get us up to the tm_year limit of 2+ billion years. */ #define ICALTIMEZONE_MAX_YEAR 2582 #else -/** This is the maximum year we will expand to, since 32-bit time_t values +/** This is the maximum year we will expand to, since 32-bit icaltime_t values only go up to the start of 2038. */ #define ICALTIMEZONE_MAX_YEAR 2037 #endif @@ -1431,9 +1431,9 @@ static int get_offset(icaltimezone *zone) struct tm local; struct icaltimetype tt; int offset; - const time_t now = time(NULL); + const icaltime_t now = icaltime(NULL); - if (!gmtime_r(&now, &local)) + if (!icalgmtime_r(&now, &local)) return 0; tt = tm_to_icaltimetype(&local); diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index ec096c19..8abae608 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -127,7 +127,7 @@ typedef struct typedef struct { - time_t transition; + icaltime_t transition; long int change; } leap; //@endcond @@ -445,7 +445,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) const char *zonedir; FILE *f = NULL; char *full_path = NULL; - time_t *transitions = NULL; + icaltime_t*transitions = NULL; char *r_trans = NULL, *temp; int *trans_idx = NULL; ttinfo *types = NULL; @@ -507,7 +507,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) break; case '2': case '3': - if (sizeof(time_t) == 8) { + if (sizeof(icaltime_t) == 8) { trans_size = 8; } break; @@ -549,7 +549,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) } /* read data block */ - transitions = icalmemory_new_buffer((num_trans+1) * sizeof(time_t)); // +1 for TZ string + transitions = icalmemory_new_buffer((num_trans+1) * sizeof(icaltime_t)); // +1 for TZ string if (transitions == NULL) { icalerror_set_errno(ICAL_NEWFAILED_ERROR); goto error; @@ -566,7 +566,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) } if (num_trans == 0) { // Add one transition using time type 0 at 19011213T204552Z - transitions[0] = (time_t)INT_MIN; + transitions[0] = (icaltime_t)INT_MIN; trans_idx[0] = 0; num_trans = 1; } else { @@ -575,9 +575,9 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) for (i = 0; i < num_trans; i++) { trans_idx[i] = fgetc(f); if (trans_size == 8) { - transitions[i] = (time_t) decode64(r_trans); + transitions[i] = (icaltime_t) decode64(r_trans); } else { - transitions[i] = (time_t) decode(r_trans); + transitions[i] = (icaltime_t) decode(r_trans); } r_trans += trans_size; } @@ -622,9 +622,9 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) EFREAD(c, (size_t)trans_size, 1, f); if (trans_size == 8) { - leaps[i].transition = (time_t)decode64(c); + leaps[i].transition = (icaltime_t)decode64(c); } else { - leaps[i].transition = (time_t)decode(c); + leaps[i].transition = (icaltime_t)decode(c); } EFREAD(c, 4, 1, f); @@ -757,7 +757,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) for (i = 0; i < num_trans; i++) { int by_day = 0; - time_t start; + icaltime_t start; enum icalrecurrencetype_weekday dow; prev_idx = idx; diff --git a/src/libicalss/icalspanlist.c b/src/libicalss/icalspanlist.c index a0f40ef6..6b042b12 100644 --- a/src/libicalss/icalspanlist.c +++ b/src/libicalss/icalspanlist.c @@ -229,7 +229,7 @@ struct icalperiodtype icalspanlist_next_free_time(icalspanlist *sl, struct icalt struct icalperiodtype period; struct icaltime_span *s; - time_t rangett = icaltime_as_timet(t); + icaltime_t rangett = icaltime_as_timet(t); period.start = icaltime_null_time(); period.end = icaltime_null_time(); @@ -290,17 +290,17 @@ struct icalperiodtype icalspanlist_next_free_time(icalspanlist *sl, struct icalt int *icalspanlist_as_freebusy_matrix(icalspanlist *sl, int delta_t) { pvl_elem itr; - time_t spanduration_secs; + icaltime_t spanduration_secs; int *matrix; - time_t matrix_slots; - time_t sl_start, sl_end; + icaltime_t matrix_slots; + icaltime_t sl_start, sl_end; icalerror_check_arg_rz((sl != 0), "spanlist"); if (!delta_t) delta_t = 3600; - /* calculate the start and end time as time_t **/ + /* calculate the start and end time as icaltime_t **/ sl_start = icaltime_as_timet_with_zone(sl->start, icaltimezone_get_utc_timezone()); sl_end = icaltime_as_timet_with_zone(sl->end, icaltimezone_get_utc_timezone()); @@ -333,9 +333,9 @@ int *icalspanlist_as_freebusy_matrix(icalspanlist *sl, int delta_t) struct icaltime_span *s = (struct icaltime_span *)pvl_data(itr); if (s && s->is_busy == 1) { - time_t offset_start = s->start / delta_t - sl_start / delta_t; - time_t offset_end = (s->end - 1) / delta_t - sl_start / delta_t + 1; - time_t i; + icaltime_t offset_start = s->start / delta_t - sl_start / delta_t; + icaltime_t offset_end = (s->end - 1) / delta_t - sl_start / delta_t + 1; + icaltime_t i; if (offset_end >= matrix_slots) offset_end = matrix_slots - 1; diff --git a/src/libicalvcal/icalvcal.c b/src/libicalvcal/icalvcal.c index a4389603..29b3c1bf 100644 --- a/src/libicalvcal/icalvcal.c +++ b/src/libicalvcal/icalvcal.c @@ -118,11 +118,11 @@ static const char *get_string_value(VObject *object, int *free_string) static void convert_floating_time_to_utc(struct icaltimetype *itt) { struct tm tmp_tm, utc_tm; - time_t t; + icaltime_t t; /* We assume the floating time is using the current Unix timezone. - So we convert to a time_t using mktime(), and then back to a struct tm - using gmtime, so it is the UTC time. */ + So we convert to a icaltime_t using icalmktime(), and then back to a struct tm + using icalgmtime_r, so it is the UTC time. */ tmp_tm.tm_year = itt->year - 1900; tmp_tm.tm_mon = itt->month - 1; tmp_tm.tm_mday = itt->day; @@ -131,11 +131,11 @@ static void convert_floating_time_to_utc(struct icaltimetype *itt) tmp_tm.tm_sec = itt->second; tmp_tm.tm_isdst = -1; - /* Convert to a time_t. */ + /* Convert to a icaltime_t. */ t = mktime(&tmp_tm); /* Now convert back to a struct tm, but with a UTC time. */ - if (!gmtime_r(&t, &utc_tm)) { + if (!icalgmtime_r(&t, &utc_tm)) { *itt = itt->is_date ? icaltime_null_date () : icaltime_null_time (); return; } diff --git a/src/test/recur.c b/src/test/recur.c index 01552802..e776763f 100644 --- a/src/test/recur.c +++ b/src/test/recur.c @@ -57,7 +57,7 @@ int main(int argc, char *argv[]) icalproperty *desc, *dtstart, *rrule; struct icalrecurrencetype recur; icalrecur_iterator *ritr; - time_t tt; + icaltime_t tt; const char *file; icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL); diff --git a/src/test/regression-component.c b/src/test/regression-component.c index caed9af4..9366ccdc 100644 --- a/src/test/regression-component.c +++ b/src/test/regression-component.c @@ -310,9 +310,9 @@ static void print_span(int c, struct icaltime_span span) */ void test_icalcomponent_get_span() { - time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, + icaltime_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, Sat Nov 4 15:00:00 PST 2000 */ - time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 + icaltime_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 Sat Nov 4 16:00:00 PST 2000 */ struct icaldurationtype dur; struct icaltime_span span; @@ -321,7 +321,7 @@ void test_icalcomponent_get_span() int tnum = 0; /** test 0 - * Direct assigning time_t means they will be interpreted as UTC + * Direct assigning icaltime_t means they will be interpreted as UTC */ span.start = tm1; span.end = tm2; diff --git a/src/test/regression-recur.c b/src/test/regression-recur.c index e11112e6..d25052d8 100644 --- a/src/test/regression-recur.c +++ b/src/test/regression-recur.c @@ -83,7 +83,7 @@ void test_recur_file() icalproperty *desc, *dtstart, *rrule; struct icalrecurrencetype recur; icalrecur_iterator *ritr; - time_t tt; + icaltime_t tt; const char *file; int num_recurs_found = 0; icalfileset_options options = { O_RDONLY, 0644, 0, NULL }; diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index 9987a640..937a808d 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -33,12 +33,12 @@ int VERBOSE = 1; static char ictt_str[1024]; -const char *ical_timet_string(const time_t t) +const char *ical_timet_string(const icaltime_t t) { struct tm tmp, stm; memset(&tmp, 0, sizeof(tmp)); - if (gmtime_r(&t, &tmp)) { + if (icalgmtime_r(&t, &tmp)) { stm = tmp; } else { memset(&stm, 0, sizeof(stm)); @@ -71,7 +71,7 @@ const char *ictt_as_string(struct icaltimetype t) char *icaltime_as_ctime(struct icaltimetype t) { - time_t tt; + icaltime_t tt; tt = icaltime_as_timet(t); snprintf(ictt_str, sizeof(ictt_str), "%s", ctime(&tt)); diff --git a/src/test/regression.c b/src/test/regression.c index b32bc37b..1bf0837b 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -1226,7 +1226,7 @@ void print_occur(struct icalrecurrencetype recur, struct icaltimetype start) struct icaltimetype next; icalrecur_iterator *ritr; - time_t tt = icaltime_as_timet(start); + icaltime_t tt = icaltime_as_timet(start); printf("#### %s\n", icalrecurrencetype_as_string(&recur)); printf("#### %s\n", ctime(&tt)); @@ -1246,7 +1246,7 @@ void test_recur() { struct icalrecurrencetype rt; struct icaltimetype start; - time_t array[25]; + icaltime_t array[25]; int i; rt = icalrecurrencetype_from_string( @@ -1359,8 +1359,8 @@ void test_recur_encode_by_month() void test_expand_recurrence() { - time_t arr[10]; - time_t now = 931057385; + icaltime_t arr[10]; + icaltime_t now = 931057385; int i, numfound = 0; icalrecur_expand_recurrence("FREQ=MONTHLY;BYDAY=MO,WE", now, 5, arr); @@ -1400,7 +1400,7 @@ void icalrecurrencetype_test() struct icalrecurrencetype r = icalvalue_get_recur(v); struct icaltimetype t = icaltime_from_timet_with_zone(time(0), 0, NULL); struct icaltimetype next; - time_t tt; + icaltime_t tt; struct icalrecur_iterator_impl *itr = (struct icalrecur_iterator_impl *)icalrecur_iterator_new(r, t); @@ -1776,8 +1776,8 @@ void do_test_time(const char *zone) { struct icaltimetype ictt, icttutc, icttzone, icttdayl, icttla, icttny, icttphoenix, icttlocal, icttnorm; - time_t tt, tt2, tt_p200; - time_t offset_tz; + icaltime_t tt, tt2, tt_p200; + icaltime_t offset_tz; icalvalue *v; short day_of_week, start_day_of_week, day_of_year; icaltimezone *azone, *utczone; @@ -1790,7 +1790,7 @@ void do_test_time(const char *zone) /* Test new API */ if (VERBOSE) { - printf("\n---> From time_t \n"); + printf("\n---> From icaltime_t \n"); } tt = 1025127869; /* stick with a constant... Wed, 26 Jun 2002 21:44:29 GMT */ @@ -1800,7 +1800,7 @@ void do_test_time(const char *zone) } ictt = icaltime_from_timet_with_zone(tt, 0, NULL); - str_is("Floating time from time_t", ictt_as_string(ictt), "2002-06-26 21:44:29 (floating)"); + str_is("Floating time from icaltime_t", ictt_as_string(ictt), "2002-06-26 21:44:29 (floating)"); ictt = icaltime_from_timet_with_zone(tt, 0, azone); #if ADD_TESTS_REQUIRING_INVESTIGATION @@ -1878,7 +1878,7 @@ void do_test_time(const char *zone) tt = icaltime_as_timet(ictt); - ok("test icaltime -> time_t for 20001103T183030Z", (tt == 973276230)); + ok("test icaltime -> icaltime_t for 20001103T183030Z", (tt == 973276230)); /* Fri Nov 3 10:30:30 PST 2000 in PST Fri Nov 3 18:30:30 PST 2000 in UTC */ @@ -1903,7 +1903,7 @@ void do_test_time(const char *zone) /** add test case here.. **/ if (VERBOSE) { - printf("\n As time_t \n"); + printf("\n As icaltime_t \n"); } tt2 = icaltime_as_timet(ictt); @@ -1923,7 +1923,7 @@ void do_test_time(const char *zone) printf("20001103T183030 : %s\n", ictt_as_string(icttlocal)); } - offset_tz = (time_t) (-icaltimezone_get_utc_offset_of_utc_time(azone, &ictt, 0)); + offset_tz = (icaltime_t) (-icaltimezone_get_utc_offset_of_utc_time(azone, &ictt, 0)); if (VERBOSE) printf("offset_tz : %ld\n", (long)offset_tz); @@ -2279,12 +2279,12 @@ void test_overlaps() { icalcomponent *cset, *c; icalset *set; - time_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, + icaltime_t tm1 = 973378800; /*Sat Nov 4 23:00:00 UTC 2000, Sat Nov 4 15:00:00 PST 2000 */ - time_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 + icaltime_t tm2 = 973382400; /*Sat Nov 5 00:00:00 UTC 2000 Sat Nov 4 16:00:00 PST 2000 */ - time_t hh = 1800; /* one half hour */ + icaltime_t hh = 1800; /* one half hour */ icalfileset_options options = { O_RDONLY, 0644, 0, NULL }; set = icalset_new(ICAL_FILE_SET, TEST_DATADIR "/overlaps.ics", &options); diff --git a/src/test/regression.h b/src/test/regression.h index 9c5aab88..100dab00 100644 --- a/src/test/regression.h +++ b/src/test/regression.h @@ -52,7 +52,7 @@ extern "C" void test_bdbset(void); /* regression-utils.c */ - const char *ical_timet_string(const time_t t); + const char *ical_timet_string(const icaltime_t t); const char *ictt_as_string(struct icaltimetype t); char *icaltime_as_ctime(struct icaltimetype t); diff --git a/src/test/timezones.c b/src/test/timezones.c index 935e912d..6491f6fc 100644 --- a/src/test/timezones.c +++ b/src/test/timezones.c @@ -39,9 +39,9 @@ int main() int verbose = 0; int day; - time_t start_time; + icaltime_t start_time; struct tm start_tm; - time_t curr_time; + icaltime_t curr_time; struct tm curr_tm; struct icaltimetype curr_tt; int failed = 0; @@ -82,7 +82,7 @@ int main() * determine current local time and date: always use midday in * the current zone and first day of first month in the year */ - start_time = time(NULL); + start_time = icaltime(NULL); (void)localtime_r(&start_time, &start_tm); start_tm.tm_hour = 12; start_tm.tm_min = 0; @@ -114,7 +114,7 @@ int main() if (verbose || curr_failed != failed) { struct tm utc_tm; - if (!gmtime_r(&curr_time, &utc_tm)) + if (!icalgmtime_r(&curr_time, &utc_tm)) memset(&utc_tm, 0, sizeof(utc_tm)); printf( -- cgit v1.2.1 From 4c264b0d53ad2cb3c8b4f30d265727ef22102cfb Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Wed, 23 Feb 2022 17:44:21 +0100 Subject: icalarray - As we removed `#include ` from `icaltime.h`, it turns out, that `#include ` was missing in `icalarray.h`. --- src/libical/icalarray.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libical/icalarray.h b/src/libical/icalarray.h index 2fc9fb26..a7f35763 100644 --- a/src/libical/icalarray.h +++ b/src/libical/icalarray.h @@ -27,6 +27,8 @@ #include "libical_ical_export.h" +#include + /** * @typedef icalarray * @brief A struct representing an icalarray object -- cgit v1.2.1 From 12fc125c334ad9029be5a72eb4ec5dac6276ba10 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Sun, 6 Mar 2022 22:25:07 +0100 Subject: Use `icalctime`, `icalmktime`, `icallocaltime_r` instead of `ctime`, etc. --- src/libicalss/icalspanlist.c | 4 ++-- src/libicalvcal/icalvcal.c | 2 +- src/test/recur.c | 8 ++++---- src/test/regression-recur.c | 8 ++++---- src/test/regression-utils.c | 2 +- src/test/regression.c | 20 ++++++++++---------- src/test/timezones.c | 6 +++--- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/libicalss/icalspanlist.c b/src/libicalss/icalspanlist.c index 6b042b12..9ba02b44 100644 --- a/src/libicalss/icalspanlist.c +++ b/src/libicalss/icalspanlist.c @@ -215,8 +215,8 @@ void icalspanlist_dump(icalspanlist *sl) for (itr = pvl_head(sl->spans); itr != 0; itr = pvl_next(itr)) { struct icaltime_span *s = (struct icaltime_span *)pvl_data(itr); if (s) { - printf("#%02d %d start: %s", ++i, s->is_busy, ctime(&s->start)); - printf(" end : %s", ctime(&s->end)); + printf("#%02d %d start: %s", ++i, s->is_busy, icalctime(&s->start)); + printf(" end : %s", icalctime(&s->end)); } } } diff --git a/src/libicalvcal/icalvcal.c b/src/libicalvcal/icalvcal.c index 29b3c1bf..e6df7b29 100644 --- a/src/libicalvcal/icalvcal.c +++ b/src/libicalvcal/icalvcal.c @@ -132,7 +132,7 @@ static void convert_floating_time_to_utc(struct icaltimetype *itt) tmp_tm.tm_isdst = -1; /* Convert to a icaltime_t. */ - t = mktime(&tmp_tm); + t = icalmktime(&tmp_tm); /* Now convert back to a struct tm, but with a UTC time. */ if (!icalgmtime_r(&t, &utc_tm)) { diff --git a/src/test/recur.c b/src/test/recur.c index e776763f..80f4a2b9 100644 --- a/src/test/recur.c +++ b/src/test/recur.c @@ -45,8 +45,8 @@ static void recur_callback(icalcomponent *comp, struct icaltime_span *span, void { _unused(comp); _unused(data); - printf("cb: %s", ctime(&span->start)); - printf(" %s\n", ctime(&span->end)); + printf("cb: %s", icalctime(&span->start)); + printf(" %s\n", icalctime(&span->end)); } int main(int argc, char *argv[]) @@ -114,7 +114,7 @@ int main(int argc, char *argv[]) tt = icaltime_as_timet(start); - printf("#### %s\n", ctime(&tt)); + printf("#### %s\n", icalctime(&tt)); icalrecur_iterator_free(ritr); @@ -123,7 +123,7 @@ int main(int argc, char *argv[]) !icaltime_is_null_time(next); next = icalrecur_iterator_next(ritr)) { tt = icaltime_as_timet(next); - printf(" %s", ctime(&tt)); + printf(" %s", icalctime(&tt)); } icalrecur_iterator_free(ritr); diff --git a/src/test/regression-recur.c b/src/test/regression-recur.c index d25052d8..4c3a7c6a 100644 --- a/src/test/regression-recur.c +++ b/src/test/regression-recur.c @@ -69,8 +69,8 @@ static void recur_callback(icalcomponent *comp, struct icaltime_span *span, void _unused(comp); if (VERBOSE) { - printf("recur: %s", ctime(&span->start)); - printf(" %s", ctime(&span->end)); + printf("recur: %s", icalctime(&span->start)); + printf(" %s", icalctime(&span->end)); } *num_recurs = *num_recurs + 1; } @@ -147,7 +147,7 @@ void test_recur_file() tt = icaltime_as_timet(start); if (VERBOSE) - printf("#### %s\n", ctime(&tt)); + printf("#### %s\n", icalctime(&tt)); icalrecur_iterator_free(ritr); @@ -157,7 +157,7 @@ void test_recur_file() next = icalrecur_iterator_next(ritr)) { tt = icaltime_as_timet(next); if (VERBOSE) - printf(" %s", ctime(&tt)); + printf(" %s", icalctime(&tt)); } icalrecur_iterator_free(ritr); diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index 937a808d..5673e948 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -74,7 +74,7 @@ char *icaltime_as_ctime(struct icaltimetype t) icaltime_t tt; tt = icaltime_as_timet(t); - snprintf(ictt_str, sizeof(ictt_str), "%s", ctime(&tt)); + snprintf(ictt_str, sizeof(ictt_str), "%s", icalctime(&tt)); return ictt_str; } diff --git a/src/test/regression.c b/src/test/regression.c index 1bf0837b..bced17ab 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -1229,14 +1229,14 @@ void print_occur(struct icalrecurrencetype recur, struct icaltimetype start) icaltime_t tt = icaltime_as_timet(start); printf("#### %s\n", icalrecurrencetype_as_string(&recur)); - printf("#### %s\n", ctime(&tt)); + printf("#### %s\n", icalctime(&tt)); ritr = icalrecur_iterator_new(recur, start); for (next = icalrecur_iterator_next(ritr); !icaltime_is_null_time(next); next = icalrecur_iterator_next(ritr)) { tt = icaltime_as_timet(next); - printf(" %s", ctime(&tt)); + printf(" %s", icalctime(&tt)); } icalrecur_iterator_free(ritr); @@ -1267,7 +1267,7 @@ void test_recur() for (i = 0; i < 25 && array[i] != 0; i++) { if (VERBOSE) { - printf(" %s", ctime(&(array[i]))); + printf(" %s", icalctime(&(array[i]))); } } /* test_increment();*/ @@ -1366,12 +1366,12 @@ void test_expand_recurrence() icalrecur_expand_recurrence("FREQ=MONTHLY;BYDAY=MO,WE", now, 5, arr); if (VERBOSE) - printf("Start %s", ctime(&now)); + printf("Start %s", icalctime(&now)); for (i = 0; i < 5; i++) { numfound++; if (VERBOSE) - printf("i=%d %s\n", i, ctime(&arr[i])); + printf("i=%d %s\n", i, icalctime(&arr[i])); } int_is("Get an array of 5 items", numfound, 5); } @@ -1410,7 +1410,7 @@ void icalrecurrencetype_test() next = icalrecur_iterator_next(itr); tt = icaltime_as_timet(next); - printf("%s", ctime(&tt)); + printf("%s", icalctime(&tt)); } while (!icaltime_is_null_time(next)); @@ -2021,7 +2021,7 @@ void do_test_time(const char *zone) icaltimezone_get_builtin_timezone("America/Phoenix")); if (VERBOSE) { - printf("Orig (ctime): %s\n", ical_timet_string(tt)); + printf("Orig (icalctime): %s\n", ical_timet_string(tt)); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); printf("UTC : %s\n", ictt_as_string(icttutc)); printf("Los Angeles : %s\n", ictt_as_string(icttla)); @@ -2034,7 +2034,7 @@ void do_test_time(const char *zone) if (VERBOSE) { printf("\n Daylight Savings \n"); - printf("Orig (ctime): %s\n", ical_timet_string(tt)); + printf("Orig (icalctime): %s\n", ical_timet_string(tt)); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); printf("NY : %s\n", ictt_as_string(icttny)); } @@ -2062,7 +2062,7 @@ void do_test_time(const char *zone) icaltimezone_get_builtin_timezone("America/Los_Angeles")); if (VERBOSE) { - printf("\nOrig (ctime): %s\n", ical_timet_string(tt)); + printf("\nOrig (icalctime): %s\n", ical_timet_string(tt)); printf("Orig (ical) : %s\n", ictt_as_string(ictt)); printf("LA : %s\n", ictt_as_string(icttla)); } @@ -2881,7 +2881,7 @@ void test_doy() stm.tm_year = tt1.year - 1900; stm.tm_isdst = -1; - (void)mktime(&stm); + (void)icalmktime(&stm); doy = icaltime_day_of_year(tt1); diff --git a/src/test/timezones.c b/src/test/timezones.c index 6491f6fc..3018802b 100644 --- a/src/test/timezones.c +++ b/src/test/timezones.c @@ -83,18 +83,18 @@ int main() * the current zone and first day of first month in the year */ start_time = icaltime(NULL); - (void)localtime_r(&start_time, &start_tm); + (void)icallocaltime_r(&start_time, &start_tm); start_tm.tm_hour = 12; start_tm.tm_min = 0; start_tm.tm_sec = 0; start_tm.tm_mday = 1; start_tm.tm_mon = 0; - start_time = mktime(&start_tm); + start_time = icalmktime(&start_tm); /* check time conversion for the next 365 days */ for (day = 0, curr_time = start_time; day < 365; day++, curr_time += 24 * 60 * 60) { /* determine date/time with glibc */ - localtime_r(&curr_time, &curr_tm); + icallocaltime_r(&curr_time, &curr_tm); /* determine date/time with libical */ curr_tt = icaltime_from_timet_with_zone(curr_time, 0, utc_zone); curr_tt.zone = utc_zone; /* workaround: icaltime_from_timet_with_zone() -- cgit v1.2.1 From 19ca5336c707bb70b3c62805c04fe04e35941d68 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Sun, 6 Mar 2022 22:29:29 +0100 Subject: Migrate icaltime.h to icaltime.h.cmake to allow deeper integration with cmake. --- src/libical/CMakeLists.txt | 7 +- src/libical/ical_file.cmake | 2 +- src/libical/icaltime.h | 427 ------------------------------------------- src/libical/icaltime.h.cmake | 427 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 434 insertions(+), 429 deletions(-) delete mode 100644 src/libical/icaltime.h create mode 100644 src/libical/icaltime.h.cmake diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index aa4311ad..8f14071c 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -6,6 +6,11 @@ configure_file( @ONLY ) +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/icaltime.h.cmake + ${CMAKE_CURRENT_BINARY_DIR}/icaltime.h +) + include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src @@ -405,7 +410,7 @@ install(FILES icalproperty.h icalrecur.h icalrestriction.h - icaltime.h + ${CMAKE_BINARY_DIR}/src/libical/icaltime.h icaltz-util.h icaltimezone.h icaltypes.h diff --git a/src/libical/ical_file.cmake b/src/libical/ical_file.cmake index 8a13d07c..6ea99deb 100644 --- a/src/libical/ical_file.cmake +++ b/src/libical/ical_file.cmake @@ -3,7 +3,7 @@ set(COMBINEDHEADERSICAL ${TOPB}/config_public.h ${TOPB}/src/libical/icalversion.h - ${TOPS}/src/libical/icaltime.h + ${TOPB}/src/libical/icaltime.h ${TOPS}/src/libical/icalduration.h ${TOPS}/src/libical/icalperiod.h ${TOPS}/src/libical/icalenums.h diff --git a/src/libical/icaltime.h b/src/libical/icaltime.h deleted file mode 100644 index c663ba2e..00000000 --- a/src/libical/icaltime.h +++ /dev/null @@ -1,427 +0,0 @@ -/*====================================================================== - FILE: icaltime.h - CREATOR: eric 02 June 2000 - - (C) COPYRIGHT 2000, Eric Busboom - - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - The Original Code is eric. The Initial Developer of the Original - Code is Eric Busboom -======================================================================*/ - -/** @file icaltime.h - * @brief struct icaltimetype is a pseudo-object that abstracts time - * handling. - * - * It can represent either a DATE or a DATE-TIME (floating, UTC or in a - * given timezone), and it keeps track internally of its native timezone. - * - * The typical usage is to call the correct constructor specifying the - * desired timezone. If this is not known until a later time, the - * correct behavior is to specify a NULL timezone and call - * icaltime_convert_to_zone() at a later time. - * - * There are several ways to create a new icaltimetype: - * - * - icaltime_null_time() - * - icaltime_null_date() - * - icaltime_current_time_with_zone() - * - icaltime_today() - * - icaltime_from_timet_with_zone(icaltime_t tm, int is_date, - * icaltimezone *zone) - * - icaltime_from_day_of_year(int doy, int year) - * - * italtimetype objects can be converted to different formats: - * - * - icaltime_as_timet(struct icaltimetype tt) - * - icaltime_as_timet_with_zone(struct icaltimetype tt, - * icaltimezone *zone) - * - icaltime_as_ical_string(struct icaltimetype tt) - * - * Accessor methods include: - * - * - icaltime_get_timezone(struct icaltimetype t) - * - icaltime_get_tzid(struct icaltimetype t) - * - icaltime_set_timezone(struct icaltimetype t, const icaltimezone *zone) - * - icaltime_day_of_year(struct icaltimetype t) - * - icaltime_day_of_week(struct icaltimetype t) - * - icaltime_start_doy_week(struct icaltimetype t, int fdow) - * - icaltime_week_number(struct icaltimetype t) - * - * Query methods include: - * - * - icaltime_is_null_time(struct icaltimetype t) - * - icaltime_is_valid_time(struct icaltimetype t) - * - icaltime_is_date(struct icaltimetype t) - * - icaltime_is_utc(struct icaltimetype t) - * - * Modify, compare and utility methods include: - * - * - icaltime_compare(struct icaltimetype a,struct icaltimetype b) - * - icaltime_compare_date_only(struct icaltimetype a, - * struct icaltimetype b) - * - icaltime_adjust(struct icaltimetype *tt, int days, int hours, - * int minutes, int seconds); - * - icaltime_normalize(struct icaltimetype t); - * - icaltime_convert_to_zone(const struct icaltimetype tt, - * icaltimezone *zone); - */ - -#ifndef ICALTIME_H -#define ICALTIME_H - -#include "libical_ical_export.h" - -#include "config_public.h" - -/* An opaque struct representing a timezone. We declare this here to avoid - a circular dependency. */ -#if !defined(ICALTIMEZONE_DEFINED) -#define ICALTIMEZONE_DEFINED -typedef struct _icaltimezone icaltimezone; -#endif - -/** icaltime_span is returned by icalcomponent_get_span() */ -struct icaltime_span -{ - icaltime_t start; /**< in UTC */ - icaltime_t end; /**< in UTC */ - int is_busy; /**< 1->busy time, 0-> free time */ -}; - -typedef struct icaltime_span icaltime_span; - -struct icaltimetype -{ - int year; /**< Actual year, e.g. 2001. */ - int month; /**< 1 (Jan) to 12 (Dec). */ - int day; - int hour; - int minute; - int second; - - int is_date; /**< 1 -> interpret this as date. */ - - int is_daylight; /**< 1 -> time is in daylight savings time. */ - - const icaltimezone *zone; /**< timezone */ -}; - -typedef struct icaltimetype icaltimetype; - -#define ICALTIMETYPE_INITIALIZER { 0, 0, 0, 0, 0, 0, 0, 0, 0} - -/** @brief Constructor. - * - * @returns A null time, which indicates no time has been set. - * This time represents the beginning of the epoch. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_null_time(void); - -/** @brief Constructor. - * - * @returns A null date, which indicates no time has been set. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_null_date(void); - -/** @brief Convenience constructor. - * - * @returns The current time in the given timezone, as an icaltimetype. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone); - -/** @brief Convenience constructor. - * - * @returns The current day as an icaltimetype, with is_date set. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_today(void); - -/** @brief Constructor. - * - * @param tm The time expressed as seconds past UNIX epoch - * @param is_date Boolean: 1 means we should treat tm as a DATE - * @param zone The timezone tm is in, NULL means to treat tm as a - * floating time - * - * Returns a new icaltime instance, initialized to the given time, - * optionally using the given timezone. - * - * If the caller specifies the is_date param as TRUE, the returned - * object is of DATE type, otherwise the input is meant to be of - * DATE-TIME type. - * If the zone is not specified (NULL zone param) the time is taken - * to be floating, that is, valid in any timezone. Note that, in - * addition to the uses specified in [RFC5545], this can be used - * when doing simple math on couples of times. - * If the zone is specified (UTC or otherwise), it's stored in the - * object and it's used as the native timezone for this object. - * This means that the caller can convert this time to a different - * target timezone with no need to store the source timezone. - * - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_timet_with_zone(const icaltime_t tm, - const int is_date, - const icaltimezone *zone); - -/** @brief Constructor. - * - * Creates a time from an ISO format string. - * - * @todo If the given string specifies a DATE-TIME not in UTC, there - * is no way to know if this is a floating time or really refers to a - * timezone. We should probably add a new constructor: - * icaltime_from_string_with_zone() - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_string(const char *str); - -/** @brief Constructor. - * - * Creates a new time, given a day of year and a year. - * - * Note that Jan 1 is day #1, not 0. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_day_of_year(const int doy, const int year); - -/** - * Returns the time as seconds past the UNIX epoch. - * - * This function probably won't do what you expect. In particular, you should - * only pass an icaltime in UTC, since no conversion is done. Even in that case, - * it's probably better to just use icaltime_as_timet_with_zone(). - */ -LIBICAL_ICAL_EXPORT icaltime_t icaltime_as_timet(const struct icaltimetype); - -/** @brief Returns the time as seconds past the UNIX epoch, using the - * given timezone. - * - * This convenience method combines a call to icaltime_convert_to_zone() - * with a call to icaltime_as_timet(). - * If the input timezone is null, no conversion is done; that is, the - * time is simply returned as icaltime_t in its native timezone. - */ -LIBICAL_ICAL_EXPORT icaltime_t icaltime_as_timet_with_zone(const struct icaltimetype tt, - const icaltimezone *zone); - -/** - * @brief Returns a string represention of the time, in RFC5545 format. - * - * @par Ownership - * The created string is owned by libical. - */ -LIBICAL_ICAL_EXPORT const char *icaltime_as_ical_string(const struct icaltimetype tt); - -/** - * @brief Returns a string represention of the time, in RFC5545 format. - * - * @par Ownership - * The string is owned by the caller. - */ -LIBICAL_ICAL_EXPORT char *icaltime_as_ical_string_r(const struct icaltimetype tt); - -/** @brief Returns the timezone. */ -LIBICAL_ICAL_EXPORT const icaltimezone *icaltime_get_timezone(const struct icaltimetype t); - -/** @brief Returns the tzid, or NULL for a floating time. */ -LIBICAL_ICAL_EXPORT const char *icaltime_get_tzid(const struct icaltimetype t); - -/** @brief Sets the timezone. - * - * Forces the icaltime to be interpreted relative to another timezone. - * The returned time represents the same time as @p t, but relative to - * the new @p zone. - * For example, modifying July 20 1969, 8:17 PM UTC to the EDT time zone - * would return a time representing July 20 1969, 8:17 PM EDT. - * - * If you need to do timezone conversion, applying offset adjustments, - * then you should use icaltime_convert_to_zone instead. - * - * If @p t is of type `DATE`, its timezone is not modified and the returned - * time is an exact copy of @p t. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_set_timezone(struct icaltimetype *t, - const icaltimezone *zone); - -/** - * @brief Returns the day of the year, counting from 1 (Jan 1st). - */ -LIBICAL_ICAL_EXPORT int icaltime_day_of_year(const struct icaltimetype t); - -/** @brief Returns the day of the week of the given time. - * - * Sunday is 1, and Saturday is 7. - */ -LIBICAL_ICAL_EXPORT int icaltime_day_of_week(const struct icaltimetype t); - -/** Returns the day of the year for the first day of the week . */ -/** @brief Returns the day of the year for the first day of the week - * that the given time is within. - * - * This uses the first day of the week that contains the given time, - * which is a Sunday. It returns the day of the year for the resulting - * day. - */ -LIBICAL_ICAL_EXPORT int icaltime_start_doy_week(const struct icaltimetype t, int fdow); - -/** @brief Returns the week number for the week the given time is within. - * - * @todo Doesn't take into account the start day of the - * week. strftime assumes that weeks start on Monday. - */ -LIBICAL_ICAL_EXPORT int icaltime_week_number(const struct icaltimetype t); - -/** @brief Returns true if the time is null. */ -LIBICAL_ICAL_EXPORT int icaltime_is_null_time(const struct icaltimetype t); - -/** - * @brief Returns false if the time is clearly invalid, but is not null. - * - * This is usually the result of creating a new time type but not - * clearing it, or setting one of the flags to an illegal value. - */ -LIBICAL_ICAL_EXPORT int icaltime_is_valid_time(const struct icaltimetype t); - -/** @brief Returns true if time is a DATE. - * - * The options are DATE type, which returns true, or DATE-TIME, which - * returns false. - */ -LIBICAL_ICAL_EXPORT int icaltime_is_date(const struct icaltimetype t); - -/** @brief Returns true if the time is relative to UTC zone. - * - * @todo We should only check the zone. - */ -LIBICAL_ICAL_EXPORT int icaltime_is_utc(const struct icaltimetype t); - -/** - * @brief Returns -1, 0, or 1 to indicate that a is less than b, a - * equals b, or a is greater than b. - * - * This converts both times to the UTC timezone and compares them. - */ -LIBICAL_ICAL_EXPORT int icaltime_compare(const struct icaltimetype a, const struct icaltimetype b); - -/** @brief Like icaltime_compare, but only use the date parts. - * - * This converts both times to the UTC timezone and compares their date - * components. - */ -LIBICAL_ICAL_EXPORT int icaltime_compare_date_only(const struct icaltimetype a, - const struct icaltimetype b); - -/** @brief Like icaltime_compare, but only use the date parts; accepts - * timezone. - * - * This converts both times to the given timezone and compares their date - * components. - */ -LIBICAL_ICAL_EXPORT int icaltime_compare_date_only_tz(const struct icaltimetype a, - const struct icaltimetype b, - icaltimezone *tz); - -/** Adds or subtracts a number of days, hours, minutes and seconds. */ -/** @brief Internal, shouldn't be part of the public API - * - * Adds or subtracts a time from a icaltimetype. This time is given - * as a number of days, hours, minutes and seconds. - * - * @note This function is exactly the same as - * icaltimezone_adjust_change() except for the type of the first - * parameter. - */ -LIBICAL_ICAL_EXPORT void icaltime_adjust(struct icaltimetype *tt, - const int days, const int hours, - const int minutes, const int seconds); - -/** - * @brief Normalizes the icaltime, so all of the time components - * are in their normal ranges. - * - * For instance, given a time with minutes=70, the minutes will be - * reduces to 10, and the hour incremented. This allows the caller - * to do arithmetic on times without worrying about overflow or - * underflow. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_normalize(const struct icaltimetype t); - -/** @brief Converts time to a given timezone. - * - * Converts a time from its native timezone to a given timezone. - * - * If @p tt is a date, the timezone is not converted and the returned - * time is an exact copy of @p tt. - * - * If it's a floating time, the returned object - * represents the same time relative to @p zone. - * For example, if @tt represents 9:30 AM floating and @p zone - * is the GMT timezone, the returned object will represent 9:30 AM GMT. - * - * Otherwise, the time will be converted to @p zone, and its timezone - * property updated to @p zone. - * For example, July 20 1969, 8:17 PM UTC would be converted to July 20 - * 1969, 4:17 PM EDT. - */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, - icaltimezone *zone); - -/** Returns the number of days in the given month. */ -LIBICAL_ICAL_EXPORT int icaltime_days_in_month(const int month, const int year); - -/** - * @brief Returns whether the specified year is a leap year. - * - * Year is the normal year, e.g. 2001. - */ -LIBICAL_ICAL_EXPORT int icaltime_is_leap_year(const int year); - -/** Returns the number of days in this year. */ -LIBICAL_ICAL_EXPORT int icaltime_days_in_year(const int year); - -/** - * @brief Builds an icaltimespan given a start time, end time and busy value. - * - * @param dtstart The beginning time of the span, can be a date-time - * or just a date. - * @param dtend The end time of the span. - * @param is_busy A boolean value, 0/1. - * @returns A span using the supplied values. The times are specified in UTC. - */ -LIBICAL_ICAL_EXPORT struct icaltime_span icaltime_span_new(struct icaltimetype dtstart, - struct icaltimetype dtend, int is_busy); - -/** @brief Returns true if the two spans overlap. - * - * @param s1 First span to test - * @param s2 Second span to test - * @return boolean value - * - * The result is calculated by testing if the start time of s1 is contained - * by the s2 span, or if the end time of s1 is contained by the s2 span. - * - * Also returns true if the spans are equal. - * - * Note, this will return false if the spans are adjacent. - */ -LIBICAL_ICAL_EXPORT int icaltime_span_overlaps(icaltime_span *s1, icaltime_span *s2); - -/** @brief Returns true if the span is totally within the containing - * span. - * - * @param s The span to test for. - * @param container The span to test against. - * @return boolean value. - * - */ -LIBICAL_ICAL_EXPORT int icaltime_span_contains(icaltime_span *s, icaltime_span *container); - -#endif /* !ICALTIME_H */ diff --git a/src/libical/icaltime.h.cmake b/src/libical/icaltime.h.cmake new file mode 100644 index 00000000..c663ba2e --- /dev/null +++ b/src/libical/icaltime.h.cmake @@ -0,0 +1,427 @@ +/*====================================================================== + FILE: icaltime.h + CREATOR: eric 02 June 2000 + + (C) COPYRIGHT 2000, Eric Busboom + + This library is free software; you can redistribute it and/or modify + it under the terms of either: + + The LGPL as published by the Free Software Foundation, version + 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html + + Or: + + The Mozilla Public License Version 2.0. You may obtain a copy of + the License at https://www.mozilla.org/MPL/ + + The Original Code is eric. The Initial Developer of the Original + Code is Eric Busboom +======================================================================*/ + +/** @file icaltime.h + * @brief struct icaltimetype is a pseudo-object that abstracts time + * handling. + * + * It can represent either a DATE or a DATE-TIME (floating, UTC or in a + * given timezone), and it keeps track internally of its native timezone. + * + * The typical usage is to call the correct constructor specifying the + * desired timezone. If this is not known until a later time, the + * correct behavior is to specify a NULL timezone and call + * icaltime_convert_to_zone() at a later time. + * + * There are several ways to create a new icaltimetype: + * + * - icaltime_null_time() + * - icaltime_null_date() + * - icaltime_current_time_with_zone() + * - icaltime_today() + * - icaltime_from_timet_with_zone(icaltime_t tm, int is_date, + * icaltimezone *zone) + * - icaltime_from_day_of_year(int doy, int year) + * + * italtimetype objects can be converted to different formats: + * + * - icaltime_as_timet(struct icaltimetype tt) + * - icaltime_as_timet_with_zone(struct icaltimetype tt, + * icaltimezone *zone) + * - icaltime_as_ical_string(struct icaltimetype tt) + * + * Accessor methods include: + * + * - icaltime_get_timezone(struct icaltimetype t) + * - icaltime_get_tzid(struct icaltimetype t) + * - icaltime_set_timezone(struct icaltimetype t, const icaltimezone *zone) + * - icaltime_day_of_year(struct icaltimetype t) + * - icaltime_day_of_week(struct icaltimetype t) + * - icaltime_start_doy_week(struct icaltimetype t, int fdow) + * - icaltime_week_number(struct icaltimetype t) + * + * Query methods include: + * + * - icaltime_is_null_time(struct icaltimetype t) + * - icaltime_is_valid_time(struct icaltimetype t) + * - icaltime_is_date(struct icaltimetype t) + * - icaltime_is_utc(struct icaltimetype t) + * + * Modify, compare and utility methods include: + * + * - icaltime_compare(struct icaltimetype a,struct icaltimetype b) + * - icaltime_compare_date_only(struct icaltimetype a, + * struct icaltimetype b) + * - icaltime_adjust(struct icaltimetype *tt, int days, int hours, + * int minutes, int seconds); + * - icaltime_normalize(struct icaltimetype t); + * - icaltime_convert_to_zone(const struct icaltimetype tt, + * icaltimezone *zone); + */ + +#ifndef ICALTIME_H +#define ICALTIME_H + +#include "libical_ical_export.h" + +#include "config_public.h" + +/* An opaque struct representing a timezone. We declare this here to avoid + a circular dependency. */ +#if !defined(ICALTIMEZONE_DEFINED) +#define ICALTIMEZONE_DEFINED +typedef struct _icaltimezone icaltimezone; +#endif + +/** icaltime_span is returned by icalcomponent_get_span() */ +struct icaltime_span +{ + icaltime_t start; /**< in UTC */ + icaltime_t end; /**< in UTC */ + int is_busy; /**< 1->busy time, 0-> free time */ +}; + +typedef struct icaltime_span icaltime_span; + +struct icaltimetype +{ + int year; /**< Actual year, e.g. 2001. */ + int month; /**< 1 (Jan) to 12 (Dec). */ + int day; + int hour; + int minute; + int second; + + int is_date; /**< 1 -> interpret this as date. */ + + int is_daylight; /**< 1 -> time is in daylight savings time. */ + + const icaltimezone *zone; /**< timezone */ +}; + +typedef struct icaltimetype icaltimetype; + +#define ICALTIMETYPE_INITIALIZER { 0, 0, 0, 0, 0, 0, 0, 0, 0} + +/** @brief Constructor. + * + * @returns A null time, which indicates no time has been set. + * This time represents the beginning of the epoch. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_null_time(void); + +/** @brief Constructor. + * + * @returns A null date, which indicates no time has been set. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_null_date(void); + +/** @brief Convenience constructor. + * + * @returns The current time in the given timezone, as an icaltimetype. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_current_time_with_zone(const icaltimezone *zone); + +/** @brief Convenience constructor. + * + * @returns The current day as an icaltimetype, with is_date set. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_today(void); + +/** @brief Constructor. + * + * @param tm The time expressed as seconds past UNIX epoch + * @param is_date Boolean: 1 means we should treat tm as a DATE + * @param zone The timezone tm is in, NULL means to treat tm as a + * floating time + * + * Returns a new icaltime instance, initialized to the given time, + * optionally using the given timezone. + * + * If the caller specifies the is_date param as TRUE, the returned + * object is of DATE type, otherwise the input is meant to be of + * DATE-TIME type. + * If the zone is not specified (NULL zone param) the time is taken + * to be floating, that is, valid in any timezone. Note that, in + * addition to the uses specified in [RFC5545], this can be used + * when doing simple math on couples of times. + * If the zone is specified (UTC or otherwise), it's stored in the + * object and it's used as the native timezone for this object. + * This means that the caller can convert this time to a different + * target timezone with no need to store the source timezone. + * + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_timet_with_zone(const icaltime_t tm, + const int is_date, + const icaltimezone *zone); + +/** @brief Constructor. + * + * Creates a time from an ISO format string. + * + * @todo If the given string specifies a DATE-TIME not in UTC, there + * is no way to know if this is a floating time or really refers to a + * timezone. We should probably add a new constructor: + * icaltime_from_string_with_zone() + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_string(const char *str); + +/** @brief Constructor. + * + * Creates a new time, given a day of year and a year. + * + * Note that Jan 1 is day #1, not 0. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_from_day_of_year(const int doy, const int year); + +/** + * Returns the time as seconds past the UNIX epoch. + * + * This function probably won't do what you expect. In particular, you should + * only pass an icaltime in UTC, since no conversion is done. Even in that case, + * it's probably better to just use icaltime_as_timet_with_zone(). + */ +LIBICAL_ICAL_EXPORT icaltime_t icaltime_as_timet(const struct icaltimetype); + +/** @brief Returns the time as seconds past the UNIX epoch, using the + * given timezone. + * + * This convenience method combines a call to icaltime_convert_to_zone() + * with a call to icaltime_as_timet(). + * If the input timezone is null, no conversion is done; that is, the + * time is simply returned as icaltime_t in its native timezone. + */ +LIBICAL_ICAL_EXPORT icaltime_t icaltime_as_timet_with_zone(const struct icaltimetype tt, + const icaltimezone *zone); + +/** + * @brief Returns a string represention of the time, in RFC5545 format. + * + * @par Ownership + * The created string is owned by libical. + */ +LIBICAL_ICAL_EXPORT const char *icaltime_as_ical_string(const struct icaltimetype tt); + +/** + * @brief Returns a string represention of the time, in RFC5545 format. + * + * @par Ownership + * The string is owned by the caller. + */ +LIBICAL_ICAL_EXPORT char *icaltime_as_ical_string_r(const struct icaltimetype tt); + +/** @brief Returns the timezone. */ +LIBICAL_ICAL_EXPORT const icaltimezone *icaltime_get_timezone(const struct icaltimetype t); + +/** @brief Returns the tzid, or NULL for a floating time. */ +LIBICAL_ICAL_EXPORT const char *icaltime_get_tzid(const struct icaltimetype t); + +/** @brief Sets the timezone. + * + * Forces the icaltime to be interpreted relative to another timezone. + * The returned time represents the same time as @p t, but relative to + * the new @p zone. + * For example, modifying July 20 1969, 8:17 PM UTC to the EDT time zone + * would return a time representing July 20 1969, 8:17 PM EDT. + * + * If you need to do timezone conversion, applying offset adjustments, + * then you should use icaltime_convert_to_zone instead. + * + * If @p t is of type `DATE`, its timezone is not modified and the returned + * time is an exact copy of @p t. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_set_timezone(struct icaltimetype *t, + const icaltimezone *zone); + +/** + * @brief Returns the day of the year, counting from 1 (Jan 1st). + */ +LIBICAL_ICAL_EXPORT int icaltime_day_of_year(const struct icaltimetype t); + +/** @brief Returns the day of the week of the given time. + * + * Sunday is 1, and Saturday is 7. + */ +LIBICAL_ICAL_EXPORT int icaltime_day_of_week(const struct icaltimetype t); + +/** Returns the day of the year for the first day of the week . */ +/** @brief Returns the day of the year for the first day of the week + * that the given time is within. + * + * This uses the first day of the week that contains the given time, + * which is a Sunday. It returns the day of the year for the resulting + * day. + */ +LIBICAL_ICAL_EXPORT int icaltime_start_doy_week(const struct icaltimetype t, int fdow); + +/** @brief Returns the week number for the week the given time is within. + * + * @todo Doesn't take into account the start day of the + * week. strftime assumes that weeks start on Monday. + */ +LIBICAL_ICAL_EXPORT int icaltime_week_number(const struct icaltimetype t); + +/** @brief Returns true if the time is null. */ +LIBICAL_ICAL_EXPORT int icaltime_is_null_time(const struct icaltimetype t); + +/** + * @brief Returns false if the time is clearly invalid, but is not null. + * + * This is usually the result of creating a new time type but not + * clearing it, or setting one of the flags to an illegal value. + */ +LIBICAL_ICAL_EXPORT int icaltime_is_valid_time(const struct icaltimetype t); + +/** @brief Returns true if time is a DATE. + * + * The options are DATE type, which returns true, or DATE-TIME, which + * returns false. + */ +LIBICAL_ICAL_EXPORT int icaltime_is_date(const struct icaltimetype t); + +/** @brief Returns true if the time is relative to UTC zone. + * + * @todo We should only check the zone. + */ +LIBICAL_ICAL_EXPORT int icaltime_is_utc(const struct icaltimetype t); + +/** + * @brief Returns -1, 0, or 1 to indicate that a is less than b, a + * equals b, or a is greater than b. + * + * This converts both times to the UTC timezone and compares them. + */ +LIBICAL_ICAL_EXPORT int icaltime_compare(const struct icaltimetype a, const struct icaltimetype b); + +/** @brief Like icaltime_compare, but only use the date parts. + * + * This converts both times to the UTC timezone and compares their date + * components. + */ +LIBICAL_ICAL_EXPORT int icaltime_compare_date_only(const struct icaltimetype a, + const struct icaltimetype b); + +/** @brief Like icaltime_compare, but only use the date parts; accepts + * timezone. + * + * This converts both times to the given timezone and compares their date + * components. + */ +LIBICAL_ICAL_EXPORT int icaltime_compare_date_only_tz(const struct icaltimetype a, + const struct icaltimetype b, + icaltimezone *tz); + +/** Adds or subtracts a number of days, hours, minutes and seconds. */ +/** @brief Internal, shouldn't be part of the public API + * + * Adds or subtracts a time from a icaltimetype. This time is given + * as a number of days, hours, minutes and seconds. + * + * @note This function is exactly the same as + * icaltimezone_adjust_change() except for the type of the first + * parameter. + */ +LIBICAL_ICAL_EXPORT void icaltime_adjust(struct icaltimetype *tt, + const int days, const int hours, + const int minutes, const int seconds); + +/** + * @brief Normalizes the icaltime, so all of the time components + * are in their normal ranges. + * + * For instance, given a time with minutes=70, the minutes will be + * reduces to 10, and the hour incremented. This allows the caller + * to do arithmetic on times without worrying about overflow or + * underflow. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_normalize(const struct icaltimetype t); + +/** @brief Converts time to a given timezone. + * + * Converts a time from its native timezone to a given timezone. + * + * If @p tt is a date, the timezone is not converted and the returned + * time is an exact copy of @p tt. + * + * If it's a floating time, the returned object + * represents the same time relative to @p zone. + * For example, if @tt represents 9:30 AM floating and @p zone + * is the GMT timezone, the returned object will represent 9:30 AM GMT. + * + * Otherwise, the time will be converted to @p zone, and its timezone + * property updated to @p zone. + * For example, July 20 1969, 8:17 PM UTC would be converted to July 20 + * 1969, 4:17 PM EDT. + */ +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_convert_to_zone(const struct icaltimetype tt, + icaltimezone *zone); + +/** Returns the number of days in the given month. */ +LIBICAL_ICAL_EXPORT int icaltime_days_in_month(const int month, const int year); + +/** + * @brief Returns whether the specified year is a leap year. + * + * Year is the normal year, e.g. 2001. + */ +LIBICAL_ICAL_EXPORT int icaltime_is_leap_year(const int year); + +/** Returns the number of days in this year. */ +LIBICAL_ICAL_EXPORT int icaltime_days_in_year(const int year); + +/** + * @brief Builds an icaltimespan given a start time, end time and busy value. + * + * @param dtstart The beginning time of the span, can be a date-time + * or just a date. + * @param dtend The end time of the span. + * @param is_busy A boolean value, 0/1. + * @returns A span using the supplied values. The times are specified in UTC. + */ +LIBICAL_ICAL_EXPORT struct icaltime_span icaltime_span_new(struct icaltimetype dtstart, + struct icaltimetype dtend, int is_busy); + +/** @brief Returns true if the two spans overlap. + * + * @param s1 First span to test + * @param s2 Second span to test + * @return boolean value + * + * The result is calculated by testing if the start time of s1 is contained + * by the s2 span, or if the end time of s1 is contained by the s2 span. + * + * Also returns true if the spans are equal. + * + * Note, this will return false if the spans are adjacent. + */ +LIBICAL_ICAL_EXPORT int icaltime_span_overlaps(icaltime_span *s1, icaltime_span *s2); + +/** @brief Returns true if the span is totally within the containing + * span. + * + * @param s The span to test for. + * @param container The span to test against. + * @return boolean value. + * + */ +LIBICAL_ICAL_EXPORT int icaltime_span_contains(icaltime_span *s, icaltime_span *container); + +#endif /* !ICALTIME_H */ -- cgit v1.2.1 From 0d932910200e77b884d89917545495215567a9f6 Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Sun, 6 Mar 2022 22:32:25 +0100 Subject: Introduce `USE_64BIT_ICALTIME_T` CMake option to allow redirecting icaltime_t to 64-bit types. --- CMakeLists.txt | 18 +++++++++++++++++- ConfigureChecks.cmake | 1 + config.h.cmake | 18 ++++++++++++++---- config_public.h.cmake | 5 ----- src/libical/ical_file.cmake | 1 - src/libical/icaltime.h.cmake | 3 ++- 6 files changed, 34 insertions(+), 12 deletions(-) delete mode 100644 config_public.h.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 062f3de8..5a8ae773 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,6 +66,10 @@ # Set to build using a 32bit time_t (ignored unless building with MSVC on Windows) # Default=false (use the default size of time_t) # +# -DUSE_64BIT_ICALTIME_T=[true|false] +# Experimental: Redirect icaltime_t (and related functions) to a 64-bit version of time_t rather than to time_t. +# Default=false (use plain time_t) +# # -DLIBICAL_BUILD_TESTING=[true|false] # Set to build the test suite # Default=true @@ -325,6 +329,19 @@ if(WIN32) add_definitions(-DBIG_ENDIAN=0 -DLITTLE_ENDIAN=1 -DBYTE_ORDER=BIG_ENDIAN) endif() +# define icaltime_t +libical_option(USE_64BIT_ICALTIME_T "Experimental: Redirect icaltime_t (and related functions) to a 64-bit version of time_t rather than to time_t." False) +if(USE_64BIT_ICALTIME_T) + if(MSVC) + set(ICAL_ICALTIME_T_TYPE "__time64_t") + else() + message(FATAL_ERROR + "Option USE_64BIT_ICALTIME_T is not supported with this compiler or architecture.") + endif() +else() + set(ICAL_ICALTIME_T_TYPE "time_t") +endif() + # Use GNUInstallDirs include(GNUInstallDirs) @@ -392,7 +409,6 @@ endif() include(ConfigureChecks.cmake) add_definitions(-DHAVE_CONFIG_H) -configure_file(config_public.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config_public.h) configure_file(config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) set(INSTALL_TARGETS_DEFAULT_ARGS diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index 08b74f4e..71a4284b 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -81,6 +81,7 @@ check_type_size(pid_t SIZEOF_PID_T) check_type_size(size_t SIZEOF_SIZE_T) check_type_size(ssize_t SIZEOF_SSIZE_T) check_type_size(time_t SIZEOF_TIME_T) +check_type_size(${ICAL_ICALTIME_T_TYPE} SIZEOF_ICALTIME_T) check_type_size(wint_t SIZEOF_WINT_T) include(FindThreads) diff --git a/config.h.cmake b/config.h.cmake index 561b91a8..039a8446 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -1,7 +1,5 @@ /* config.h. Generated by cmake from config.h.cmake */ -#include "config_public.h" - /* Define if you have the ICU library. */ #cmakedefine HAVE_LIBICU 1 @@ -235,6 +233,7 @@ typedef unsigned int wint_t; #endif #cmakedefine SIZEOF_TIME_T ${SIZEOF_TIME_T} +#cmakedefine SIZEOF_ICALTIME_T ${SIZEOF_ICALTIME_T} /* whether we have ICU DANGI calendar */ #cmakedefine HAVE_ICU_DANGI @@ -523,17 +522,28 @@ typedef ssize_t IO_SSIZE_T; #define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0) #endif -#define SIZEOF_ICALTIME_T SIZEOF_TIME_T - /* * Substitute functions for those from time.h but working with icaltime_t instead of time_t. * icaltime_t is defined in config_public.h.cmake. */ + #cmakedefine USE_64BIT_ICALTIME_T 1 +#if (defined(USE_64BIT_ICALTIME_T) && (SIZEOF_TIME_T != 8)) +#if defined(_MSC_VER) +#define icaltime(timer) _time64(timer) +#define icalctime(timer) _ctime64(timer) +#define icalmktime(timeptr) _mktime64(timeptr) +#define icalgmtime_r(tp,tmp) (_gmtime64(tp)?(*(tmp)=*_gmtime64(tp),(tmp)):0) +#define icallocaltime_r(tp,tmp) (_localtime64(tp)?(*(tmp)=*_localtime64(tp),(tmp)):0) +#else +#error "This compiler is not supported together with the 'USE_64BIT_ICALTIME_T' option." +#endif +#else #define icaltime(timer) time(timer) #define icalctime(timer) ctime(timer) #define icalmktime(timeptr) mktime(timeptr) #define icalgmtime_r(timer, buf) gmtime_r(timer, buf) #define icallocaltime_r(timer, buf) localtime_r(timer, buf) +#endif /* define MAXPATHLEN */ #if defined(_WIN32) diff --git a/config_public.h.cmake b/config_public.h.cmake deleted file mode 100644 index 2cffaced..00000000 --- a/config_public.h.cmake +++ /dev/null @@ -1,5 +0,0 @@ -/* config_public.h. Generated by cmake from config_public.h.cmake */ - -#include - -typedef time_t icaltime_t; diff --git a/src/libical/ical_file.cmake b/src/libical/ical_file.cmake index 6ea99deb..1ad0bbb5 100644 --- a/src/libical/ical_file.cmake +++ b/src/libical/ical_file.cmake @@ -1,7 +1,6 @@ # ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. # It is required to make the combined header ical.h properly. set(COMBINEDHEADERSICAL - ${TOPB}/config_public.h ${TOPB}/src/libical/icalversion.h ${TOPB}/src/libical/icaltime.h ${TOPS}/src/libical/icalduration.h diff --git a/src/libical/icaltime.h.cmake b/src/libical/icaltime.h.cmake index c663ba2e..af1c89d4 100644 --- a/src/libical/icaltime.h.cmake +++ b/src/libical/icaltime.h.cmake @@ -82,7 +82,8 @@ #include "libical_ical_export.h" -#include "config_public.h" +#include +#define icaltime_t ${ICAL_ICALTIME_T_TYPE} /* An opaque struct representing a timezone. We declare this here to avoid a circular dependency. */ -- cgit v1.2.1 From 32c14b2e448199d0a9de91e9844ef32abf9e4747 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 3 Jun 2022 11:20:13 -0400 Subject: various - a few post-merge white space tweaks --- .pre-commit-config.yaml | 2 +- config.h.cmake | 5 ++--- src/libical/icalrecur.c | 2 +- src/libical/icalrecur.h | 2 +- src/libical/icaltz-util.c | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 740fde24..c27d6da2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,7 +26,7 @@ repos: rev: v0.6.13 hooks: - id: cmake-lint - exclude: cmake/Toolchain-* + exclude: cmake/Toolchain-*|config.h.cmake - repo: https://github.com/markdownlint/markdownlint rev: v0.11.0 hooks: diff --git a/config.h.cmake b/config.h.cmake index 039a8446..904cf704 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -522,11 +522,10 @@ typedef ssize_t IO_SSIZE_T; #define localtime_r(tp,tmp) (localtime(tp)?(*(tmp)=*localtime(tp),(tmp)):0) #endif -/* +/* * Substitute functions for those from time.h but working with icaltime_t instead of time_t. - * icaltime_t is defined in config_public.h.cmake. */ - #cmakedefine USE_64BIT_ICALTIME_T 1 +#cmakedefine USE_64BIT_ICALTIME_T 1 #if (defined(USE_64BIT_ICALTIME_T) && (SIZEOF_TIME_T != 8)) #if defined(_MSC_VER) #define icaltime(timer) _time64(timer) diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index c41e258d..93c73f49 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -3613,7 +3613,7 @@ short icalrecurrencetype_encode_month(int month, int is_leap) } int icalrecur_expand_recurrence(const char *rule, - icaltime_t start, int count, icaltime_t*array) + icaltime_t start, int count, icaltime_t *array) { struct icalrecurrencetype recur; icalrecur_iterator *ritr; diff --git a/src/libical/icalrecur.h b/src/libical/icalrecur.h index 98e74a75..b968a15b 100644 --- a/src/libical/icalrecur.h +++ b/src/libical/icalrecur.h @@ -367,7 +367,7 @@ LIBICAL_ICAL_EXPORT void icalrecur_iterator_free(icalrecur_iterator *); * back into local time before using them. */ LIBICAL_ICAL_EXPORT int icalrecur_expand_recurrence(const char *rule, icaltime_t start, - int count, icaltime_t*array); + int count, icaltime_t *array); /* ical_invalid_rrule_handling : * How should the ICAL library handle RRULEs with invalid BYxxx part combos? diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index 8abae608..627e2846 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -445,7 +445,7 @@ icalcomponent *icaltzutil_fetch_timezone(const char *location) const char *zonedir; FILE *f = NULL; char *full_path = NULL; - icaltime_t*transitions = NULL; + icaltime_t *transitions = NULL; char *r_trans = NULL, *temp; int *trans_idx = NULL; ttinfo *types = NULL; -- cgit v1.2.1 From 4f22bbb2d1d1f3a7a218e2d8d363f94a071151c9 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 3 Jun 2022 13:08:19 -0400 Subject: buildsystem - USE_64BIT_ICALTIME_T -> LIBICAL_ENABLE_64BIT_ICALTIME_T namespace the cmake options --- CMakeLists.txt | 17 ++++++++++++----- ReleaseNotes.txt | 2 ++ config.h.cmake | 6 +++--- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a8ae773..bb8925e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,8 +66,10 @@ # Set to build using a 32bit time_t (ignored unless building with MSVC on Windows) # Default=false (use the default size of time_t) # -# -DUSE_64BIT_ICALTIME_T=[true|false] -# Experimental: Redirect icaltime_t (and related functions) to a 64-bit version of time_t rather than to time_t. +# -DLIBICAL_ENABLE_64BIT_ICALTIME_T=[true|false] +# Redirect icaltime_t (and related functions) to a 64-bit version of time_t rather than to the +# C standard library time_t. Intended for use on 32-bit systems which have a 64-bit time_t +# (such as `__time64_t` on Windows) available. # Default=false (use plain time_t) # # -DLIBICAL_BUILD_TESTING=[true|false] @@ -330,13 +332,18 @@ if(WIN32) endif() # define icaltime_t -libical_option(USE_64BIT_ICALTIME_T "Experimental: Redirect icaltime_t (and related functions) to a 64-bit version of time_t rather than to time_t." False) -if(USE_64BIT_ICALTIME_T) +libical_option(LIBICAL_ENABLE_64BIT_ICALTIME_T + "Redirect icaltime_t and related functions to a 64-bit version of time_t rather than to the \ + C standard library time_t. Intended for use on 32-bit systems which have a 64-bit time_t available. \ + May not be implemented on all platforms yet" + False +) +if(LIBICAL_ENABLE_64BIT_ICALTIME_T) if(MSVC) set(ICAL_ICALTIME_T_TYPE "__time64_t") else() message(FATAL_ERROR - "Option USE_64BIT_ICALTIME_T is not supported with this compiler or architecture.") + "Option LIBICAL_ENABLE_64BIT_ICALTIME_T is not supported with this compiler or architecture.") endif() else() set(ICAL_ICALTIME_T_TYPE "time_t") diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index da0598f3..77f411ca 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -6,6 +6,8 @@ Version 3.1.0 (NOT RELEASED YET): * MSVC 2013 or higher (when building on Windows with MSVC) * For the C++ bindings, a C++11 compliant compiler is required * Requires CMake v3.11.0 or higher + * New CMake option "LIBICAL_ENABLE_64BIT_ICALTIME_T" to use 64-bit time_t implementations + on 32-bit systems (where available and supported. Windows-only so far) * libical-glib requires glib 2.38 or higher * libical-glib requires a C11 compliant compiler * draft-ietf-calext-eventpub-extensions-19 (RFC 9073) support added diff --git a/config.h.cmake b/config.h.cmake index 904cf704..f99a739d 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -525,8 +525,8 @@ typedef ssize_t IO_SSIZE_T; /* * Substitute functions for those from time.h but working with icaltime_t instead of time_t. */ -#cmakedefine USE_64BIT_ICALTIME_T 1 -#if (defined(USE_64BIT_ICALTIME_T) && (SIZEOF_TIME_T != 8)) +#cmakedefine LIBICAL_ENABLE_64BIT_ICALTIME_T 1 +#if (defined(LIBICAL_ENABLE_64BIT_ICALTIME_T) && (SIZEOF_TIME_T != 8)) #if defined(_MSC_VER) #define icaltime(timer) _time64(timer) #define icalctime(timer) _ctime64(timer) @@ -534,7 +534,7 @@ typedef ssize_t IO_SSIZE_T; #define icalgmtime_r(tp,tmp) (_gmtime64(tp)?(*(tmp)=*_gmtime64(tp),(tmp)):0) #define icallocaltime_r(tp,tmp) (_localtime64(tp)?(*(tmp)=*_localtime64(tp),(tmp)):0) #else -#error "This compiler is not supported together with the 'USE_64BIT_ICALTIME_T' option." +#error "This compiler is not supported together with the 'LIBICAL_ENABLE_64BIT_ICALTIME_T' option." #endif #else #define icaltime(timer) time(timer) -- cgit v1.2.1 From 175abb718bd000413f1db6a82a4ee457d71f8bb4 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 3 Jun 2022 15:59:55 -0400 Subject: Buildsystem - fix sizeof time_t is 4 with -DUSE_32BIT_TIME_T fixes: #557 --- ConfigureChecks.cmake | 9 ++++++++- ReleaseNotes.txt | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index ddb64604..b568c10c 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -77,7 +77,14 @@ check_type_size(intptr_t SIZEOF_INTPTR_T) check_type_size(pid_t SIZEOF_PID_T) check_type_size(size_t SIZEOF_SIZE_T) check_type_size(ssize_t SIZEOF_SSIZE_T) -check_type_size(time_t SIZEOF_TIME_T) +if(WIN32 AND MSVC AND USE_32BIT_TIME_T) + set(_SAVE_RQD ${CMAKE_REQUIRED_DEFINITIONS}) + set(CMAKE_REQUIRED_DEFINITIONS -D_USE_32BIT_TIME_T) + check_type_size(time_t SIZEOF_TIME_T) + set(CMAKE_REQUIRED_DEFINITIONS ${_SAVE_RQD}) +else() + check_type_size(time_t SIZEOF_TIME_T) +endif() check_type_size(wint_t SIZEOF_WINT_T) include(FindThreads) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 6f66a838..65ceb8fb 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -4,6 +4,7 @@ Release Highlights Version 3.0.15 (UNRELEASED): ---------------------------- * Add missing property parameters into libical-glib + * Fix CMake option USE_32BIT_TIME_T actually uses a 32-bit time_t value Version 3.0.14 (05 February 2022): ---------------------------------- -- cgit v1.2.1 From 454167da5abfe78bc52cc4e89fa5584754aee87f Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Fri, 3 Jun 2022 16:08:37 -0400 Subject: cmake/modules/FindBerkeleyDB.cmake - don't print warning message --- cmake/modules/FindBerkeleyDB.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index 401a36c4..0d83b4ef 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -92,8 +92,8 @@ 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.") + #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") -- cgit v1.2.1 From 5de3e1500d33e3f14b289ee29ceb79cd9cc64fed Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 6 Jun 2022 08:09:39 -0400 Subject: REUSE compliance fixes: #489 --- .krazy | 3 +- .pre-commit-config.yaml | 4 + .reuse/dep5 | 23 + CMakeLists.txt | 3 + ConfigureChecks.cmake | 3 + LICENSE | 19 - LICENSE.LGPL21.txt | 516 ------ LICENSE.MPL2.txt | 373 ----- LICENSE.txt | 19 + LICENSES/BSD-3-Clause.txt | 11 + LICENSES/CC0-1.0.txt | 121 ++ LICENSES/LGPL-2.1-only.txt | 175 ++ LICENSES/LicenseRef-APPLEMIT.txt | 29 + LICENSES/LicenseRef-CISST.txt | 157 ++ LICENSES/MPL-2.0.txt | 373 +++++ LICENSES/Unlicense.txt | 10 + LibIcalConfig.cmake.in | 3 + README.md | 4 +- ReleaseNotes.txt | 5 +- cmake/Toolchain-Linux-GCC-i686.cmake | 29 +- cmake/Toolchain-OSX-GCC-i686.cmake | 29 +- cmake/Toolchain-QNX-common.cmake | 89 ++ cmake/Toolchain-QNX65.cmake | 88 - cmake/Toolchain-QNX650-armv7.cmake | 88 + cmake/Toolchain-QNX650-x86.cmake | 88 + cmake/Toolchain-QNX66.cmake | 89 -- cmake/Toolchain-QNX660-armv7.cmake | 21 + cmake/Toolchain-QNX660-common.cmake | 23 + cmake/Toolchain-QNX660-x86.cmake | 21 + cmake/Toolchain-QNX700-aarch64.cmake | 22 + cmake/Toolchain-QNX700-armv7.cmake | 22 + cmake/Toolchain-QNX700-common.cmake | 27 + cmake/Toolchain-QNX700-x86.cmake | 22 + cmake/Toolchain-QNX700-x86_64.cmake | 22 + cmake/Toolchain-RPI.cmake | 30 +- cmake/Toolchain-Yocto.cmake | 30 + cmake/Toolchain-android.cmake | 1688 -------------------- cmake/Toolchain-blackberry-armv7le.cmake | 30 +- cmake/Toolchain-iMX6.cmake | 31 +- cmake/Toolchain-iOS.cmake | 130 -- cmake/Toolchain-jetson-tk1.cmake | 29 +- cmake/modules/FindBDB.cmake | 4 + cmake/modules/FindBerkeleyDB.cmake | 29 +- cmake/modules/FindGLib.cmake | 5 +- cmake/modules/FindGObjectIntrospection.cmake | 5 +- cmake/modules/FindLibXML.cmake | 5 +- cmake/modules/FindWcecompat.cmake | 6 +- cmake/modules/GObjectIntrospectionMacros.cmake | 6 +- cmake/modules/GtkDoc.cmake | 3 + cmake/modules/LibIcalMacrosInternal.cmake | 3 + cmake/run_test.cmake | 3 + config.h.cmake | 5 + design-data/CMakeLists.txt | 3 +- doc/CMakeLists.txt | 3 + doc/Doxyfile.cmake | 3 + doc/UsingLibical.md | 4 +- doc/reference/CMakeLists.txt | 3 + doc/reference/libical-glib/CMakeLists.txt | 2 + examples/CMakeLists.txt | 3 + examples/access_components.c | 18 +- examples/access_properties_and_parameters.c | 9 +- examples/errors.c | 14 +- examples/main.c | 8 +- examples/parse_text.c | 7 +- scripts/CMakeLists.txt | 3 +- scripts/buildtests.sh | 3 + scripts/mkderivedcomponents.pl | 27 +- scripts/mkderivedparameters.pl | 10 +- scripts/mkderivedproperties.pl | 10 +- scripts/mkderivedvalues.pl | 10 +- scripts/mkrestrictiontable.pl | 10 +- scripts/readvaluesfile.pl | 10 +- scripts/set_compiler_env.bat | 3 + scripts/setup-travis.sh | 3 + src/CMakeLists.txt | 3 + src/Net-ICal-Libical/lib/Net/ICal/Libical.pm | 10 +- .../lib/Net/ICal/Libical/Component.pm | 10 +- .../lib/Net/ICal/Libical/Duration.pm | 10 +- .../lib/Net/ICal/Libical/Period.pm | 10 +- .../lib/Net/ICal/Libical/Property.pm | 10 +- src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm | 10 +- src/Net-ICal-Libical/netical.i | 13 +- src/Net-ICal-Libical/test/component.pl | 10 +- src/Net-ICal-Libical/test/libical.pl | 10 +- src/Net-ICal-Libical/test/swig.pl | 10 +- src/java/CMakeLists.txt | 2 + src/java/ICalDurationType.java | 3 +- src/java/ICalParameter.java | 3 +- src/java/ICalPeriodType.java | 3 +- src/java/ICalProperty.java | 3 +- src/java/ICalRecurrenceType.java | 3 +- src/java/ICalTimeType.java | 4 +- src/java/ICalTriggerType.java | 4 +- src/java/ICalValue.java | 3 +- src/java/VAgenda.java | 5 +- src/java/VAlarm.java | 5 +- src/java/VCalendar.java | 5 +- src/java/VComponent.java | 3 +- src/java/VEvent.java | 5 +- src/java/VFreeBusy.java | 9 +- src/java/VQuery.java | 5 +- src/java/VToDo.java | 5 +- src/java/jlibical_consts_cxx.h | 12 +- src/java/jlibical_utils_cxx.cpp | 13 +- src/java/jlibical_utils_cxx.h | 13 +- src/java/jniICalDurationType_cxx.cpp | 13 +- src/java/jniICalDurationType_cxx.h | 14 +- src/java/jniICalPeriodType_cxx.cpp | 15 +- src/java/jniICalPeriodType_cxx.h | 14 +- src/java/jniICalRecurrenceType_cxx.cpp | 15 +- src/java/jniICalRecurrenceType_cxx.h | 13 +- src/java/jniICalTimeType_cxx.cpp | 13 +- src/java/jniICalTimeType_cxx.h | 13 +- src/java/jniICalTriggerType_cxx.cpp | 13 +- src/java/jniICalTriggerType_cxx.h | 14 +- src/java/net_cp_jlibical_ICalParameter_cxx.cpp | 12 +- src/java/net_cp_jlibical_ICalParameter_cxx.h | 12 +- src/java/net_cp_jlibical_ICalProperty_cxx.cpp | 13 +- src/java/net_cp_jlibical_ICalProperty_cxx.h | 12 +- src/java/net_cp_jlibical_ICalValue_cxx.cpp | 12 +- src/java/net_cp_jlibical_ICalValue_cxx.h | 12 +- src/java/net_cp_jlibical_VComponent_cxx.cpp | 13 +- src/java/net_cp_jlibical_VComponent_cxx.h | 12 +- src/java/testjni.java | 7 + src/libical-glib/CMakeLists.txt | 3 + src/libical-glib/api/i-cal-array.xml | 12 +- src/libical-glib/api/i-cal-attach.xml | 12 +- src/libical-glib/api/i-cal-comp-iter.xml | 12 +- src/libical-glib/api/i-cal-component.xml | 12 +- src/libical-glib/api/i-cal-datetimeperiod.xml | 12 +- src/libical-glib/api/i-cal-derived-parameter.xml | 12 +- src/libical-glib/api/i-cal-derived-property.xml | 12 +- src/libical-glib/api/i-cal-derived-value.xml | 12 +- src/libical-glib/api/i-cal-duration.xml | 12 +- src/libical-glib/api/i-cal-enums.xml | 12 +- src/libical-glib/api/i-cal-error.xml | 12 +- src/libical-glib/api/i-cal-geo.xml | 12 +- src/libical-glib/api/i-cal-memory.xml | 12 +- src/libical-glib/api/i-cal-mime.xml | 12 +- src/libical-glib/api/i-cal-parameter.xml | 12 +- src/libical-glib/api/i-cal-parser.xml | 12 +- src/libical-glib/api/i-cal-period.xml | 12 +- src/libical-glib/api/i-cal-property.xml | 12 +- src/libical-glib/api/i-cal-recur-iterator.xml | 12 +- src/libical-glib/api/i-cal-recur.xml | 12 +- src/libical-glib/api/i-cal-recurrence.xml | 12 +- src/libical-glib/api/i-cal-reqstat.xml | 12 +- src/libical-glib/api/i-cal-restriction.xml | 12 +- src/libical-glib/api/i-cal-time-span.xml | 12 +- src/libical-glib/api/i-cal-time.xml | 12 +- src/libical-glib/api/i-cal-timezone.xml | 12 +- src/libical-glib/api/i-cal-trigger.xml | 12 +- .../api/i-cal-unknowntokenhandling.xml | 12 +- src/libical-glib/api/i-cal-value.xml | 12 +- src/libical-glib/i-cal-object.c.in | 14 +- src/libical-glib/i-cal-object.h.in | 14 +- src/libical-glib/tools/generator.c | 13 +- src/libical-glib/tools/generator.h | 13 +- .../tools/header-forward-declarations-template | 14 +- src/libical-glib/tools/header-header-template | 14 +- src/libical-glib/tools/header-template | 14 +- src/libical-glib/tools/source-template | 14 +- src/libical-glib/tools/xml-parser.c | 13 +- src/libical-glib/tools/xml-parser.h | 12 +- src/libical/CMakeLists.txt | 3 + src/libical/astime.h | 13 +- src/libical/caldate.c | 20 +- src/libical/ical_file.cmake | 3 + src/libical/icalarray.c | 12 +- src/libical/icalarray.h | 12 +- src/libical/icalattach.c | 12 +- src/libical/icalattach.h | 12 +- src/libical/icalattachimpl.h | 12 +- src/libical/icalcomponent.c | 12 +- src/libical/icalcomponent.h | 12 +- src/libical/icalderivedparameter.c.in | 13 +- src/libical/icalderivedparameter.h.in | 13 +- src/libical/icalderivedproperty.c.in | 12 +- src/libical/icalderivedproperty.h.in | 12 +- src/libical/icalderivedvalue.c.in | 13 +- src/libical/icalderivedvalue.h.in | 12 +- src/libical/icalduration.c | 13 +- src/libical/icalduration.h | 13 +- src/libical/icalenums.c | 12 +- src/libical/icalenums.h | 13 +- src/libical/icalerror.c | 13 +- src/libical/icalerror.h | 13 +- src/libical/icallangbind.c | 12 +- src/libical/icallangbind.h | 12 +- src/libical/icalmemory.c | 24 +- src/libical/icalmemory.h | 13 +- src/libical/icalmime.c | 12 +- src/libical/icalmime.h | 12 +- src/libical/icalparameter.c | 13 +- src/libical/icalparameter.h | 12 +- src/libical/icalparameter_cxx.cpp | 12 +- src/libical/icalparameter_cxx.h | 12 +- src/libical/icalparameterimpl.h | 13 +- src/libical/icalparser.c | 26 +- src/libical/icalparser.h | 13 +- src/libical/icalperiod.c | 13 +- src/libical/icalperiod.h | 13 +- src/libical/icalproperty.c | 13 +- src/libical/icalproperty.h | 12 +- src/libical/icalproperty_cxx.cpp | 12 +- src/libical/icalproperty_cxx.h | 12 +- src/libical/icalproperty_p.h | 12 +- src/libical/icalrecur.c | 12 +- src/libical/icalrecur.h | 12 +- src/libical/icalrestriction.c.in | 12 +- src/libical/icalrestriction.h | 13 +- src/libical/icaltime.c | 13 +- src/libical/icaltime.h.cmake | 13 +- src/libical/icaltimezone.c | 12 +- src/libical/icaltimezone.h | 12 +- src/libical/icaltimezoneimpl.h | 12 +- src/libical/icaltypes.c | 12 +- src/libical/icaltypes.h | 12 +- src/libical/icaltz-util.c | 13 +- src/libical/icaltz-util.h | 13 +- src/libical/icalvalue.c | 13 +- src/libical/icalvalue.h | 12 +- src/libical/icalvalue_cxx.cpp | 12 +- src/libical/icalvalue_cxx.h | 12 +- src/libical/icalvalueimpl.h | 13 +- src/libical/icalversion.h.cmake | 12 +- src/libical/icptrholder_cxx.h | 12 +- src/libical/libical_deprecated.h | 5 + src/libical/libical_ical_export.h | 5 + src/libical/pvl.c | 12 +- src/libical/pvl.h | 12 +- src/libical/qsort_gen.c | 11 +- src/libical/qsort_gen.h | 13 +- src/libical/sspm.c | 24 +- src/libical/sspm.h | 26 +- src/libical/vcomponent_cxx.cpp | 12 +- src/libical/vcomponent_cxx.h | 12 +- src/libicalss/CMakeLists.txt | 3 + src/libicalss/icalbdbset.c | 12 +- src/libicalss/icalbdbset.h | 12 +- src/libicalss/icalbdbset_cxx.h | 13 +- src/libicalss/icalbdbsetimpl.h | 12 +- src/libicalss/icalcalendar.c | 12 +- src/libicalss/icalcalendar.h | 13 +- src/libicalss/icalclassify.c | 12 +- src/libicalss/icalclassify.h | 12 +- src/libicalss/icalcluster.c | 12 +- src/libicalss/icalcluster.h | 12 +- src/libicalss/icalclusterimpl.h | 12 +- src/libicalss/icaldirset.c | 13 +- src/libicalss/icaldirset.h | 13 +- src/libicalss/icaldirsetimpl.h | 13 +- src/libicalss/icalfileset.c | 13 +- src/libicalss/icalfileset.h | 13 +- src/libicalss/icalfilesetimpl.h | 13 +- src/libicalss/icalgauge.c | 13 +- src/libicalss/icalgauge.h | 13 +- src/libicalss/icalgaugeimpl.h | 12 +- src/libicalss/icalmessage.c | 12 +- src/libicalss/icalmessage.h | 12 +- src/libicalss/icalset.c | 13 +- src/libicalss/icalset.h | 13 +- src/libicalss/icalspanlist.c | 12 +- src/libicalss/icalspanlist.h | 12 +- src/libicalss/icalspanlist_cxx.cpp | 12 +- src/libicalss/icalspanlist_cxx.h | 13 +- src/libicalss/icalss_file.cmake | 3 + src/libicalss/icalsslexer.c | 13 +- src/libicalss/icalsslexer.l | 13 +- src/libicalss/icalssyacc.c | 12 +- src/libicalss/icalssyacc.h | 5 +- src/libicalss/icalssyacc.y | 13 +- src/libicalss/libical_icalss_export.h | 5 + src/libicalvcal/CMakeLists.txt | 3 + src/libicalvcal/icalvcal.c | 13 +- src/libicalvcal/icalvcal.h | 12 +- src/libicalvcal/libical_vcal_export.h | 5 + src/libicalvcal/vcaltmp.c | 38 +- src/libicalvcal/vcaltmp.h | 30 +- src/libicalvcal/vcc.c | 45 +- src/libicalvcal/vcc.h | 30 +- src/libicalvcal/vcc.y | 30 +- src/libicalvcal/vobject.c | 45 +- src/libicalvcal/vobject.h | 30 +- src/python/Attendee.py | 20 +- src/python/CMakeLists.txt | 4 +- src/python/Collection.py | 12 +- src/python/Component.py | 26 +- src/python/DerivedProperties.py | 12 +- src/python/Duration.py | 12 +- src/python/Error.py | 20 +- src/python/Gauge.py | 12 +- src/python/Libical.py | 12 +- src/python/LibicalWrap.i | 12 +- src/python/LibicalWrap_icaltime.i | 13 +- src/python/LibicalWrap_icaltimezone.i | 12 +- src/python/Period.py | 12 +- src/python/Property.py | 12 +- src/python/Store.py | 12 +- src/python/Time.py | 12 +- src/python/__init__.py | 12 +- src/python/test.py | 12 +- src/test/CMakeLists.txt | 3 + src/test/builtin_timezones.c | 12 +- src/test/copycluster.c | 13 +- src/test/icalattach-leak.c | 13 +- src/test/icalrecur_test.c | 12 +- src/test/icaltestparser.c | 13 +- src/test/icaltm_test.c | 13 +- src/test/libical-glib/CMakeLists.txt | 3 + src/test/libical-glib/array.py | 10 +- src/test/libical-glib/attach.py | 10 +- src/test/libical-glib/component.py | 10 +- src/test/libical-glib/comprehensive.py | 10 +- src/test/libical-glib/duration.py | 10 +- src/test/libical-glib/error.py | 10 +- src/test/libical-glib/misc.py | 10 +- src/test/libical-glib/parameter.py | 10 +- src/test/libical-glib/period.py | 10 +- src/test/libical-glib/property.py | 10 +- src/test/libical-glib/recurrence.py | 10 +- src/test/libical-glib/timezone.py | 10 +- src/test/libical-glib/value.py | 10 +- src/test/process.c | 12 +- src/test/recur.c | 12 +- src/test/regression-classify.c | 12 +- src/test/regression-component.c | 13 +- src/test/regression-cxx.cpp | 12 +- src/test/regression-recur.c | 12 +- src/test/regression-storage.c | 13 +- src/test/regression-utils.c | 13 +- src/test/regression.c | 17 +- src/test/regression.h | 12 +- src/test/stow.c | 13 +- src/test/test-malloc.c | 12 +- src/test/test-malloc.h | 12 +- src/test/testmime.c | 13 +- src/test/testvcal.c | 13 +- src/test/timezones.c | 13 +- test-data/CMakeLists.txt | 3 +- 340 files changed, 2137 insertions(+), 5826 deletions(-) create mode 100644 .reuse/dep5 delete mode 100644 LICENSE delete mode 100644 LICENSE.LGPL21.txt delete mode 100644 LICENSE.MPL2.txt create mode 100644 LICENSE.txt create mode 100644 LICENSES/BSD-3-Clause.txt create mode 100644 LICENSES/CC0-1.0.txt create mode 100644 LICENSES/LGPL-2.1-only.txt create mode 100644 LICENSES/LicenseRef-APPLEMIT.txt create mode 100644 LICENSES/LicenseRef-CISST.txt create mode 100644 LICENSES/MPL-2.0.txt create mode 100644 LICENSES/Unlicense.txt create mode 100644 cmake/Toolchain-QNX-common.cmake delete mode 100644 cmake/Toolchain-QNX65.cmake create mode 100644 cmake/Toolchain-QNX650-armv7.cmake create mode 100644 cmake/Toolchain-QNX650-x86.cmake delete mode 100644 cmake/Toolchain-QNX66.cmake create mode 100644 cmake/Toolchain-QNX660-armv7.cmake create mode 100644 cmake/Toolchain-QNX660-common.cmake create mode 100644 cmake/Toolchain-QNX660-x86.cmake create mode 100644 cmake/Toolchain-QNX700-aarch64.cmake create mode 100644 cmake/Toolchain-QNX700-armv7.cmake create mode 100644 cmake/Toolchain-QNX700-common.cmake create mode 100644 cmake/Toolchain-QNX700-x86.cmake create mode 100644 cmake/Toolchain-QNX700-x86_64.cmake create mode 100644 cmake/Toolchain-Yocto.cmake delete mode 100644 cmake/Toolchain-android.cmake delete mode 100644 cmake/Toolchain-iOS.cmake mode change 100755 => 100644 scripts/mkderivedcomponents.pl mode change 100755 => 100644 scripts/mkderivedparameters.pl mode change 100755 => 100644 scripts/mkderivedproperties.pl mode change 100755 => 100644 scripts/mkderivedvalues.pl mode change 100755 => 100644 scripts/mkrestrictiontable.pl mode change 100755 => 100644 src/Net-ICal-Libical/test/libical.pl mode change 100755 => 100644 src/Net-ICal-Libical/test/swig.pl mode change 100755 => 100644 src/test/libical-glib/array.py mode change 100755 => 100644 src/test/libical-glib/attach.py mode change 100755 => 100644 src/test/libical-glib/component.py mode change 100755 => 100644 src/test/libical-glib/comprehensive.py mode change 100755 => 100644 src/test/libical-glib/duration.py mode change 100755 => 100644 src/test/libical-glib/error.py mode change 100755 => 100644 src/test/libical-glib/misc.py mode change 100755 => 100644 src/test/libical-glib/parameter.py mode change 100755 => 100644 src/test/libical-glib/period.py mode change 100755 => 100644 src/test/libical-glib/property.py mode change 100755 => 100644 src/test/libical-glib/recurrence.py mode change 100755 => 100644 src/test/libical-glib/timezone.py mode change 100755 => 100644 src/test/libical-glib/value.py diff --git a/.krazy b/.krazy index ae81b742..74c09410 100644 --- a/.krazy +++ b/.krazy @@ -2,6 +2,7 @@ CHECKSETS foss,c++ EXCLUDE dpointer +EXTRA copyright-reuse,license-reuse EXTRA crud,camelcase EXTRA style @@ -33,7 +34,7 @@ SKIP /src/libical/caldate\.c 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|/cmake/modules/FindBerkeleyDB.cmake +SKIP /cmake/Toolchain-QNX|/cmake/modules/FindBerkeleyDB.cmake|/uninstall.cmake.in #Skip zoneinfo SKIP /zoneinfo/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c27d6da2..10311ce7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -34,3 +34,7 @@ repos: entry: mdl language: ruby files: \.(md|mdown|markdown)$ +- repo: https://github.com/fsfe/reuse-tool + rev: v1.0.0 + hooks: + - id: reuse diff --git a/.reuse/dep5 b/.reuse/dep5 new file mode 100644 index 00000000..173f97aa --- /dev/null +++ b/.reuse/dep5 @@ -0,0 +1,23 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: libical +Upstream-Contact: Allen Winter +Source: https://github.com/libical/libical + +Files: zoneinfo/* +Copyright: The libical developers +License: CC0-1.0 + +#design data +Files: design-data/* +Copyright: The libical developers +License: LGPL-2.1-only OR MPL-2.0 + +#testing data +Files: test-data/*.ics test-data/*.vcf test-data/*.data test-data/*.tab test-data/*.txt src/test/*.ics src/test/*.out src/Net-ICal-Libical/test-data/* +Copyright: The libical developers +License: LGPL-2.1-only OR MPL-2.0 + +#debian packaging +Files: debian/* +Copyright: The libical developers +License: LGPL-2.1-only OR MPL-2.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index bb8925e7..183413f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,8 @@ # This is the top-level CMakeLists.txt file for the libical project. # +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +# # Pass the following variables to cmake to control the build: # (See doc/UsingLibical.md for more information) # diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index b7aeb9f1..a7a0181a 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + include(CheckIncludeFiles) check_include_files(byteswap.h HAVE_BYTESWAP_H) check_include_files(dirent.h HAVE_DIRENT_H) diff --git a/LICENSE b/LICENSE deleted file mode 100644 index b2bf441f..00000000 --- a/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -libical is distributed under two licenses. -You may choose the terms of either: - - * The Mozilla Public License (MPL) v2.0 - - or - - * The GNU Lesser General Public License (LGPL) v2.1 - ----------------------------------------------------------------------- - -Software distributed under these licenses is distributed on an "AS -IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or -implied. See the License for the specific language governing rights -and limitations under the License. -Libical is distributed under both the LGPL and the MPL. The MPL -notice, reproduced below, covers the use of either of the licenses. - ----------------------------------------------------------------------- diff --git a/LICENSE.LGPL21.txt b/LICENSE.LGPL21.txt deleted file mode 100644 index eeb9f8a4..00000000 --- a/LICENSE.LGPL21.txt +++ /dev/null @@ -1,516 +0,0 @@ - - Libical is Copyright (C) 2010-2017 Klaralvdalens Datakonsult AB. - - You may use, distribute and copy Libical under the terms of the - GNU Lesser General Public License version 2.1, which is displayed below. - -------------------------------------------------------------------------- - - GNU LESSER GENERAL PUBLIC LICENSE - Version 2.1, February 1999 - - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it. You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations -below. - - When we speak of free software, we are referring to freedom of use, -not price. Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. - - To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights. These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. - - To protect each distributor, we want to make it very clear that -there is no warranty for the free library. Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. - - Finally, software patents pose a constant threat to the existence of -any free program. We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder. Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. - - Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License. This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License. We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. - - When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library. The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom. The Lesser General -Public License permits more lax criteria for linking other code with -the library. - - We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License. It also provides other free software developers Less -of an advantage over competing non-free programs. These disadvantages -are the reason we use the ordinary General Public License for many -libraries. However, the Lesser license provides advantages in certain -special circumstances. - - For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it -becomes a de-facto standard. To achieve this, non-free programs must -be allowed to use the library. A more frequent case is that a free -library does the same job as widely used non-free libraries. In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. - - In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software. For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. - - Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. - - GNU LESSER GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control -compilation and installation of the library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. - - You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. - - 2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. - - If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (1) uses at run time a - copy of the library already present on the user's computer system, - rather than copying library functions into the executable, and (2) - will operate properly with a modified version of the library, if - the user installs one, as long as the modified version is - interface-compatible with the version that the work was made with. - - c) Accompany the work with a written offer, valid for at least - three years, to give the same user the materials specified in - Subsection 6a, above, for a charge no more than the cost of - performing this distribution. - - d) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - e) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. - - 9. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. - - 11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply, and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License -may add an explicit geographical distribution limitation excluding those -countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation. If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission. For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this. Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms -of the ordinary General Public License). - - To apply these terms, attach the following notices to the library. -It is safest to attach them to the start of each source file to most -effectively convey the exclusion of warranty; and each file should -have at least the "copyright" line and a pointer to where the full -notice is found. - - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or -your school, if any, to sign a "copyright disclaimer" for the library, -if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James - Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/LICENSE.MPL2.txt b/LICENSE.MPL2.txt deleted file mode 100644 index d0a1fa14..00000000 --- a/LICENSE.MPL2.txt +++ /dev/null @@ -1,373 +0,0 @@ -Mozilla Public License Version 2.0 -================================== - -1. Definitions --------------- - -1.1. "Contributor" - means each individual or legal entity that creates, contributes to - the creation of, or owns Covered Software. - -1.2. "Contributor Version" - means the combination of the Contributions of others (if any) used - by a Contributor and that particular Contributor's Contribution. - -1.3. "Contribution" - means Covered Software of a particular Contributor. - -1.4. "Covered Software" - means Source Code Form to which the initial Contributor has attached - the notice in Exhibit A, the Executable Form of such Source Code - Form, and Modifications of such Source Code Form, in each case - including portions thereof. - -1.5. "Incompatible With Secondary Licenses" - means - - (a) that the initial Contributor has attached the notice described - in Exhibit B to the Covered Software; or - - (b) that the Covered Software was made available under the terms of - version 1.1 or earlier of the License, but not also under the - terms of a Secondary License. - -1.6. "Executable Form" - means any form of the work other than Source Code Form. - -1.7. "Larger Work" - means a work that combines Covered Software with other material, in - a separate file or files, that is not Covered Software. - -1.8. "License" - means this document. - -1.9. "Licensable" - means having the right to grant, to the maximum extent possible, - whether at the time of the initial grant or subsequently, any and - all of the rights conveyed by this License. - -1.10. "Modifications" - means any of the following: - - (a) any file in Source Code Form that results from an addition to, - deletion from, or modification of the contents of Covered - Software; or - - (b) any new file in Source Code Form that contains any Covered - Software. - -1.11. "Patent Claims" of a Contributor - means any patent claim(s), including without limitation, method, - process, and apparatus claims, in any patent Licensable by such - Contributor that would be infringed, but for the grant of the - License, by the making, using, selling, offering for sale, having - made, import, or transfer of either its Contributions or its - Contributor Version. - -1.12. "Secondary License" - means either the GNU General Public License, Version 2.0, the GNU - Lesser General Public License, Version 2.1, the GNU Affero General - Public License, Version 3.0, or any later versions of those - licenses. - -1.13. "Source Code Form" - means the form of the work preferred for making modifications. - -1.14. "You" (or "Your") - means an individual or a legal entity exercising rights under this - License. For legal entities, "You" includes any entity that - controls, is controlled by, or is under common control with You. For - purposes of this definition, "control" means (a) the power, direct - or indirect, to cause the direction or management of such entity, - whether by contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants and Conditions --------------------------------- - -2.1. Grants - -Each Contributor hereby grants You a world-wide, royalty-free, -non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) - Licensable by such Contributor to use, reproduce, make available, - modify, display, perform, distribute, and otherwise exploit its - Contributions, either on an unmodified basis, with Modifications, or - as part of a Larger Work; and - -(b) under Patent Claims of such Contributor to make, use, sell, offer - for sale, have made, import, and otherwise transfer either its - Contributions or its Contributor Version. - -2.2. Effective Date - -The licenses granted in Section 2.1 with respect to any Contribution -become effective for each Contribution on the date the Contributor first -distributes such Contribution. - -2.3. Limitations on Grant Scope - -The licenses granted in this Section 2 are the only rights granted under -this License. No additional rights or licenses will be implied from the -distribution or licensing of Covered Software under this License. -Notwithstanding Section 2.1(b) above, no patent license is granted by a -Contributor: - -(a) for any code that a Contributor has removed from Covered Software; - or - -(b) for infringements caused by: (i) Your and any other third party's - modifications of Covered Software, or (ii) the combination of its - Contributions with other software (except as part of its Contributor - Version); or - -(c) under Patent Claims infringed by Covered Software in the absence of - its Contributions. - -This License does not grant any rights in the trademarks, service marks, -or logos of any Contributor (except as may be necessary to comply with -the notice requirements in Section 3.4). - -2.4. Subsequent Licenses - -No Contributor makes additional grants as a result of Your choice to -distribute the Covered Software under a subsequent version of this -License (see Section 10.2) or under the terms of a Secondary License (if -permitted under the terms of Section 3.3). - -2.5. Representation - -Each Contributor represents that the Contributor believes its -Contributions are its original creation(s) or it has sufficient rights -to grant the rights to its Contributions conveyed by this License. - -2.6. Fair Use - -This License is not intended to limit any rights You have under -applicable copyright doctrines of fair use, fair dealing, or other -equivalents. - -2.7. Conditions - -Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted -in Section 2.1. - -3. Responsibilities -------------------- - -3.1. Distribution of Source Form - -All distribution of Covered Software in Source Code Form, including any -Modifications that You create or to which You contribute, must be under -the terms of this License. You must inform recipients that the Source -Code Form of the Covered Software is governed by the terms of this -License, and how they can obtain a copy of this License. You may not -attempt to alter or restrict the recipients' rights in the Source Code -Form. - -3.2. Distribution of Executable Form - -If You distribute Covered Software in Executable Form then: - -(a) such Covered Software must also be made available in Source Code - Form, as described in Section 3.1, and You must inform recipients of - the Executable Form how they can obtain a copy of such Source Code - Form by reasonable means in a timely manner, at a charge no more - than the cost of distribution to the recipient; and - -(b) You may distribute such Executable Form under the terms of this - License, or sublicense it under different terms, provided that the - license for the Executable Form does not attempt to limit or alter - the recipients' rights in the Source Code Form under this License. - -3.3. Distribution of a Larger Work - -You may create and distribute a Larger Work under terms of Your choice, -provided that You also comply with the requirements of this License for -the Covered Software. If the Larger Work is a combination of Covered -Software with a work governed by one or more Secondary Licenses, and the -Covered Software is not Incompatible With Secondary Licenses, this -License permits You to additionally distribute such Covered Software -under the terms of such Secondary License(s), so that the recipient of -the Larger Work may, at their option, further distribute the Covered -Software under the terms of either this License or such Secondary -License(s). - -3.4. Notices - -You may not remove or alter the substance of any license notices -(including copyright notices, patent notices, disclaimers of warranty, -or limitations of liability) contained within the Source Code Form of -the Covered Software, except that You may alter any license notices to -the extent required to remedy known factual inaccuracies. - -3.5. Application of Additional Terms - -You may choose to offer, and to charge a fee for, warranty, support, -indemnity or liability obligations to one or more recipients of Covered -Software. However, You may do so only on Your own behalf, and not on -behalf of any Contributor. You must make it absolutely clear that any -such warranty, support, indemnity, or liability obligation is offered by -You alone, and You hereby agree to indemnify every Contributor for any -liability incurred by such Contributor as a result of warranty, support, -indemnity or liability terms You offer. You may include additional -disclaimers of warranty and limitations of liability specific to any -jurisdiction. - -4. Inability to Comply Due to Statute or Regulation ---------------------------------------------------- - -If it is impossible for You to comply with any of the terms of this -License with respect to some or all of the Covered Software due to -statute, judicial order, or regulation then You must: (a) comply with -the terms of this License to the maximum extent possible; and (b) -describe the limitations and the code they affect. Such description must -be placed in a text file included with all distributions of the Covered -Software under this License. Except to the extent prohibited by statute -or regulation, such description must be sufficiently detailed for a -recipient of ordinary skill to be able to understand it. - -5. Termination --------------- - -5.1. The rights granted under this License will terminate automatically -if You fail to comply with any of its terms. However, if You become -compliant, then the rights granted under this License from a particular -Contributor are reinstated (a) provisionally, unless and until such -Contributor explicitly and finally terminates Your grants, and (b) on an -ongoing basis, if such Contributor fails to notify You of the -non-compliance by some reasonable means prior to 60 days after You have -come back into compliance. Moreover, Your grants from a particular -Contributor are reinstated on an ongoing basis if such Contributor -notifies You of the non-compliance by some reasonable means, this is the -first time You have received notice of non-compliance with this License -from such Contributor, and You become compliant prior to 30 days after -Your receipt of the notice. - -5.2. If You initiate litigation against any entity by asserting a patent -infringement claim (excluding declaratory judgment actions, -counter-claims, and cross-claims) alleging that a Contributor Version -directly or indirectly infringes any patent, then the rights granted to -You by any and all Contributors for the Covered Software under Section -2.1 of this License shall terminate. - -5.3. In the event of termination under Sections 5.1 or 5.2 above, all -end user license agreements (excluding distributors and resellers) which -have been validly granted by You or Your distributors under this License -prior to termination shall survive termination. - -************************************************************************ -* * -* 6. Disclaimer of Warranty * -* ------------------------- * -* * -* Covered Software is provided under this License on an "as is" * -* basis, without warranty of any kind, either expressed, implied, or * -* statutory, including, without limitation, warranties that the * -* Covered Software is free of defects, merchantable, fit for a * -* particular purpose or non-infringing. The entire risk as to the * -* quality and performance of the Covered Software is with You. * -* Should any Covered Software prove defective in any respect, You * -* (not any Contributor) assume the cost of any necessary servicing, * -* repair, or correction. This disclaimer of warranty constitutes an * -* essential part of this License. No use of any Covered Software is * -* authorized under this License except under this disclaimer. * -* * -************************************************************************ - -************************************************************************ -* * -* 7. Limitation of Liability * -* -------------------------- * -* * -* Under no circumstances and under no legal theory, whether tort * -* (including negligence), contract, or otherwise, shall any * -* Contributor, or anyone who distributes Covered Software as * -* permitted above, be liable to You for any direct, indirect, * -* special, incidental, or consequential damages of any character * -* including, without limitation, damages for lost profits, loss of * -* goodwill, work stoppage, computer failure or malfunction, or any * -* and all other commercial damages or losses, even if such party * -* shall have been informed of the possibility of such damages. This * -* limitation of liability shall not apply to liability for death or * -* personal injury resulting from such party's negligence to the * -* extent applicable law prohibits such limitation. Some * -* jurisdictions do not allow the exclusion or limitation of * -* incidental or consequential damages, so this exclusion and * -* limitation may not apply to You. * -* * -************************************************************************ - -8. Litigation -------------- - -Any litigation relating to this License may be brought only in the -courts of a jurisdiction where the defendant maintains its principal -place of business and such litigation shall be governed by laws of that -jurisdiction, without reference to its conflict-of-law provisions. -Nothing in this Section shall prevent a party's ability to bring -cross-claims or counter-claims. - -9. Miscellaneous ----------------- - -This License represents the complete agreement concerning the subject -matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent -necessary to make it enforceable. Any law or regulation which provides -that the language of a contract shall be construed against the drafter -shall not be used to construe this License against a Contributor. - -10. Versions of the License ---------------------------- - -10.1. New Versions - -Mozilla Foundation is the license steward. Except as provided in Section -10.3, no one other than the license steward has the right to modify or -publish new versions of this License. Each version will be given a -distinguishing version number. - -10.2. Effect of New Versions - -You may distribute the Covered Software under the terms of the version -of the License under which You originally received the Covered Software, -or under the terms of any subsequent version published by the license -steward. - -10.3. Modified Versions - -If you create software not governed by this License, and you want to -create a new license for such software, you may create and use a -modified version of this License if you rename the license and remove -any references to the name of the license steward (except to note that -such modified license differs from this License). - -10.4. Distributing Source Code Form that is Incompatible With Secondary -Licenses - -If You choose to distribute Source Code Form that is Incompatible With -Secondary Licenses under the terms of this version of the License, the -notice described in Exhibit B of this License must be attached. - -Exhibit A - Source Code Form License Notice -------------------------------------------- - - This Source Code Form is subject to the terms of the Mozilla Public - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at https://mozilla.org/MPL/2.0/. - -If it is not possible or desirable to put the notice in a particular -file, then You may include the notice in a location (such as a LICENSE -file in a relevant directory) where a recipient would be likely to look -for such a notice. - -You may add additional accurate notices of copyright ownership. - -Exhibit B - "Incompatible With Secondary Licenses" Notice ---------------------------------------------------------- - - This Source Code Form is "Incompatible With Secondary Licenses", as - defined by the Mozilla Public License, v. 2.0. diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 00000000..b2bf441f --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,19 @@ +libical is distributed under two licenses. +You may choose the terms of either: + + * The Mozilla Public License (MPL) v2.0 + + or + + * The GNU Lesser General Public License (LGPL) v2.1 + +---------------------------------------------------------------------- + +Software distributed under these licenses is distributed on an "AS +IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or +implied. See the License for the specific language governing rights +and limitations under the License. +Libical is distributed under both the LGPL and the MPL. The MPL +notice, reproduced below, covers the use of either of the licenses. + +---------------------------------------------------------------------- diff --git a/LICENSES/BSD-3-Clause.txt b/LICENSES/BSD-3-Clause.txt new file mode 100644 index 00000000..086d3992 --- /dev/null +++ b/LICENSES/BSD-3-Clause.txt @@ -0,0 +1,11 @@ +Copyright (c) . + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 00000000..0e259d42 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/LICENSES/LGPL-2.1-only.txt b/LICENSES/LGPL-2.1-only.txt new file mode 100644 index 00000000..c9aa5301 --- /dev/null +++ b/LICENSES/LGPL-2.1-only.txt @@ -0,0 +1,175 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. + +The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. + +(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + + e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. + + b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). + +To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + one line to give the library's name and an idea of what it does. + Copyright (C) year name of author + + This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in +the library `Frob' (a library for tweaking knobs) written +by James Random Hacker. + +signature of Ty Coon, 1 April 1990 +Ty Coon, President of Vice +That's all there is to it! diff --git a/LICENSES/LicenseRef-APPLEMIT.txt b/LICENSES/LicenseRef-APPLEMIT.txt new file mode 100644 index 00000000..179b87f6 --- /dev/null +++ b/LICENSES/LicenseRef-APPLEMIT.txt @@ -0,0 +1,29 @@ +(Similar to, but predates the Apple MIT License by at least 10 years.) + +For purposes of this license notice, the term Licensors shall mean, +collectively, Apple Computer, Inc., AT&T Corp., International +Business Machines Corporation and Siemens Rolm Communications Inc. +The term Licensor shall mean any of the Licensors. + +Subject to acceptance of the following conditions, permission is hereby +granted by Licensors without the need for written agreement and without +license or royalty fees, to use, copy, modify and distribute this +software for any purpose. + +The above copyright notice and the following four paragraphs must be +reproduced in all copies of this software and any software including +this software. + +THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE +ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR +MODIFICATIONS. + +IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, +INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT +OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. + +EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. diff --git a/LICENSES/LicenseRef-CISST.txt b/LICENSES/LicenseRef-CISST.txt new file mode 100644 index 00000000..f3c1a0df --- /dev/null +++ b/LICENSES/LicenseRef-CISST.txt @@ -0,0 +1,157 @@ +This license applies to the cmake/Toolchain-QNX-* files only. + +CISST Software License Agreement + +Version 1.0 (October 30, 2006) + +PURPOSE + +The Johns Hopkins University's Engineering Research Center for +Computer-Integrated Surgical Systems and Technology (CISST ERC) has +developed a software package ("CISST") that provides C++ libraries to +facilitate the development of computer-integrated surgery systems. +This Software License Agreement ("Agreement") covers downloads from +the CISST package maintained by The Johns Hopkins University ("JHU"). +If you distribute Software (as defined below) downloaded from CISST, +all of the paragraphs of this Agreement must be included with and +apply to such Software. + +Your downloading, copying, modifying, displaying, distributing or use +of any software, documentation, and/or data from CISST (collectively, +the "Software") constitutes acceptance of all of the terms and +conditions of this Agreement. If you do not agree to such terms and +conditions, you have no right to download, copy, modify, display, +distribute or use the Software. + +DOWNLOADING AGREEMENT - License from JHU with Right to Sublicense +("Software License"). + +1. As used in this Software License, "you" means the individual + downloading and/or using, reproducing, modifying, displaying and/or + distributing the Software and the institution or entity which + employs or is otherwise affiliated with such individual in + connection therewith. The Johns Hopkins University ("JHU") hereby + grants you, with right to sublicense, with respect to JHU's rights + in the software, documentation, and data, if any, which is the + subject of this Software License (collectively, the "Software"), a + royalty-free, non-exclusive license to use, reproduce, make + derivative works of, display and distribute the Software, provided + that: + + (a) you accept and adhere to all of the terms and conditions of + this Software License; + + (b) in connection with any copy of or sublicense of all or any + portion of the Software, all of the terms and conditions in + this Software License shall appear in and shall apply to such + copy and such sublicense, including without limitation all + source and executable forms and on any user documentation that + includes license information, prefaced with the following + words: "All or portions of this licensed product have been + obtained under license from The Johns Hopkins University and + are subject to the following terms and conditions:" + + (c) you preserve and maintain all applicable attributions, + copyright notices and licenses included in or applicable to the + Software; + + (d) modified versions of the Software must be clearly identified + and marked as such, and must not be misrepresented as being the + original Software; and + + (e) you consider making, but are under no obligation to make, the + source code of any of your modifications to the Software freely + available to others on an open source basis. + +2. The license granted in this Software License includes without + limitation the right to (i) incorporate the Software into + proprietary programs (subject to any restrictions applicable to + such programs), (ii) add your own copyright statement to your + modifications of the Software, and (iii) provide additional or + different license terms and conditions in your sublicenses of + modifications of the Software; provided that in each case your use, + reproduction or distribution of such modifications otherwise + complies with the conditions stated in this Software License. + +3. This Software License does not grant any rights with respect to + third party software, except those rights that JHU has been + authorized by a third party to grant to you, and accordingly you + are solely responsible for (i) obtaining any permissions from third + parties that you need to use, reproduce, make derivative works of, + display and distribute the Software, and (ii) informing your + sublicensees, including without limitation your end-users, of their + obligations to secure any such required permissions. + +4. The Software, as provided by JHU, was designed for research + purposes only and was not reviewed or approved by the Food and Drug + Administration or by any other agency. YOU ACKNOWLEDGE AND AGREE + THAT CLINICAL USE OF THE JHU SOFTWARE IS NEITHER RECOMMENDED NOR + ADVISED. Any modification or commercialization of the Software, + whether for clinical use or otherwise, is at the sole risk of the + party or parties engaged therein. You further agree to use, + reproduce, make derivative works of, display and distribute the + Software in compliance with all applicable governmental laws, + regulations and orders, including without limitation those relating + to export and import control. + +5. The Software is provided "AS IS" and neither JHU nor any + contributor to the software (each a "Contributor") shall have any + obligation to provide maintenance, support, updates, enhancements + or modifications thereto. JHU AND ALL CONTRIBUTORS MAKE NO WARRANTY + THAT ALL ERRORS, BUGS, DEFICIENCIES, DEFECTS AND MALFUNCTIONS HAVE + BEEN OR CAN BE ELIMINATED FROM THE SOFTWARE, AND, JHU AND ALL + CONTRIBUTORS SHALL IN NO EVENT BE RESPONSIBLE FOR LOSSES OF ANY + KIND RESULTING FROM THE USE OF THE SOFTWARE, OR ANY PART THEREOF, + INCLUDING, WITHOUT LIMITATION ANY LIABILITY FOR BUSINESS EXPENSE, + MACHINE DOWNTIME, OR DAMAGES CAUSED TO LICENSEE BY ANY ERROR, BUG, + DEFICIENCY, DEFECT OR MALFUNCITON. JHU AND ALL CONTRIBUTORS + SPECIFICALLY DISCLAIM ALL EXPRESS AND IMPLIED WARRANTIES OF ANY + KIND INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NON-INFRINGEMENT. IN NO EVENT SHALL JHU OR ANY CONTRIBUTOR BE + LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, + EXEMPLARY OR CONSEQUENTIAL DAMAGES HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY ARISING IN ANY WAY RELATED TO THE SOFTWARE, EVEN IF + JHU OR ANY CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + DAMAGES. TO THE MAXIMUM EXTENT NOT PROHIBITED BY LAW OR REGULATION, + YOU FURTHER ASSUME ALL LIABILITY FOR YOUR USE, REPRODUCTION, MAKING + OF DERIVATIVE WORKS, DISPLAY, LICENSE OR DISTRIBUTION OF THE + SOFTWARE AND AGREE TO INDEMNIFY AND HOLD HARMLESS JHU AND ALL + CONTRIBUTORS FROM AND AGAINST ANY AND ALL CLAIMS, SUITS, ACTIONS, + DEMANDS AND JUDGMENTS ARISING THEREFROM. + +6. None of the names, logos or trademarks of JHU or any of JHU's + affiliates or any of the Contributors, or any funding agency, may + be used to endorse or promote products produced in whole or in part + by operation of the Software or derived from or based on the + Software without specific prior written permission from the + applicable party. + +7. Any use, reproduction or distribution of the Software which is not + in accordance with this Software License shall automatically revoke + all rights granted to you under this Software License. + +8. This Software License does not grant any rights in or to any + intellectual property owned by JHU or any Contributor except those + rights expressly granted hereunder. + +MISCELLANEOUS + +This Agreement shall be governed by and construed in accordance with +the laws of The State of Maryland without regard to principles of +conflicts of law. As specifically provided by MD. Anno. Code, CL, +Section 21-104, the Parties agree that this Agreement shall not be +governed by the Uniform Computer Information Transactions Act (UCITA) +as adopted in Maryland under Title 21 of the Commercial Law Article of +the Maryland Annotated Code, as amended from time to time. This +agreement shall be governed by the common law of Maryland relating to +written agreements, as well as other statutory provisions, other than +UCITA which may apply, and shall be interpreted and enforced as if +UCITA had never been adopted in Maryland. The Parties further agree +that electronic self-help shall not be permitted under this Agreement. +This Agreement shall supersede and replace any license terms that you +may have agreed to previously with respect to CISST. + +This Software License was derived, with permission, from the 3D Slicer +Software License Agreement, Version 1.0 (December 20, 2005), created +by The Brigham & Women's Hospital, Inc. diff --git a/LICENSES/MPL-2.0.txt b/LICENSES/MPL-2.0.txt new file mode 100644 index 00000000..d0a1fa14 --- /dev/null +++ b/LICENSES/MPL-2.0.txt @@ -0,0 +1,373 @@ +Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + +1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" + means Covered Software of a particular Contributor. + +1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + +1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + +1.6. "Executable Form" + means any form of the work other than Source Code Form. + +1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + +1.8. "License" + means this document. + +1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + +1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + +1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + +1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + +1.13. "Source Code Form" + means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; + or + +(b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. diff --git a/LICENSES/Unlicense.txt b/LICENSES/Unlicense.txt new file mode 100644 index 00000000..cde4ac69 --- /dev/null +++ b/LICENSES/Unlicense.txt @@ -0,0 +1,10 @@ +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 diff --git a/LibIcalConfig.cmake.in b/LibIcalConfig.cmake.in index 9b7f7bb8..a307ee29 100644 --- a/LibIcalConfig.cmake.in +++ b/LibIcalConfig.cmake.in @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Christophe Giboudeaux +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + @PACKAGE_INIT@ set_and_check(LibIcal_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") diff --git a/README.md b/README.md index 03a3a78c..2b7edb2b 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,8 @@ 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. +made by programmers in both realms. We (the libical developers) will only +accept changes to this library if they are similarly dual-licensed. ## Building diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 1c2749f4..a2a6be01 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -3,9 +3,10 @@ Release Highlights Version 3.1.0 (NOT RELEASED YET): -------------------------------- - * MSVC 2013 or higher (when building on Windows with MSVC) - * For the C++ bindings, a C++11 compliant compiler is required + * REUSE compliant licensing + * Requires MSVC 2013 or higher (when building on Windows with MSVC) * Requires CMake v3.11.0 or higher + * For the C++ bindings, requires a C++11 compliant compiler * New CMake option "LIBICAL_ENABLE_64BIT_ICALTIME_T" to use 64-bit time_t implementations on 32-bit systems (where available and supported. Windows-only so far) * libical-glib requires glib 2.38 or higher diff --git a/cmake/Toolchain-Linux-GCC-i686.cmake b/cmake/Toolchain-Linux-GCC-i686.cmake index 4fe6d1c0..8bf12272 100644 --- a/cmake/Toolchain-Linux-GCC-i686.cmake +++ b/cmake/Toolchain-Linux-GCC-i686.cmake @@ -1,34 +1,11 @@ # Toolchain file for 32bit builds on 64bit Linux hosts # -# Copyright (c) 2013-2016 Klarälvdalens Datakonsult AB, a KDAB Group company -# All rights reserved. -# +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Volker Krause # Author: Filipe Azevedo -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME "Linux") set(CMAKE_SYSTEM_PROCESSOR "i686") diff --git a/cmake/Toolchain-OSX-GCC-i686.cmake b/cmake/Toolchain-OSX-GCC-i686.cmake index 42644b01..d76b27af 100644 --- a/cmake/Toolchain-OSX-GCC-i686.cmake +++ b/cmake/Toolchain-OSX-GCC-i686.cmake @@ -1,34 +1,11 @@ # Toolchain file for 32bit builds on 64bit OSX hosts # -# Copyright (c) 2013-2016 Klarälvdalens Datakonsult AB, a KDAB Group company -# All rights reserved. -# +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Volker Krause # Author: Filipe Azevedo -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME "Darwin") set(CMAKE_SYSTEM_PROCESSOR "i686") diff --git a/cmake/Toolchain-QNX-common.cmake b/cmake/Toolchain-QNX-common.cmake new file mode 100644 index 00000000..fa6899a3 --- /dev/null +++ b/cmake/Toolchain-QNX-common.cmake @@ -0,0 +1,89 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-FileCopyrightText: 2012-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +SET(CMAKE_SYSTEM_NAME QNX) +SET(CMAKE_SYSTEM_VERSION ${QNX_VERSION}) +SET(CMAKE_SYSTEM_PROCESSOR ${QNX_PROCESSOR}) +SET(TOOLCHAIN QNX) + +#SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".a") + +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") + +IF(CMAKE_HOST_WIN32) + SET(HOST_EXECUTABLE_SUFFIX ".exe") +ENDIF(CMAKE_HOST_WIN32) + +FIND_PATH(QNX_HOST + NAME usr/bin/qcc${HOST_EXECUTABLE_SUFFIX} + PATHS $ENV{QNX_HOST} ${QNX_HOST_HINT} + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH +) + +FIND_PATH(QNX_TARGET + NAME usr/include/qconfig.mk + PATHS $ENV{QNX_TARGET} ${QNX_TARGET_HINT} + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH +) + +IF(CMAKE_HOST_WIN32) + FIND_PATH(QNX_CONFIGURATION + NAME bin/qnxactivate.exe + PATHS $ENV{QNX_CONFIGURATION} + "C:/Program Files/QNX Software Systems/qconfig" + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + ) +ENDIF(CMAKE_HOST_WIN32) + +SET(ENV{QNX_HOST} ${QNX_HOST}) +SET(ENV{QNX_TARGET} ${QNX_TARGET}) + +IF(CMAKE_HOST_WIN32) + SET(ENV{QNX_CONFIGURATION} ${QNX_CONFIGURATION}) + SET(ENV{PATH} "$ENV{PATH};${QNX_HOST}/usr/bin") +ENDIF(CMAKE_HOST_WIN32) + +if(CMAKE_GENERATOR MATCHES "Makefiles") + SET(CMAKE_MAKE_PROGRAM "${QNX_HOST}/usr/bin/make${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Make Program") +endif() +SET(CMAKE_SH "${QNX_HOST}/usr/bin/sh${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX shell Program") +SET(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ar Program") +SET(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ranlib Program") +SET(CMAKE_NM "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-nm${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX nm Program") +SET(CMAKE_OBJCOPY "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objcopy${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objcopy Program") +SET(CMAKE_OBJDUMP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objdump${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objdump Program") +SET(CMAKE_LINKER "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ld${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Linker Program") +SET(CMAKE_STRIP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-strip${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Strip Program") + +SET(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) +SET(CMAKE_C_FLAGS_DEBUG "-g") +SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") +SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") +SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") + +SET(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) +SET(CMAKE_CXX_FLAGS_DEBUG "-g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") + +LIST(APPEND CMAKE_FIND_ROOT_PATH ${QNX_TARGET}) +SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-QNX65.cmake b/cmake/Toolchain-QNX65.cmake deleted file mode 100644 index 2c5772e4..00000000 --- a/cmake/Toolchain-QNX65.cmake +++ /dev/null @@ -1,88 +0,0 @@ -# -# (C) Copyright 2009 Johns Hopkins University (JHU), All Rights -# Reserved. -# -# --- begin cisst license - do not edit --- -# -# This software is provided "as is" under an open source license, with -# no warranty. The complete license can be found in license.txt and -# https://www.cisst.org/cisst/license.txt. -# -# --- end cisst license --- - -SET(CMAKE_SYSTEM_NAME QNX) -SET(CMAKE_SYSTEM_VERSION 6.5.0) -SET(CMAKE_SYSTEM_PROCESSOR x86) -SET(TOOLCHAIN QNX) - -#SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".a") - -SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") -SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") -SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") -SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") - -IF(CMAKE_HOST_WIN32) - SET(HOST_EXECUTABLE_SUFFIX ".exe") -ENDIF(CMAKE_HOST_WIN32) - -FIND_PATH(QNX_HOST - NAME usr/bin/qcc${HOST_EXECUTABLE_SUFFIX} - PATHS $ENV{QNX_HOST} C:/QNX650/host/win32/x86 - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH -) - -FIND_PATH(QNX_TARGET - NAME usr/include/qnx_errno.h - PATHS $ENV{QNX_TARGET} C:/QNX650/target/qnx6 - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH -) - -IF(CMAKE_HOST_WIN32) - FIND_PATH(QNX_CONFIGURATION - NAME bin/qnxactivate.exe - PATHS $ENV{QNX_CONFIGURATION} - "C:/Program Files/QNX Software Systems/qconfig" - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH - ) -ENDIF(CMAKE_HOST_WIN32) - -SET(ENV{QNX_HOST} ${QNX_HOST}) -SET(ENV{QNX_TARGET} ${QNX_TARGET}) -IF(CMAKE_HOST_WIN32) - SET(ENV{QNX_CONFIGURATION} ${QNX_CONFIGURATION}) - SET(ENV{PATH} "$ENV{PATH};${QNX_HOST}/usr/bin") -ENDIF(CMAKE_HOST_WIN32) - -SET(CMAKE_MAKE_PROGRAM "${QNX_HOST}/usr/bin/make${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Make Program") -SET(CMAKE_SH "${QNX_HOST}/usr/bin/sh${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX shell Program") -SET(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ar Program") -SET(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ranlib Program") -SET(CMAKE_NM "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-nm${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX nm Program") -SET(CMAKE_OBJCOPY "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objcopy${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objcopy Program") -SET(CMAKE_OBJDUMP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objdump${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objdump Program") -SET(CMAKE_LINKER "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ld" CACHE PATH "QNX Linker Program") -SET(CMAKE_STRIP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-strip${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Strip Program") - -SET(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc) -SET(CMAKE_C_FLAGS_DEBUG "-g") -SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") -SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") -SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") - -SET(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc) -SET(CMAKE_CXX_FLAGS_DEBUG "-g") -SET(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") -SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") -SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") - -SET(CMAKE_FIND_ROOT_PATH ${QNX_TARGET}) -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -SET(CMAKE_C_FLAGS "-Vgcc_ntoarmv7le" CACHE STRING "qcc c flags" FORCE) -SET(CMAKE_CXX_FLAGS "-Vgcc_ntoarmv7le -lang-c++" CACHE STRING "qcc cxx flags" FORCE) diff --git a/cmake/Toolchain-QNX650-armv7.cmake b/cmake/Toolchain-QNX650-armv7.cmake new file mode 100644 index 00000000..4ba1dc89 --- /dev/null +++ b/cmake/Toolchain-QNX650-armv7.cmake @@ -0,0 +1,88 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +SET(CMAKE_SYSTEM_NAME QNX) +SET(CMAKE_SYSTEM_VERSION 6.5.0) +SET(CMAKE_SYSTEM_PROCESSOR armv7) +SET(TOOLCHAIN QNX) + +#SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".a") + +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") + +IF(CMAKE_HOST_WIN32) + SET(HOST_EXECUTABLE_SUFFIX ".exe") +ENDIF(CMAKE_HOST_WIN32) + +FIND_PATH(QNX_HOST + NAME usr/bin/qcc${HOST_EXECUTABLE_SUFFIX} + PATHS $ENV{QNX_HOST} C:/QNX650/host/win32/x86 + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH +) + +FIND_PATH(QNX_TARGET + NAME usr/include/qnx_errno.h + PATHS $ENV{QNX_TARGET} C:/QNX650/target/qnx6 + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH +) + +IF(CMAKE_HOST_WIN32) + FIND_PATH(QNX_CONFIGURATION + NAME bin/qnxactivate.exe + PATHS $ENV{QNX_CONFIGURATION} + "C:/Program Files/QNX Software Systems/qconfig" + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + ) +ENDIF(CMAKE_HOST_WIN32) + +SET(ENV{QNX_HOST} ${QNX_HOST}) +SET(ENV{QNX_TARGET} ${QNX_TARGET}) +IF(CMAKE_HOST_WIN32) + SET(ENV{QNX_CONFIGURATION} ${QNX_CONFIGURATION}) + SET(ENV{PATH} "$ENV{PATH};${QNX_HOST}/usr/bin") +ENDIF(CMAKE_HOST_WIN32) + +SET(CMAKE_MAKE_PROGRAM "${QNX_HOST}/usr/bin/make${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Make Program") +SET(CMAKE_SH "${QNX_HOST}/usr/bin/sh${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX shell Program") +SET(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ar Program") +SET(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ranlib Program") +SET(CMAKE_NM "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-nm${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX nm Program") +SET(CMAKE_OBJCOPY "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objcopy${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objcopy Program") +SET(CMAKE_OBJDUMP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objdump${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objdump Program") +SET(CMAKE_LINKER "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ld" CACHE PATH "QNX Linker Program") +SET(CMAKE_STRIP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-strip${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Strip Program") + +SET(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) +SET(CMAKE_C_FLAGS_DEBUG "-g") +SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") +SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") +SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") + +SET(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) +SET(CMAKE_CXX_FLAGS_DEBUG "-g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") + +SET(CMAKE_FIND_ROOT_PATH ${QNX_TARGET}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +SET(CMAKE_C_FLAGS "-Vgcc_ntoarmv7le" CACHE STRING "qcc c flags" FORCE) +SET(CMAKE_CXX_FLAGS "-Vgcc_ntoarmv7le -lang-c++" CACHE STRING "qcc cxx flags" FORCE) diff --git a/cmake/Toolchain-QNX650-x86.cmake b/cmake/Toolchain-QNX650-x86.cmake new file mode 100644 index 00000000..550abd47 --- /dev/null +++ b/cmake/Toolchain-QNX650-x86.cmake @@ -0,0 +1,88 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +SET(CMAKE_SYSTEM_NAME QNX) +SET(CMAKE_SYSTEM_VERSION 6.5.0) +SET(CMAKE_SYSTEM_PROCESSOR x86) +SET(TOOLCHAIN QNX) + +#SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".a") + +SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") +SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") +SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") +SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") + +IF(CMAKE_HOST_WIN32) + SET(HOST_EXECUTABLE_SUFFIX ".exe") +ENDIF(CMAKE_HOST_WIN32) + +FIND_PATH(QNX_HOST + NAME usr/bin/qcc${HOST_EXECUTABLE_SUFFIX} + PATHS $ENV{QNX_HOST} C:/QNX650/host/win32/x86 + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH +) + +FIND_PATH(QNX_TARGET + NAME usr/include/qnx_errno.h + PATHS $ENV{QNX_TARGET} C:/QNX650/target/qnx6 + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH +) + +IF(CMAKE_HOST_WIN32) + FIND_PATH(QNX_CONFIGURATION + NAME bin/qnxactivate.exe + PATHS $ENV{QNX_CONFIGURATION} + "C:/Program Files/QNX Software Systems/qconfig" + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + ) +ENDIF(CMAKE_HOST_WIN32) + +SET(ENV{QNX_HOST} ${QNX_HOST}) +SET(ENV{QNX_TARGET} ${QNX_TARGET}) +IF(CMAKE_HOST_WIN32) + SET(ENV{QNX_CONFIGURATION} ${QNX_CONFIGURATION}) + SET(ENV{PATH} "$ENV{PATH};${QNX_HOST}/usr/bin") +ENDIF(CMAKE_HOST_WIN32) + +SET(CMAKE_MAKE_PROGRAM "${QNX_HOST}/usr/bin/make${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Make Program") +SET(CMAKE_SH "${QNX_HOST}/usr/bin/sh${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX shell Program") +SET(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ar Program") +SET(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ranlib Program") +SET(CMAKE_NM "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-nm${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX nm Program") +SET(CMAKE_OBJCOPY "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objcopy${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objcopy Program") +SET(CMAKE_OBJDUMP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objdump${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objdump Program") +SET(CMAKE_LINKER "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ld" CACHE PATH "QNX Linker Program") +SET(CMAKE_STRIP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-strip${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Strip Program") + +SET(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) +SET(CMAKE_C_FLAGS_DEBUG "-g") +SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") +SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") +SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") + +SET(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) +SET(CMAKE_CXX_FLAGS_DEBUG "-g") +SET(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") +SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") + +SET(CMAKE_FIND_ROOT_PATH ${QNX_TARGET}) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + +SET(CMAKE_C_FLAGS "-Vgcc_ntox86" CACHE STRING "qcc c flags" FORCE) +SET(CMAKE_CXX_FLAGS "-Vgcc_ntox86 -lang-c++" CACHE STRING "qcc cxx flags" FORCE) diff --git a/cmake/Toolchain-QNX66.cmake b/cmake/Toolchain-QNX66.cmake deleted file mode 100644 index dafeb610..00000000 --- a/cmake/Toolchain-QNX66.cmake +++ /dev/null @@ -1,89 +0,0 @@ -# -# (C) Copyright 2009 Johns Hopkins University (JHU), All Rights -# Reserved. -# -# --- begin cisst license - do not edit --- -# -# This software is provided "as is" under an open source license, with -# no warranty. The complete license can be found in license.txt and -# https://www.cisst.org/cisst/license.txt. -# -# --- end cisst license --- - -SET(CMAKE_SYSTEM_NAME QNX) -SET(CMAKE_SYSTEM_VERSION 6.6.0) -SET(CMAKE_SYSTEM_PROCESSOR armv7) -SET(TOOLCHAIN QNX) - -#SET(CMAKE_IMPORT_LIBRARY_SUFFIX ".a") - -SET(CMAKE_SHARED_LIBRARY_PREFIX "lib") -SET(CMAKE_SHARED_LIBRARY_SUFFIX ".so") -SET(CMAKE_STATIC_LIBRARY_PREFIX "lib") -SET(CMAKE_STATIC_LIBRARY_SUFFIX ".a") - -IF(CMAKE_HOST_WIN32) - SET(HOST_EXECUTABLE_SUFFIX ".exe") -ENDIF(CMAKE_HOST_WIN32) - -FIND_PATH(QNX_HOST - NAME usr/bin/qcc${HOST_EXECUTABLE_SUFFIX} - PATHS $ENV{QNX_HOST} C:/qnx660/host/win32/x86 - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH -) - -FIND_PATH(QNX_TARGET - NAME usr/include/qconfig.mk - PATHS $ENV{QNX_TARGET} C:/qnx660/target/qnx6 - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH -) - -IF(CMAKE_HOST_WIN32) - FIND_PATH(QNX_CONFIGURATION - NAME bin/qnxactivate.exe - PATHS $ENV{QNX_CONFIGURATION} - "C:/Program Files/QNX Software Systems/qconfig" - NO_CMAKE_PATH - NO_CMAKE_ENVIRONMENT_PATH - ) -ENDIF(CMAKE_HOST_WIN32) - -SET(ENV{QNX_HOST} ${QNX_HOST}) -SET(ENV{QNX_TARGET} ${QNX_TARGET}) - -IF(CMAKE_HOST_WIN32) - SET(ENV{QNX_CONFIGURATION} ${QNX_CONFIGURATION}) - SET(ENV{PATH} "$ENV{PATH};${QNX_HOST}/usr/bin") -ENDIF(CMAKE_HOST_WIN32) - -SET(CMAKE_MAKE_PROGRAM "${QNX_HOST}/usr/bin/make${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Make Program") -SET(CMAKE_SH "${QNX_HOST}/usr/bin/sh${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX shell Program") -SET(CMAKE_AR "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ar${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ar Program") -SET(CMAKE_RANLIB "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ranlib${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX ranlib Program") -SET(CMAKE_NM "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-nm${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX nm Program") -SET(CMAKE_OBJCOPY "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objcopy${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objcopy Program") -SET(CMAKE_OBJDUMP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-objdump${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX objdump Program") -SET(CMAKE_LINKER "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-ld${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Linker Program") -SET(CMAKE_STRIP "${QNX_HOST}/usr/bin/nto${CMAKE_SYSTEM_PROCESSOR}-strip${HOST_EXECUTABLE_SUFFIX}" CACHE PATH "QNX Strip Program") - -SET(CMAKE_C_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) -SET(CMAKE_C_FLAGS_DEBUG "-g") -SET(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") -SET(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG") -SET(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g") - -SET(CMAKE_CXX_COMPILER ${QNX_HOST}/usr/bin/qcc${HOST_EXECUTABLE_SUFFIX}) -SET(CMAKE_CXX_FLAGS_DEBUG "-g") -SET(CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG") -SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG") -SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g") - -SET(CMAKE_FIND_ROOT_PATH ${QNX_TARGET}) -SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) - -SET(CMAKE_C_FLAGS "-Vgcc_ntoarmv7le" CACHE STRING "qcc c flags" FORCE) -SET(CMAKE_CXX_FLAGS "-Vgcc_ntoarmv7le -lang-c++" CACHE STRING "qcc cxx flags" FORCE) diff --git a/cmake/Toolchain-QNX660-armv7.cmake b/cmake/Toolchain-QNX660-armv7.cmake new file mode 100644 index 00000000..690448be --- /dev/null +++ b/cmake/Toolchain-QNX660-armv7.cmake @@ -0,0 +1,21 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +set(QNX_VERSION 6.6.0) +set(QNX_PROCESSOR armv7) + +set(QNX_HOST_HINT "C:/qnx660/host/win32/x86") +set(QNX_TARGET_HINT "C:/qnx660/target/qnx6") + +set(CMAKE_C_FLAGS "-Vgcc_ntoarmv7le" CACHE STRING "qcc c flags" FORCE) +set(CMAKE_CXX_FLAGS "-Vgcc_ntoarmv7le -lang-c++" CACHE STRING "qcc cxx flags" FORCE) + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX660-common.cmake") diff --git a/cmake/Toolchain-QNX660-common.cmake b/cmake/Toolchain-QNX660-common.cmake new file mode 100644 index 00000000..2ef67777 --- /dev/null +++ b/cmake/Toolchain-QNX660-common.cmake @@ -0,0 +1,23 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX-common.cmake") + +# QNX 6.6.0 ships with a QCC 4.7.3 (based on the same GCC version) +# +# HACK: CMake does not support getting compile features from QCC +# work-around by telling CMake the available compile features manually + +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") diff --git a/cmake/Toolchain-QNX660-x86.cmake b/cmake/Toolchain-QNX660-x86.cmake new file mode 100644 index 00000000..05385213 --- /dev/null +++ b/cmake/Toolchain-QNX660-x86.cmake @@ -0,0 +1,21 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +set(QNX_VERSION 6.6.0) +set(QNX_PROCESSOR x86) + +set(QNX_HOST_HINT "C:/qnx660/host/win32/x86") +set(QNX_TARGET_HINT "C:/qnx660/target/qnx6") + +set(CMAKE_C_FLAGS "-Vgcc_ntox86" CACHE STRING "qcc c flags" FORCE) +set(CMAKE_CXX_FLAGS "-Vgcc_ntox86 -lang-c++" CACHE STRING "qcc cxx flags" FORCE) + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX660-common.cmake") diff --git a/cmake/Toolchain-QNX700-aarch64.cmake b/cmake/Toolchain-QNX700-aarch64.cmake new file mode 100644 index 00000000..26137535 --- /dev/null +++ b/cmake/Toolchain-QNX700-aarch64.cmake @@ -0,0 +1,22 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-FileCopyrightText: 2018-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +set(QNX_VERSION 7.0.0) +set(QNX_PROCESSOR aarch64) + +set(QNX_HOST_HINT "C:/qnx700/host/win32/x86") +set(QNX_TARGET_HINT "C:/qnx700/target/qnx6") + +set(CMAKE_C_FLAGS "-Vgcc_ntoaarch64le" CACHE STRING "qcc c flags" FORCE) +set(CMAKE_CXX_FLAGS "-Vgcc_ntoaarch64le -lang-c++" CACHE STRING "qcc cxx flags" FORCE) + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX700-common.cmake") diff --git a/cmake/Toolchain-QNX700-armv7.cmake b/cmake/Toolchain-QNX700-armv7.cmake new file mode 100644 index 00000000..37557f03 --- /dev/null +++ b/cmake/Toolchain-QNX700-armv7.cmake @@ -0,0 +1,22 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-FileCopyrightText: 2018-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +set(QNX_VERSION 7.0.0) +set(QNX_PROCESSOR armv7) + +set(QNX_HOST_HINT "C:/qnx700/host/win32/x86") +set(QNX_TARGET_HINT "C:/qnx700/target/qnx6") + +set(CMAKE_C_FLAGS "-Vgcc_ntoarmv7le" CACHE STRING "qcc c flags" FORCE) +set(CMAKE_CXX_FLAGS "-Vgcc_ntoarmv7le -lang-c++" CACHE STRING "qcc cxx flags" FORCE) + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX700-common.cmake") diff --git a/cmake/Toolchain-QNX700-common.cmake b/cmake/Toolchain-QNX700-common.cmake new file mode 100644 index 00000000..a94f7655 --- /dev/null +++ b/cmake/Toolchain-QNX700-common.cmake @@ -0,0 +1,27 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-FileCopyrightText: 2018-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX-common.cmake") + +# QNX 7.0.0 ships with a QCC 5.4.0 (based on the same GCC version) +# +# HACK: CMake does not support getting compile features from QCC +# work-around by telling CMake the available compile features manually + +# Easy to figure out by forcing GCC onto CMake, e.g. via -DCMAKE_CXX_COMPILER=/opt/qnx700/host/linux/x86_64/usr/bin/arm-unknown-nto-qnx7.0.0eabi-gcc +# Then read out ./CMakeFiles/*/CMakeCXXCompiler.cmake + +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") diff --git a/cmake/Toolchain-QNX700-x86.cmake b/cmake/Toolchain-QNX700-x86.cmake new file mode 100644 index 00000000..c674da95 --- /dev/null +++ b/cmake/Toolchain-QNX700-x86.cmake @@ -0,0 +1,22 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-FileCopyrightText: 2018-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +set(QNX_VERSION 7.0.0) +set(QNX_PROCESSOR x86) + +set(QNX_HOST_HINT "C:/qnx700/host/win32/x86") +set(QNX_TARGET_HINT "C:/qnx700/target/qnx6") + +set(CMAKE_C_FLAGS "-Vgcc_ntox86" CACHE STRING "qcc c flags" FORCE) +set(CMAKE_CXX_FLAGS "-Vgcc_ntox86 -lang-c++" CACHE STRING "qcc cxx flags" FORCE) + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX700-common.cmake") diff --git a/cmake/Toolchain-QNX700-x86_64.cmake b/cmake/Toolchain-QNX700-x86_64.cmake new file mode 100644 index 00000000..3b0e7bc6 --- /dev/null +++ b/cmake/Toolchain-QNX700-x86_64.cmake @@ -0,0 +1,22 @@ +# +# SPDX-FileCopyrightText: 2009 Johns Hopkins University (JHU), All Rights Reserved. +# SPDX-FileCopyrightText: 2018-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# SPDX-License-Identifier: LicenseRef-CISST + +# --- begin cisst license - do not edit --- +# +# This software is provided "as is" under an open source license, with no warranty. +# The complete license can be found in LICENSES/LicenseRef-CISST.txt. +# +# --- end cisst license --- + +set(QNX_VERSION 7.0.0) +set(QNX_PROCESSOR x86_64) + +set(QNX_HOST_HINT "C:/qnx700/host/win32/x86") +set(QNX_TARGET_HINT "C:/qnx700/target/qnx6") + +set(CMAKE_C_FLAGS "-Vgcc_ntox86_64" CACHE STRING "qcc c flags" FORCE) +set(CMAKE_CXX_FLAGS "-Vgcc_ntox86_64 -lang-c++" CACHE STRING "qcc cxx flags" FORCE) + +include("${CMAKE_CURRENT_LIST_DIR}/Toolchain-QNX700-common.cmake") diff --git a/cmake/Toolchain-RPI.cmake b/cmake/Toolchain-RPI.cmake index 923fe58e..5c94d6a6 100644 --- a/cmake/Toolchain-RPI.cmake +++ b/cmake/Toolchain-RPI.cmake @@ -2,33 +2,10 @@ # Assumptions: toolchain is in path, $SYSROOT points to the sysroot # -# Copyright (c) 2013-2016 Klarälvdalens Datakonsult AB, a KDAB Group company -# All rights reserved. -# +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Volker Krause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME "Linux") set(CMAKE_SYSTEM_PROCESSOR "armv6l") @@ -41,5 +18,6 @@ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --sysroot=$ENV{SYSRO set(CMAKE_FIND_ROOT_PATH "$ENV{SYSROOT}") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-Yocto.cmake b/cmake/Toolchain-Yocto.cmake new file mode 100644 index 00000000..bc09bd77 --- /dev/null +++ b/cmake/Toolchain-Yocto.cmake @@ -0,0 +1,30 @@ +# Basic cmake toolchain file for Qt for Yocto Environment +# Assumptions: toolchain script is sourced +# + +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Christoph Sterz + +# SPDX-License-Identifier: BSD-3-Clause + +set(CMAKE_SYSTEM_NAME "Linux") + +if(DEFINED ENV{ARCH}) + #$ARCH is set through the yocto environment script, use this + set(CMAKE_SYSTEM_PROCESSOR "$ENV{ARCH}") +elseif(DEFINED ENV{CC}) + #No $ARCH found, trying to deduce processor from -march= flag in CC + string(REGEX MATCH "-march=([^\ ]+)" DUMMY "$ENV{CC}") + set(CMAKE_SYSTEM_PROCESSOR ${CMAKE_MATCH_1}) +else() + message(FATAL_ERROR "Could not find processor architecture (no ARCH or CC found in environment).") +endif() + +set(OE_QMAKE_PATH_EXTERNAL_HOST_BINS "$ENV{OE_QMAKE_PATH_HOST_BINS}") +set(CMAKE_FIND_ROOT_PATH "$ENV{SDKTARGETSYSROOT}") +set(CMAKE_SYSROOT "$ENV{SDKTARGETSYSROOT}") + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-android.cmake b/cmake/Toolchain-android.cmake deleted file mode 100644 index 08c46389..00000000 --- a/cmake/Toolchain-android.cmake +++ /dev/null @@ -1,1688 +0,0 @@ -# Copyright (c) 2010-2011, Ethan Rublee -# Copyright (c) 2011-2014, Andrey Kamaev -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# 3. Neither the name of the copyright holder nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# ------------------------------------------------------------------------------ -# Android CMake toolchain file, for use with the Android NDK r5-r10d -# Requires cmake 2.6.3 or newer (2.8.9 or newer is recommended). -# See home page: https://github.com/taka-no-me/android-cmake -# -# Usage Linux: -# $ export ANDROID_NDK=/absolute/path/to/the/android-ndk -# $ mkdir build && cd build -# $ cmake -DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake .. -# $ make -j8 -# -# Usage Windows: -# You need native port of make to build your project. -# Android NDK r7 (and newer) already has make.exe on board. -# For older NDK you have to install it separately. -# For example, this one: http://gnuwin32.sourceforge.net/packages/make.htm -# -# $ SET ANDROID_NDK=C:\absolute\path\to\the\android-ndk -# $ mkdir build && cd build -# $ cmake.exe -G"MinGW Makefiles" -# -DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake -# -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe" .. -# $ cmake.exe --build . -# -# -# Options (can be set as cmake parameters: -D=): -# ANDROID_NDK=/opt/android-ndk - path to the NDK root. -# Can be set as environment variable. Can be set only at first cmake run. -# -# ANDROID_ABI=armeabi-v7a - specifies the target Application Binary -# Interface (ABI). This option nearly matches to the APP_ABI variable -# used by ndk-build tool from Android NDK. -# -# Possible targets are: -# "armeabi" - ARMv5TE based CPU with software floating point operations -# "armeabi-v7a" - ARMv7 based devices with hardware FPU instructions -# this ABI target is used by default -# "armeabi-v7a with NEON" - same as armeabi-v7a, but -# sets NEON as floating-point unit -# "armeabi-v7a with VFPV3" - same as armeabi-v7a, but -# sets VFPV3 as floating-point unit (has 32 registers instead of 16) -# "armeabi-v6 with VFP" - tuned for ARMv6 processors having VFP -# "x86" - IA-32 instruction set -# "mips" - MIPS32 instruction set -# -# 64-bit ABIs for NDK r10 and newer: -# "arm64-v8a" - ARMv8 AArch64 instruction set -# "x86_64" - Intel64 instruction set (r1) -# "mips64" - MIPS64 instruction set (r6) -# -# ANDROID_NATIVE_API_LEVEL=android-8 - level of Android API compile for. -# Option is read-only when standalone toolchain is used. -# Note: building for "android-L" requires explicit configuration. -# -# ANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9 - the name of compiler -# toolchain to be used. The list of possible values depends on the NDK -# version. For NDK r10c the possible values are: -# -# * aarch64-linux-android-4.9 -# * aarch64-linux-android-clang3.4 -# * aarch64-linux-android-clang3.5 -# * arm-linux-androideabi-4.6 -# * arm-linux-androideabi-4.8 -# * arm-linux-androideabi-4.9 (default) -# * arm-linux-androideabi-clang3.4 -# * arm-linux-androideabi-clang3.5 -# * mips64el-linux-android-4.9 -# * mips64el-linux-android-clang3.4 -# * mips64el-linux-android-clang3.5 -# * mipsel-linux-android-4.6 -# * mipsel-linux-android-4.8 -# * mipsel-linux-android-4.9 -# * mipsel-linux-android-clang3.4 -# * mipsel-linux-android-clang3.5 -# * x86-4.6 -# * x86-4.8 -# * x86-4.9 -# * x86-clang3.4 -# * x86-clang3.5 -# * x86_64-4.9 -# * x86_64-clang3.4 -# * x86_64-clang3.5 -# -# ANDROID_FORCE_ARM_BUILD=OFF - set ON to generate 32-bit ARM instructions -# instead of Thumb. Is not available for "armeabi-v6 with VFP" -# (is forced to be ON) ABI. -# -# ANDROID_NO_UNDEFINED=ON - set ON to show all undefined symbols as linker -# errors even if they are not used. -# -# ANDROID_SO_UNDEFINED=OFF - set ON to allow undefined symbols in shared -# libraries. Automatically turned for NDK r5x and r6x due to GLESv2 -# problems. -# -# ANDROID_STL=gnustl_static - specify the runtime to use. -# -# Possible values are: -# none -> Do not configure the runtime. -# system -> Use the default minimal system C++ runtime library. -# Implies -fno-rtti -fno-exceptions. -# Is not available for standalone toolchain. -# system_re -> Use the default minimal system C++ runtime library. -# Implies -frtti -fexceptions. -# Is not available for standalone toolchain. -# gabi++_static -> Use the GAbi++ runtime as a static library. -# Implies -frtti -fno-exceptions. -# Available for NDK r7 and newer. -# Is not available for standalone toolchain. -# gabi++_shared -> Use the GAbi++ runtime as a shared library. -# Implies -frtti -fno-exceptions. -# Available for NDK r7 and newer. -# Is not available for standalone toolchain. -# stlport_static -> Use the STLport runtime as a static library. -# Implies -fno-rtti -fno-exceptions for NDK before r7. -# Implies -frtti -fno-exceptions for NDK r7 and newer. -# Is not available for standalone toolchain. -# stlport_shared -> Use the STLport runtime as a shared library. -# Implies -fno-rtti -fno-exceptions for NDK before r7. -# Implies -frtti -fno-exceptions for NDK r7 and newer. -# Is not available for standalone toolchain. -# gnustl_static -> Use the GNU STL as a static library. -# Implies -frtti -fexceptions. -# gnustl_shared -> Use the GNU STL as a shared library. -# Implies -frtti -fno-exceptions. -# Available for NDK r7b and newer. -# Silently degrades to gnustl_static if not available. -# -# ANDROID_STL_FORCE_FEATURES=ON - turn rtti and exceptions support based on -# chosen runtime. If disabled, then the user is responsible for settings -# these options. -# -# What?: -# android-cmake toolchain searches for NDK/toolchain in the following order: -# ANDROID_NDK - cmake parameter -# ANDROID_NDK - environment variable -# ANDROID_STANDALONE_TOOLCHAIN - cmake parameter -# ANDROID_STANDALONE_TOOLCHAIN - environment variable -# ANDROID_NDK - default locations -# ANDROID_STANDALONE_TOOLCHAIN - default locations -# -# Make sure to do the following in your scripts: -# SET( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${my_cxx_flags}" ) -# SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${my_cxx_flags}" ) -# The flags will be prepopulated with critical flags, so don't loose them. -# Also be aware that toolchain also sets configuration-specific compiler -# flags and linker flags. -# -# ANDROID and BUILD_ANDROID will be set to true, you may test any of these -# variables to make necessary Android-specific configuration changes. -# -# Also ARMEABI or ARMEABI_V7A or X86 or MIPS or ARM64_V8A or X86_64 or MIPS64 -# will be set true, mutually exclusive. NEON option will be set true -# if VFP is set to NEON. -# -# ------------------------------------------------------------------------------ - -cmake_minimum_required( VERSION 2.6.3 ) - -if( DEFINED CMAKE_CROSSCOMPILING ) - # subsequent toolchain loading is not really needed - return() -endif() - -if( CMAKE_TOOLCHAIN_FILE ) - # touch toolchain variable to suppress "unused variable" warning -endif() - -# inherit settings in recursive loads -get_property( _CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE ) -if( _CMAKE_IN_TRY_COMPILE ) - include( "${CMAKE_CURRENT_SOURCE_DIR}/../android.toolchain.config.cmake" OPTIONAL ) -endif() - -# this one is important -if( CMAKE_VERSION VERSION_GREATER "3.0.99" ) - set( CMAKE_SYSTEM_NAME Android ) -else() - set( CMAKE_SYSTEM_NAME Linux ) -endif() - -# this one not so much -set( CMAKE_SYSTEM_VERSION 1 ) - -# rpath makes low sense for Android -set( CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "" ) -set( CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries." ) - -# NDK search paths -set( ANDROID_SUPPORTED_NDK_VERSIONS ${ANDROID_EXTRA_NDK_VERSIONS} -r10d -r10c -r10b -r10 -r9d -r9c -r9b -r9 -r8e -r8d -r8c -r8b -r8 -r7c -r7b -r7 -r6b -r6 -r5c -r5b -r5 "" ) -if( NOT DEFINED ANDROID_NDK_SEARCH_PATHS ) - if( CMAKE_HOST_WIN32 ) - file( TO_CMAKE_PATH "$ENV{PROGRAMFILES}" ANDROID_NDK_SEARCH_PATHS ) - set( ANDROID_NDK_SEARCH_PATHS "${ANDROID_NDK_SEARCH_PATHS}" "$ENV{SystemDrive}/NVPACK" ) - else() - file( TO_CMAKE_PATH "$ENV{HOME}" ANDROID_NDK_SEARCH_PATHS ) - set( ANDROID_NDK_SEARCH_PATHS /opt "${ANDROID_NDK_SEARCH_PATHS}/NVPACK" ) - endif() -endif() -if( NOT DEFINED ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH ) - set( ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH /opt/android-toolchain ) -endif() - -# known ABIs -set( ANDROID_SUPPORTED_ABIS_arm "armeabi-v7a;armeabi;armeabi-v7a with NEON;armeabi-v7a with VFPV3;armeabi-v6 with VFP" ) -set( ANDROID_SUPPORTED_ABIS_arm64 "arm64-v8a" ) -set( ANDROID_SUPPORTED_ABIS_x86 "x86" ) -set( ANDROID_SUPPORTED_ABIS_x86_64 "x86_64" ) -set( ANDROID_SUPPORTED_ABIS_mips "mips" ) -set( ANDROID_SUPPORTED_ABIS_mips64 "mips64" ) - -# API level defaults -set( ANDROID_DEFAULT_NDK_API_LEVEL 8 ) -set( ANDROID_DEFAULT_NDK_API_LEVEL_arm64 21 ) -set( ANDROID_DEFAULT_NDK_API_LEVEL_x86 9 ) -set( ANDROID_DEFAULT_NDK_API_LEVEL_x86_64 21 ) -set( ANDROID_DEFAULT_NDK_API_LEVEL_mips 9 ) -set( ANDROID_DEFAULT_NDK_API_LEVEL_mips64 21 ) - - -macro( __LIST_FILTER listvar regex ) - if( ${listvar} ) - foreach( __val ${${listvar}} ) - if( __val MATCHES "${regex}" ) - list( REMOVE_ITEM ${listvar} "${__val}" ) - endif() - endforeach() - endif() -endmacro() - -macro( __INIT_VARIABLE var_name ) - set( __test_path 0 ) - foreach( __var ${ARGN} ) - if( __var STREQUAL "PATH" ) - set( __test_path 1 ) - break() - endif() - endforeach() - - if( __test_path AND NOT EXISTS "${${var_name}}" ) - unset( ${var_name} CACHE ) - endif() - - if( " ${${var_name}}" STREQUAL " " ) - set( __values 0 ) - foreach( __var ${ARGN} ) - if( __var STREQUAL "VALUES" ) - set( __values 1 ) - elseif( NOT __var STREQUAL "PATH" ) - if( __var MATCHES "^ENV_.*$" ) - string( REPLACE "ENV_" "" __var "${__var}" ) - set( __value "$ENV{${__var}}" ) - elseif( DEFINED ${__var} ) - set( __value "${${__var}}" ) - elseif( __values ) - set( __value "${__var}" ) - else() - set( __value "" ) - endif() - - if( NOT " ${__value}" STREQUAL " " AND (NOT __test_path OR EXISTS "${__value}") ) - set( ${var_name} "${__value}" ) - break() - endif() - endif() - endforeach() - unset( __value ) - unset( __values ) - endif() - - if( __test_path ) - file( TO_CMAKE_PATH "${${var_name}}" ${var_name} ) - endif() - unset( __test_path ) -endmacro() - -macro( __DETECT_NATIVE_API_LEVEL _var _path ) - set( __ndkApiLevelRegex "^[\t ]*#define[\t ]+__ANDROID_API__[\t ]+([0-9]+)[\t ]*.*$" ) - file( STRINGS ${_path} __apiFileContent REGEX "${__ndkApiLevelRegex}" ) - if( NOT __apiFileContent ) - message( SEND_ERROR "Could not get Android native API level. Probably you have specified invalid level value, or your copy of NDK/toolchain is broken." ) - endif() - string( REGEX REPLACE "${__ndkApiLevelRegex}" "\\1" ${_var} "${__apiFileContent}" ) - unset( __apiFileContent ) - unset( __ndkApiLevelRegex ) -endmacro() - -macro( __DETECT_TOOLCHAIN_MACHINE_NAME _var _root ) - if( EXISTS "${_root}" ) - file( GLOB __gccExePath RELATIVE "${_root}/bin/" "${_root}/bin/*-gcc${TOOL_OS_SUFFIX}" ) - __LIST_FILTER( __gccExePath "^[.].*" ) - list( LENGTH __gccExePath __gccExePathsCount ) - if( NOT __gccExePathsCount EQUAL 1 AND NOT _CMAKE_IN_TRY_COMPILE ) - message( WARNING "Could not determine machine name for compiler from ${_root}" ) - set( ${_var} "" ) - else() - get_filename_component( __gccExeName "${__gccExePath}" NAME_WE ) - string( REPLACE "-gcc" "" ${_var} "${__gccExeName}" ) - endif() - unset( __gccExePath ) - unset( __gccExePathsCount ) - unset( __gccExeName ) - else() - set( ${_var} "" ) - endif() -endmacro() - - -# fight against cygwin -set( ANDROID_FORBID_SYGWIN TRUE CACHE BOOL "Prevent cmake from working under cygwin and using cygwin tools") -mark_as_advanced( ANDROID_FORBID_SYGWIN ) -if( ANDROID_FORBID_SYGWIN ) - if( CYGWIN ) - message( FATAL_ERROR "Android NDK and android-cmake toolchain are not welcome Cygwin. It is unlikely that this cmake toolchain will work under cygwin. But if you want to try then you can set cmake variable ANDROID_FORBID_SYGWIN to FALSE and rerun cmake." ) - endif() - - if( CMAKE_HOST_WIN32 ) - # remove cygwin from PATH - set( __new_path "$ENV{PATH}") - __LIST_FILTER( __new_path "cygwin" ) - set(ENV{PATH} "${__new_path}") - unset(__new_path) - endif() -endif() - - -# detect current host platform -if( NOT DEFINED ANDROID_NDK_HOST_X64 AND (CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "amd64|x86_64|AMD64" OR CMAKE_HOST_APPLE) ) - set( ANDROID_NDK_HOST_X64 1 CACHE BOOL "Try to use 64-bit compiler toolchain" ) - mark_as_advanced( ANDROID_NDK_HOST_X64 ) -endif() - -set( TOOL_OS_SUFFIX "" ) -if( CMAKE_HOST_APPLE ) - set( ANDROID_NDK_HOST_SYSTEM_NAME "darwin-x86_64" ) - set( ANDROID_NDK_HOST_SYSTEM_NAME2 "darwin-x86" ) -elseif( CMAKE_HOST_WIN32 ) - set( ANDROID_NDK_HOST_SYSTEM_NAME "windows-x86_64" ) - set( ANDROID_NDK_HOST_SYSTEM_NAME2 "windows" ) - set( TOOL_OS_SUFFIX ".exe" ) -elseif( CMAKE_HOST_UNIX ) - set( ANDROID_NDK_HOST_SYSTEM_NAME "linux-x86_64" ) - set( ANDROID_NDK_HOST_SYSTEM_NAME2 "linux-x86" ) -else() - message( FATAL_ERROR "Cross-compilation on your platform is not supported by this cmake toolchain" ) -endif() - -if( NOT ANDROID_NDK_HOST_X64 ) - set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} ) -endif() - -# see if we have path to Android NDK -if( NOT ANDROID_NDK AND NOT ANDROID_STANDALONE_TOOLCHAIN ) - __INIT_VARIABLE( ANDROID_NDK PATH ENV_ANDROID_NDK ) -endif() -if( NOT ANDROID_NDK ) - # see if we have path to Android standalone toolchain - __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ENV_ANDROID_STANDALONE_TOOLCHAIN ) - - if( NOT ANDROID_STANDALONE_TOOLCHAIN ) - #try to find Android NDK in one of the default locations - set( __ndkSearchPaths ) - foreach( __ndkSearchPath ${ANDROID_NDK_SEARCH_PATHS} ) - foreach( suffix ${ANDROID_SUPPORTED_NDK_VERSIONS} ) - list( APPEND __ndkSearchPaths "${__ndkSearchPath}/android-ndk${suffix}" ) - endforeach() - endforeach() - __INIT_VARIABLE( ANDROID_NDK PATH VALUES ${__ndkSearchPaths} ) - unset( __ndkSearchPaths ) - - if( ANDROID_NDK ) - message( STATUS "Using default path for Android NDK: ${ANDROID_NDK}" ) - message( STATUS " If you prefer to use a different location, please define a cmake or environment variable: ANDROID_NDK" ) - else() - #try to find Android standalone toolchain in one of the default locations - __INIT_VARIABLE( ANDROID_STANDALONE_TOOLCHAIN PATH ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH ) - - if( ANDROID_STANDALONE_TOOLCHAIN ) - message( STATUS "Using default path for standalone toolchain ${ANDROID_STANDALONE_TOOLCHAIN}" ) - message( STATUS " If you prefer to use a different location, please define the variable: ANDROID_STANDALONE_TOOLCHAIN" ) - endif( ANDROID_STANDALONE_TOOLCHAIN ) - endif( ANDROID_NDK ) - endif( NOT ANDROID_STANDALONE_TOOLCHAIN ) -endif( NOT ANDROID_NDK ) - -# remember found paths -if( ANDROID_NDK ) - get_filename_component( ANDROID_NDK "${ANDROID_NDK}" ABSOLUTE ) - set( ANDROID_NDK "${ANDROID_NDK}" CACHE INTERNAL "Path of the Android NDK" FORCE ) - set( BUILD_WITH_ANDROID_NDK True ) - if( EXISTS "${ANDROID_NDK}/RELEASE.TXT" ) - file( STRINGS "${ANDROID_NDK}/RELEASE.TXT" ANDROID_NDK_RELEASE_FULL LIMIT_COUNT 1 REGEX "r[0-9]+[a-z]?" ) - string( REGEX MATCH "r([0-9]+)([a-z]?)" ANDROID_NDK_RELEASE "${ANDROID_NDK_RELEASE_FULL}" ) - else() - set( ANDROID_NDK_RELEASE "r1x" ) - set( ANDROID_NDK_RELEASE_FULL "unreleased" ) - endif() - string( REGEX REPLACE "r([0-9]+)([a-z]?)" "\\1*1000" ANDROID_NDK_RELEASE_NUM "${ANDROID_NDK_RELEASE}" ) - string( FIND " abcdefghijklmnopqastuvwxyz" "${CMAKE_MATCH_2}" __ndkReleaseLetterNum ) - math( EXPR ANDROID_NDK_RELEASE_NUM "${ANDROID_NDK_RELEASE_NUM}+${__ndkReleaseLetterNum}" ) -elseif( ANDROID_STANDALONE_TOOLCHAIN ) - get_filename_component( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" ABSOLUTE ) - # try to detect change - if( CMAKE_AR ) - string( LENGTH "${ANDROID_STANDALONE_TOOLCHAIN}" __length ) - string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidStandaloneToolchainPreviousPath ) - if( NOT __androidStandaloneToolchainPreviousPath STREQUAL ANDROID_STANDALONE_TOOLCHAIN ) - message( FATAL_ERROR "It is not possible to change path to the Android standalone toolchain on subsequent run." ) - endif() - unset( __androidStandaloneToolchainPreviousPath ) - unset( __length ) - endif() - set( ANDROID_STANDALONE_TOOLCHAIN "${ANDROID_STANDALONE_TOOLCHAIN}" CACHE INTERNAL "Path of the Android standalone toolchain" FORCE ) - set( BUILD_WITH_STANDALONE_TOOLCHAIN True ) -else() - list(GET ANDROID_NDK_SEARCH_PATHS 0 ANDROID_NDK_SEARCH_PATH) - message( FATAL_ERROR "Could not find neither Android NDK nor Android standalone toolchain. - You should either set an environment variable: - export ANDROID_NDK=~/my-android-ndk - or - export ANDROID_STANDALONE_TOOLCHAIN=~/my-android-toolchain - or put the toolchain or NDK in the default path: - sudo ln -s ~/my-android-ndk ${ANDROID_NDK_SEARCH_PATH}/android-ndk - sudo ln -s ~/my-android-toolchain ${ANDROID_STANDALONE_TOOLCHAIN_SEARCH_PATH}" ) -endif() - -# android NDK layout -if( BUILD_WITH_ANDROID_NDK ) - if( NOT DEFINED ANDROID_NDK_LAYOUT ) - # try to automatically detect the layout - if( EXISTS "${ANDROID_NDK}/RELEASE.TXT") - set( ANDROID_NDK_LAYOUT "RELEASE" ) - elseif( EXISTS "${ANDROID_NDK}/../../linux-x86/toolchain/" ) - set( ANDROID_NDK_LAYOUT "LINARO" ) - elseif( EXISTS "${ANDROID_NDK}/../../gcc/" ) - set( ANDROID_NDK_LAYOUT "ANDROID" ) - endif() - endif() - set( ANDROID_NDK_LAYOUT "${ANDROID_NDK_LAYOUT}" CACHE STRING "The inner layout of NDK" ) - mark_as_advanced( ANDROID_NDK_LAYOUT ) - if( ANDROID_NDK_LAYOUT STREQUAL "LINARO" ) - set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} ) # only 32-bit at the moment - set( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK}/../../${ANDROID_NDK_HOST_SYSTEM_NAME}/toolchain" ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH "" ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 "" ) - elseif( ANDROID_NDK_LAYOUT STREQUAL "ANDROID" ) - set( ANDROID_NDK_HOST_SYSTEM_NAME ${ANDROID_NDK_HOST_SYSTEM_NAME2} ) # only 32-bit at the moment - set( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK}/../../gcc/${ANDROID_NDK_HOST_SYSTEM_NAME}/arm" ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH "" ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 "" ) - else() # ANDROID_NDK_LAYOUT STREQUAL "RELEASE" - set( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK}/toolchains" ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH "/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME}" ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH2 "/prebuilt/${ANDROID_NDK_HOST_SYSTEM_NAME2}" ) - endif() - get_filename_component( ANDROID_NDK_TOOLCHAINS_PATH "${ANDROID_NDK_TOOLCHAINS_PATH}" ABSOLUTE ) - - # try to detect change of NDK - if( CMAKE_AR ) - string( LENGTH "${ANDROID_NDK_TOOLCHAINS_PATH}" __length ) - string( SUBSTRING "${CMAKE_AR}" 0 ${__length} __androidNdkPreviousPath ) - if( NOT __androidNdkPreviousPath STREQUAL ANDROID_NDK_TOOLCHAINS_PATH ) - message( FATAL_ERROR "It is not possible to change the path to the NDK on subsequent CMake run. You must remove all generated files from your build folder first. - " ) - endif() - unset( __androidNdkPreviousPath ) - unset( __length ) - endif() -endif() - - -# get all the details about standalone toolchain -if( BUILD_WITH_STANDALONE_TOOLCHAIN ) - __DETECT_NATIVE_API_LEVEL( ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot/usr/include/android/api-level.h" ) - set( ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) - set( __availableToolchains "standalone" ) - __DETECT_TOOLCHAIN_MACHINE_NAME( __availableToolchainMachines "${ANDROID_STANDALONE_TOOLCHAIN}" ) - if( NOT __availableToolchainMachines ) - message( FATAL_ERROR "Could not determine machine name of your toolchain. Probably your Android standalone toolchain is broken." ) - endif() - if( __availableToolchainMachines MATCHES x86_64 ) - set( __availableToolchainArchs "x86_64" ) - elseif( __availableToolchainMachines MATCHES i686 ) - set( __availableToolchainArchs "x86" ) - elseif( __availableToolchainMachines MATCHES aarch64 ) - set( __availableToolchainArchs "arm64" ) - elseif( __availableToolchainMachines MATCHES arm ) - set( __availableToolchainArchs "arm" ) - elseif( __availableToolchainMachines MATCHES mips64el ) - set( __availableToolchainArchs "mips64" ) - elseif( __availableToolchainMachines MATCHES mipsel ) - set( __availableToolchainArchs "mips" ) - endif() - execute_process( COMMAND "${ANDROID_STANDALONE_TOOLCHAIN}/bin/${__availableToolchainMachines}-gcc${TOOL_OS_SUFFIX}" -dumpversion - OUTPUT_VARIABLE __availableToolchainCompilerVersions OUTPUT_STRIP_TRAILING_WHITESPACE ) - string( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9]+)?" __availableToolchainCompilerVersions "${__availableToolchainCompilerVersions}" ) - if( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/bin/clang${TOOL_OS_SUFFIX}" ) - list( APPEND __availableToolchains "standalone-clang" ) - list( APPEND __availableToolchainMachines ${__availableToolchainMachines} ) - list( APPEND __availableToolchainArchs ${__availableToolchainArchs} ) - list( APPEND __availableToolchainCompilerVersions ${__availableToolchainCompilerVersions} ) - endif() -endif() - -macro( __GLOB_NDK_TOOLCHAINS __availableToolchainsVar __availableToolchainsLst __toolchain_subpath ) - foreach( __toolchain ${${__availableToolchainsLst}} ) - if( "${__toolchain}" MATCHES "-clang3[.][0-9]$" AND NOT EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}${__toolchain_subpath}" ) - SET( __toolchainVersionRegex "^TOOLCHAIN_VERSION[\t ]+:=[\t ]+(.*)$" ) - FILE( STRINGS "${ANDROID_NDK_TOOLCHAINS_PATH}/${__toolchain}/setup.mk" __toolchainVersionStr REGEX "${__toolchainVersionRegex}" ) - if( __toolchainVersionStr ) - string( REGEX REPLACE "${__toolchainVersionRegex}" "\\1" __toolchainVersionStr "${__toolchainVersionStr}" ) - string( REGEX REPLACE "-clang3[.][0-9]$" "-${__toolchainVersionStr}" __gcc_toolchain "${__toolchain}" ) - else() - string( REGEX REPLACE "-clang3[.][0-9]$" "-4.6" __gcc_toolchain "${__toolchain}" ) - endif() - unset( __toolchainVersionStr ) - unset( __toolchainVersionRegex ) - else() - set( __gcc_toolchain "${__toolchain}" ) - endif() - __DETECT_TOOLCHAIN_MACHINE_NAME( __machine "${ANDROID_NDK_TOOLCHAINS_PATH}/${__gcc_toolchain}${__toolchain_subpath}" ) - if( __machine ) - string( REGEX MATCH "[0-9]+[.][0-9]+([.][0-9x]+)?$" __version "${__gcc_toolchain}" ) - if( __machine MATCHES x86_64 ) - set( __arch "x86_64" ) - elseif( __machine MATCHES i686 ) - set( __arch "x86" ) - elseif( __machine MATCHES aarch64 ) - set( __arch "arm64" ) - elseif( __machine MATCHES arm ) - set( __arch "arm" ) - elseif( __machine MATCHES mips64el ) - set( __arch "mips64" ) - elseif( __machine MATCHES mipsel ) - set( __arch "mips" ) - else() - set( __arch "" ) - endif() - #message("machine: !${__machine}!\narch: !${__arch}!\nversion: !${__version}!\ntoolchain: !${__toolchain}!\n") - if (__arch) - list( APPEND __availableToolchainMachines "${__machine}" ) - list( APPEND __availableToolchainArchs "${__arch}" ) - list( APPEND __availableToolchainCompilerVersions "${__version}" ) - list( APPEND ${__availableToolchainsVar} "${__toolchain}" ) - endif() - endif() - unset( __gcc_toolchain ) - endforeach() -endmacro() - -# get all the details about NDK -if( BUILD_WITH_ANDROID_NDK ) - file( GLOB ANDROID_SUPPORTED_NATIVE_API_LEVELS RELATIVE "${ANDROID_NDK}/platforms" "${ANDROID_NDK}/platforms/android-*" ) - string( REPLACE "android-" "" ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_SUPPORTED_NATIVE_API_LEVELS}" ) - set( __availableToolchains "" ) - set( __availableToolchainMachines "" ) - set( __availableToolchainArchs "" ) - set( __availableToolchainCompilerVersions "" ) - if( ANDROID_TOOLCHAIN_NAME AND EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_TOOLCHAIN_NAME}/" ) - # do not go through all toolchains if we know the name - set( __availableToolchainsLst "${ANDROID_TOOLCHAIN_NAME}" ) - __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) - if( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 ) - __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH2}" ) - if( __availableToolchains ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH ${ANDROID_NDK_TOOLCHAINS_SUBPATH2} ) - endif() - endif() - endif() - if( NOT __availableToolchains ) - file( GLOB __availableToolchainsLst RELATIVE "${ANDROID_NDK_TOOLCHAINS_PATH}" "${ANDROID_NDK_TOOLCHAINS_PATH}/*" ) - if( __availableToolchains ) - list(SORT __availableToolchainsLst) # we need clang to go after gcc - endif() - __LIST_FILTER( __availableToolchainsLst "^[.]" ) - __LIST_FILTER( __availableToolchainsLst "llvm" ) - __LIST_FILTER( __availableToolchainsLst "renderscript" ) - __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) - if( NOT __availableToolchains AND NOT ANDROID_NDK_TOOLCHAINS_SUBPATH STREQUAL ANDROID_NDK_TOOLCHAINS_SUBPATH2 ) - __GLOB_NDK_TOOLCHAINS( __availableToolchains __availableToolchainsLst "${ANDROID_NDK_TOOLCHAINS_SUBPATH2}" ) - if( __availableToolchains ) - set( ANDROID_NDK_TOOLCHAINS_SUBPATH ${ANDROID_NDK_TOOLCHAINS_SUBPATH2} ) - endif() - endif() - endif() - if( NOT __availableToolchains ) - message( FATAL_ERROR "Could not find any working toolchain in the NDK. Probably your Android NDK is broken." ) - endif() -endif() - -# build list of available ABIs -set( ANDROID_SUPPORTED_ABIS "" ) -set( __uniqToolchainArchNames ${__availableToolchainArchs} ) -list( REMOVE_DUPLICATES __uniqToolchainArchNames ) -list( SORT __uniqToolchainArchNames ) -foreach( __arch ${__uniqToolchainArchNames} ) - list( APPEND ANDROID_SUPPORTED_ABIS ${ANDROID_SUPPORTED_ABIS_${__arch}} ) -endforeach() -unset( __uniqToolchainArchNames ) -if( NOT ANDROID_SUPPORTED_ABIS ) - message( FATAL_ERROR "No one of known Android ABIs is supported by this cmake toolchain." ) -endif() - -# choose target ABI -__INIT_VARIABLE( ANDROID_ABI VALUES ${ANDROID_SUPPORTED_ABIS} ) -# verify that target ABI is supported -list( FIND ANDROID_SUPPORTED_ABIS "${ANDROID_ABI}" __androidAbiIdx ) -if( __androidAbiIdx EQUAL -1 ) - string( REPLACE ";" "\", \"" PRINTABLE_ANDROID_SUPPORTED_ABIS "${ANDROID_SUPPORTED_ABIS}" ) - message( FATAL_ERROR "Specified ANDROID_ABI = \"${ANDROID_ABI}\" is not supported by this cmake toolchain or your NDK/toolchain. - Supported values are: \"${PRINTABLE_ANDROID_SUPPORTED_ABIS}\" - " ) -endif() -unset( __androidAbiIdx ) - -# set target ABI options -if( ANDROID_ABI STREQUAL "x86" ) - set( X86 true ) - set( ANDROID_NDK_ABI_NAME "x86" ) - set( ANDROID_ARCH_NAME "x86" ) - set( ANDROID_LLVM_TRIPLE "i686-none-linux-android" ) - set( CMAKE_SYSTEM_PROCESSOR "i686" ) -elseif( ANDROID_ABI STREQUAL "x86_64" ) - set( X86 true ) - set( X86_64 true ) - set( ANDROID_NDK_ABI_NAME "x86_64" ) - set( ANDROID_ARCH_NAME "x86_64" ) - set( CMAKE_SYSTEM_PROCESSOR "x86_64" ) - set( ANDROID_LLVM_TRIPLE "x86_64-none-linux-android" ) -elseif( ANDROID_ABI STREQUAL "mips64" ) - set( MIPS64 true ) - set( ANDROID_NDK_ABI_NAME "mips64" ) - set( ANDROID_ARCH_NAME "mips64" ) - set( ANDROID_LLVM_TRIPLE "mips64el-none-linux-android" ) - set( CMAKE_SYSTEM_PROCESSOR "mips64" ) -elseif( ANDROID_ABI STREQUAL "mips" ) - set( MIPS true ) - set( ANDROID_NDK_ABI_NAME "mips" ) - set( ANDROID_ARCH_NAME "mips" ) - set( ANDROID_LLVM_TRIPLE "mipsel-none-linux-android" ) - set( CMAKE_SYSTEM_PROCESSOR "mips" ) -elseif( ANDROID_ABI STREQUAL "arm64-v8a" ) - set( ARM64_V8A true ) - set( ANDROID_NDK_ABI_NAME "arm64-v8a" ) - set( ANDROID_ARCH_NAME "arm64" ) - set( ANDROID_LLVM_TRIPLE "aarch64-none-linux-android" ) - set( CMAKE_SYSTEM_PROCESSOR "aarch64" ) - set( VFPV3 true ) - set( NEON true ) -elseif( ANDROID_ABI STREQUAL "armeabi" ) - set( ARMEABI true ) - set( ANDROID_NDK_ABI_NAME "armeabi" ) - set( ANDROID_ARCH_NAME "arm" ) - set( ANDROID_LLVM_TRIPLE "armv5te-none-linux-androideabi" ) - set( CMAKE_SYSTEM_PROCESSOR "armv5te" ) -elseif( ANDROID_ABI STREQUAL "armeabi-v6 with VFP" ) - set( ARMEABI_V6 true ) - set( ANDROID_NDK_ABI_NAME "armeabi" ) - set( ANDROID_ARCH_NAME "arm" ) - set( ANDROID_LLVM_TRIPLE "armv5te-none-linux-androideabi" ) - set( CMAKE_SYSTEM_PROCESSOR "armv6" ) - # need always fallback to older platform - set( ARMEABI true ) -elseif( ANDROID_ABI STREQUAL "armeabi-v7a") - set( ARMEABI_V7A true ) - set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) - set( ANDROID_ARCH_NAME "arm" ) - set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) - set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) -elseif( ANDROID_ABI STREQUAL "armeabi-v7a with VFPV3" ) - set( ARMEABI_V7A true ) - set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) - set( ANDROID_ARCH_NAME "arm" ) - set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) - set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) - set( VFPV3 true ) -elseif( ANDROID_ABI STREQUAL "armeabi-v7a with NEON" ) - set( ARMEABI_V7A true ) - set( ANDROID_NDK_ABI_NAME "armeabi-v7a" ) - set( ANDROID_ARCH_NAME "arm" ) - set( ANDROID_LLVM_TRIPLE "armv7-none-linux-androideabi" ) - set( CMAKE_SYSTEM_PROCESSOR "armv7-a" ) - set( VFPV3 true ) - set( NEON true ) -else() - message( SEND_ERROR "Unknown ANDROID_ABI=\"${ANDROID_ABI}\" is specified." ) -endif() - -if( CMAKE_BINARY_DIR AND EXISTS "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" ) - # really dirty hack - # it is not possible to change CMAKE_SYSTEM_PROCESSOR after the first run... - file( APPEND "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeSystem.cmake" "SET(CMAKE_SYSTEM_PROCESSOR \"${CMAKE_SYSTEM_PROCESSOR}\")\n" ) -endif() - -if( ANDROID_ARCH_NAME STREQUAL "arm" AND NOT ARMEABI_V6 ) - __INIT_VARIABLE( ANDROID_FORCE_ARM_BUILD VALUES OFF ) - set( ANDROID_FORCE_ARM_BUILD ${ANDROID_FORCE_ARM_BUILD} CACHE BOOL "Use 32-bit ARM instructions instead of Thumb-1" FORCE ) - mark_as_advanced( ANDROID_FORCE_ARM_BUILD ) -else() - unset( ANDROID_FORCE_ARM_BUILD CACHE ) -endif() - -# choose toolchain -if( ANDROID_TOOLCHAIN_NAME ) - list( FIND __availableToolchains "${ANDROID_TOOLCHAIN_NAME}" __toolchainIdx ) - if( __toolchainIdx EQUAL -1 ) - list( SORT __availableToolchains ) - string( REPLACE ";" "\n * " toolchains_list "${__availableToolchains}" ) - set( toolchains_list " * ${toolchains_list}") - message( FATAL_ERROR "Specified toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is missing in your NDK or broken. Please verify that your NDK is working or select another compiler toolchain. -To configure the toolchain set CMake variable ANDROID_TOOLCHAIN_NAME to one of the following values:\n${toolchains_list}\n" ) - endif() - list( GET __availableToolchainArchs ${__toolchainIdx} __toolchainArch ) - if( NOT __toolchainArch STREQUAL ANDROID_ARCH_NAME ) - message( SEND_ERROR "Selected toolchain \"${ANDROID_TOOLCHAIN_NAME}\" is not able to compile binaries for the \"${ANDROID_ARCH_NAME}\" platform." ) - endif() -else() - set( __toolchainIdx -1 ) - set( __applicableToolchains "" ) - set( __toolchainMaxVersion "0.0.0" ) - list( LENGTH __availableToolchains __availableToolchainsCount ) - math( EXPR __availableToolchainsCount "${__availableToolchainsCount}-1" ) - foreach( __idx RANGE ${__availableToolchainsCount} ) - list( GET __availableToolchainArchs ${__idx} __toolchainArch ) - if( __toolchainArch STREQUAL ANDROID_ARCH_NAME ) - list( GET __availableToolchainCompilerVersions ${__idx} __toolchainVersion ) - string( REPLACE "x" "99" __toolchainVersion "${__toolchainVersion}") - if( __toolchainVersion VERSION_GREATER __toolchainMaxVersion ) - set( __toolchainMaxVersion "${__toolchainVersion}" ) - set( __toolchainIdx ${__idx} ) - endif() - endif() - endforeach() - unset( __availableToolchainsCount ) - unset( __toolchainMaxVersion ) - unset( __toolchainVersion ) -endif() -unset( __toolchainArch ) -if( __toolchainIdx EQUAL -1 ) - message( FATAL_ERROR "No one of available compiler toolchains is able to compile for ${ANDROID_ARCH_NAME} platform." ) -endif() -list( GET __availableToolchains ${__toolchainIdx} ANDROID_TOOLCHAIN_NAME ) -list( GET __availableToolchainMachines ${__toolchainIdx} ANDROID_TOOLCHAIN_MACHINE_NAME ) -list( GET __availableToolchainCompilerVersions ${__toolchainIdx} ANDROID_COMPILER_VERSION ) - -unset( __toolchainIdx ) -unset( __availableToolchains ) -unset( __availableToolchainMachines ) -unset( __availableToolchainArchs ) -unset( __availableToolchainCompilerVersions ) - -# choose native API level -__INIT_VARIABLE( ANDROID_NATIVE_API_LEVEL ENV_ANDROID_NATIVE_API_LEVEL ANDROID_API_LEVEL ENV_ANDROID_API_LEVEL ANDROID_STANDALONE_TOOLCHAIN_API_LEVEL ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME} ANDROID_DEFAULT_NDK_API_LEVEL ) -string( REPLACE "android-" "" ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" ) -string( STRIP "${ANDROID_NATIVE_API_LEVEL}" ANDROID_NATIVE_API_LEVEL ) -# adjust API level -set( __real_api_level ${ANDROID_DEFAULT_NDK_API_LEVEL_${ANDROID_ARCH_NAME}} ) -foreach( __level ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) - if( (__level LESS ANDROID_NATIVE_API_LEVEL OR __level STREQUAL ANDROID_NATIVE_API_LEVEL) AND NOT __level LESS __real_api_level ) - set( __real_api_level ${__level} ) - endif() -endforeach() -if( __real_api_level AND NOT ANDROID_NATIVE_API_LEVEL STREQUAL __real_api_level ) - message( STATUS "Adjusting Android API level 'android-${ANDROID_NATIVE_API_LEVEL}' to 'android-${__real_api_level}'") - set( ANDROID_NATIVE_API_LEVEL ${__real_api_level} ) -endif() -unset(__real_api_level) -# validate -list( FIND ANDROID_SUPPORTED_NATIVE_API_LEVELS "${ANDROID_NATIVE_API_LEVEL}" __levelIdx ) -if( __levelIdx EQUAL -1 ) - message( SEND_ERROR "Specified Android native API level 'android-${ANDROID_NATIVE_API_LEVEL}' is not supported by your NDK/toolchain." ) -else() - if( BUILD_WITH_ANDROID_NDK ) - __DETECT_NATIVE_API_LEVEL( __realApiLevel "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}/usr/include/android/api-level.h" ) - if( NOT __realApiLevel EQUAL ANDROID_NATIVE_API_LEVEL AND NOT __realApiLevel GREATER 9000 ) - message( SEND_ERROR "Specified Android API level (${ANDROID_NATIVE_API_LEVEL}) does not match to the level found (${__realApiLevel}). Probably your copy of NDK is broken." ) - endif() - unset( __realApiLevel ) - endif() - set( ANDROID_NATIVE_API_LEVEL "${ANDROID_NATIVE_API_LEVEL}" CACHE STRING "Android API level for native code" FORCE ) - set( CMAKE_ANDROID_API ${ANDROID_NATIVE_API_LEVEL} ) - if( CMAKE_VERSION VERSION_GREATER "2.8" ) - list( SORT ANDROID_SUPPORTED_NATIVE_API_LEVELS ) - set_property( CACHE ANDROID_NATIVE_API_LEVEL PROPERTY STRINGS ${ANDROID_SUPPORTED_NATIVE_API_LEVELS} ) - endif() -endif() -unset( __levelIdx ) - - -# remember target ABI -set( ANDROID_ABI "${ANDROID_ABI}" CACHE STRING "The target ABI for Android. If arm, then armeabi-v7a is recommended for hardware floating point." FORCE ) -if( CMAKE_VERSION VERSION_GREATER "2.8" ) - list( SORT ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME} ) - set_property( CACHE ANDROID_ABI PROPERTY STRINGS ${ANDROID_SUPPORTED_ABIS_${ANDROID_ARCH_NAME}} ) -endif() - - -# runtime choice (STL, rtti, exceptions) -if( NOT ANDROID_STL ) - set( ANDROID_STL gnustl_static ) -endif() -set( ANDROID_STL "${ANDROID_STL}" CACHE STRING "C++ runtime" ) -set( ANDROID_STL_FORCE_FEATURES ON CACHE BOOL "automatically configure rtti and exceptions support based on C++ runtime" ) -mark_as_advanced( ANDROID_STL ANDROID_STL_FORCE_FEATURES ) - -if( BUILD_WITH_ANDROID_NDK ) - if( NOT "${ANDROID_STL}" MATCHES "^(none|system|system_re|gabi\\+\\+_static|gabi\\+\\+_shared|stlport_static|stlport_shared|gnustl_static|gnustl_shared)$") - message( FATAL_ERROR "ANDROID_STL is set to invalid value \"${ANDROID_STL}\". -The possible values are: - none -> Do not configure the runtime. - system -> Use the default minimal system C++ runtime library. - system_re -> Same as system but with rtti and exceptions. - gabi++_static -> Use the GAbi++ runtime as a static library. - gabi++_shared -> Use the GAbi++ runtime as a shared library. - stlport_static -> Use the STLport runtime as a static library. - stlport_shared -> Use the STLport runtime as a shared library. - gnustl_static -> (default) Use the GNU STL as a static library. - gnustl_shared -> Use the GNU STL as a shared library. -" ) - endif() -elseif( BUILD_WITH_STANDALONE_TOOLCHAIN ) - if( NOT "${ANDROID_STL}" MATCHES "^(none|gnustl_static|gnustl_shared)$") - message( FATAL_ERROR "ANDROID_STL is set to invalid value \"${ANDROID_STL}\". -The possible values are: - none -> Do not configure the runtime. - gnustl_static -> (default) Use the GNU STL as a static library. - gnustl_shared -> Use the GNU STL as a shared library. -" ) - endif() -endif() - -unset( ANDROID_RTTI ) -unset( ANDROID_EXCEPTIONS ) -unset( ANDROID_STL_INCLUDE_DIRS ) -unset( __libstl ) -unset( __libsupcxx ) - -if( NOT _CMAKE_IN_TRY_COMPILE AND ANDROID_NDK_RELEASE STREQUAL "r7b" AND ARMEABI_V7A AND NOT VFPV3 AND ANDROID_STL MATCHES "gnustl" ) - message( WARNING "The GNU STL armeabi-v7a binaries from NDK r7b can crash non-NEON devices. The files provided with NDK r7b were not configured properly, resulting in crashes on Tegra2-based devices and others when trying to use certain floating-point functions (e.g., cosf, sinf, expf). -You are strongly recommended to switch to another NDK release. -" ) -endif() - -if( NOT _CMAKE_IN_TRY_COMPILE AND X86 AND ANDROID_STL MATCHES "gnustl" AND ANDROID_NDK_RELEASE STREQUAL "r6" ) - message( WARNING "The x86 system header file from NDK r6 has incorrect definition for ptrdiff_t. You are recommended to upgrade to a newer NDK release or manually patch the header: -See https://android.googlesource.com/platform/development.git f907f4f9d4e56ccc8093df6fee54454b8bcab6c2 - diff --git a/ndk/platforms/android-9/arch-x86/include/machine/_types.h b/ndk/platforms/android-9/arch-x86/include/machine/_types.h - index 5e28c64..65892a1 100644 - --- a/ndk/platforms/android-9/arch-x86/include/machine/_types.h - +++ b/ndk/platforms/android-9/arch-x86/include/machine/_types.h - @@ -51,7 +51,11 @@ typedef long int ssize_t; - #endif - #ifndef _PTRDIFF_T - #define _PTRDIFF_T - -typedef long ptrdiff_t; - +# ifdef __ANDROID__ - + typedef int ptrdiff_t; - +# else - + typedef long ptrdiff_t; - +# endif - #endif -" ) -endif() - - -# setup paths and STL for standalone toolchain -if( BUILD_WITH_STANDALONE_TOOLCHAIN ) - set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" ) - set( ANDROID_CLANG_TOOLCHAIN_ROOT "${ANDROID_STANDALONE_TOOLCHAIN}" ) - set( ANDROID_SYSROOT "${ANDROID_STANDALONE_TOOLCHAIN}/sysroot" ) - - if( NOT ANDROID_STL STREQUAL "none" ) - set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/include/c++/${ANDROID_COMPILER_VERSION}" ) - if( NOT EXISTS "${ANDROID_STL_INCLUDE_DIRS}" ) - # old location ( pre r8c ) - set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/include/c++/${ANDROID_COMPILER_VERSION}" ) - endif() - if( ARMEABI_V7A AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}/bits" ) - list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/${CMAKE_SYSTEM_PROCESSOR}" ) - elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb/bits" ) - list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/thumb" ) - else() - list( APPEND ANDROID_STL_INCLUDE_DIRS "${ANDROID_STL_INCLUDE_DIRS}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" ) - endif() - # always search static GNU STL to get the location of libsupc++.a - if( ARMEABI_V7A AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libstdc++.a" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb" ) - elseif( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libstdc++.a" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}" ) - elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libstdc++.a" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb" ) - elseif( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libstdc++.a" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib" ) - endif() - if( __libstl ) - set( __libsupcxx "${__libstl}/libsupc++.a" ) - set( __libstl "${__libstl}/libstdc++.a" ) - endif() - if( NOT EXISTS "${__libsupcxx}" ) - message( FATAL_ERROR "The required libstdsupc++.a is missing in your standalone toolchain. - Usually it happens because of bug in make-standalone-toolchain.sh script from NDK r7, r7b and r7c. - You need to either upgrade to newer NDK or manually copy - $ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a - to - ${__libsupcxx} - " ) - endif() - if( ANDROID_STL STREQUAL "gnustl_shared" ) - if( ARMEABI_V7A AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libgnustl_shared.so" ) - elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD AND EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libgnustl_shared.so" ) - elseif( EXISTS "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so" ) - set( __libstl "${ANDROID_STANDALONE_TOOLCHAIN}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libgnustl_shared.so" ) - endif() - endif() - endif() -endif() - -# clang -if( "${ANDROID_TOOLCHAIN_NAME}" STREQUAL "standalone-clang" ) - set( ANDROID_COMPILER_IS_CLANG 1 ) - execute_process( COMMAND "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/clang${TOOL_OS_SUFFIX}" --version OUTPUT_VARIABLE ANDROID_CLANG_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE ) - string( REGEX MATCH "[0-9]+[.][0-9]+" ANDROID_CLANG_VERSION "${ANDROID_CLANG_VERSION}") -elseif( "${ANDROID_TOOLCHAIN_NAME}" MATCHES "-clang3[.][0-9]?$" ) - string( REGEX MATCH "3[.][0-9]$" ANDROID_CLANG_VERSION "${ANDROID_TOOLCHAIN_NAME}") - string( REGEX REPLACE "-clang${ANDROID_CLANG_VERSION}$" "-${ANDROID_COMPILER_VERSION}" ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" ) - if( NOT EXISTS "${ANDROID_NDK_TOOLCHAINS_PATH}/llvm-${ANDROID_CLANG_VERSION}${ANDROID_NDK_TOOLCHAINS_SUBPATH}/bin/clang${TOOL_OS_SUFFIX}" ) - message( FATAL_ERROR "Could not find the Clang compiler driver" ) - endif() - set( ANDROID_COMPILER_IS_CLANG 1 ) - set( ANDROID_CLANG_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/llvm-${ANDROID_CLANG_VERSION}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) -else() - set( ANDROID_GCC_TOOLCHAIN_NAME "${ANDROID_TOOLCHAIN_NAME}" ) - unset( ANDROID_COMPILER_IS_CLANG CACHE ) -endif() - -string( REPLACE "." "" _clang_name "clang${ANDROID_CLANG_VERSION}" ) -if( NOT EXISTS "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}" ) - set( _clang_name "clang" ) -endif() - - -# setup paths and STL for NDK -if( BUILD_WITH_ANDROID_NDK ) - set( ANDROID_TOOLCHAIN_ROOT "${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}${ANDROID_NDK_TOOLCHAINS_SUBPATH}" ) - set( ANDROID_SYSROOT "${ANDROID_NDK}/platforms/android-${ANDROID_NATIVE_API_LEVEL}/arch-${ANDROID_ARCH_NAME}" ) - - if( ANDROID_STL STREQUAL "none" ) - # do nothing - elseif( ANDROID_STL STREQUAL "system" ) - set( ANDROID_RTTI OFF ) - set( ANDROID_EXCEPTIONS OFF ) - set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/system/include" ) - elseif( ANDROID_STL STREQUAL "system_re" ) - set( ANDROID_RTTI ON ) - set( ANDROID_EXCEPTIONS ON ) - set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/system/include" ) - elseif( ANDROID_STL MATCHES "gabi" ) - if( ANDROID_NDK_RELEASE_NUM LESS 7000 ) # before r7 - message( FATAL_ERROR "gabi++ is not awailable in your NDK. You have to upgrade to NDK r7 or newer to use gabi++.") - endif() - set( ANDROID_RTTI ON ) - set( ANDROID_EXCEPTIONS OFF ) - set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/gabi++/include" ) - set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gabi++/libs/${ANDROID_NDK_ABI_NAME}/libgabi++_static.a" ) - elseif( ANDROID_STL MATCHES "stlport" ) - if( NOT ANDROID_NDK_RELEASE_NUM LESS 8004 ) # before r8d - set( ANDROID_EXCEPTIONS ON ) - else() - set( ANDROID_EXCEPTIONS OFF ) - endif() - if( ANDROID_NDK_RELEASE_NUM LESS 7000 ) # before r7 - set( ANDROID_RTTI OFF ) - else() - set( ANDROID_RTTI ON ) - endif() - set( ANDROID_STL_INCLUDE_DIRS "${ANDROID_NDK}/sources/cxx-stl/stlport/stlport" ) - set( __libstl "${ANDROID_NDK}/sources/cxx-stl/stlport/libs/${ANDROID_NDK_ABI_NAME}/libstlport_static.a" ) - elseif( ANDROID_STL MATCHES "gnustl" ) - set( ANDROID_EXCEPTIONS ON ) - set( ANDROID_RTTI ON ) - if( EXISTS "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" ) - if( ARMEABI_V7A AND ANDROID_COMPILER_VERSION VERSION_EQUAL "4.7" AND ANDROID_NDK_RELEASE STREQUAL "r8d" ) - # gnustl binary for 4.7 compiler is buggy :( - # TODO: look for right fix - set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.6" ) - else() - set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}" ) - endif() - else() - set( __libstl "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++" ) - endif() - set( ANDROID_STL_INCLUDE_DIRS "${__libstl}/include" "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/include" "${__libstl}/include/backward" ) - if( EXISTS "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a" ) - set( __libstl "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libgnustl_static.a" ) - else() - set( __libstl "${__libstl}/libs/${ANDROID_NDK_ABI_NAME}/libstdc++.a" ) - endif() - else() - message( FATAL_ERROR "Unknown runtime: ${ANDROID_STL}" ) - endif() - # find libsupc++.a - rtti & exceptions - if( ANDROID_STL STREQUAL "system_re" OR ANDROID_STL MATCHES "gnustl" ) - set( __libsupcxx "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/${ANDROID_COMPILER_VERSION}/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a" ) # r8b or newer - if( NOT EXISTS "${__libsupcxx}" ) - set( __libsupcxx "${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/libs/${ANDROID_NDK_ABI_NAME}/libsupc++.a" ) # r7-r8 - endif() - if( NOT EXISTS "${__libsupcxx}" ) # before r7 - if( ARMEABI_V7A ) - if( ANDROID_FORCE_ARM_BUILD ) - set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/libsupc++.a" ) - else() - set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/${CMAKE_SYSTEM_PROCESSOR}/thumb/libsupc++.a" ) - endif() - elseif( ARMEABI AND NOT ANDROID_FORCE_ARM_BUILD ) - set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/thumb/libsupc++.a" ) - else() - set( __libsupcxx "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}/lib/libsupc++.a" ) - endif() - endif() - if( NOT EXISTS "${__libsupcxx}") - message( ERROR "Could not find libsupc++.a for a chosen platform. Either your NDK is not supported or is broken.") - endif() - endif() -endif() - - -# case of shared STL linkage -if( ANDROID_STL MATCHES "shared" AND DEFINED __libstl ) - string( REPLACE "_static.a" "_shared.so" __libstl "${__libstl}" ) - # TODO: check if .so file exists before the renaming -endif() - - -# ccache support -__INIT_VARIABLE( _ndk_ccache NDK_CCACHE ENV_NDK_CCACHE ) -if( _ndk_ccache ) - if( DEFINED NDK_CCACHE AND NOT EXISTS NDK_CCACHE ) - unset( NDK_CCACHE CACHE ) - endif() - find_program( NDK_CCACHE "${_ndk_ccache}" DOC "The path to ccache binary") -else() - unset( NDK_CCACHE CACHE ) -endif() -unset( _ndk_ccache ) - - -# setup the cross-compiler -if( NOT CMAKE_C_COMPILER ) - if( NDK_CCACHE AND NOT ANDROID_SYSROOT MATCHES "[ ;\"]" ) - set( CMAKE_C_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C compiler" ) - set( CMAKE_CXX_COMPILER "${NDK_CCACHE}" CACHE PATH "ccache as C++ compiler" ) - if( ANDROID_COMPILER_IS_CLANG ) - set( CMAKE_C_COMPILER_ARG1 "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}" CACHE PATH "C compiler") - set( CMAKE_CXX_COMPILER_ARG1 "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler") - else() - set( CMAKE_C_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "C compiler") - set( CMAKE_CXX_COMPILER_ARG1 "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler") - endif() - else() - if( ANDROID_COMPILER_IS_CLANG ) - set( CMAKE_C_COMPILER "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}${TOOL_OS_SUFFIX}" CACHE PATH "C compiler") - set( CMAKE_CXX_COMPILER "${ANDROID_CLANG_TOOLCHAIN_ROOT}/bin/${_clang_name}++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler") - else() - set( CMAKE_C_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "C compiler" ) - set( CMAKE_CXX_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-g++${TOOL_OS_SUFFIX}" CACHE PATH "C++ compiler" ) - endif() - endif() - set( CMAKE_ASM_COMPILER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-gcc${TOOL_OS_SUFFIX}" CACHE PATH "assembler" ) - set( CMAKE_STRIP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-strip${TOOL_OS_SUFFIX}" CACHE PATH "strip" ) - set( CMAKE_AR "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ar${TOOL_OS_SUFFIX}" CACHE PATH "archive" ) - set( CMAKE_LINKER "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ld${TOOL_OS_SUFFIX}" CACHE PATH "linker" ) - set( CMAKE_NM "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-nm${TOOL_OS_SUFFIX}" CACHE PATH "nm" ) - set( CMAKE_OBJCOPY "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objcopy${TOOL_OS_SUFFIX}" CACHE PATH "objcopy" ) - set( CMAKE_OBJDUMP "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-objdump${TOOL_OS_SUFFIX}" CACHE PATH "objdump" ) - set( CMAKE_RANLIB "${ANDROID_TOOLCHAIN_ROOT}/bin/${ANDROID_TOOLCHAIN_MACHINE_NAME}-ranlib${TOOL_OS_SUFFIX}" CACHE PATH "ranlib" ) -endif() - -set( _CMAKE_TOOLCHAIN_PREFIX "${ANDROID_TOOLCHAIN_MACHINE_NAME}-" ) -if( CMAKE_VERSION VERSION_LESS 2.8.5 ) - set( CMAKE_ASM_COMPILER_ARG1 "-c" ) -endif() -if( APPLE ) - find_program( CMAKE_INSTALL_NAME_TOOL NAMES install_name_tool ) - if( NOT CMAKE_INSTALL_NAME_TOOL ) - message( FATAL_ERROR "Could not find install_name_tool, please check your installation." ) - endif() - mark_as_advanced( CMAKE_INSTALL_NAME_TOOL ) -endif() - -# Force set compilers because standard identification works badly for us -include( CMakeForceCompiler ) -CMAKE_FORCE_C_COMPILER( "${CMAKE_C_COMPILER}" GNU ) -if( ANDROID_COMPILER_IS_CLANG ) - set( CMAKE_C_COMPILER_ID Clang ) -endif() -set( CMAKE_C_PLATFORM_ID Linux ) -if( X86_64 OR MIPS64 OR ARM64_V8A ) - set( CMAKE_C_SIZEOF_DATA_PTR 8 ) -else() - set( CMAKE_C_SIZEOF_DATA_PTR 4 ) -endif() -set( CMAKE_C_HAS_ISYSROOT 1 ) -set( CMAKE_C_COMPILER_ABI ELF ) -CMAKE_FORCE_CXX_COMPILER( "${CMAKE_CXX_COMPILER}" GNU ) -if( ANDROID_COMPILER_IS_CLANG ) - set( CMAKE_CXX_COMPILER_ID Clang) -endif() -set( CMAKE_CXX_PLATFORM_ID Linux ) -set( CMAKE_CXX_SIZEOF_DATA_PTR ${CMAKE_C_SIZEOF_DATA_PTR} ) -set( CMAKE_CXX_HAS_ISYSROOT 1 ) -set( CMAKE_CXX_COMPILER_ABI ELF ) -set( CMAKE_CXX_SOURCE_FILE_EXTENSIONS cc cp cxx cpp CPP c++ C ) -# force ASM compiler (required for CMake < 2.8.5) -set( CMAKE_ASM_COMPILER_ID_RUN TRUE ) -set( CMAKE_ASM_COMPILER_ID GNU ) -set( CMAKE_ASM_COMPILER_WORKS TRUE ) -set( CMAKE_ASM_COMPILER_FORCED TRUE ) -set( CMAKE_COMPILER_IS_GNUASM 1) -set( CMAKE_ASM_SOURCE_FILE_EXTENSIONS s S asm ) - -foreach( lang C CXX ASM ) - if( ANDROID_COMPILER_IS_CLANG ) - set( CMAKE_${lang}_COMPILER_VERSION ${ANDROID_CLANG_VERSION} ) - else() - set( CMAKE_${lang}_COMPILER_VERSION ${ANDROID_COMPILER_VERSION} ) - endif() -endforeach() - -# flags and definitions -remove_definitions( -DANDROID ) -add_definitions( -DANDROID ) - -if( ANDROID_SYSROOT MATCHES "[ ;\"]" ) - if( CMAKE_HOST_WIN32 ) - # try to convert path to 8.3 form - file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cvt83.cmd" "@echo %~s1" ) - execute_process( COMMAND "$ENV{ComSpec}" /c "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/cvt83.cmd" "${ANDROID_SYSROOT}" - OUTPUT_VARIABLE __path OUTPUT_STRIP_TRAILING_WHITESPACE - RESULT_VARIABLE __result ERROR_QUIET ) - if( __result EQUAL 0 ) - file( TO_CMAKE_PATH "${__path}" ANDROID_SYSROOT ) - set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) - else() - set( ANDROID_CXX_FLAGS "--sysroot=\"${ANDROID_SYSROOT}\"" ) - endif() - else() - set( ANDROID_CXX_FLAGS "'--sysroot=${ANDROID_SYSROOT}'" ) - endif() - if( NOT _CMAKE_IN_TRY_COMPILE ) - # quotes can break try_compile and compiler identification - message(WARNING "Path to your Android NDK (or toolchain) has non-alphanumeric symbols.\nThe build might be broken.\n") - endif() -else() - set( ANDROID_CXX_FLAGS "--sysroot=${ANDROID_SYSROOT}" ) -endif() - -# NDK flags -if (ARM64_V8A ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" ) - set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer -fstrict-aliasing" ) - set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer -fno-strict-aliasing" ) - if( NOT ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300" ) - endif() -elseif( ARMEABI OR ARMEABI_V7A) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" ) - if( NOT ANDROID_FORCE_ARM_BUILD AND NOT ARMEABI_V6 ) - set( ANDROID_CXX_FLAGS_RELEASE "-mthumb -fomit-frame-pointer -fno-strict-aliasing" ) - set( ANDROID_CXX_FLAGS_DEBUG "-marm -fno-omit-frame-pointer -fno-strict-aliasing" ) - if( NOT ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -finline-limit=64" ) - endif() - else() - # always compile ARMEABI_V6 in arm mode; otherwise there is no difference from ARMEABI - set( ANDROID_CXX_FLAGS_RELEASE "-marm -fomit-frame-pointer -fstrict-aliasing" ) - set( ANDROID_CXX_FLAGS_DEBUG "-marm -fno-omit-frame-pointer -fno-strict-aliasing" ) - if( NOT ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" ) - endif() - endif() -elseif( X86 OR X86_64 ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funwind-tables" ) - if( NOT ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -funswitch-loops -finline-limit=300" ) - endif() - set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer -fstrict-aliasing" ) - set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer -fno-strict-aliasing" ) -elseif( MIPS OR MIPS64 ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fno-strict-aliasing -finline-functions -funwind-tables -fmessage-length=0" ) - set( ANDROID_CXX_FLAGS_RELEASE "-fomit-frame-pointer" ) - set( ANDROID_CXX_FLAGS_DEBUG "-fno-omit-frame-pointer" ) - if( NOT ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers" ) - set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} -funswitch-loops -finline-limit=300" ) - endif() -elseif() - set( ANDROID_CXX_FLAGS_RELEASE "" ) - set( ANDROID_CXX_FLAGS_DEBUG "" ) -endif() - -set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fsigned-char" ) # good/necessary when porting desktop libraries - -if( NOT X86 AND NOT ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "-Wno-psabi ${ANDROID_CXX_FLAGS}" ) -endif() - -if( NOT ANDROID_COMPILER_VERSION VERSION_LESS "4.6" ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -no-canonical-prefixes" ) # see https://android-review.googlesource.com/#/c/47564/ -endif() - -# ABI-specific flags -if( ARMEABI_V7A ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv7-a -mfloat-abi=softfp" ) - if( NEON ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=neon" ) - elseif( VFPV3 ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3" ) - else() - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -mfpu=vfpv3-d16" ) - endif() -elseif( ARMEABI_V6 ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv6 -mfloat-abi=softfp -mfpu=vfp" ) # vfp == vfpv2 -elseif( ARMEABI ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -march=armv5te -mtune=xscale -msoft-float" ) -endif() - -if( ANDROID_STL MATCHES "gnustl" AND (EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}") ) - set( CMAKE_CXX_CREATE_SHARED_LIBRARY " -o " ) - set( CMAKE_CXX_CREATE_SHARED_MODULE " -o " ) - set( CMAKE_CXX_LINK_EXECUTABLE " -o " ) -else() - set( CMAKE_CXX_CREATE_SHARED_LIBRARY " -o " ) - set( CMAKE_CXX_CREATE_SHARED_MODULE " -o " ) - set( CMAKE_CXX_LINK_EXECUTABLE " -o " ) -endif() - -# STL -if( EXISTS "${__libstl}" OR EXISTS "${__libsupcxx}" ) - if( EXISTS "${__libstl}" ) - set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${__libstl}\"" ) - set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${__libstl}\"" ) - set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libstl}\"" ) - endif() - if( EXISTS "${__libsupcxx}" ) - set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${__libsupcxx}\"" ) - set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${__libsupcxx}\"" ) - set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} \"${__libsupcxx}\"" ) - # C objects: - set( CMAKE_C_CREATE_SHARED_LIBRARY " -o " ) - set( CMAKE_C_CREATE_SHARED_MODULE " -o " ) - set( CMAKE_C_LINK_EXECUTABLE " -o " ) - set( CMAKE_C_CREATE_SHARED_LIBRARY "${CMAKE_C_CREATE_SHARED_LIBRARY} \"${__libsupcxx}\"" ) - set( CMAKE_C_CREATE_SHARED_MODULE "${CMAKE_C_CREATE_SHARED_MODULE} \"${__libsupcxx}\"" ) - set( CMAKE_C_LINK_EXECUTABLE "${CMAKE_C_LINK_EXECUTABLE} \"${__libsupcxx}\"" ) - endif() - if( ANDROID_STL MATCHES "gnustl" ) - if( NOT EXISTS "${ANDROID_LIBM_PATH}" ) - set( ANDROID_LIBM_PATH -lm ) - endif() - set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} ${ANDROID_LIBM_PATH}" ) - set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} ${ANDROID_LIBM_PATH}" ) - set( CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} ${ANDROID_LIBM_PATH}" ) - endif() -endif() - -# variables controlling optional build flags -if( ANDROID_NDK_RELEASE_NUM LESS 7000 ) # before r7 - # libGLESv2.so in NDK's prior to r7 refers to missing external symbols. - # So this flag option is required for all projects using OpenGL from native. - __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES ON ) -else() - __INIT_VARIABLE( ANDROID_SO_UNDEFINED VALUES OFF ) -endif() -__INIT_VARIABLE( ANDROID_NO_UNDEFINED VALUES ON ) -__INIT_VARIABLE( ANDROID_FUNCTION_LEVEL_LINKING VALUES ON ) -__INIT_VARIABLE( ANDROID_GOLD_LINKER VALUES ON ) -__INIT_VARIABLE( ANDROID_NOEXECSTACK VALUES ON ) -__INIT_VARIABLE( ANDROID_RELRO VALUES ON ) - -set( ANDROID_NO_UNDEFINED ${ANDROID_NO_UNDEFINED} CACHE BOOL "Show all undefined symbols as linker errors" ) -set( ANDROID_SO_UNDEFINED ${ANDROID_SO_UNDEFINED} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" ) -set( ANDROID_FUNCTION_LEVEL_LINKING ${ANDROID_FUNCTION_LEVEL_LINKING} CACHE BOOL "Put each function in separate section and enable garbage collection of unused input sections at link time" ) -set( ANDROID_GOLD_LINKER ${ANDROID_GOLD_LINKER} CACHE BOOL "Enables gold linker" ) -set( ANDROID_NOEXECSTACK ${ANDROID_NOEXECSTACK} CACHE BOOL "Allows or disallows undefined symbols in shared libraries" ) -set( ANDROID_RELRO ${ANDROID_RELRO} CACHE BOOL "Enables RELRO - a memory corruption mitigation technique" ) -mark_as_advanced( ANDROID_NO_UNDEFINED ANDROID_SO_UNDEFINED ANDROID_FUNCTION_LEVEL_LINKING ANDROID_GOLD_LINKER ANDROID_NOEXECSTACK ANDROID_RELRO ) - -# linker flags -set( ANDROID_LINKER_FLAGS "" ) - -if( ARMEABI_V7A ) - # this is *required* to use the following linker flags that routes around - # a CPU bug in some Cortex-A8 implementations: - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--fix-cortex-a8" ) -endif() - -if( ANDROID_NO_UNDEFINED ) - if( MIPS ) - # there is some sysroot-related problem in mips linker... - if( NOT ANDROID_SYSROOT MATCHES "[ ;\"]" ) - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--no-undefined -Wl,-rpath-link,${ANDROID_SYSROOT}/usr/lib" ) - endif() - else() - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--no-undefined" ) - endif() -endif() - -if( ANDROID_SO_UNDEFINED ) - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-allow-shlib-undefined" ) -endif() - -if( ANDROID_FUNCTION_LEVEL_LINKING ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -fdata-sections -ffunction-sections" ) - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,--gc-sections" ) -endif() - -if( ANDROID_COMPILER_VERSION VERSION_EQUAL "4.6" ) - if( ANDROID_GOLD_LINKER AND (CMAKE_HOST_UNIX OR ANDROID_NDK_RELEASE_NUM GREATER 8002) AND (ARMEABI OR ARMEABI_V7A OR X86) ) - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=gold" ) - elseif( ANDROID_NDK_RELEASE_NUM GREATER 8002 ) # after r8b - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -fuse-ld=bfd" ) - elseif( ANDROID_NDK_RELEASE STREQUAL "r8b" AND ARMEABI AND NOT _CMAKE_IN_TRY_COMPILE ) - message( WARNING "The default bfd linker from arm GCC 4.6 toolchain can fail with 'unresolvable R_ARM_THM_CALL relocation' error message. See https://code.google.com/p/android/issues/detail?id=35342 - On Linux and OS X host platform you can workaround this problem using gold linker (default). - Rerun cmake with -DANDROID_GOLD_LINKER=ON option in case of problems. -" ) - endif() -endif() # version 4.6 - -if( ANDROID_NOEXECSTACK ) - if( ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -Xclang -mnoexecstack" ) - else() - set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS} -Wa,--noexecstack" ) - endif() - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-z,noexecstack" ) -endif() - -if( ANDROID_RELRO ) - set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} -Wl,-z,relro -Wl,-z,now" ) -endif() - -if( ANDROID_COMPILER_IS_CLANG ) - set( ANDROID_CXX_FLAGS "-target ${ANDROID_LLVM_TRIPLE} -Qunused-arguments ${ANDROID_CXX_FLAGS}" ) - if( BUILD_WITH_ANDROID_NDK ) - set( ANDROID_CXX_FLAGS "-gcc-toolchain ${ANDROID_TOOLCHAIN_ROOT} ${ANDROID_CXX_FLAGS}" ) - endif() -endif() - -# cache flags -set( CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags" ) -set( CMAKE_C_FLAGS "" CACHE STRING "c flags" ) -set( CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "c++ Release flags" ) -set( CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG" CACHE STRING "c Release flags" ) -set( CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG -D_DEBUG" CACHE STRING "c++ Debug flags" ) -set( CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG -D_DEBUG" CACHE STRING "c Debug flags" ) -set( CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags" ) -set( CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags" ) -set( CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags" ) - -# put flags to cache (for debug purpose only) -set( ANDROID_CXX_FLAGS "${ANDROID_CXX_FLAGS}" CACHE INTERNAL "Android specific c/c++ flags" ) -set( ANDROID_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE}" CACHE INTERNAL "Android specific c/c++ Release flags" ) -set( ANDROID_CXX_FLAGS_DEBUG "${ANDROID_CXX_FLAGS_DEBUG}" CACHE INTERNAL "Android specific c/c++ Debug flags" ) -set( ANDROID_LINKER_FLAGS "${ANDROID_LINKER_FLAGS}" CACHE INTERNAL "Android specific c/c++ linker flags" ) - -# finish flags -set( CMAKE_CXX_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_CXX_FLAGS}" ) -set( CMAKE_C_FLAGS "${ANDROID_CXX_FLAGS} ${CMAKE_C_FLAGS}" ) -set( CMAKE_CXX_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS_RELEASE}" ) -set( CMAKE_C_FLAGS_RELEASE "${ANDROID_CXX_FLAGS_RELEASE} ${CMAKE_C_FLAGS_RELEASE}" ) -set( CMAKE_CXX_FLAGS_DEBUG "${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_DEBUG}" ) -set( CMAKE_C_FLAGS_DEBUG "${ANDROID_CXX_FLAGS_DEBUG} ${CMAKE_C_FLAGS_DEBUG}" ) -set( CMAKE_SHARED_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_SHARED_LINKER_FLAGS}" ) -set( CMAKE_MODULE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_MODULE_LINKER_FLAGS}" ) -set( CMAKE_EXE_LINKER_FLAGS "${ANDROID_LINKER_FLAGS} ${CMAKE_EXE_LINKER_FLAGS}" ) - -if( MIPS AND BUILD_WITH_ANDROID_NDK AND ANDROID_NDK_RELEASE STREQUAL "r8" ) - set( CMAKE_SHARED_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}/mipself.xsc ${CMAKE_SHARED_LINKER_FLAGS}" ) - set( CMAKE_MODULE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}/mipself.xsc ${CMAKE_MODULE_LINKER_FLAGS}" ) - set( CMAKE_EXE_LINKER_FLAGS "-Wl,-T,${ANDROID_NDK_TOOLCHAINS_PATH}/${ANDROID_GCC_TOOLCHAIN_NAME}/mipself.x ${CMAKE_EXE_LINKER_FLAGS}" ) -endif() - -# pie/pic -if( NOT (ANDROID_NATIVE_API_LEVEL LESS 16) AND (NOT DEFINED ANDROID_APP_PIE OR ANDROID_APP_PIE) AND (CMAKE_VERSION VERSION_GREATER 2.8.8) ) - set( CMAKE_POSITION_INDEPENDENT_CODE TRUE ) - set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie") -else() - set( CMAKE_POSITION_INDEPENDENT_CODE FALSE ) - set( CMAKE_CXX_FLAGS "-fpic ${CMAKE_CXX_FLAGS}" ) - set( CMAKE_C_FLAGS "-fpic ${CMAKE_C_FLAGS}" ) -endif() - -# configure rtti -if( DEFINED ANDROID_RTTI AND ANDROID_STL_FORCE_FEATURES ) - if( ANDROID_RTTI ) - set( CMAKE_CXX_FLAGS "-frtti ${CMAKE_CXX_FLAGS}" ) - else() - set( CMAKE_CXX_FLAGS "-fno-rtti ${CMAKE_CXX_FLAGS}" ) - endif() -endif() - -# configure exceptios -if( DEFINED ANDROID_EXCEPTIONS AND ANDROID_STL_FORCE_FEATURES ) - if( ANDROID_EXCEPTIONS ) - set( CMAKE_CXX_FLAGS "-fexceptions ${CMAKE_CXX_FLAGS}" ) - set( CMAKE_C_FLAGS "-fexceptions ${CMAKE_C_FLAGS}" ) - else() - set( CMAKE_CXX_FLAGS "-fno-exceptions ${CMAKE_CXX_FLAGS}" ) - set( CMAKE_C_FLAGS "-fno-exceptions ${CMAKE_C_FLAGS}" ) - endif() -endif() - -# global includes and link directories -include_directories( SYSTEM "${ANDROID_SYSROOT}/usr/include" ${ANDROID_STL_INCLUDE_DIRS} ) -get_filename_component(__android_install_path "${CMAKE_INSTALL_PREFIX}/libs/${ANDROID_NDK_ABI_NAME}" ABSOLUTE) # avoid CMP0015 policy warning -link_directories( "${__android_install_path}" ) - -# detect if need link crtbegin_so.o explicitly -if( NOT DEFINED ANDROID_EXPLICIT_CRT_LINK ) - set( __cmd "${CMAKE_CXX_CREATE_SHARED_LIBRARY}" ) - string( REPLACE "" "${CMAKE_CXX_COMPILER} ${CMAKE_CXX_COMPILER_ARG1}" __cmd "${__cmd}" ) - string( REPLACE "" "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1}" __cmd "${__cmd}" ) - string( REPLACE "" "${CMAKE_CXX_FLAGS}" __cmd "${__cmd}" ) - string( REPLACE "" "" __cmd "${__cmd}" ) - string( REPLACE "" "${CMAKE_SHARED_LINKER_FLAGS}" __cmd "${__cmd}" ) - string( REPLACE "" "-shared" __cmd "${__cmd}" ) - string( REPLACE "" "" __cmd "${__cmd}" ) - string( REPLACE "" "" __cmd "${__cmd}" ) - string( REPLACE "" "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/toolchain_crtlink_test.so" __cmd "${__cmd}" ) - string( REPLACE "" "\"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\"" __cmd "${__cmd}" ) - string( REPLACE "" "" __cmd "${__cmd}" ) - separate_arguments( __cmd ) - foreach( __var ANDROID_NDK ANDROID_NDK_TOOLCHAINS_PATH ANDROID_STANDALONE_TOOLCHAIN ) - if( ${__var} ) - set( __tmp "${${__var}}" ) - separate_arguments( __tmp ) - string( REPLACE "${__tmp}" "${${__var}}" __cmd "${__cmd}") - endif() - endforeach() - string( REPLACE "'" "" __cmd "${__cmd}" ) - string( REPLACE "\"" "" __cmd "${__cmd}" ) - execute_process( COMMAND ${__cmd} RESULT_VARIABLE __cmd_result OUTPUT_QUIET ERROR_QUIET ) - if( __cmd_result EQUAL 0 ) - set( ANDROID_EXPLICIT_CRT_LINK ON ) - else() - set( ANDROID_EXPLICIT_CRT_LINK OFF ) - endif() -endif() - -if( ANDROID_EXPLICIT_CRT_LINK ) - set( CMAKE_CXX_CREATE_SHARED_LIBRARY "${CMAKE_CXX_CREATE_SHARED_LIBRARY} \"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\"" ) - set( CMAKE_CXX_CREATE_SHARED_MODULE "${CMAKE_CXX_CREATE_SHARED_MODULE} \"${ANDROID_SYSROOT}/usr/lib/crtbegin_so.o\"" ) -endif() - -# setup output directories -set( CMAKE_INSTALL_PREFIX "${ANDROID_TOOLCHAIN_ROOT}/user" CACHE STRING "path for installing" ) - -if( DEFINED LIBRARY_OUTPUT_PATH_ROOT - OR EXISTS "${CMAKE_SOURCE_DIR}/AndroidManifest.xml" - OR (EXISTS "${CMAKE_SOURCE_DIR}/../AndroidManifest.xml" AND EXISTS "${CMAKE_SOURCE_DIR}/../jni/") ) - set( LIBRARY_OUTPUT_PATH_ROOT ${CMAKE_SOURCE_DIR} CACHE PATH "Root for binaries output, set this to change where Android libs are installed to" ) - if( NOT _CMAKE_IN_TRY_COMPILE ) - if( EXISTS "${CMAKE_SOURCE_DIR}/jni/CMakeLists.txt" ) - set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for applications" ) - else() - set( EXECUTABLE_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/bin" CACHE PATH "Output directory for applications" ) - endif() - set( LIBRARY_OUTPUT_PATH "${LIBRARY_OUTPUT_PATH_ROOT}/libs/${ANDROID_NDK_ABI_NAME}" CACHE PATH "Output directory for Android libs" ) - endif() -endif() - -# copy shaed stl library to build directory -if( NOT _CMAKE_IN_TRY_COMPILE AND __libstl MATCHES "[.]so$" AND DEFINED LIBRARY_OUTPUT_PATH ) - get_filename_component( __libstlname "${__libstl}" NAME ) - execute_process( COMMAND "${CMAKE_COMMAND}" -E copy_if_different "${__libstl}" "${LIBRARY_OUTPUT_PATH}/${__libstlname}" RESULT_VARIABLE __fileCopyProcess ) - if( NOT __fileCopyProcess EQUAL 0 OR NOT EXISTS "${LIBRARY_OUTPUT_PATH}/${__libstlname}") - message( SEND_ERROR "Failed copying of ${__libstl} to the ${LIBRARY_OUTPUT_PATH}/${__libstlname}" ) - endif() - unset( __fileCopyProcess ) - unset( __libstlname ) -endif() - - -# set these global flags for cmake client scripts to change behavior -set( ANDROID True ) -set( BUILD_ANDROID True ) - -# where is the target environment -set( CMAKE_FIND_ROOT_PATH "${ANDROID_TOOLCHAIN_ROOT}/bin" "${ANDROID_TOOLCHAIN_ROOT}/${ANDROID_TOOLCHAIN_MACHINE_NAME}" "${ANDROID_SYSROOT}" "${CMAKE_INSTALL_PREFIX}" "${CMAKE_INSTALL_PREFIX}/share" ) - -# only search for libraries and includes in the ndk toolchain -set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) -set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) -set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) - - -# macro to find packages on the host OS -macro( find_host_package ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) - if( CMAKE_HOST_WIN32 ) - SET( WIN32 1 ) - SET( UNIX ) - elseif( CMAKE_HOST_APPLE ) - SET( APPLE 1 ) - SET( UNIX ) - endif() - find_package( ${ARGN} ) - SET( WIN32 ) - SET( APPLE ) - SET( UNIX 1 ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) -endmacro() - - -# macro to find programs on the host OS -macro( find_host_program ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) - if( CMAKE_HOST_WIN32 ) - SET( WIN32 1 ) - SET( UNIX ) - elseif( CMAKE_HOST_APPLE ) - SET( APPLE 1 ) - SET( UNIX ) - endif() - find_program( ${ARGN} ) - SET( WIN32 ) - SET( APPLE ) - SET( UNIX 1 ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) -endmacro() - - -# export toolchain settings for the try_compile() command -if( NOT _CMAKE_IN_TRY_COMPILE ) - set( __toolchain_config "") - foreach( __var NDK_CCACHE LIBRARY_OUTPUT_PATH_ROOT ANDROID_FORBID_SYGWIN - ANDROID_NDK_HOST_X64 - ANDROID_NDK - ANDROID_NDK_LAYOUT - ANDROID_STANDALONE_TOOLCHAIN - ANDROID_TOOLCHAIN_NAME - ANDROID_ABI - ANDROID_NATIVE_API_LEVEL - ANDROID_STL - ANDROID_STL_FORCE_FEATURES - ANDROID_FORCE_ARM_BUILD - ANDROID_NO_UNDEFINED - ANDROID_SO_UNDEFINED - ANDROID_FUNCTION_LEVEL_LINKING - ANDROID_GOLD_LINKER - ANDROID_NOEXECSTACK - ANDROID_RELRO - ANDROID_LIBM_PATH - ANDROID_EXPLICIT_CRT_LINK - ANDROID_APP_PIE - ) - if( DEFINED ${__var} ) - if( ${__var} MATCHES " ") - set( __toolchain_config "${__toolchain_config}set( ${__var} \"${${__var}}\" CACHE INTERNAL \"\" )\n" ) - else() - set( __toolchain_config "${__toolchain_config}set( ${__var} ${${__var}} CACHE INTERNAL \"\" )\n" ) - endif() - endif() - endforeach() - file( WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/android.toolchain.config.cmake" "${__toolchain_config}" ) - unset( __toolchain_config ) -endif() - - -# force cmake to produce / instead of \ in build commands for Ninja generator -if( CMAKE_GENERATOR MATCHES "Ninja" AND CMAKE_HOST_WIN32 ) - # it is a bad hack after all - # CMake generates Ninja makefiles with UNIX paths only if it thinks that we are going to build with MinGW - set( CMAKE_COMPILER_IS_MINGW TRUE ) # tell CMake that we are MinGW - set( CMAKE_CROSSCOMPILING TRUE ) # stop recursion - enable_language( C ) - enable_language( CXX ) - # unset( CMAKE_COMPILER_IS_MINGW ) # can't unset because CMake does not convert back-slashes in response files without it - unset( MINGW ) -endif() - - -# Variables controlling behavior or set by cmake toolchain: -# ANDROID_ABI : "armeabi-v7a" (default), "armeabi", "armeabi-v7a with NEON", "armeabi-v7a with VFPV3", "armeabi-v6 with VFP", "x86", "mips", "arm64-v8a", "x86_64", "mips64" -# ANDROID_NATIVE_API_LEVEL : 3,4,5,8,9,14,15,16,17,18,19,21 (depends on NDK version) -# ANDROID_STL : gnustl_static/gnustl_shared/stlport_static/stlport_shared/gabi++_static/gabi++_shared/system_re/system/none -# ANDROID_FORBID_SYGWIN : ON/OFF -# ANDROID_NO_UNDEFINED : ON/OFF -# ANDROID_SO_UNDEFINED : OFF/ON (default depends on NDK version) -# ANDROID_FUNCTION_LEVEL_LINKING : ON/OFF -# ANDROID_GOLD_LINKER : ON/OFF -# ANDROID_NOEXECSTACK : ON/OFF -# ANDROID_RELRO : ON/OFF -# ANDROID_FORCE_ARM_BUILD : ON/OFF -# ANDROID_STL_FORCE_FEATURES : ON/OFF -# ANDROID_LIBM_PATH : path to libm.so (set to something like $(TOP)/out/target/product//obj/lib/libm.so) to workaround unresolved `sincos` -# Can be set only at the first run: -# ANDROID_NDK : path to your NDK install -# NDK_CCACHE : path to your ccache executable -# ANDROID_TOOLCHAIN_NAME : the NDK name of compiler toolchain -# ANDROID_NDK_HOST_X64 : try to use x86_64 toolchain (default for x64 host systems) -# ANDROID_NDK_LAYOUT : the inner NDK structure (RELEASE, LINARO, ANDROID) -# LIBRARY_OUTPUT_PATH_ROOT : -# ANDROID_STANDALONE_TOOLCHAIN -# -# Primary read-only variables: -# ANDROID : always TRUE -# ARMEABI : TRUE for arm v6 and older devices -# ARMEABI_V6 : TRUE for arm v6 -# ARMEABI_V7A : TRUE for arm v7a -# ARM64_V8A : TRUE for arm64-v8a -# NEON : TRUE if NEON unit is enabled -# VFPV3 : TRUE if VFP version 3 is enabled -# X86 : TRUE if configured for x86 -# X86_64 : TRUE if configured for x86_64 -# MIPS : TRUE if configured for mips -# MIPS64 : TRUE if configured for mips64 -# BUILD_WITH_ANDROID_NDK : TRUE if NDK is used -# BUILD_WITH_STANDALONE_TOOLCHAIN : TRUE if standalone toolchain is used -# ANDROID_NDK_HOST_SYSTEM_NAME : "windows", "linux-x86" or "darwin-x86" depending on host platform -# ANDROID_NDK_ABI_NAME : "armeabi", "armeabi-v7a", "x86", "mips", "arm64-v8a", "x86_64", "mips64" depending on ANDROID_ABI -# ANDROID_NDK_RELEASE : from r5 to r10d; set only for NDK -# ANDROID_NDK_RELEASE_NUM : numeric ANDROID_NDK_RELEASE version (1000*major+minor) -# ANDROID_ARCH_NAME : "arm", "x86", "mips", "arm64", "x86_64", "mips64" depending on ANDROID_ABI -# ANDROID_SYSROOT : path to the compiler sysroot -# TOOL_OS_SUFFIX : "" or ".exe" depending on host platform -# ANDROID_COMPILER_IS_CLANG : TRUE if clang compiler is used -# -# Secondary (less stable) read-only variables: -# ANDROID_COMPILER_VERSION : GCC version used (not Clang version) -# ANDROID_CLANG_VERSION : version of clang compiler if clang is used -# ANDROID_CXX_FLAGS : C/C++ compiler flags required by Android platform -# ANDROID_SUPPORTED_ABIS : list of currently allowed values for ANDROID_ABI -# ANDROID_TOOLCHAIN_MACHINE_NAME : "arm-linux-androideabi", "arm-eabi" or "i686-android-linux" -# ANDROID_TOOLCHAIN_ROOT : path to the top level of toolchain (standalone or placed inside NDK) -# ANDROID_CLANG_TOOLCHAIN_ROOT : path to clang tools -# ANDROID_SUPPORTED_NATIVE_API_LEVELS : list of native API levels found inside NDK -# ANDROID_STL_INCLUDE_DIRS : stl include paths -# ANDROID_RTTI : if rtti is enabled by the runtime -# ANDROID_EXCEPTIONS : if exceptions are enabled by the runtime -# ANDROID_GCC_TOOLCHAIN_NAME : read-only, differs from ANDROID_TOOLCHAIN_NAME only if clang is used -# -# Defaults: -# ANDROID_DEFAULT_NDK_API_LEVEL -# ANDROID_DEFAULT_NDK_API_LEVEL_${ARCH} -# ANDROID_NDK_SEARCH_PATHS -# ANDROID_SUPPORTED_ABIS_${ARCH} -# ANDROID_SUPPORTED_NDK_VERSIONS diff --git a/cmake/Toolchain-blackberry-armv7le.cmake b/cmake/Toolchain-blackberry-armv7le.cmake index 9ee9c36c..60cc1ed9 100644 --- a/cmake/Toolchain-blackberry-armv7le.cmake +++ b/cmake/Toolchain-blackberry-armv7le.cmake @@ -1,32 +1,9 @@ # Basic cmake toolchain file for BlackBerry 10 -# Copyright (c) 2013-2016 Klarälvdalens Datakonsult AB, a KDAB Group company -# All rights reserved. -# +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Rafael Roquetto -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# SPDX-License-Identifier: BSD-3-Clause # the name of the target operating system set(CMAKE_SYSTEM_NAME QNX) @@ -51,5 +28,6 @@ set(CMAKE_RANLIB "$ENV{QNX_HOST}/usr/bin/ntoarmv7-ranlib${HOST_EXECUTABLE_SUFFIX # search headers and libraries in the target environment, search # programs in the host environment set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-iMX6.cmake b/cmake/Toolchain-iMX6.cmake index d5da1d20..f27146c5 100644 --- a/cmake/Toolchain-iMX6.cmake +++ b/cmake/Toolchain-iMX6.cmake @@ -2,37 +2,15 @@ # Assumptions: toolchain is in path, $SYSROOT points to the sysroot # -# Copyright (c) 2013-2016 Klarälvdalens Datakonsult AB, a KDAB Group company -# All rights reserved. -# +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Volker Krause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME "Linux") set(CMAKE_SYSTEM_PROCESSOR "armv7-a") set(CMAKE_C_COMPILER "arm-linux-gcc") +set(CMAKE_CXX_COMPILER "arm-linux-g++") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --sysroot=$ENV{SYSROOT} -march=armv7-a -mfpu=neon") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --sysroot=$ENV{SYSROOT} -march=armv7-a -mfpu=neon") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=$ENV{SYSROOT}") @@ -42,5 +20,6 @@ set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --sysroot=$ENV{SYSRO set(CMAKE_FIND_ROOT_PATH "$ENV{SYSROOT}") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-iOS.cmake b/cmake/Toolchain-iOS.cmake deleted file mode 100644 index 0bc7f744..00000000 --- a/cmake/Toolchain-iOS.cmake +++ /dev/null @@ -1,130 +0,0 @@ -# This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake -# files which are included with CMake 2.8.4 -# It has been altered for iOS development - -# Options: -# -# IOS_PLATFORM = OS (default) or SIMULATOR -# This decides if SDKS will be selected from the iPhoneOS.platform or iPhoneSimulator.platform folders -# OS - the default, used to build for iPhone and iPad physical devices, which have an arm arch. -# SIMULATOR - used to build for the Simulator platforms, which have an x86 arch. -# -# CMAKE_IOS_DEVELOPER_ROOT = automatic(default) or /path/to/platform/Developer folder -# By default this location is automatcially chosen based on the IOS_PLATFORM value above. -# If set manually, it will override the default location and force the user of a particular Developer Platform -# -# CMAKE_IOS_SDK_ROOT = automatic(default) or /path/to/platform/Developer/SDKs/SDK folder -# By default this location is automatcially chosen based on the CMAKE_IOS_DEVELOPER_ROOT value. -# In this case it will always be the most up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. -# If set manually, this will force the use of a specific SDK version - -# Standard settings -set (CMAKE_SYSTEM_NAME Darwin) -set (CMAKE_SYSTEM_VERSION 1 ) -set (UNIX True) -set (APPLE True) -set (IOS True) - -# Force the compilers to gcc for iOS -include (CMakeForceCompiler) -CMAKE_FORCE_C_COMPILER (gcc gcc) -CMAKE_FORCE_CXX_COMPILER (g++ g++) - -# Skip the platform compiler checks for cross compiling -set (CMAKE_CXX_COMPILER_WORKS TRUE) -set (CMAKE_C_COMPILER_WORKS TRUE) - -# All iOS/Darwin specific settings - some may be redundant -set (CMAKE_SHARED_LIBRARY_PREFIX "lib") -set (CMAKE_SHARED_LIBRARY_SUFFIX ".dylib") -set (CMAKE_SHARED_MODULE_PREFIX "lib") -set (CMAKE_SHARED_MODULE_SUFFIX ".so") -set (CMAKE_MODULE_EXISTS 1) -set (CMAKE_DL_LIBS "") - -set (CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ") -set (CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ") -set (CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}") -set (CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}") - -# Hidden visibility is required for cxx on iOS -set (CMAKE_C_FLAGS "") -set (CMAKE_CXX_FLAGS "-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden") - -set (CMAKE_C_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}") -set (CMAKE_CXX_LINK_FLAGS "-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}") - -set (CMAKE_PLATFORM_HAS_INSTALLNAME 1) -set (CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -headerpad_max_install_names") -set (CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -headerpad_max_install_names") -set (CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,") -set (CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,") -set (CMAKE_FIND_LIBRARY_SUFFIXES ".dylib" ".so" ".a") - -# hack: if a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old build tree -# (where install_name_tool was hardcoded) and where CMAKE_INSTALL_NAME_TOOL isn't in the cache -# and still cmake didn't fail in CMakeFindBinUtils.cmake (because it isn't rerun) -# hardcode CMAKE_INSTALL_NAME_TOOL here to install_name_tool, so it behaves as it did before, Alex -if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool) -endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL) - -# Setup iOS platform -if (NOT DEFINED IOS_PLATFORM) - set (IOS_PLATFORM "OS") -endif (NOT DEFINED IOS_PLATFORM) -set (IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform") - -# Check the platform selection and setup for developer root -if (${IOS_PLATFORM} STREQUAL "OS") - set (IOS_PLATFORM_LOCATION "iPhoneOS.platform") -elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR") - set (IOS_PLATFORM_LOCATION "iPhoneSimulator.platform") -else (${IOS_PLATFORM} STREQUAL "OS") - message (FATAL_ERROR "Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR") -endif (${IOS_PLATFORM} STREQUAL "OS") - -# Setup iOS developer location -if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) - set (CMAKE_IOS_DEVELOPER_ROOT "/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer") -endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT) -set (CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT} CACHE PATH "Location of iOS Platform") - -# Find and use the most recent iOS sdk -if (NOT DEFINED CMAKE_IOS_SDK_ROOT) - file (GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*") - if (_CMAKE_IOS_SDKS) - list (SORT _CMAKE_IOS_SDKS) - list (REVERSE _CMAKE_IOS_SDKS) - list (GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT) - else (_CMAKE_IOS_SDKS) - message (FATAL_ERROR "No iOS SDKs found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.") - endif (_CMAKE_IOS_SDKS) - message (STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}") -endif (NOT DEFINED CMAKE_IOS_SDK_ROOT) -set (CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Location of the selected iOS SDK") - -# Set the sysroot default to the most recent SDK -set (CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT} CACHE PATH "Sysroot used for iOS support") - -# set the architecture for iOS - using ARCHS_STANDARD_32_BIT sets armv6,armv7 and appears to be XCode's standard. -# The other value that works is ARCHS_UNIVERSAL_IPHONE_OS but that sets armv7 only -set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string "Build architecture for iOS") - -# Set the find root to the iOS developer roots and to user defined paths -set (CMAKE_FIND_ROOT_PATH ${CMAKE_IOS_DEVELOPER_ROOT} ${CMAKE_IOS_SDK_ROOT} ${CMAKE_PREFIX_PATH} CACHE string "iOS find search path root") - -# default to searching for frameworks first -set (CMAKE_FIND_FRAMEWORK FIRST) - -# set up the default search directories for frameworks -set (CMAKE_SYSTEM_FRAMEWORK_PATH - ${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks - ${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks - ${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks -) - -# only search the iOS sdks, not the remainder of the host filesystem -set (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) -set (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -set (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) diff --git a/cmake/Toolchain-jetson-tk1.cmake b/cmake/Toolchain-jetson-tk1.cmake index bfd08505..14c984b9 100644 --- a/cmake/Toolchain-jetson-tk1.cmake +++ b/cmake/Toolchain-jetson-tk1.cmake @@ -2,33 +2,10 @@ # Assumptions: toolchain is in path, $SYSROOT points to the sysroot # -# Copyright (c) 2013-2018 Klarälvdalens Datakonsult AB, a KDAB Group company -# All rights reserved. -# +# SPDX-FileCopyrightText: 2013-2022 Klarälvdalens Datakonsult AB, a KDAB Group company # Author: Volker Krause -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# SPDX-License-Identifier: BSD-3-Clause set(CMAKE_SYSTEM_NAME "Linux") set(CMAKE_SYSTEM_PROCESSOR "armv7-a") diff --git a/cmake/modules/FindBDB.cmake b/cmake/modules/FindBDB.cmake index 8c9616eb..312901c0 100644 --- a/cmake/modules/FindBDB.cmake +++ b/cmake/modules/FindBDB.cmake @@ -1,3 +1,7 @@ +# +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: BSD-3-Clause +# # Finds the Berkeley DB Library # # BDB_FOUND - True if Berkeley DB found. diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index cca291f5..8a818465 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -1,29 +1,8 @@ -# Author: sum01 -# 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 -# +# SPDX-FileCopyrightText: sum01 +# SPDX-License-Identifier: Unlicense + +# Git: https://github.com/sum01/FindBerkeleyDB # NOTE: If Berkeley DB ever gets a Pkg-config ".pc" file, add pkg_check_modules() here diff --git a/cmake/modules/FindGLib.cmake b/cmake/modules/FindGLib.cmake index 1092dc14..9dabe310 100644 --- a/cmake/modules/FindGLib.cmake +++ b/cmake/modules/FindGLib.cmake @@ -1,5 +1,8 @@ -# - try to find glib # +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: BSD-3-Clause +# +# - try to find glib # Once done this will define # # GLIB_FOUND - system has GLib 2.0 diff --git a/cmake/modules/FindGObjectIntrospection.cmake b/cmake/modules/FindGObjectIntrospection.cmake index 07098b82..2eb289a9 100644 --- a/cmake/modules/FindGObjectIntrospection.cmake +++ b/cmake/modules/FindGObjectIntrospection.cmake @@ -11,10 +11,9 @@ # GObjectIntrospection_CFLAGS # GObjectIntrospection_LIBS # -# Copyright (C) 2010, Pino Toscano, +# SPDX-FileCopyrightText: 2010, Pino Toscano, +# SPDX-License-Identifier: BSD-3-Clause # -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. # Get gobject-introspection's specified pkg-config variable macro(_GIR_GET_PKGCONFIG_VAR _outvar _varname) diff --git a/cmake/modules/FindLibXML.cmake b/cmake/modules/FindLibXML.cmake index 3c418b67..891a8004 100644 --- a/cmake/modules/FindLibXML.cmake +++ b/cmake/modules/FindLibXML.cmake @@ -1,5 +1,8 @@ -# - try to find libxml # +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: BSD-3-Clause +# +# - try to find libxml # Once done this will define # # LIBXML_FOUND - system has libxml 2.0 diff --git a/cmake/modules/FindWcecompat.cmake b/cmake/modules/FindWcecompat.cmake index 4af53aa5..c054dc4d 100644 --- a/cmake/modules/FindWcecompat.cmake +++ b/cmake/modules/FindWcecompat.cmake @@ -5,9 +5,11 @@ # WCECOMPAT_INCLUDE_DIR - Wcecompat include directory # WCECOMPAT_LIBRARIES - Libraries needed to use Wcecompat # -# Copyright (c) 2010, Andreas Holzammer, +# SPDX-FileCopyrightText: 2010 Klarälvdalens Datakonsult AB, a KDAB Group company +# Author: Andreas Holzammer, +# +# SPDX-License-Identifier: BSD-3-Clause # -# Redistribution and use is allowed according to the terms of the BSD license. if(WCECOMPAT_INCLUDE_DIR AND WCECOMPAT_LIB_FOUND) set(Wcecompat_FIND_QUIETLY TRUE) diff --git a/cmake/modules/GObjectIntrospectionMacros.cmake b/cmake/modules/GObjectIntrospectionMacros.cmake index 69b7e78f..3af08ee8 100644 --- a/cmake/modules/GObjectIntrospectionMacros.cmake +++ b/cmake/modules/GObjectIntrospectionMacros.cmake @@ -1,7 +1,5 @@ -# Copyright (C) 2010, Pino Toscano, -# -# Redistribution and use is allowed according to the terms of the BSD license. -# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# SPDX-FileCopyrightText: 2010, Pino Toscano, +# SPDX-License-Identifier: BSD-3-Clause # Generate list from another list, but with each item prepended with a prefix macro(_gir_list_prefix _outvar _listvar _prefix) diff --git a/cmake/modules/GtkDoc.cmake b/cmake/modules/GtkDoc.cmake index 4234cbb0..f81a33b8 100644 --- a/cmake/modules/GtkDoc.cmake +++ b/cmake/modules/GtkDoc.cmake @@ -1,5 +1,8 @@ # GtkDoc.cmake # +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: BSD-3-Clause +# # Macros to support develper documentation build from sources with gtk-doc. # # Note that every target and dependency should be defined before the macro is diff --git a/cmake/modules/LibIcalMacrosInternal.cmake b/cmake/modules/LibIcalMacrosInternal.cmake index bc527636..acf020eb 100644 --- a/cmake/modules/LibIcalMacrosInternal.cmake +++ b/cmake/modules/LibIcalMacrosInternal.cmake @@ -1,5 +1,8 @@ # CMake support macros and functions for the libical project +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) diff --git a/cmake/run_test.cmake b/cmake/run_test.cmake index 157ae44d..8e76dbb2 100644 --- a/cmake/run_test.cmake +++ b/cmake/run_test.cmake @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + #------------------------------------------------- # some argument checking: # test_cmd is the command to run with all its arguments diff --git a/config.h.cmake b/config.h.cmake index f99a739d..a4b52aad 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -1,5 +1,10 @@ /* config.h. Generated by cmake from config.h.cmake */ +/** +SPDX-FileCopyrightText: Allen Winter +SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ + /* Define if you have the ICU library. */ #cmakedefine HAVE_LIBICU 1 diff --git a/design-data/CMakeLists.txt b/design-data/CMakeLists.txt index 0b7b3433..b650e8dc 100644 --- a/design-data/CMakeLists.txt +++ b/design-data/CMakeLists.txt @@ -1,3 +1,4 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ########### install files ############### - diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index f2cc4d9c..97d38815 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + add_subdirectory(reference) # diff --git a/doc/Doxyfile.cmake b/doc/Doxyfile.cmake index daa9bae4..9367f7e7 100644 --- a/doc/Doxyfile.cmake +++ b/doc/Doxyfile.cmake @@ -1,3 +1,6 @@ +#SPDX-FileCopyrightText: Allen Winter +#SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- diff --git a/doc/UsingLibical.md b/doc/UsingLibical.md index 4d3b80e3..f8ea3084 100644 --- a/doc/UsingLibical.md +++ b/doc/UsingLibical.md @@ -46,8 +46,8 @@ See for a copy of the LGPL. 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. +made by programmers in both realms. We (the libical developers) will only +accept changes to this library if they are similarly dual-licensed. ### 1.3 Example Code diff --git a/doc/reference/CMakeLists.txt b/doc/reference/CMakeLists.txt index 50a1997e..630ddf9b 100644 --- a/doc/reference/CMakeLists.txt +++ b/doc/reference/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + if(ICAL_GLIB) add_subdirectory(libical-glib) endif() diff --git a/doc/reference/libical-glib/CMakeLists.txt b/doc/reference/libical-glib/CMakeLists.txt index c4f8b594..df4be031 100644 --- a/doc/reference/libical-glib/CMakeLists.txt +++ b/doc/reference/libical-glib/CMakeLists.txt @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 option(ENABLE_GTK_DOC "Use gtk-doc to build documentation" True) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 46bde676..c5a8441c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src diff --git a/examples/access_components.c b/examples/access_components.c index c0e3985f..88731fd6 100644 --- a/examples/access_components.c +++ b/examples/access_components.c @@ -1,4 +1,8 @@ -/* Access_component.c */ +/* Access_component.c + + SPDX-FileCopyrightText: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ #include @@ -20,13 +24,10 @@ void do_something(icalcomponent *c); constructors, resulting in a compact, neatly formatted way to create components. This style is shown in create_new_component_with_va_args() - - */ icalcomponent* create_new_component() { - /* variable definitions */ icalcomponent* calendar; icalcomponent* event; @@ -57,7 +58,6 @@ icalcomponent* create_new_component() icalproperty_new_version("2.0") ); - /* Here is the short version of the memory rules: If the routine name has "new" in it: @@ -132,7 +132,6 @@ icalcomponent* create_new_component() icalcomponent_add_property(event,property); - /* more properties */ icalcomponent_add_property( @@ -169,7 +168,6 @@ icalcomponent* create_new_component() icalcomponent_add_property(event,property); - property = icalproperty_new_dtend(atime); icalproperty_add_parameter( @@ -189,13 +187,11 @@ icalcomponent* create_new_component() return calendar; } - /* Now, create the same component as in the previous routine, but use the constructor style. */ icalcomponent* create_new_component_with_va_args() { - /* This is a similar set up to the last routine */ icalcomponent* calendar; struct icaltimetype atime = icaltime_from_timet_with_zone(time(0), 0, icaltimezone_get_utc_timezone()); @@ -254,7 +250,6 @@ icalcomponent* create_new_component_with_va_args() 0 ); - /* Note that properties with no parameters can use the regular 'new' constructor, while those with parameters use the 'vanew' constructor. And, be sure that the last argument in the 'vanew' @@ -263,7 +258,6 @@ icalcomponent* create_new_component_with_va_args() return calendar; } - void find_sub_components(icalcomponent* comp) { icalcomponent *c; @@ -286,7 +280,6 @@ void find_sub_components(icalcomponent* comp) do_something(c); } - } /* Ical components only have one internal iterator, so removing the @@ -307,5 +300,4 @@ void remove_vevent_sub_components(icalcomponent* comp){ do_something(c); } - } diff --git a/examples/access_properties_and_parameters.c b/examples/access_properties_and_parameters.c index e4c13f40..cbaf3cd8 100644 --- a/examples/access_properties_and_parameters.c +++ b/examples/access_properties_and_parameters.c @@ -1,4 +1,8 @@ -/* access_properties_and_parameters.c */ +/* access_properties_and_parameters.c + + SPDX-FileCopyrightText: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ #include #include @@ -47,7 +51,6 @@ void get_required_attendees(icalcomponent* event) printf("%s",attendee); } } - } /* Here is a similar example. If an attendee has a PARTSTAT of @@ -93,7 +96,6 @@ void update_attendees(icalcomponent* event) icalparameter_new_partstat(ICAL_PARTSTAT_TENTATIVE) ); } - } } @@ -146,5 +148,4 @@ void test_properties() /* Frees the original and the clone */ icalproperty_free(clone); icalproperty_free(prop); - } diff --git a/examples/errors.c b/examples/errors.c index f50c4c9d..315d3702 100644 --- a/examples/errors.c +++ b/examples/errors.c @@ -1,4 +1,8 @@ -/* errors.c */ +/* errors.c + + SPDX-FileCopyrightText: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ #include @@ -15,9 +19,7 @@ void program_errors() fprintf(stderr,"Horrible libical error: %s\n", icalerror_strerror(icalerrno)); - } - } void component_errors(icalcomponent *comp) @@ -39,17 +41,13 @@ void component_errors(icalcomponent *comp) p != 0; p = icalcomponent_get_next_property(comp,ICAL_XLICERROR_PROPERTY)) { - printf("-- The error is %s:\n",icalproperty_get_xlicerror(p)); } - - /* Check the component for iTIP compilance, and add more X-LIC-ERROR properties if it is non-compilant. */ icalrestriction_check(comp); - /* Count the new errors. */ if(errors != icalcomponent_count_errors(comp)){ printf(" -- The component also has iTIP restriction errors \n"); @@ -61,7 +59,5 @@ void component_errors(icalcomponent *comp) properties in the reply. This following routine makes this conversion */ - icalcomponent_convert_errors(comp); - } diff --git a/examples/main.c b/examples/main.c index 587dbd21..f2165dcf 100644 --- a/examples/main.c +++ b/examples/main.c @@ -1,4 +1,9 @@ -/* This is just to make the code in the example directory link properly. */ +/* This is just to make the code in the example directory link properly. + + SPDX-FileCopyrightText: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ + #include int main() @@ -6,7 +11,6 @@ int main() return 1; } - void do_something(icalcomponent* comp) { (void)comp;/*unused*/ diff --git a/examples/parse_text.c b/examples/parse_text.c index 67a2345f..d97ef4c6 100644 --- a/examples/parse_text.c +++ b/examples/parse_text.c @@ -1,6 +1,9 @@ /* parse_text.c - */ + SPDX-FileCopyrightText: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ + #include #include @@ -43,7 +46,6 @@ void parse_text(char* argv[]) completes a component, c will be non-zero */ c = icalparser_add_line(parser,line); - if (c != 0){ char *temp = icalcomponent_as_ical_string_r(c); printf("%s", temp); @@ -56,6 +58,5 @@ void parse_text(char* argv[]) } while ( line != 0); - icalparser_free(parser); } diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index 0b7b3433..b650e8dc 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -1,3 +1,4 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ########### install files ############### - diff --git a/scripts/buildtests.sh b/scripts/buildtests.sh index 6dc085f2..085b440b 100755 --- a/scripts/buildtests.sh +++ b/scripts/buildtests.sh @@ -1,5 +1,8 @@ #!/bin/bash +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + #Exit if any undefined variable is used. set -u #Exit this script if it any subprocess exits non-zero. diff --git a/scripts/mkderivedcomponents.pl b/scripts/mkderivedcomponents.pl old mode 100755 new mode 100644 index fcd98f24..2d51f4d4 --- a/scripts/mkderivedcomponents.pl +++ b/scripts/mkderivedcomponents.pl @@ -1,17 +1,8 @@ #!/usr/bin/env perl ################################################################################ -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt -# -# Or: -# -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ################################################################################ use Getopt::Std; @@ -69,19 +60,9 @@ if ($opt_c or $opt_h and !$opt_i) { \044Id:\044 - (C) COPYRIGHT 1999 Eric Busboom - - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - https://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. - + SPDX-FileCopyrightText: 1999 Eric Busboom + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ /* diff --git a/scripts/mkderivedparameters.pl b/scripts/mkderivedparameters.pl old mode 100755 new mode 100644 index 05aea1c2..26091ca5 --- a/scripts/mkderivedparameters.pl +++ b/scripts/mkderivedparameters.pl @@ -1,17 +1,11 @@ #!/usr/bin/env perl ################################################################################ -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ ################################################################################ require "readvaluesfile.pl"; diff --git a/scripts/mkderivedproperties.pl b/scripts/mkderivedproperties.pl old mode 100755 new mode 100644 index b772e1b6..7e1d9065 --- a/scripts/mkderivedproperties.pl +++ b/scripts/mkderivedproperties.pl @@ -1,17 +1,11 @@ #!/usr/bin/env perl ################################################################################ -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ ################################################################################ require "readvaluesfile.pl"; diff --git a/scripts/mkderivedvalues.pl b/scripts/mkderivedvalues.pl old mode 100755 new mode 100644 index 85170730..c2125df7 --- a/scripts/mkderivedvalues.pl +++ b/scripts/mkderivedvalues.pl @@ -1,17 +1,11 @@ #!/usr/bin/perl ################################################################################ -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ ################################################################################ use lib '.'; diff --git a/scripts/mkrestrictiontable.pl b/scripts/mkrestrictiontable.pl old mode 100755 new mode 100644 index ca8c8355..541bb4b0 --- a/scripts/mkrestrictiontable.pl +++ b/scripts/mkrestrictiontable.pl @@ -1,17 +1,11 @@ #!/usr/bin/env perl ################################################################################ -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ ################################################################################ use Getopt::Std; diff --git a/scripts/readvaluesfile.pl b/scripts/readvaluesfile.pl index 255ceb05..3e1cb8d7 100644 --- a/scripts/readvaluesfile.pl +++ b/scripts/readvaluesfile.pl @@ -1,16 +1,10 @@ ################################################################################ -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ ################################################################################ sub read_values_file diff --git a/scripts/set_compiler_env.bat b/scripts/set_compiler_env.bat index 47d7c50f..215fb41d 100644 --- a/scripts/set_compiler_env.bat +++ b/scripts/set_compiler_env.bat @@ -1,5 +1,8 @@ @echo off +rem SPDX-FileCopyrightText: Allen Winter +rem SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + :: Now we declare a scope Setlocal EnableDelayedExpansion EnableExtensions diff --git a/scripts/setup-travis.sh b/scripts/setup-travis.sh index 315ee3b2..c6a93c78 100755 --- a/scripts/setup-travis.sh +++ b/scripts/setup-travis.sh @@ -1,5 +1,8 @@ #!/bin/bash +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + # things to do for travis-ci in the before_install section if [[ $TRAVIS_OS_NAME == 'osx' ]]; then diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9337d091..4959b3ea 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + add_subdirectory(libical) add_subdirectory(libicalss) add_subdirectory(libicalvcal) diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm index 070d58be..f4779ca4 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm @@ -3,18 +3,12 @@ # FILE: Libical.pm # CREATOR: eric # -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== # This part of this file was automatically generated by SWIG diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm index 54d9e0ba..46838f02 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm @@ -3,18 +3,12 @@ # FILE: Component.pm # CREATOR: eric 1 Mar 01 # -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== package Net::ICal::Libical::Component; diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm index 93b1852c..6c3903fe 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm @@ -2,18 +2,12 @@ # FILE: Duration.pm # CREATOR: eric # -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #============================================================================= =head1 NAME diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm index 49a83e66..696d577e 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm @@ -3,18 +3,12 @@ # FILE: Component.pm # CREATOR: eric # -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== =pod diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm index 16c987a6..c2cab511 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm @@ -3,18 +3,12 @@ # FILE: Property.pm # CREATOR: eric 1 Mar 01 # -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== use Net::ICal::Libical::Property; diff --git a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm index 1afc8c40..5e744b2c 100644 --- a/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm +++ b/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm @@ -3,18 +3,12 @@ # FILE: Time.pm # CREATOR: eric # -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== =pod diff --git a/src/Net-ICal-Libical/netical.i b/src/Net-ICal-Libical/netical.i index 286de3c7..b97e25bc 100644 --- a/src/Net-ICal-Libical/netical.i +++ b/src/Net-ICal-Libical/netical.i @@ -1,18 +1,9 @@ /*====================================================================== FILE: ical.i - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This program is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom diff --git a/src/Net-ICal-Libical/test/component.pl b/src/Net-ICal-Libical/test/component.pl index f3e9c915..a55a4a73 100644 --- a/src/Net-ICal-Libical/test/component.pl +++ b/src/Net-ICal-Libical/test/component.pl @@ -1,17 +1,11 @@ #!/usr/bin/perl #====================================================================== -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== use lib "../blib/lib"; diff --git a/src/Net-ICal-Libical/test/libical.pl b/src/Net-ICal-Libical/test/libical.pl old mode 100755 new mode 100644 index 74586c48..4624943e --- a/src/Net-ICal-Libical/test/libical.pl +++ b/src/Net-ICal-Libical/test/libical.pl @@ -1,17 +1,11 @@ #!/usr/bin/perl #====================================================================== -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== use lib "../blib/lib"; diff --git a/src/Net-ICal-Libical/test/swig.pl b/src/Net-ICal-Libical/test/swig.pl old mode 100755 new mode 100644 index de6c1792..df3dc316 --- a/src/Net-ICal-Libical/test/swig.pl +++ b/src/Net-ICal-Libical/test/swig.pl @@ -1,17 +1,11 @@ #!/usr/bin/perl #====================================================================== -# (C) COPYRIGHT 2000, Eric Busboom +# SPDX-FileCopyrightText: 2000, Eric Busboom # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== use lib "../blib/lib"; diff --git a/src/java/CMakeLists.txt b/src/java/CMakeLists.txt index 0b9c08a4..d1dd43d9 100644 --- a/src/java/CMakeLists.txt +++ b/src/java/CMakeLists.txt @@ -1,3 +1,5 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ########### next target ############### diff --git a/src/java/ICalDurationType.java b/src/java/ICalDurationType.java index 2dcc2344..045589d9 100644 --- a/src/java/ICalDurationType.java +++ b/src/java/ICalDurationType.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: ICalDurationType.java CREATOR: structConverter 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; diff --git a/src/java/ICalParameter.java b/src/java/ICalParameter.java index af764e27..078c05f8 100644 --- a/src/java/ICalParameter.java +++ b/src/java/ICalParameter.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: ICalParameter.java CREATOR: gnorman 01/09/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; diff --git a/src/java/ICalPeriodType.java b/src/java/ICalPeriodType.java index 204ff2a1..765ca0c1 100644 --- a/src/java/ICalPeriodType.java +++ b/src/java/ICalPeriodType.java @@ -1,6 +1,8 @@ /*====================================================================== FILE: ICalPeriodType.java CREATOR: structConverter 01/11/02 + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -68,4 +70,3 @@ public class ICalPeriodType private ICalTimeType end = new ICalTimeType(); private ICalDurationType duration = new ICalDurationType(); } - diff --git a/src/java/ICalProperty.java b/src/java/ICalProperty.java index 87e99f6e..a93b4e0a 100644 --- a/src/java/ICalProperty.java +++ b/src/java/ICalProperty.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: ICalProperty.java CREATOR: gnorman 01/09/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; diff --git a/src/java/ICalRecurrenceType.java b/src/java/ICalRecurrenceType.java index cfe27911..e53bf93d 100644 --- a/src/java/ICalRecurrenceType.java +++ b/src/java/ICalRecurrenceType.java @@ -1,6 +1,8 @@ /*====================================================================== FILE: ICalRecurrenceType.java CREATOR: structConverter 01/11/02 + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -281,4 +283,3 @@ public class ICalRecurrenceType public static final int ICAL_BY_MONTH_SIZE = 13; public static final int ICAL_BY_SETPOS_SIZE = 367; } - diff --git a/src/java/ICalTimeType.java b/src/java/ICalTimeType.java index 15cf8715..ad0946c9 100644 --- a/src/java/ICalTimeType.java +++ b/src/java/ICalTimeType.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: ICalTimeType.java CREATOR: structConverter 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -132,4 +133,3 @@ public class ICalTimeType private int is_date; private String zone = new String(); // Converted from char* } - diff --git a/src/java/ICalTriggerType.java b/src/java/ICalTriggerType.java index e2ef7a72..d23f3ba4 100644 --- a/src/java/ICalTriggerType.java +++ b/src/java/ICalTriggerType.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: ICalTriggerType.java CREATOR: structConverter 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -90,4 +91,3 @@ public class ICalTriggerType private ICalTimeType time = new ICalTimeType(); private ICalDurationType duration = new ICalDurationType(); } - diff --git a/src/java/ICalValue.java b/src/java/ICalValue.java index f7160ff6..94c7de99 100644 --- a/src/java/ICalValue.java +++ b/src/java/ICalValue.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: ICalValue.java CREATOR: gnorman 01/10/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; diff --git a/src/java/VAgenda.java b/src/java/VAgenda.java index 8b85fe11..d487c0eb 100644 --- a/src/java/VAgenda.java +++ b/src/java/VAgenda.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VAgenda.java CREATOR: fnguyen 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -10,7 +11,7 @@ public class VAgenda extends VComponent { public VAgenda() { super(ICalComponentKind.ICAL_VAGENDA_COMPONENT); - } + } public VAgenda(long obj) { diff --git a/src/java/VAlarm.java b/src/java/VAlarm.java index d7693f76..2de52e89 100644 --- a/src/java/VAlarm.java +++ b/src/java/VAlarm.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VAlarm.java CREATOR: fnguyen 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -11,7 +12,7 @@ public class VAlarm extends VComponent { { super(ICalComponentKind.ICAL_VALARM_COMPONENT); } - + public VAlarm(long obj) { super(obj); diff --git a/src/java/VCalendar.java b/src/java/VCalendar.java index 4cfcad27..a3f0958f 100644 --- a/src/java/VCalendar.java +++ b/src/java/VCalendar.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VCalendar.java CREATOR: echoi 01/28/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -10,7 +11,7 @@ public class VCalendar extends VComponent { public VCalendar() { super(ICalComponentKind.ICAL_VCALENDAR_COMPONENT); - } + } public VCalendar(long obj) { diff --git a/src/java/VComponent.java b/src/java/VComponent.java index d77c5bb9..b828b32c 100644 --- a/src/java/VComponent.java +++ b/src/java/VComponent.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VComponent.java CREATOR: gnorman 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; diff --git a/src/java/VEvent.java b/src/java/VEvent.java index 2017aa58..33019b81 100644 --- a/src/java/VEvent.java +++ b/src/java/VEvent.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VEvent.java CREATOR: fnguyen 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -10,7 +11,7 @@ public class VEvent extends VComponent { public VEvent() { super(ICalComponentKind.ICAL_VEVENT_COMPONENT); - } + } public VEvent(long obj) { diff --git a/src/java/VFreeBusy.java b/src/java/VFreeBusy.java index a781edc5..c8dbf144 100644 --- a/src/java/VFreeBusy.java +++ b/src/java/VFreeBusy.java @@ -1,10 +1,17 @@ +/*====================================================================== + FILE: VFreeBusy.java + CREATOR: + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +======================================================================*/ + package net.cp.jlibical; public class VFreeBusy extends VComponent { public VFreeBusy() { super(ICalComponentKind.ICAL_VFREEBUSY_COMPONENT); - } + } public VFreeBusy(long obj) { diff --git a/src/java/VQuery.java b/src/java/VQuery.java index e94a0732..d827534a 100644 --- a/src/java/VQuery.java +++ b/src/java/VQuery.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VQuery.java CREATOR: fnguyen 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -10,7 +11,7 @@ public class VQuery extends VComponent { public VQuery() { super(ICalComponentKind.ICAL_VQUERY_COMPONENT); - } + } public VQuery(long obj) { diff --git a/src/java/VToDo.java b/src/java/VToDo.java index 9e4a06e1..af1e2bcf 100644 --- a/src/java/VToDo.java +++ b/src/java/VToDo.java @@ -1,7 +1,8 @@ /*====================================================================== FILE: VToDo.java CREATOR: fnguyen 01/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ package net.cp.jlibical; @@ -10,7 +11,7 @@ public class VToDo extends VComponent { public VToDo() { super(ICalComponentKind.ICAL_VTODO_COMPONENT); - } + } public VToDo(long obj) { diff --git a/src/java/jlibical_consts_cxx.h b/src/java/jlibical_consts_cxx.h index b4c72da4..d970b660 100644 --- a/src/java/jlibical_consts_cxx.h +++ b/src/java/jlibical_consts_cxx.h @@ -2,18 +2,10 @@ FILE: jlibical_consts_cxx/h CREATOR: Srinivasa Boppana/George Norman - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef JLIBICAL_CONSTS_CXX_H #define JLIBICAL_CONSTS_CXX_H diff --git a/src/java/jlibical_utils_cxx.cpp b/src/java/jlibical_utils_cxx.cpp index d89ee862..e52e33f4 100644 --- a/src/java/jlibical_utils_cxx.cpp +++ b/src/java/jlibical_utils_cxx.cpp @@ -2,18 +2,10 @@ FILE: jlibical_utils_cxx.cpp CREATOR: Srinivasa Boppana/George Norman - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef JLIBICAL_UTILS_CXX_H @@ -415,7 +407,6 @@ jobject doCreateNewSurrogate(JNIEnv *env, jclass surrogateClass, jlong subject) return(result); } - //------------------------------------------------------- // For the given cpErr, create a new Exception and send it to env. // Note: Throw does not throw anything. It only sets the state. diff --git a/src/java/jlibical_utils_cxx.h b/src/java/jlibical_utils_cxx.h index d812202c..2a61b54e 100644 --- a/src/java/jlibical_utils_cxx.h +++ b/src/java/jlibical_utils_cxx.h @@ -2,18 +2,10 @@ FILE: jlibical_utils_cxx.h CREATOR: Srinivasa Boppana/George Norman - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef TEST_CXX_H @@ -66,5 +58,4 @@ jobject createNewICalPeriodType(JNIEnv *env, icalperiodtype* source); jobject doCreateNewSurrogate(JNIEnv *env, jclass surrogateClass, jlong subject); - #endif /*TEST_CXX_H*/ diff --git a/src/java/jniICalDurationType_cxx.cpp b/src/java/jniICalDurationType_cxx.cpp index d7bb9d97..de77ce94 100644 --- a/src/java/jniICalDurationType_cxx.cpp +++ b/src/java/jniICalDurationType_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: jniICalDurationType_cxx.cpp CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #include @@ -26,7 +18,6 @@ static jfieldID ICalDurationType_Hours_FID; static jfieldID ICalDurationType_Minutes_FID; static jfieldID ICalDurationType_Seconds_FID; - void initICalDurationTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalDurationType_Is_neg_FID = env->GetFieldID(clazz, "is_neg", "I"); diff --git a/src/java/jniICalDurationType_cxx.h b/src/java/jniICalDurationType_cxx.h index a7408e3c..44b28db7 100644 --- a/src/java/jniICalDurationType_cxx.h +++ b/src/java/jniICalDurationType_cxx.h @@ -2,18 +2,10 @@ FILE: jniICalDurationType_cxx.h CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _jni_ICalDurationType_H #define _jni_ICalDurationType_H @@ -22,7 +14,6 @@ // I forgot how to do this using a typedef in c++!!!! #define ICalDurationType icaldurationtype - #ifdef __cplusplus extern "C" { #endif @@ -49,7 +40,6 @@ void jni_GetAll_from_ICalDurationType(struct ICalDurationType* __ICalDurationTyp JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_initFIDs(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalDurationType_init__J(JNIEnv *env, jobject thisICalDurationType, jlong data); - #ifdef __cplusplus } #endif diff --git a/src/java/jniICalPeriodType_cxx.cpp b/src/java/jniICalPeriodType_cxx.cpp index 84d3ed61..d1df8cdb 100644 --- a/src/java/jniICalPeriodType_cxx.cpp +++ b/src/java/jniICalPeriodType_cxx.cpp @@ -2,19 +2,11 @@ FILE: jniICalPeriodType_cxx.cpp CREATOR: structConverter - (C) COPYRIGHT 2001, Eric Busboom - (C) COPYRIGHT 2001, Patrick Lewis + SPDX-FileCopyrightText: 2001, Eric Busboom + SPDX-FileCopyrightText: 2001, Patrick Lewis - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #include @@ -26,7 +18,6 @@ static jfieldID ICalPeriodType_Start_FID; static jfieldID ICalPeriodType_End_FID; static jfieldID ICalPeriodType_Duration_FID; - void initICalPeriodTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalPeriodType_Start_FID = env->GetFieldID(clazz, "start", "Lnet/cp/jlibical/ICalTimeType;"); diff --git a/src/java/jniICalPeriodType_cxx.h b/src/java/jniICalPeriodType_cxx.h index 5928219c..62d8a2e9 100644 --- a/src/java/jniICalPeriodType_cxx.h +++ b/src/java/jniICalPeriodType_cxx.h @@ -2,18 +2,10 @@ FILE: jniICalPeriodType_cxx.h CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _jni_ICalPeriodType_H #define _jni_ICalPeriodType_H @@ -22,7 +14,6 @@ // I forgot how to do this using a typedef in c++!!!! #define ICalPeriodType icalperiodtype - #ifdef __cplusplus extern "C" { #endif @@ -44,7 +35,6 @@ void jni_GetAll_from_ICalPeriodType(struct ICalPeriodType* __ICalPeriodType_, JN JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_init__J(JNIEnv* env, jobject thisICalPeriodType, jlong data); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalPeriodType_initFIDs(JNIEnv *env, jclass clazz); - #ifdef __cplusplus } #endif diff --git a/src/java/jniICalRecurrenceType_cxx.cpp b/src/java/jniICalRecurrenceType_cxx.cpp index 34048eaa..83325894 100644 --- a/src/java/jniICalRecurrenceType_cxx.cpp +++ b/src/java/jniICalRecurrenceType_cxx.cpp @@ -1,17 +1,8 @@ /*====================================================================== FILE: jniICalRecurrenceType_cxx.cpp CREATOR: structConverter - - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ #include @@ -35,7 +26,6 @@ static jfieldID ICalRecurrenceType_By_week_no_FID; static jfieldID ICalRecurrenceType_By_month_FID; static jfieldID ICalRecurrenceType_By_set_pos_FID; - void initICalRecurrenceTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalRecurrenceType_Until_FID = env->GetFieldID(clazz, "until", "Lnet/cp/jlibical/ICalTimeType;"); @@ -343,7 +333,6 @@ void jni_GetAll_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurre jni_GetBy_week_no_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_month_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); jni_GetBy_set_pos_from_ICalRecurrenceType(__ICalRecurrenceType_, env, thisICalRecurrenceType); - } JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_init__J(JNIEnv* env, jobject thisICalRecurrenceType, jlong data) { diff --git a/src/java/jniICalRecurrenceType_cxx.h b/src/java/jniICalRecurrenceType_cxx.h index 683cc017..47d90d1b 100644 --- a/src/java/jniICalRecurrenceType_cxx.h +++ b/src/java/jniICalRecurrenceType_cxx.h @@ -2,18 +2,10 @@ FILE: jniICalRecurrenceType_cxx.h CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _jni_ICalRecurrenceType_H_ #define _jni_ICalRecurrenceType_H_ @@ -63,7 +55,6 @@ void jni_GetAll_from_ICalRecurrenceType(struct ICalRecurrenceType* __ICalRecurre JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_init__J(JNIEnv* env, jobject thisICalRecurrenceType, jlong data); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalRecurrenceType_initFIDs(JNIEnv *env, jclass clazz); - #ifdef __cplusplus } #endif diff --git a/src/java/jniICalTimeType_cxx.cpp b/src/java/jniICalTimeType_cxx.cpp index 9609b3b8..f956a7f3 100644 --- a/src/java/jniICalTimeType_cxx.cpp +++ b/src/java/jniICalTimeType_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: jniICalTimeType_cxx.cpp CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #include @@ -30,7 +22,6 @@ static jfieldID ICalTimeType_Second_FID; static jfieldID ICalTimeType_Is_date_FID; static jfieldID ICalTimeType_Zone_FID; - void initICalTimeTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalTimeType_Year_FID = env->GetFieldID(clazz, "year", "I"); diff --git a/src/java/jniICalTimeType_cxx.h b/src/java/jniICalTimeType_cxx.h index ac28303d..e0f6fb9e 100644 --- a/src/java/jniICalTimeType_cxx.h +++ b/src/java/jniICalTimeType_cxx.h @@ -2,18 +2,10 @@ FILE: jniICalTimeType_cxx.h CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _jni_ICalTimeType_H #define _jni_ICalTimeType_H @@ -52,7 +44,6 @@ void jni_GetAll_from_ICalTimeType(struct ICalTimeType* __ICalTimeType_, JNIEnv* JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_initFIDs(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTimeType_init__J(JNIEnv* env, jobject thisICalTimeType, jlong data); - #ifdef __cplusplus } #endif diff --git a/src/java/jniICalTriggerType_cxx.cpp b/src/java/jniICalTriggerType_cxx.cpp index 42cea1aa..fd1a93a4 100644 --- a/src/java/jniICalTriggerType_cxx.cpp +++ b/src/java/jniICalTriggerType_cxx.cpp @@ -2,18 +2,10 @@ FILE: jniICalTriggerType_cxx.cpp CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #include @@ -24,7 +16,6 @@ static jfieldID ICalTriggerType_Time_FID; static jfieldID ICalTriggerType_Duration_FID; - void initICalTriggerTypeFieldIDs(JNIEnv* env, jclass clazz) { ICalTriggerType_Time_FID = env->GetFieldID(clazz, "time", "Lnet/cp/jlibical/ICalTimeType;"); diff --git a/src/java/jniICalTriggerType_cxx.h b/src/java/jniICalTriggerType_cxx.h index 3835caf5..e71f8f25 100644 --- a/src/java/jniICalTriggerType_cxx.h +++ b/src/java/jniICalTriggerType_cxx.h @@ -2,18 +2,10 @@ FILE: jniICalTriggerType_cxx.h CREATOR: structConverter - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _jni_ICalTriggerType_H @@ -23,7 +15,6 @@ // I forgot how to do this using a typedef in c++!!!! #define ICalTriggerType icaltriggertype - #ifdef __cplusplus extern "C" { #endif @@ -42,7 +33,6 @@ void jni_GetAll_from_ICalTriggerType(struct ICalTriggerType* __ICalTriggerType_, JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_init__J(JNIEnv* env, jobject thisICalTriggerType, jlong data); JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalTriggerType_initFIDs(JNIEnv *env, jclass clazz); - #ifdef __cplusplus } #endif diff --git a/src/java/net_cp_jlibical_ICalParameter_cxx.cpp b/src/java/net_cp_jlibical_ICalParameter_cxx.cpp index d3d52da6..b55807a8 100644 --- a/src/java/net_cp_jlibical_ICalParameter_cxx.cpp +++ b/src/java/net_cp_jlibical_ICalParameter_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: net_cp_jlibical_ICalParameter_cxx.cpp CREATOR: gnorman 1/10/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef NET_CP_JLIBICAL_ICALPARAMETER_CXX_H diff --git a/src/java/net_cp_jlibical_ICalParameter_cxx.h b/src/java/net_cp_jlibical_ICalParameter_cxx.h index 1949a0f2..88ba98a6 100644 --- a/src/java/net_cp_jlibical_ICalParameter_cxx.h +++ b/src/java/net_cp_jlibical_ICalParameter_cxx.h @@ -2,18 +2,10 @@ FILE: net_cp_jlibical_ICalParameter_cxx.h CREATOR: javah 1/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _Included_net_cp_jlibical_ICalParameter #define _Included_net_cp_jlibical_ICalParameter diff --git a/src/java/net_cp_jlibical_ICalProperty_cxx.cpp b/src/java/net_cp_jlibical_ICalProperty_cxx.cpp index 415b696b..24846f15 100644 --- a/src/java/net_cp_jlibical_ICalProperty_cxx.cpp +++ b/src/java/net_cp_jlibical_ICalProperty_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: net_cp_jlibical_ICalProperty_cxx.cpp CREATOR: gnorman 1/10/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef NET_CP_JLIBICAL_ICALPROPERTY_CXX_H @@ -1388,7 +1380,6 @@ JNIEXPORT void JNICALL Java_net_cp_jlibical_ICalProperty_init__I setCObjectPtr(env,jobj,new ICalProperty((icalproperty_kind)kind)); } - /* * Class: net_cp_jlibical_ICalProperty * Method: set_status diff --git a/src/java/net_cp_jlibical_ICalProperty_cxx.h b/src/java/net_cp_jlibical_ICalProperty_cxx.h index b1c71c32..bc8af40f 100644 --- a/src/java/net_cp_jlibical_ICalProperty_cxx.h +++ b/src/java/net_cp_jlibical_ICalProperty_cxx.h @@ -2,18 +2,10 @@ FILE: net_cp_jlibical_ICalProperty_cxx.h CREATOR: javah 1/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _Included_net_cp_jlibical_ICalProperty #define _Included_net_cp_jlibical_ICalProperty diff --git a/src/java/net_cp_jlibical_ICalValue_cxx.cpp b/src/java/net_cp_jlibical_ICalValue_cxx.cpp index f01a9338..3068ce47 100644 --- a/src/java/net_cp_jlibical_ICalValue_cxx.cpp +++ b/src/java/net_cp_jlibical_ICalValue_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: net_cp_jlibical_ICalValue_cxx.cpp CREATOR: gnorman 1/10/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef NET_CP_JLIBICAL_ICALVALUE_CXX_H diff --git a/src/java/net_cp_jlibical_ICalValue_cxx.h b/src/java/net_cp_jlibical_ICalValue_cxx.h index f7ffde37..7de5cadc 100644 --- a/src/java/net_cp_jlibical_ICalValue_cxx.h +++ b/src/java/net_cp_jlibical_ICalValue_cxx.h @@ -2,18 +2,10 @@ FILE: net_cp_jlibical_ICalValue_cxx.h CREATOR: javah 1/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _Included_net_cp_jlibical_ICalValue #define _Included_net_cp_jlibical_ICalValue diff --git a/src/java/net_cp_jlibical_VComponent_cxx.cpp b/src/java/net_cp_jlibical_VComponent_cxx.cpp index 1b5bb852..d7054618 100644 --- a/src/java/net_cp_jlibical_VComponent_cxx.cpp +++ b/src/java/net_cp_jlibical_VComponent_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: net_cp_jlibical_VComponent_cxx.cpp CREATOR: gnorman 1/10/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef NET_CP_JLIBICAL_VCOMPONENT_CXX_H @@ -470,7 +462,6 @@ JNIEXPORT jobject JNICALL Java_net_cp_jlibical_VComponent_get_1dtend // create a new surrogate, using aTime as the subject. result = createNewICalTimeType(env,&aTime); - } return(result); diff --git a/src/java/net_cp_jlibical_VComponent_cxx.h b/src/java/net_cp_jlibical_VComponent_cxx.h index 3bf9d09e..8aa703af 100644 --- a/src/java/net_cp_jlibical_VComponent_cxx.h +++ b/src/java/net_cp_jlibical_VComponent_cxx.h @@ -2,18 +2,10 @@ FILE: net_cp_jlibical_VComponent_cxx.h CREATOR: javah 1/11/02 - (C) COPYRIGHT 2002, Critical Path + SPDX-FileCopyrightText: 2002, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef _Included_net_cp_jlibical_VComponent #define _Included_net_cp_jlibical_VComponent diff --git a/src/java/testjni.java b/src/java/testjni.java index bb6a6aee..89ff875b 100644 --- a/src/java/testjni.java +++ b/src/java/testjni.java @@ -1,3 +1,10 @@ +/*====================================================================== + FILE: testjni.java + CREATOR: + SPDX-FileCopyrightText: 2002, Critical Path + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +======================================================================*/ + package net.cp.jlibical; import java.lang.String; diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt index 473de675..2c14a560 100644 --- a/src/libical-glib/CMakeLists.txt +++ b/src/libical-glib/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + add_definitions(-Dlibical_ical_EXPORTS) # a C11 compliant compiler is required to build this library diff --git a/src/libical-glib/api/i-cal-array.xml b/src/libical-glib/api/i-cal-array.xml index bd7641da..5e8f4ba6 100644 --- a/src/libical-glib/api/i-cal-array.xml +++ b/src/libical-glib/api/i-cal-array.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-attach.xml b/src/libical-glib/api/i-cal-attach.xml index d361ee81..970a02cb 100644 --- a/src/libical-glib/api/i-cal-attach.xml +++ b/src/libical-glib/api/i-cal-attach.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-comp-iter.xml b/src/libical-glib/api/i-cal-comp-iter.xml index 549db8aa..9f690b66 100644 --- a/src/libical-glib/api/i-cal-comp-iter.xml +++ b/src/libical-glib/api/i-cal-comp-iter.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-component.xml b/src/libical-glib/api/i-cal-component.xml index ad55c043..f466978a 100644 --- a/src/libical-glib/api/i-cal-component.xml +++ b/src/libical-glib/api/i-cal-component.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-datetimeperiod.xml b/src/libical-glib/api/i-cal-datetimeperiod.xml index bfeadab1..4a393740 100644 --- a/src/libical-glib/api/i-cal-datetimeperiod.xml +++ b/src/libical-glib/api/i-cal-datetimeperiod.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-derived-parameter.xml b/src/libical-glib/api/i-cal-derived-parameter.xml index a0799a74..4b85800d 100644 --- a/src/libical-glib/api/i-cal-derived-parameter.xml +++ b/src/libical-glib/api/i-cal-derived-parameter.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-derived-property.xml b/src/libical-glib/api/i-cal-derived-property.xml index 24e31ef5..3ca15403 100644 --- a/src/libical-glib/api/i-cal-derived-property.xml +++ b/src/libical-glib/api/i-cal-derived-property.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-derived-value.xml b/src/libical-glib/api/i-cal-derived-value.xml index 5f965756..92d94b8a 100644 --- a/src/libical-glib/api/i-cal-derived-value.xml +++ b/src/libical-glib/api/i-cal-derived-value.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-duration.xml b/src/libical-glib/api/i-cal-duration.xml index ec80208d..053cbee5 100644 --- a/src/libical-glib/api/i-cal-duration.xml +++ b/src/libical-glib/api/i-cal-duration.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-enums.xml b/src/libical-glib/api/i-cal-enums.xml index 61e12a79..ac8a747a 100644 --- a/src/libical-glib/api/i-cal-enums.xml +++ b/src/libical-glib/api/i-cal-enums.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-error.xml b/src/libical-glib/api/i-cal-error.xml index e2692f71..9589ddd5 100644 --- a/src/libical-glib/api/i-cal-error.xml +++ b/src/libical-glib/api/i-cal-error.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-geo.xml b/src/libical-glib/api/i-cal-geo.xml index 4d531387..7f81e20f 100644 --- a/src/libical-glib/api/i-cal-geo.xml +++ b/src/libical-glib/api/i-cal-geo.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-memory.xml b/src/libical-glib/api/i-cal-memory.xml index 49980a60..ffb2cac0 100644 --- a/src/libical-glib/api/i-cal-memory.xml +++ b/src/libical-glib/api/i-cal-memory.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-mime.xml b/src/libical-glib/api/i-cal-mime.xml index 2fa40f9f..f2b1ff3c 100644 --- a/src/libical-glib/api/i-cal-mime.xml +++ b/src/libical-glib/api/i-cal-mime.xml @@ -1,17 +1,9 @@ /** diff --git a/src/libical-glib/api/i-cal-parameter.xml b/src/libical-glib/api/i-cal-parameter.xml index 9951174a..a3a6f919 100644 --- a/src/libical-glib/api/i-cal-parameter.xml +++ b/src/libical-glib/api/i-cal-parameter.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-parser.xml b/src/libical-glib/api/i-cal-parser.xml index ede94772..7bca47fa 100644 --- a/src/libical-glib/api/i-cal-parser.xml +++ b/src/libical-glib/api/i-cal-parser.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-period.xml b/src/libical-glib/api/i-cal-period.xml index 1b02bbc6..8e3fc2ca 100644 --- a/src/libical-glib/api/i-cal-period.xml +++ b/src/libical-glib/api/i-cal-period.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-property.xml b/src/libical-glib/api/i-cal-property.xml index 4d4151a7..5e874b66 100644 --- a/src/libical-glib/api/i-cal-property.xml +++ b/src/libical-glib/api/i-cal-property.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-recur-iterator.xml b/src/libical-glib/api/i-cal-recur-iterator.xml index 032c4257..7e0ad916 100644 --- a/src/libical-glib/api/i-cal-recur-iterator.xml +++ b/src/libical-glib/api/i-cal-recur-iterator.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-recur.xml b/src/libical-glib/api/i-cal-recur.xml index 870ea61b..e1d689b4 100644 --- a/src/libical-glib/api/i-cal-recur.xml +++ b/src/libical-glib/api/i-cal-recur.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-recurrence.xml b/src/libical-glib/api/i-cal-recurrence.xml index 0ebb4545..ce019dd4 100644 --- a/src/libical-glib/api/i-cal-recurrence.xml +++ b/src/libical-glib/api/i-cal-recurrence.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-reqstat.xml b/src/libical-glib/api/i-cal-reqstat.xml index 738c8a32..dbbdd061 100644 --- a/src/libical-glib/api/i-cal-reqstat.xml +++ b/src/libical-glib/api/i-cal-reqstat.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-restriction.xml b/src/libical-glib/api/i-cal-restriction.xml index 5bc4fe40..77fb117f 100644 --- a/src/libical-glib/api/i-cal-restriction.xml +++ b/src/libical-glib/api/i-cal-restriction.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-time-span.xml b/src/libical-glib/api/i-cal-time-span.xml index 4c2aae18..ca8cfe9e 100644 --- a/src/libical-glib/api/i-cal-time-span.xml +++ b/src/libical-glib/api/i-cal-time-span.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index 5119c977..9149b914 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-timezone.xml b/src/libical-glib/api/i-cal-timezone.xml index 0900e612..0de66874 100644 --- a/src/libical-glib/api/i-cal-timezone.xml +++ b/src/libical-glib/api/i-cal-timezone.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-trigger.xml b/src/libical-glib/api/i-cal-trigger.xml index 6d3d1ffb..81cc19ec 100644 --- a/src/libical-glib/api/i-cal-trigger.xml +++ b/src/libical-glib/api/i-cal-trigger.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-unknowntokenhandling.xml b/src/libical-glib/api/i-cal-unknowntokenhandling.xml index 5c08c7ba..7d656224 100644 --- a/src/libical-glib/api/i-cal-unknowntokenhandling.xml +++ b/src/libical-glib/api/i-cal-unknowntokenhandling.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/api/i-cal-value.xml b/src/libical-glib/api/i-cal-value.xml index 4418af91..c7cf2c6e 100644 --- a/src/libical-glib/api/i-cal-value.xml +++ b/src/libical-glib/api/i-cal-value.xml @@ -1,17 +1,9 @@ diff --git a/src/libical-glib/i-cal-object.c.in b/src/libical-glib/i-cal-object.c.in index e5881bc5..95ab14b4 100644 --- a/src/libical-glib/i-cal-object.c.in +++ b/src/libical-glib/i-cal-object.c.in @@ -1,17 +1,7 @@ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software: you can redistribute it and/or modify it - * under the terms of version 2.1. of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifdef HAVE_CONFIG_H diff --git a/src/libical-glib/i-cal-object.h.in b/src/libical-glib/i-cal-object.h.in index a39ebddd..9803b5c2 100644 --- a/src/libical-glib/i-cal-object.h.in +++ b/src/libical-glib/i-cal-object.h.in @@ -1,17 +1,7 @@ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software: you can redistribute it and/or modify it - * under the terms of version 2.1. of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #if !defined (__LIBICAL_GLIB_H_INSIDE__) && !defined (LIBICAL_GLIB_COMPILATION) diff --git a/src/libical-glib/tools/generator.c b/src/libical-glib/tools/generator.c index 47814724..d1d3fc23 100644 --- a/src/libical-glib/tools/generator.c +++ b/src/libical-glib/tools/generator.c @@ -1,16 +1,7 @@ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #include "generator.h" diff --git a/src/libical-glib/tools/generator.h b/src/libical-glib/tools/generator.h index 4aa14693..31a4ea35 100644 --- a/src/libical-glib/tools/generator.h +++ b/src/libical-glib/tools/generator.h @@ -1,16 +1,7 @@ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifndef GENERATOR_H diff --git a/src/libical-glib/tools/header-forward-declarations-template b/src/libical-glib/tools/header-forward-declarations-template index 7ea06c29..95de7492 100644 --- a/src/libical-glib/tools/header-forward-declarations-template +++ b/src/libical-glib/tools/header-forward-declarations-template @@ -1,19 +1,9 @@ /* Generated file (by generator) */ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software: you can redistribute it and/or modify it - * under the terms of version 2.1. of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #if !defined (__LIBICAL_GLIB_H_INSIDE__) && !defined (LIBICAL_GLIB_COMPILATION) diff --git a/src/libical-glib/tools/header-header-template b/src/libical-glib/tools/header-header-template index 9dde6369..cab23f9f 100644 --- a/src/libical-glib/tools/header-header-template +++ b/src/libical-glib/tools/header-header-template @@ -1,19 +1,9 @@ /* Generated file (by generator) */ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software: you can redistribute it and/or modify it - * under the terms of version 2.1. of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifndef LIBICAL_GLIB_H diff --git a/src/libical-glib/tools/header-template b/src/libical-glib/tools/header-template index f4edf16f..a51c7331 100644 --- a/src/libical-glib/tools/header-template +++ b/src/libical-glib/tools/header-template @@ -1,19 +1,9 @@ /* Generated file (by generator) */ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software: you can redistribute it and/or modify it - * under the terms of version 2.1. of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #if !defined (__LIBICAL_GLIB_H_INSIDE__) && !defined (LIBICAL_GLIB_COMPILATION) diff --git a/src/libical-glib/tools/source-template b/src/libical-glib/tools/source-template index 8b71354e..4a354b2c 100644 --- a/src/libical-glib/tools/source-template +++ b/src/libical-glib/tools/source-template @@ -1,19 +1,9 @@ /* Generated file (by generator) */ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software: you can redistribute it and/or modify it - * under the terms of version 2.1. of the GNU Lesser General Public License - * as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License - * for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifdef HAVE_CONFIG_H diff --git a/src/libical-glib/tools/xml-parser.c b/src/libical-glib/tools/xml-parser.c index a9cf2704..76e39b7f 100644 --- a/src/libical-glib/tools/xml-parser.c +++ b/src/libical-glib/tools/xml-parser.c @@ -1,16 +1,7 @@ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #include "xml-parser.h" diff --git a/src/libical-glib/tools/xml-parser.h b/src/libical-glib/tools/xml-parser.h index bccbb4d3..403c40c0 100644 --- a/src/libical-glib/tools/xml-parser.h +++ b/src/libical-glib/tools/xml-parser.h @@ -1,16 +1,8 @@ /* - * Copyright (C) 2015 William Yu + * SPDX-FileCopyrightText: 2015 William Yu * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ */ #ifndef XML_PARSER_H diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index 8f14071c..5852e13f 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + add_definitions(-Dlibical_ical_EXPORTS) configure_file( diff --git a/src/libical/astime.h b/src/libical/astime.h index 8c537b0a..f89ddf67 100644 --- a/src/libical/astime.h +++ b/src/libical/astime.h @@ -44,19 +44,10 @@ */ /*====================================================================== - (C) COPYRIGHT 2018, Markus Minichmayr + SPDX-FileCopyrightText: 2018, Markus Minichmayr https://tapkey.com - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ========================================================================*/ /** diff --git a/src/libical/caldate.c b/src/libical/caldate.c index c62a1aa8..a04bc8b1 100644 --- a/src/libical/caldate.c +++ b/src/libical/caldate.c @@ -3,7 +3,7 @@ * needs of the libical project. The original copyright notice is as follows: */ /* - * Copyright (c) 1986-2000, Hiram Clawson + * Copyright (c) 1986-2000, Hiram Clawson * All rights reserved. * * Redistribution and use in source and binary forms, with or @@ -22,7 +22,7 @@ * Neither name of The Museum of Hiram nor the names of * its contributors may be used to endorse or promote products * derived from this software without specific prior - * written permission. + * written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, @@ -35,7 +35,7 @@ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF - * THE POSSIBILITY OF SUCH DAMAGE. + * THE POSSIBILITY OF SUCH DAMAGE. */ /* * The modifications made are licensed as follows (to distinguish between @@ -44,22 +44,12 @@ */ /*====================================================================== - (C) COPYRIGHT 2018, Markus Minichmayr + SPDX-FileCopyrightText: 2018, Markus Minichmayr https://tapkey.com - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: http://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at http://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ========================================================================*/ - #include "astime.h" /* time structures */ /** diff --git a/src/libical/ical_file.cmake b/src/libical/ical_file.cmake index 1ad0bbb5..59e96d77 100644 --- a/src/libical/ical_file.cmake +++ b/src/libical/ical_file.cmake @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + # ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. # It is required to make the combined header ical.h properly. set(COMBINEDHEADERSICAL diff --git a/src/libical/icalarray.c b/src/libical/icalarray.c index 5010baf6..a472c3a0 100644 --- a/src/libical/icalarray.c +++ b/src/libical/icalarray.c @@ -2,18 +2,10 @@ FILE: icalarray.c CREATOR: Damon Chaplin 07 March 2001 - (C) COPYRIGHT 2001, Ximian, Inc. + SPDX-FileCopyrightText: 2001, Ximian, Inc. - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalarray.h b/src/libical/icalarray.h index a7f35763..10c8e08e 100644 --- a/src/libical/icalarray.h +++ b/src/libical/icalarray.h @@ -2,18 +2,10 @@ FILE: icalarray.h CREATOR: Damon Chaplin 07 March 2001 - (C) COPYRIGHT 2001, Ximian, Inc. + SPDX-FileCopyrightText: 2001, Ximian, Inc. - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /** @file icalarray.h diff --git a/src/libical/icalattach.c b/src/libical/icalattach.c index 63147154..a2ec5fce 100644 --- a/src/libical/icalattach.c +++ b/src/libical/icalattach.c @@ -2,18 +2,10 @@ FILE: icalattach.c CREATOR: acampi 28 May 02 - (C) COPYRIGHT 2002, Andrea Campi + SPDX-FileCopyrightText: 2002, Andrea Campi - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalattach.h b/src/libical/icalattach.h index 9a606773..be2daca2 100644 --- a/src/libical/icalattach.h +++ b/src/libical/icalattach.h @@ -2,18 +2,10 @@ FILE: icalattach.h CREATOR: acampi 28 May 02 - (C) COPYRIGHT 2002, Andrea Campi + SPDX-FileCopyrightText: 2002, Andrea Campi - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /** diff --git a/src/libical/icalattachimpl.h b/src/libical/icalattachimpl.h index af9975c0..7ca14441 100644 --- a/src/libical/icalattachimpl.h +++ b/src/libical/icalattachimpl.h @@ -2,18 +2,10 @@ FILE: icalattachimpl.h CREATOR: acampi 28 May 02 - (C) COPYRIGHT 2000, Andrea Campi + SPDX-FileCopyrightText: 2000, Andrea Campi - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALATTACHIMPL_H diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c index bc179b73..4f9fa79d 100644 --- a/src/libical/icalcomponent.c +++ b/src/libical/icalcomponent.c @@ -2,18 +2,10 @@ FILE: icalcomponent.c CREATOR: eric 28 April 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalcomponent.h b/src/libical/icalcomponent.h index cd59f420..26948c9e 100644 --- a/src/libical/icalcomponent.h +++ b/src/libical/icalcomponent.h @@ -2,18 +2,10 @@ FILE: icalcomponent.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /** diff --git a/src/libical/icalderivedparameter.c.in b/src/libical/icalderivedparameter.c.in index f0af1fe7..0e203179 100644 --- a/src/libical/icalderivedparameter.c.in +++ b/src/libical/icalderivedparameter.c.in @@ -2,18 +2,9 @@ FILE: icalderivedparameters.{c,h} CREATOR: eric 09 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 Contributions from: Graham Davison (g.m.davison@computer.org) diff --git a/src/libical/icalderivedparameter.h.in b/src/libical/icalderivedparameter.h.in index 9bb58fca..07649533 100644 --- a/src/libical/icalderivedparameter.h.in +++ b/src/libical/icalderivedparameter.h.in @@ -2,18 +2,9 @@ FILE: icalparam.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalparam.h ======================================================================*/ diff --git a/src/libical/icalderivedproperty.c.in b/src/libical/icalderivedproperty.c.in index 93883b3a..62cbf6d1 100644 --- a/src/libical/icalderivedproperty.c.in +++ b/src/libical/icalderivedproperty.c.in @@ -2,18 +2,10 @@ FILE: icalderivedproperty.c CREATOR: eric 09 May 1999 - (C) COPYRIGHT 1999, Eric Busboom + SPDX-FileCopyrightText: 1999, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalderivedproperty.h.in b/src/libical/icalderivedproperty.h.in index 034cfe1b..c5244dd8 100644 --- a/src/libical/icalderivedproperty.h.in +++ b/src/libical/icalderivedproperty.h.in @@ -2,18 +2,10 @@ FILE: icalderivedproperty.h CREATOR: eric 09 May 1999 - (C) COPYRIGHT 1999, Eric Busboom + SPDX-FileCopyrightText: 1999, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALDERIVEDPROPERTY_H diff --git a/src/libical/icalderivedvalue.c.in b/src/libical/icalderivedvalue.c.in index e2c1376d..1b87c353 100644 --- a/src/libical/icalderivedvalue.c.in +++ b/src/libical/icalderivedvalue.c.in @@ -2,18 +2,9 @@ FILE: icalvalue.c CREATOR: eric 02 May 1999 - (C) COPYRIGHT 1999, Eric Busboom + SPDX-FileCopyrightText: 1999, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 Contributions from: Graham Davison (g.m.davison@computer.org) diff --git a/src/libical/icalderivedvalue.h.in b/src/libical/icalderivedvalue.h.in index 52f57418..65ed8588 100644 --- a/src/libical/icalderivedvalue.h.in +++ b/src/libical/icalderivedvalue.h.in @@ -2,18 +2,10 @@ FILE: icalvalue.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 1999, Eric Busboom + SPDX-FileCopyrightText: 1999, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALDERIVEDVALUE_H diff --git a/src/libical/icalduration.c b/src/libical/icalduration.c index 79789d97..e6780f59 100644 --- a/src/libical/icalduration.c +++ b/src/libical/icalduration.c @@ -2,18 +2,9 @@ FILE: icaltime.c CREATOR: eric 02 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libical/icalduration.h b/src/libical/icalduration.h index 8c1aa2ed..727414d9 100644 --- a/src/libical/icalduration.h +++ b/src/libical/icalduration.h @@ -2,18 +2,9 @@ FILE: icalduration.h CREATOR: eric 26 Jan 2001 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libical/icalenums.c b/src/libical/icalenums.c index 6f2ee32a..954a7832 100644 --- a/src/libical/icalenums.c +++ b/src/libical/icalenums.c @@ -2,18 +2,10 @@ FILE: icalenum.c CREATOR: eric 29 April 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalenums.h b/src/libical/icalenums.h index ab2b454e..8c72a008 100644 --- a/src/libical/icalenums.h +++ b/src/libical/icalenums.h @@ -1,18 +1,9 @@ /*====================================================================== FILE: icalenums.h - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 Contributions from: Graham Davison diff --git a/src/libical/icalerror.c b/src/libical/icalerror.c index 1a61755c..1e6e4602 100644 --- a/src/libical/icalerror.c +++ b/src/libical/icalerror.c @@ -2,18 +2,9 @@ FILE: icalerror.c CREATOR: eric 16 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalerror.c ======================================================================*/ diff --git a/src/libical/icalerror.h b/src/libical/icalerror.h index 130df0b3..c2824be4 100644 --- a/src/libical/icalerror.h +++ b/src/libical/icalerror.h @@ -2,18 +2,9 @@ FILE: icalerror.h CREATOR: eric 09 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalerror.h ======================================================================*/ diff --git a/src/libical/icallangbind.c b/src/libical/icallangbind.c index bd4e5c11..03a973bb 100644 --- a/src/libical/icallangbind.c +++ b/src/libical/icallangbind.c @@ -2,18 +2,10 @@ FILE: icallangbind.c CREATOR: eric 15 dec 2000 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icallangbind.h b/src/libical/icallangbind.h index c5ff8715..1ad4e10e 100644 --- a/src/libical/icallangbind.h +++ b/src/libical/icallangbind.h @@ -2,18 +2,10 @@ FILE: icallangbind.h CREATOR: eric 25 jan 2001 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALLANGBIND_H diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index a1021ebe..2b5d0490 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -2,29 +2,9 @@ FILE: icalmemory.c CREATOR: eric 30 June 1999 - Copyright (C) 2000 Eric Busboom + SPDX-FileCopyrightText: 2000 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalmemory.h b/src/libical/icalmemory.h index aa3e5165..e96c292e 100644 --- a/src/libical/icalmemory.h +++ b/src/libical/icalmemory.h @@ -2,18 +2,9 @@ FILE: icalmemory.h CREATOR: eric 30 June 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ diff --git a/src/libical/icalmime.c b/src/libical/icalmime.c index 0c5c39ce..d1345e31 100644 --- a/src/libical/icalmime.c +++ b/src/libical/icalmime.c @@ -2,18 +2,10 @@ FILE: icalmime.c CREATOR: eric 26 July 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ diff --git a/src/libical/icalmime.h b/src/libical/icalmime.h index ea2e1a0d..8dca137c 100644 --- a/src/libical/icalmime.h +++ b/src/libical/icalmime.h @@ -2,18 +2,10 @@ FILE: icalmime.h CREATOR: eric 26 July 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALMIME_H diff --git a/src/libical/icalparameter.c b/src/libical/icalparameter.c index c437e376..e4bf5842 100644 --- a/src/libical/icalparameter.c +++ b/src/libical/icalparameter.c @@ -2,18 +2,9 @@ FILE: icalderivedparameters.{c,h} CREATOR: eric 09 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalderivedparameters.{c,h} diff --git a/src/libical/icalparameter.h b/src/libical/icalparameter.h index c3c517f9..ea505201 100644 --- a/src/libical/icalparameter.h +++ b/src/libical/icalparameter.h @@ -2,18 +2,10 @@ FILE: icalparam.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /** diff --git a/src/libical/icalparameter_cxx.cpp b/src/libical/icalparameter_cxx.cpp index 6b26a454..70510533 100644 --- a/src/libical/icalparameter_cxx.cpp +++ b/src/libical/icalparameter_cxx.cpp @@ -3,18 +3,10 @@ * @author fnguyen (12/10/01) * @brief Implementation of C++ Wrapper for icalparameter.c * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #include "icalparameter_cxx.h" diff --git a/src/libical/icalparameter_cxx.h b/src/libical/icalparameter_cxx.h index 81c4d9e6..dfe98bbc 100644 --- a/src/libical/icalparameter_cxx.h +++ b/src/libical/icalparameter_cxx.h @@ -3,18 +3,10 @@ * @author fnguyen (12/10/01) * @brief Definition of C++ Wrapper for icalparameter.c * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #ifndef ICALPARAMETER_CXX_H diff --git a/src/libical/icalparameterimpl.h b/src/libical/icalparameterimpl.h index 0d710978..67b4c76f 100644 --- a/src/libical/icalparameterimpl.h +++ b/src/libical/icalparameterimpl.h @@ -2,18 +2,9 @@ FILE: icalparameterimpl.h CREATOR: eric 09 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalderivedparameters.{c,h} diff --git a/src/libical/icalparser.c b/src/libical/icalparser.c index 90a41e63..3aaba0c8 100644 --- a/src/libical/icalparser.c +++ b/src/libical/icalparser.c @@ -2,31 +2,11 @@ FILE: icalparser.c CREATOR: eric 04 August 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - The Initial Developer of the Original Code is Eric Busboom + The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalparser.h b/src/libical/icalparser.h index 765f7730..e2a1f319 100644 --- a/src/libical/icalparser.h +++ b/src/libical/icalparser.h @@ -2,18 +2,9 @@ FILE: icalparser.h CREATOR: eric 20 April 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalparser.h ======================================================================*/ diff --git a/src/libical/icalperiod.c b/src/libical/icalperiod.c index 0dc3cb01..f3e57aab 100644 --- a/src/libical/icalperiod.c +++ b/src/libical/icalperiod.c @@ -2,18 +2,9 @@ FILE: icalperiod.c CREATOR: eric 02 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libical/icalperiod.h b/src/libical/icalperiod.h index fb8e3140..2409ab21 100644 --- a/src/libical/icalperiod.h +++ b/src/libical/icalperiod.h @@ -2,18 +2,9 @@ FILE: icalperiod.h CREATOR: eric 26 Jan 2001 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libical/icalproperty.c b/src/libical/icalproperty.c index 8202fa32..8227c185 100644 --- a/src/libical/icalproperty.c +++ b/src/libical/icalproperty.c @@ -2,18 +2,9 @@ FILE: icalproperty.c CREATOR: eric 28 April 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalproperty.c ======================================================================*/ diff --git a/src/libical/icalproperty.h b/src/libical/icalproperty.h index e21bebb5..df7a5b5a 100644 --- a/src/libical/icalproperty.h +++ b/src/libical/icalproperty.h @@ -2,18 +2,10 @@ FILE: icalproperty.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALPROPERTY_H diff --git a/src/libical/icalproperty_cxx.cpp b/src/libical/icalproperty_cxx.cpp index 6b542f19..6a377fec 100644 --- a/src/libical/icalproperty_cxx.cpp +++ b/src/libical/icalproperty_cxx.cpp @@ -3,18 +3,10 @@ * @author fnguyen (12/10/01) * @brief Implementation of C++ Wrapper for icalproperty.c * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #include "icalproperty_cxx.h" diff --git a/src/libical/icalproperty_cxx.h b/src/libical/icalproperty_cxx.h index e243dd2e..c81acfde 100644 --- a/src/libical/icalproperty_cxx.h +++ b/src/libical/icalproperty_cxx.h @@ -3,18 +3,10 @@ * @author fnguyen (12/10/01) * @brief Definition of C++ Wrapper for icalproperty.c * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #ifndef ICALPROPERTY_CXX_H diff --git a/src/libical/icalproperty_p.h b/src/libical/icalproperty_p.h index f8114a9e..dd0c9614 100644 --- a/src/libical/icalproperty_p.h +++ b/src/libical/icalproperty_p.h @@ -1,18 +1,10 @@ /*====================================================================== FILE: icalproperty_p.h - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALPROPERTY_P_H diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index 93c73f49..96d4190f 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -2,18 +2,10 @@ FILE: icalrecur.c CREATOR: eric 16 May 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ========================================================================*/ /** diff --git a/src/libical/icalrecur.h b/src/libical/icalrecur.h index b968a15b..b541362f 100644 --- a/src/libical/icalrecur.h +++ b/src/libical/icalrecur.h @@ -2,18 +2,10 @@ FILE: icalrecur.h CREATOR: eric 20 March 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ========================================================================*/ /** diff --git a/src/libical/icalrestriction.c.in b/src/libical/icalrestriction.c.in index 35da6970..600ad5fd 100644 --- a/src/libical/icalrestriction.c.in +++ b/src/libical/icalrestriction.c.in @@ -1,18 +1,10 @@ /*====================================================================== File: icalrestriction.c - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /*#line 7 "icalrestriction.c.in"*/ diff --git a/src/libical/icalrestriction.h b/src/libical/icalrestriction.h index 38751efc..c6841a9a 100644 --- a/src/libical/icalrestriction.h +++ b/src/libical/icalrestriction.h @@ -2,18 +2,9 @@ FILE: icalrestriction.h CREATOR: eric 24 April 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalrestriction.h diff --git a/src/libical/icaltime.c b/src/libical/icaltime.c index 8e77cc4b..d98880b2 100644 --- a/src/libical/icaltime.c +++ b/src/libical/icaltime.c @@ -2,20 +2,11 @@ FILE: icaltime.c CREATOR: eric 02 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom The timegm code is Copyright (c) 2001-2006, NLnet Labs. All rights reserved. - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libical/icaltime.h.cmake b/src/libical/icaltime.h.cmake index af1c89d4..e0f12561 100644 --- a/src/libical/icaltime.h.cmake +++ b/src/libical/icaltime.h.cmake @@ -2,18 +2,9 @@ FILE: icaltime.h CREATOR: eric 02 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index 4fc46c99..b272c0f0 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -2,18 +2,10 @@ FILE: icaltimezone.c CREATOR: Damon Chaplin 15 March 2001 - (C) COPYRIGHT 2001, Damon Chaplin + SPDX-FileCopyrightText: 2001, Damon Chaplin - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ //krazy:excludeall=cpp diff --git a/src/libical/icaltimezone.h b/src/libical/icaltimezone.h index 90951ac4..01677150 100644 --- a/src/libical/icaltimezone.h +++ b/src/libical/icaltimezone.h @@ -2,18 +2,10 @@ FILE: icaltimezone.h CREATOR: Damon Chaplin 15 March 2001 - (C) COPYRIGHT 2001, Damon Chaplin + SPDX-FileCopyrightText: 2001, Damon Chaplin - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /** * @file icaltimezone.h diff --git a/src/libical/icaltimezoneimpl.h b/src/libical/icaltimezoneimpl.h index 5f869521..63725f03 100644 --- a/src/libical/icaltimezoneimpl.h +++ b/src/libical/icaltimezoneimpl.h @@ -2,18 +2,10 @@ FILE: icaltimezoneimpl.h CREATOR: glenn 07 March 2010 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALTIMEZONEIMPL_H diff --git a/src/libical/icaltypes.c b/src/libical/icaltypes.c index 97007134..99cbb42e 100644 --- a/src/libical/icaltypes.c +++ b/src/libical/icaltypes.c @@ -2,18 +2,10 @@ FILE: icaltypes.c CREATOR: eric 16 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H #include diff --git a/src/libical/icaltypes.h b/src/libical/icaltypes.h index edbf003d..d606bc37 100644 --- a/src/libical/icaltypes.h +++ b/src/libical/icaltypes.h @@ -2,18 +2,10 @@ FILE: icaltypes.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALTYPES_H diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index 627e2846..a4a4db05 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -2,18 +2,9 @@ * Authors : * Chenthill Palanisamy * - * Copyright 2007, Novell, Inc. + * SPDX-FileCopyrightText: 2007, Novell, Inc. * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ //krazy:excludeall=cpp diff --git a/src/libical/icaltz-util.h b/src/libical/icaltz-util.h index 1f853a09..bc24cdd1 100644 --- a/src/libical/icaltz-util.h +++ b/src/libical/icaltz-util.h @@ -2,18 +2,9 @@ * Authors : * Chenthill Palanisamy * - * Copyright 2007, Novell, Inc. + * SPDX-FileCopyrightText: 2007, Novell, Inc. * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifndef ICALTZUTIL_H diff --git a/src/libical/icalvalue.c b/src/libical/icalvalue.c index e3053177..6a15d788 100644 --- a/src/libical/icalvalue.c +++ b/src/libical/icalvalue.c @@ -2,18 +2,9 @@ FILE: icalvalue.c CREATOR: eric 02 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 Contributions from: Graham Davison diff --git a/src/libical/icalvalue.h b/src/libical/icalvalue.h index 382eee73..d6946dcc 100644 --- a/src/libical/icalvalue.h +++ b/src/libical/icalvalue.h @@ -2,18 +2,10 @@ FILE: icalvalue.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALVALUE_H diff --git a/src/libical/icalvalue_cxx.cpp b/src/libical/icalvalue_cxx.cpp index e8359667..f737bd4b 100644 --- a/src/libical/icalvalue_cxx.cpp +++ b/src/libical/icalvalue_cxx.cpp @@ -1,18 +1,10 @@ /*====================================================================== FILE: icalvalue_cxx.cpp CREATOR: fnguyen 12/21/01 - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/icalvalue_cxx.h b/src/libical/icalvalue_cxx.h index 95124d59..b922debf 100644 --- a/src/libical/icalvalue_cxx.h +++ b/src/libical/icalvalue_cxx.h @@ -1,18 +1,10 @@ /*====================================================================== FILE: icalvalue_cxx.h CREATOR: fnguyen 12/13/01 - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALVALUE_CXX_H diff --git a/src/libical/icalvalueimpl.h b/src/libical/icalvalueimpl.h index 570409bd..0cd2f65f 100644 --- a/src/libical/icalvalueimpl.h +++ b/src/libical/icalvalueimpl.h @@ -2,18 +2,9 @@ FILE: icalvalue.c CREATOR: eric 02 May 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 Contributions from: Graham Davison (g.m.davison@computer.org) diff --git a/src/libical/icalversion.h.cmake b/src/libical/icalversion.h.cmake index 83fa2f54..06ea6ab3 100644 --- a/src/libical/icalversion.h.cmake +++ b/src/libical/icalversion.h.cmake @@ -2,18 +2,10 @@ FILE: icalversion.h CREATOR: eric 20 March 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICAL_VERSION_H diff --git a/src/libical/icptrholder_cxx.h b/src/libical/icptrholder_cxx.h index c361803c..95b65e5c 100644 --- a/src/libical/icptrholder_cxx.h +++ b/src/libical/icptrholder_cxx.h @@ -25,18 +25,10 @@ * VComponentTmpPtr p;// VComponentTmpPtr is an instantiation of this template * for (p=component.get_first_component; p!= 0; p=component.get_next_component) { * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #ifndef ICPTRHOLDER_CXX_H diff --git a/src/libical/libical_deprecated.h b/src/libical/libical_deprecated.h index d1fa9dad..06fc28f1 100644 --- a/src/libical/libical_deprecated.h +++ b/src/libical/libical_deprecated.h @@ -1,3 +1,8 @@ +/** + SPDX-FileCopyrightText: Emiel Bruijntjes + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ + #ifndef LIBICAL_DEPRECATED_H #define LIBICAL_DEPRECATED_H diff --git a/src/libical/libical_ical_export.h b/src/libical/libical_ical_export.h index 2a2cb030..a4d7f66f 100644 --- a/src/libical/libical_ical_export.h +++ b/src/libical/libical_ical_export.h @@ -1,3 +1,8 @@ +/** + SPDX-FileCopyrightText: Allen Winter + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ + #ifndef LIBICAL_ICAL_EXPORT_H #define LIBICAL_ICAL_EXPORT_H diff --git a/src/libical/pvl.c b/src/libical/pvl.c index fdb7e0a5..0695a342 100644 --- a/src/libical/pvl.c +++ b/src/libical/pvl.c @@ -2,18 +2,10 @@ FILE: pvl.c CREATOR: eric November, 1995 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libical/pvl.h b/src/libical/pvl.h index 50feef16..50369ef3 100644 --- a/src/libical/pvl.h +++ b/src/libical/pvl.h @@ -2,18 +2,10 @@ FILE: pvl.h CREATOR: eric November, 1995 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICAL_PVL_H diff --git a/src/libical/qsort_gen.c b/src/libical/qsort_gen.c index 02f012ed..556eb683 100644 --- a/src/libical/qsort_gen.c +++ b/src/libical/qsort_gen.c @@ -1,16 +1,7 @@ /*====================================================================== FILE: qsort_gen.c - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The code in this file was initially authored as part of the PDCLib project and placed in the public domain. The initial copyright notice was as follows: diff --git a/src/libical/qsort_gen.h b/src/libical/qsort_gen.h index 5f979532..4e3bc0c1 100644 --- a/src/libical/qsort_gen.h +++ b/src/libical/qsort_gen.h @@ -1,18 +1,9 @@ /*====================================================================== FILE: qsort_gen.h - (C) COPYRIGHT 2018, Markus Minichmayr + SPDX-FileCopyrightText: 2018, Markus Minichmayr - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Markus Minichmayr. ======================================================================*/ diff --git a/src/libical/sspm.c b/src/libical/sspm.c index 0539a154..e05d22f7 100644 --- a/src/libical/sspm.c +++ b/src/libical/sspm.c @@ -2,29 +2,9 @@ FILE: sspm.c Parse Mime CREATOR: eric 25 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ diff --git a/src/libical/sspm.h b/src/libical/sspm.h index 6a98e812..0247babe 100644 --- a/src/libical/sspm.h +++ b/src/libical/sspm.h @@ -2,31 +2,11 @@ FILE: sspm.h Mime Parser CREATOR: eric 25 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ - - The Initial Developer of the Original Code is Eric Busboom + The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ #ifndef ICAL_SSPM_H diff --git a/src/libical/vcomponent_cxx.cpp b/src/libical/vcomponent_cxx.cpp index 79a67b26..0b42145c 100644 --- a/src/libical/vcomponent_cxx.cpp +++ b/src/libical/vcomponent_cxx.cpp @@ -3,18 +3,10 @@ * @author fnguyen (12/10/01) * @brief Implementation of C++ Wrapper for icalcomponent.c * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #ifdef HAVE_CONFIG_H diff --git a/src/libical/vcomponent_cxx.h b/src/libical/vcomponent_cxx.h index 62c065c8..677d7568 100644 --- a/src/libical/vcomponent_cxx.h +++ b/src/libical/vcomponent_cxx.h @@ -3,18 +3,10 @@ * @author fnguyen (12/10/01) * @brief C++ classes for the icalcomponent wrapper (VToDo VEvent, etc..). * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #ifndef ICAL_VCOMPONENT_CXX_H diff --git a/src/libicalss/CMakeLists.txt b/src/libicalss/CMakeLists.txt index 45cc802c..bbc0092e 100644 --- a/src/libicalss/CMakeLists.txt +++ b/src/libicalss/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + add_definitions(-Dlibical_icalss_EXPORTS) include_directories( diff --git a/src/libicalss/icalbdbset.c b/src/libicalss/icalbdbset.c index 773c20b5..e8a4f206 100644 --- a/src/libicalss/icalbdbset.c +++ b/src/libicalss/icalbdbset.c @@ -1,18 +1,10 @@ /*====================================================================== FILE: icalbdbset.c - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libicalss/icalbdbset.h b/src/libicalss/icalbdbset.h index 1fe2e2cf..079ae393 100644 --- a/src/libicalss/icalbdbset.h +++ b/src/libicalss/icalbdbset.h @@ -1,18 +1,10 @@ /*====================================================================== FILE: icalbdbset.h - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALBDBSET_H diff --git a/src/libicalss/icalbdbset_cxx.h b/src/libicalss/icalbdbset_cxx.h index 976d0d2f..1f676b89 100644 --- a/src/libicalss/icalbdbset_cxx.h +++ b/src/libicalss/icalbdbset_cxx.h @@ -3,18 +3,9 @@ * @author dml 12/12/01 * @brief Definition of C++ Wrapper for icalbdbset.c * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifndef ICALBDBSET_CXX_H diff --git a/src/libicalss/icalbdbsetimpl.h b/src/libicalss/icalbdbsetimpl.h index a5a60a47..a88df55e 100644 --- a/src/libicalss/icalbdbsetimpl.h +++ b/src/libicalss/icalbdbsetimpl.h @@ -1,18 +1,10 @@ /*====================================================================== FILE: icalbdbsetimpl.h - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALBDBSETIMPL_H diff --git a/src/libicalss/icalcalendar.c b/src/libicalss/icalcalendar.c index 5d50f121..61130efd 100644 --- a/src/libicalss/icalcalendar.c +++ b/src/libicalss/icalcalendar.c @@ -2,18 +2,10 @@ FILE: icalcalendar.c CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libicalss/icalcalendar.h b/src/libicalss/icalcalendar.h index ac424be0..4cf005cc 100644 --- a/src/libicalss/icalcalendar.h +++ b/src/libicalss/icalcalendar.h @@ -2,18 +2,9 @@ FILE: icalcalendar.h CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalclassify.c b/src/libicalss/icalclassify.c index cdce09b8..7450d8d1 100644 --- a/src/libicalss/icalclassify.c +++ b/src/libicalss/icalclassify.c @@ -2,18 +2,10 @@ FILE: icalclassify.c CREATOR: ebusboom 23 aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libicalss/icalclassify.h b/src/libicalss/icalclassify.h index 04b1e237..1d39a057 100644 --- a/src/libicalss/icalclassify.h +++ b/src/libicalss/icalclassify.h @@ -2,18 +2,10 @@ FILE: icalclassify.h CREATOR: eric 21 Aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ =========================================================================*/ #ifndef ICALCLASSIFY_H diff --git a/src/libicalss/icalcluster.c b/src/libicalss/icalcluster.c index ee926701..27861fe8 100644 --- a/src/libicalss/icalcluster.c +++ b/src/libicalss/icalcluster.c @@ -2,18 +2,10 @@ FILE: icalcluster.c CREATOR: acampi 13 March 2002 - Copyright (C) 2002 Andrea Campi + SPDX-FileCopyrightText: 2002 Andrea Campi - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /** diff --git a/src/libicalss/icalcluster.h b/src/libicalss/icalcluster.h index 1514a440..31195bb0 100644 --- a/src/libicalss/icalcluster.h +++ b/src/libicalss/icalcluster.h @@ -2,18 +2,10 @@ FILE: icalcluster.h CREATOR: acampi 13 March 2002 - Copyright (C) 2002 Andrea Campi + SPDX-FileCopyrightText: 2002 Andrea Campi - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALCLUSTER_H diff --git a/src/libicalss/icalclusterimpl.h b/src/libicalss/icalclusterimpl.h index e0cea3dd..642827fd 100644 --- a/src/libicalss/icalclusterimpl.h +++ b/src/libicalss/icalclusterimpl.h @@ -2,18 +2,10 @@ FILE: icalfilesetimpl.h CREATOR: acampi 13 March 2002 - Copyright (C) 2002 Andrea Campi + SPDX-FileCopyrightText: 2002 Andrea Campi - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALCLUSTERIMPL_H diff --git a/src/libicalss/icaldirset.c b/src/libicalss/icaldirset.c index 02c08667..eecf22e4 100644 --- a/src/libicalss/icaldirset.c +++ b/src/libicalss/icaldirset.c @@ -3,18 +3,9 @@ FILE: icaldirset.c CREATOR: eric 28 November 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icaldirset.h b/src/libicalss/icaldirset.h index d3c3e35e..edab10e2 100644 --- a/src/libicalss/icaldirset.h +++ b/src/libicalss/icaldirset.h @@ -2,18 +2,9 @@ FILE: icaldirset.h CREATOR: eric 28 November 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icaldirsetimpl.h b/src/libicalss/icaldirsetimpl.h index 800e987d..2c0f5ecf 100644 --- a/src/libicalss/icaldirsetimpl.h +++ b/src/libicalss/icaldirsetimpl.h @@ -2,18 +2,9 @@ FILE: icaldirsetimpl.h CREATOR: eric 21 Aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalfileset.c b/src/libicalss/icalfileset.c index 8ba82225..2778025c 100644 --- a/src/libicalss/icalfileset.c +++ b/src/libicalss/icalfileset.c @@ -2,18 +2,9 @@ FILE: icalfileset.c CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalfileset.h b/src/libicalss/icalfileset.h index 23060e34..04de522d 100644 --- a/src/libicalss/icalfileset.h +++ b/src/libicalss/icalfileset.h @@ -2,18 +2,9 @@ FILE: icalfileset.h CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalfilesetimpl.h b/src/libicalss/icalfilesetimpl.h index 6d7ffeab..b2bb72e2 100644 --- a/src/libicalss/icalfilesetimpl.h +++ b/src/libicalss/icalfilesetimpl.h @@ -2,18 +2,9 @@ FILE: icalfilesetimpl.h CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalgauge.c b/src/libicalss/icalgauge.c index 101254f6..0bafb05d 100644 --- a/src/libicalss/icalgauge.c +++ b/src/libicalss/icalgauge.c @@ -2,18 +2,9 @@ FILE: icalgauge.c CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalgauge.h b/src/libicalss/icalgauge.h index be6c7440..ee07952a 100644 --- a/src/libicalss/icalgauge.h +++ b/src/libicalss/icalgauge.h @@ -2,18 +2,9 @@ FILE: icalgauge.h CREATOR: eric 23 December 1999 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalgaugeimpl.h b/src/libicalss/icalgaugeimpl.h index 3b07240e..a9423162 100644 --- a/src/libicalss/icalgaugeimpl.h +++ b/src/libicalss/icalgaugeimpl.h @@ -2,18 +2,10 @@ FILE: icalgaugeimpl.h CREATOR: eric 09 Aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALGAUGEIMPL_H diff --git a/src/libicalss/icalmessage.c b/src/libicalss/icalmessage.c index c16a163f..779d41d9 100644 --- a/src/libicalss/icalmessage.c +++ b/src/libicalss/icalmessage.c @@ -2,18 +2,10 @@ FILE: icalmessage.c CREATOR: ebusboom 07 Nov 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libicalss/icalmessage.h b/src/libicalss/icalmessage.h index 7ec629bf..20aee462 100644 --- a/src/libicalss/icalmessage.h +++ b/src/libicalss/icalmessage.h @@ -2,18 +2,10 @@ FILE: icalmessage.h CREATOR: eric 07 Nov 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ =========================================================================*/ #ifndef ICALMESSAGE_H diff --git a/src/libicalss/icalset.c b/src/libicalss/icalset.c index 674e05b4..b98f233f 100644 --- a/src/libicalss/icalset.c +++ b/src/libicalss/icalset.c @@ -2,7 +2,7 @@ FILE: icalset.c CREATOR: eric 17 Jul 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom Icalset is the "base class" for representations of a collection of iCal components. Derived classes (actually delegates) include: @@ -12,16 +12,7 @@ icalheapset Store components on the heap icalmysqlset Store components in a mysql database. - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalset.h b/src/libicalss/icalset.h index 23e677d8..00011e35 100644 --- a/src/libicalss/icalset.h +++ b/src/libicalss/icalset.h @@ -14,18 +14,9 @@ /* - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalspanlist.c b/src/libicalss/icalspanlist.c index 9ba02b44..ef3a6c4b 100644 --- a/src/libicalss/icalspanlist.c +++ b/src/libicalss/icalspanlist.c @@ -2,18 +2,10 @@ FILE: icalspanlist.c CREATOR: ebusboom 23 aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/libicalss/icalspanlist.h b/src/libicalss/icalspanlist.h index c5b44cd1..17328a54 100644 --- a/src/libicalss/icalspanlist.h +++ b/src/libicalss/icalspanlist.h @@ -2,18 +2,10 @@ FILE: icalspanlist.h CREATOR: eric 21 Aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ =========================================================================*/ #ifndef ICALSPANLIST_H #define ICALSPANLIST_H diff --git a/src/libicalss/icalspanlist_cxx.cpp b/src/libicalss/icalspanlist_cxx.cpp index 4f72eb50..00967518 100644 --- a/src/libicalss/icalspanlist_cxx.cpp +++ b/src/libicalss/icalspanlist_cxx.cpp @@ -4,18 +4,10 @@ * @brief C++ class wrapping the icalspanlist data structure * - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #include "icalspanlist_cxx.h" diff --git a/src/libicalss/icalspanlist_cxx.h b/src/libicalss/icalspanlist_cxx.h index 1698133e..775a6d9f 100644 --- a/src/libicalss/icalspanlist_cxx.h +++ b/src/libicalss/icalspanlist_cxx.h @@ -3,18 +3,9 @@ * @author Critical Path * @brief C++ class wrapping the icalspanlist data structure * - * (C) COPYRIGHT 2001, Critical Path + * SPDX-FileCopyrightText: 2001, Critical Path * - * This library is free software; you can redistribute it and/or modify - * it under the terms of either: - * - * The LGPL as published by the Free Software Foundation, version - * 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - * - * Or: - * - * The Mozilla Public License Version 2.0. You may obtain a copy of - * the License at https://www.mozilla.org/MPL/ + * SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ #ifndef ICALSPANLIST_CXX_H diff --git a/src/libicalss/icalss_file.cmake b/src/libicalss/icalss_file.cmake index df105627..8983e380 100644 --- a/src/libicalss/icalss_file.cmake +++ b/src/libicalss/icalss_file.cmake @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + # ORDERING OF HEADERS IS SIGNIFICANT. Don't change this ordering. # It is required to make the combined header icalss.h properly. set(COMBINEDHEADERSICALSS diff --git a/src/libicalss/icalsslexer.c b/src/libicalss/icalsslexer.c index 7b17ed5c..e62e51db 100644 --- a/src/libicalss/icalsslexer.c +++ b/src/libicalss/icalsslexer.c @@ -1,4 +1,7 @@ - +/** + SPDX-FileCopyrightText: 1999 Eric Busboom + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ #define YY_INT_ALIGNED short int @@ -535,18 +538,12 @@ char *yytext_ptr; FILE: icalsslexer.l CREATOR: eric 8 Aug 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom This program is free software; you can redistribute it and/or modify - it under the terms of either: - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - Or: - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalsslexer.l b/src/libicalss/icalsslexer.l index 0c2248ec..310406f5 100644 --- a/src/libicalss/icalsslexer.l +++ b/src/libicalss/icalsslexer.l @@ -4,18 +4,9 @@ FILE: icalsslexer.l CREATOR: eric 8 Aug 2000 -(C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This program is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/libicalss/icalssyacc.c b/src/libicalss/icalssyacc.c index 61b1f502..fdbd7ce7 100644 --- a/src/libicalss/icalssyacc.c +++ b/src/libicalss/icalssyacc.c @@ -2,8 +2,8 @@ /* Skeleton implementation for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + SPDX-FileCopyrightText: 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -125,18 +125,12 @@ /* FILE: icalssyacc.y */ /* CREATOR: eric 08 Aug 2000 */ /* */ -/* (C) COPYRIGHT 2000, Eric Busboom */ +/* SPDX-FileCopyrightText: 2000, Eric Busboom */ /* */ /* This program is free software; you can redistribute it and/or modify */ -/* it under the terms of either: */ /* */ -/* The LGPL as published by the Free Software Foundation, version */ -/* 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html */ /* */ -/* Or: */ /* */ -/* The Mozilla Public License Version 2.0. You may obtain a copy of */ -/* the License at https://www.mozilla.org/MPL/ */ /* */ /* The Original Code is eric. The Initial Developer of the Original */ /* Code is Eric Busboom */ diff --git a/src/libicalss/icalssyacc.h b/src/libicalss/icalssyacc.h index f97cc4a7..e8592097 100644 --- a/src/libicalss/icalssyacc.h +++ b/src/libicalss/icalssyacc.h @@ -2,8 +2,8 @@ /* Skeleton interface for Bison's Yacc-like parsers in C - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + SPDX-FileCopyrightText: 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -97,4 +97,3 @@ typedef union YYSTYPE #endif extern YYSTYPE sslval; - diff --git a/src/libicalss/icalssyacc.y b/src/libicalss/icalssyacc.y index eb5a18c4..9b79e6df 100644 --- a/src/libicalss/icalssyacc.y +++ b/src/libicalss/icalssyacc.y @@ -3,18 +3,9 @@ /* FILE: icalssyacc.y */ /* CREATOR: eric 08 Aug 2000 */ /* */ -/* (C) COPYRIGHT 2000, Eric Busboom */ +/* SPDX-FileCopyrightText: 2000, Eric Busboom */ /* */ -/* This program is free software; you can redistribute it and/or modify */ -/* it under the terms of either: */ -/* */ -/* The LGPL as published by the Free Software Foundation, version */ -/* 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html */ -/* */ -/* Or: */ -/* */ -/* The Mozilla Public License Version 2.0. You may obtain a copy of */ -/* the License at https://www.mozilla.org/MPL/ */ +/* SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 */ /* */ /* The Original Code is eric. The Initial Developer of the Original */ /* Code is Eric Busboom */ diff --git a/src/libicalss/libical_icalss_export.h b/src/libicalss/libical_icalss_export.h index 9341ad35..e099c6be 100644 --- a/src/libicalss/libical_icalss_export.h +++ b/src/libicalss/libical_icalss_export.h @@ -1,3 +1,8 @@ +/** + SPDX-FileCopyrightText: Allen Winter + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ + #ifndef LIBICAL_ICALSS_EXPORT_H #define LIBICAL_ICALSS_EXPORT_H diff --git a/src/libicalvcal/CMakeLists.txt b/src/libicalvcal/CMakeLists.txt index 80b98ee0..d9caeaf6 100644 --- a/src/libicalvcal/CMakeLists.txt +++ b/src/libicalvcal/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + add_definitions(-Dlibical_vcal_EXPORTS) include_directories( diff --git a/src/libicalvcal/icalvcal.c b/src/libicalvcal/icalvcal.c index e6df7b29..01c32c6f 100644 --- a/src/libicalvcal/icalvcal.c +++ b/src/libicalvcal/icalvcal.c @@ -2,18 +2,9 @@ FILE: icalvcal.c CREATOR: eric 25 May 00 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original code is icalvcal.c diff --git a/src/libicalvcal/icalvcal.h b/src/libicalvcal/icalvcal.h index 4986d20d..17a8d9b6 100644 --- a/src/libicalvcal/icalvcal.h +++ b/src/libicalvcal/icalvcal.h @@ -2,18 +2,10 @@ FILE: icalvcal.h CREATOR: eric 25 May 00 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef ICALVCAL_H diff --git a/src/libicalvcal/libical_vcal_export.h b/src/libicalvcal/libical_vcal_export.h index 0c744759..3404c28e 100644 --- a/src/libicalvcal/libical_vcal_export.h +++ b/src/libicalvcal/libical_vcal_export.h @@ -1,4 +1,9 @@ +/** + SPDX-FileCopyrightText: Allen Winter + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +*/ #ifndef LIBICAL_VCAL_EXPORT_H + #define LIBICAL_VCAL_EXPORT_H #if !defined(S_SPLINT_S) diff --git a/src/libicalvcal/vcaltmp.c b/src/libicalvcal/vcaltmp.c index 2562665d..4cbabeed 100644 --- a/src/libicalvcal/vcaltmp.c +++ b/src/libicalvcal/vcaltmp.c @@ -14,36 +14,10 @@ Note on APIs: */ /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in @@ -76,7 +50,6 @@ VObject* vcsCreateVCal( return vcal; } - VObject* vcsAddEvent( VObject *vcal, char *start_date_time, @@ -111,7 +84,6 @@ VObject* vcsAddEvent( return vevent; } - VObject* vcsAddTodo( VObject *vcal, char *start_date_time, @@ -146,7 +118,6 @@ VObject* vcsAddTodo( return vtodo; } - VObject* vcsAddAAlarm( VObject *vevent, char *run_time, @@ -165,7 +136,6 @@ VObject* vcsAddAAlarm( return aalarm; } - VObject* vcsAddMAlarm( VObject *vevent, char *run_time, @@ -186,7 +156,6 @@ VObject* vcsAddMAlarm( return malarm; } - VObject* vcsAddDAlarm( VObject *vevent, char *run_time, @@ -205,7 +174,6 @@ VObject* vcsAddDAlarm( return dalarm; } - VObject* vcsAddPAlarm( VObject *vevent, char *run_time, @@ -224,7 +192,6 @@ VObject* vcsAddPAlarm( return palarm; } - #ifdef _TEST #if 0 @@ -333,5 +300,4 @@ void main() { #endif - /* end of source file vcaltmp.c */ diff --git a/src/libicalvcal/vcaltmp.h b/src/libicalvcal/vcaltmp.h index 4c1fe11e..69f9e82b 100644 --- a/src/libicalvcal/vcaltmp.h +++ b/src/libicalvcal/vcaltmp.h @@ -1,34 +1,8 @@ /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in diff --git a/src/libicalvcal/vcc.c b/src/libicalvcal/vcc.c index b1500f3f..41daa87a 100644 --- a/src/libicalvcal/vcc.c +++ b/src/libicalvcal/vcc.c @@ -100,36 +100,10 @@ #line 2 "vcc.y" /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in @@ -147,7 +121,6 @@ DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. * be fixed in vcc.y and this file regenerated. */ - /* debugging utilities */ #ifdef __DEBUG #define DBG_(x) printf x @@ -191,7 +164,6 @@ DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. #define yyrule mime_rule #define YYPREFIX "mime_" - #ifndef _NO_LINE_FOLDING #define _SUPPORT_LINE_FOLDING 1 #endif @@ -220,7 +192,6 @@ DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. #define MAXLEVEL 10 /* max # of nested objects parseable */ /* (includes outermost) */ - /**** Global Variables ****/ int mime_lineNum, mime_numErrors; /* yyerror() can use these */ static VObject* vObjList; @@ -229,7 +200,6 @@ static VObject *curObj; static VObject* ObjStack[MAXLEVEL]; static int ObjStackTop; - /* A helpful utility for the rest of the app. */ #if defined(__CPLUSPLUS__) extern "C" { @@ -579,7 +549,6 @@ static int pushVObject(const char *prop) return 1; /*TRUE*/ } - /* This pops the recently built vCard off the stack and returns it. */ static VObject* popVObject() { @@ -594,7 +563,6 @@ static VObject* popVObject() return oldObj; } - static void enterValues(const char *value) { if (fieldedProp && *fieldedProp) { @@ -656,7 +624,6 @@ static void enterAttr(const char *s1, const char *s2) deleteStr(s1); deleteStr(s2); } - #define MAX_LEX_LOOKAHEAD_0 32 #define MAX_LEX_LOOKAHEAD 64 #define MAX_LEX_MODE_STACK_SIZE 10 @@ -946,7 +913,6 @@ static char* lexGet1Value() { } #endif - static int match_begin_name(int end) { char *n = lexLookaheadWord(); int token = ID; @@ -961,7 +927,6 @@ static int match_begin_name(int end) { return 0; } - #ifdef INCLUDEMFC void initLex(const char *inputstring, unsigned long inputlen, CFile *inputfile) #else @@ -983,7 +948,6 @@ void initLex(const char *inputstring, unsigned long inputlen, FILE *inputfile) lexBuf.maxToken = MAXTOKEN; lexBuf.strs = (char*)malloc(MAXTOKEN); lexBuf.strsLen = 0; - } static void finiLex() { @@ -996,7 +960,6 @@ static void finiLex() { free(lexBuf.strs); } - /* This parses and converts the base64 format for binary encoding into * a decoded buffer (allocated with new). See RFC 1521. */ @@ -1292,7 +1255,6 @@ int yylex() { return 0; } - /***************************************************************************/ /*** Public Functions ****/ /***************************************************************************/ @@ -1321,7 +1283,6 @@ VObject* Parse_MIME(const char *input, unsigned long len) return Parse_MIMEHelper(); } - #ifdef INCLUDEMFC VObject* Parse_MIME_FromFile(CFile *file) @@ -1370,7 +1331,6 @@ VObject* Parse_MIME_FromFileName(const char *fname) #endif - static MimeErrorHandler mimeErrorHandler; void registerMimeErrorHandler(MimeErrorHandler me) @@ -1667,7 +1627,6 @@ case 23: #line 306 "vcc.y" { enterAttr(yystack.l_mark[-2].str,yystack.l_mark[0].str); - } break; case 25: diff --git a/src/libicalvcal/vcc.h b/src/libicalvcal/vcc.h index 5baf3115..d3a1f163 100644 --- a/src/libicalvcal/vcc.h +++ b/src/libicalvcal/vcc.h @@ -1,34 +1,8 @@ /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in diff --git a/src/libicalvcal/vcc.y b/src/libicalvcal/vcc.y index 73f87632..b4c81760 100644 --- a/src/libicalvcal/vcc.y +++ b/src/libicalvcal/vcc.y @@ -1,36 +1,10 @@ %{ /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in diff --git a/src/libicalvcal/vobject.c b/src/libicalvcal/vobject.c index 10d0cf5a..9b2484fe 100644 --- a/src/libicalvcal/vobject.c +++ b/src/libicalvcal/vobject.c @@ -1,34 +1,8 @@ /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in @@ -84,8 +58,6 @@ struct StrItem { const char** fieldedProp; - - /*---------------------------------------------------------------------- The following functions involve with memory allocation: newVObject @@ -144,7 +116,6 @@ void deleteStr(const char *p) free((void*)p); } - static StrItem* newStrItem(const char *s, StrItem *next) { StrItem *p = (StrItem*)malloc(sizeof(StrItem)); @@ -160,7 +131,6 @@ static void deleteStrItem(StrItem *p) free((void*)p); } - /*---------------------------------------------------------------------- The following function provide accesses to VObject's value. ----------------------------------------------------------------------*/ @@ -259,7 +229,6 @@ int vObjectValueType(VObject *o) return (int)VALUE_TYPE(o); } - /*---------------------------------------------------------------------- The following functions can be used to build VObject. ----------------------------------------------------------------------*/ @@ -457,8 +426,6 @@ VObject* addPropSizedValue(VObject *o, const char *p, const char *v, return addPropSizedValue_(o,p,dupStr(v,size),size); } - - /*---------------------------------------------------------------------- The following pretty print a VObject ----------------------------------------------------------------------*/ @@ -698,7 +665,6 @@ void cleanStrTbl() } } - struct PreDefProp { const char *name; const char *alias; @@ -937,7 +903,6 @@ static const struct PreDefProp propNames[] = { { 0,0,0,0 } }; - static const struct PreDefProp* lookupPropInfo(const char* str) { /* brute force for now, could use a hash table here. */ @@ -951,7 +916,6 @@ static const struct PreDefProp* lookupPropInfo(const char* str) return 0; } - const char* lookupProp_(const char* str) { int i; @@ -965,7 +929,6 @@ const char* lookupProp_(const char* str) return lookupStr(str); } - const char* lookupProp(const char* str) { int i; @@ -981,7 +944,6 @@ const char* lookupProp(const char* str) return lookupStr(str); } - /*---------------------------------------------------------------------- APIs to Output text form. ----------------------------------------------------------------------*/ @@ -1116,7 +1078,6 @@ static void initMemOFile(OFile *fp, char *s, int len) fp->fail = 0; } - static int writeBase64(OFile *fp, unsigned char *s, long len) { long cur = 0; @@ -1190,8 +1151,6 @@ static void writeQPString(OFile *fp, const char *s) } } - - static void writeVObject_(OFile *fp, VObject *o); static void writeValue(OFile *fp, VObject *o, unsigned long size,int quote) diff --git a/src/libicalvcal/vobject.h b/src/libicalvcal/vobject.h index 7541be58..72cbc58f 100644 --- a/src/libicalvcal/vobject.h +++ b/src/libicalvcal/vobject.h @@ -1,34 +1,8 @@ /*************************************************************************** -(C) Copyright 1996 Apple Computer, Inc., AT&T Corp., International +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International Business Machines Corporation and Siemens Rolm Communications Inc. -For purposes of this license notice, the term Licensors shall mean, -collectively, Apple Computer, Inc., AT&T Corp., International -Business Machines Corporation and Siemens Rolm Communications Inc. -The term Licensor shall mean any of the Licensors. - -Subject to acceptance of the following conditions, permission is hereby -granted by Licensors without the need for written agreement and without -license or royalty fees, to use, copy, modify and distribute this -software for any purpose. - -The above copyright notice and the following four paragraphs must be -reproduced in all copies of this software and any software including -this software. - -THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS AND NO LICENSOR SHALL HAVE -ANY OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS OR -MODIFICATIONS. - -IN NO EVENT SHALL ANY LICENSOR BE LIABLE TO ANY PARTY FOR DIRECT, -INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT -OF THE USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. - -EACH LICENSOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO ANY WARRANTY OF NONINFRINGEMENT OR THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. +SPDX-License-Identifier: LicenseRef-APPLEMIT The software is provided with RESTRICTED RIGHTS. Use, duplication, or disclosure by the government are subject to restrictions set forth in diff --git a/src/python/Attendee.py b/src/python/Attendee.py index ed6fde46..349433f1 100644 --- a/src/python/Attendee.py +++ b/src/python/Attendee.py @@ -3,31 +3,19 @@ # FILE: Property.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index a5a593c3..24b9ba71 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + include_directories( ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/libical @@ -21,4 +24,3 @@ set_target_properties(LibicalWrap PROPERTIES install(TARGETS LibicalWrap DESTINATION lib) ########### install files ############### - diff --git a/src/python/Collection.py b/src/python/Collection.py index 15ae8b7e..1e911dc9 100644 --- a/src/python/Collection.py +++ b/src/python/Collection.py @@ -3,19 +3,13 @@ # FILE: Collection.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from types import * diff --git a/src/python/Component.py b/src/python/Component.py index 598e4977..91043905 100644 --- a/src/python/Component.py +++ b/src/python/Component.py @@ -3,30 +3,10 @@ # FILE: Component.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt -# -# Or: -# -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ - -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: -# -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html -# -# Or: -# -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 #====================================================================== from LibicalWrap import * diff --git a/src/python/DerivedProperties.py b/src/python/DerivedProperties.py index 3a64f96f..879163d5 100644 --- a/src/python/DerivedProperties.py +++ b/src/python/DerivedProperties.py @@ -3,19 +3,13 @@ # FILE: DerivedProperties.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from Property import Property diff --git a/src/python/Duration.py b/src/python/Duration.py index 8997f59d..95260e03 100644 --- a/src/python/Duration.py +++ b/src/python/Duration.py @@ -3,19 +3,13 @@ # FILE: Duration.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #=============================================================== from LibicalWrap import * diff --git a/src/python/Error.py b/src/python/Error.py index 47fa0e7a..9104344b 100644 --- a/src/python/Error.py +++ b/src/python/Error.py @@ -2,31 +2,19 @@ # FILE: Error.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #=========================================================== class LibicalError(Exception): diff --git a/src/python/Gauge.py b/src/python/Gauge.py index 44954006..abfa1c77 100644 --- a/src/python/Gauge.py +++ b/src/python/Gauge.py @@ -3,19 +3,13 @@ # FILE: Gauge.py # CREATOR: mtearle # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * diff --git a/src/python/Libical.py b/src/python/Libical.py index 20a2b975..ff4d7e18 100644 --- a/src/python/Libical.py +++ b/src/python/Libical.py @@ -3,19 +3,13 @@ # FILE: Libical.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import ICAL_PACKAGE, ICAL_VERSION diff --git a/src/python/LibicalWrap.i b/src/python/LibicalWrap.i index 070a6d5b..a0970428 100644 --- a/src/python/LibicalWrap.i +++ b/src/python/LibicalWrap.i @@ -2,17 +2,9 @@ /*====================================================================== FILE: ical.i - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - https://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom diff --git a/src/python/LibicalWrap_icaltime.i b/src/python/LibicalWrap_icaltime.i index f82a7706..ada94293 100644 --- a/src/python/LibicalWrap_icaltime.i +++ b/src/python/LibicalWrap_icaltime.i @@ -2,17 +2,9 @@ /*====================================================================== FILE: LibicalWrap_icaltime.i - (C) COPYRIGHT 2010 Glenn Washburn + SPDX-FileCopyrightText: 2010 Glenn Washburn - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - https://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Glenn Washburn (crass@berlios.de) @@ -193,4 +185,3 @@ _swig_set_properties(icaltimetype, icaltimetype_props) %} // TODO: Add icaltime_span_* to icaltime_spantype - diff --git a/src/python/LibicalWrap_icaltimezone.i b/src/python/LibicalWrap_icaltimezone.i index 320369cd..68f25219 100644 --- a/src/python/LibicalWrap_icaltimezone.i +++ b/src/python/LibicalWrap_icaltimezone.i @@ -2,17 +2,9 @@ /*====================================================================== FILE: LibicalWrap_icaltimezone.i - (C) COPYRIGHT 2010 Glenn Washburn + SPDX-FileCopyrightText: 2010 Glenn Washburn - The contents of this file are subject to the Mozilla Public License - Version 1.0 (the "License"); you may not use this file except in - compliance with the License. You may obtain a copy of the License at - https://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" - basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See - the License for the specific language governing rights and - limitations under the License. + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Glenn Washburn (crass@berlios.de) diff --git a/src/python/Period.py b/src/python/Period.py index 60c2f304..c5ed6b20 100644 --- a/src/python/Period.py +++ b/src/python/Period.py @@ -3,19 +3,13 @@ # FILE: Period.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #=========================================================== from LibicalWrap import * diff --git a/src/python/Property.py b/src/python/Property.py index 430b37aa..4d060e14 100644 --- a/src/python/Property.py +++ b/src/python/Property.py @@ -3,19 +3,13 @@ # FILE: Property.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * diff --git a/src/python/Store.py b/src/python/Store.py index 8c6662a2..de47289a 100644 --- a/src/python/Store.py +++ b/src/python/Store.py @@ -3,19 +3,13 @@ # FILE: Store.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * diff --git a/src/python/Time.py b/src/python/Time.py index f94770ce..1d20b8bd 100644 --- a/src/python/Time.py +++ b/src/python/Time.py @@ -3,19 +3,13 @@ # FILE: Time.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from LibicalWrap import * diff --git a/src/python/__init__.py b/src/python/__init__.py index 0f399441..1fdaee4b 100644 --- a/src/python/__init__.py +++ b/src/python/__init__.py @@ -3,19 +3,13 @@ # FILE: __init__.py # CREATOR: glenn # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== from Libical import * diff --git a/src/python/test.py b/src/python/test.py index 2de1fe61..cb4e83ad 100644 --- a/src/python/test.py +++ b/src/python/test.py @@ -3,19 +3,13 @@ # FILE: test.py # CREATOR: eric # -# (C) COPYRIGHT 2001, Eric Busboom -# (C) COPYRIGHT 2001, Patrick Lewis +# SPDX-FileCopyrightText: 2001, Eric Busboom +# SPDX-FileCopyrightText: 2001, Patrick Lewis # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ #====================================================================== import LibicalWrap diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index 77b85a9a..fa0bcf9b 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src diff --git a/src/test/builtin_timezones.c b/src/test/builtin_timezones.c index 3ceb462d..334b683a 100644 --- a/src/test/builtin_timezones.c +++ b/src/test/builtin_timezones.c @@ -2,18 +2,10 @@ FILE: builtin_timezones.c CREATOR: Milan Crha 26 November 2014 - (C) COPYRIGHT 2014 Milan Crha + SPDX-FileCopyrightText: 2014 Milan Crha - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/test/copycluster.c b/src/test/copycluster.c index 282d0fc4..05961252 100644 --- a/src/test/copycluster.c +++ b/src/test/copycluster.c @@ -2,18 +2,9 @@ FILE: copycluster.c CREATOR: eric 15 January 2000 - (C) COPYRIGHT 2000 Eric Busboom + SPDX-FileCopyrightText: 2000 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/test/icalattach-leak.c b/src/test/icalattach-leak.c index d91aa398..209bcba5 100644 --- a/src/test/icalattach-leak.c +++ b/src/test/icalattach-leak.c @@ -1,18 +1,9 @@ /*====================================================================== FILE: icalattach-leak.c - Copyright (C) 2019 Red Hat, Inc. + SPDX-FileCopyrightText: 2019 Red Hat, Inc. - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Milan Crha ======================================================================*/ diff --git a/src/test/icalrecur_test.c b/src/test/icalrecur_test.c index d070d040..a236848d 100644 --- a/src/test/icalrecur_test.c +++ b/src/test/icalrecur_test.c @@ -2,18 +2,10 @@ FILE: icalrecur_test.c CREATOR: Ken Murchison 26 September 2014 - (C) COPYRIGHT 2000 Eric Busboom + SPDX-FileCopyrightText: 2000 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ /* diff --git a/src/test/icaltestparser.c b/src/test/icaltestparser.c index c301a74f..c3a27abf 100644 --- a/src/test/icaltestparser.c +++ b/src/test/icaltestparser.c @@ -2,18 +2,9 @@ FILE: icaltestparser.c CREATOR: eric 20 June 1999 - (C) COPYRIGHT 1999 The Software Studio + SPDX-FileCopyrightText: 1999 The Software Studio - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom ======================================================================*/ diff --git a/src/test/icaltm_test.c b/src/test/icaltm_test.c index 141d49e4..b3ccad34 100644 --- a/src/test/icaltm_test.c +++ b/src/test/icaltm_test.c @@ -1,18 +1,9 @@ /*====================================================================== FILE: icaltm_test.c - Copyright (C) 2017 Red Hat, Inc. + SPDX-FileCopyrightText: 2017 Red Hat, Inc. - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Milan Crha ======================================================================*/ diff --git a/src/test/libical-glib/CMakeLists.txt b/src/test/libical-glib/CMakeLists.txt index e0f14b14..2f88b115 100644 --- a/src/test/libical-glib/CMakeLists.txt +++ b/src/test/libical-glib/CMakeLists.txt @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Milan Crha +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + find_program(PYTHON3 python3) set_package_properties(PYTHON3 PROPERTIES TYPE REQUIRED PURPOSE "Required by the libical build system.") add_feature_info("libical-glib testing" PYTHON3 "python3 is required to run the regression tests") diff --git a/src/test/libical-glib/array.py b/src/test/libical-glib/array.py old mode 100755 new mode 100644 index 77d9550a..da3b26b2 --- a/src/test/libical-glib/array.py +++ b/src/test/libical-glib/array.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/attach.py b/src/test/libical-glib/attach.py old mode 100755 new mode 100644 index 4a5492ac..7bcb5583 --- a/src/test/libical-glib/attach.py +++ b/src/test/libical-glib/attach.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/component.py b/src/test/libical-glib/component.py old mode 100755 new mode 100644 index cc6cfa6a..13d6b104 --- a/src/test/libical-glib/component.py +++ b/src/test/libical-glib/component.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/comprehensive.py b/src/test/libical-glib/comprehensive.py old mode 100755 new mode 100644 index 94fdfb6f..4f3fe629 --- a/src/test/libical-glib/comprehensive.py +++ b/src/test/libical-glib/comprehensive.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/duration.py b/src/test/libical-glib/duration.py old mode 100755 new mode 100644 index 114970ad..b6a1ac78 --- a/src/test/libical-glib/duration.py +++ b/src/test/libical-glib/duration.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/error.py b/src/test/libical-glib/error.py old mode 100755 new mode 100644 index e501a984..e64de32a --- a/src/test/libical-glib/error.py +++ b/src/test/libical-glib/error.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/misc.py b/src/test/libical-glib/misc.py old mode 100755 new mode 100644 index d10648b8..2cb59d44 --- a/src/test/libical-glib/misc.py +++ b/src/test/libical-glib/misc.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2019 Red Hat Inc. +# SPDX-FileCopyrightText: 2019 Red Hat Inc. # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/parameter.py b/src/test/libical-glib/parameter.py old mode 100755 new mode 100644 index 5a0c6230..33cea40a --- a/src/test/libical-glib/parameter.py +++ b/src/test/libical-glib/parameter.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/period.py b/src/test/libical-glib/period.py old mode 100755 new mode 100644 index bcc49706..1791a34d --- a/src/test/libical-glib/period.py +++ b/src/test/libical-glib/period.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/property.py b/src/test/libical-glib/property.py old mode 100755 new mode 100644 index 23de9b5d..ee78467e --- a/src/test/libical-glib/property.py +++ b/src/test/libical-glib/property.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/recurrence.py b/src/test/libical-glib/recurrence.py old mode 100755 new mode 100644 index c136224b..d00910ff --- a/src/test/libical-glib/recurrence.py +++ b/src/test/libical-glib/recurrence.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/timezone.py b/src/test/libical-glib/timezone.py old mode 100755 new mode 100644 index ec027a1b..88fb6b01 --- a/src/test/libical-glib/timezone.py +++ b/src/test/libical-glib/timezone.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/libical-glib/value.py b/src/test/libical-glib/value.py old mode 100755 new mode 100644 index 7be64644..0cebbb7b --- a/src/test/libical-glib/value.py +++ b/src/test/libical-glib/value.py @@ -3,18 +3,12 @@ ############################################################################### # -# Copyright (C) 2015 William Yu +# SPDX-FileCopyrightText: 2015 William Yu # -# This library is free software; you can redistribute it and/or modify -# it under the terms of either: +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 # -# The LGPL as published by the Free Software Foundation, version -# 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.txt # -# Or: # -# The Mozilla Public License Version 2.0. You may obtain a copy of -# the License at https://www.mozilla.org/MPL/ # ############################################################################### diff --git a/src/test/process.c b/src/test/process.c index db609b27..f2816154 100644 --- a/src/test/process.c +++ b/src/test/process.c @@ -2,18 +2,10 @@ FILE: process.c CREATOR: eric 11 February 2000 - (C) COPYRIGHT 2000 Eric Busboom + SPDX-FileCopyrightText: 2000 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/test/recur.c b/src/test/recur.c index 80f4a2b9..014ede09 100644 --- a/src/test/recur.c +++ b/src/test/recur.c @@ -2,7 +2,7 @@ FILE: recur.c CREATOR: ebusboom 8jun00 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom DESCRIPTION: @@ -10,16 +10,8 @@ ./recur ../../test-data/recur.txt - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/test/regression-classify.c b/src/test/regression-classify.c index 7e5d4aa7..a5f3af0c 100644 --- a/src/test/regression-classify.c +++ b/src/test/regression-classify.c @@ -1,18 +1,10 @@ /*====================================================================== FILE: regression-classify.c - Copyright (C) 2002 Paul Lindner + SPDX-FileCopyrightText: 2002 Paul Lindner - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/test/regression-component.c b/src/test/regression-component.c index 9366ccdc..388c53a4 100644 --- a/src/test/regression-component.c +++ b/src/test/regression-component.c @@ -1,18 +1,9 @@ /*====================================================================== FILE: regression-component.c - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom ======================================================================*/ diff --git a/src/test/regression-cxx.cpp b/src/test/regression-cxx.cpp index 6bb33b3a..dbe3ae49 100644 --- a/src/test/regression-cxx.cpp +++ b/src/test/regression-cxx.cpp @@ -1,16 +1,8 @@ /** - (C) COPYRIGHT 2001, Critical Path + SPDX-FileCopyrightText: 2001, Critical Path - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ */ #ifdef HAVE_CONFIG_H diff --git a/src/test/regression-recur.c b/src/test/regression-recur.c index 4c3a7c6a..dee65679 100644 --- a/src/test/regression-recur.c +++ b/src/test/regression-recur.c @@ -2,20 +2,12 @@ FILE: regression-recur.c CREATOR: ebusboom 8jun00 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom DESCRIPTION: - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/test/regression-storage.c b/src/test/regression-storage.c index f8cd11e1..b3c1f98d 100644 --- a/src/test/regression-storage.c +++ b/src/test/regression-storage.c @@ -2,20 +2,11 @@ FILE: regression-storage.c CREATOR: eric 03 April 1999 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom DESCRIPTION: - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom The original code is usecases.c diff --git a/src/test/regression-utils.c b/src/test/regression-utils.c index 5673e948..3536f0ad 100644 --- a/src/test/regression-utils.c +++ b/src/test/regression-utils.c @@ -1,18 +1,9 @@ /*====================================================================== FILE: regression-utils.c - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom ======================================================================*/ diff --git a/src/test/regression.c b/src/test/regression.c index bced17ab..d52474f0 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -2,18 +2,9 @@ FILE: regression.c CREATOR: eric 03 April 1999 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The original author is Eric Busboom The original code is regression.c @@ -2734,13 +2725,11 @@ void test_recur_parser() icalmemory_free_buffer(v); } - static int test_juldat_caldat_instance(long year, int month, int day) { struct icaltimetype t; struct ut_instant originalInstant; - memset(&t, 0, sizeof(t)); t.year = year; t.month = month; @@ -2817,7 +2806,6 @@ void test_juldat_caldat() { ok("juldat and caldat return the expected values for random input values", failed == 0); } - char *ical_strstr(const char *haystack, const char *needle) { return strstr(haystack, needle); @@ -5055,7 +5043,6 @@ static void test_implicit_dtend_duration(void) int_is("icaltime_compare(start, end)", 0, icaltime_compare(start, end)); icalcomponent_free(c); - c = icalcomponent_vanew( ICAL_VCALENDAR_COMPONENT, icalcomponent_vanew( diff --git a/src/test/regression.h b/src/test/regression.h index 100dab00..55531793 100644 --- a/src/test/regression.h +++ b/src/test/regression.h @@ -2,18 +2,10 @@ FILE: regression.c CREATOR: eric 03 April 1999 - (C) COPYRIGHT 1999 Eric Busboom + SPDX-FileCopyrightText: 1999 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef TEST_REGRESSION_H #define TEST_REGRESSION_H diff --git a/src/test/stow.c b/src/test/stow.c index 0b98126e..00b07d11 100644 --- a/src/test/stow.c +++ b/src/test/stow.c @@ -2,18 +2,9 @@ FILE: stow.c CREATOR: eric 29 April 2000 - (C) COPYRIGHT 2000 Eric Busboom + SPDX-FileCopyrightText: 2000 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ diff --git a/src/test/test-malloc.c b/src/test/test-malloc.c index 5296369f..d9c46995 100644 --- a/src/test/test-malloc.c +++ b/src/test/test-malloc.c @@ -1,18 +1,10 @@ /*====================================================================== FILE: test-malloc.c -(C) COPYRIGHT 2018-2022, Markus Minichmayr +SPDX-FileCopyrightText: 2018-2022, Markus Minichmayr - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifdef HAVE_CONFIG_H diff --git a/src/test/test-malloc.h b/src/test/test-malloc.h index a68df8aa..04858bae 100644 --- a/src/test/test-malloc.h +++ b/src/test/test-malloc.h @@ -1,18 +1,10 @@ /*====================================================================== FILE: test-malloc.h -(C) COPYRIGHT 2018-2022, Markus Minichmayr +SPDX-FileCopyrightText: 2018-2022, Markus Minichmayr - This library is free software; you can redistribute it and/or modify - it under the terms of either: + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ ======================================================================*/ #ifndef TESTMALLOC_H diff --git a/src/test/testmime.c b/src/test/testmime.c index e0c53ea9..df904868 100644 --- a/src/test/testmime.c +++ b/src/test/testmime.c @@ -2,18 +2,9 @@ FILE: CREATOR: eric 25 June 2000 - (C) COPYRIGHT 2000, Eric Busboom + SPDX-FileCopyrightText: 2000, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Initial Developer of the Original Code is Eric Busboom ======================================================================*/ diff --git a/src/test/testvcal.c b/src/test/testvcal.c index 96650f44..f38df8a8 100644 --- a/src/test/testvcal.c +++ b/src/test/testvcal.c @@ -2,18 +2,9 @@ FILE: testvcal.c CREATOR: eric 26 May 2000 - (C) COPYRIGHT 2000 Eric Busboom + SPDX-FileCopyrightText: 2000 Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 The Original Code is eric. The Initial Developer of the Original Code is Eric Busboom diff --git a/src/test/timezones.c b/src/test/timezones.c index 3018802b..0285e3b5 100644 --- a/src/test/timezones.c +++ b/src/test/timezones.c @@ -1,18 +1,9 @@ /* ====================================================================== - (C) COPYRIGHT 2008, Eric Busboom + SPDX-FileCopyrightText: 2008, Eric Busboom - This library is free software; you can redistribute it and/or modify - it under the terms of either: - - The LGPL as published by the Free Software Foundation, version - 2.1, available at: https://www.gnu.org/licenses/lgpl-2.1.html - - Or: - - The Mozilla Public License Version 2.0. You may obtain a copy of - the License at https://www.mozilla.org/MPL/ + SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ======================================================================*/ diff --git a/test-data/CMakeLists.txt b/test-data/CMakeLists.txt index 0b7b3433..b650e8dc 100644 --- a/test-data/CMakeLists.txt +++ b/test-data/CMakeLists.txt @@ -1,3 +1,4 @@ +# SPDX-FileCopyrightText: Allen Winter +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 ########### install files ############### - -- cgit v1.2.1 From 3396cf5a3d2a4a40292a76e758bc6f55cb567528 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Mon, 6 Jun 2022 19:15:54 -0400 Subject: consider libical-glib as stable now fixes: #574 --- README.md | 5 ----- ReleaseNotes.txt | 2 ++ src/libical-glib/tools/header-header-template | 4 ---- src/test/icalattach-leak.c | 2 -- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2b7edb2b..46699a3d 100644 --- a/README.md +++ b/README.md @@ -31,11 +31,6 @@ plus the iCalendar iMIP protocol in [RFC6047][]. [RFC9073]: https://tools.ietf.org/html/rfc9073 [RFC9074]: https://tools.ietf.org/html/rfc9074 -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 ``, 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 diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index a2a6be01..ca8644e3 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -34,6 +34,8 @@ Version 3.1.0 (NOT RELEASED YET): * ical_set_invalid_rrule_handling_setting * ical_get_invalid_rrule_handling_setting * icaltzutil_get_zone_directory() can use the TZDIR environment to find system zoneinfo + * libical-glib API is considered stable; no longer need to define LIBICAL_GLIB_UNSTABLE_API=1 + before including . * Deprecated functions: + caldat (replaced by internal function icaldat_int()) + juldat (replaced by internal function juldat_int()) diff --git a/src/libical-glib/tools/header-header-template b/src/libical-glib/tools/header-header-template index cab23f9f..b19012c2 100644 --- a/src/libical-glib/tools/header-header-template +++ b/src/libical-glib/tools/header-header-template @@ -11,10 +11,6 @@ #include -#if !defined(LIBICAL_GLIB_UNSTABLE_API) && !defined(LIBICAL_GLIB_COMPILATION) -#error "Define LIBICAL_GLIB_UNSTABLE_API, to indicate it's understood the libical-glib API is currently unstable" -#endif - #define __LIBICAL_GLIB_H_INSIDE__ #include diff --git a/src/test/icalattach-leak.c b/src/test/icalattach-leak.c index 209bcba5..3740742c 100644 --- a/src/test/icalattach-leak.c +++ b/src/test/icalattach-leak.c @@ -14,9 +14,7 @@ #include -#define LIBICAL_GLIB_UNSTABLE_API #include "libical-glib/libical-glib.h" -#undef LIBICAL_GLIB_UNSTABLE_API static GSList *get_attachments(ICalComponent *comp) { -- cgit v1.2.1 From 98780805c4e1a520d42a0ad4046cd76f84c17909 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Tue, 7 Jun 2022 13:29:41 -0400 Subject: buildsystem - full cmake-lint coverage --- .pre-commit-config.yaml | 2 +- cmake/modules/FindBerkeleyDB.cmake | 186 ++++++++++++++++++------------------- src/libical-glib/CMakeLists.txt | 29 ++++-- src/libical/CMakeLists.txt | 9 ++ src/libicalss/CMakeLists.txt | 2 + 5 files changed, 128 insertions(+), 100 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 10311ce7..4dc2a89c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -26,7 +26,7 @@ repos: rev: v0.6.13 hooks: - id: cmake-lint - exclude: cmake/Toolchain-*|config.h.cmake + exclude: (cmake/Toolchain-|.h.cmake|/Doxyfile.cmake) - repo: https://github.com/markdownlint/markdownlint rev: v0.11.0 hooks: diff --git a/cmake/modules/FindBerkeleyDB.cmake b/cmake/modules/FindBerkeleyDB.cmake index 8a818465..63ffe9dc 100644 --- a/cmake/modules/FindBerkeleyDB.cmake +++ b/cmake/modules/FindBerkeleyDB.cmake @@ -26,64 +26,63 @@ endif() # Allow user to pass a path instead of guessing if(BerkeleyDB_ROOT_DIR) - set(_BERKELEYDB_PATHS "${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() + # 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" - ) + # 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" + 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}") + # 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") + 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.") + 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) @@ -91,33 +90,34 @@ set(BerkeleyDB_VERSION "${BerkeleyDB_VERSION_MAJOR}.${BerkeleyDB_VERSION_MINOR}. set(BerkeleyDB_LIBRARIES "") # 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() +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 @@ -132,37 +132,37 @@ findpackage_berkeleydb_get_lib(BerkeleyDB_Stl_LIBRARY "db_stl") 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 + 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}" - ) + 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 + 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}]]" + "Found BerkeleyDB libraries: ${BerkeleyDB_LIBRARIES}" + "[${BerkeleyDB_LIBRARIES}[${BerkeleyDB_INCLUDE_DIRS}]]" ) diff --git a/src/libical-glib/CMakeLists.txt b/src/libical-glib/CMakeLists.txt index 2c14a560..967b4b98 100644 --- a/src/libical-glib/CMakeLists.txt +++ b/src/libical-glib/CMakeLists.txt @@ -92,9 +92,14 @@ else() endif() add_custom_command ( - OUTPUT ${LIBICAL_GLIB_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/libical-glib-private.h ${CMAKE_CURRENT_BINARY_DIR}/i-cal-forward-declarations.h - COMMAND ${ical-glib-src-generator_EXE} "${CMAKE_CURRENT_SOURCE_DIR}/tools" "${CMAKE_CURRENT_SOURCE_DIR}/api" + OUTPUT + ${LIBICAL_GLIB_SOURCES} + ${CMAKE_CURRENT_BINARY_DIR}/libical-glib-private.h + ${CMAKE_CURRENT_BINARY_DIR}/i-cal-forward-declarations.h + COMMAND + ${ical-glib-src-generator_EXE} "${CMAKE_CURRENT_SOURCE_DIR}/tools" "${CMAKE_CURRENT_SOURCE_DIR}/api" DEPENDS ${ical-glib-src-generator_EXE} ${xml_files} + COMMENT "Generate libical-glib headers" ) configure_file( @@ -131,7 +136,11 @@ target_link_libraries(ical-glib PRIVATE ical ${GLIB_LIBRARIES}) if(NOT SHARED_ONLY AND NOT STATIC_ONLY) add_library(ical-glib-static STATIC ${LIBICAL_GLIB_SOURCES}) add_dependencies(ical-glib-static ical-header) - target_compile_options(ical-glib-static PUBLIC ${GLIB_CFLAGS} -DG_LOG_DOMAIN="libical-glib" -DLIBICAL_GLIB_COMPILATION) + target_compile_options(ical-glib-static + PUBLIC ${GLIB_CFLAGS} + -DG_LOG_DOMAIN="libical-glib" + -DLIBICAL_GLIB_COMPILATION + ) target_link_libraries(ical-glib-static ${GLIB_LIBRARIES}) endif() @@ -179,7 +188,14 @@ if(HAVE_INTROSPECTION) set(ICalGLib_${LIB_VERSION}_gir_VERSION ${LIBICAL_GLIB_GIR_VERSION_STRING}) set(ICalGLib_${LIB_VERSION}_gir_LIBRARY "ICalGLib") set(ICalGLib_${LIB_VERSION}_gir_INCLUDES GObject-2.0 GLib-2.0) - set(ICalGLib_${LIB_VERSION}_gir_CFLAGS ${GLIB_CFLAGS} -DLIBICAL_GLIB_COMPILATION -I${CMAKE_CURRENT_BINARY_DIR} -I${CMAKE_CURRENT_SOURCE_DIR} -I${CMAKE_BINARY_DIR}/src/libical -I${CMAKE_SOURCE_DIR}/src/libical -I${CMAKE_BINARY_DIR}/src/libical-glib) + set(ICalGLib_${LIB_VERSION}_gir_CFLAGS ${GLIB_CFLAGS} + -DLIBICAL_GLIB_COMPILATION + -I${CMAKE_CURRENT_BINARY_DIR} + -I${CMAKE_CURRENT_SOURCE_DIR} + -I${CMAKE_BINARY_DIR}/src/libical + -I${CMAKE_SOURCE_DIR}/src/libical + -I${CMAKE_BINARY_DIR}/src/libical-glib + ) set(ICalGLib_${LIB_VERSION}_gir_LIBS ical-glib) set(ICalGLib_${LIB_VERSION}_gir_FILES ${LIBICAL_GLIB_GIR_SOURCES}) @@ -189,7 +205,7 @@ if(HAVE_INTROSPECTION) endif() if(ICAL_GLIB_VAPI) - add_custom_target(vala ALL) + add_custom_target(vala ALL COMMENT "Target to run vala") set(gir_fullname ${CMAKE_BINARY_DIR}/src/libical-glib/ICalGLib-${LIBICAL_GLIB_GIR_VERSION_STRING}.gir) set(metadata_fullname ${CMAKE_CURRENT_BINARY_DIR}/ICalGLib-${LIBICAL_GLIB_GIR_VERSION_STRING}.metadata) set(vapi_file ${CMAKE_CURRENT_BINARY_DIR}/libical-glib.vapi) @@ -213,9 +229,10 @@ if(ICAL_GLIB_VAPI) DEPENDS ${gir_fullname} ${metadata_fullname} + COMMENT "Run the tool to generate the Vala API" ) - add_custom_target(valafile DEPENDS ${vapi_file}) + add_custom_target(valafile DEPENDS ${vapi_file} COMMENT "Target to run valafile") add_dependencies(vala valafile) diff --git a/src/libical/CMakeLists.txt b/src/libical/CMakeLists.txt index 5852e13f..f53413a1 100644 --- a/src/libical/CMakeLists.txt +++ b/src/libical/CMakeLists.txt @@ -53,6 +53,7 @@ add_custom_command( DEPENDS ${PROPERTYDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalderivedproperty.h.in + COMMENT "Generate icalderivedproperty.h" ) list(APPEND BUILT_HEADERS ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.h) @@ -68,6 +69,7 @@ add_custom_command( DEPENDS ${PROPERTYDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalderivedproperty.c.in + COMMENT "Generate icalderivedproperty.c" ) list(APPEND BUILT_SOURCES ${CMAKE_BINARY_DIR}/src/libical/icalderivedproperty.c) @@ -87,6 +89,7 @@ add_custom_command( DEPENDS ${PARAMETERDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalderivedparameter.h.in + COMMENT "Generate icalderivedparameter.h" ) list(APPEND BUILT_HEADERS ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.h) @@ -101,6 +104,7 @@ add_custom_command( DEPENDS ${PARAMETERDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalderivedparameter.c.in + COMMENT "Generate icalderivedparameter.c" ) list(APPEND BUILT_SOURCES ${CMAKE_BINARY_DIR}/src/libical/icalderivedparameter.c) @@ -120,6 +124,7 @@ add_custom_command( DEPENDS ${RESTRICTIONDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalrestriction.c.in + COMMENT "Generate icalrestriction.c" ) list(APPEND BUILT_SOURCES ${CMAKE_BINARY_DIR}/src/libical/icalrestriction.c) @@ -139,6 +144,7 @@ add_custom_command( DEPENDS ${VALUEDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalderivedvalue.h.in + COMMENT "Generate icalderivedvalue.h" ) list(APPEND BUILT_HEADERS ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.h) @@ -153,6 +159,7 @@ add_custom_command( DEPENDS ${VALUEDEPS} ${CMAKE_SOURCE_DIR}/src/libical/icalderivedvalue.c.in + COMMENT "Generate icalderivedvalue.c" ) list(APPEND BUILT_SOURCES ${CMAKE_BINARY_DIR}/src/libical/icalderivedvalue.c) @@ -167,6 +174,7 @@ endif() add_custom_target( ical-header ALL DEPENDS ${CMAKE_BINARY_DIR}/src/libical/ical.h + COMMENT "Target to generate the aggregate ical.h header" ) # GObject Introspection @@ -268,6 +276,7 @@ add_custom_command( -DICAL_FILE_H_FILE:FILEPATH=${CMAKE_BINARY_DIR}/src/libical/ical.h -P ${CMAKE_CURRENT_SOURCE_DIR}/ical_file.cmake DEPENDS ${ical_LIB_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/ical_file.cmake + COMMENT "Generate the aggregate ical.h header" ) add_library(ical ${LIBRARY_TYPE} ${ical_LIB_SRCS}) diff --git a/src/libicalss/CMakeLists.txt b/src/libicalss/CMakeLists.txt index bbc0092e..1982ddc8 100644 --- a/src/libicalss/CMakeLists.txt +++ b/src/libicalss/CMakeLists.txt @@ -25,6 +25,7 @@ endif() add_custom_target( icalss-header ALL DEPENDS ${CMAKE_BINARY_DIR}/src/libicalss/icalss.h + COMMENT "Target to generate the aggregate libicalss header" ) ########### next target ############### @@ -78,6 +79,7 @@ add_custom_command( -DBDB_FOUND=${BDB_FOUND} -P ${CMAKE_CURRENT_SOURCE_DIR}/icalss_file.cmake DEPENDS ${icalss_LIB_SRCS} ${CMAKE_CURRENT_SOURCE_DIR}/icalss_file.cmake + COMMENT "Generate the aggregate libicalss header" ) add_library(icalss ${LIBRARY_TYPE} ${icalss_LIB_SRCS}) -- cgit v1.2.1 From 41aa926f4c3008d6df7ad920a268f4a418deca1d Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Tue, 7 Jun 2022 17:15:03 -0400 Subject: full REUSE compilance --- .reuse/dep5 | 26 +- examples/changenames.pl | 4 - libical.pc.in | 3 + src/Net-ICal-Libical/Makefile.PL | 4 + src/Net-ICal-Libical/README | 7 - src/Net-ICal-Libical/README.txt | 7 + src/libical-glib/libical-glib.pc.in | 3 + src/libicalvcal/README.TXT | 951 ----------------------------------- src/libicalvcal/README.txt | 959 ++++++++++++++++++++++++++++++++++++ src/php/Makefile | 7 +- src/php/README | 17 - src/php/README.txt | 17 + src/php/test.php | 3 + uninstall.cmake.in | 7 + 14 files changed, 1029 insertions(+), 986 deletions(-) delete mode 100644 examples/changenames.pl delete mode 100644 src/Net-ICal-Libical/README create mode 100644 src/Net-ICal-Libical/README.txt delete mode 100644 src/libicalvcal/README.TXT create mode 100644 src/libicalvcal/README.txt delete mode 100644 src/php/README create mode 100644 src/php/README.txt diff --git a/.reuse/dep5 b/.reuse/dep5 index 173f97aa..7431b193 100644 --- a/.reuse/dep5 +++ b/.reuse/dep5 @@ -3,21 +3,37 @@ Upstream-Name: libical Upstream-Contact: Allen Winter Source: https://github.com/libical/libical +#misc documentation +Files: AUTHORS Install.txt README.md ReleaseNotes.txt TEST THANKS TODO doc/AddingOrModifyingComponents.txt doc/UsingLibical.md examples/access-usecases.txt src/Net-ICal-Libical/README.txt src/php/README.txt src/python/ChangeLog src/python/python-binding.txt src/Net-ICal-Libical/MANIFEST src/Net-ICal-Libical/netical_wrap.doc +Copyright: Copyright Contributors to the libical project +License: LGPL-2.1-only OR MPL-2.0 + +#tool configuration files +Files: .clang-tidy .cmake-format.py .codespellrc .dir-locals.el .gitignore .krazy .mdlrc .mdlrc.rb .pre-commit-config.yaml .pylintrc .travis.yml appveyor.yml +Copyright: Copyright Contributors to the libical project +License: BSD-3-Clause + +#other not-easy-to-comment source files +Files: src/libical-glib/ICalGLib.metadata.in src/libical-glib/tools/header-structure-boilerplate-template src/libical-glib/tools/source-structure-boilerplate-template doc/reference/libical-glib/libical-glib-docs.sgml.in src/Net-ICal-Libical/netical_wrap.c src/libical/qsort_gen.c +Copyright: Copyright Contributors to the libical project +License: LGPL-2.1-only OR MPL-2.0 + +#timezones Files: zoneinfo/* -Copyright: The libical developers +Copyright: Copyright Contributors to the libical project License: CC0-1.0 #design data Files: design-data/* -Copyright: The libical developers +Copyright: Copyright Contributors to the libical project License: LGPL-2.1-only OR MPL-2.0 #testing data -Files: test-data/*.ics test-data/*.vcf test-data/*.data test-data/*.tab test-data/*.txt src/test/*.ics src/test/*.out src/Net-ICal-Libical/test-data/* -Copyright: The libical developers +Files: test-data/*.ics test-data/*.vcf test-data/*.data test-data/*.tab test-data/*.txt src/test/*.ics src/test/*.out src/Net-ICal-Libical/test-data/* src/python/littlefile.txt +Copyright: Copyright Contributors to the libical project License: LGPL-2.1-only OR MPL-2.0 #debian packaging Files: debian/* -Copyright: The libical developers +Copyright: Copyright Contributors to the libical project License: LGPL-2.1-only OR MPL-2.0 diff --git a/examples/changenames.pl b/examples/changenames.pl deleted file mode 100644 index 4adf84b9..00000000 --- a/examples/changenames.pl +++ /dev/null @@ -1,4 +0,0 @@ -s/icalcluster/icalfileset/g; -s/ICALCLUSTER/ICALFILESET/g; -s/icalstore/icaldirset/g; -s/ICALSTORE/ICALDIRSET/g; diff --git a/libical.pc.in b/libical.pc.in index c07eb52a..8366cb2f 100644 --- a/libical.pc.in +++ b/libical.pc.in @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright Contributors to the libical project +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ diff --git a/src/Net-ICal-Libical/Makefile.PL b/src/Net-ICal-Libical/Makefile.PL index 59d8d53d..60f3bc70 100644 --- a/src/Net-ICal-Libical/Makefile.PL +++ b/src/Net-ICal-Libical/Makefile.PL @@ -1,4 +1,8 @@ #!/usr/bin/perl +# +# SPDX-FileCopyrightText: 1999 Eric Busboom +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 +# use ExtUtils::MakeMaker; WriteMakefile( diff --git a/src/Net-ICal-Libical/README b/src/Net-ICal-Libical/README deleted file mode 100644 index f6be345e..00000000 --- a/src/Net-ICal-Libical/README +++ /dev/null @@ -1,7 +0,0 @@ - -Net::ICal::Libical: A perl binding to libical. - -This code is PRE-ALPHA. Some of the test routines work, but the code -is not really useful. It is looking for an author, so if you'd like to -have this binding working, please volunteer to work on it. Contact -Eric Busboom diff --git a/src/Net-ICal-Libical/README.txt b/src/Net-ICal-Libical/README.txt new file mode 100644 index 00000000..f6be345e --- /dev/null +++ b/src/Net-ICal-Libical/README.txt @@ -0,0 +1,7 @@ + +Net::ICal::Libical: A perl binding to libical. + +This code is PRE-ALPHA. Some of the test routines work, but the code +is not really useful. It is looking for an author, so if you'd like to +have this binding working, please volunteer to work on it. Contact +Eric Busboom diff --git a/src/libical-glib/libical-glib.pc.in b/src/libical-glib/libical-glib.pc.in index e164cfb5..8938834f 100644 --- a/src/libical-glib/libical-glib.pc.in +++ b/src/libical-glib/libical-glib.pc.in @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright Contributors to the libical project +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ diff --git a/src/libicalvcal/README.TXT b/src/libicalvcal/README.TXT deleted file mode 100644 index d9e7655d..00000000 --- a/src/libicalvcal/README.TXT +++ /dev/null @@ -1,951 +0,0 @@ -NOTE: If you used the earlier APIs released by Versit -then you will want to look at the document "migrate.doc" -included with this package. It contains a discussion of -the differences between the old API and this one. - ----------------------------------------------------------------- - -The vCard/vCalendar C interface is implemented in the set -of files as follows: - -vcc.y, yacc source, and vcc.c, the yacc output you will use -implements the core parser - -vobject.c implements an API that insulates the caller from -the parser and changes in the vCard/vCalendar BNF - -port.h defines compilation environment dependent stuff - -vcc.h and vobject.h are header files for their .c counterparts - -vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions -which you may find useful. - -test.c is a standalone test driver that exercises some of -the features of the APIs provided. Invoke test.exe on a -VCARD/VCALENDAR input text file and you will see the pretty -print output of the internal representation (this pretty print -output should give you a good idea of how the internal -representation looks like -- there is one such output in the -following too). Also, a file with the .out suffix is generated -to show that the internal representation can be written back -in the original text format. - ------------------------------------------------------------------ - - - VObject for VCard/VCalendar - -Table of Contents -================= -1. VObject -2. Internal Representations of VCard/VCalendar -3. Iterating Through VObject's Properties or Values -4. Pretty Printing a VObject Tree -5. Building A VObject Representation of A VCard/VCalendar -6. Converting A VObject Representation Into Its Textual Representation -7. Miscellaneous Notes On VObject APIs usages -8. Brief descriptions of each APIs -9. Additional Programming Notes. - -This document is mainly about the VObject and its APIs. The main -use of a VObject is to represent a VCard or a VCalendar inside -a program. However, its use is not limited to aforemention as it -can represent an arbitrary information that makes up of a tree or -forest of properties/values. - -1. VObject - ======= -A VObject can have a name (id) and a list of associated properties and -a value. Each property is itself a VObject. - -2. Internal Representations of VCard/VCalendar - =========================================== -A list of VCard or a VCalendar is represented by a list of VObjects. -The name (id) of the VObjects in the list is either VCCardProp or -VCCalProp. Each of these VObjects can have a list of properties. -Since a property is represented as a VObject, each of these properties -can have a name, a list of properties, and a value. - -For example, the input file "vobject.vcf": - -BEGIN:VCARD -N:Alden;Roland -FN:Roland H. Alden -ORG:AT&T;Versit Project Office -TITLE:Consultant -EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com -EMAIL;INTERNET:ralden@sfgate.com -EMAIL;MCIMail:242-2200 -LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -Suite 2208=0A= -One Pine Street=0A= -San Francisco, CA 94111 -LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -Suite 2208=0A= -One Pine Street=0A= -San Francisco, CA 94111=0A= -U.S.A. -TEL;WORK;PREF;MSG:+1 415 296 9106 -TEL;WORK;FAX:+1 415 296 9016 -TEL;MSG;CELL:+1 415 608 5981 -ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. -SOUND:ROW-LAND H ALL-DIN -LOGO;GIF;BASE64: - R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC - QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO - 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv - /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw - cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu - ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW - ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf - MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM - 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E - +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW - gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm - LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s - JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6 - mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA - 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj - GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim - DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo - 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f - hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR - BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL - thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7 - asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5 - fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04 - UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe - eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C - z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI - ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4 - wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY - gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA - i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4 - I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7 - -BEGIN:VCALENDAR -DCREATED:19960523T100522 -PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN -VERSION:0.3 -BEGIN:VEVENT -START:19960523T120000 -END:19960523T130000 -SUBTYPE:PHONE CALL -SUMMARY:VERSIT PDI PR Teleconference/Interview -DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland -END:VEVENT -BEGIN:VEVENT -START:19960523T113000 -END:19960523T115500 -SUBTYPE:LUNCH -SUMMARY:Eat in the cafeteria today -END:VEVENT -END:VCALENDAR - -END:VCARD - - -will conceptually be represented as - vcard - VCNameProp - VCFamilyNameProp=Alden - VCGivenNameProp=Roland - VCFullNameProp=Roland H.Alden - .... - -note that - EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com -will be represented as: - VCEmailAddress=sf!rincon!ralden@alden.attmail.com - VCWork - VCPreferred - VCInternet -where the lower level properties are properties of the property -VCEmailAddress. - -Groupings are flattened out in the VObject representation such -that: - a.b:blah - a.c:blahblah -are represented as: - b=blah - VCGrouping=a - c=blahblah - VCGrouping=a -i.e. one can read the above as: - the property "b" has value "blah" and property "VCGrouping" - with the value "a". - the property "c" has value "blahblah" and property "VCGrouping" - with the value "a". -likewise, multi-level groupings are flatten similarly. e.g. - a.b.c:blah - a.b.e:blahblah ---> - c=blah - VCGrouping=b - VCGrouping=a - e=blahblah - VCGrouping=b - VCGrouping=a -which read: - the property "c" has value "blah" and property "VCGrouping" - with the value "b" which has property "VCGrouping" - with value "a". - the property "e" has value "blahblah" and property "VCGrouping" - with the value "b" which has property "VCGrouping" - with value "a". - -3. Iterating Through VObject's Properties or Values - ================================================ -The following is a skeletal form of iterating through -all properties of a vobject, o: - - // assume the object of interest, o, is of type VObject - VObjectIterator i; - initPropIterator(&i,o); - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - // ... do something with "each" property - } - -Use the API vObjectName() to access a VObject's name. -Use the API vObjectValueType() to determine if a VObject has - a value. For VCard/VCalendar application, you - should not need this function as practically - all values are either of type VCVT_USTRINGZ or - VCVT_RAW (i.e set by setVObjectUStringZValue and - setVObjectAnyValue APIs respectively), and the - value returned by calls to vObjectUStringZValue - and vObjectAnyValue are 0 if a VObject has no - value. (There is a minor exception where VObject with - VCDataSizeProp has value that is set by - setVObjectLongValue). -Use the APIs vObject???Value() to access a VObject's value. - where ??? is the expected type. -Use the APIs setvObject???Value() to set or modify a VObject's value. - where ??? is the expected type. -Use the API isAPropertyOf() to query if a name match the name of - a property of a VObject. Since isAPropertyOf() return - the matching property, we can use that to retrieve - a property and subsequently the value of the property. - -4. Pretty Printing a VObject Tree - ============================== -VObject tree can be pretty printed with the printVObject() function. -The output of pretty printing a VObject representation of the input -test file "vobject.vcf" is shown below. Note that the indentation -indicates the tree hirerarchy where the immediate children nodes -of a parent node is all at the same indentation level and the -immediate children nodes are the immediate properties of the -associated parent nodes. In the following, {N,FN,ORG,TITLE,...} -are immediate properties of VCARD. {F and G} are properties of N -with value {"Alden" and "Roland"} respectively; FN has no property -but has the value "Roland H. Alden"; EMAIL has value and -the properties WORK, PREF, and INTERNET. - - -VCARD - N - F="Alden" - G="Roland" - FN="Roland H. Alden" - ORG - ORGNAME="AT&T" - OUN="Versit Project Office" - TITLE="Consultant" - EMAIL="sf!rincon!ralden@alden.attmail.com" - WORK - PREF - INTERNET - EMAIL="ralden@sfgate.com" - INTERNET - EMAIL="242-2200" - MCIMail - LABEL="Roland H. Alden - Suite 2208 - One Pine Street - San Francisco, CA 94111" - DOM - POSTAL - PARCEL - HOME - WORK - QP - LABEL="Roland H. Alden - Suite 2208 - One Pine Street - San Francisco, CA 94111 - U.S.A." - POSTAL - PARCEL - HOME - WORK - QP - TEL="+1 415 296 9106" - WORK - PREF - MSG - TEL="+1 415 296 9016" - WORK - FAX - TEL="+1 415 608 5981" - MSG - CELL - ADR - EXT ADD="Suite 2208" - STREET="One Pine Street" - L="San Francisco" - R="CA" - PC="94111" - C="U.S.A." - SOUND="ROW-LAND H ALL-DIN" - LOGO=[raw data] - GIF - BASE64 - DataSize=1482 -VCALENDAR - DCREATED="19960523T100522" - PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN" - VERSION="0.3" - VEVENT - START="19960523T120000" - END="19960523T130000" - SUBTYPE="PHONE CALL" - SUMMARY="VERSIT PDI PR Teleconference/Interview" - DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland" - VEVENT - START="19960523T113000" - END="19960523T115500" - SUBTYPE="LUNCH" - SUMMARY="Eat in the cafeteria today" - -5. Building A VObject Representation of A VCard/VCalendar - ====================================================== -The parser in vcc.y converts an input file with one or more -VCard/VCalendar that is in their textual representation -into their corresponding VObject representation. - -VObject representation of a VCard/VCalendar can also be built -directly with calls to the VObject building APIs. e.g. - - VObject *prop; - VObject *vcard = newVObject(VCCardProp); - prop = addProp(vcard,VCNameProp); - addPropValue(prop,VCFamilyNameProp,"Alden"); - addPropValue(prop,VCGivenNameProp,"Roland"); - addPropValue(vcard,VCFullNameProp,"Roland H. Alden"); - .... - -6. Converting A VObject Representation Into Its Textual Representation - =================================================================== -The VObject representation can be converted back to its textual -representation via the call to writeVObject() or writeMemVObject() -API. e.g. - a. to write to a file: - // assume vcard is of type VObject - FILE *fp = fopen("alden.vcf","w"); - writeVObject(fp,vcard); - a. to write to memory, and let the API allocate the required memory. - char* clipboard = writeVObject(0,0,vcard); - ... do something to clipboard - free(clipboard); - b. to write to a user allocated buffer: - char clipboard[16384]; - int len = 16384; - char *buf = writeVObject(clipboard,&len,vcard); - ... buf will be equal to clipboard if the write - is successful otherwise 0. - -In the case of writing to memory, the memory buffer can be either -allocated by the API or the user. If the user allocate the -memory for the buffer, then the length of the buffer needs to be -communicated to the API via a variable. The variable passed as -the length argument will be overwritten with the actual size -of the text output. A 0 return value from writeMemVObject() -indicates an error which could be caused by overflowing the -size of the buffer or lack of heap memory. - -7. Miscellaneous Notes On VObject APIs usages - ========================================== -a. vcc.h -- contains basic interfaces to the parser: - VObject* Parse_MIME(const char *input, unsigned long len); - VObject* Parse_MIME_FromFile(FILE *file); - -- both of this return a null-terminated list of - VObject that is either a VCARD or VCALENDAR. - To iterate through this list, do - VObject *t, *v; - v = Parse_Mime_FromFile(fp); - while (v) { - // ... do something to v. - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - note that call to cleanVObject will release - resource used to represent the VObject. - -b. vobject.h -- contains basic interfaces to the VObject APIs. - see the header for more details. - The structure of VObject is purposely (hiddened) not exposed - to the user. Every access has to be done via - the APIs. This way, if we need to change the - structure or implementation, the client need not - recompile as long as the interfaces remain the - same. - -c. values of a property is determined by the property definition - itself. The vobject APIs does not attempt to enforce - any of such definition. It is the consumer's responsibility - to know what value is expected from a property. E.g. - most properties have unicode string value, so to access - the value of these type of properties, you will use - the vObjectUStringZValue() to read the value and - setVObjectUStringZValue() to set or modify the value. - Refer to the VCard and VCalendar specifications for - the definition of each property. - -d. properties name (id) are case insensitive. - -8. Brief descriptions of each APIs - =============================== - * the predefined properties' names (id) are listed under vobject.h - each is of the form VC*Prop. e.g. - #define VC7bitProp "7BIT" - #define VCAAlarmProp "AALARM" - .... - - * consumer of a VObject can only define pointers to VObject. - - * a variable of type VObjectIterator, say "i", can be used to iterate - through a VObject's properties, say "o". The APIs related to - VObjectIterator are: - void initPropIterator(VObjectIterator *i, VObject *o); - -- e.g. usage - initPropIterator(&i,o); - int moreIteration(VObjectIterator *i); - -- e.g. usage - while (moreIteration(&i)) { ... } - VObject* nextVObject(VObjectIterator *i); - -- e.g. usage - while (moreIteration(&i)) { - VObject *each = nextVObject(&i); - } - - * VObject can be chained together to form a list. e.g. of such - use is in the parser where the return value of the parser is - a link list of VObject. A link list of VObject can be - built by: - void addList(VObject **o, VObject *p); - and iterated by - VObject* nextVObjectInList(VObject *o); - -- next VObjectInList return 0 if the list - is exhausted. - - * the following APIs are mainly used to construct a VObject tree: - VObject* newVObject(const char *id); - -- used extensively internally by VObject APIs but when - used externally, its use is mainly limited to the - construction of top level object (e.g. an object - with VCCardProp or VCCalendarProp id). - - void deleteVObject(VObject *p); - -- to deallocate single VObject, for most user, use - cleanVObject(VObject *o) instead for freeing all - resources associated with the VObject. - - char* dupStr(const char *s, unsigned int size); - -- duplicate a string s. If size is 0, the string is - assume to be a null-terminated. - - void deleteStr(const char *p); - -- used to deallocate a string allocated by dupStr(); - - void setVObjectName(VObject *o, const char* id); - -- set the id of VObject o. This function is not - normally used by the user. The setting of id - is normally done as part of other APIs (e.g. - addProp()). - - void setVObjectStringZValue(VObject *o, const char *s); - -- set a string value of a VObject. - - void setVObjectUStringZValue(VObject *o, const wchar_t *s); - -- set a Unicode string value of a VObject. - - void setVObjectIntegerValue(VObject *o, unsigned int i); - -- set an integer value of a VObject. - - void setVObjectLongValue(VObject *o, unsigned long l); - -- set an long integer value of a VObject. - - void setVObjectAnyValue(VObject *o, void *t); - -- set any value of a VObject. The value type is - unspecified. - - VObject* setValueWithSize(VObject *prop, void *val, unsigned int size); - -- set a raw data (stream of bytes) value of a VObject - whose size is size. The internal VObject representation - is - this object = val - VCDataSizeProp=size - i.e. the value val will be attached to the VObject prop - and a property of VCDataSize whose value is size - is also added to the object. - - void setVObjectVObjectValue(VObject *o, VObject *p); - -- set a VObject as the value of another VObject. - - const char* vObjectName(VObject *o); - -- retrieve the VObject's Name (i.e. id). - - const char* vObjectStringZValue(VObject *o); - -- retrieve the VObject's value interpreted as - null-terminated string. - - const wchar_t* vObjectUStringZValue(VObject *o); - -- retrieve the VObject's value interpreted as - null-terminated unicode string. - - unsigned int vObjectIntegerValue(VObject *o); - -- retrieve the VObject's value interpreted as - integer. - - unsigned long vObjectLongValue(VObject *o); - -- retrieve the VObject's value interpreted as - long integer. - - void* vObjectAnyValue(VObject *o); - -- retrieve the VObject's value interpreted as - any value. - - VObject* vObjectVObjectValue(VObject *o); - -- retrieve the VObject's value interpreted as - a VObject. - - VObject* addVObjectProp(VObject *o, VObject *p); - -- add a VObject p as a property of VObject o. - (not normally used externally for building a - VObject). - - VObject* addProp(VObject *o, const char *id); - -- add a property whose name is id to VObject o. - - VObject* addPropValue(VObject *o, const char *id, const char *v); - -- add a property whose name is id and whose value - is a null-terminated string to VObject o. - - VObject* addPropSizedValue(VObject *o, const char *id, - const char *v, unsigned int size); - -- add a property whose name is id and whose value - is a stream of bytes of size size, to VObject o. - - VObject* addGroup(VObject *o, const char *g); - -- add a group g to VObject o. - e.g. if g is a.b.c, you will have - o - c - VCGroupingProp=b - VCGroupingProp=a - and the object c is returned. - - VObject* isAPropertyOf(VObject *o, const char *id); - -- query if a property by the name id is in o and - return the VObject that represent that property. - - void printVObject(VObject *o); - -- pretty print VObject o to stdout (for debugging use). - - void writeVObject(FILE *fp, VObject *o); - -- convert VObject o to its textual representation and - write it to file. - - char* writeMemVObject(char *s, int *len, VObject *o); - -- convert VObject o to its textual representation and - write it to memory. If s is 0, then memory required - to hold the textual representation will be allocated - by this API. If a variable len is passed, len will - be overwritten with the byte size of the textual - representation. If s is non-zero, then s has to - be a user allocated buffer whose size has be passed - in len as a variable. Memory allocated by the API - has to be freed with call to free. The return value - of this API is either the user supplied buffer, - the memory allocated by the API, or 0 (in case of - failure). - - void cleanStrTbl(); - -- this function has to be called when all - VObject has been destroyed. - - void cleanVObject(VObject *o); - -- release all resources used by VObject o. - - wchar_t* fakeUnicode(const char *ps, int *bytes); - -- convert char* to wchar_t*. - - extern int uStrLen(const wchar_t *u); - -- length of unicode u. - - char *fakeCString(const wchar_t *u); - -- convert wchar_t to CString (blindly assumes that - this could be done). - -9. Additional Programming Notes - ============================ -In the following notes, please refers to the listing -of Example.vcf and its VObject Representation -(shown at the end of this section). - -* Handling the Return Value of the VCard/VCalendar Parser - The example input text file contains two root VObjects - (a VCalendar and a VCard). The output of the VCard/VCalendar - parser is a null-terminated list of VObjects. For this - particular input file, the list will have two VObjects. - The following shows a template for iterating through the - output of the Parser: - - VObject *t, *v; - v = Parse_Mime_fromFileName("example.vcf"); - while (v) { - // currently, v will either be a VCard or a VCalendar - // do whatever your application need to do to - // v here ... - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - -* Iterating Through a VCard/VCalendar VObject - From the VObject APIs point of view, a VCard VObject - is the same as a VCalendar VObject. However, the application - needs to know what are in a VCard or a VCalendar. - For example, A VCalendar VObject can have VCDCreatedProp, - a VCGEOLocationProp, etc, and one or more VCEventProp and - or VCTodoProp. The VCEventProp and VCTodoProp can have - many properties of their own, which in turn could have - more properties (e.g. VCDAlarmProp can be a VCEventProp - VObject's property, and VCRunTimeProp can be a - VCDAlarmProp VObject's property. Because a VObject tree - can be arbitrarily complex, in general, to process all - properties and values of a VObject tree, a recursive walk - is desirable. An example recursive VObject tree walk - can be found in the vobject.c source lines for printVObject* - and writeVObject* APIs. Depending on what the application need - to do with a VCard or a VCalendar, a recursive walk - of the VObject tree may or may not be desirable. An example - template of a non-recursive walk is shown below: - - void processVCardVCalendar(char *inputFile) - { - VObject *t, *v; - v = Parse_Mime_fromFileName(inputFile); - while (v) { - char *n = vObjectName(v); - if (strcmp(n,VCCardProp) == 0) { - do_VCard(v); - } - else if (strcmp(n,VCCalendarProp) == 0) { - do_VCalendar(v); - } - else { - // don't know how to handle anything else! - } - t = v; - v = nextVObjectInList(v); - cleanVObject(t); - } - } - - void do_VCard(VObject *vcard) - { - VObjectIterator t; - initPropIterator(&t,vcard); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - // The primary purpose of this example is to - // show how to iterate through a VCard VObject, - // it is not meant to be efficient at all. - char *n = vObjectName(eachProp); - if (strcmp(n,VCNameProp)==0) { - do_name(eachProp); - } - else if (strcmp(n,VCEmailProp)==0) { - do_email(eachProp); - } - else if (strcmp(n,VCLabelProp)==0) { - do_label(eachProp); - } - else if .... - } - } - - void do_VCalendar(VObject *vcal) - { - VObjectIterator t; - initPropIterator(&t,vcard); - while (moreIteration(&t)) { - VObject *eachProp = nextVObject(&t); - // The primary purpose of this example is to - // show how to iterate through a VCalendar VObject, - // it is not meant to be efficient at all. - char *n = vObjectName(eachProp); - if (strcmp(n,VCDCreatedProp)==0) { - do_DCreated(eachProp); - } - else if (strcmp(n,VCVersionProp)==0) { - do_Version(eachProp); - } - else if (strcmp(n,VCTodoProp)==0) { - do_Todo(eachProp); - } - else if (strcmp(n,VCEventProp)==0) { - do_Event(eachProp); - } - else if .... - } - } - - void do_Todo(VObject *vtodo) { ... } - - void do_Event(VObject *vevent) { ... } - - ... - -* Property's Values and Properties - The VObject APIs do not attempt to check for the - correctness of the values of a property. Nor do they - will prevent the user from attaching a non-VCard/VCalendar - standard property to a VCard/VCalendar property. Take - the example of line [11] of the example, "O.K" is not - a valid value of VCStatusProp. It is up to the application - to accept or reject the value of a property. - -* Output of printVObject - PrintVObject pretty prints a VObject tree in human - readable form. See the listing at the end of the file - for an example output of printVObject on the example - input file "Example.vcf". - - Note that binary data are not shown in the output of - printVObject. Instead, a note is made ([raw data]) to - indicate that there exists such a binary data. - -* Note on Binary Data - When the value of a property is a binary data, it is only - useful to know the size of the binary data. - - In the case of the VCard/VCalendar parser, it chooses - to represent the size information as a separate property - called VCDataSizeProp whose value is the size of the binary - data. The APIs sequence to construct the VObject subtree - of line [44] of Example.vcf is - - // VObject *vcard; - VObject *p1 = addProp(vcard,VCLogoProp); - (void) addProp(p1,VCGIFProp); - (void) addProp(p1,VCBASE64Prop); - VObject *p2 = addProp(p1,VCDataSizeProp); - (void) setVObjectLongValue(p2,1482); - setVObjectAnyValue(vcard,...pointer to binary data); - - Note the presence of VCBase64Prop will cause the - writeVObject API to output the binary data as BASE64 text. - For VCard/VCalendar application, having the VCBase64Prop - property is practically always necessary for property with - binary data as its value. - -* Note on Quoted-Printable String - String value with embedded newline are written out as - quoted-prinatable string. It is therefore important - to mark a property with a string value that has - one or more embedded newlines, with the VCQutedPrintableProp - property. e.g. - - // VObject *root; - char *msg="To be\nor\nnot to be"; - VObject *p = addPropValue(root,VCDescriptionProp,msg); - // the following is how you mark a property with - // a property. In this case, the marker is - // VCQuotedPrintableProp - addProp(p,VCQuotedPrintableProp); - -* Note on Unicode - Although, the current parser takes ASCII text file only, - string values are all stored as Unicode in the VObject tree. - For now, when using the VObject APIs to construct a - VObject tree, one should always convert ASCII string value - to a Unicode string value: - - // VObject *root; - VObject *p = addProp(root,VCSomeProp); - setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue)); - - An API is provided to simplify the above process: - - addPropValue(root,VCSomeProp,someASCIIStringZValue); - - Note that someASCIISTringZValue is automatically converted to - Unicode by addPropValue API, where as, the former code - sequence do an explicit call to fakeUnicode. - - To read back the value, one should use the vObjectUStringZValue - API not vObjectStringZValue API. The value returned by the - vObjectUStringZValue API is a Unicode string. If the application - do not know how to handle Unicode string, it can use the - fakeCString API to convert it back to ASCII string (as long - as the conversion is meaningful). - - Note that fakeCString return a heap allocated memory. It is - important to call deleteStr on fakeCString return value if - it is not longer required (or there will be memory leak). - - NOTE: Unfortunately, at the point when this document is written, - there is still no consensus on how Unicode is to be handled - in the textual representation of VCard/VCalendar. So, there - is no version of writeVObject and the parser to output and - input Unicode textual representation of VCard/VCalendar. - - -Example.vcf ------------ -line -number Input Text (example.vcf) ------- ---------- -1 BEGIN:VCALENDAR -2 DCREATED:19961102T100522 -3 GEO:0,0 -4 VERSION:1.0 -5 BEGIN:VEVENT -6 DTSTART:19961103T000000 -7 DTEND:20000101T000000 -8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A= -9 or =0A= -10 not to be -11 STATUS:O.K. -12 X-ACTION:No action required -13 DALARM:19961103T114500;5;3;Enjoy -14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom. -15 END:VEVENT -16 -17 BEGIN:VTODO -18 DUE:19960614T0173000 -19 DESCRIPTION:Relex. -20 END:VTODO -21 -22 END:VCALENDAR -23 -24 BEGIN:VCARD -25 N:Alden;Roland -26 FN:Roland H. Alden -27 ORG:AT&T;Versit Project Office -28 TITLE:Consultant -29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com -30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -31 Suite 2208=0A= -32 One Pine Street=0A= -33 San Francisco, CA 94111 -34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= -35 Suite 2208=0A= -36 One Pine Street=0A= -37 San Francisco, CA 94111=0A= -38 U.S.A. -39 TEL;WORK;PREF;MSG:+1 415 296 9106 -40 TEL;WORK;FAX:+1 415 296 9016 -41 TEL;MSG;CELL:+1 415 608 5981 -42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. -43 SOUND:ROW-LAND H ALL-DIN -44 LOGO;GIF;BASE64: -45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC - ... 30 lines of BASE64 data not shown here. -76 END:VCARD - - -VObject Representation of Example.vcf: -------------------------------------- -line -in -text -file VObject Tree as Printed by printVObject API ----- ------------------------------------------- -1 VCALENDAR -2 DCREATED="19961102T100522" -3 GEO="0,0" -4 VERSION="1.0" -5 VEVENT -6 DTSTART="19961103T000000" -7 DTEND="20000101T000000" -8 DESCRIPTION="To be -9 or -10 not to be" -8 QUOTED-PRINTABLE -11 STATUS="O.K." -12 X-ACTION="No action required" -13 DALARM -13 RUNTIME="19961103T114500" -13 SNOOZETIME="5" -13 REPEATCOUNT="3" -13 DISPLAYSTRING="Enjoy" -14 MALARM -14 RUNTIME="19970101T120000" -14 EMAIL="johny@nowhere.com" -14 NOTE="Call Mom" -17 VTODO -18 DUE="19960614T0173000" -19 DESCRIPTION="Relex." -24 VCARD -25 N -25 F="Alden" -25 G="Roland" -26 FN="Roland H. Alden" -27 ORG -27 ORGNAME="AT&T" -27 OUN="Versit Project Office" -28 TITLE="Consultant" -29 EMAIL="ralden@alden.com" -29 WORK -29 PREF -29 INTERNET -30 LABEL="Roland H. Alden -31 Suite 2208 -32 One Pine Street -33 San Francisco, CA 94111" -30 DOM -30 POSTAL -30 PARCEL -30 HOME -30 WORK -30 QUOTED-PRINTABLE -34 LABEL="Roland H. Alden -35 Suite 2208 -36 One Pine Street -37 San Francisco, CA 94111 -38 U.S.A." -34 POSTAL -34 PARCEL -34 HOME -34 WORK -34 QUOTED-PRINTABLE -39 TEL="+1 415 296 9106" -39 WORK -39 PREF -39 MSG -40 TEL="+1 415 296 9016" -40 WORK -40 FAX -41 TEL="+1 415 608 5981" -41 MSG -41 CELL -42 ADR -42 EXT ADD="Suite 2208" -42 STREET="One Pine Street" -42 L="San Francisco" -42 R="CA" -42 PC="94111" -42 C="U.S.A." -43 SOUND="ROW-LAND H ALL-DIN" -44 LOGO=[raw data] -44 GIF -44 BASE64 -44 DATASIZE=1482 - diff --git a/src/libicalvcal/README.txt b/src/libicalvcal/README.txt new file mode 100644 index 00000000..734c30a4 --- /dev/null +++ b/src/libicalvcal/README.txt @@ -0,0 +1,959 @@ +SPDX-FileCopyrightText: 1996 Apple Computer, Inc., AT&T Corp., International +Business Machines Corporation and Siemens Rolm Communications Inc. + +SPDX-License-Identifier: LicenseRef-APPLEMIT + +The software is provided with RESTRICTED RIGHTS. Use, duplication, or +disclosure by the government are subject to restrictions set forth in +DFARS 252.227-7013 or 48 CFR 52.227-19, as applicable. + +NOTE: If you used the earlier APIs released by Versit +then you will want to look at the document "migrate.doc" +included with this package. It contains a discussion of +the differences between the old API and this one. + +---------------------------------------------------------------- + +The vCard/vCalendar C interface is implemented in the set +of files as follows: + +vcc.y, yacc source, and vcc.c, the yacc output you will use +implements the core parser + +vobject.c implements an API that insulates the caller from +the parser and changes in the vCard/vCalendar BNF + +port.h defines compilation environment dependent stuff + +vcc.h and vobject.h are header files for their .c counterparts + +vcaltmp.h and vcaltmp.c implement vCalendar "macro" functions +which you may find useful. + +test.c is a standalone test driver that exercises some of +the features of the APIs provided. Invoke test.exe on a +VCARD/VCALENDAR input text file and you will see the pretty +print output of the internal representation (this pretty print +output should give you a good idea of how the internal +representation looks like -- there is one such output in the +following too). Also, a file with the .out suffix is generated +to show that the internal representation can be written back +in the original text format. + +----------------------------------------------------------------- + + + VObject for VCard/VCalendar + +Table of Contents +================= +1. VObject +2. Internal Representations of VCard/VCalendar +3. Iterating Through VObject's Properties or Values +4. Pretty Printing a VObject Tree +5. Building A VObject Representation of A VCard/VCalendar +6. Converting A VObject Representation Into Its Textual Representation +7. Miscellaneous Notes On VObject APIs usages +8. Brief descriptions of each APIs +9. Additional Programming Notes. + +This document is mainly about the VObject and its APIs. The main +use of a VObject is to represent a VCard or a VCalendar inside +a program. However, its use is not limited to aforemention as it +can represent an arbitrary information that makes up of a tree or +forest of properties/values. + +1. VObject + ======= +A VObject can have a name (id) and a list of associated properties and +a value. Each property is itself a VObject. + +2. Internal Representations of VCard/VCalendar + =========================================== +A list of VCard or a VCalendar is represented by a list of VObjects. +The name (id) of the VObjects in the list is either VCCardProp or +VCCalProp. Each of these VObjects can have a list of properties. +Since a property is represented as a VObject, each of these properties +can have a name, a list of properties, and a value. + +For example, the input file "vobject.vcf": + +BEGIN:VCARD +N:Alden;Roland +FN:Roland H. Alden +ORG:AT&T;Versit Project Office +TITLE:Consultant +EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com +EMAIL;INTERNET:ralden@sfgate.com +EMAIL;MCIMail:242-2200 +LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +Suite 2208=0A= +One Pine Street=0A= +San Francisco, CA 94111 +LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +Suite 2208=0A= +One Pine Street=0A= +San Francisco, CA 94111=0A= +U.S.A. +TEL;WORK;PREF;MSG:+1 415 296 9106 +TEL;WORK;FAX:+1 415 296 9016 +TEL;MSG;CELL:+1 415 608 5981 +ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. +SOUND:ROW-LAND H ALL-DIN +LOGO;GIF;BASE64: + R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC + QjExMSEhIRAQEO///87v9973/73n95zW71K13jGl1nvG50Kt3iGc1gCMzq3e94zO + 7xCU1nO952O15wAAACwAAAAApgBOAAAF/yAgjmRpnmiqrmzrvnAsz3Rt33iu73zv + /8CgcEj8QTaeywWTyWCUno2kSK0KI5tLc8vtNi+WiHVMlj0mFK96nalsxOW4fPSw + cNj4tQc+7xcjGh4WExJTJYUTFkp3eU0eEH6RkpOUlTARhRoWm5ydFpCWoS0QEqAu + ARKaHRcVjV0borEoFl0cSre4Sq67FA+yvwAeTU8XHZ7HmxS6u2wVfMCVpAE3pJoW + ylrMptDcOqSF4OHg3eQ5pInInb7lcc86mNbLzBXsZbRfUOn6ucyNHvVWJHCpQFDf + MWwEEzLqx2YCQCqF3OnItClJNmYcJD7cSAKTuI/gtnEcOQKkyVIk6/+ds5CkFcMM + 61LiENikwi1jBnNyuvUSjwWZOS5uIZarqNFcNl32XMMB6I06GgoJ+bZp1ZKeDl8E + +MC1K1cBIhZ4HUu2LAsCZdOWRQDt20lxIlccSHsgrNq7Xc/ixcsWmNu34WKyYJCW + gQjCe9XqTZy2L4pv04gg2sSKSc8OLgTcBSuWsdkVaD2TdXyiQxebFyjo1Gnx6tJm + LuaqrdtZtNfFtruSNmF5IKujwIsmJbjwtRqNJhrcNVw79wcRAgogmE4ArIjQzj/s + JvHAGCFDQR4UqigPK4sBe62XwO51OwADiMcqUG+iOdcFAL+hW20BfAoEexlwAnu6 + mZDAXQ1EVh//WfhxJB5gIbHgwFgOTOiVAgOuVQKAfKFg3weGwSBYFZMp4hpDGKyA + 3lgJKECWgiMQyBVpW+0V4oJjNfhCNkR1IgWEb21QlRK9GdfFCgeOZYBsXgm4noYj + GEBhAQHYh0J8XenoQnFGdrkUciJY6FUAK15ogozakcBhliKsyZWHDMZQ0wWC/Aim + DB6h01KRr/lXQgFxAqDcWDACgCZpUnrVQJtjwTnWjS6MWAYqqfDnSaEkJOlVXQBo + 2pWTMUJ53WgAuPncCR9q6VQMAYjZlXWJmknCoSUM2p4BC+SaKwG88hoZlvfFMM4f + hQh5TXkv+RklWYtC91mopJIAKFkJlDAW/wF25ShnLbeo5gmQ+1FGkJdrKCuCi2OR + BuwHBcwqKgABrMtVAgpem61XkLbAJ7n8uiIpvGVhO4KpH1QLbbpqLheZvQCkGoNL + thSzSTg2UGVBBzbtaxwKsYrmgLvRAlCmWgwMAADD66rKAgR3XlGspcdkZYK8ibU7 + asgEl+XAyB8I7PCqMWiWncGGimpfAgO4ypXSPpOVLwsRCDJxRD2AoyeRRv5kApO5 + fXwzwvfOKLKtaTWtbQxccmGLTZy8xYlVSvXbhbk0M2YzrYfJJ0K8m+V9NgxpyC04 + UycI/aiuiH9Y8NftDUwWp1Wm5UABnAUKwwRsPFGBt4Oc9PZvGvNLwf8JOZt8Arpe + eY23yDovwIDiBX74NAsPVLDJj3Hh4JEExsKcjrlKf9DsCVx3ZfLqAKBuG1s/A90C + z2KjYHjjyPOdG1spz6BBUr+BcUxUb1nDCTa/VZD2Uv+YkLPAKJC9dNEh7628WgqI + ybzlaA+ufxMa6bxC6ciLUQLcx5UGIAAsAkDA6wQkOxrcY39yo4cQMNWCAPTKV1R4 + wPkgaBxzOc8FtMiF1NoGoXBRJjgoPApmPsjCFlbMdzCM4TFy50IXxI2DPcHAv2rY + gghsEIeu8CAPW6ABIPYEFkOsAeaMyIz0JfGJUExBBGRIRX0IMYovWCIT1eBELNpA + i1vcgta8iANPCIQOghzQABl30J0tXqBla4wjFLFQxZzAUY42CIAd5OYBCuKxB2c4 + I0b28EcrQKADgmSKB9RYyDhA4BqCxIBqrtjIMTwoFeCjYSU3KZMQAAA7 + +BEGIN:VCALENDAR +DCREATED:19960523T100522 +PRODID:-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN +VERSION:0.3 +BEGIN:VEVENT +START:19960523T120000 +END:19960523T130000 +SUBTYPE:PHONE CALL +SUMMARY:VERSIT PDI PR Teleconference/Interview +DESCRIPTION:VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland +END:VEVENT +BEGIN:VEVENT +START:19960523T113000 +END:19960523T115500 +SUBTYPE:LUNCH +SUMMARY:Eat in the cafeteria today +END:VEVENT +END:VCALENDAR + +END:VCARD + + +will conceptually be represented as + vcard + VCNameProp + VCFamilyNameProp=Alden + VCGivenNameProp=Roland + VCFullNameProp=Roland H.Alden + .... + +note that + EMAIL;WORK;PREF;INTERNET:sf!rincon!ralden@alden.attmail.com +will be represented as: + VCEmailAddress=sf!rincon!ralden@alden.attmail.com + VCWork + VCPreferred + VCInternet +where the lower level properties are properties of the property +VCEmailAddress. + +Groupings are flattened out in the VObject representation such +that: + a.b:blah + a.c:blahblah +are represented as: + b=blah + VCGrouping=a + c=blahblah + VCGrouping=a +i.e. one can read the above as: + the property "b" has value "blah" and property "VCGrouping" + with the value "a". + the property "c" has value "blahblah" and property "VCGrouping" + with the value "a". +likewise, multi-level groupings are flatten similarly. e.g. + a.b.c:blah + a.b.e:blahblah +--> + c=blah + VCGrouping=b + VCGrouping=a + e=blahblah + VCGrouping=b + VCGrouping=a +which read: + the property "c" has value "blah" and property "VCGrouping" + with the value "b" which has property "VCGrouping" + with value "a". + the property "e" has value "blahblah" and property "VCGrouping" + with the value "b" which has property "VCGrouping" + with value "a". + +3. Iterating Through VObject's Properties or Values + ================================================ +The following is a skeletal form of iterating through +all properties of a vobject, o: + + // assume the object of interest, o, is of type VObject + VObjectIterator i; + initPropIterator(&i,o); + while (moreIteration(&i)) { + VObject *each = nextVObject(&i); + // ... do something with "each" property + } + +Use the API vObjectName() to access a VObject's name. +Use the API vObjectValueType() to determine if a VObject has + a value. For VCard/VCalendar application, you + should not need this function as practically + all values are either of type VCVT_USTRINGZ or + VCVT_RAW (i.e set by setVObjectUStringZValue and + setVObjectAnyValue APIs respectively), and the + value returned by calls to vObjectUStringZValue + and vObjectAnyValue are 0 if a VObject has no + value. (There is a minor exception where VObject with + VCDataSizeProp has value that is set by + setVObjectLongValue). +Use the APIs vObject???Value() to access a VObject's value. + where ??? is the expected type. +Use the APIs setvObject???Value() to set or modify a VObject's value. + where ??? is the expected type. +Use the API isAPropertyOf() to query if a name match the name of + a property of a VObject. Since isAPropertyOf() return + the matching property, we can use that to retrieve + a property and subsequently the value of the property. + +4. Pretty Printing a VObject Tree + ============================== +VObject tree can be pretty printed with the printVObject() function. +The output of pretty printing a VObject representation of the input +test file "vobject.vcf" is shown below. Note that the indentation +indicates the tree hirerarchy where the immediate children nodes +of a parent node is all at the same indentation level and the +immediate children nodes are the immediate properties of the +associated parent nodes. In the following, {N,FN,ORG,TITLE,...} +are immediate properties of VCARD. {F and G} are properties of N +with value {"Alden" and "Roland"} respectively; FN has no property +but has the value "Roland H. Alden"; EMAIL has value and +the properties WORK, PREF, and INTERNET. + + +VCARD + N + F="Alden" + G="Roland" + FN="Roland H. Alden" + ORG + ORGNAME="AT&T" + OUN="Versit Project Office" + TITLE="Consultant" + EMAIL="sf!rincon!ralden@alden.attmail.com" + WORK + PREF + INTERNET + EMAIL="ralden@sfgate.com" + INTERNET + EMAIL="242-2200" + MCIMail + LABEL="Roland H. Alden + Suite 2208 + One Pine Street + San Francisco, CA 94111" + DOM + POSTAL + PARCEL + HOME + WORK + QP + LABEL="Roland H. Alden + Suite 2208 + One Pine Street + San Francisco, CA 94111 + U.S.A." + POSTAL + PARCEL + HOME + WORK + QP + TEL="+1 415 296 9106" + WORK + PREF + MSG + TEL="+1 415 296 9016" + WORK + FAX + TEL="+1 415 608 5981" + MSG + CELL + ADR + EXT ADD="Suite 2208" + STREET="One Pine Street" + L="San Francisco" + R="CA" + PC="94111" + C="U.S.A." + SOUND="ROW-LAND H ALL-DIN" + LOGO=[raw data] + GIF + BASE64 + DataSize=1482 +VCALENDAR + DCREATED="19960523T100522" + PRODID="-//Alden Roland/Hand Crafted In North Carolina//NONSGML Made By Hand//EN" + VERSION="0.3" + VEVENT + START="19960523T120000" + END="19960523T130000" + SUBTYPE="PHONE CALL" + SUMMARY="VERSIT PDI PR Teleconference/Interview" + DESCRIPTION="VERSIT PDI PR Teleconference/Interview With Tom Streeter and Alden Roland" + VEVENT + START="19960523T113000" + END="19960523T115500" + SUBTYPE="LUNCH" + SUMMARY="Eat in the cafeteria today" + +5. Building A VObject Representation of A VCard/VCalendar + ====================================================== +The parser in vcc.y converts an input file with one or more +VCard/VCalendar that is in their textual representation +into their corresponding VObject representation. + +VObject representation of a VCard/VCalendar can also be built +directly with calls to the VObject building APIs. e.g. + + VObject *prop; + VObject *vcard = newVObject(VCCardProp); + prop = addProp(vcard,VCNameProp); + addPropValue(prop,VCFamilyNameProp,"Alden"); + addPropValue(prop,VCGivenNameProp,"Roland"); + addPropValue(vcard,VCFullNameProp,"Roland H. Alden"); + .... + +6. Converting A VObject Representation Into Its Textual Representation + =================================================================== +The VObject representation can be converted back to its textual +representation via the call to writeVObject() or writeMemVObject() +API. e.g. + a. to write to a file: + // assume vcard is of type VObject + FILE *fp = fopen("alden.vcf","w"); + writeVObject(fp,vcard); + a. to write to memory, and let the API allocate the required memory. + char* clipboard = writeVObject(0,0,vcard); + ... do something to clipboard + free(clipboard); + b. to write to a user allocated buffer: + char clipboard[16384]; + int len = 16384; + char *buf = writeVObject(clipboard,&len,vcard); + ... buf will be equal to clipboard if the write + is successful otherwise 0. + +In the case of writing to memory, the memory buffer can be either +allocated by the API or the user. If the user allocate the +memory for the buffer, then the length of the buffer needs to be +communicated to the API via a variable. The variable passed as +the length argument will be overwritten with the actual size +of the text output. A 0 return value from writeMemVObject() +indicates an error which could be caused by overflowing the +size of the buffer or lack of heap memory. + +7. Miscellaneous Notes On VObject APIs usages + ========================================== +a. vcc.h -- contains basic interfaces to the parser: + VObject* Parse_MIME(const char *input, unsigned long len); + VObject* Parse_MIME_FromFile(FILE *file); + -- both of this return a null-terminated list of + VObject that is either a VCARD or VCALENDAR. + To iterate through this list, do + VObject *t, *v; + v = Parse_Mime_FromFile(fp); + while (v) { + // ... do something to v. + t = v; + v = nextVObjectInList(v); + cleanVObject(t); + } + note that call to cleanVObject will release + resource used to represent the VObject. + +b. vobject.h -- contains basic interfaces to the VObject APIs. + see the header for more details. + The structure of VObject is purposely (hiddened) not exposed + to the user. Every access has to be done via + the APIs. This way, if we need to change the + structure or implementation, the client need not + recompile as long as the interfaces remain the + same. + +c. values of a property is determined by the property definition + itself. The vobject APIs does not attempt to enforce + any of such definition. It is the consumer's responsibility + to know what value is expected from a property. E.g. + most properties have unicode string value, so to access + the value of these type of properties, you will use + the vObjectUStringZValue() to read the value and + setVObjectUStringZValue() to set or modify the value. + Refer to the VCard and VCalendar specifications for + the definition of each property. + +d. properties name (id) are case insensitive. + +8. Brief descriptions of each APIs + =============================== + * the predefined properties' names (id) are listed under vobject.h + each is of the form VC*Prop. e.g. + #define VC7bitProp "7BIT" + #define VCAAlarmProp "AALARM" + .... + + * consumer of a VObject can only define pointers to VObject. + + * a variable of type VObjectIterator, say "i", can be used to iterate + through a VObject's properties, say "o". The APIs related to + VObjectIterator are: + void initPropIterator(VObjectIterator *i, VObject *o); + -- e.g. usage + initPropIterator(&i,o); + int moreIteration(VObjectIterator *i); + -- e.g. usage + while (moreIteration(&i)) { ... } + VObject* nextVObject(VObjectIterator *i); + -- e.g. usage + while (moreIteration(&i)) { + VObject *each = nextVObject(&i); + } + + * VObject can be chained together to form a list. e.g. of such + use is in the parser where the return value of the parser is + a link list of VObject. A link list of VObject can be + built by: + void addList(VObject **o, VObject *p); + and iterated by + VObject* nextVObjectInList(VObject *o); + -- next VObjectInList return 0 if the list + is exhausted. + + * the following APIs are mainly used to construct a VObject tree: + VObject* newVObject(const char *id); + -- used extensively internally by VObject APIs but when + used externally, its use is mainly limited to the + construction of top level object (e.g. an object + with VCCardProp or VCCalendarProp id). + + void deleteVObject(VObject *p); + -- to deallocate single VObject, for most user, use + cleanVObject(VObject *o) instead for freeing all + resources associated with the VObject. + + char* dupStr(const char *s, unsigned int size); + -- duplicate a string s. If size is 0, the string is + assume to be a null-terminated. + + void deleteStr(const char *p); + -- used to deallocate a string allocated by dupStr(); + + void setVObjectName(VObject *o, const char* id); + -- set the id of VObject o. This function is not + normally used by the user. The setting of id + is normally done as part of other APIs (e.g. + addProp()). + + void setVObjectStringZValue(VObject *o, const char *s); + -- set a string value of a VObject. + + void setVObjectUStringZValue(VObject *o, const wchar_t *s); + -- set a Unicode string value of a VObject. + + void setVObjectIntegerValue(VObject *o, unsigned int i); + -- set an integer value of a VObject. + + void setVObjectLongValue(VObject *o, unsigned long l); + -- set an long integer value of a VObject. + + void setVObjectAnyValue(VObject *o, void *t); + -- set any value of a VObject. The value type is + unspecified. + + VObject* setValueWithSize(VObject *prop, void *val, unsigned int size); + -- set a raw data (stream of bytes) value of a VObject + whose size is size. The internal VObject representation + is + this object = val + VCDataSizeProp=size + i.e. the value val will be attached to the VObject prop + and a property of VCDataSize whose value is size + is also added to the object. + + void setVObjectVObjectValue(VObject *o, VObject *p); + -- set a VObject as the value of another VObject. + + const char* vObjectName(VObject *o); + -- retrieve the VObject's Name (i.e. id). + + const char* vObjectStringZValue(VObject *o); + -- retrieve the VObject's value interpreted as + null-terminated string. + + const wchar_t* vObjectUStringZValue(VObject *o); + -- retrieve the VObject's value interpreted as + null-terminated unicode string. + + unsigned int vObjectIntegerValue(VObject *o); + -- retrieve the VObject's value interpreted as + integer. + + unsigned long vObjectLongValue(VObject *o); + -- retrieve the VObject's value interpreted as + long integer. + + void* vObjectAnyValue(VObject *o); + -- retrieve the VObject's value interpreted as + any value. + + VObject* vObjectVObjectValue(VObject *o); + -- retrieve the VObject's value interpreted as + a VObject. + + VObject* addVObjectProp(VObject *o, VObject *p); + -- add a VObject p as a property of VObject o. + (not normally used externally for building a + VObject). + + VObject* addProp(VObject *o, const char *id); + -- add a property whose name is id to VObject o. + + VObject* addPropValue(VObject *o, const char *id, const char *v); + -- add a property whose name is id and whose value + is a null-terminated string to VObject o. + + VObject* addPropSizedValue(VObject *o, const char *id, + const char *v, unsigned int size); + -- add a property whose name is id and whose value + is a stream of bytes of size size, to VObject o. + + VObject* addGroup(VObject *o, const char *g); + -- add a group g to VObject o. + e.g. if g is a.b.c, you will have + o + c + VCGroupingProp=b + VCGroupingProp=a + and the object c is returned. + + VObject* isAPropertyOf(VObject *o, const char *id); + -- query if a property by the name id is in o and + return the VObject that represent that property. + + void printVObject(VObject *o); + -- pretty print VObject o to stdout (for debugging use). + + void writeVObject(FILE *fp, VObject *o); + -- convert VObject o to its textual representation and + write it to file. + + char* writeMemVObject(char *s, int *len, VObject *o); + -- convert VObject o to its textual representation and + write it to memory. If s is 0, then memory required + to hold the textual representation will be allocated + by this API. If a variable len is passed, len will + be overwritten with the byte size of the textual + representation. If s is non-zero, then s has to + be a user allocated buffer whose size has be passed + in len as a variable. Memory allocated by the API + has to be freed with call to free. The return value + of this API is either the user supplied buffer, + the memory allocated by the API, or 0 (in case of + failure). + + void cleanStrTbl(); + -- this function has to be called when all + VObject has been destroyed. + + void cleanVObject(VObject *o); + -- release all resources used by VObject o. + + wchar_t* fakeUnicode(const char *ps, int *bytes); + -- convert char* to wchar_t*. + + extern int uStrLen(const wchar_t *u); + -- length of unicode u. + + char *fakeCString(const wchar_t *u); + -- convert wchar_t to CString (blindly assumes that + this could be done). + +9. Additional Programming Notes + ============================ +In the following notes, please refers to the listing +of Example.vcf and its VObject Representation +(shown at the end of this section). + +* Handling the Return Value of the VCard/VCalendar Parser + The example input text file contains two root VObjects + (a VCalendar and a VCard). The output of the VCard/VCalendar + parser is a null-terminated list of VObjects. For this + particular input file, the list will have two VObjects. + The following shows a template for iterating through the + output of the Parser: + + VObject *t, *v; + v = Parse_Mime_fromFileName("example.vcf"); + while (v) { + // currently, v will either be a VCard or a VCalendar + // do whatever your application need to do to + // v here ... + t = v; + v = nextVObjectInList(v); + cleanVObject(t); + } + +* Iterating Through a VCard/VCalendar VObject + From the VObject APIs point of view, a VCard VObject + is the same as a VCalendar VObject. However, the application + needs to know what are in a VCard or a VCalendar. + For example, A VCalendar VObject can have VCDCreatedProp, + a VCGEOLocationProp, etc, and one or more VCEventProp and + or VCTodoProp. The VCEventProp and VCTodoProp can have + many properties of their own, which in turn could have + more properties (e.g. VCDAlarmProp can be a VCEventProp + VObject's property, and VCRunTimeProp can be a + VCDAlarmProp VObject's property. Because a VObject tree + can be arbitrarily complex, in general, to process all + properties and values of a VObject tree, a recursive walk + is desirable. An example recursive VObject tree walk + can be found in the vobject.c source lines for printVObject* + and writeVObject* APIs. Depending on what the application need + to do with a VCard or a VCalendar, a recursive walk + of the VObject tree may or may not be desirable. An example + template of a non-recursive walk is shown below: + + void processVCardVCalendar(char *inputFile) + { + VObject *t, *v; + v = Parse_Mime_fromFileName(inputFile); + while (v) { + char *n = vObjectName(v); + if (strcmp(n,VCCardProp) == 0) { + do_VCard(v); + } + else if (strcmp(n,VCCalendarProp) == 0) { + do_VCalendar(v); + } + else { + // don't know how to handle anything else! + } + t = v; + v = nextVObjectInList(v); + cleanVObject(t); + } + } + + void do_VCard(VObject *vcard) + { + VObjectIterator t; + initPropIterator(&t,vcard); + while (moreIteration(&t)) { + VObject *eachProp = nextVObject(&t); + // The primary purpose of this example is to + // show how to iterate through a VCard VObject, + // it is not meant to be efficient at all. + char *n = vObjectName(eachProp); + if (strcmp(n,VCNameProp)==0) { + do_name(eachProp); + } + else if (strcmp(n,VCEmailProp)==0) { + do_email(eachProp); + } + else if (strcmp(n,VCLabelProp)==0) { + do_label(eachProp); + } + else if .... + } + } + + void do_VCalendar(VObject *vcal) + { + VObjectIterator t; + initPropIterator(&t,vcard); + while (moreIteration(&t)) { + VObject *eachProp = nextVObject(&t); + // The primary purpose of this example is to + // show how to iterate through a VCalendar VObject, + // it is not meant to be efficient at all. + char *n = vObjectName(eachProp); + if (strcmp(n,VCDCreatedProp)==0) { + do_DCreated(eachProp); + } + else if (strcmp(n,VCVersionProp)==0) { + do_Version(eachProp); + } + else if (strcmp(n,VCTodoProp)==0) { + do_Todo(eachProp); + } + else if (strcmp(n,VCEventProp)==0) { + do_Event(eachProp); + } + else if .... + } + } + + void do_Todo(VObject *vtodo) { ... } + + void do_Event(VObject *vevent) { ... } + + ... + +* Property's Values and Properties + The VObject APIs do not attempt to check for the + correctness of the values of a property. Nor do they + will prevent the user from attaching a non-VCard/VCalendar + standard property to a VCard/VCalendar property. Take + the example of line [11] of the example, "O.K" is not + a valid value of VCStatusProp. It is up to the application + to accept or reject the value of a property. + +* Output of printVObject + PrintVObject pretty prints a VObject tree in human + readable form. See the listing at the end of the file + for an example output of printVObject on the example + input file "Example.vcf". + + Note that binary data are not shown in the output of + printVObject. Instead, a note is made ([raw data]) to + indicate that there exists such a binary data. + +* Note on Binary Data + When the value of a property is a binary data, it is only + useful to know the size of the binary data. + + In the case of the VCard/VCalendar parser, it chooses + to represent the size information as a separate property + called VCDataSizeProp whose value is the size of the binary + data. The APIs sequence to construct the VObject subtree + of line [44] of Example.vcf is + + // VObject *vcard; + VObject *p1 = addProp(vcard,VCLogoProp); + (void) addProp(p1,VCGIFProp); + (void) addProp(p1,VCBASE64Prop); + VObject *p2 = addProp(p1,VCDataSizeProp); + (void) setVObjectLongValue(p2,1482); + setVObjectAnyValue(vcard,...pointer to binary data); + + Note the presence of VCBase64Prop will cause the + writeVObject API to output the binary data as BASE64 text. + For VCard/VCalendar application, having the VCBase64Prop + property is practically always necessary for property with + binary data as its value. + +* Note on Quoted-Printable String + String value with embedded newline are written out as + quoted-prinatable string. It is therefore important + to mark a property with a string value that has + one or more embedded newlines, with the VCQutedPrintableProp + property. e.g. + + // VObject *root; + char *msg="To be\nor\nnot to be"; + VObject *p = addPropValue(root,VCDescriptionProp,msg); + // the following is how you mark a property with + // a property. In this case, the marker is + // VCQuotedPrintableProp + addProp(p,VCQuotedPrintableProp); + +* Note on Unicode + Although, the current parser takes ASCII text file only, + string values are all stored as Unicode in the VObject tree. + For now, when using the VObject APIs to construct a + VObject tree, one should always convert ASCII string value + to a Unicode string value: + + // VObject *root; + VObject *p = addProp(root,VCSomeProp); + setVObjectUStringZValue(p,fakeUnicode(someASCIIStringZvalue)); + + An API is provided to simplify the above process: + + addPropValue(root,VCSomeProp,someASCIIStringZValue); + + Note that someASCIISTringZValue is automatically converted to + Unicode by addPropValue API, where as, the former code + sequence do an explicit call to fakeUnicode. + + To read back the value, one should use the vObjectUStringZValue + API not vObjectStringZValue API. The value returned by the + vObjectUStringZValue API is a Unicode string. If the application + do not know how to handle Unicode string, it can use the + fakeCString API to convert it back to ASCII string (as long + as the conversion is meaningful). + + Note that fakeCString return a heap allocated memory. It is + important to call deleteStr on fakeCString return value if + it is not longer required (or there will be memory leak). + + NOTE: Unfortunately, at the point when this document is written, + there is still no consensus on how Unicode is to be handled + in the textual representation of VCard/VCalendar. So, there + is no version of writeVObject and the parser to output and + input Unicode textual representation of VCard/VCalendar. + + +Example.vcf +----------- +line +number Input Text (example.vcf) +------ ---------- +1 BEGIN:VCALENDAR +2 DCREATED:19961102T100522 +3 GEO:0,0 +4 VERSION:1.0 +5 BEGIN:VEVENT +6 DTSTART:19961103T000000 +7 DTEND:20000101T000000 +8 DESCRIPTION;QUOTED-PRINTABLE:To be =0A= +9 or =0A= +10 not to be +11 STATUS:O.K. +12 X-ACTION:No action required +13 DALARM:19961103T114500;5;3;Enjoy +14 MALARM:19970101T120000;;;johny@nowhere.com;Call Mom. +15 END:VEVENT +16 +17 BEGIN:VTODO +18 DUE:19960614T0173000 +19 DESCRIPTION:Relex. +20 END:VTODO +21 +22 END:VCALENDAR +23 +24 BEGIN:VCARD +25 N:Alden;Roland +26 FN:Roland H. Alden +27 ORG:AT&T;Versit Project Office +28 TITLE:Consultant +29 EMAIL;WORK;PREF;INTERNET:ralden@ralden.com +30 LABEL;DOM;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +31 Suite 2208=0A= +32 One Pine Street=0A= +33 San Francisco, CA 94111 +34 LABEL;POSTAL;PARCEL;HOME;WORK;QUOTED-PRINTABLE:Roland H. Alden=0A= +35 Suite 2208=0A= +36 One Pine Street=0A= +37 San Francisco, CA 94111=0A= +38 U.S.A. +39 TEL;WORK;PREF;MSG:+1 415 296 9106 +40 TEL;WORK;FAX:+1 415 296 9016 +41 TEL;MSG;CELL:+1 415 608 5981 +42 ADR:;Suite 2208;One Pine Street;San Francisco;CA;94111;U.S.A. +43 SOUND:ROW-LAND H ALL-DIN +44 LOGO;GIF;BASE64: +45 R0lGODdhpgBOAMQAAP///+/v797e3s7Ozr29va2trZycnIyMjHt7e2NjY1JSUkJC + ... 30 lines of BASE64 data not shown here. +76 END:VCARD + + +VObject Representation of Example.vcf: +------------------------------------- +line +in +text +file VObject Tree as Printed by printVObject API +---- ------------------------------------------- +1 VCALENDAR +2 DCREATED="19961102T100522" +3 GEO="0,0" +4 VERSION="1.0" +5 VEVENT +6 DTSTART="19961103T000000" +7 DTEND="20000101T000000" +8 DESCRIPTION="To be +9 or +10 not to be" +8 QUOTED-PRINTABLE +11 STATUS="O.K." +12 X-ACTION="No action required" +13 DALARM +13 RUNTIME="19961103T114500" +13 SNOOZETIME="5" +13 REPEATCOUNT="3" +13 DISPLAYSTRING="Enjoy" +14 MALARM +14 RUNTIME="19970101T120000" +14 EMAIL="johny@nowhere.com" +14 NOTE="Call Mom" +17 VTODO +18 DUE="19960614T0173000" +19 DESCRIPTION="Relex." +24 VCARD +25 N +25 F="Alden" +25 G="Roland" +26 FN="Roland H. Alden" +27 ORG +27 ORGNAME="AT&T" +27 OUN="Versit Project Office" +28 TITLE="Consultant" +29 EMAIL="ralden@alden.com" +29 WORK +29 PREF +29 INTERNET +30 LABEL="Roland H. Alden +31 Suite 2208 +32 One Pine Street +33 San Francisco, CA 94111" +30 DOM +30 POSTAL +30 PARCEL +30 HOME +30 WORK +30 QUOTED-PRINTABLE +34 LABEL="Roland H. Alden +35 Suite 2208 +36 One Pine Street +37 San Francisco, CA 94111 +38 U.S.A." +34 POSTAL +34 PARCEL +34 HOME +34 WORK +34 QUOTED-PRINTABLE +39 TEL="+1 415 296 9106" +39 WORK +39 PREF +39 MSG +40 TEL="+1 415 296 9016" +40 WORK +40 FAX +41 TEL="+1 415 608 5981" +41 MSG +41 CELL +42 ADR +42 EXT ADD="Suite 2208" +42 STREET="One Pine Street" +42 L="San Francisco" +42 R="CA" +42 PC="94111" +42 C="U.S.A." +43 SOUND="ROW-LAND H ALL-DIN" +44 LOGO=[raw data] +44 GIF +44 BASE64 +44 DATASIZE=1482 diff --git a/src/php/Makefile b/src/php/Makefile index f371a382..7eab507e 100644 --- a/src/php/Makefile +++ b/src/php/Makefile @@ -1,13 +1,16 @@ +# SPDX-FileCopyrightText: Copyright Contributors to the libical project +# SPDX-License-Identifier: LGPL-2.1-only OR MPL-2.0 + all: LibicalWrap.so LibicalWrap.so: LibicalWrap.o - gcc -shared -L/usr/lib -rdynamic LibicalWrap.o ../libical/.libs/libical.a ../libicalss/.libs/libicalss.a -o LibicalWrap.so + gcc -shared -L/usr/lib -rdynamic LibicalWrap.o ../libical/.libs/libical.a ../libicalss/.libs/libicalss.a -o LibicalWrap.so LibicalWrap.o: LibicalWrap.c gcc -fpic -I/usr/include/php4/TSRM/ -I/usr/include/php4/ -I/usr/include/php4/Zend -I/usr/include/php4/main -c LibicalWrap.c -o LibicalWrap.o LibicalWrap.c: LibicalWrap.i - swig -php -o LibicalWrap.c LibicalWrap.i + swig -php -o LibicalWrap.c LibicalWrap.i clean: rm LibicalWrap.so LibicalWrap.o LibicalWrap.c diff --git a/src/php/README b/src/php/README deleted file mode 100644 index 15088204..00000000 --- a/src/php/README +++ /dev/null @@ -1,17 +0,0 @@ -Arnout Engelen pointed out, that you could create a php libical wrapper: - -PHP currently seems to lack proper iCalendar libraries. -Since there already is a LibicalWrap.i for the Python -bindings, it's not very hard to make a libical .so that -can be accessed from PHP. Would be a valuable building -block in the practical adoption of the iCalendar -standard (imho). - -I'm attaching a Makefile how I whipped together the -.so, and a small example of how to use the resulting -library. Obviously this is not good enough for in the -official distribution, but it'll probably give you an -idea of how to make a PHP binding. - -However, it's here for documentation purposes, until s.b. comes around the corner -with the demand and a Patch how to implement it clean. Feeling addressed? Send Diffs! diff --git a/src/php/README.txt b/src/php/README.txt new file mode 100644 index 00000000..15088204 --- /dev/null +++ b/src/php/README.txt @@ -0,0 +1,17 @@ +Arnout Engelen pointed out, that you could create a php libical wrapper: + +PHP currently seems to lack proper iCalendar libraries. +Since there already is a LibicalWrap.i for the Python +bindings, it's not very hard to make a libical .so that +can be accessed from PHP. Would be a valuable building +block in the practical adoption of the iCalendar +standard (imho). + +I'm attaching a Makefile how I whipped together the +.so, and a small example of how to use the resulting +library. Obviously this is not good enough for in the +official distribution, but it'll probably give you an +idea of how to make a PHP binding. + +However, it's here for documentation purposes, until s.b. comes around the corner +with the demand and a Patch how to implement it clean. Feeling addressed? Send Diffs! diff --git a/src/php/test.php b/src/php/test.php index 98ee7c8d..648e1dcd 100644 --- a/src/php/test.php +++ b/src/php/test.php @@ -1,5 +1,8 @@ Date: Tue, 7 Jun 2022 17:38:13 -0400 Subject: src/libical/icaltz-util.h - hide icaltzutil_fetch_timezone icaltzutil_fetch_timezone should never have been an exported symbol -- it is intended for library-use only fixes: #466 --- ReleaseNotes.txt | 58 ++++++++++++++++++++++++----------------------- src/libical/icaltz-util.h | 4 +++- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index ca8644e3..5a4c023b 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -13,41 +13,43 @@ Version 3.1.0 (NOT RELEASED YET): * libical-glib requires a C11 compliant compiler * draft-ietf-calext-eventpub-extensions-19 (RFC 9073) support added * draft-ietf-calext-valarm-extensions-07 (RFC 9074) support added + * libical-glib API is considered stable; no longer need to define LIBICAL_GLIB_UNSTABLE_API=1 + before including * Allow previous recurrence iteration * Improved performance of recurrence iterators * All ical*_new_clone() functions have been deprecated in favour of ical*_clone() * Added support for Event Publishing (RFC 9073) and VALARM (RFC 9074) Extensions - * New publicly available functions: - + icalrecurrencetype_encode_day - + icalrecurrencetype_encode_month - + icaltzutil_set_zone_directory - + icalcomponent_clone - + icalproperty_clone - + icalparameter_clone - + icalvalue_clone - + icalcluster_clone - + icalrecur_iterator_prev - + icalcomponent_set_x_name - + icalcomponent_get_x_name - + icalcomponent_get_component_name - + icalcomponent_get_component_name_r - * ical_set_invalid_rrule_handling_setting - * ical_get_invalid_rrule_handling_setting * icaltzutil_get_zone_directory() can use the TZDIR environment to find system zoneinfo - * libical-glib API is considered stable; no longer need to define LIBICAL_GLIB_UNSTABLE_API=1 - before including . + * New publicly available functions: + + icalrecurrencetype_encode_day + + icalrecurrencetype_encode_month + + icaltzutil_set_zone_directory + + icalcomponent_clone + + icalproperty_clone + + icalparameter_clone + + icalvalue_clone + + icalcluster_clone + + icalrecur_iterator_prev + + icalcomponent_set_x_name + + icalcomponent_get_x_name + + icalcomponent_get_component_name + + icalcomponent_get_component_name_r + + ical_set_invalid_rrule_handling_setting + + ical_get_invalid_rrule_handling_setting * Deprecated functions: - + caldat (replaced by internal function icaldat_int()) - + juldat (replaced by internal function juldat_int()) - + icalcomponent_new_clone - + icalproperty_new_clone - + icalparameter_new_clone - + icalvalue_new_clone - + icalcluster_new_clone + + caldat (replaced by internal function icaldat_int()) + + juldat (replaced by internal function juldat_int()) + + icalcomponent_new_clone + + icalproperty_new_clone + + icalparameter_new_clone + + icalvalue_new_clone + + icalcluster_new_clone + * No longer publicly available functions: + + icaltzutil_fetch_timezone * Removed unused declarations: - (were in the public headers but not used at all) - + struct icaltimezonetype - + struct icaltimezonephase + (were in the public headers but not used at all) + + struct icaltimezonetype + + struct icaltimezonephase Version 3.0.15 (UNRELEASED): ---------------------------- diff --git a/src/libical/icaltz-util.h b/src/libical/icaltz-util.h index bc24cdd1..25879748 100644 --- a/src/libical/icaltz-util.h +++ b/src/libical/icaltz-util.h @@ -44,7 +44,9 @@ LIBICAL_ICAL_EXPORT void icaltzutil_set_zone_directory(const char *zonepath); * * @param location is a string containing the name of a location with a timezone file * found under the zoneinfo data. + * + * @since 3.1 no longer publicly accessible */ -LIBICAL_ICAL_EXPORT icalcomponent *icaltzutil_fetch_timezone(const char *location); +LIBICAL_ICAL_NO_EXPORT icalcomponent *icaltzutil_fetch_timezone(const char *location); #endif -- cgit v1.2.1 From 29fade679cfa48f415ec3504a1a1832fa4b211de Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Tue, 7 Jun 2022 17:49:02 -0400 Subject: libical-glib/api/i-cal-time.xml - improve i_cal_time_compare doc remove redundancy for i_cal_time_compare() fixes: #533 --- src/libical-glib/api/i-cal-time.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libical-glib/api/i-cal-time.xml b/src/libical-glib/api/i-cal-time.xml index dcab62e3..c319ea08 100644 --- a/src/libical-glib/api/i-cal-time.xml +++ b/src/libical-glib/api/i-cal-time.xml @@ -143,7 +143,7 @@ - Returns -1, 0, or 1 to indicate that a less than b, a==b or a larger than b. + i_cal_time_compare returns an integer indicating the result of the comparison, as follow: -- cgit v1.2.1 From 393273f73b8e25881601c700f1392bc379e3396d Mon Sep 17 00:00:00 2001 From: Michael McClurg Date: Wed, 8 Jun 2022 22:22:13 -0600 Subject: Avoid {#mainpage} in readme --- README.md | 2 +- doc/Doxyfile.cmake | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 46699a3d..ab0531c2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Libical — an implementation of iCalendar protocols and data formats {#mainpage} +# Libical — an implementation of iCalendar protocols and data formats [![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) diff --git a/doc/Doxyfile.cmake b/doc/Doxyfile.cmake index 9367f7e7..123fc512 100644 --- a/doc/Doxyfile.cmake +++ b/doc/Doxyfile.cmake @@ -81,6 +81,7 @@ WARN_LOGFILE = doxygen.log # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = @DOXYGEN_INPUT@ +USE_MDFILE_AS_MAINPAGE = README.md FILE_PATTERNS = *.cpp \ *.c \ *.cc \ -- cgit v1.2.1 From 1b97dd16107943aa84558d26f11b92265c71627a Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 9 Jun 2022 17:14:26 -0400 Subject: improve doxgen documentation. fix doxygen warnings --- doc/Doxyfile.cmake | 2 +- src/libical/icalarray.h | 32 ++++++------ src/libical/icalattach.h | 44 ++++++++-------- src/libical/icalcomponent.h | 4 +- src/libical/icalduration.h | 32 ++++++------ src/libical/icalerror.h | 40 +++++++-------- src/libical/icalmemory.h | 24 ++++----- src/libical/icalparameter.h | 114 +++++++++++++++++++++--------------------- src/libical/icalparser.h | 52 +++++++++---------- src/libical/icalperiod.h | 14 +++--- src/libical/icalproperty.h | 2 +- src/libical/icalrestriction.h | 6 +-- src/libical/icaltime.h | 4 +- src/libicalss/icalspanlist.c | 12 ++--- src/libicalss/icalspanlist.h | 8 +-- 15 files changed, 195 insertions(+), 195 deletions(-) diff --git a/doc/Doxyfile.cmake b/doc/Doxyfile.cmake index 41c166b2..8ecbf3f2 100644 --- a/doc/Doxyfile.cmake +++ b/doc/Doxyfile.cmake @@ -106,7 +106,7 @@ EXCLUDE_PATTERNS = */.svn/* \ EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO -IMAGE_PATH = @CMAKE_SOURCE_DIR@/docs +IMAGE_PATH = @CMAKE_SOURCE_DIR@/doc INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO diff --git a/src/libical/icalarray.h b/src/libical/icalarray.h index 2fc9fb26..32ff4ae7 100644 --- a/src/libical/icalarray.h +++ b/src/libical/icalarray.h @@ -42,29 +42,29 @@ struct _icalarray }; /** - * @brief Creates a new ::icalarray object. + * @brief Creates a new icalarray object. * @param element_size The size of the elements to be held by the array * @param increment_size How many extra elements worth of space to allocate on expansion - * @return The new ::icalarray object + * @return The new icalarray object * @sa icalarray_free() * - * Creates a new ::icalarray object. The parameter @a element_size determines + * Creates a new icalarray object. The parameter @a element_size determines * the size of the elements that the array will hold (in bytes). The parameter * @a increment_size determines how many extra elements to be allocated when * expanding the array for performance reasons (expansions are expensive, since * it involves copying all existing elements). * * @par Error handling - * If @a element_size or @a increment_size is not at least 1, using the ::icalarray + * If @a element_size or @a increment_size is not at least 1, using the icalarray * object results in undefined behaviour. If there is an error while creating the * object, it returns `NULL` and sets ::icalerrno to ::ICAL_NEWFAILED_ERROR. * * @par Ownership - * The returned ::icalarray object is owned by the caller of the function, + * The returned icalarray object is owned by the caller of the function, * and needs to be released properly after it's no longer needed with * icalarray_free(). * - * ### Usage + * @par Usage * ```c * // create new array * icalarray *array = icalarray_new(sizeof(int), 1); @@ -81,11 +81,11 @@ struct _icalarray LIBICAL_ICAL_EXPORT icalarray *icalarray_new(size_t element_size, size_t increment_size); /** - * @brief Copies an existing ::icalarray and its elements, creating a new one. + * @brief Copies an existing icalarray and its elements, creating a new one. * @param array The array to copy * @return A new array, holding all the elements of @a array * - * Creates a new ::icalarray object, copying all the existing elements from + * Creates a new icalarray object, copying all the existing elements from * @a array as well as its properties (such as @a element_size and * @a increment_size) over. * @@ -98,7 +98,7 @@ LIBICAL_ICAL_EXPORT icalarray *icalarray_new(size_t element_size, size_t increme * The created copy is owned by the caller of the function, and needs to * be released with icalarray_free() after it's no longer being used. * - * ### Usage + * @par Usage * ```c * // create new array * icalarray *array = icalarray_new(sizeof(int), 1); @@ -122,7 +122,7 @@ LIBICAL_ICAL_EXPORT icalarray *icalarray_copy(icalarray *array); * @brief Frees an array object and everything that it contains. * @param array The array to release * - * ### Example + * @par Example * ```c * // creating an array * icalarray *array = icalarray_new(sizeof(int), 1); @@ -149,7 +149,7 @@ LIBICAL_ICAL_EXPORT void icalarray_free(icalarray *array); * The @a element does not get consumed by the method, since it creates * a copy of it * - * ### Usage + * @par Usage * ```c * // create new array * icalarray *array = icalarray_new(sizeof(int), 1); @@ -176,7 +176,7 @@ LIBICAL_ICAL_EXPORT void icalarray_append(icalarray *array, const void *element) * If the array is empty, using this function results in undefined behaviour. * If the @a position is non-existent, it removes the last element. * - * ### Usage + * @par Usage * ```c * // create new array * icalarray *array = icalarray_new(sizeof(int), 2); @@ -227,10 +227,10 @@ LIBICAL_ICAL_EXPORT void icalarray_remove_element_at(icalarray *array, size_t po * results in undefined behaviour. * * @par Ownership - * The element is owned by the ::icalarray, it must not be freed by + * The element is owned by the icalarray, it must not be freed by * the user. * - * ### Usage + * @par Usage * ```c * // create new array * icalarray *array = icalarray_new(sizeof(int), 1); @@ -255,7 +255,7 @@ LIBICAL_ICAL_EXPORT void icalarray_remove_element_at(icalarray *array, size_t po LIBICAL_ICAL_EXPORT void *icalarray_element_at(icalarray *array, size_t position); /** - * @brief Sorts the elements of an ::icalarray using the given comparison function. + * @brief Sorts the elements of an icalarray using the given comparison function. * @param array The array to sort * @param compare The comparison function to use * @@ -263,7 +263,7 @@ LIBICAL_ICAL_EXPORT void *icalarray_element_at(icalarray *array, size_t position * Passing `NULL` as either @a array or @a compare results in undefined * behaviour. * - * ### Usage + * @par Usage * ```c * int compare_ints(const void *a, const void *b) { * return *((int*)a) - *((int*)b); diff --git a/src/libical/icalattach.h b/src/libical/icalattach.h index 9a606773..6eb7b851 100644 --- a/src/libical/icalattach.h +++ b/src/libical/icalattach.h @@ -23,7 +23,7 @@ * With the `ATTACH` property, the iCal standard defines a way to * associate a document object with a calendar component. * - * These are represented with ::icalattach objects in libical. + * These are represented with icalattach objects in libical. * This file contains functions to create and work with these * objects. */ @@ -37,7 +37,7 @@ * @typedef icalattach * @brief An iCal attach object representing a link to a document object. * - * Represents an association with a document object. ::icalattach objects + * Represents an association with a document object. icalattach objects * are reference counted, meaning that if the last reference to them is * removed (with icalattach_unref()), they are destroyed. */ @@ -54,9 +54,9 @@ typedef struct icalattach_impl icalattach; typedef void (*icalattach_free_fn_t) (char *data, void *user_data); /** - * @brief Creates new ::icalattach object from a URL. + * @brief Creates new icalattach object from a URL. * @param url The URL to create the object from - * @return An ::icalattach object with the given URL as association + * @return An icalattach object with the given URL as association * @sa icalattach_unref() * * @par Error handling @@ -65,12 +65,12 @@ typedef void (*icalattach_free_fn_t) (char *data, void *user_data); * returns `NULL` and sets `errno` to `ENOMEM`. * * @par Ownership - * The returned ::icalattach object is owned by the caller of the function. - * ::icalattach objects are reference counted, which means that after + * The returned icalattach object is owned by the caller of the function. + * icalattach objects are reference counted, which means that after * use, icalattach_unref() needs to be called to signal that they are * not used anymore. * - * ### Usage + * @par Usage * ```c * // creates new * icalattach *attach = icalattach_new_from_url("http://example.com"); @@ -86,11 +86,11 @@ typedef void (*icalattach_free_fn_t) (char *data, void *user_data); LIBICAL_ICAL_EXPORT icalattach *icalattach_new_from_url(const char *url); /** - * @brief Creates new ::icalattach object from data. - * @param data The data to create the ::icalattach from + * @brief Creates new icalattach object from data. + * @param data The data to create the icalattach from * @param free_fn The function to free the data * @param free_fn_data Data to pass to the @a free_fn - * @return An ::icalattach object with the given data + * @return An icalattach object with the given data * @sa icalattach_unref() * * @par Error handling @@ -99,8 +99,8 @@ LIBICAL_ICAL_EXPORT icalattach *icalattach_new_from_url(const char *url); * returns `NULL` and sets `errno` to `ENOMEM`. * * @par Ownership - * The returned ::icalattach object is owned by the caller of the function. - * ::icalattach objects are reference counted, which means that after + * The returned icalattach object is owned by the caller of the function. + * icalattach objects are reference counted, which means that after * use, icalattach_unref() needs to be called to signal that they are * not used anymore. */ @@ -109,7 +109,7 @@ LIBICAL_ICAL_EXPORT icalattach *icalattach_new_from_data(const char *data, void *free_fn_data); /** - * @brief Increments reference count of the ::icalattach. + * @brief Increments reference count of the icalattach. * @param attach The object to increase the reference count of * @sa icalattach_unref() * @@ -125,7 +125,7 @@ LIBICAL_ICAL_EXPORT icalattach *icalattach_new_from_data(const char *data, LIBICAL_ICAL_EXPORT void icalattach_ref(icalattach *attach); /** - * @brief Decrements reference count of the ::icalattach. + * @brief Decrements reference count of the icalattach. * @param attach The object to decrease the reference count of * @sa icalattach_ref() * @@ -140,7 +140,7 @@ LIBICAL_ICAL_EXPORT void icalattach_ref(icalattach *attach); * Calling this function releases the icalattach back to the library, * and it must not be used afterwards. * - * ### Usage + * @par Usage * ```c * // creates new * icalattach *attach = icalattach_new_from_url("http://example.com"); @@ -153,7 +153,7 @@ LIBICAL_ICAL_EXPORT void icalattach_unref(icalattach *attach); /** * @brief Determines if @a attach is an URL. - * @param attach the ::icalattach object to check + * @param attach the icalattach object to check * @return 1 if it is a URL, otherwise 0. * @sa icalattach_get_url() * @@ -161,7 +161,7 @@ LIBICAL_ICAL_EXPORT void icalattach_unref(icalattach *attach); * Returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR if * @a attach is `NULL`. * - * ### Usage + * @par Usage * ```c * // creates new * icalattach *attach = icalattach_new_from_url("http://example.com"); @@ -176,12 +176,12 @@ LIBICAL_ICAL_EXPORT void icalattach_unref(icalattach *attach); LIBICAL_ICAL_EXPORT int icalattach_get_is_url(icalattach *attach); /** - * @brief Returns the URL of the ::icalattach object. + * @brief Returns the URL of the icalattach object. * @param attach The object from which to return the URL * @return The URL of the object * @sa icalattach_get_is_url() * - * Returns the URL of the ::icalattach object. + * Returns the URL of the icalattach object. * * @par Error handling * Returns `NULL` and set ::icalerrno to ::ICAL_BADARG_ERROR if @@ -192,7 +192,7 @@ LIBICAL_ICAL_EXPORT int icalattach_get_is_url(icalattach *attach); * The string returned is owned by libical and must not be freed * by the caller. * - * # Usage + * @par Usage * ```c * // creates new * icalattach *attach = icalattach_new_from_url("http://example.com"); @@ -208,12 +208,12 @@ LIBICAL_ICAL_EXPORT int icalattach_get_is_url(icalattach *attach); LIBICAL_ICAL_EXPORT const char *icalattach_get_url(icalattach *attach); /** - * @brief Returns the data of the ::icalattach object. + * @brief Returns the data of the icalattach object. * @param attach The object from which to return the data * @return The data of the object * @sa icalattach_get_is_url() * - * Returns the URL of the ::icalattach object. + * Returns the URL of the icalattach object. * * @par Error handling * Returns `NULL` and set ::icalerrno to ::ICAL_BADARG_ERROR if diff --git a/src/libical/icalcomponent.h b/src/libical/icalcomponent.h index 70533a34..2b00fee7 100644 --- a/src/libical/icalcomponent.h +++ b/src/libical/icalcomponent.h @@ -449,8 +449,8 @@ LIBICAL_ICAL_EXPORT int icalproperty_recurrence_is_excluded(icalcomponent *comp, * * It will filter out events that are specified as an EXDATE or an EXRULE. * - * @todo We do not filter out duplicate RRULES/RDATES - * @todo We do not handle RDATEs with explicit periods + * TODO: We do not filter out duplicate RRULES/RDATES + * TODO: We do not handle RDATEs with explicit periods */ LIBICAL_ICAL_EXPORT void icalcomponent_foreach_recurrence(icalcomponent *comp, struct icaltimetype start, diff --git a/src/libical/icalduration.h b/src/libical/icalduration.h index 228dab7c..0c3fe6e8 100644 --- a/src/libical/icalduration.h +++ b/src/libical/icalduration.h @@ -50,7 +50,7 @@ struct icaldurationtype * @param t The duration in seconds * @return An ::icaldurationtype representing the duration @a t in seconds * - * ### Example + * @par Example * ```c * // create a new icaldurationtype with a duration of 60 seconds * struct icaldurationtype duration; @@ -71,7 +71,7 @@ LIBICAL_ICAL_EXPORT struct icaldurationtype icaldurationtype_from_int(int t); * When given bad input, it sets ::icalerrno to ::ICAL_MALFORMEDDATA_ERROR and * returns icaldurationtype_bad_duration(). * - * ### Usage + * @par Usage * ```c * // create a new icaldurationtype * struct icaldurationtype duration; @@ -88,7 +88,7 @@ LIBICAL_ICAL_EXPORT struct icaldurationtype icaldurationtype_from_string(const c * @param duration The duration to convert to seconds * @return An `int` representing the duration in seconds * - * ### Usage + * @par Usage * ```c * // create icaldurationtype with given duration * struct icaldurationtype duration; @@ -102,15 +102,15 @@ LIBICAL_ICAL_EXPORT int icaldurationtype_as_int(struct icaldurationtype duration /** * Converts an icaldurationtype into the iCal format as string. - * @param The icaldurationtype to convert to iCal format + * @param d is the icaldurationtype to convert to iCal format * @return A string representing duration @p d in iCal format * @sa icaldurationtype_as_ical_string_r() * - * @b Ownership + * @par Ownership * The string returned by this function is owned by the caller and needs to be * released with `free()` after it's no longer needed. * - * @b Usage + * @par Usage * ```c * // create new duration * struct icaldurationtype duration; @@ -128,15 +128,15 @@ LIBICAL_ICAL_EXPORT char *icaldurationtype_as_ical_string(struct icaldurationtyp /** * Converts an icaldurationtype into the iCal format as string. - * @param The icaldurationtype to convert to iCal format + * @param d is the icaldurationtype to convert to iCal format * @return A string representing duration @p d in iCal format * @sa icaldurationtype_as_ical_string() * - * @b Ownership + * @par Ownership * The string returned by this function is owned by libical and must not be * released by the caller of the function. * - * @b Usage + * @par Usage * ```c * // create new duration * struct icaldurationtype duration; @@ -153,7 +153,7 @@ LIBICAL_ICAL_EXPORT char *icaldurationtype_as_ical_string_r(struct icaldurationt * @return An ::icaldurationtype with a zero length * @sa icaldurationtype_is_null_duration() * - * ### Usage + * @par Usage * ```c * // create null duration * struct icaldurationtype duration; @@ -176,7 +176,7 @@ LIBICAL_ICAL_EXPORT struct icaldurationtype icaldurationtype_null_duration(void) * @return A bad duration * @sa icaldurationtype_is_bad_duration() * - * ### Usage + * @par Usage * ```c * // create bad duration * struct icaldurationtype duration; @@ -194,7 +194,7 @@ LIBICAL_ICAL_EXPORT struct icaldurationtype icaldurationtype_bad_duration(void); * @return 1 if the duration is a null duration, 0 otherwise * @sa icalduration_null_duration() * - * ### Usage + * @par Usage * ``` * // make null duration * struct icaldurationtype duration; @@ -212,7 +212,7 @@ LIBICAL_ICAL_EXPORT int icaldurationtype_is_null_duration(struct icaldurationtyp * @return 1 if the duration is a bad duration, 0 otherwise * @sa icalduration_bad_duration() * - * ### Usage + * @par Usage * ``` * // make bad duration * struct icaldurationtype duration; @@ -225,12 +225,12 @@ LIBICAL_ICAL_EXPORT int icaldurationtype_is_null_duration(struct icaldurationtyp LIBICAL_ICAL_EXPORT int icaldurationtype_is_bad_duration(struct icaldurationtype d); /** - * @brief Adds a duration to an ::icaltime object and returns the result. + * @brief Adds a duration to an icaltime object and returns the result. * @param t The time object to add the duration to * @param d The duration to add to the time object * @return The new ::icaltimetype which has been added the duration to * - * ### Example + * @par Example * ```c * struct icaltimetype time; * struct icaldurationtype duration; @@ -253,7 +253,7 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_add(struct icaltimetype t, * @return An ::icaldurationtype representing the duration the elapsed between * @a t1 and @a t2 * - * ### Usage + * @par Usage * ```c * struct icaltimetype t1 = icaltime_from_day_of_year(111, 2018); * struct icaltimetype t2 = icaltime_from_day_of_year(112, 2018); diff --git a/src/libical/icalerror.h b/src/libical/icalerror.h index 7fd1253a..90a6c438 100644 --- a/src/libical/icalerror.h +++ b/src/libical/icalerror.h @@ -118,7 +118,7 @@ typedef enum icalerrorenum * Yields a pointer to the current ::icalerrno value. This can * be used to access (read from and write to) it. * - * ### Examples + * @par Examples * ```c * assert(*icalerrno_return() == icalerrno); * ``` @@ -131,7 +131,7 @@ LIBICAL_ICAL_EXPORT icalerrorenum *icalerrno_return(void); * @note Pseudo-variable that can be used to access the current * ::icalerrno. * - * ### Usage + * @par Usage * ```c * if(icalerrno == ICAL_PARSE_ERROR) { * // ... @@ -149,7 +149,7 @@ LIBICAL_ICAL_EXPORT icalerrorenum *icalerrno_return(void); * @warning NOT THREAD SAFE: it is recommended that you do not change * this in a multithreaded program. * - * ### Usage + * @par Usage * ```c * icalerror_set_errors_are_fatal(true); // default * icalerror_set_errors_are_fatal(false); @@ -161,7 +161,7 @@ LIBICAL_ICAL_EXPORT void icalerror_set_errors_are_fatal(int fatal); * @brief Determine if errors are fatal * @return True if libical errors are fatal * - * ### Usage + * @par Usage * ```c * if(icalerror_get_errors_are_fatal()) { * // since errors are fatal, this will abort the @@ -179,7 +179,7 @@ LIBICAL_ICAL_EXPORT int icalerror_get_errors_are_fatal(void); * @brief Prints a formatted warning message to stderr * @param message Warning message to print * - * ### Usage + * @par Usage * ```c * icalerror_warn("Non-standard tag encountered"); * ``` @@ -196,7 +196,7 @@ LIBICAL_ICAL_EXPORT int icalerror_get_errors_are_fatal(void); /** * @brief Resets icalerrno to ::ICAL_NO_ERROR * - * ### Usage + * @par Usage * ```c * if(icalerrno == ICAL_PARSE_ERROR) { * // ignore parsing errors @@ -239,7 +239,7 @@ typedef enum icalerrorstate * The string that is returned is owned by the library and must not * be free'd() by the user. * - * ### Usage + * @par Usage * ```c * if(icalerrno != ICAL_NO_ERROR) { * printf("%s\n", icalerror_strerror(icalerrno)); @@ -259,7 +259,7 @@ LIBICAL_ICAL_EXPORT const char *icalerror_strerror(icalerrorenum e); * The string that is returned is owned by the library and must not * be free'd() by the user. * - * ### Usage + * @par Usage * ```c * if(icalerrno != ICAL_NO_ERROR) { * printf("%s\n", icalerror_perror()); @@ -272,7 +272,7 @@ LIBICAL_ICAL_EXPORT const char *icalerror_perror(void); * @brief Prints backtrace * @note Only works on systems that support it (HAVE_BACKTRACE enabled). * - * ### Usage + * @par Usage * ``` * if(icalerrno != ICAL_NO_ERROR) { * ical_bt(); @@ -289,7 +289,7 @@ LIBICAL_ICAL_EXPORT void ical_bt(void); * Sets the severity of a given error. For example, it can be used to * set the severity of an ::ICAL_PARSE_ERROR to be an ::ICAL_ERROR_NONFATAL. * - * ### Usage + * @par Usage * ```c * icalerror_set_error_state(ICAL_PARSE_ERROR, ICAL_ERROR_NONFATAL); * ``` @@ -312,7 +312,7 @@ LIBICAL_ICAL_EXPORT icalerrorstate icalerror_get_error_state(icalerrorenum error * If the error specified in @a str can't be found, instead * ::ICAL_UNKNOWN_ERROR is returned. * - * ### Usage + * @par Usage * ```c * assert(icalerror_error_from_string("PARSE") == ICAL_PARSE_ERROR); * assert(icalerror_error_from_string("NONSENSE") == ICAL_UNKNOWN_ERROR); @@ -330,7 +330,7 @@ LIBICAL_ICAL_EXPORT icalerrorenum icalerror_error_from_string(const char *str); * and ::ICAL_ERRORS_ARE_FATAL is true, it prints a warning to @a stderr * and aborts the process. * - * ### Usage + * @par Usage * ```c * icalerror_set_errno(ICAL_PARSE_ERROR); * ``` @@ -355,7 +355,7 @@ if(icalerror_get_error_state(x) == ICAL_ERROR_FATAL || \ * and ::ICAL_ERRORS_ARE_FATAL is true, it prints a warning to @a stderr * and aborts the process. * - * ### Usage + * @par Usage * ```c * icalerror_set_errno(ICAL_PARSE_ERROR); * ``` @@ -429,7 +429,7 @@ if (!(test)) { \ * test if the parameter @a arg is correct. If the assertion fails, * it sets ::icalerrno to ::ICAL_BADARG_ERROR. * - * ### Example + * @par Example * ```c * void test_function(icalcomponent *component) { * icalerror_check_arg(component != 0, "component"); @@ -453,7 +453,7 @@ if (!(test)) { \ * it sets ::icalerrno to ::ICAL_BADARG_ERROR and causes the enclosing * function to return `void`. * - * ### Example + * @par Example * ```c * void test_function(icalcomponent *component) { * icalerror_check_arg_rv(component != 0, "component"); @@ -478,7 +478,7 @@ if (!(test)) { \ * it sets ::icalerrno to ::ICAL_BADARG_ERROR and causes the enclosing * function to return `0`. * - * ### Example + * @par Example * ```c * int test_function(icalcomponent *component) { * icalerror_check_arg_rz(component != 0, "component"); @@ -505,7 +505,7 @@ if (!(test)) { \ * it aborts the process with `assert(0)` and causes the enclosing * function to return @a error. * - * ### Example + * @par Example * ```c * icalcomponent *test_function(icalcomponent *component) { * icalerror_check_arg_re(component != 0, "component", NULL); @@ -533,7 +533,7 @@ if (!(test)) { \ * it sets ::icalerrno to ::ICAL_BADARG_ERROR and causes the enclosing * function to return @a x. * - * ### Example + * @par Example * ```c * icalcomponent *test_function(icalcomponent *component) { * icalerror_check_arg_rx(component != 0, "component", NULL); @@ -560,7 +560,7 @@ if (!(test)) { \ * ::ICAL_ERROR_NONFATAL, and thus suppressed. Error states can be * restored with icalerror_restore(). * - * ### Usage + * @par Usage * ```c * // suppresses internal errors * icalerror_supress("INTERNAL"); @@ -575,7 +575,7 @@ LIBICAL_ICAL_EXPORT icalerrorstate icalerror_supress(const char *error); * * Calling the function changes the ::icalerrorstate of the given error. * - * ### Usage + * @par Usage * ```c * // suppress internal errors * icalerror_supress("INTERNAL"); diff --git a/src/libical/icalmemory.h b/src/libical/icalmemory.h index 7eb7e010..a57a5c74 100644 --- a/src/libical/icalmemory.h +++ b/src/libical/icalmemory.h @@ -50,7 +50,7 @@ * @return A pointer to the newly created buffer on the ring * * Creates a temporary buffer on the ring. Regardless of what @a size you - * specify, the buffer will always be at least ::MIN_BUFFER_SIZE big, and it + * specify, the buffer will always be at least MIN_BUFFER_SIZE big, and it * will be zeroed out. * * @par Error handling @@ -62,7 +62,7 @@ * caller and the returned memory will be automatically reclaimed as more items * are added to the ring buffer. * - * ### Usage + * @par Usage * ```c * char *str = icalmemory_tmp_buffer(256); * strcpy(str, "some data"); @@ -88,7 +88,7 @@ LIBICAL_ICAL_EXPORT void *icalmemory_tmp_buffer(size_t size); * caller, and it will be automatically reclaimed as more items are added to the * buffer. * - * ### Usage + * @par Usage * ```c * const char *str = "Example string"; * char *tmp_copy = icalmemory_tmp_copy(str); @@ -101,7 +101,7 @@ LIBICAL_ICAL_EXPORT char *icalmemory_tmp_copy(const char *str); * @param buf The externally allocated buffer to add to the ring * * Adds an externally allocated buffer to the ring. This ensures that libical - * will `free()` the buffer automatically, either after ::BUFFER_RING_SIZE other + * will `free()` the buffer automatically, either after BUFFER_RING_SIZE other * buffers have been created or added, or after ::icalmemory_free_ring() has * been called. * @@ -113,7 +113,7 @@ LIBICAL_ICAL_EXPORT char *icalmemory_tmp_copy(const char *str); * be `free()`d manually anymore, it leads to a double-`free()` when icalmemory * reclaims the memory. * - * ### Usage + * @par Usage * ```c * char *buf = calloc(256, sizeof(char)); * @@ -125,11 +125,11 @@ LIBICAL_ICAL_EXPORT void icalmemory_add_tmp_buffer(void *buf); /** * @brief Frees all memory used in the ring * - * Frees all memory used in the ring. Depending on if ::HAVE_PTHREAD is set or + * Frees all memory used in the ring. Depending on if HAVE_PTHREAD is set or * not, the ring buffer is allocated on a per-thread basis, meaning that if all * rings are to be released, it must be called once in every thread. * - * ### Usage + * @par Usage * ``` c * void *buf = icalmemory_tmp_buffer(256); * @@ -162,7 +162,7 @@ LIBICAL_ICAL_EXPORT void icalmemory_free_ring(void); * This creates a new (non-temporary) buffer of the specified @a size. All * buffers returned by this method are zeroed-out. * - * ### Usage + * @par Usage * ```c * // create buffer * char *buffer = icalmemory_new_buffer(50); @@ -194,7 +194,7 @@ LIBICAL_ICAL_EXPORT void *icalmemory_new_buffer(size_t size); * appropriate icalmemory_free_buffer() method. The old buffer, @a buf, can not * be used anymore after calling this method. * - * ### Usage + * @par Usage * ```c * // create new buffer * char *buffer = icalmemory_new_buffer(10); @@ -249,7 +249,7 @@ LIBICAL_ICAL_EXPORT void icalmemory_free_buffer(void *buf); * size of @a buf and will be changed if @a buf is reallocated. @a pos will * point to the last byte of the new string in @a buf, usually a `'\0'` * - * ### Example + * @par Example * ```c * // creates a new buffer * int buffer_len = 15; @@ -291,7 +291,7 @@ LIBICAL_ICAL_EXPORT void icalmemory_append_string(char **buf, char **pos, size_t * reallocated. @a pos will point to the new terminating `'\0'` character @a * buf. * - * ### Example + * @par Example * ```c * // creates a new buffer * int buffer_len = 15; @@ -328,7 +328,7 @@ LIBICAL_ICAL_EXPORT void icalmemory_append_char(char **buf, char **pos, size_t * * A wrapper around `strdup()`. Partly to trap calls to `strdup()`, partly * because in `-ansi`, `gcc` on Red Hat claims that `strdup()` is undeclared. * - * ### Usage + * @par Usage * ```c * const char *my_str = "LibIcal"; * char *dup = icalmemory_strdup(my_str); diff --git a/src/libical/icalparameter.h b/src/libical/icalparameter.h index 57630a22..494cc529 100644 --- a/src/libical/icalparameter.h +++ b/src/libical/icalparameter.h @@ -33,9 +33,9 @@ /*typedef struct icalparameter_impl icalparameter;*/ /** - * @brief Creates new ::icalparameter object. - * @param kind The kind of ::icalparameter to create. - * @return An ::icalparameter with the given kind. + * @brief Creates new icalparameter object. + * @param kind The kind of icalparameter to create. + * @return An icalparameter with the given kind. * * @par Error handling * If there was an internal error regarding @@ -46,7 +46,7 @@ * Objects created by this method are owned by the caller and * must be released with the icalparameter_free() method. * - * ### Usage + * @par Usage * ```c * // create new parameter * icalparameter *parameter = icalparameter_new(); @@ -62,9 +62,9 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new(icalparameter_kind kind); /** - * @brief Creates new ::icalparameter as a clone of the given one. + * @brief Creates new icalparameter as a clone of the given one. * @param p The existing, non-`NULL` parameter to clone. - * @return An ::icalparameter that is a clone of the given one. + * @return An icalparameter that is a clone of the given one. * * @par Error handling * If @a p is `NULL`, it returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR. @@ -75,7 +75,7 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new(icalparameter_kind kind); * Objects created by this method are owned by the caller and * must be released with the icalparameter_free() method. * - * ### Usage + * @par Usage * ```x * // create an icalparameter * icalparameter *param = icalparameter_new_from_string("ROLE=CHAIR"); @@ -95,9 +95,9 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new(icalparameter_kind kind); LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_clone(icalparameter *p); /** - * @brief Creates new ::icalparameter object from string - * @param value The string from which to create the ::icalparameter, in the form `"PARAMNAME=VALUE"` - * @return An ::icalparameter that corresponds to the given string. + * @brief Creates new icalparameter object from string + * @param value The string from which to create the icalparameter, in the form `"PARAMNAME=VALUE"` + * @return An icalparameter that corresponds to the given string. * * @par Error handling * If there was an internal error copying data, it returns `NULL` and sets @@ -109,7 +109,7 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_clone(icalparameter *p); * Objects created by this method are owned by the caller and * must be released with the icalparameter_free() method. * - * ### Usage + * @par Usage * ```c * icalparameter *param = icalparameter_new_from_string("ROLE=CHAIR"); * @@ -123,10 +123,10 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_clone(icalparameter *p); LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_from_string(const char *value); /** - * @brief Creates new ::icalparameter of a given @a kind with a given @a value - * @param kind The kind of ::icalparameter to create + * @brief Creates new icalparameter of a given @a kind with a given @a value + * @param kind The kind of icalparameter to create * @param value The value of the parameter - * @return An ::icalparameter with the given kind and value. + * @return An icalparameter with the given kind and value. * * @par Error handling * If value is `NULL`, it returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR. @@ -135,7 +135,7 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_from_string(const char *val * Objects created by this method are owned by the caller and * must be released with the icalparameter_free() method. * - * ### Example + * @par Example * ```c * // create new parameter * icalparameter *param; @@ -153,7 +153,7 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_from_value_string(icalparam const char *value); /** - * @brief Frees an ::icalparameter object. + * @brief Frees an icalparameter object. * @param parameter The icalparameter to free * * This method needs to be used on all parameter objects returned @@ -161,7 +161,7 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_from_value_string(icalparam * icalparameter_new_from_string() and icalparameter_new_from_value_string(), * when they are not needed anymore and to be released. * - * ### Usage + * @par Usage * ```c * icalparameter *param = icalparameter_new(); * @@ -176,8 +176,8 @@ LIBICAL_ICAL_EXPORT icalparameter *icalparameter_new_from_value_string(icalparam LIBICAL_ICAL_EXPORT void icalparameter_free(icalparameter *parameter); /** - * @brief Converts ::icalparameter into a string representation - * @param parameter The ::icalparameter to convert + * @brief Converts icalparameter into a string representation + * @param parameter The icalparameter to convert * @return A string representing the parameter according to RFC5445/RFC6868. * @sa icalparameter_as_ical_string_r() * @@ -194,7 +194,7 @@ LIBICAL_ICAL_EXPORT void icalparameter_free(icalparameter *parameter); * the library. A version of this function, which returns strings * that are not owned by libical, is icalparameter_as_ical_string_r(). * - * ### Usage + * @par Usage * ```c * icalparameter *param = icalparameter_new_from_string("ROLE=CHAIR"); * @@ -208,8 +208,8 @@ LIBICAL_ICAL_EXPORT void icalparameter_free(icalparameter *parameter); LIBICAL_ICAL_EXPORT char *icalparameter_as_ical_string(icalparameter *parameter); /** - * @brief Converts ::icalparameter into an string representation according to RFC5445/RFC6868. - * @param parameter The ::icalparameter to convert + * @brief Converts icalparameter into an string representation according to RFC5445/RFC6868. + * @param parameter The icalparameter to convert * @return A string representing the parameter * @sa icalparameter_as_ical_string() * @@ -226,7 +226,7 @@ LIBICAL_ICAL_EXPORT char *icalparameter_as_ical_string(icalparameter *parameter) * strings that do not need to be freed manually is * icalparameter_as_ical_string(). * - * ### Usage + * @par Usage * ```c * icalparameter *param = icalparameter_new_from_string("ROLE=CHAIR"); * @@ -293,19 +293,19 @@ LIBICAL_ICAL_EXPORT int icalparameter_isa_parameter(void *param); /** * @brief Sets the X-name of @a param to @a v - * @param param The ::icalparameter to change + * @param param The icalparameter to change * @param v The X-name to set @a param to * @sa icalparameter_get_xname() * * @par Error handling - * If either @a param or @a v are `NULL`, it sets ::icalerrno to ::ICAL_BARARG_ERROR. + * If either @a param or @a v are `NULL`, it sets ::icalerrno to ICAL_BARARG_ERROR. * If there is an error acquiring memory, it sets `errno` to `ENOMEM`. * * @par Ownership * The passed string @a v stays in the ownership of the caller - libical * creates a copy of it. * - * ### Usage + * @par Usage * ```c * // creates new parameter * icalparameter *param = icalparameter_new(); @@ -323,19 +323,19 @@ LIBICAL_ICAL_EXPORT void icalparameter_set_xname(icalparameter *param, const cha /** * @brief Returns the X-name of @a param - * @param param The ::icalparameter whose X-name is to be returned + * @param param The icalparameter whose X-name is to be returned * @return A string representing the X-name of @a param * @sa icalparameter_set_xname() * * @par Error handling * Returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR when a `NULL` - * is passed instead of an ::icalparameter. + * is passed instead of an icalparameter. * * @par Ownership * The string that is returned stays owned by libical and must not * be freed by the caller. * - * ### Usage + * @par Usage * ```c * // creates new parameter * icalparameter *param = icalparameter_new(); @@ -353,19 +353,19 @@ LIBICAL_ICAL_EXPORT const char *icalparameter_get_xname(icalparameter *param); /** * @brief Sets the X-value of @a param to @a v - * @param param The ::icalparameter to change + * @param param The icalparameter to change * @param v The X-value to set @a param to * @sa icalparameter_get_xvalue() * * @par Error handling - * If either @a param or @a v are `NULL`, it sets ::icalerrno to ::ICAL_BARARG_ERROR. + * If either @a param or @a v are `NULL`, it sets ::icalerrno to ICAL_BARARG_ERROR. * If there is an error acquiring memory, it sets `errno` to `ENOMEM`. * * @par Ownership * The passed string @a v stays in the ownership of the caller - libical * creates a copy of it. * - * ### Usage + * @par Usage * ```c * // create new parameter * icalparameter *param = icalparameter_new_from_string("X-TEST=FAIL"); @@ -384,19 +384,19 @@ LIBICAL_ICAL_EXPORT void icalparameter_set_xvalue(icalparameter *param, const ch /** * @brief Returns the X-value of @a param - * @param param The ::icalparameter whose X-value is to be returned + * @param param The icalparameter whose X-value is to be returned * @return A string representing the X-value of @a param * @sa icalparameter_set_xvalue() * * @par Error handling * Returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR when a `NULL` - * is passed instead of an ::icalparameter. + * is passed instead of an icalparameter. * * @par Ownership * The string that is returned stays owned by libical and must not * be freed by the caller. * - * ### Usage + * @par Usage * ```c * // create new parameter * icalparameter *param = icalparameter_new_from_string("X-TEST=FAIL"); @@ -422,14 +422,14 @@ LIBICAL_ICAL_EXPORT const char *icalparameter_get_xvalue(icalparameter *param); * @sa icalparameter_get_iana_name() * * @par Error handling - * If either @a param or @a v are `NULL`, it sets ::icalerrno to ::ICAL_BARARG_ERROR. + * If either @a param or @a v are `NULL`, it sets :calerrno to ICAL_BARARG_ERROR. * If there is an error acquiring memory, it sets `errno` to `ENOMEM`. * * @par Ownership * The passed string @a v stays in the ownership of the caller - libical * creates a copy of it. * - * ### Usage + * @par Usage * ```c * // creates new parameter * icalparameter *param = icalparameter_new(); @@ -447,19 +447,19 @@ LIBICAL_ICAL_EXPORT void icalparameter_set_iana_name(icalparameter *param, const /** * @brief Returns the IANA name of @a param - * @param param The ::icalparameter whose IANA name is to be returned + * @param param The icalparameter whose IANA name is to be returned * @return A string representing the IANA name of @a param * @sa icalparameter_set_iana_name() * * @par Error handling * Returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR when a `NULL` - * is passed instead of an ::icalparameter. + * is passed instead of an icalparameter. * * @par Ownership * The string that is returned stays owned by libical and must not * be freed by the caller. * - * ### Usage + * @par Usage * ```c * // creates new parameter * icalparameter *param = icalparameter_new(); @@ -477,19 +477,19 @@ LIBICAL_ICAL_EXPORT const char *icalparameter_get_iana_name(icalparameter *param /** * @brief Sets the IANA value of @a param to @a v - * @param param The ::icalparameter to change + * @param param The icalparameter to change * @param v The IANA value to set @a param to * @sa icalparameter_get_iana_value() * * @par Error handling - * If either @a param or @a v are `NULL`, it sets ::icalerrno to ::ICAL_BARARG_ERROR. + * If either @a param or @a v are `NULL`, it sets ::icalerrno to ICAL_BARARG_ERROR. * If there is an error acquiring memory, it sets `errno` to `ENOMEM`. * * @par Ownership * The passed string @a v stays in the ownership of the caller - libical * creates a copy of it. * - * ### Usage + * @par Usage * ```c * // create new parameter * icalparameter *param = icalparameter_new_from_string("ROLE=ATTENDEE"); @@ -508,19 +508,19 @@ LIBICAL_ICAL_EXPORT void icalparameter_set_iana_value(icalparameter *param, cons /** * @brief Returns the IANA value of @a param - * @param param The ::icalparameter whose value is to be returned + * @param param The icalparameter whose value is to be returned * @return A string representing the value of @a param * @sa icalparameter_set_iana_value() * * @par Error handling * Returns `NULL` and sets ::icalerrno to ::ICAL_BADARG_ERROR when a `NULL` - * is passed instead of an ::icalparameter. + * is passed instead of an icalparameter. * * @par Ownership * The string that is returned stays owned by libical and must not * be freed by the caller. * - * ### Usage + * @par Usage * ```c * // create new parameter * icalparameter *param = icalparameter_new_from_string("ROLE=ATTENDEE"); @@ -548,9 +548,9 @@ LIBICAL_ICAL_EXPORT const char *icalparameter_get_iana_value(icalparameter *para * ::icalerrno to ::ICAL_BADARG_ERROR. * * @par Ownership - * Does not take ownership of either ::icalparameter. + * Does not take ownership of either icalparameter. * - * ### Example + * @par Example * ```c * // create two parameters * icalparameter *param1 = icalparameter_new_from_string("ROLE=CHAIR"); @@ -569,18 +569,18 @@ LIBICAL_ICAL_EXPORT int icalparameter_has_same_name(icalparameter *param1, icalp /* Convert enumerations */ /** - * @brief Returns a string representing the given ::icalparameter_kind + * @brief Returns a string representing the given icalparameter_kind * @param kind The icalparameter_kind * @return A string representing @a kind * * @par Error handling - * When passed a non-existing ::icalparameter_kind, it returns `NULL`. + * When passed a non-existing icalparameter_kind, it returns `NULL`. * * @par Ownership * The string that is returned by this function is owned by libical and * must not be freed by the caller. * - * ### Usage + * @par Usage * ```c * assert(0 == strcmp(icalparameter_kind_to_string(ICAL_ROLE_PARAMETER), "ROLE")); * assert(0 == strcmp(icalparameter_kind_to_string(ICAL_EMAIL_PARAMETER), "EMAIL)); @@ -590,20 +590,20 @@ LIBICAL_ICAL_EXPORT int icalparameter_has_same_name(icalparameter *param1, icalp LIBICAL_ICAL_EXPORT const char *icalparameter_kind_to_string(icalparameter_kind kind); /** - * @brief Returns the ::icalparameter_kind for a given string + * @brief Returns the icalparameter_kind for a given string * @param string A string describing an icalparameter_kind * @return An icalparameter_kind * * @par Error handling - * Returns ::ICAL_NO_PARAMETER if @a string is `NULL`. + * Returns ICAL_NO_PARAMETER if @a string is `NULL`. * If it can't find the parameter, depending on * the ical_get_unknown_token_handling_setting(), it returns either - * ::ICAL_NO_PARAMETER or ::ICAL_IANA_PARAMETER. + * ICAL_NO_PARAMETER or ICAL_IANA_PARAMETER. * * @par Ownership * Does not take ownership of @a string. * - * ### Usage + * @par Usage * ```c * assert(icalparameter_string_to_kind("ROLE") == ICAL_ROLE_PARAMETER); * assert(icalparameter_string_to_kind("EMAIL") == ICAL_EMAIL_PARAMETER); @@ -613,11 +613,11 @@ LIBICAL_ICAL_EXPORT const char *icalparameter_kind_to_string(icalparameter_kind LIBICAL_ICAL_EXPORT icalparameter_kind icalparameter_string_to_kind(const char *string); /** - * @brief Checks the validity of a ::icalparameter_kind + * @brief Checks the validity of a icalparameter_kind * @param kind The icalparameter_kind * @return 1 if @a kind is valid, 0 otherwise * - * ### Usage + * @par Usage * ```c * assert(icalparameter_kind_is_valid(ICAL_ROLE_PARAMETER)); * ``` diff --git a/src/libical/icalparser.h b/src/libical/icalparser.h index 765f7730..850bf33a 100644 --- a/src/libical/icalparser.h +++ b/src/libical/icalparser.h @@ -31,7 +31,7 @@ * This file provides methods to parse iCalendar-formatted data * into the structures provided by this library. * - * ### Usage + * @par Usage * Create a new parser via icalparser_new_parser(), then add lines one at * a time with icalparser_add_line(). icalparser_add_line() will return * non-zero when it has finished with a component. @@ -73,18 +73,18 @@ typedef enum icalparser_state typedef char *(*icalparser_line_gen_func) (char *s, size_t size, void *d); /** - * @brief Creates a new ::icalparser. - * @return An ::icalparser object + * @brief Creates a new icalparser. + * @return An icalparser object * * @par Error handling * On error, it returns `NULL` and sets ::icalerrno to * ::ICAL_NEWFAILED_ERROR. * * @par Ownership - * All ::icalparser objects created with this function need to be + * All icalparser objects created with this function need to be * freed using the icalparser_free() function. * - * ### Usage + * @par Usage * ```c * // create new parser * icalparser *parser = icalparser_new(); @@ -98,7 +98,7 @@ typedef char *(*icalparser_line_gen_func) (char *s, size_t size, void *d); LIBICAL_ICAL_EXPORT icalparser *icalparser_new(void); /** - * @brief Adds a single line to be parsed by the ::icalparser. + * @brief Adds a single line to be parsed by the icalparser. * @param parser The parser to use * @param str A string representing a single line of RFC5545-formatted iCalendar data * @return When this was the last line of the component to be parsed, @@ -112,15 +112,15 @@ LIBICAL_ICAL_EXPORT icalparser *icalparser_new(void); * - If @a line is `NULL`, it returns `NULL` and sets the @a parser's ::icalparser_state to * ::ICALPARSER_ERROR. * - For errors during parsing, the functions can set the ::icalparser_state to - * ::ICALPARSER_ERROR and/or return components of the type ::ICAL_XLICINVALID_COMPONENT, - * or components with properties of the type ::ICAL_XLICERROR_PROPERTY. + * ::ICALPARSER_ERROR and/or return components of the type ICAL_XLICINVALID_COMPONENT, + * or components with properties of the type ICAL_XLICERROR_PROPERTY. * * @par Ownership * Ownership of the @a str is transferred to libical upon calling this - * method. The returned ::icalcomponent is owned by the caller and needs + * method. The returned icalcomponent is owned by the caller and needs * to be `free()`d with the appropriate method after it's no longer needed. * - * ### Example + * @par Example * ```c * char* read_stream(char *s, size_t size, void *d) * { @@ -159,9 +159,9 @@ LIBICAL_ICAL_EXPORT icalparser *icalparser_new(void); LIBICAL_ICAL_EXPORT icalcomponent *icalparser_add_line(icalparser *parser, char *str); /** - * @brief Cleans out an ::icalparser and returns whatever it has parsed so far. - * @param parser The ::icalparser to clean - * @return The parsed ::icalcomponent + * @brief Cleans out an icalparser and returns whatever it has parsed so far. + * @param parser The icalparser to clean + * @return The parsed icalcomponent * * @par Error handling * If @a parser is `NULL`, it returns `NULL` and sets ::icalerrno to @@ -169,7 +169,7 @@ LIBICAL_ICAL_EXPORT icalcomponent *icalparser_add_line(icalparser *parser, char * property into the affected components. * * @par Ownership - * The returned ::icalcomponent is property of the caller and needs to be + * The returned icalcomponent is property of the caller and needs to be * free'd with icalcomponent_free() after use. * * This will parse components even if it hasn't encountered a proper @@ -184,7 +184,7 @@ LIBICAL_ICAL_EXPORT icalcomponent *icalparser_clean(icalparser *parser); * @param parser The (valid, non-`NULL`) parser object * @return The current state of the icalparser, as an ::icalparser_state * - * ### Example + * @par Example * ```c * icalparser *parser = icalparser_new(); * @@ -202,10 +202,10 @@ LIBICAL_ICAL_EXPORT icalcomponent *icalparser_clean(icalparser *parser); LIBICAL_ICAL_EXPORT icalparser_state icalparser_get_state(icalparser *parser); /** - * @brief Frees an ::icalparser object. - * @param parser The ::icalparser to be freed. + * @brief Frees an icalparser object. + * @param parser The icalparser to be freed. * - * ### Example + * @par Example * ```c * icalparser *parser = icalparser_new(); * @@ -232,14 +232,14 @@ LIBICAL_ICAL_EXPORT void icalparser_free(icalparser *parser); * - If data read by @a line_gen_func is `NULL`, it returns `NULL` * and sets the @a parser's ::icalparser_state to ::ICALPARSER_ERROR. * - For errors during parsing, the functions can set the ::icalparser_state to - * ::ICALPARSER_ERROR and/or return components of the type ::ICAL_XLICINVALID_COMPONENT, - * or components with properties of the type ::ICAL_XLICERROR_PROPERTY. + * ::ICALPARSER_ERROR and/or return components of the type ICAL_XLICINVALID_COMPONENT, + * or components with properties of the type ICAL_XLICERROR_PROPERTY. * * @par Ownership - * The returned ::icalcomponent is owned by the caller of the function, and + * The returned icalcomponent is owned by the caller of the function, and * needs to be `free()`d with the appropriate method when no longer needed. * - * ### Example + * @par Example * ```c * char* read_stream(char *s, size_t size, void *d) * { @@ -284,18 +284,18 @@ LIBICAL_ICAL_EXPORT icalcomponent *icalparser_parse(icalparser *parser, LIBICAL_ICAL_EXPORT void icalparser_set_gen_data(icalparser *parser, void *data); /** - * @brief Parses a string and returns the parsed ::icalcomponent. + * @brief Parses a string and returns the parsed icalcomponent. * @param str The iCal formatted data to be parsed - * @return An ::icalcomponent representing the iCalendar + * @return An icalcomponent representing the iCalendar * * @par Error handling * On error, returns `NULL` and sets ::icalerrno * * @par Ownership - * The returned ::icalcomponent is owned by the caller of the function, and + * The returned icalcomponent is owned by the caller of the function, and * needs to be free'd with the appropriate functions after use. * - * ### Example + * @par Example * ```c * char *ical_string; * diff --git a/src/libical/icalperiod.h b/src/libical/icalperiod.h index fb8e3140..4b1034e9 100644 --- a/src/libical/icalperiod.h +++ b/src/libical/icalperiod.h @@ -57,7 +57,7 @@ struct icalperiodtype * If @a str is not properly formatted, it sets ::icalerrno to * ::ICAL_MALFORMEDDATA_ERROR and returns icalperiodtype_null_period(). * - * ### Data format + * @par Data format * There are two ways to specify a duration; either a start time * and an end time can be specified, or a start time and a duration. * The format for there is as such: @@ -68,7 +68,7 @@ struct icalperiodtype * icaltime_from_string(), and the format for the duration * is the same as that used by icaldurationtype_from_string(). * - * ### Usage + * @par Usage * ```c * // create icalperiodtype * const char *period_string = "20170606T090000/20170607T090000"; @@ -94,7 +94,7 @@ LIBICAL_ICAL_EXPORT struct icalperiodtype icalperiodtype_from_string(const char * The string returned by this method is owned by libical and must not be * `free()` by the caller. * - * ### Example + * @par Example * ```c * // create icalperiodtype * const char *period_string = "20170606T090000/20170607T090000"; @@ -120,7 +120,7 @@ LIBICAL_ICAL_EXPORT const char *icalperiodtype_as_ical_string(struct icalperiodt * The string returned by this method is owned by the caller and must be * released with the appropriate function after use. * - * ### Example + * @par Example * ```c * // create icalperiodtype * const char *period_string = "20170606T090000/20170607T090000"; @@ -139,7 +139,7 @@ LIBICAL_ICAL_EXPORT char *icalperiodtype_as_ical_string_r(struct icalperiodtype * @return An ::icalperiodtype representing a null period * @sa icalperiodtype_is_null_period() * - * ### Usage + * @par Usage * ```c * // creates null period * struct icalperiodtype period = icalperiodtype_null_period(); @@ -158,7 +158,7 @@ LIBICAL_ICAL_EXPORT struct icalperiodtype icalperiodtype_null_period(void); * @return 1 if @a p is a null period, 0 otherwise * @sa icalperiodtype_null_period() * - * ### Usage + * @par Usage * ```c * // creates null period * struct icalperiodtype period = icalperiodtype_null_period(); @@ -174,7 +174,7 @@ LIBICAL_ICAL_EXPORT int icalperiodtype_is_null_period(struct icalperiodtype p); * @param p The time period to check * @return 1 if @a p is a valid period, 0 otherwise * - * ### Usage + * @par Usage * ```c * // creates null period * struct icalperiodtype period = icalperiodtype_null_period(); diff --git a/src/libical/icalproperty.h b/src/libical/icalproperty.h index f4411cf6..e326eb24 100644 --- a/src/libical/icalproperty.h +++ b/src/libical/icalproperty.h @@ -90,7 +90,7 @@ LIBICAL_ICAL_EXPORT void icalproperty_remove_parameter_by_name(icalproperty *pro /** @brief Removes the specified parameter reference from the property. * * @param prop A valid icalproperty. - * @param parameter A reference to a specific icalparameter. + * @param param A reference to a specific icalparameter. * * This function removes the specified parameter reference from the * property. diff --git a/src/libical/icalrestriction.h b/src/libical/icalrestriction.h index 38751efc..752cf457 100644 --- a/src/libical/icalrestriction.h +++ b/src/libical/icalrestriction.h @@ -26,7 +26,7 @@ /** * @file icalrestriction.h - * @brief Functions to check if an ::icalcomponent meets the restrictions + * @brief Functions to check if an icalcomponent meets the restrictions * imposed by the standard. */ @@ -76,7 +76,7 @@ typedef enum icalrestriction_kind * @param count The amount present that is to be checked against the restriction * @return 1 if the restriction is met, 0 if not * - * ### Example + * @par Example * ```c * assert(icalrestriction_compare(ICALRESTRICTION_ONEPLUS, 5) == true); * assert(icalrestriction_compare(ICALRESTRICTION_NONE, 3) == false); @@ -94,7 +94,7 @@ LIBICAL_ICAL_EXPORT int icalrestriction_compare(icalrestriction_kind restr, int * Returns 0 and sets ::icalerrno if `NULL` is passed as @a comp, or if the * component is not a `VCALENDAR`. * - * ### Example + * @par Example * ```c * icalcomponent *component = // ... * diff --git a/src/libical/icaltime.h b/src/libical/icaltime.h index 1e28492b..ca69724f 100644 --- a/src/libical/icaltime.h +++ b/src/libical/icaltime.h @@ -352,7 +352,7 @@ LIBICAL_ICAL_EXPORT void icaltime_adjust(struct icaltimetype *tt, * to do arithmetic on times without worrying about overflow or * underflow. */ -LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_normalize(const struct icaltimetype t); +LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_normalize(const struct icaltimetype tt); /** @brief Converts time to a given timezone. * @@ -363,7 +363,7 @@ LIBICAL_ICAL_EXPORT struct icaltimetype icaltime_normalize(const struct icaltime * * If it's a floating time, the returned object * represents the same time relative to @p zone. - * For example, if @tt represents 9:30 AM floating and @p zone + * For example, if @p tt represents 9:30 AM floating and @p zone * is the GMT timezone, the returned object will represent 9:30 AM GMT. * * Otherwise, the time will be converted to @p zone, and its timezone diff --git a/src/libicalss/icalspanlist.c b/src/libicalss/icalspanlist.c index b74047ff..e697d948 100644 --- a/src/libicalss/icalspanlist.c +++ b/src/libicalss/icalspanlist.c @@ -189,22 +189,22 @@ icalspanlist *icalspanlist_new(icalset *set, struct icaltimetype start, struct i return sl; } -void icalspanlist_free(icalspanlist *s) +void icalspanlist_free(icalspanlist *sl) { struct icaltime_span *span; - if (s == NULL) + if (sl == NULL) return; - while ((span = pvl_pop(s->spans)) != 0) { + while ((span = pvl_pop(sl->spans)) != 0) { free(span); } - pvl_free(s->spans); + pvl_free(sl->spans); - s->spans = 0; + sl->spans = 0; - free(s); + free(sl); } void icalspanlist_dump(icalspanlist *sl) diff --git a/src/libicalss/icalspanlist.h b/src/libicalss/icalspanlist.h index c5b44cd1..fb817ef7 100644 --- a/src/libicalss/icalspanlist.h +++ b/src/libicalss/icalspanlist.h @@ -44,11 +44,11 @@ LIBICAL_ICALSS_EXPORT icalspanlist *icalspanlist_new(icalset *set, struct icaltimetype end); /** @brief Destructor. - * @param s A valid icalspanlist + * @param sl A valid icalspanlist * * Frees the memory associated with the spanlist. */ -LIBICAL_ICALSS_EXPORT void icalspanlist_free(icalspanlist *spl); +LIBICAL_ICALSS_EXPORT void icalspanlist_free(icalspanlist *sl); /** @brief Finds the next free time span in a spanlist. * @@ -64,7 +64,7 @@ LIBICAL_ICALSS_EXPORT struct icalperiodtype icalspanlist_next_free_time(icalspan /** @brief (Debug) print out spanlist to STDOUT. * @param sl A valid icalspanlist. */ -LIBICAL_ICALSS_EXPORT void icalspanlist_dump(icalspanlist *s); +LIBICAL_ICALSS_EXPORT void icalspanlist_dump(icalspanlist *sl); /** @brief Returns a VFREEBUSY component for a spanlist. * @@ -87,7 +87,7 @@ LIBICAL_ICALSS_EXPORT icalcomponent *icalspanlist_as_vfreebusy(icalspanlist *sl, /** @brief Returns an hour-by-hour array of free/busy times over a * given period. * - * @param sl A valid icalspanlist + * @param span A valid icalspanlist * @param delta_t The time slice to divide by, in seconds. Default 3600. * * @return A pointer to an array of integers containing the number of -- cgit v1.2.1 From b0aa3088b8b7aeafba3624c957e8eea3ad72b7a7 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Thu, 9 Jun 2022 12:41:41 -0400 Subject: Internally represent GEO properties as text This allows arbitrary precision for the GEO values fixes: #531 --- ReleaseNotes.txt | 1 + design-data/properties.csv | 2 +- src/libical-glib/api/i-cal-geo.xml | 32 +++++++++++++++++---------- src/libical/icalderivedvalue.c.in | 5 ++--- src/libical/icaltypes.h | 5 +++-- src/libical/icalvalue.c | 40 ++++++++++++++++----------------- src/test/regression.c | 45 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 93 insertions(+), 37 deletions(-) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index 5a4c023b..898fac72 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -17,6 +17,7 @@ Version 3.1.0 (NOT RELEASED YET): before including * Allow previous recurrence iteration * Improved performance of recurrence iterators + * GEO property has arbitrary precision (values are internally stored as strings, not doubles) * All ical*_new_clone() functions have been deprecated in favour of ical*_clone() * Added support for Event Publishing (RFC 9073) and VALARM (RFC 9074) Extensions * icaltzutil_get_zone_directory() can use the TZDIR environment to find system zoneinfo diff --git a/design-data/properties.csv b/design-data/properties.csv index 7f019653..26867360 100644 --- a/design-data/properties.csv +++ b/design-data/properties.csv @@ -11,7 +11,7 @@ "CLASS","13","CLASS","CLASS" "COMMENT","15","TEXT","TEXT" "DESCRIPTION","29","TEXT","TEXT" -"GEO","39","GEO","FLOAT",is_structured +"GEO","39","GEO","TEXT",is_structured "LOCATION","43","TEXT","TEXT" "PERCENT-COMPLETE","54","INTEGER","INTEGER" "PRIORITY","56","INTEGER","INTEGER" diff --git a/src/libical-glib/api/i-cal-geo.xml b/src/libical-glib/api/i-cal-geo.xml index 7f81e20f..b7645184 100644 --- a/src/libical-glib/api/i-cal-geo.xml +++ b/src/libical-glib/api/i-cal-geo.xml @@ -10,8 +10,8 @@ Creates a new default #ICalGeo. struct icalgeotype geotype; - geotype.lat = 0; - geotype.lon = 0; + memset(geotype.lat, 0, ICAL_GEO_LEN); + memset(geotype.lon, 0, ICAL_GEO_LEN); return geotype; @@ -20,10 +20,14 @@ Creates a new #ICalGeo. struct icalgeotype geo; - + char dval[ICAL_GEO_LEN]; geo = i_cal_geo_new_default(); - geo.lat = lat; - geo.lon = lon; + memset(dval, 0, ICAL_GEO_LEN); + snprintf(dval, ICAL_GEO_LEN, "%lf", lat); + strncpy(geo.lat, dval, ICAL_GEO_LEN-1); + memset(dval, 0, ICAL_GEO_LEN); + snprintf(dval, ICAL_GEO_LEN, "%lf", lon); + strncpy(geo.lon, dval, ICAL_GEO_LEN-1); return i_cal_geo_new_full(geo); @@ -45,27 +49,33 @@ Gets the latitude of #ICalGeo. g_return_val_if_fail (geo != NULL, 0); - return ((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lat; + return atof(((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lat); Sets the latitude of #ICalGeo. - g_return_if_fail (geo != NULL && I_CAL_IS_GEO (geo)); - ((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lat = lat; + char dval[ICAL_GEO_LEN]; + g_return_if_fail (geo != NULL && I_CAL_IS_GEO (geo)); + memset(dval, 0, ICAL_GEO_LEN); + snprintf(dval, ICAL_GEO_LEN, "%lf", lat); + strncpy(((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lat, dval, ICAL_GEO_LEN-1); Gets the longitude of #ICalGeo. g_return_val_if_fail (geo != NULL, 0); - return ((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lon; + return atof(((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lon); Sets the longitude of #ICalGeo. - g_return_if_fail (geo != NULL && I_CAL_IS_GEO (geo)); - ((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lon = lon; + char dval[ICAL_GEO_LEN]; + g_return_if_fail (geo != NULL && I_CAL_IS_GEO (geo)); + memset(dval, 0, ICAL_GEO_LEN); + snprintf(dval, ICAL_GEO_LEN, "%lf", lon); + strncpy(((struct icalgeotype *)i_cal_object_get_native ((ICalObject *)geo))->lon, dval, ICAL_GEO_LEN-1); diff --git a/src/libical/icalderivedvalue.c.in b/src/libical/icalderivedvalue.c.in index 1b87c353..8dde33eb 100644 --- a/src/libical/icalderivedvalue.c.in +++ b/src/libical/icalderivedvalue.c.in @@ -430,9 +430,8 @@ void icalvalue_set_geo(icalvalue *value, struct icalgeotype v) struct icalgeotype icalvalue_get_geo(const icalvalue *value) { struct icalgeotype gt; - - gt.lat = 255.0; - gt.lon = 255.0; + strcpy(gt.lat, "255.0"); + strcpy(gt.lon, "255.0"); icalerror_check_arg_rx((value != 0), "value", gt); icalerror_check_value_type(value, ICAL_GEO_VALUE); diff --git a/src/libical/icaltypes.h b/src/libical/icaltypes.h index d606bc37..bad766b5 100644 --- a/src/libical/icaltypes.h +++ b/src/libical/icaltypes.h @@ -22,10 +22,11 @@ struct icaldatetimeperiodtype struct icalperiodtype period; }; +#define ICAL_GEO_LEN 16 struct icalgeotype { - double lat; - double lon; + char lat[ICAL_GEO_LEN]; + char lon[ICAL_GEO_LEN]; }; struct icaltriggertype diff --git a/src/libical/icalvalue.c b/src/libical/icalvalue.c index 6a15d788..c41a69a3 100644 --- a/src/libical/icalvalue.c +++ b/src/libical/icalvalue.c @@ -357,23 +357,20 @@ static icalvalue *icalvalue_new_enum(icalvalue_kind kind, int x_type, const char } /** - * Transforms a simple float number string into a double. + * Extracts a simple floating point number as a substring. * The decimal separator (if any) of the double has to be '.' * The code is locale *independent* and does *not* change the locale. * It should be thread safe. - * If you want a code that does the same job with a decimal separator - * dependent on the current locale, then use strtof() from libc. */ -static int simple_str_to_double(const char *from, double *result, char **to) +static int simple_str_to_doublestr(const char *from, char *result, char **to) { -#define TMP_NUM_SIZE 100 char *start = NULL, *end = NULL, *cur = (char *)from; - char tmp_buf[TMP_NUM_SIZE + 1]; /*hack */ #if !defined(HAVE_GETNUMBERFORMAT) struct lconv *loc_data = localeconv(); #endif int i = 0; + double dtest; /*sanity checks */ if (!from || !result) { @@ -385,8 +382,7 @@ static int simple_str_to_double(const char *from, double *result, char **to) cur++; start = cur; - /* copy the part that looks like a double into tmp_buf - * so that we can call strtof() on it. + /* copy the part that looks like a double into result. * during the copy, we give ourselves a chance to convert the '.' * into the decimal separator of the current locale. */ @@ -398,7 +394,6 @@ static int simple_str_to_double(const char *from, double *result, char **to) /*huh hoh, number is too big. getting out */ return 1; } - memset(tmp_buf, 0, TMP_NUM_SIZE + 1); /* copy the float number string into tmp_buf, and take * care to have the (optional) decimal separator be the one @@ -409,18 +404,22 @@ static int simple_str_to_double(const char *from, double *result, char **to) if (start[i] == '.' && loc_data && loc_data->decimal_point && loc_data->decimal_point[0] && loc_data->decimal_point[0] != '.') { /*replace '.' by the digit separator of the current locale */ - tmp_buf[i] = loc_data->decimal_point[0]; + result[i] = loc_data->decimal_point[0]; } else { - tmp_buf[i] = start[i]; + result[i] = start[i]; } } #else - GetNumberFormat(LOCALE_SYSTEM_DEFAULT, 0, start, NULL, tmp_buf, TMP_NUM_SIZE); + GetNumberFormat(LOCALE_SYSTEM_DEFAULT, 0, start, NULL, result, TMP_NUM_SIZE); #endif if (to) { *to = end; } - *result = atof(tmp_buf); + + /* now try to convert to a floating point number, to check for validity only */ + if (sscanf(result, "%lf", &dtest) != 1) { + return 1; + } return 0; } @@ -580,13 +579,14 @@ static icalvalue *icalvalue_new_from_string_with_error(icalvalue_kind kind, case ICAL_GEO_VALUE: { char *cur = NULL; - struct icalgeotype geo = { 0.0, 0.0 }; + struct icalgeotype geo; + memset(geo.lat, 0, ICAL_GEO_LEN); + memset(geo.lon, 0, ICAL_GEO_LEN); - if (simple_str_to_double(str, &geo.lat, &cur)) { + if (simple_str_to_doublestr(str, geo.lat, &cur)) { goto geo_parsing_error; } - - /*skip white spaces */ + /* skip white spaces */ while (cur && isspace((int)*cur)) { ++cur; } @@ -598,12 +598,12 @@ static icalvalue *icalvalue_new_from_string_with_error(icalvalue_kind kind, ++cur; - /*skip white spaces */ + /* skip white spaces */ while (cur && isspace((int)*cur)) { ++cur; } - if (simple_str_to_double(cur, &geo.lon, &cur)) { + if (simple_str_to_doublestr(cur, geo.lon, &cur)) { goto geo_parsing_error; } value = icalvalue_new_geo(geo); @@ -1102,7 +1102,7 @@ static char *icalvalue_geo_as_ical_string_r(const icalvalue *value) str = (char *)icalmemory_new_buffer(80); - snprintf(str, 80, "%f;%f", data.lat, data.lon); + snprintf(str, 80, "%s;%s", data.lat, data.lon); /* restore saved locale */ (void)setlocale(LC_NUMERIC, old_locale); diff --git a/src/test/regression.c b/src/test/regression.c index d52474f0..da3ba9af 100644 --- a/src/test/regression.c +++ b/src/test/regression.c @@ -4377,6 +4377,50 @@ void test_comma_in_quoted_value(void) icalcomponent_free(c); } +void test_geo_props(void) +{ + int estate; + icalcomponent *c; + icalproperty *p; + + c = icalparser_parse_string("BEGIN:VEVENT\n" "GEO:49.42612;7.75473\n" "END:VEVENT\n"); + ok("icalparser_parse_string()", (c != NULL)); + if (!c) { + exit(EXIT_FAILURE); + } + if (VERBOSE) + printf("%s", icalcomponent_as_ical_string(c)); + p = icalcomponent_get_first_property(c, ICAL_GEO_PROPERTY); + str_is("icalproperty_get_value_as_string() works", + icalproperty_get_value_as_string(p), "49.42612;7.75473"); + icalcomponent_free(c); + + c = icalparser_parse_string("BEGIN:VEVENT\n" "GEO:-0;+0\n" "END:VEVENT\n"); + ok("icalparser_parse_string()", (c != NULL)); + if (!c) { + exit(EXIT_FAILURE); + } + if (VERBOSE) + printf("%s", icalcomponent_as_ical_string(c)); + p = icalcomponent_get_first_property(c, ICAL_GEO_PROPERTY); + str_is("icalproperty_get_value_as_string() works", + icalproperty_get_value_as_string(p), "-0;+0"); + icalcomponent_free(c); + + estate = icalerror_get_errors_are_fatal(); + icalerror_set_errors_are_fatal(0); + c = icalparser_parse_string("BEGIN:VEVENT\n" "GEO:-0a;+0\n" "END:VEVENT\n"); + if (!c) { + exit(EXIT_FAILURE); + } + if (VERBOSE) + printf("%s", icalcomponent_as_ical_string(c)); + p = icalcomponent_get_first_property(c, ICAL_GEO_PROPERTY); + ok("expected fail icalcomponent_get_first_property()", (p == NULL)); + icalcomponent_free(c); + icalerror_set_errors_are_fatal(estate); +} + void test_zoneinfo_stuff(void) { #if defined(HAVE_SETENV) @@ -5337,6 +5381,7 @@ int main(int argc, char *argv[]) test_run("Test implicit DTEND and DURATION for VEVENT and VTODO", test_implicit_dtend_duration, do_test, do_header); test_run("Test icalvalue resets timezone on set", test_icalvalue_resets_timezone_on_set, do_test, do_header); test_run("Test removing TZID from DUE with icalcomponent_set_due", test_remove_tzid_from_due, do_test, do_header); + test_run("Test geo precision", test_geo_props, do_test, do_header); /** OPTIONAL TESTS go here... **/ -- cgit v1.2.1 From a8ef3de84cc5740978a49dcf7b8eeb2cd5fc6cb8 Mon Sep 17 00:00:00 2001 From: Allen Winter Date: Sat, 11 Jun 2022 08:55:12 -0400 Subject: src/libical/qsort_gen.h - minor fix for doxygen warning --- src/libical/qsort_gen.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/libical/qsort_gen.h b/src/libical/qsort_gen.h index 4e3bc0c1..32532127 100644 --- a/src/libical/qsort_gen.h +++ b/src/libical/qsort_gen.h @@ -22,7 +22,6 @@ /** * @brief Sort an arbitrary list of items using the qsort algorithm. - * @param context A pointer representing the list to be sorted. Won't be * interpreted by this function but passed to the compar and swapr functions. * @param nitems The number of items in the list. * @param compar The comparator function. The function receives the pointer -- cgit v1.2.1