Skip to content

Commit 25e796e

Browse files
authored
Merge branch 'master' into tintou/csv-malformed
2 parents 838f0a0 + fb1f16c commit 25e796e

File tree

77 files changed

+5350
-503
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+5350
-503
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
- name: Configure project
4444
run: |
4545
mkdir build
46-
cmake -B build --warn-uninitialized -Werror=dev -G Ninja -DLIBICAL_DEVMODE_MEMORY_CONSISTENCY=False -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DLIBICAL_DEVMODE=True -DLIBICAL_GLIB_BUILD_DOCS=True -DLIBICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DLIBICAL_GLIB_VAPI=True -DLIBICAL_BUILD_TESTING_BIGFUZZ=True
46+
cmake -B build --warn-uninitialized -Werror=dev -G Ninja -DLIBICAL_DEVMODE_MEMORY_CONSISTENCY=False -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DLIBICAL_DEVMODE=True -DLIBICAL_GLIB_BUILD_DOCS=True -DLIBICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DLIBICAL_GLIB_VAPI=True -DLIBICAL_GLIB_CHECK_API_FILES=True -DLIBICAL_BUILD_TESTING_BIGFUZZ=True
4747
- name: Build project
4848
run: cmake --build build
4949
- name: Test project

CMakeLists.txt

Lines changed: 30 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,6 @@
4040
# Default=false (build shared and static libs)
4141
# Takes precedence over STATIC_ONLY
4242
#
43-
# -DENABLE_LTO_BUILD=[true|false]
44-
# Build a link-time optimized version (requires gcc or clang)
45-
# Default=false (do not build a link time optimized version)
46-
#
4743
# -DGOBJECT_INTROSPECTION=[true|false]
4844
# Set to build GObject introspection "typelib" files
4945
# Requires GObject Introspection development package (version MIN_GOBJECT_INTROSPECTION)
@@ -69,6 +65,11 @@
6965
# Requires gi-docgen, GOBJECT_INTROSPECTION and LIBICAL_BUILD_DOCS options to be true.
7066
# Default=true (build libical-glib developer documentation)
7167
#
68+
# -DLIBICAL_GLIB_CHECK_API_FILES=[true|false]
69+
# Set to check whether API files for the libical-glib contain all symbols exported
70+
# in the corresponding header files; requires ICAL_GLIB to be set to True
71+
# Default=false (always true if LIBICAL_DEVMODE is on)
72+
#
7273
# -DLIBICAL_ENABLE_MSVC_32BIT_TIME_T=[true|false]
7374
# Set to build using a 32bit time_t (ignored unless building with MSVC on Windows)
7475
# Default=false (use the default size of time_t)
@@ -133,9 +134,9 @@
133134
# Build with the undefined sanitizer (requires gcc or clang)
134135
# Default=false
135136
#
136-
# -DLIBICAL_SYNCMODE_THREADLOCAL=[true|false]
137-
# Experimental: If set to true, global variables are marked as thread-local. This allows accessing
138-
# libical from multiple threads without the need for synchronization. However, any global settings
137+
# -DLIBICAL_DEVMODE_SYNCMODE_THREADLOCAL=[true|false]
138+
# If set to true, global variables are marked as thread-local. This allows accessing libical
139+
# from multiple threads without the need for synchronization. However, any global settings
139140
# must be applied per thread. Note that in this mode, any global variables and cached data are
140141
# allocated per thread, including the cache for the built-in timezone data. This can lead to a
141142
# significant overhead in memory usage and initialization time. It's therefore recommended to limit
@@ -748,6 +749,11 @@ if(LIBICAL_GLIB)
748749
)
749750
endif()
750751
endif()
752+
libical_option(LIBICAL_GLIB_CHECK_API_FILES "Check libical-glib API files for completeness." False)
753+
# Always check the API files in developer-mode (when libical-glib is enabled)
754+
if(LIBICAL_DEVMODE)
755+
set(LIBICAL_GLIB_CHECK_API_FILES True)
756+
endif()
751757
# LIBICAL_GLIB_BUILD_DOCS might be disabled later by some devmode options
752758
libical_deprecated_option(ICAL_GLIB_BUILD_DOCS LIBICAL_GLIB_BUILD_DOCS "Build libical-glib documentation" True)
753759

