On Sun, 14 Feb 2016 13:05:28 +0100 (CET), Eric J <eric@deptj.eu> wrote: > Resending with additional information: > I have been using notmuch for a while and I wanted to be able to use > notmuch queries in some Tcl stuff I have been using for a rather longer > while. I could have just called the notmuch CLI every time, but I thought > "no, it's a library, there should be bindings". > > Bindings made me think of SWIG, which seems to have been tried for > notmuch in the past but abandoned. However, with some time available... > > ... I can now, from Tcl, use the API functions from the library to > create a database, close and open it, add messages, tag them, run queries > and retrieve information about the results. I haven't tested every API > function yet, but I will be able to go on with my own needs at least. It > is only functions with pointer-to-pointer arguments that need special > attention, and that is all in the SWIG interface file. You can see that at > http://chiselapp.com/user/emj/repository/tclnotmuch/artifact/527aee944d?txt=1&ln=0 > - its about 50 lines (plus some blanks). > > That's a Fossil repository, with a home page at > http://chiselapp.com/user/emj/repository/tclnotmuch , if anyone wants > to look further. I think it may benefit from more wrapping from the Tcl > side, just for usability. > > BTW, I have no idea if or how the interface file would have to be changed > for other languages. The bindings work, but for a use case where simultaneous database access from different processes is needed (e.g. processing emails as they arrive), lost updates are possible for the following Tcl versions: * 8.5.18 built with threads (not the default) * 8.6.[1-4] built with threads (default) However, the following Tcl versions do not have this problem: * 8.5.18 built without threads (default) * 8.5.19 built with or without threads * 8.6.[1-4] built without threads (not the default) * 8.6.5 built with or without threads Earlier 8.5.x are presumably the same as 8.5.18. The problems, where they exist, are due to a weird interaction between Tcl's thread implementation and Xapian's locking mechanism. The Tcl fix in 8.5.19/8.6.5 was made for reasons unrelated to Xapian locking, but fixes it anyway. Eric -- ms fnd in a lbry