ruby-changes:28421
From: akr <ko1@a...>
Date: Fri, 26 Apr 2013 12:43:29 +0900 (JST)
Subject: [ruby-changes:28421] akr:r40473 (trunk): * ext/curses/extconf.rb: Test linkability of curses_version at first.
akr 2013-04-26 12:43:19 +0900 (Fri, 26 Apr 2013) New Revision: 40473 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=40473 Log: * 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. Modified files: trunk/ChangeLog trunk/ext/curses/extconf.rb trunk/ext/socket/extconf.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 40472) +++ ChangeLog (revision 40473) @@ -1,3 +1,11 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Fri Apr 26 12:41:22 2013 Tanaka Akira <akr@f...> + + * 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@g...> * lib/rinda/ring.rb (Rinda::RingServer#initialize): accept array Index: ext/curses/extconf.rb =================================================================== --- ext/curses/extconf.rb (revision 40472) +++ ext/curses/extconf.rb (revision 40473) @@ -89,40 +89,40 @@ if header_library https://github.com/ruby/ruby/blob/trunk/ext/curses/extconf.rb#L89 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} - int main(int argc, char *argv[]) - { - curses_version(); - return EXIT_SUCCESS; - } - End + func_test_program = cpp_include(curses) + <<-"End" + int main(int argc, char *argv[]) + { + curses_version(); + return EXIT_SUCCESS; } - 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 + 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; } - End + 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 Index: ext/socket/extconf.rb =================================================================== --- ext/socket/extconf.rb (revision 40472) +++ ext/socket/extconf.rb (revision 40473) @@ -305,7 +305,8 @@ have_type("struct ip_mreq", headers) # 4 https://github.com/ruby/ruby/blob/trunk/ext/socket/extconf.rb#L305 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/extconf.rb#L333 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,38 +433,40 @@ EOS https://github.com/ruby/ruby/blob/trunk/ext/socket/extconf.rb#L433 when false # nothing to do. else - 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 + 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 - 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." + 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 + 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 - close_fds = false end - end - if close_fds == nil - abort <<EOS + if close_fds == nil + abort <<EOS Fatal: cannot test recvmsg() with MSG_PEEK allocate file descriptors or not because cross-compilation. Specify a configure option. @@ -472,9 +475,10 @@ If recvmsg() with MSG_PEEK allocates fds https://github.com/ruby/ruby/blob/trunk/ext/socket/extconf.rb#L475 If recvmsg() with MSG_PEEK doesn't allocate fds on fd passing: --disable-close-fds-by-recvmsg-with-peek EOS - end - if close_fds - $defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK" + end + if close_fds + $defs << "-DFD_PASSING_WORK_WITH_RECVMSG_MSG_PEEK" + end end end @@ -484,7 +488,7 @@ EOS https://github.com/ruby/ruby/blob/trunk/ext/socket/extconf.rb#L488 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 https://github.com/ruby/ruby/blob/trunk/ext/socket/extconf.rb#L497 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 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/