Bill Kelly
7/18/2006 6:33:00 PM
From: "Curt Hibbs" <ml.chibbs@gmail.com>
>
> Below, Ara argues that a VC2005 version of Ruby would be unable
> to compile/use extensions built with the command sequence:
>
> ruby extconf.rb
> make
> make install
>
> Isn't this incorrect? Wouldn't the sequence just become:
>
> ruby extconf.rb
> nmake
> nmake install
>
> If I'm wrong here, please let me know.
Ara has already covered this in detail, but to clarify:
ruby extconf.rb
nmake
nmake install
can indeed work on Windows, for simple extensions.
It's not uncommon, at a minimum, to have to tweak the
extconf.rb, though. Often an extconf.rb specifies
gcc-specific compiler flags, or looks for the presence
of libraries that are named differently, etc.
Sometimes it's a simple fix, such as modifying the
extconf.rb to eliminate lines like:
CFLAGS << " -Wall -Wno-comment"
CFLAGS << " -Wno-unused"
...on the Windows build.
But for more complex extensions, building on windows
(with nmake and cl.exe) can be far less trivial.
I recently compiled the RMagick extension on Windows,
and it was a complete hack job to get it to compile
with microsoft's tools.
First of all, RMagick uses ./configure to actually
build the extconf.rb from extconf.rb.in.
So there's no extconf.rb to even work with initially.
It also uses ./configure to build a lengthy header
file, rmagick_config.h.
Ultimately, I ended up building RMagick on linux,
and bringing extconf.rb and rmagick_config.h back
to Windows, and tweaking them enough to compile with
nmake + cl.exe.
Here's an example of the tweaks to extconf.rb:
Replace:
$CFLAGS = "-Wall -g "
$CPPFLAGS = "-DRUBY_VERSION=#{VERSION_NUMBER} -I/opt/include/ImageMagick-6.2.8"
with:
$CFLAGS = "-DWIN32 -DRUBY_VERSION=#{VERSION_NUMBER} -I../../../ImageMagick-6.2.8"
$LIBPATH << "../../../ImageMagick-6.2.8/VisualMagick/lib"
etc.
And I was lucky ImageMagick itself came with the
ability to build with Visual Studio. There are other
projects, such as the ones Ara mentioned, and puredata,
and (I think) ruby-gnome2 and ruby-gstreamer that don't
build under visual studio at all.
So, yeah... If we could build ruby extensions AND the
libraries they rely on with ./configure && make, on
Windows... That sounds far nicer than the current hassles
I've had trying to build complex extensions and their
associated libraries with microsoft's tools.
That said, I must admit... I tried to get mingw/msys to
work for me, and I had weird problems with it. I asked
for help in #mingw on irc.freenode.net on a couple
occasions, but never got a response. But clearly, Ara
has gotten it to work, so there's hope. <grin>
Regards,
Bill