[RFC PATCH] Python bindings: CDLL("libnotmuch.3.dylib") on Darwin

Subject: [RFC PATCH] Python bindings: CDLL("libnotmuch.3.dylib") on Darwin

Date: Tue, 25 Jun 2013 17:36:56 +0300

To: notmuch@notmuchmail.org

Cc: tomi.ollila@iki.fi

From: Tomi Ollila

Use os.uname() to check for 'Darwin' and load "libnotmuch.3.dylib"
instead of "libnotmuch.so.3" if that is the case.

This is followup to thread starting from


For anyone interested: this is basically no-overhead addition as ctypes
already loads os module (is "available" as ctypes._os) -- Comparison using
strace(1) showed that uname system call is used in addition to other processing.

This patch is modeled after _lb_'s comments on IRC:

< _lb_> nmlib = CDLL("libnotmuch.so.3") needs to be replaced with
        nmlib = CDLL("libnotmuch.3.dylib") in OSX
< _lb_> Works like a charm! Mmm... I'll have to subscribe to the list
        to send the patch...
< _lb_> I guess the quid of the question is to have an os detection
        if so it loads the right lib?

... a few days ago, but the patch didn't arrive yet ;D

I tested that this still works on Linux, but did not test on Mac OS X;
also I did not think much how to handle the importing and the if test.

Anyone using Mac care to take over -- you are probably more interested
of getting this thing to work :D


 bindings/python/notmuch/globals.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/bindings/python/notmuch/globals.py b/bindings/python/notmuch/globals.py
index c7632c3..2deb87c 100644
--- a/bindings/python/notmuch/globals.py
+++ b/bindings/python/notmuch/globals.py
@@ -22,7 +22,11 @@ from ctypes import CDLL, Structure, POINTER
 #package-global instance of the notmuch library
-    nmlib = CDLL("libnotmuch.so.3")
+    from os import uname
+    if uname()[0] == 'Darwin':
+        nmlib = CDLL("libnotmuch.3.dylib")
+    else:
+        nmlib = CDLL("libnotmuch.so.3")
     raise ImportError("Could not find shared 'notmuch' library.")