Broken Gems on Windows (still)

(I realized I posted this originally on the Rails mailing list, when it
probably should have been here… oops!)

Hello…

Is there any word on when the eventmachine 0.12.2 and sqlite3-ruby 1.2.4
gems are going to be fixed to work when updating gems on a Windows (xp)
system? Doing a ‘gem update’ will cause errors for both, which causes
the rest of the updated to installed gems to not be updated. I’ve been
using a workaround script that skips the errors and continues updating,
but I’d be nice to get updated gems.

(I’m also seeing a strange thing with the webby gem - when doing a ‘gem
outdated’, I see:

webby (0.9.3 < 0.9.3)

and updating causes the “new” version to be installed, but gem outdated
still gives that message.)

Here are the errors for sqlite3-ruby and eventmachine, for what it’s
worth…

eventmachine:

updating eventmachine…
ERROR: While executing gem … (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb update eventmachine
checking for windows.h… no

nmake
‘nmake’ is not recognized as an internal or external command,
operable program or batch file.

Gem files will remain installed in
c:/ruby/lib/ruby/gems/1.8/gems/eventmachine-0
.12.2 for inspection.
Results logged to
c:/ruby/lib/ruby/gems/1.8/gems/eventmachine-0.12.2/ext/gem_mak
e.out

sqlite3-ruby:

updating sqlite3-ruby…
ERROR: While executing gem … (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb update sqlite3-ruby
checking for fdatasync() in rt.lib… no
checking for sqlite3.h… no

nmake
‘nmake’ is not recognized as an internal or external command,
operable program or batch file.

Gem files will remain installed in
c:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1
.2.4 for inspection.
Results logged to
c:/ruby/lib/ruby/gems/1.8/gems/sqlite3-ruby-1.2.4/ext/sqlite3_
api/gem_make.out

Hi,

‘nmake’ is not recognized as an internal or external command,
operable program or batch file.

Looks like eventmachine is a C extension. You either don’t have a
compiler installed, or your shell’s environment isn’t setup right.
Therefore, it fails.

Or did I miss the point of your question somehow?

Regards,

Dan

Daniel B. wrote:

Hi,

‘nmake’ is not recognized as an internal or external command,
operable program or batch file.

Looks like eventmachine is a C extension. You either don’t have a
compiler installed, or your shell’s environment isn’t setup right.
Therefore, it fails.

Or did I miss the point of your question somehow?

Regards,

Dan

Whoops…forgot to mention… I do have (various version) of Visual
Studio loaded - VS 6, VS 2003, VS 2005, VS 2008. I’ve tried with each
versions of VSVARS32.bat, which sets the env vars for the various
environments.

This is the error, for eventmachine, after running the VSVARS32.bat:

ERROR: While executing gem … (Gem::Installer::ExtensionBuildError)
ERROR: Failed to build gem native extension.

c:/ruby/bin/ruby.exe extconf.rb update eventmachine
checking for windows.h… yes
checking for winsock.h… yes
checking for main() in kernel32.lib… yes
checking for main() in rpcrt4.lib… yes
checking for main() in gdi32.lib… yes
checking for main() in ssleay32.lib… no
creating Makefile

nmake

Microsoft ® Program Maintenance Utility Version 6.00.8168.0
Copyright © Microsoft Corp 1988-1998. All rights reserved.

    cl -I. -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi 

-O2b2xg- -G6
-DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -D OS_WIN32 -D BUILD_FOR_RUBY -EHs
-GR -D WI
HOUT_SSL -c -Tpbinder.cpp
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

binder.cpp
cl -I. -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi
-O2b2xg- -G6
-DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -D OS_WIN32 -D BUILD_FOR_RUBY -EHs
-GR -D WI
HOUT_SSL -c -Tpcmain.cpp
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

cmain.cpp
cl -I. -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi
-O2b2xg- -G6
-DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -D OS_WIN32 -D BUILD_FOR_RUBY -EHs
-GR -D WI
HOUT_SSL -c -Tpcplusplus.cpp
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

cplusplus.cpp
cl -I. -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi
-O2b2xg- -G6
-DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -D OS_WIN32 -D BUILD_FOR_RUBY -EHs
-GR -D WI
HOUT_SSL -c -Tped.cpp
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

ed.cpp
cl -I. -I. -Ic:/ruby/lib/ruby/1.8/i386-mswin32 -I. -MD -Zi
-O2b2xg- -G6
-DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -D OS_WIN32 -D BUILD_FOR_RUBY -EHs
-GR -D WI
HOUT_SSL -c -Tpem.cpp
Microsoft ® 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
Copyright © Microsoft Corp 1984-1998. All rights reserved.

em.cpp
em.cpp(1193) : error C2374: ‘i’ : redefinition; multiple initialization
em.cpp(1186) : see declaration of ‘i’
NMAKE : fatal error U1077: ‘cl’ : return code ‘0x2’
Stop.

Gem files will remain installed in
c:/ruby/lib/ruby/gems/1.8/gems/eventmachine-
.12.2 for inspection.
Results logged to
c:/ruby/lib/ruby/gems/1.8/gems/eventmachine-0.12.2/ext/gem_ma
e.out

On Oct 22, 11:08 am, “John T.” [email protected] wrote:

Therefore, it fails.
environments.
checking for main() in rpcrt4.lib… yes
-O2b2xg- -G6
-DHAVE_WINDOWS_H -DHAVE_WINSOCK_H -D OS_WIN32 -D BUILD_FOR_RUBY -EHs
-GR -D WI
HOUT_SSL -c -Tped.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

em.cpp
em.cpp(1193) : error C2374: ‘i’ : redefinition; multiple initialization
em.cpp(1186) : see declaration of ‘i’
NMAKE : fatal error U1077: ‘cl’ : return code ‘0x2’
Stop.

Hm. I had to make one (seemingly unrelated) tweak to em.cpp to build
eventmachine 0.12.2 with VC++ 8 on Windows XP Pro:

— em.orig Wed Oct 22 11:13:48 2008
+++ em.cpp Wed Oct 22 11:20:48 2008
@@ -31,6 +31,9 @@
#ifdef OS_WIN32
unsigned gTickCountTickover;
unsigned gLastTickCount;
+#ifndef EINTR
+#define EINTR WSAEINTR
+#endif
#endif

After I made that change it seemed to build fine.

In any case, it’s not a gem issue, but an issue with eventmachine. I
noticed they aren’t shipping a gem with a pre-built binary with the
latest release, which would definitely be handy for the Windows users.

Regards,

Dan