ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db
@ 2010-06-03 14:38 Takahiro Kambe
  2010-06-07 13:32 ` [ruby-dev:41549] " Yusuke Endoh
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Takahiro Kambe @ 2010-06-03 14:38 UTC (permalink / raw
  To: ruby developers list

Bug #3385: ext/dbm: accept various version of db
http://redmine.ruby-lang.org/issues/show/3385

起票者: Takahiro Kambe
ステータス: Open, 優先度: Normal
ruby -v: ruby 1.9.2dev (2010-05-31 revision 28117) [i486-netbsdelf]

ext/dbのextconf.rbに、様々なバージョンのBerkley DBを認識させるためのパッチです。


--- ext/dbm/extconf.rb.orig	2009-10-02 10:45:39.000000000 +0000
+++ ext/dbm/extconf.rb
@@ -5,13 +5,16 @@ dir_config("dbm")
 if dblib = with_config("dbm-type", nil)
   dblib = dblib.split(/[ ,]+/)
 else
-  dblib = %w(db db2 db1 dbm gdbm gdbm_compat qdbm)
+  dblib = %w(db db2 db1 db5 db4 db3 dbm gdbm gdbm_compat qdbm)
 end
 
 headers = {
   "db" => ["db.h"],
   "db1" => ["db1/ndbm.h", "db1.h", "ndbm.h"],
   "db2" => ["db2/db.h", "db2.h", "db.h"],
+  "db3" => ["db3/db.h", "db3.h", "db.h"],
+  "db4" => ["db4/db.h", "db4.h", "db.h"],
+  "db5" => ["db5/db.h", "db5.h", "db.h"],
   "dbm" => ["ndbm.h"],
   "gdbm" => ["gdbm-ndbm.h", "ndbm.h"],
   "gdbm_compat" => ["gdbm-ndbm.h", "ndbm.h"],
@@ -24,7 +27,7 @@ def headers.db_check(db)
   hsearch = nil
 
   case db
-  when /^db2?$/
+  when /^db[2-5]?$/
     db_prefix = "__db_n"
     hsearch = "-DDB_DBM_HSEARCH "
   when "gdbm"
@@ -36,7 +39,8 @@ def headers.db_check(db)
   db_prefix ||= ""
 
   if (have_library(db, db_prefix+"dbm_open") || have_func(db_prefix+"dbm_open")) and
-      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", h, hsearch)}
+      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", h, hsearch)} or
+      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", ["db.h", h], hsearch)}
     have_func(db_prefix+"dbm_clearerr") unless have_gdbm
     $defs << hsearch if hsearch
     $defs << '-DDBM_HDR="<'+hdr+'>"'


----------------------------------------
http://redmine.ruby-lang.org

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:41549] [Bug #3385] ext/dbm: accept various version of db
  2010-06-03 14:38 [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db Takahiro Kambe
@ 2010-06-07 13:32 ` Yusuke Endoh
  2010-06-11 13:53 ` [ruby-dev:41583] " Takahiro Kambe
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Yusuke Endoh @ 2010-06-07 13:32 UTC (permalink / raw
  To: ruby developers list

チケット #3385 が更新されました。 (by Yusuke Endoh)


遠藤です。

> ext/dbのextconf.rbに、様々なバージョンのBerkley DBを認識させるためのパッチです。

確認ですが、バージョン 3 から 5 を認識させるようになったのですよね。
実際にそれぞれのバージョンでビルドして、test/dbm/ がパスすることを
確認して頂いたということでしょうか。
そういうことであれば、神戸さんを信じて取り込もうと思います。


あと、

+  dblib = %w(db db2 db1 db5 db4 db3 dbm gdbm gdbm_compat qdbm)

という不思議な順番でチェックすることに意味はあるでしょうか。

-- 
Yusuke Endoh <mame@tsg•ne.jp>
----------------------------------------
http://redmine.ruby-lang.org/issues/show/3385

----------------------------------------
http://redmine.ruby-lang.org

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:41583] [Bug #3385] ext/dbm: accept various version of db
  2010-06-03 14:38 [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db Takahiro Kambe
  2010-06-07 13:32 ` [ruby-dev:41549] " Yusuke Endoh
