[PATCH] ruby: extern linkage portability improvement
authorTomi Ollila <tomi.ollila@iki.fi>
Thu, 10 May 2012 17:12:44 +0000 (20:12 +0300)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 17:47:02 +0000 (09:47 -0800)
08/f52ec1e721fe4a7512c9e16302d177d3597f1f [new file with mode: 0644]

diff --git a/08/f52ec1e721fe4a7512c9e16302d177d3597f1f b/08/f52ec1e721fe4a7512c9e16302d177d3597f1f
new file mode 100644 (file)
index 0000000..2822c8f
--- /dev/null
@@ -0,0 +1,147 @@
+Return-Path: <too@guru.guru-group.fi>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 1F05E431FB6\r
+       for <notmuch@notmuchmail.org>; Thu, 10 May 2012 10:12:55 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0 tagged_above=-999 required=5 tests=[none]\r
+       autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id GaSd0YQneTVu for <notmuch@notmuchmail.org>;\r
+       Thu, 10 May 2012 10:12:54 -0700 (PDT)\r
+Received: from guru.guru-group.fi (guru-group.fi [87.108.86.66])\r
+       by olra.theworths.org (Postfix) with ESMTP id B7233431FAE\r
+       for <notmuch@notmuchmail.org>; Thu, 10 May 2012 10:12:53 -0700 (PDT)\r
+Received: by guru.guru-group.fi (Postfix, from userid 501)\r
+       id 5F30568021; Thu, 10 May 2012 20:12:46 +0300 (EEST)\r
+From: Tomi Ollila <tomi.ollila@iki.fi>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH] ruby: extern linkage portability improvement\r
+Date: Thu, 10 May 2012 20:12:44 +0300\r
+Message-Id: <1336669964-24231-1-git-send-email-tomi.ollila@iki.fi>\r
+X-Mailer: git-send-email 1.7.6.1\r
+Cc: Tomi Ollila <tomi.ollila@iki.fi>\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Thu, 10 May 2012 17:12:55 -0000\r
+\r
+Some C compilers are stricter when it comes to (tentative) definition\r
+of a variable -- in those compilers introducing variable without 'extern'\r
+keyword always allocates new 'storage' to the variable and linking all\r
+these modules fails due to duplicate symbols.\r
+\r
+This change uses some macro trickery to avoid writing every variable twice.\r
+\r
+This is reimplementation of Charlie Allom's patch:\r
+id:"1336481467-66356-1-git-send-email-charlie@mediasp.com"\r
+\r
+combining information from other change made by Ali Polatel.\r
+---\r
+\r
+Charlie: could you test whether this patch actually work ? :)\r
+\r
+Everyone: what do you think of the "hiding extern" macro trick ?\r
+\r
+ bindings/ruby/defs.h |   56 +++++++++++++++++++++++++++----------------------\r
+ bindings/ruby/init.c |    2 +\r
+ 2 files changed, 33 insertions(+), 25 deletions(-)\r
+\r
+diff --git a/bindings/ruby/defs.h b/bindings/ruby/defs.h\r
+index 85d8205..2531760 100644\r
+--- a/bindings/ruby/defs.h\r
++++ b/bindings/ruby/defs.h\r
+@@ -24,31 +24,37 @@\r
+ #include <ruby.h>\r
+ #include "notmuch.h"\r
+ \r
+-VALUE notmuch_rb_cDatabase;\r
+-VALUE notmuch_rb_cDirectory;\r
+-VALUE notmuch_rb_cFileNames;\r
+-VALUE notmuch_rb_cQuery;\r
+-VALUE notmuch_rb_cThreads;\r
+-VALUE notmuch_rb_cThread;\r
+-VALUE notmuch_rb_cMessages;\r
+-VALUE notmuch_rb_cMessage;\r
+-VALUE notmuch_rb_cTags;\r
+-\r
+-VALUE notmuch_rb_eBaseError;\r
+-VALUE notmuch_rb_eDatabaseError;\r
+-VALUE notmuch_rb_eMemoryError;\r
+-VALUE notmuch_rb_eReadOnlyError;\r
+-VALUE notmuch_rb_eXapianError;\r
+-VALUE notmuch_rb_eFileError;\r
+-VALUE notmuch_rb_eFileNotEmailError;\r
+-VALUE notmuch_rb_eNullPointerError;\r
+-VALUE notmuch_rb_eTagTooLongError;\r
+-VALUE notmuch_rb_eUnbalancedFreezeThawError;\r
+-VALUE notmuch_rb_eUnbalancedAtomicError;\r
+-\r
+-ID ID_call;\r
+-ID ID_db_create;\r
+-ID ID_db_mode;\r
++#ifdef RUBY_INIT_C\r
++#define extern\r
++#endif\r
++\r
++extern VALUE notmuch_rb_cDatabase;\r
++extern VALUE notmuch_rb_cDirectory;\r
++extern VALUE notmuch_rb_cFileNames;\r
++extern VALUE notmuch_rb_cQuery;\r
++extern VALUE notmuch_rb_cThreads;\r
++extern VALUE notmuch_rb_cThread;\r
++extern VALUE notmuch_rb_cMessages;\r
++extern VALUE notmuch_rb_cMessage;\r
++extern VALUE notmuch_rb_cTags;\r
++\r
++extern VALUE notmuch_rb_eBaseError;\r
++extern VALUE notmuch_rb_eDatabaseError;\r
++extern VALUE notmuch_rb_eMemoryError;\r
++extern VALUE notmuch_rb_eReadOnlyError;\r
++extern VALUE notmuch_rb_eXapianError;\r
++extern VALUE notmuch_rb_eFileError;\r
++extern VALUE notmuch_rb_eFileNotEmailError;\r
++extern VALUE notmuch_rb_eNullPointerError;\r
++extern VALUE notmuch_rb_eTagTooLongError;\r
++extern VALUE notmuch_rb_eUnbalancedFreezeThawError;\r
++extern VALUE notmuch_rb_eUnbalancedAtomicError;\r
++\r
++extern ID ID_call;\r
++extern ID ID_db_create;\r
++extern ID ID_db_mode;\r
++\r
++#undef extern\r
+ \r
+ /* RSTRING_PTR() is new in ruby-1.9 */\r
+ #if !defined(RSTRING_PTR)\r
+diff --git a/bindings/ruby/init.c b/bindings/ruby/init.c\r
+index 3fe60fb..b2dc7f6 100644\r
+--- a/bindings/ruby/init.c\r
++++ b/bindings/ruby/init.c\r
+@@ -18,7 +18,9 @@\r
+  * Author: Ali Polatel <alip@exherbo.org>\r
+  */\r
+ \r
++#define RUBY_INIT_C\r
+ #include "defs.h"\r
++#undef RUBY_INIT_C\r
+ \r
+ /*\r
+  * Document-module: Notmuch\r
+-- \r
+1.7.8.2\r
+\r