186fab2974a834d4bec02529e68a960833e9e5b2
[platform/upstream/syncevolution.git] / src / syncevo / eds_abi_wrapper.h
1 /*
2  * Copyright (C) 2005-2009 Patrick Ohly <patrick.ohly@gmx.de>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) version 3.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301  USA
18  */
19
20 /**
21  * The main purpose of this file is to separate SyncEvolution from
22  * Evolution Dataserver ABI changes by never depending directly
23  * on any symbol in its libraries. Instead all functions are
24  * called via function pointers found via dlopen/dlsym.
25  *
26  * This is more flexible than linking against a specific revision of
27  * the libs, but circumvents the usual lib versioning and therefore
28  * may fail when the functions needed by SyncEvolution change.
29  *
30  * History shows that this has not happened for a long time whereas
31  * the versions of EDS libs had to be bumped quite a few times due to other
32  * changes.
33  *
34  * A similar problem came up with an API and ABI change in
35  * libbluetooth.so.3: the sdp_extract_seqtype() and sdp_extract_pdu()
36  * gained one more parameter (a buffer size for the buffer being
37  * written into). When compatibility mode is enabled, this header
38  * file provides the extended version and maps it back to the older
39  * version if necessary.
40  *
41  * To use the wrappers, include this header file. It overrides
42  * the normal C API functions with the function pointers via
43  * defines.
44  */
45
46 #ifndef INCL_EDS_ABI_WRAPPER
47 #define INCL_EDS_ABI_WRAPPER
48
49 #ifdef HAVE_CONFIG_H
50 #include "config.h"
51 #endif
52
53 #ifdef HAVE_EDS
54 #include <glib-object.h>
55 #if defined(USE_EDS_CLIENT)
56 #include <libedataserver/libedataserver.h>
57 #else
58 #ifdef HAVE_LIBEDATASERVER_EDS_VERSION_H
59 #include <libedataserver/eds-version.h>
60 #endif
61 #include <libedataserver/e-source.h>
62 #include <libedataserver/e-source-list.h>
63 #endif
64 #ifdef ENABLE_EBOOK
65 #ifdef USE_EDS_CLIENT
66 #include <libebook/libebook.h>
67 #else
68 #include <libebook/e-book.h>
69 #include <libebook/e-vcard.h>
70 #include <libebook/e-book-query.h>
71 #endif
72 #endif
73 #ifdef ENABLE_ECAL
74 # define HANDLE_LIBICAL_MEMORY 1
75 #ifdef USE_EDS_CLIENT
76 #include <libecal/libecal.h>
77 #else
78 #include <libecal/e-cal.h>
79 #endif
80 #endif
81 #endif
82 #ifdef ENABLE_BLUETOOTH
83 #include <bluetooth/sdp.h>
84 #include <bluetooth/sdp_lib.h>
85 #endif
86
87 #if !defined(ENABLE_ECAL) && defined(ENABLE_ICAL)
88 # define HANDLE_LIBICAL_MEMORY 1
89 # include <libical/ical.h>
90 #endif
91
92 #ifdef __cplusplus
93 extern "C" {
94 #endif
95
96 /** libebook, libecal, libedataserver available (currently checks for e_book_new/e_cal_new/e_source_group_peek_sources) */
97 extern int EDSAbiHaveEbook, EDSAbiHaveEcal, EDSAbiHaveEdataserver;
98 extern int EDSAbiHaveIcal;
99
100 /** libbluetooth available (checks sdp_connect()) */
101 extern int SyncEvoHaveLibbluetooth;
102
103 #ifdef EVOLUTION_COMPATIBILITY
104
105 /**
106  * This is a struct instead of a namespace because that allows
107  * printing it in a debugger. This code also has to be usable
108  * in plain C.
109  */
110 struct EDSAbiWrapper {
111 # ifdef HAVE_EDS
112     GType (*e_source_get_type) (void);
113     char *(*e_source_get_uri) (ESource *source);
114     GType (*e_source_group_get_type) (void);
115     GSList *(*e_source_group_peek_sources) (ESourceGroup *group);
116     GSList *(*e_source_list_peek_groups) (ESourceList *list);
117     const char *(*e_source_peek_name) (ESource *source);
118 # endif /* HAVE_EDS */
119
120 # ifdef ENABLE_EBOOK
121     gboolean (*e_book_add_contact) (EBook *book, EContact *contact, GError **error);
122     gboolean (*e_book_authenticate_user) (EBook *book, const char *user, const char *passwd, const char *auth_method, GError **error);
123     gboolean (*e_book_commit_contact) (EBook *book, EContact *contact, GError **error);
124     EContact* (*e_contact_duplicate) (EContact *contact);
125     gconstpointer (*e_contact_get_const) (EContact *contact, EContactField field_id);
126     gpointer (*e_contact_get) (EContact *contact, EContactField field_id);
127     void (*e_contact_name_free)(EContactName *name);
128     GType (*e_contact_get_type) (void);
129     EContact* (*e_contact_new_from_vcard) (const char *vcard);
130     void (*e_contact_set) (EContact *contact, EContactField field_id, const gpointer value);
131     gboolean (*e_book_get_addressbooks) (ESourceList** addressbook_sources, GError **error);
132     gboolean (*e_book_get_changes) (EBook *book, char *changeid, GList **changes, GError **error);
133     gboolean (*e_book_get_contact) (EBook *book, const char *id, EContact **contact, GError **error);
134     gboolean (*e_book_get_contacts) (EBook *book, EBookQuery *query, GList **contacts, GError **error);
135     gboolean (*e_book_get_supported_auth_methods) (EBook *book, GList **auth_methods, GError **error);
136     const char *(*e_book_get_uri) (EBook *book);
137     EBook *(*e_book_new) (ESource *source, GError **error);
138     EBook *(*e_book_new_default_addressbook) (GError **error);
139     EBook *(*e_book_new_from_uri) (const char *uri, GError **error);
140     EBook *(*e_book_new_system_addressbook) (GError **error);
141     gboolean (*e_book_open) (EBook *book, gboolean only_if_exists, GError **error);
142     EBookQuery* (*e_book_query_any_field_contains) (const char  *value);
143     void (*e_book_query_unref) (EBookQuery *q);
144     GQuark (*e_book_error_quark) (void);
145     gboolean (*e_book_remove_contact) (EBook *book, const char *id, GError **error);
146     char* (*e_vcard_to_string) (EVCard *evc, EVCardFormat format);
147     gboolean (*e_contact_inline_local_photos) (EContact *contact, GError **error);
148 # endif /* ENABLE_EBOOK */
149
150 # ifdef ENABLE_ECAL
151     gboolean (*e_cal_add_timezone) (ECal *ecal, icaltimezone *izone, GError **error);
152     icalcomponent *(*e_cal_component_get_icalcomponent) (ECalComponent *comp);
153     void (*e_cal_component_get_last_modified) (ECalComponent *comp, struct icaltimetype **t);
154     GType (*e_cal_component_get_type) (void);
155     gboolean (*e_cal_create_object) (ECal *ecal, icalcomponent *icalcomp, char **uid, GError **error);
156     GQuark (*e_calendar_error_quark) (void) G_GNUC_CONST;
157     char* (*e_cal_get_component_as_string) (ECal *ecal, icalcomponent *icalcomp);
158     gboolean (*e_cal_get_object) (ECal *ecal, const char *uid, const char *rid, icalcomponent **icalcomp, GError **error);
159     gboolean (*e_cal_get_object_list_as_comp) (ECal *ecal, const char *query, GList **objects, GError **error);
160     gboolean (*e_cal_get_sources) (ESourceList **sources, ECalSourceType type, GError **error);
161     gboolean (*e_cal_get_timezone) (ECal *ecal, const char *tzid, icaltimezone **zone, GError **error);
162     gboolean (*e_cal_modify_object) (ECal *ecal, icalcomponent *icalcomp, CalObjModType mod, GError **error);
163     ECal *(*e_cal_new) (ESource *source, ECalSourceType type);
164     ECal *(*e_cal_new_from_uri) (const gchar *uri, ECalSourceType type);
165     ECal *(*e_cal_new_system_calendar) (void);
166     ECal *(*e_cal_new_system_tasks) (void);
167     const gchar *(*e_cal_get_uri)(ECal *);
168     gboolean (*e_cal_open) (ECal *ecal, gboolean only_if_exists, GError **error);
169     gboolean (*e_cal_remove_object) (ECal *ecal, const char *uid, GError **error);
170     gboolean (*e_cal_remove_object_with_mod) (ECal *ecal, const char *uid, const char *rid, CalObjModType mod, GError **error);
171     void (*e_cal_set_auth_func) (ECal *ecal, ECalAuthFunc func, gpointer data);
172 #endif /* ENABLE_ECAL */
173 #ifdef ENABLE_ICAL
174     void (*icalcomponent_add_component) (icalcomponent* parent, icalcomponent* child);
175     void (*icalcomponent_add_property) (icalcomponent* comp, icalproperty* prop);
176     char* (*icalcomponent_as_ical_string) (icalcomponent* component);
177     void (*icalcomponent_free) (icalcomponent* component);
178     icalcomponent* (*icalcomponent_get_first_component) (icalcomponent* component, icalcomponent_kind kind);
179     icalproperty* (*icalcomponent_get_first_property) (icalcomponent* component, icalproperty_kind kind);
180     icalcomponent* (*icalcomponent_get_next_component) (icalcomponent* component, icalcomponent_kind kind);
181     icalproperty* (*icalcomponent_get_next_property) (icalcomponent* component, icalproperty_kind kind);
182     struct icaltimetype (*icalcomponent_get_recurrenceid) (icalcomponent* comp);
183     icaltimezone* (*icalcomponent_get_timezone) (icalcomponent* comp, const char *tzid);
184     const char* (*icalcomponent_get_location) (icalcomponent* comp);
185     const char* (*icalcomponent_get_summary) (icalcomponent* comp);
186     const char* (*icalcomponent_get_uid) (icalcomponent* comp);
187     struct icaltimetype (*icalcomponent_get_dtstart)(icalcomponent* comp);
188     icalcomponent_kind (*icalcomponent_isa) (const icalcomponent* component);
189     icalcomponent* (*icalcomponent_new_clone) (icalcomponent* component);
190     icalcomponent* (*icalcomponent_new_from_string) (char* str);
191     icalcomponent* (*icalcomponent_new) (icalcomponent_kind kind);
192     void (*icalcomponent_merge_component) (icalcomponent* component, icalcomponent *comp_to_merge);
193     void (*icalcomponent_remove_component) (icalcomponent* component, icalcomponent *comp_to_remove);
194     void (*icalcomponent_remove_property) (icalcomponent* component, icalproperty* property);
195     void (*icalcomponent_set_uid) (icalcomponent* comp, const char* v);
196     void (*icalcomponent_set_recurrenceid)(icalcomponent* comp, struct icaltimetype v);
197     icalcomponent* (*icalcomponent_vanew) (icalcomponent_kind kind, ...);
198     const char* (*icalparameter_get_tzid) (const icalparameter* value);
199     void (*icalparameter_set_tzid) (icalparameter* value, const char* v);
200     icalparameter *(*icalparameter_new_from_value_string)(icalparameter_kind kind, const char *value);
201     icalparameter *(*icalparameter_new_clone)(icalparameter *param);
202     icalproperty *(*icalproperty_new_clone)(icalproperty *prop);
203     void (*icalproperty_free)(icalproperty *prop);
204     const char* (*icalproperty_get_description) (const icalproperty* prop);
205     const char* (*icalproperty_get_property_name) (const icalproperty* prop);
206     const char* (*icalproperty_get_uid) (const icalproperty* prop);
207     struct icaltimetype (*icalproperty_get_recurrenceid) (const icalproperty* prop);
208     void (*icalproperty_set_recurrenceid) (const icalproperty* prop, icaltimetype rid);
209     int (*icalproperty_get_sequence) (const icalproperty* prop);
210     icalparameter* (*icalproperty_get_first_parameter) (icalproperty* prop, icalparameter_kind kind);
211     struct icaltimetype (*icalproperty_get_lastmodified) (const icalproperty* prop);
212     icalparameter* (*icalproperty_get_next_parameter) (icalproperty* prop, icalparameter_kind kind);
213     void (*icalproperty_set_parameter)(icalproperty *prop, icalparameter *param);
214     const char* (*icalproperty_get_summary) (const icalproperty* prop);
215     icalproperty* (*icalproperty_new_description) (const char* v);
216     icalproperty* (*icalproperty_new_summary) (const char* v);
217     icalproperty* (*icalproperty_new_sequence) (int v);
218     icalproperty* (*icalproperty_new_uid) (const char* v);
219     icalproperty* (*icalproperty_new_recurrenceid) (icaltimetype v);
220     void (*icalproperty_set_value_from_string) (icalproperty* prop,const char* value, const char* kind);
221     void (*icalproperty_set_dtstamp) (icalproperty* prop, struct icaltimetype v);
222     void (*icalproperty_set_lastmodified) (icalproperty* prop, struct icaltimetype v);
223     void (*icalproperty_set_sequence) (icalproperty* prop, int v);
224     void (*icalproperty_set_uid) (icalproperty* prop, const char *v);
225     void (*icalproperty_remove_parameter_by_kind)(icalproperty* prop,
226                                                   icalparameter_kind kind);
227     void (*icalproperty_add_parameter)(icalproperty* prop,icalparameter* parameter);
228     const char* (*icalproperty_get_value_as_string)(const icalproperty* prop);
229     const char* (*icalproperty_get_x_name)(icalproperty* prop);
230     icalproperty* (*icalproperty_new_from_string)(const char* str);
231
232     int (*icaltime_is_null_time)(const struct icaltimetype t);
233     int (*icaltime_is_utc)(const struct icaltimetype t);
234     const char* (*icaltime_as_ical_string) (const struct icaltimetype tt);
235     icaltimetype (*icaltime_from_string)(const char* str);
236     icaltimetype (*icaltime_from_timet)(const time_t v, const int is_date);
237     icaltimetype (*icaltime_null_time)();
238     time_t (*icaltime_as_timet)(const struct icaltimetype);
239     void (*icaltime_set_timezone)(icaltimetype *tt, const icaltimezone *zone);
240     struct icaltimetype (*icaltime_convert_to_zone)(const struct icaltimetype tt, icaltimezone *zone);
241     const icaltimezone *(*icaltime_get_timezone)(const struct icaltimetype t);
242
243     void (*icaltimezone_free) (icaltimezone *zone, int free_struct);
244     icaltimezone* (*icaltimezone_get_builtin_timezone) (const char *location);
245     icaltimezone* (*icaltimezone_get_builtin_timezone_from_tzid) (const char *tzid);
246     icalcomponent* (*icaltimezone_get_component) (icaltimezone *zone);
247     char* (*icaltimezone_get_tzid) (icaltimezone *zone);
248     icaltimezone *(*icaltimezone_new) (void);
249     int (*icaltimezone_set_component) (icaltimezone *zone, icalcomponent *comp);
250
251     // optional variants which allocate the returned string for us
252     const char* (*icaltime_as_ical_string_r) (const struct icaltimetype tt);
253     char* (*icalcomponent_as_ical_string_r) (icalcomponent* component);
254     char* (*icalproperty_get_value_as_string_r) (const icalproperty* prop);
255 # endif /* ENABLE_ICAL */
256
257 # ifdef ENABLE_BLUETOOTH
258     int (*sdp_close)(sdp_session_t *session);
259     sdp_session_t *(*sdp_connect)(const bdaddr_t *src, const bdaddr_t *dst, uint32_t flags);
260     /** libbluetooth.so.2 version of sdp_extract_pdu() */
261     sdp_record_t *(*sdp_extract_pdu)(const uint8_t *pdata, int *scanned);
262     /** alternate version of sdp_extract_pdu() only found in some releases of libbluetooth.so.2 */
263     sdp_record_t *(*sdp_extract_pdu_safe)(const uint8_t *pdata, int bufsize, int *scanned);
264     /** libbluetooth.so.2 version of sdp_extract_seqtype() */
265     int (*sdp_extract_seqtype)(const uint8_t *buf, uint8_t *dtdp, int *size);
266     /** alternate version of sdp_extract_seqtype() only found in some releases of libbluetooth.so.2 */
267     int (*sdp_extract_seqtype_safe)(const uint8_t *buf, int bufsize, uint8_t *dtdp, int *size);
268     int (*sdp_get_access_protos)(const sdp_record_t *rec, sdp_list_t **protos);
269     int (*sdp_get_proto_port)(const sdp_list_t *list, int proto);
270     int (*sdp_get_socket)(const sdp_session_t *session);
271     sdp_list_t *(*sdp_list_append)(sdp_list_t *list, void *d);
272     void        (*sdp_list_free)(sdp_list_t *list, sdp_free_func_t f);
273     int (*sdp_process)(sdp_session_t *session);
274     void (*sdp_record_free)(sdp_record_t *rec);
275     int (*sdp_service_search_attr_async)(sdp_session_t *session, const sdp_list_t *search, sdp_attrreq_type_t reqtype, const sdp_list_t *attrid_list);
276     int (*sdp_set_notify)(sdp_session_t *session, sdp_callback_t *func, void *udata);
277     uuid_t *(*sdp_uuid128_create)(uuid_t *uuid, const void *data);
278     int (*str2ba)(const char *str, bdaddr_t *ba);
279 # endif /* ENABLE_BLUETOOTH */
280
281     int initialized;
282 };
283
284 extern struct EDSAbiWrapper EDSAbiWrapperSingleton;
285
286 # ifndef EDS_ABI_WRAPPER_NO_REDEFINE
287 #  ifdef HAVE_EDS
288 #   define e_source_get_type EDSAbiWrapperSingleton.e_source_get_type
289 #   define e_source_get_uri EDSAbiWrapperSingleton.e_source_get_uri
290 #   define e_source_group_get_type EDSAbiWrapperSingleton.e_source_group_get_type
291 #   define e_source_group_peek_sources EDSAbiWrapperSingleton.e_source_group_peek_sources
292 #   define e_source_list_peek_groups EDSAbiWrapperSingleton.e_source_list_peek_groups
293 #   define e_source_peek_name EDSAbiWrapperSingleton.e_source_peek_name
294 #  endif /* HAVE_EDS */
295
296 #  ifdef ENABLE_EBOOK
297 #   define e_book_add_contact EDSAbiWrapperSingleton.e_book_add_contact
298 #   define e_book_authenticate_user EDSAbiWrapperSingleton.e_book_authenticate_user
299 #   define e_book_commit_contact EDSAbiWrapperSingleton.e_book_commit_contact
300 #   define e_contact_duplicate EDSAbiWrapperSingleton.e_contact_duplicate
301 #   define e_contact_get_const EDSAbiWrapperSingleton.e_contact_get_const
302 #   define e_contact_get EDSAbiWrapperSingleton.e_contact_get
303 #   define e_contact_name_free EDSAbiWrapperSingleton.e_contact_name_free
304 #   define e_contact_get_type EDSAbiWrapperSingleton.e_contact_get_type
305 #   define e_contact_new_from_vcard EDSAbiWrapperSingleton.e_contact_new_from_vcard
306 #   define e_contact_set EDSAbiWrapperSingleton.e_contact_set
307 #   define e_book_error_quark EDSAbiWrapperSingleton.e_book_error_quark
308 #   define e_book_get_addressbooks EDSAbiWrapperSingleton.e_book_get_addressbooks
309 #   define e_book_get_changes EDSAbiWrapperSingleton.e_book_get_changes
310 #   define e_book_get_contact EDSAbiWrapperSingleton.e_book_get_contact
311 #   define e_book_get_contacts EDSAbiWrapperSingleton.e_book_get_contacts
312 #   define e_book_get_supported_auth_methods EDSAbiWrapperSingleton.e_book_get_supported_auth_methods
313 #   define e_book_get_uri EDSAbiWrapperSingleton.e_book_get_uri
314 #   define e_book_new EDSAbiWrapperSingleton.e_book_new
315 #   define e_book_new_default_addressbook EDSAbiWrapperSingleton.e_book_new_default_addressbook
316 #   define e_book_new_from_uri EDSAbiWrapperSingleton.e_book_new_from_uri
317 #   define e_book_new_system_addressbook EDSAbiWrapperSingleton.e_book_new_system_addressbook
318 #   define e_book_open EDSAbiWrapperSingleton.e_book_open
319 #   define e_book_query_any_field_contains EDSAbiWrapperSingleton.e_book_query_any_field_contains
320 #   define e_book_query_unref EDSAbiWrapperSingleton.e_book_query_unref
321 #   define e_book_remove_contact EDSAbiWrapperSingleton.e_book_remove_contact
322 #   define e_vcard_to_string EDSAbiWrapperSingleton.e_vcard_to_string
323 #   define e_contact_inline_local_photos EDSAbiWrapperSingleton.e_contact_inline_local_photos
324 #  endif /* ENABLE_EBOOK */
325
326 #  ifdef ENABLE_ECAL
327 #   define e_cal_add_timezone EDSAbiWrapperSingleton.e_cal_add_timezone
328 #   define e_cal_component_get_icalcomponent EDSAbiWrapperSingleton.e_cal_component_get_icalcomponent
329 #   define e_cal_component_get_last_modified EDSAbiWrapperSingleton.e_cal_component_get_last_modified
330 #   define e_cal_component_get_type EDSAbiWrapperSingleton.e_cal_component_get_type
331 #   define e_cal_create_object EDSAbiWrapperSingleton.e_cal_create_object
332 #   define e_calendar_error_quark EDSAbiWrapperSingleton.e_calendar_error_quark
333 #   define e_cal_get_component_as_string EDSAbiWrapperSingleton.e_cal_get_component_as_string
334 #   define e_cal_get_object EDSAbiWrapperSingleton.e_cal_get_object
335 #   define e_cal_get_object_list_as_comp EDSAbiWrapperSingleton.e_cal_get_object_list_as_comp
336 #   define e_cal_get_sources EDSAbiWrapperSingleton.e_cal_get_sources
337 #   define e_cal_get_timezone EDSAbiWrapperSingleton.e_cal_get_timezone
338 #   define e_cal_modify_object EDSAbiWrapperSingleton.e_cal_modify_object
339 #   define e_cal_new EDSAbiWrapperSingleton.e_cal_new
340 #   define e_cal_new_from_uri EDSAbiWrapperSingleton.e_cal_new_from_uri
341 #   define e_cal_new_system_calendar EDSAbiWrapperSingleton.e_cal_new_system_calendar
342 #   define e_cal_new_system_tasks EDSAbiWrapperSingleton.e_cal_new_system_tasks
343 #   define e_cal_get_uri EDSAbiWrapperSingleton.e_cal_get_uri
344 #   define e_cal_open EDSAbiWrapperSingleton.e_cal_open
345 #   define e_cal_remove_object EDSAbiWrapperSingleton.e_cal_remove_object
346 #   define e_cal_remove_object_with_mod EDSAbiWrapperSingleton.e_cal_remove_object_with_mod
347 #   define e_cal_set_auth_func EDSAbiWrapperSingleton.e_cal_set_auth_func
348 #  endif /* ENABLE_ECAL */
349 #  ifdef ENABLE_ICAL
350 #   define icalcomponent_add_component EDSAbiWrapperSingleton.icalcomponent_add_component
351 #   define icalcomponent_add_property EDSAbiWrapperSingleton.icalcomponent_add_property
352 #   define icalcomponent_as_ical_string (EDSAbiWrapperSingleton.icalcomponent_as_ical_string_r ? EDSAbiWrapperSingleton.icalcomponent_as_ical_string_r : EDSAbiWrapperSingleton.icalcomponent_as_ical_string)
353 #   define icalcomponent_free EDSAbiWrapperSingleton.icalcomponent_free
354 #   define icalcomponent_get_first_component EDSAbiWrapperSingleton.icalcomponent_get_first_component
355 #   define icalcomponent_get_first_property EDSAbiWrapperSingleton.icalcomponent_get_first_property
356 #   define icalcomponent_get_next_component EDSAbiWrapperSingleton.icalcomponent_get_next_component
357 #   define icalcomponent_get_next_property EDSAbiWrapperSingleton.icalcomponent_get_next_property
358 #   define icalcomponent_get_recurrenceid EDSAbiWrapperSingleton.icalcomponent_get_recurrenceid
359 #   define icalcomponent_get_timezone EDSAbiWrapperSingleton.icalcomponent_get_timezone
360 #   define icalcomponent_get_location EDSAbiWrapperSingleton.icalcomponent_get_location
361 #   define icalcomponent_get_summary EDSAbiWrapperSingleton.icalcomponent_get_summary
362 #   define icalcomponent_get_uid EDSAbiWrapperSingleton.icalcomponent_get_uid
363 #   define icalcomponent_get_dtstart EDSAbiWrapperSingleton.icalcomponent_get_dtstart
364 #   define icalcomponent_isa EDSAbiWrapperSingleton.icalcomponent_isa
365 #   define icalcomponent_new_clone EDSAbiWrapperSingleton.icalcomponent_new_clone
366 #   define icalcomponent_new_from_string EDSAbiWrapperSingleton.icalcomponent_new_from_string
367 #   define icalcomponent_new EDSAbiWrapperSingleton.icalcomponent_new
368 #   define icalcomponent_merge_component EDSAbiWrapperSingleton.icalcomponent_merge_component
369 #   define icalcomponent_remove_component EDSAbiWrapperSingleton.icalcomponent_remove_component
370 #   define icalcomponent_remove_property EDSAbiWrapperSingleton.icalcomponent_remove_property
371 #   define icalcomponent_set_uid EDSAbiWrapperSingleton.icalcomponent_set_uid
372 #   define icalcomponent_set_recurrenceid EDSAbiWrapperSingleton.icalcomponent_set_recurrenceid
373 #   define icalcomponent_vanew EDSAbiWrapperSingleton.icalcomponent_vanew
374 #   define icalparameter_get_tzid EDSAbiWrapperSingleton.icalparameter_get_tzid
375 #   define icalparameter_set_tzid EDSAbiWrapperSingleton.icalparameter_set_tzid
376 #   define icalparameter_new_from_value_string EDSAbiWrapperSingleton.icalparameter_new_from_value_string
377 #   define icalparameter_new_clone EDSAbiWrapperSingleton.icalparameter_new_clone
378 #   define icalproperty_new_clone EDSAbiWrapperSingleton.icalproperty_new_clone
379 #   define icalproperty_free EDSAbiWrapperSingleton.icalproperty_free
380 #   define icalproperty_get_description EDSAbiWrapperSingleton.icalproperty_get_description
381 #   define icalproperty_get_uid EDSAbiWrapperSingleton.icalproperty_get_uid
382 #   define icalproperty_get_recurrenceid EDSAbiWrapperSingleton.icalproperty_get_recurrenceid
383 #   define icalproperty_set_recurrenceid EDSAbiWrapperSingleton.icalproperty_set_recurrenceid
384 #   define icalproperty_get_sequence EDSAbiWrapperSingleton.icalproperty_get_sequence
385 #   define icalproperty_get_property_name EDSAbiWrapperSingleton.icalproperty_get_property_name
386 #   define icalproperty_get_first_parameter EDSAbiWrapperSingleton.icalproperty_get_first_parameter
387 #   define icalproperty_get_lastmodified EDSAbiWrapperSingleton.icalproperty_get_lastmodified
388 #   define icalproperty_get_next_parameter EDSAbiWrapperSingleton.icalproperty_get_next_parameter
389 #   define icalproperty_set_parameter EDSAbiWrapperSingleton.icalproperty_set_parameter
390 #   define icalproperty_get_summary EDSAbiWrapperSingleton.icalproperty_get_summary
391 #   define icalproperty_new_description EDSAbiWrapperSingleton.icalproperty_new_description
392 #   define icalproperty_new_summary EDSAbiWrapperSingleton.icalproperty_new_summary
393 #   define icalproperty_new_uid EDSAbiWrapperSingleton.icalproperty_new_uid
394 #   define icalproperty_new_sequence EDSAbiWrapperSingleton.icalproperty_new_sequence
395 #   define icalproperty_new_recurrenceid EDSAbiWrapperSingleton.icalproperty_new_recurrenceid
396 #   define icalproperty_set_value_from_string EDSAbiWrapperSingleton.icalproperty_set_value_from_string
397 #   define icalproperty_set_dtstamp EDSAbiWrapperSingleton.icalproperty_set_dtstamp
398 #   define icalproperty_set_lastmodified EDSAbiWrapperSingleton.icalproperty_set_lastmodified
399 #   define icalproperty_set_sequence EDSAbiWrapperSingleton.icalproperty_set_sequence
400 #   define icalproperty_set_uid EDSAbiWrapperSingleton.icalproperty_set_uid
401 #   define icalproperty_remove_parameter_by_kind EDSAbiWrapperSingleton.icalproperty_remove_parameter_by_kind
402 #   define icalproperty_add_parameter EDSAbiWrapperSingleton.icalproperty_add_parameter
403 #   define icalproperty_get_value_as_string (EDSAbiWrapperSingleton.icalproperty_get_value_as_string_r ? EDSAbiWrapperSingleton.icalproperty_get_value_as_string_r : (char *(*)(const icalproperty*))EDSAbiWrapperSingleton.icalproperty_get_value_as_string)
404 #   define icalproperty_get_x_name EDSAbiWrapperSingleton.icalproperty_get_x_name
405 #   define icalproperty_new_from_string EDSAbiWrapperSingleton.icalproperty_new_from_string
406 #   define icaltime_is_null_time EDSAbiWrapperSingleton.icaltime_is_null_time
407 #   define icaltime_is_utc EDSAbiWrapperSingleton.icaltime_is_utc
408 #   define icaltime_as_ical_string (EDSAbiWrapperSingleton.icaltime_as_ical_string_r ? EDSAbiWrapperSingleton.icaltime_as_ical_string_r : EDSAbiWrapperSingleton.icaltime_as_ical_string)
409 #   define icaltime_from_string EDSAbiWrapperSingleton.icaltime_from_string
410 #   define icaltime_from_timet EDSAbiWrapperSingleton.icaltime_from_timet
411 #   define icaltime_null_time EDSAbiWrapperSingleton.icaltime_null_time
412 #   define icaltime_as_timet EDSAbiWrapperSingleton.icaltime_as_timet
413 #   define icaltime_set_timezone EDSAbiWrapperSingleton.icaltime_set_timezone
414 #   define icaltime_convert_to_zone EDSAbiWrapperSingleton.icaltime_convert_to_zone
415 #   define icaltime_get_timezone EDSAbiWrapperSingleton.icaltime_get_timezone
416 #   define icaltimezone_free EDSAbiWrapperSingleton.icaltimezone_free
417 #   define icaltimezone_get_builtin_timezone EDSAbiWrapperSingleton.icaltimezone_get_builtin_timezone
418 #   define icaltimezone_get_builtin_timezone_from_tzid EDSAbiWrapperSingleton.icaltimezone_get_builtin_timezone_from_tzid
419 #   define icaltimezone_get_component EDSAbiWrapperSingleton.icaltimezone_get_component
420 #   define icaltimezone_get_tzid EDSAbiWrapperSingleton.icaltimezone_get_tzid
421 #   define icaltimezone_new EDSAbiWrapperSingleton.icaltimezone_new
422 #   define icaltimezone_set_component EDSAbiWrapperSingleton.icaltimezone_set_component
423 #  endif /* ENABLE_ICAL */
424 #  ifdef ENABLE_BLUETOOTH
425 #   define sdp_close EDSAbiWrapperSingleton.sdp_close
426 #   define sdp_connect EDSAbiWrapperSingleton.sdp_connect
427 #   define sdp_extract_pdu do_not_use_sdp_extract_pdu
428 #   define sdp_extract_pdu_safe EDSAbiWrapperSingleton.sdp_extract_pdu_safe
429 #   define sdp_extract_seqtype do_not_use_sdp_extract_seqtype
430 #   define sdp_extract_seqtype_safe EDSAbiWrapperSingleton.sdp_extract_seqtype_safe
431 #   define sdp_get_access_protos EDSAbiWrapperSingleton.sdp_get_access_protos
432 #   define sdp_get_proto_port EDSAbiWrapperSingleton.sdp_get_proto_port
433 #   define sdp_get_socket EDSAbiWrapperSingleton.sdp_get_socket
434 #   define sdp_list_append EDSAbiWrapperSingleton.sdp_list_append
435 #   define sdp_list_free EDSAbiWrapperSingleton.sdp_list_free
436 #   define sdp_process EDSAbiWrapperSingleton.sdp_process
437 #   define sdp_record_free EDSAbiWrapperSingleton.sdp_record_free
438 #   define sdp_service_search_attr_async EDSAbiWrapperSingleton.sdp_service_search_attr_async
439 #   define sdp_set_notify EDSAbiWrapperSingleton.sdp_set_notify
440 #   define sdp_uuid128_create EDSAbiWrapperSingleton.sdp_uuid128_create
441 #   define str2ba EDSAbiWrapperSingleton.str2ba
442 #  endif /* ENABLE_BLUETOOTH */
443 # endif /* EDS_ABI_WRAPPER_NO_REDEFINE */
444
445 #else /* EVOLUTION_COMPATIBILITY */
446
447 # if !defined(EDS_ABI_WRAPPER_NO_REDEFINE) && defined(HAVE_LIBICAL_R)
448 #  ifdef ENABLE_ICAL
449 #   ifndef LIBICAL_MEMFIXES
450      /* This changes the semantic of the normal functions the same way as libecal did. */
451 #    define LIBICAL_MEMFIXES 1
452 #    define icaltime_as_ical_string icaltime_as_ical_string_r
453 #    define icalcomponent_as_ical_string icalcomponent_as_ical_string_r
454 #    define icalproperty_get_value_as_string icalproperty_get_value_as_string_r
455 #   endif /* LIBICAL_MEMFIXES */
456 #  endif /* ENABLE_ICAL */
457 # endif /* EDS_ABI_WRAPPER_NO_REDEFINE */
458 #endif /* EVOLUTION_COMPATIBILITY */
459
460 /** initialize pointers to EDS functions, if necessary; can be called multiple times */
461 void EDSAbiWrapperInit();
462
463 const char *EDSAbiWrapperInfo();
464 const char *EDSAbiWrapperDebug();
465
466 #ifdef __cplusplus
467 }
468 #endif
469
470 #endif /* INCL_EDS_ABI_WRAPPER */