On Thu, Oct 10 2013, David Bremner <david@tethera.net> wrote: > Tomi Ollila <tomi.ollila@iki.fi> writes: >>> I'm not opposed to doing an SONAME bump for 0.17. Are there other ABI >>> breaking changes that we have been holding back on? Can these maybe go >>> through at the same time? >> >> Maybe something along these lines... >> >> (Quick draft for the API part; to start discussion before working too much >> for something that is going to be dropped...) >> >> notmuch_status_t >> -notmuch_database_create (const char *path, notmuch_database_t **database); >> +notmuch_database_create (const char *path, >> + notmuch_loghook_t *loghook, >> + notmuch_database_t **database); > > Another idea floated (by Austin?) was to pass in an options struct, to > allow future options to be added without changing the function > signature. I guess with some care this could be done in an upwardly > compatible way. Maybe something like #define NOTMUCH_API_OPTIONS_VERSION 1 typedef struct { int options_version; void (*log)(void *, int level, int status, const char * format, ...); void * logdata; } notmuch_options_t; ... notmuch_status_t notmuch_database_create (const char *path, notmuch_options_t *options, notmuch_database_t **database); ... notmuch_status_t notmuch_database_open (const char *path, notmuch_database_mode_t mode, notmuch_options_t *options, notmuch_database_t **database); then in use: notmuch_options_t options = { .options_version = NOTMUCH_API_OPTIONS_VERSION, .. äsh, this has problem that the macro changes in header file but the structure initialization is not following automatically (in other fields than that). Therefore perhaps "fixing" the version macros: #define NOTMUCH_API_OPTIONS_VERSION_1 1 /* #define NOTMUCH_API_OPTIONS_VERSION_2 2 // added in the future */ notmuch_options_t options = { .options_version = NOTMUCH_API_OPTIONS_VERSION_1, .log = log_to_stderr, .logdata = NULL }; Well, this is one idea (does not sound as good as I initially thought...) how does other software tackle this kind of issues... If something like this is finally chosen we could provide easy transition path to allow NULL as options -- making notmuch CLI behave as it used to be (log to stderr...). > d Tomi