@@ -971,32 +977,24 @@ if(LIBICAL_DEVMODE_UNDEFINED_SANITIZER)
971977
endif()
972978
endif()
973979

974-
mark_as_advanced(LIBICAL_SYNCMODE_THREADLOCAL)
975-
libical_option(LIBICAL_SYNCMODE_THREADLOCAL "Experimental: Mark global variables as thread-local." False)
980+
mark_as_advanced(LIBICAL_DEVMODE_SYNCMODE_THREADLOCAL)
981+
libical_deprecated_option(
982+
LIBICAL_SYNCMODE_THREADLOCAL
983+
LIBICAL_DEVMODE_SYNCMODE_THREADLOCAL
984+
"Mark global variables as thread-local."
985+
False
986+
)
976987

977-
libical_option(ENABLE_LTO_BUILD "Build a link-time optimized version." False)
978-
if(ENABLE_LTO_BUILD)
979-
if(CMAKE_C_COMPILER_IS_GCC)
980-
libical_add_cflag(-flto LTO)
981-
if(C_SUPPORTS_LTO)
982-
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wlto-type-mismatch -fuse-linker-plugin")
983-
set(CMAKE_AR "gcc-ar")
984-
set(CMAKE_RANLIB "gcc-ranlib")
985-
else()
986-
message(FATAL_ERROR "Your C compiler ${CMAKE_C_COMPILER_ID} does not support the LTO building.")
987-
endif()
988-
if(LIBICAL_CXX_BINDINGS AND CMAKE_CXX_COMPILER_IS_GCC)
989-
include(CheckCXXCompilerFlag)
990-
libical_add_cxxflag(-flto LTO)
991-
if(CXX_SUPPORTS_LTO)
992-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wlto-type-mismatch -fuse-linker-plugin")
993-
else()
994-
message(FATAL_ERROR "Your C++ compiler ${CMAKE_CXX_COMPILER_ID} does not support LTO building.")
995-
endif()
996-
endif()
997-
else()
998-
message(FATAL_ERROR "Build link-time optimization using a non-GCC compiler is currently not supported.")
999-
endif()
988+
libical_deprecated_option(
989+
ENABLE_LTO_BUILD
990+
CMAKE_INTERPROCEDURAL_OPTIMIZATION
991+
"Build a link-time optimized version."
992+
False
993+
)
994+
if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)
995+
include(CheckIPOSupported)
996+
# A fatal error is issued if IPO not supported by the compiler
997+
check_ipo_supported()
1000998
endif()
1001999

10021000
libical_option(LIBICAL_BUILD_TESTING "Build tests." False)

config.h.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -615,13 +615,13 @@ typedef ssize_t IO_SSIZE_T;
615615
#define ICALMEMORY_DEFAULT_FREE free
616616

617617

618-
#cmakedefine LIBICAL_SYNCMODE_THREADLOCAL 1
618+
#cmakedefine LIBICAL_DEVMODE_SYNCMODE_THREADLOCAL 1
619619

620620
#define ICAL_SYNC_MODE_NONE 1
621621
#define ICAL_SYNC_MODE_PTHREAD 2
622622
#define ICAL_SYNC_MODE_THREADLOCAL 3
623623

624-
#ifdef LIBICAL_SYNCMODE_THREADLOCAL
624+
#ifdef LIBICAL_DEVMODE_SYNCMODE_THREADLOCAL
625625
#define ICAL_SYNC_MODE ICAL_SYNC_MODE_THREADLOCAL
626626
#elif HAVE_PTHREAD == 1
627627
#define ICAL_SYNC_MODE ICAL_SYNC_MODE_PTHREAD

docs/MigrationGuide_to_4.md

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,25 @@ Please change your build scripts to use the new names before the next major rele
1010

1111
User-specific:
1212

