mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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:
parent
93ed9f08ad
commit
a36cd96c2a
3 changed files with 79 additions and 67 deletions
|
@ -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>
|
Fri Apr 26 00:07:52 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com>
|
||||||
|
|
||||||
* lib/rinda/ring.rb (Rinda::RingServer#initialize): accept array
|
* lib/rinda/ring.rb (Rinda::RingServer#initialize): accept array
|
||||||
|
|
|
@ -89,40 +89,40 @@ if header_library
|
||||||
when "variable"
|
when "variable"
|
||||||
$defs << '-DHAVE_VAR_CURSES_VERSION'
|
$defs << '-DHAVE_VAR_CURSES_VERSION'
|
||||||
when nil
|
when nil
|
||||||
function_p = nil
|
func_test_program = cpp_include(curses) + <<-"End"
|
||||||
variable_p = nil
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
curses_version();
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
||||||
|
End
|
||||||
|
var_test_program = cpp_include(curses) + <<-"End"
|
||||||
|
extern char *curses_version;
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
for (i = 0; i < 100; i++) {
|
||||||
|
if (curses_version[i] == 0)
|
||||||
|
return 0 < i ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
|
if (curses_version[i] & 0x80)
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
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 }
|
if [header, library].any? {|v| /ncurses|pdcurses|xcurses/i =~ v }
|
||||||
function_p = true
|
function_p = true if function_p == nil
|
||||||
|
variable_p = false if variable_p == nil
|
||||||
end
|
end
|
||||||
if !CROSS_COMPILING
|
if !CROSS_COMPILING
|
||||||
prolog = cpp_include(curses)
|
if function_p != false
|
||||||
function_p = checking_for(checking_message('function curses_version', curses)) {
|
function_p = checking_for(checking_message('run function curses_version', curses)) { try_run(func_test_program) }
|
||||||
try_run(<<-"End")
|
end
|
||||||
#{prolog}
|
if variable_p != false
|
||||||
int main(int argc, char *argv[])
|
variable_p = checking_for(checking_message('run variable curses_version', curses)) { try_run(var_test_program) }
|
||||||
{
|
end
|
||||||
curses_version();
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
End
|
|
||||||
}
|
|
||||||
variable_p = checking_for(checking_message('variable curses_version', curses)) {
|
|
||||||
try_run(<<-"End")
|
|
||||||
#{prolog}
|
|
||||||
extern char *curses_version;
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
int i = 0;
|
|
||||||
for (i = 0; i < 100; i++) {
|
|
||||||
if (curses_version[i] == 0)
|
|
||||||
return 0 < i ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
||||||
if (curses_version[i] & 0x80)
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
End
|
|
||||||
}
|
|
||||||
end
|
end
|
||||||
$defs << '-DHAVE_FUNC_CURSES_VERSION' if function_p
|
$defs << '-DHAVE_FUNC_CURSES_VERSION' if function_p
|
||||||
$defs << '-DHAVE_VAR_CURSES_VERSION' if variable_p
|
$defs << '-DHAVE_VAR_CURSES_VERSION' if variable_p
|
||||||
|
|
|
@ -305,7 +305,8 @@ have_type("struct ip_mreq", headers) # 4.4BSD
|
||||||
have_type("struct ip_mreqn", headers) # Linux 2.4
|
have_type("struct ip_mreqn", headers) # Linux 2.4
|
||||||
have_type("struct ipv6_mreq", headers) # RFC 3493
|
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)
|
have_struct_member('struct msghdr', 'msg_accrights', headers)
|
||||||
|
|
||||||
case RUBY_PLATFORM
|
case RUBY_PLATFORM
|
||||||
|
@ -332,7 +333,7 @@ end
|
||||||
if have_func(test_func, headers)
|
if have_func(test_func, headers)
|
||||||
|
|
||||||
have_func("sendmsg(0, (struct msghdr *)NULL, 0)", headers) # POSIX
|
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("freehostent((struct hostent *)NULL)", headers) # RFC 2553
|
||||||
have_func("freeaddrinfo((struct addrinfo *)NULL)", headers) # RFC 2553
|
have_func("freeaddrinfo((struct addrinfo *)NULL)", headers) # RFC 2553
|
||||||
|
@ -432,38 +433,40 @@ EOS
|
||||||
when false
|
when false
|
||||||
# nothing to do.
|
# nothing to do.
|
||||||
else
|
else
|
||||||
case RUBY_PLATFORM
|
if have_msg_control && have_recvmsg &&
|
||||||
when /linux/
|
have_const('AF_UNIX', headers) && have_const('SCM_RIGHTS', headers)
|
||||||
# Linux 2.6.38 allocate fds by recvmsg with MSG_PEEK.
|
case RUBY_PLATFORM
|
||||||
close_fds = true
|
when /linux/
|
||||||
when /bsd|darwin/
|
# Linux 2.6.38 allocate fds by recvmsg with MSG_PEEK.
|
||||||
# FreeBSD 8.2.0, NetBSD 5 and MacOS X Snow Leopard doesn't
|
|
||||||
# allocate fds by recvmsg with MSG_PEEK.
|
|
||||||
# [ruby-dev:44189]
|
|
||||||
# http://bugs.ruby-lang.org/issues/5075
|
|
||||||
close_fds = false
|
|
||||||
else
|
|
||||||
close_fds = nil
|
|
||||||
end
|
|
||||||
if !CROSS_COMPILING
|
|
||||||
if checking_for("recvmsg() with MSG_PEEK allocate file descriptors") {try_run(cpp_include(headers) + RECVMSG_WITH_MSG_PEEK_ALLOCATE_FD_TEST)}
|
|
||||||
if close_fds == false
|
|
||||||
warn "unexpected recvmsg() with MSG_PEEK behavor on #{RUBY_PLATFORM}: fd allocation unexpected."
|
|
||||||
elsif close_fds == nil
|
|
||||||
puts "info: #{RUBY_PLATFORM} recvmsg() with MSG_PEEK allocates fds."
|
|
||||||
end
|
|
||||||
close_fds = true
|
close_fds = true
|
||||||
else
|
when /bsd|darwin/
|
||||||
if close_fds == true
|
# FreeBSD 8.2.0, NetBSD 5 and MacOS X Snow Leopard doesn't
|
||||||
warn "unexpected recvmsg() with MSG_PEEK behavor on #{RUBY_PLATFORM}: fd allocation expected."
|
# allocate fds by recvmsg with MSG_PEEK.
|
||||||
elsif close_fds == nil
|
# [ruby-dev:44189]
|
||||||
puts "info: #{RUBY_PLATFORM}: recvmsg() with MSG_PEEK doesn't allocates fds."
|
# http://bugs.ruby-lang.org/issues/5075
|
||||||
end
|
|
||||||
close_fds = false
|
close_fds = false
|
||||||
|
else
|
||||||
|
close_fds = nil
|
||||||
end
|
end
|
||||||
end
|
if !CROSS_COMPILING
|
||||||
if close_fds == nil
|
if checking_for("recvmsg() with MSG_PEEK allocate file descriptors") {try_run(cpp_include(headers) + RECVMSG_WITH_MSG_PEEK_ALLOCATE_FD_TEST)}
|
||||||
abort <<EOS
|
if close_fds == false
|
||||||
|
warn "unexpected recvmsg() with MSG_PEEK behavor on #{RUBY_PLATFORM}: fd allocation unexpected."
|
||||||
|
elsif close_fds == nil
|
||||||
|
puts "info: #{RUBY_PLATFORM} recvmsg() with MSG_PEEK allocates fds."
|
||||||
|
end
|
||||||
|
close_fds = true
|
||||||
|
else
|
||||||
|
if close_fds == true
|
||||||
|
warn "unexpected recvmsg() with MSG_PEEK behavor on #{RUBY_PLATFORM}: fd allocation expected."
|
||||||
|
elsif close_fds == nil
|
||||||
|
puts "info: #{RUBY_PLATFORM}: recvmsg() with MSG_PEEK doesn't allocates fds."
|
||||||
|
end
|
||||||
|
close_fds = false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if close_fds == nil
|
||||||
|
abort <<EOS
|
||||||
Fatal: cannot test recvmsg() with MSG_PEEK allocate file descriptors or not
|
Fatal: cannot test recvmsg() with MSG_PEEK allocate file descriptors or not
|
||||||
because cross-compilation.
|
because cross-compilation.
|
||||||
Specify a configure option.
|
Specify a configure option.
|
||||||
|
@ -472,9 +475,10 @@ If recvmsg() with MSG_PEEK allocates fds on fd passing:
|
||||||
If recvmsg() with MSG_PEEK doesn't allocate fds on fd passing:
|
If recvmsg() with MSG_PEEK doesn't allocate fds on fd passing:
|
||||||
--disable-close-fds-by-recvmsg-with-peek
|
--disable-close-fds-by-recvmsg-with-peek
|
||||||
EOS
|
EOS
|
||||||
end
|
end
|
||||||
if close_fds
|
if close_fds
|
||||||
$defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK"
|
$defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -484,7 +488,7 @@ EOS
|
||||||
when nil
|
when nil
|
||||||
if have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
|
if have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
|
||||||
getaddr_info_ok = :os
|
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
|
getaddr_info_ok = :wide
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
@ -493,7 +497,7 @@ EOS
|
||||||
when false
|
when false
|
||||||
if have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
|
if have_func("getnameinfo", headers) and have_func("getaddrinfo", headers)
|
||||||
getaddr_info_ok = :os
|
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
|
getaddr_info_ok = nil
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Reference in a new issue