From: Eric Hodel Date: 2011-12-13T10:58:48+09:00 Subject: [ruby-core:41622] [ruby-trunk - Bug #5681][Open] Conflcting types for rb_w32_inet_ntop caused by duplicate definition under MinGW Issue #5681 has been updated by Eric Hodel. Status changed from Closed to Open =begin r33919 broke the socket extension on OS X: have_func: checking for inet_ntop(0, (const void *)0, (char *)0, 0)... -------------------- yes "clang -o conftest -I../../.ext/include/x86_64-darwin11.2.0 -I../.././include -I../.././ext/socket -I../.. -I../../. -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -O3 -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wshorten-64-to-32 -Wimplicit-function-declaration -pipe conftest.c -L. -L../.. -L. -fstack-protector -L/usr/local/lib -lruby-static -lpthread -ldl -lobjc " conftest.c:6:15: warning: implicit declaration of function 'inet_ntop' is invalid in C99 [-Wimplicit-function-declaration] int t(void) { inet_ntop(0, (const void *)0, (char *)0, 0); return 0; } ^ 1 warning generated. checked program was: /* begin */ 1: #include "ruby.h" 2: 3: /*top*/ 4: int main(void) {return 0;} 5: extern int t(void); 6: int t(void) { inet_ntop(0, (const void *)0, (char *)0, 0); return 0; } This patch to ext/socket/extconf.rb fixes it: -have_func('inet_ntop(0, (const void *)0, (char *)0, 0)') or +have_func('inet_ntop(0, (const void *)0, (char *)0, 0)', 'arpa/inet.h') or =end ---------------------------------------- Bug #5681: Conflcting types for rb_w32_inet_ntop caused by duplicate definition under MinGW http://redmine.ruby-lang.org/issues/5681 Author: Luis Lavena Status: Open Priority: Normal Assignee: Nobuyoshi Nakada Category: build Target version: ruby -v: - MinGW 4.5.2 (TDM builds), building against trunk (r33885) is causing the following error:
compiling ../../../../../../ruby/ext/socket/option.c
../../../../../../ruby/ext/socket/option.c:441:1: error: conflicting types for 'rb_w32_inet_ntop'
../../../../../../ruby/include/ruby/win32.h:276:22: note: previous declaration of 'rb_w32_inet_ntop' was here
make[2]: *** [option.o] Error 1
make[2]: Leaving directory `/c/Users/Luis/Projects/oss/oneclick/rubyinstaller/sandbox/ruby19_build/ext/socket'
make[1]: *** [ext/socket/all] Error 2
make[1]: Leaving directory `/c/Users/Luis/Projects/oss/oneclick/rubyinstaller/sandbox/ruby19_build'
make: *** [build-ext] Error 2
All this triggered by recent refactoring of ruby/subst.h Applying the following patch solves the issue: diff --git a/ext/socket/option.c b/ext/socket/option.c index 1f334bb..41765f9 100644 --- a/ext/socket/option.c +++ b/ext/socket/option.c @@ -436,7 +436,7 @@ inspect_timeval_as_interval(int level, int optname, VALUE data, VALUE ret) * it is not distinguishable by the size. */ -#ifndef HAVE_INET_NTOP +#if !defined(HAVE_INET_NTOP) && !defined(_WIN32) static char * inet_ntop(int af, const void *addr, char *numaddr, size_t numaddr_len) { Can I apply? -- http://redmine.ruby-lang.org