13-
| Old Name | New Name |
14-
|----------------------|-------------------------------------|
15-
| ICAL_BUILD_DOCS | LIBICAL_BUILD_DOCS |
16-
| ICAL_GLIB | LIBICAL_GLIB |
17-
| ICAL_GLIB_VAPI | LIBICAL_GLIB_VAPI |
18-
| ICAL_GLIB_BUILD_DOCS | LIBICAL_GLIB_BUILD_DOCS |
19-
| USE_32BIT_TIME_T | LIBICAL_ENABLE_MSVC_32BIT_TIME_T |
20-
| WITH_CXX_BINDINGS | LIBICAL_CXX_BINDINGS |
13+
| Old Name | New Name |
14+
|------------------------------|--------------------------------------|
15+
| ICAL_BUILD_DOCS | LIBICAL_BUILD_DOCS |
16+
| ICAL_GLIB | LIBICAL_GLIB |
17+
| ICAL_GLIB_VAPI | LIBICAL_GLIB_VAPI |
18+
| ICAL_GLIB_BUILD_DOCS | LIBICAL_GLIB_BUILD_DOCS |
19+
| USE_32BIT_TIME_T | LIBICAL_ENABLE_MSVC_32BIT_TIME_T |
20+
| WITH_CXX_BINDINGS | LIBICAL_CXX_BINDINGS |
21+
| ENABLE_LTO_BUILD | CMAKE_INTERPROCEDURAL_OPTIMIZATION |
2122

2223
Developer-specific:
2324

24-
| Old Name | New Name |
25-
|----------------------|-------------------------------------|
26-
| ABI_DUMPER | LIBICAL_DEVMODE_ABI_DUMPER |
27-
| ADDRESS_SANITIZER | LIBICAL_DEVMODE_ADDRESS_SANITIZER |
28-
| THREAD_SANITIZER | LIBICAL_DEVMODE_THREAD_SANITIZER |
29-
| UNDEFINED_SANITIZER | LIBICAL_DEVMODE_UNDEFINED_SANITIZER |
25+
| Old Name | New Name |
26+
|------------------------------|--------------------------------------|
27+
| ABI_DUMPER | LIBICAL_DEVMODE_ABI_DUMPER |
28+
| ADDRESS_SANITIZER | LIBICAL_DEVMODE_ADDRESS_SANITIZER |
29+
| LIBICAL_SYNCMODE_THREADLOCAL | LIBICAL_DEVMODE_SYNCMODE_THREADLOCAL |
30+
| THREAD_SANITIZER | LIBICAL_DEVMODE_THREAD_SANITIZER |
31+
| UNDEFINED_SANITIZER | LIBICAL_DEVMODE_UNDEFINED_SANITIZER |
3032

3133
## Conditional compilation
3234

@@ -144,6 +146,36 @@ The following functions have been added:
144146
* `icaltzutil_fetch_timezone()`
145147
* `icalrecurrencetype_clear()`
146148

149+
### Removed macros
150+
151+
These convenience macros were added in version 3 to ease porting from older versions.
152+
They have been removed in version 4 and should be replaced with their actual function
153+
names as follows:
154+
155+
| Old Macro Name | Actual Function Name |
156+
|--------------------------------------|----------------------------------------|
157+
| icalenum_action_to_string | icalproperty_action_to_string |
158+
| icalenum_class_to_string | icalproperty_class_to_string |
159+
| icalenum_component_kind_to_string | icalcomponent_kind_to_string |
160+
| icalenum_method_to_string | icalproperty_method_to_string |
161+
| icalenum_participanttype_to_string | icalproperty_participanttype_to_string |
162+
| icalenum_property_kind_to_string | icalproperty_kind_to_string |
163+
| icalenum_property_kind_to_value_kind | icalproperty_kind_to_value_kind |
164+
| icalenum_resourcetype_to_string | icalproperty_resourcetype_to_string |
165+
| icalenum_status_to_string | icalproperty_status_to_string |
166+
| icalenum_string_to_action | icalproperty_string_to_action |
167+
| icalenum_string_to_class | icalproperty_string_to_class |
168+
| icalenum_string_to_component_kind | icalcomponent_string_to_kind |
169+
| icalenum_string_to_method | icalproperty_string_to_method |
170+
| icalenum_string_to_participanttype | icalproperty_string_to_participanttype |
171+
| icalenum_string_to_property_kind | icalproperty_string_to_kind |
172+
| icalenum_string_to_resourcetype | icalproperty_string_to_resourcetype |
173+
| icalenum_string_to_status | icalproperty_string_to_status |
174+
| icalenum_string_to_transp | icalproperty_string_to_transp |
175+
| icalenum_string_to_value_kind | icalvalue_string_to_kind |
176+
| icalenum_transp_to_string | icalproperty_transp_to_string |
177+
| icalenum_value_kind_to_string | icalvalue_kind_to_string |
178+
147179
### Added data types
148180

149181
* These data types have been added:

