Ruby 2.2.2 fails to build on Cygwin64: static function, utoa, in ext/-test-/printf/printf.c has different signature in system stdlib.h.
While attempting to build Ruby 2.2.2 on Cygwin (x86_64), I got the following error:
make: Entering directory '/home/bnd/ext/cc/build/cygwin64/ruby-2.2.2/ext/-test-/printf' compiling printf.c printf.c:23:1: error: conflicting types for 'utoa' utoa(char *p, char *e, unsigned int x) ^ In file included from /usr/include/stdio.h:29:0, from ../../.././include/ruby/defines.h:26, from ../../.././include/ruby/ruby.h:29, from ../../.././include/ruby.h:33, from printf.c:1: /usr/include/stdlib.h:184:8: note: previous declaration of 'utoa' was here char * _EXFUN(utoa,(unsigned, char *, int)); ^ Makefile:241: recipe for target 'printf.o' failed make: *** [printf.o] Error 1 make: Leaving directory '/home/bnd/ext/cc/build/cygwin64/ruby-2.2.2/ext/-test-/printf' exts.mk:118: recipe for target 'ext/-test-/printf/all' failed make: *** [ext/-test-/printf/all] Error 2 make: Leaving directory '/home/bnd/ext/cc/build/cygwin64/ruby-2.2.2' uncommon.mk:189: recipe for target 'build-ext' failed make: *** [build-ext] Error 2
I was able to overcome this error by renaming the function to
utoa2, though you may wish to use something more appropriate.
merge revision(s) 50305: [Backport #11065]
* ext/-test-/printf/printf.c (uint_to_str): renamed to get rid of conflict on cygwin. [Bug #11065]