From: Tanaka Akira Date: 2011-11-16T23:55:59+09:00 Subject: [ruby-dev:44884] Re: [Bug #3385] ext/dbm: accept various version of db 2011年11月12日8:14 Tanaka Akira : > ここの部分ですが、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]