scripts/buildtests.sh

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ CONFIGURE() {
192192
mkdir "$BDIR"
193193
cd "$BDIR" || exit 1
194194
# shellcheck disable=SC2086
195-
cmake --warn-uninitialized -Werror=dev .. $2 2>&1 | tee cmake.out || exit 1
195+
cmake .. $2 2>&1 | tee cmake.out || exit 1
196196
declare -i numWarnings
197197
declare -i numDeprecates
198198
set +e
@@ -419,7 +419,7 @@ THREADLOCAL_BUILD() {
419419
fi
420420
echo "===== START THREADLOCAL BUILD: $1 ======"
421421
SET_GCC
422-
BUILD "$name" "-DLIBICAL_SYNCMODE_THREADLOCAL=True $2"
422+
BUILD "$name" "-DLIBICAL_DEVMODE_SYNCMODE_THREADLOCAL=True $2"
423423
echo "===== END THREADLOCAL BUILD: $1 ======"
424424
}
425425

@@ -856,13 +856,14 @@ fi
856856
#use non-Ninja cmake generator by-default
857857
UNSET_NINJA
858858
859+
STRICT="--warn-uninitialized -Werror=dev"
859860
DEFCMAKEOPTS="-DCMAKE_BUILD_TYPE=Release -DNDEBUG=1"
860-
CMAKEOPTS="-DLIBICAL_DEVMODE=True -DGOBJECT_INTROSPECTION=False -DLIBICAL_GLIB=False -DLIBICAL_BUILD_DOCS=False"
861+
CMAKEOPTS="$STRICT -DLIBICAL_DEVMODE=True -DGOBJECT_INTROSPECTION=False -DLIBICAL_GLIB=False -DLIBICAL_BUILD_DOCS=False"
861862
UUCCMAKEOPTS="$CMAKEOPTS -DCMAKE_DISABLE_FIND_PACKAGE_ICU=True"
862863
TZCMAKEOPTS="$CMAKEOPTS -DUSE_BUILTIN_TZDATA=True"
863-
LTOCMAKEOPTS="$CMAKEOPTS -DENABLE_LTO_BUILD=True"
864-
GLIBOPTS="-DLIBICAL_DEVMODE=True -DLIBICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DUSE_BUILTIN_TZDATA=OFF -DLIBICAL_GLIB_VAPI=ON"
865-
FUZZOPTS="-DLIBICAL_DEVMODE=True -DLIBICAL_BUILD_TESTING_BIGFUZZ=True"
864+
LTOCMAKEOPTS="$CMAKEOPTS -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=True"
865+
GLIBOPTS="$STRICT -DLIBICAL_DEVMODE=True -DLIBICAL_GLIB=True -DGOBJECT_INTROSPECTION=True -DUSE_BUILTIN_TZDATA=OFF -DLIBICAL_GLIB_VAPI=ON"
866+
FUZZOPTS="$STRICT -DLIBICAL_DEVMODE=True -DLIBICAL_BUILD_TESTING_BIGFUZZ=True"
866867
867868
#Static code checkers
868869
STATICCCHECKOPTS="\
@@ -889,15 +890,13 @@ CPPCHECK test "$STATICCCHECKOPTS"
889890
GCC_BUILD testgcc1 "$DEFCMAKEOPTS"
890891
GCC_BUILD testgcc2 "$CMAKEOPTS"
891892
GCC_BUILD testgcc3 "$UUCCMAKEOPTS"
892-
if (test "$(uname -s)" = "Linux"); then
893-
GCC_BUILD testgcc4lto "$LTOCMAKEOPTS"
894-
fi
893+
GCC_BUILD testgcc4lto "$LTOCMAKEOPTS"
895894
GCC_BUILD testgcc4glib "$GLIBOPTS"
896895
GCC_BUILD testgccnocxx "$CMAKEOPTS -DLIBICAL_CXX_BINDINGS=off -DLIBICAL_JAVA_BINDINGS=off"
897896
if (test "$(uname -s)" = "Linux"); then
898-
echo "Temporarily disable cross-compile tests"
899-
# GCC_BUILD testgcc1cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake"
900-
# GCC_BUILD testgcc2cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake $CMAKEOPTS"
897+
# Fedora: dnf install libstdc++-*.i686 glibc-*.i686 libgcc.i686 libdb-devel.i686
898+
CMAKEOPTS_NONSTRICT="-DLIBICAL_DEVMODE=True -DGOBJECT_INTROSPECTION=False -DLIBICAL_GLIB=False -DLIBICAL_BUILD_DOCS=False"
899+
GCC_BUILD testgcc1cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake $CMAKEOPTS_NONSTRICT -DLIBICAL_JAVA_BINDINGS=False"
901900
fi
902901
GCC_BUILD testgcc1builtin "-DUSE_BUILTIN_TZDATA=True"
903902
GCC_BUILD testgcc2builtin "$TZCMAKEOPTS"
@@ -914,12 +913,12 @@ NINJA_GCC_BUILD testninjagcc6 "-DSTATIC_ONLY=True -DGOBJECT_INTROSPECTION=False
914913
CLANG_BUILD testclang1 "$DEFCMAKEOPTS"
915914
CLANG_BUILD testclang2 "$CMAKEOPTS"
916915
CLANG_BUILD testclang3 "$UUCCMAKEOPTS"
917-
#not supported with clang yet CLANG_BUILD testclang4lto "$LTOCMAKEOPTS"
916+
CLANG_BUILD testclang4lto "$LTOCMAKEOPTS"
918917
CLANG_BUILD testclang4glib "$GLIBOPTS"
919918
if (test "$(uname -s)" = "Linux"); then
920-
echo "Temporarily disable cross-compile tests"
921-
# CLANG_BUILD testclang1cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake"
922-
# CLANG_BUILD testclang2cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake $CMAKEOPTS"
919+
# Fedora: dnf install libstdc++-*.i686 glibc-*.i686 libgcc.i686 libdb-devel.i686
920+
CMAKEOPTS_NONSTRICT="-DLIBICAL_DEVMODE=True -DGOBJECT_INTROSPECTION=False -DLIBICAL_GLIB=False -DLIBICAL_BUILD_DOCS=False"
921+
CLANG_BUILD testclang1cross "-DCMAKE_TOOLCHAIN_FILE=$TOP/cmake/Toolchain-Linux-GCC-i686.cmake $CMAKEOPTS_NONSTRICT -DLIBICAL_JAVA_BINDINGS=off"
923922
fi
924923
925924
#Memory consistency check

scripts/compileit.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ if (test "$BRANCH" != "3.0"); then
2222
CMAKE_VERSION4_OPTIONS="\
2323
-DLIBICAL_DEVMODE=ON \
2424
-DLIBICAL_DEVMODE_MEMORY_CONSISTENCY=ON \
25-
-DLIBICAL_SYNCMODE_THREADLOCAL=ON \
25+
-DLIBICAL_DEVMODE_SYNCMODE_THREADLOCAL=ON \
2626
"
2727
fi
2828

src/Net-ICal-Libical/netical.i

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,19 +115,19 @@ void icalerror_set_error_state( icalerrorenum error, icalerrorstate);
115115
icalerrorstate icalerror_get_error_state( icalerrorenum error);
116116

117117

118-
const char* icalenum_property_kind_to_string(icalproperty_kind kind);
119-
icalproperty_kind icalenum_string_to_property_kind(const char* string);
118+
const char* icalproperty_kind_to_string(icalproperty_kind kind);
119+
icalproperty_kind icalproperty_string_to_kind(const char* string);
120120

121-
const char* icalenum_value_kind_to_string(icalvalue_kind kind);
121+
const char* icalvalue_kind_to_string(icalvalue_kind kind);
122122
/*icalvalue_kind icalenum_value_kind_by_prop(icalproperty_kind kind);*/
123123

124124
const char* icalenum_parameter_kind_to_string(icalparameter_kind kind);
125125
icalparameter_kind icalenum_string_to_parameter_kind(const char* string);
126126

127-
const char* icalenum_component_kind_to_string(icalcomponent_kind kind);
128-
icalcomponent_kind icalenum_string_to_component_kind(const char* string);
127+
const char* icalcomponent_kind_to_string(icalcomponent_kind kind);
128+
icalcomponent_kind icalcomponent_string_to_kind(const char* string);
129129

130-
icalvalue_kind icalenum_property_kind_to_value_kind(icalproperty_kind kind);
130+
icalvalue_kind icalproperty_kind_to_value_kind(icalproperty_kind kind);
131131

132132

133133
int* icallangbind_new_array(int size);

0 commit comments

Comments
 (0)