* ext/curses/extconf.rb: Test linkability of curses_version at first.

* ext/socket/extconf.rb: Test the behavior of fd passing with MSG_PEEK
  only if recvmsg(), msg_control member, AF_UNIX and SCM_RIGHTS are
  available.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40473 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2013-04-26 03:43:19 +00:00
parent 93ed9f08ad
commit a36cd96c2a
3 changed files with 79 additions and 67 deletions

View File

@ -1,3 +1,11 @@
Fri Apr 26 12:41:22 2013 Tanaka Akira <akr@fsij.org>
* ext/curses/extconf.rb: Test linkability of curses_version at first.
* ext/socket/extconf.rb: Test the behavior of fd passing with MSG_PEEK
only if recvmsg(), msg_control member, AF_UNIX and SCM_RIGHTS are
available.
Fri Apr 26 00:07:52 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
* lib/rinda/ring.rb (Rinda::RingServer#initialize): accept array

View File

@ -89,26 +89,14 @@ if header_library
when "variable"
$defs << '-DHAVE_VAR_CURSES_VERSION'
when nil
function_p = nil
variable_p = nil
if [header, library].any? {|v| /ncurses|pdcurses|xcurses/i =~ v }
function_p = true
end
if !CROSS_COMPILING
prolog = cpp_include(curses)
function_p = checking_for(checking_message('function curses_version', curses)) {
try_run(<<-"End")
#{prolog}
func_test_program = cpp_include(curses) + <<-"End"
int main(int argc, char *argv[])
{
curses_version();
return EXIT_SUCCESS;
}
End
}
variable_p = checking_for(checking_message('variable curses_version', curses)) {
try_run(<<-"End")
#{prolog}
var_test_program = cpp_include(curses) + <<-"End"
extern char *curses_version;
int main(int argc, char *argv[])
{
@ -122,7 +110,19 @@ if header_library
return EXIT_FAILURE;
}
End
}
function_p = checking_for(checking_message('link function curses_version', curses)) { try_link(func_test_program) } ? nil : false
variable_p = checking_for(checking_message('link variable curses_version', curses)) { try_link(var_test_program) } ? nil : false
if [header, library].any? {|v| /ncurses|pdcurses|xcurses/i =~ v }
function_p = true if function_p == nil
variable_p = false if variable_p == nil
end
if !CROSS_COMPILING
if function_p != false
function_p = checking_for(checking_message('run function curses_version', curses)) { try_run(func_test_program) }
end
if variable_p != false
variable_p = checking_for(checking_message('run variable curses_version', curses)) { try_run(var_test_program) }
end
end
$defs << '-DHAVE_FUNC_CURSES_VERSION' if function_p
$defs << '-DHAVE_VAR_CURSES_VERSION' if variable_p

View File

@ -305,7 +305,8 @@ have_type("struct ip_mreq", headers) # 4.4BSD
have_type("struct ip_mreqn", headers) # Linux 2.4
have_type("struct ipv6_mreq", headers) # RFC 3493
have_struct_member('struct msghdr', 'msg_control', headers) unless $mswin or $mingw
have_msg_control = nil
have_msg_control = have_struct_member('struct msghdr', 'msg_control', headers) unless $mswin or $mingw
have_struct_member('struct msghdr', 'msg_accrights', headers)
case RUBY_PLATFORM
@ -332,7 +333,7 @@ end
if have_func(test_func, headers)
have_func("sendmsg(0, (struct msghdr *)NULL, 0)", headers) # POSIX
have_func("recvmsg(0, (struct msghdr *)NULL, 0)", headers) # POSIX
have_recvmsg = have_func("recvmsg(0, (struct msghdr *)NULL, 0)", headers) # POSIX
have_func("freehostent((struct hostent *)NULL)", headers) # RFC 2553
have_func("freeaddrinfo((struct addrinfo *)NULL)", headers) # RFC 2553
@ -432,6 +433,8 @@ EOS
when false
# nothing to do.
else
if have_msg_control && have_recvmsg &&
have_const('AF_UNIX', headers) && have_const('SCM_RIGHTS', headers)
case RUBY_PLATFORM
when /linux/
# Linux 2.6.38 allocate fds by recvmsg with MSG_PEEK.
@ -477,6 +480,7 @@ EOS
$defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK"
end
end
end
case enable_config("wide-getaddrinfo")
when true
@ -484,7 +488,7 @@ EOS
when nil
if have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
getaddr_info_ok = :os
if !CROSS_COMPILING && !checking_for("wide getaddrinfo") {try_run(cpp_include(headers) + GETADDRINFO_GETNAMEINFO_TEST)}
if !CROSS_COMPILING && !checking_for("system getaddrinfo working") {try_run(cpp_include(headers) + GETADDRINFO_GETNAMEINFO_TEST)}
getaddr_info_ok = :wide
end
else
@ -493,7 +497,7 @@ EOS
when false
if have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
getaddr_info_ok = :os
if !CROSS_COMPILING && !checking_for("wide getaddrinfo") {try_run(cpp_include(headers) + GETADDRINFO_GETNAMEINFO_TEST)}
if !CROSS_COMPILING && !checking_for("system getaddrinfo working") {try_run(cpp_include(headers) + GETADDRINFO_GETNAMEINFO_TEST)}
getaddr_info_ok = nil
end
else