I tried to complile the current trunk on cygwin. However, I got a compile problem in 'bigdecimal'.
It says (see below for full output):
configuring bigdecimal
checking for labs() in stdlib.h... /cygdrive/c/Data/ruby/lib/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
What kinds of development tools would be needed? I have successfully compiled Ruby many times; this is the first time I have been told I need 'development tools'.
Many thanks for your help, Martin.
Full output follows:
duerst@jougashima ~
$ cd /cygdrive/c/Data/Ruby
duerst@jougashima /cygdrive/c/Data/Ruby
$ make
CC = gcc
LD = ld
LDSHARED = gcc -shared -s
CFLAGS = -O3 -g -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration
XCFLAGS = -include ruby/config.h -include ruby/missing.h -DRUBY_EXPORT
CPPFLAGS = -I. -I.ext/include/i386-cygwin -I./include -I.
DLDFLAGS = -Wl,--enable-auto-image-base,--enable-auto-import -Wl,--out-implib=libruby191.dll.a cygruby191.def
SOLIBS = cygruby191.res.o -lpthread -lrt -ldl -lcrypt
compiling version.c
compiling dmyversion.c
linking miniruby.exe
rbconfig.rb unchanged
generating enc.mk
generating cygruby191.rc
compiling cygruby191.res.o
generating prelude.c
compiling prelude.c
linking static-library libruby191-static.a
generating cygruby191.def
linking shared-library cygruby191.dll
Creating library file: libruby191.dll.a
generating encdb.h
encdb.h unchanged
making enc
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります make[1]: enc' に対して行うべき事はありません.
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます making srcs under enc make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります
make[1]: srcs' に対して行うべき事はありません. make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます
generating transdb.h
transdb.h unchanged
making trans
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります make[1]: ./enc/trans' に対して行うべき事はありません.
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます making encs make[1]: ディレクトリ /cygdrive/c/Data/Ruby' に入ります
make[1]: ディレクトリ /cygdrive/c/Data/Ruby' から出ます configuring bigdecimal checking for labs() in stdlib.h... /cygdrive/c/Data/ruby/lib/mkmf.rb:381:in try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /cygdrive/c/Data/ruby/lib/mkmf.rb:461:in try_link0' from /cygdrive/c/Data/ruby/lib/mkmf.rb:476:in try_link'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:619:in try_func' from /cygdrive/c/Data/ruby/lib/mkmf.rb:894:in block in have_func'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:790:in block in checking_for' from /cygdrive/c/Data/ruby/lib/mkmf.rb:284:in block (2 levels) in postpone'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:254:in open' from /cygdrive/c/Data/ruby/lib/mkmf.rb:284:in block in postpone'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:254:in open' from /cygdrive/c/Data/ruby/lib/mkmf.rb:280:in postpone'
from /cygdrive/c/Data/ruby/lib/mkmf.rb:789:in checking_for' from /cygdrive/c/Data/ruby/lib/mkmf.rb:893:in have_func'
from /cygdrive/c/Data/Ruby/ext/bigdecimal/extconf.rb:3:in <top (required)>' from ./ext/extmk.rb:174:in load'
from ./ext/extmk.rb:174:in extmake' from ./ext/extmk.rb:468:in block in '
from ./ext/extmk.rb:464:in each' from ./ext/extmk.rb:464:in '
make: *** [exts.mk] エラー 1
eban-san says that libruby191.dll.a is correct (it was cygwin team's request).
So, please ignore above patch. orz
BTW, eban-san also says that he built cygwin ruby from trunk yesterday and there was no problem.
Martin-sensei, could you show us your configure options?
ruby -v changed from ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] to -
Hi,
(11/11/04 17:02), "Martin J. Dürst" wrote:
BTW, eban-san also says that he built cygwin ruby from trunk yesterday and there was no problem.
Martin-sensei, could you show us your configure options?
I managed to reproduce this issue and found that it is due to the capital letter in the path name.
If you use capital letter in the path name like "/cygdrive/c/Data/Ruby",
in the line #157-159 of lib/mkmf.rb
topdir = File.dirname(File.dirname(FILE)) #=> "/cygdrive/c/Data/Ruby"
path = File.expand_path($0) #=> "/cygdrive/c/data/ruby/ext/extmk.rb"
$extmk = path[0, topdir.size+1] == topdir+"/" #=> false
The workaround is to avoid capital letter in the path name.
Many thanks for solving this problem. You are right that it is about case differences in the path name. However, your description might be slightly misunderstood. The problem is not upper-case letters per se, but letters for which case differs from how they are stored by the OS. In my case /cygdrive/c/Data/ruby/ is correct, because Data is indeed upper-case (Windows remembers the case of a letter, but matches upper- and lowercase).
Regards, Martin.
(I'm still not able to compile completely, but I'll try to get further and open another bug if necessary.)