Bug #5532

Compile problem for bigdecimal on cygwin

Added by Martin Dürst over 3 years ago. Updated over 3 years ago.

[ruby-core:40602]
Status:Closed
Priority:Normal
Assignee:-
ruby -v:- Backport:

Description

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

duerst@jougashima /cygdrive/c/Data/Ruby
$

mkmf.log Magnifier (668 Bytes) Martin Dürst, 11/01/2011 02:26 PM

History

#1 Updated by Kenta Murata over 3 years ago

  • Category set to ext
  • Assignee set to Kenta Murata

Please attach your mkmf.log.

#2 Updated by Kenta Murata over 3 years ago

linking static-library libruby191-static.a

Is your ruby really version 1.8.7?

#3 Updated by Martin Dürst over 3 years ago

mkmf.log attached. Hope this helps.

The pre-installed version of ruby, used as 'baseruby' I guess, is indeed 1.8.7.

But I'm trying to build trunk, so that's I guess where messages such as "linking static-library libruby191-static.a" come from.

#4 Updated by Kenta Murata over 3 years ago

  • Assignee deleted (Kenta Murata)
  • Target version set to 2.0.0

The following error is the matter of this issue.

/usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lruby191

Unfortunately, I don't know cygwin well so I cannot help you.
I'm sorry.

#5 Updated by Usaku NAKAMURA over 3 years ago

Does this patch help you?
(Sorry, I've not tested it.)

Index: configure.in

--- configure.in (revision 33590)
+++ configure.in (working copy)
@@ -2506,8 +2506,9 @@ AS_CASE(["$target_os"],
LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
AS_CASE(["$target_os"],
[cygwin*], [
+ RUBY_SO_NAME="cyg${RUBY_SO_NAME}"
if test x"$enable_shared" = xyes; then
- LIBRUBY_SO='cyg$(RUBY_SO_NAME)'.dll
+ LIBRUBY_SO='$(RUBY_SO_NAME)'.dll
LIBRUBY_DLDFLAGS="${LIBRUBY_DLDFLAGS}"' $(RUBYDEF)'
fi
],

#6 Updated by Usaku NAKAMURA over 3 years ago

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?

#7 Updated by Nobuyoshi Nakada over 3 years ago

  • 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?

Are they stored somewhere? If yes, where?

In config.status file.

$ grep configure_args config.status

Or

$ make showconfig

--
Nobu Nakada

#8 Updated by Martin Dürst over 3 years ago

Here is my configuration:
$ make showconfig
'--with-baseruby=/usr/bin/ruby'

$ /usr/bin/ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin]

#9 Updated by Heesob Park over 3 years ago

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.

#10 Updated by Martin Dürst over 3 years ago

  • Status changed from Open to Closed

Hello Heesob,

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.)

#11 Updated by Heesob Park over 3 years ago

Hi,

I noticed that the problem started when you executed "cd /cygdrive/c/Data/Ruby"
instead of "cd /cygdrive/c/Data/ruby".

Here is the test case.

$ mkdir -p /cygdrive/c/Data/ruby
$ cd /cygdrive/c/Data/Ruby

phasis@phasis-PC /cygdrive/c/Data/Ruby
$ irb
irb(main):001:0> Dir.pwd
=> "/cygdrive/c/Data/Ruby"
irb(main):002:0> File.expand_path("./test.txt")
=> "/cygdrive/c/Data/Ruby/test.txt"
irb(main):003:0> exit

phasis@phasis-PC /cygdrive/c/Data/Ruby
$ cd /cygdrive/c/Data/ruby

phasis@phasis-PC /cygdrive/c/Data/ruby
$ irb
irb(main):001:0> Dir.pwd
=> "/cygdrive/c/Data/ruby"
irb(main):002:0> File.expand_path("./test.txt")
=> "/cygdrive/c/Data/ruby/test.txt"
irb(main):003:0> exit

Notice the diffrence between "/cygdrive/c/Data/Ruby/test.txt"
and "/cygdrive/c/Data/ruby/test.txt".

Regards,
Park Heesob

#12 Updated by Martin Dürst over 3 years ago

Yes, exactly. And the problem went away when I cd'd back to /cygdrive/c/Data/ruby/. Many thanks again!

Also available in: Atom PDF