* ext/socket/extconf.rb: Use a block of enable_config() for

--{enable,disable}-close-fds-by-recvmsg-with-peek configure option



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40479 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2013-04-26 09:42:14 +00:00
Родитель 847fe27e31
Коммит 56e982d447
2 изменённых файлов: 55 добавлений и 46 удалений

Просмотреть файл

@ -1,3 +1,8 @@
Fri Apr 26 18:41:04 2013 Tanaka Akira <akr@fsij.org>
* ext/socket/extconf.rb: Use a block of enable_config() for
--{enable,disable}-close-fds-by-recvmsg-with-peek configure option
Fri Apr 26 18:08:08 2013 Tanaka Akira <akr@fsij.org> Fri Apr 26 18:08:08 2013 Tanaka Akira <akr@fsij.org>
* dir.c (dir_set_pos): Fix a compilation error when seekdir() is not * dir.c (dir_set_pos): Fix a compilation error when seekdir() is not

Просмотреть файл

@ -427,59 +427,57 @@ EOS
} }
end end
case enable_config("close-fds-by-recvmsg-with-peek") if enable_config("close-fds-by-recvmsg-with-peek") {
when true if have_msg_control && have_recvmsg &&
$defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK" have_const('AF_UNIX', headers) && have_const('SCM_RIGHTS', headers)
when false case RUBY_PLATFORM
# nothing to do. when /linux/
else # Linux 2.6.38 allocate fds by recvmsg with MSG_PEEK.
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.
close_fds = true
when /bsd|darwin/
# 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") {
abort <<EOS try_run(cpp_include(headers) + RECVMSG_WITH_MSG_PEEK_ALLOCATE_FD_TEST)
Fatal: cannot test recvmsg() with MSG_PEEK allocate file descriptors or not }
because cross-compilation. if close_fds == false
Specify a configure option. warn "unexpected fd-passing 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 on fd-passing."
end
close_fds = true
else
if close_fds == true
warn "unexpected fd-passing 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 on fd-passing."
end
close_fds = false
end
end
if close_fds == nil
abort <<EOS
Fatal: cannot test fd-passing recvmsg() with MSG_PEEK behavor
because cross-compilation for #{RUBY_PLATFORM}.
If recvmsg() with MSG_PEEK allocates fds on fd passing: If recvmsg() with MSG_PEEK allocates fds on fd passing:
--enable-close-fds-by-recvmsg-with-peek --enable-close-fds-by-recvmsg-with-peek
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
close_fds
else
false
end end
if close_fds }
$defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK" $defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK"
end
end
end end
case enable_config("wide-getaddrinfo") case enable_config("wide-getaddrinfo")
@ -488,7 +486,10 @@ 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("system getaddrinfo working") {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
@ -497,7 +498,10 @@ 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("system getaddrinfo working") {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