Project

General

Profile

Actions

Backport #1884

closed

ftruncate conflict with mingw32 3.4.5

Added by mhulse (Matt Hulse) over 14 years ago. Updated almost 5 years ago.

Status:
Closed
[ruby-core:24757]

Description

=begin
I have been testing some gems on WinXP SP2, Ruby 1.9.1-p129 mingw32 installer and devkit from rubyinstaller.org. The following output is from an attempt to install FFI:

C:>ruby -v
ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-mingw32]

C:>gem install ffi
Building native extensions. This could take a while...
ERROR: Error installing ffi:
ERROR: Failed to build gem native extension.

C:/Ruby/bin/ruby.exe extconf.rb
checking for ffi_closure_alloc() in -lffi... no
creating Makefile
creating extconf.h

make
[...]
gcc -I. -IC:/Ruby/include/ruby-1.9.1/i386-mingw32 -I/C/Ruby/include/ruby-1.9.1/ruby/backward -I/C/Ruby/include/ruby-1.9.1 -I. -I/c/Ruby/lib/ruby/gems/1.9.1/gems/ffi-0.3.5/ext/ffi_c -I/c/Ruby/lib/ruby/gems/1.9.1/gems/ffi-0.3.5/ext/ffi_c/libffi/include -DHAVE_EXTCONF_H -Werror -Wunused -Wformat -I/c/Ruby/lib/ruby/gems/1.9.1/gems/ffi-0.3.5/ext/ffi_c -I/c/Ruby/lib/ruby/gems/1.9.1/gems/ffi-0.3.5/ext/ffi_c/libffi/include -O2 -g -Wall -Wno-parentheses -o Invoker.o -c Invoker.c

In file included from c:/Ruby/include/ruby-1.9.1/ruby/defines.h:192,
from c:/Ruby/include/ruby-1.9.1/ruby/ruby.h:70,
from c:/Ruby/include/ruby-1.9.1/ruby.h:32,
from Invoker.c:11:
c:/Ruby/include/ruby-1.9.1/ruby/win32.h:341: error: conflicting types for 'ftruncate'
C:/Ruby/devkit/gcc/3.4.5/bin/../lib/gcc/mingw32/3.4.5/../../../../include/unistd.h:43: error: previous definition of 'ftruncate' was here
c:/Ruby/include/ruby-1.9.1/ruby/win32.h:341: error: conflicting types for 'ftruncate'
C:/Ruby/devkit/gcc/3.4.5/bin/../lib/gcc/mingw32/3.4.5/../../../../include/unistd.h:43: error: previous definition of 'ftruncate' was here
make: *** [Invoker.o] Error 1

Apparently Ruby 1.9.1 redefines ftruncate in win32.h:341 which conflicts with mingw32. I can get the gem to compile by wrapping line 341 in win32.h with the following:

#if !defined MINGW32
extern int ftruncate(int fd, off_t length);
#endif

Luis from rubyinstaller mentioned that it may be better to check whether ftruncate is defined rather than MINGW32 just in case certain versions of mingw don't define ftruncate, but I'm not sure how to do that.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0