diff options
Diffstat (limited to 'ext/dbm/extconf.rb')
-rw-r--r-- | ext/dbm/extconf.rb | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/ext/dbm/extconf.rb b/ext/dbm/extconf.rb index ba5cfe4243..6a4b8c069d 100644 --- a/ext/dbm/extconf.rb +++ b/ext/dbm/extconf.rb @@ -40,6 +40,32 @@ def headers.db_check(db, hdr) 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 @@ def headers.db_check2(db, hdr) (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 |