[前][次][番号順一覧][スレッド一覧]

ruby-changes:21910

From: akr <ko1@a...>
Date: Tue, 6 Dec 2011 12:38:18 +0900 (JST)
Subject: [ruby-changes:21910] akr:r33959 (trunk): * ext/dbm/extconf.rb: detect gdbm_version in libgdbm.

akr	2011-12-06 12:38:07 +0900 (Tue, 06 Dec 2011)

  New Revision: 33959

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=33959

  Log:
    * ext/dbm/extconf.rb: detect gdbm_version in libgdbm.
    
    * ext/dbm/dbm.c: make DBM::VERSION more informative for gdbm, qdbm and
      Berkeley DB 1.x.  [ruby-dev:44944]

  Modified files:
    trunk/ChangeLog
    trunk/ext/dbm/dbm.c
    trunk/ext/dbm/extconf.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 33958)
+++ ChangeLog	(revision 33959)
@@ -1,3 +1,10 @@
+Tue Dec  6 12:30:41 2011  Tanaka Akira  <akr@f...>
+
+	* ext/dbm/extconf.rb: detect gdbm_version in libgdbm.
+
+	* ext/dbm/dbm.c: make DBM::VERSION more informative for gdbm, qdbm and
+	  Berkeley DB 1.x.  [ruby-dev:44944]
+
 Tue Dec  6 07:26:37 2011  Eric Hodel  <drbrain@s...>
 
 	* range.c:  Improve documentation for Range.  Patch by Chris Zetter.
Index: ext/dbm/dbm.c
===================================================================
--- ext/dbm/dbm.c	(revision 33958)
+++ ext/dbm/dbm.c	(revision 33959)
@@ -1076,9 +1076,23 @@
      */
     rb_define_const(rb_cDBM, "NEWDB",   INT2FIX(O_RDWR|O_CREAT|O_TRUNC|RUBY_DBM_RW_BIT));
 
-#ifdef DB_VERSION_STRING
+#if defined(DB_VERSION_STRING)
     /* The version of the dbm library, if using Berkeley DB */
     rb_define_const(rb_cDBM, "VERSION",  rb_str_new2(DB_VERSION_STRING));
+#elif defined(HAVE_GDBM_VERSION)
+    /* since gdbm 1.9 */
+    rb_define_const(rb_cDBM, "VERSION",  rb_str_new2(gdbm_version));
+#elif defined(HAVE_LIBVAR_GDBM_VERSION)
+    {
+        /* ndbm.h doesn't declare gdbm_version until gdbm 1.8.3.
+         * See extconf.rb for more information. */
+        extern char *gdbm_version;
+        rb_define_const(rb_cDBM, "VERSION",  rb_str_new2(gdbm_version));
+    }
+#elif defined(_QDBM_VERSION)
+    rb_define_const(rb_cDBM, "VERSION",  rb_str_new2("QDBM " _QDBM_VERSION));
+#elif defined(_DB_H_)
+    rb_define_const(rb_cDBM, "VERSION",  rb_str_new2("Berkeley DB (unknown)"));
 #else
     rb_define_const(rb_cDBM, "VERSION",  rb_str_new2("unknown"));
 #endif
Index: ext/dbm/extconf.rb
===================================================================
--- ext/dbm/extconf.rb	(revision 33958)
+++ ext/dbm/extconf.rb	(revision 33959)
@@ -40,6 +40,32 @@
   result
 end
 
+def have_libvar(var, headers = nil, opt = "", &b)
+  checking_for checking_message([*var].compact.join(' '), headers, opt) do
+    try_libvar(var, headers, opt, &b)
+  end
+end
+
+def try_libvar(var, headers = nil, opt = "", &b)
+  var, type = *var
+  if try_link(<<"SRC", opt, &b)
+#{cpp_include(headers)}
+/*top*/
+int main(int argc, char *argv[]) {
+  typedef #{type || 'int'} conftest_type;
+  extern conftest_type #{var};
+  conftest_type *conftest_var = &#{var};
+  return 0;
+}
+SRC
+    $defs.push(format("-DHAVE_LIBVAR_%s", var.tr_cpp))
+    true
+  else
+    false
+  end
+end
+
+
 def headers.db_check2(db, hdr)
   hsearch = nil
 
@@ -54,6 +80,13 @@
      (db == 'libc' ? have_func('dbm_open("", 0, 0)', hdr, hsearch) :
                      have_library(db, 'dbm_open("", 0, 0)', hdr, hsearch)) and
      have_func('dbm_clearerr((DBM *)0)', hdr, hsearch)
+    if /gdbm/ =~ db
+      have_var("gdbm_version", hdr, hsearch)
+      # gdbm_version is not declared by ndbm.h until gdbm 1.8.3.
+      # We can't include ndbm.h and gdbm.h because they both define datum type.
+      # ndbm.h includes gdbm.h and gdbm_version is declared since gdbm 1.9.
+      have_libvar(["gdbm_version", "char *"], hdr, hsearch)
+    end
     if hsearch
       $defs << hsearch
       @defs = hsearch

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]