@ 2010-06-11 13:53 ` Takahiro Kambe
  2010-06-11 15:45 ` [ruby-dev:41587] [Bug #3385][Closed] " Yusuke Endoh
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 10+ messages in thread
From: Takahiro Kambe @ 2010-06-11 13:53 UTC (permalink / raw
  To: ruby developers list

チケット #3385 が更新されました。 (by Takahiro Kambe)


> 確認ですが、バージョン 3 から 5 を認識させるようになったのですよね。
そうです。

> 実際にそれぞれのバージョンでビルドして、test/dbm/ がパスすることを
> 確認して頂いたということでしょうか。
テストまではしていません。ただ、dbmの互換ライブラリとして各バージョンのBerkeley DBを使う分に、
それほど問題が出てくるとも思えません。

> そういうことであれば、神戸さんを信じて取り込もうと思います。
と、いうわけで信じてはダメです。;-)

> +  dblib = %w(db db2 db1 db5 db4 db3 dbm gdbm gdbm_compat qdbm)
>
> という不思議な順番でチェックすることに意味はあるでしょうか。
新しいリリースについては新しいものを優先、でもベースシステムに存在しているdbがあればそれで済ませたい、といった程度の意図ですが、db2やdb1の辺りは元を尊重しただけなので深い意味はありません。

----------------------------------------
http://redmine.ruby-lang.org/issues/show/3385

----------------------------------------
http://redmine.ruby-lang.org

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:41587] [Bug #3385][Closed] ext/dbm: accept various version of db
  2010-06-03 14:38 [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db Takahiro Kambe
  2010-06-07 13:32 ` [ruby-dev:41549] " Yusuke Endoh
  2010-06-11 13:53 ` [ruby-dev:41583] " Takahiro Kambe
@ 2010-06-11 15:45 ` Yusuke Endoh
  2010-06-11 16:06 ` [ruby-dev:41588] [Bug #3385] " Takahiro Kambe
  2011-11-11 23:14 ` [ruby-dev:44861] " Tanaka Akira
  4 siblings, 0 replies; 10+ messages in thread
From: Yusuke Endoh @ 2010-06-11 15:45 UTC (permalink / raw
  To: ruby developers list

チケット #3385 が更新されました。 (by Yusuke Endoh)

ステータス OpenからClosedに変更

遠藤です。

> > 実際にそれぞれのバージョンでビルドして、test/dbm/ がパスすることを
> > 確認して頂いたということでしょうか。
> テストまではしていません。ただ、dbmの互換ライブラリとして各バージョンのBerkeley DBを使う分に、
> それほど問題が出てくるとも思えません。

Berkeley DB は API の互換性とかにちゃんと気を使っている立派な
プロジェクトなんですかね。OpenSSL とか Ruby とか見てるとどうも
疑い深くなってしまいます。

とりあえず、trunk に取り込みました。ありがとうございました。
このチケットは Bug というより Feature な気もするので、ruby_1_9_2
への取り込みにはあまり乗り気でありません。

-- 
Yusuke Endoh <mame@tsg•ne.jp>
----------------------------------------
http://redmine.ruby-lang.org/issues/show/3385

----------------------------------------
http://redmine.ruby-lang.org

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:41588] [Bug #3385] ext/dbm: accept various version of db
  2010-06-03 14:38 [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db Takahiro Kambe
                   ` (2 preceding siblings ...)
  2010-06-11 15:45 ` [ruby-dev:41587] [Bug #3385][Closed] " Yusuke Endoh
@ 2010-06-11 16:06 ` Takahiro Kambe
  2011-11-11 23:14 ` [ruby-dev:44861] " Tanaka Akira
  4 siblings, 0 replies; 10+ messages in thread
From: Takahiro Kambe @ 2010-06-11 16:06 UTC (permalink / raw
  To: ruby developers list

チケット #3385 が更新されました。 (by Takahiro Kambe)


> Berkeley DB は API の互換性とかにちゃんと気を使っている立派な
> プロジェクトなんですかね。OpenSSL とか Ruby とか見てるとどうも
> 疑い深くなってしまいます。
Berkley DBとしては4.6と4.7で非互換があって、/usr/pkgsrc/databased/db46 とかが存在します。

あくまでも「dbm互換の部分」だけに限れば、dbm自体がそんなに非互換が出てくるところは考えにくく、
同一のバージョンのBerklery DBを相手にしている限りは問題は出てこないと思うわけです。

一方で、Rubyの行うテストで出てこないであろう部分としては、実際に作成した foo.db のファイルの
内容が異なるBerkley DBの間で互換があるのかという部分もあるでしょう。

----------------------------------------
http://redmine.ruby-lang.org/issues/show/3385

----------------------------------------
http://redmine.ruby-lang.org

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:44861] Re: [Bug #3385] ext/dbm: accept various version of db
  2010-06-03 14:38 [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db Takahiro Kambe
                   ` (3 preceding siblings ...)
  2010-06-11 16:06 ` [ruby-dev:41588] [Bug #3385] " Takahiro Kambe
@ 2011-11-11 23:14 ` Tanaka Akira
  2011-11-16 14:55   ` [ruby-dev:44884] " Tanaka Akira
  4 siblings, 1 reply; 10+ messages in thread
From: Tanaka Akira @ 2011-11-11 23:14 UTC (permalink / raw
  To: ruby developers list

2010年6月3日23:38 Takahiro Kambe <redmine@ruby-lang.org>:
> Bug #3385: ext/dbm: accept various version of db
> http://redmine.ruby-lang.org/issues/show/3385
>
> 起票者: Takahiro Kambe
> ステータス: Open, 優先度: Normal
> ruby -v: ruby 1.9.2dev (2010-05-31 revision 28117) [i486-netbsdelf]
>
> ext/dbのextconf.rbに、様々なバージョンのBerkley DBを認識させるためのパッチです。

かなり前の話ですが、疑問がわいたので教えてください。

> --- ext/dbm/extconf.rb.orig     2009-10-02 10:45:39.000000000 +0000
> +++ ext/dbm/extconf.rb

> @@ -36,7 +39,8 @@ def headers.db_check(db)
>   db_prefix ||= ""
>
>   if (have_library(db, db_prefix+"dbm_open") || have_func(db_prefix+"dbm_open")) and
> -      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", h, hsearch)}
> +      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", h, hsearch)} or
> +      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", ["db.h", h], hsearch)}
>     have_func(db_prefix+"dbm_clearerr") unless have_gdbm
>     $defs << hsearch if hsearch
>     $defs << '-DDBM_HDR="<'+hdr+'>"'

ここの部分ですが、have_type("dbm", ["db.h", h], hsearch)} を
加えているのはなんででしょう?

ここで h は "db2/db.h", "db2.h", "db.h" といったヘッダフィルの名前が
入っているので、それに "db.h" を合わせると

"db.h" と "db2/db.h" を両方 include するとか、
"db.h" と 2回 include するとかいうことをテストすることになります。

実際、Berkeley DB が入っていない環境で (Ruby 1.9.3 を) を試すと、

1: #include "ruby.h"
2:
3: #include <db.h>
4: #include <db.h>
5:
6: /*top*/
7: typedef DBM conftest_type;
8: int conftestval[sizeof(conftest_type)?1:-1];

とか、

/* begin */
1: #include "ruby.h"
2:
3: #include <db.h>
4: #include <db2/db.h>
5:
6: /*top*/
7: typedef DBM conftest_type;
8: int conftestval[sizeof(conftest_type)?1:-1];
/* end */

といった記録が ext/dbm/mkmf.log に残っています。

どうも奇妙に思えるんですが、どういう意図なんでしょう?
-- 
[田中 哲][たなか あきら][Tanaka Akira]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:44884] Re: [Bug #3385] ext/dbm: accept various version of db
  2011-11-11 23:14 ` [ruby-dev:44861] " Tanaka Akira
@ 2011-11-16 14:55   ` Tanaka Akira
  2011-11-17  3:17     ` [ruby-dev:44885] " KOSAKI Motohiro
  0 siblings, 1 reply; 10+ messages in thread
From: Tanaka Akira @ 2011-11-16 14:55 UTC (permalink / raw
  To: ruby developers list

2011年11月12日8:14 Tanaka Akira <akr@fsij•org>:

> ここの部分ですが、have_type("dbm", ["db.h", h], hsearch)} を
> 加えているのはなんででしょう?

探したところ、pkgsrc の

  Both db.h and ndbm.1 must be included to use DBM.  Use both headers
  in extconf.rb to check the availability of DBM.  This makes the package
  build on Darwin.

  http://pkgsrc.se/files.php?messageId=20070119195046.48E15211CA@cvs.netbsd.org

というのが元のようで、Darwin では db.h と ndbm.h の両方を include しないと
DBM が使えないという話のようです。

しかし、どうもこれは信じ難いです。
このパッチは extconf.rb で db.h を使って DBM という型を確認するものですが、
dbm.c では db.h を include するようにはなっていません。
そして、それでも dbm がコンパイルできる以上 DBM という型は使えているはずです。

この部分を外して現在の Darwin でも問題ないようなら、
外してしまいたいんですが、どうですかね。
どなたか試していただけないでしょうか。

1.9.3 なら以下のパッチで外れます。

% svn diff --diff-cmd diff -x '-u -p'
Index: ext/dbm/extconf.rb
===================================================================
--- ext/dbm/extconf.rb	(revision 33774)
+++ ext/dbm/extconf.rb	(working copy)
@@ -39,8 +39,7 @@ def headers.db_check(db)
   db_prefix ||= ""

   if (have_library(db, db_prefix+"dbm_open") ||
have_func(db_prefix+"dbm_open")) and
-      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", h,
hsearch)} or
-      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM",
["db.h", h], hsearch)}
+      hdr = self.fetch(db, ["ndbm.h"]).find {|h| have_type("DBM", h, hsearch)}
     have_func(db_prefix+"dbm_clearerr") unless have_gdbm
     $defs << hsearch if hsearch
     $defs << '-DDBM_HDR="<'+hdr+'>"'

