Ruby compile failing at make ("LIBRUBY_EXTS: command not found")

J

Jonathan Gold

Anyone have any ideas why ruby compile (1.9.1-p430) is failing for me near what
appears to be the end:

making ruby
mkmain.sh: line 2: LIBRUBY_EXTS: command not found
make: invalid option -- '.'
make: invalid option -- 'y'
make: invalid option -- 'a'
make: invalid option -- 'c'
Usage: make [options] [target] ...
Options:

I'm having problems tracking down where this is getting called or why.

jonathan
 
B

Brian Candler

Jonathan Gold wrote in post #956225:
Anyone have any ideas why ruby compile (1.9.1-p430) is failing for me

Probably not unless you say something about the environment you're
building under: operating system, C compiler version etc.
near what
appears to be the end:

making ruby
mkmain.sh: line 2: LIBRUBY_EXTS: command not found

What shell does your OS have? It's possible that a bash-specific syntax
is being used here, and you're using a POSIX shell, like ksh or dash.
That's the case in Ubuntu:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2010-06-09 16:27 /bin/sh -> dash

Having said that, I have the source to ruby-1.9.1-p429 unpacked on my
machine, where it compiled successfully, and I can't find mkmain.sh
anywhere. Can you post the first two lines of that file?
 
J

Jonathan Gold

Jonathan Gold wrote in post #956225:

Probably not unless you say something about the environment you're
building under: operating system, C compiler version etc.

Reasonable point. It's an Amazon Linux image which is by all accounts really
Centos (poking around on the box confirms).
What shell does your OS have? It's possible that a bash-specific syntax
is being used here, and you're using a POSIX shell, like ksh or dash.
That's the case in Ubuntu:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2010-06-09 16:27 /bin/sh -> dash

I'm using bash.
Having said that, I have the source to ruby-1.9.1-p429 unpacked on my
machine, where it compiled successfully, and I can't find mkmain.sh
anywhere. Can you post the first two lines of that file?

Nor can I. I actually did a 'find / -name "mkmain.sh"' as well as searched the
centos pkg repos for the file and nothing comes up. My colleague suggested that
perhaps mkmain.sh is actually generated by the make process and cleaned up after
the error, leaving me no chance to see it. I grepped around in the ruby build
dirs for mkmain.sh and only see these references:

$ find . -type f | xargs grep 'mkmain'./Makefile:MKMAIN_CMD = mkmain.sh
./Makefile.in:MKMAIN_CMD = mkmain.sh
./win32/Makefile.sub:MKMAIN_CMD = mkmain.bat

and then searching for the MKMAIN_CMD string:

$ find . -type f | xargs grep 'MKMAIN_CMD'
./Makefile:MKMAIN_CMD = mkmain.sh
./Makefile.in:MKMAIN_CMD = mkmain.sh
./ChangeLog: * Makefile.in, win32/Makefile.sub (RUNCMD, MKMAIN_CMD):
macros to
./win32/Makefile.sub:MKMAIN_CMD = mkmain.bat
./uncommon.mk: @$(RUNCMD) $(MKMAIN_CMD) MAKE=$(MAKE)
./uncommon.mk:exts: $(MKMAIN_CMD)
./uncommon.mk:$(MKMAIN_CMD): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY)
./common.mk: @$(RUNCMD) $(MKMAIN_CMD) MAKE=$(MAKE)
./common.mk:exts: $(MKMAIN_CMD)
./common.mk:$(MKMAIN_CMD): $(MKFILES) incs $(PREP) $(RBCONFIG) $(LIBRUBY)

but nothing that seems to generate said file that I can tell.
 
J

Jonathan Gold

Brian -- I forgot to also give you some other details:

$ make -v
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for x86_64-redhat-linux-gnu

and

$ gcc -v
Using built-in specs.
Target: x86_64-amazon-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--enable-checking=release --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-libgcj-multifile
--enable-languages=c,c++,objc,obj-c++,java,fortran,ada --disable-dssi
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic
--host=x86_64-amazon-linux
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)

Not sure whether that will matter too much, but there it is.

jonathan
 
J

Jonathan Gold

Brian and others -- I made some progress and think the problem is in
ext/extmk.rb, but won't be able to dive deeper until next week. Will update this
thread when I do, but wanted to thank you for your help so far.

jonathan
 
J

Jonathan Gold

It does indeed look like mkmain.sh is generated by ext/extmk.rb (I found that
out just by hand-creating a mkmain.sh that wasn't writeable, forcing a
stacktrace from whichever part of the build attempted to generate it, and that
turned out to be ext/extmk.rb).

The generated mkmain.sh is set to delete itself before executing (see below),
but I added a hook inside extmk.rb to let me get a hold of it first. Here is
what is getting generated as mkmain.sh:

rm -f $0; exec make LIBRUBY_SO_UPDATE=$(LIBRUBY_EXTS) SETUP=ext/Setup DLDOBJS=ext/extinit.o EXTLIBS=-lncursesw -ltinfo -lcrypto -ldl EXTLDFLAGS=-L/home/jgold/work/opt/openssl-0.9.8g/x86_64-linux-gnu/lib -Wl,-R/home/jgold/work/opt/openssl-0.9.8g/x86_64-linux-gnu/lib -L. -rdynamic -Wl,-export-dynamic ruby

The thing that's causing problems is that the args to the various env vars
aren't being quoted for the shell. I handquoted them and the script works, so I
took a look inside ext/extmk.rb and saw that the method 'sysquote' (line 42) is
not evaluating @quote to true:

def sysquote(x)
@quote ||= /os2/ =~ (CROSS_COMPILING || RUBY_PLATFORM)
@quote ? x.quote : x
end

If I manually change the file to just hard-set '@quote = true' then the make
completes normally. That being said, the built ruby fails to load external libs,
but before diving too deeply into those problems I figured I'd stop and wait to
see what people think about the mkmain.sh quoting stuff. I suspect that the
problem underlying the former is also caused by the one underlying the former.

Anyone more familiar with the ruby build have an idea as to where RUBY_PLATFORM
gets set or in general as to why the generated script is not being quoted?

I am able to successfully build and use ruby-1.9.1-p0 and ruby-1.9.1-p376.

jonathan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,045
Latest member
DRCM

Latest Threads

Top