On Oct 22, 11:08 ¨Âí¬ ¢ÊïèÔ®¼êïè®®®Àãèáòôåò®îåô¾ ÷òïôåº
> Daniel Berger wrote:
> > Hi,
>
> > <snip>
>
> >> '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:  ¨Âèéìå åøåãõôéîçå®®¨ÇåíººÉîóôáììåòººÅøôåîóéïîÂõéìäÅòòïò> 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 (R) Program Maintenance Utility Version 6.00.8168.0
> Copyright (C) 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 (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
> 80x86
> Copyright (C) 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 (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
> 80x86
> Copyright (C) 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 (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
> 80x86
> Copyright (C) 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 (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for
> 80x86
> Copyright (C) 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 (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