trunk はいろいろと変わっていますが、以下のパッチで相当する部分を外せます。

% svn diff --diff-cmd diff -x '-u -p'
Index: ext/dbm/extconf.rb
===================================================================
--- ext/dbm/extconf.rb	(revision 33774)
+++ ext/dbm/extconf.rb	(working copy)
@@ -50,7 +50,7 @@ def headers.db_check2(db, hdr)
     have_library("gdbm") or return false
   end

-  if (have_type("DBM", hdr, hsearch) || have_type("DBM", ["db.h",
hdr], hsearch)) and
+  if have_type("DBM", hdr, hsearch) and
      (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)
-- 
[田中 哲][たなか あきら][Tanaka Akira]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:44885] Re: [Bug #3385] ext/dbm: accept various version of db
  2011-11-16 14:55   ` [ruby-dev:44884] " Tanaka Akira
@ 2011-11-17  3:17     ` KOSAKI Motohiro
  2011-11-17  8:51       ` [ruby-dev:44886] " Tanaka Akira
  0 siblings, 1 reply; 10+ messages in thread
From: KOSAKI Motohiro @ 2011-11-17  3:17 UTC (permalink / raw
  To: ruby developers list

2011年11月16日9:55 Tanaka Akira <akr@fsij•org>:
> 2011年11月12日8:14 Tanaka Akira <akr@fsij•org>:
>
>> ここの部分ですが、have_type("dbm", ["db.h", h], hsearch)} を
>> 加えているのはなんででしょう?
>
> 探したところ、pkgsrc の
>
>  Both db.h and ndbm.1 must be included to use DBM.  Use both headers
>  in extconf.rb to check the availability of DBM.  This makes the package
>  build on Darwin.
>
>  http://pkgsrc.se/files.php?messageId=20070119195046.48E15211CA@cvs.netbsd.org
>
> というのが元のようで、Darwin では db.h と ndbm.h の両方を include しないと
> DBM が使えないという話のようです。
>
> しかし、どうもこれは信じ難いです。
> このパッチは extconf.rb で db.h を使って DBM という型を確認するものですが、
> dbm.c では db.h を include するようにはなっていません。
> そして、それでも dbm がコンパイルできる以上 DBM という型は使えているはずです。
>
> この部分を外して現在の Darwin でも問題ないようなら、
> 外してしまいたいんですが、どうですかね。
> どなたか試していただけないでしょうか。

Lionでは問題なく通るようです。もういれちゃって、誰かが
ぎゃっと言ってから考えるでいいんじゃないでしょうか。
2.0でるころにはSnow Leopard サポートしなくても怒られない予感がするし

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:44886] Re: [Bug #3385] ext/dbm: accept various version of db
  2011-11-17  3:17     ` [ruby-dev:44885] " KOSAKI Motohiro
@ 2011-11-17  8:51       ` Tanaka Akira
  2011-11-17 15:41         ` [ruby-dev:44889] " Ayumu Aizawa
  0 siblings, 1 reply; 10+ messages in thread
From: Tanaka Akira @ 2011-11-17  8:51 UTC (permalink / raw
  To: ruby developers list

2011年11月17日12:17 KOSAKI Motohiro <kosaki.motohiro@gmail•com>:

> Lionでは問題なく通るようです。もういれちゃって、誰かが
> ぎゃっと言ってから考えるでいいんじゃないでしょうか。
> 2.0でるころにはSnow Leopard サポートしなくても怒られない予感がするし

では trunk には入れることにしますか。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [ruby-dev:44889] Re: [Bug #3385] ext/dbm: accept various version of db
  2011-11-17  8:51       ` [ruby-dev:44886] " Tanaka Akira
@ 2011-11-17 15:41         ` Ayumu Aizawa
  0 siblings, 0 replies; 10+ messages in thread
From: Ayumu Aizawa @ 2011-11-17 15:41 UTC (permalink / raw
  To: ruby developers list

あいざわです

>> Lionでは問題なく通るようです。もういれちゃって、誰かが
>> ぎゃっと言ってから考えるでいいんじゃないでしょうか。
>> 2.0でるころにはSnow Leopard サポートしなくても怒られない予感がするし

SnowLeopardでも問題なく動くことを確認しました。

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-11-17 15:55 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-03 14:38 [ruby-dev:41531] [Bug #3385] ext/dbm: accept various version of db Takahiro Kambe
2010-06-07 13:32 ` [ruby-dev:41549] " Yusuke Endoh
2010-06-11 13:53 ` [ruby-dev:41583] " Takahiro Kambe
2010-06-11 15:45 ` [ruby-dev:41587] [Bug #3385][Closed] " Yusuke Endoh
2010-06-11 16:06 ` [ruby-dev:41588] [Bug #3385] " Takahiro Kambe
2011-11-11 23:14 ` [ruby-dev:44861] " Tanaka Akira
2011-11-16 14:55   ` [ruby-dev:44884] " Tanaka Akira
2011-11-17  3:17     ` [ruby-dev:44885] " KOSAKI Motohiro
2011-11-17  8:51       ` [ruby-dev:44886] " Tanaka Akira
2011-11-17 15:41         ` [ruby-dev:44889] " Ayumu Aizawa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).