Ticket #90 (new defect)
macruby fails to install (problem with File.join)
| Reported by: | jakub.suder@… | Owned by: | lsansonetti@… |
|---|---|---|---|
| Priority: | blocker | Milestone: | MacRuby 1.0 |
| Component: | MacRuby | Keywords: | |
| Cc: |
Description
Current trunk version (rev. 305) fails to install on my computer. I'm running OSX 10.5.3, I have version 0.2 installed from the binary package and tried to install the latest version from source. It compiles successfully, but sudo rake install throws such exception:
(in /Users/psionides/Downloads/macruby-trunk2) ./miniruby instruby.rb --make="/usr/bin/make" --dest-dir="" --extout=".ext" --mflags="" --make-flags="" --data-mode=0644 --prog-mode=0755 --installed-list .installed.list --mantype="doc" installing binary commands /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1259:in `initialize': Is a directory - /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/bin/ (Errno::EPERM::ENOENT::ESRCH::EINTR::EIO::ENXIO::E2BIG::ENOEXEC::EBADF::ECHILD::EAGAIN::ENOMEM::EACCES::EFAULT::ENOTBLK::EBUSY::EEXIST::EXDEV::ENODEV::ENOTDIR::EISDIR::EINVAL::ENFILE::EMFILE::ENOTTY::ETXTBSY::EFBIG::ENOSPC::ESPIPE::EROFS::EMLINK::EPIPE::EDOM::ERANGE::EDEADLK::ENAMETOOLONG::ENOLCK::ENOSYS::ENOTEMPTY::ELOOP::ENOMSG::EIDRM::ENOSTR::ENODATA::ETIME::ENOSR::EREMOTE::ENOLINK::EPROTO::EMULTIHOP::EBADMSG::EOVERFLOW::EILSEQ::EUSERS::ENOTSOCK::EDESTADDRREQ::EMSGSIZE::EPROTOTYPE::ENOPROTOOPT::EPROTONOSUPPORT::ESOCKTNOSUPPORT::EOPNOTSUPP::EPFNOSUPPORT::EAFNOSUPPORT::EADDRINUSE::EADDRNOTAVAIL::ENETDOWN::ENETUNREACH::ENETRESET::ECONNABORTED::ECONNRESET::ENOBUFS::EISCONN::ENOTCONN::ESHUTDOWN::ETOOMANYREFS::ETIMEDOUT::ECONNREFUSED::EHOSTDOWN::EHOSTUNREACH::EALREADY::EINPROGRESS::ESTALE::EDQUOT::NOERROR)
from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1259:in `open' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1259:in `block in copy_file' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1258:in `open' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1258:in `copy_file' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:462:in `copy_file' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:838:in `block in install' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1392:in `block in fu_each_src_dest' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1406:in `fu_each_src_dest0' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:1390:in `fu_each_src_dest' from /Users/psionides/Downloads/macruby-trunk2/lib/fileutils.rb:834:in `install' from instruby.rb:133:in `install' from instruby.rb:233:in `block in <main>' from instruby.rb:412:in `call' from instruby.rb:412:in `block (2 levels) in <main>' from instruby.rb:409:in `each' from instruby.rb:409:in `block in <main>' from instruby.rb:405:in `each' from instruby.rb:405:in `<main>'
rake aborted!
I've investigated this error, and it seems that the call "File.join(dest, File.basename(src))" in fu_each_src_dest0 function in fileutils.rb doesn't always return what it should. In this case src = 'macruby', dest = '/Library/Frameworks/MacRuby.framework/Versions/0.3/usr/bin/', but the result is '/Library/Frameworks/MacRuby.framework/Versions/0.3/usr/bin/' instead of '/Library/Frameworks/MacRuby.framework/Versions/0.3/usr/bin/macruby'. I ended up in the code of rb_file_join function in file.c, where strings are concatenated using CFStringAppend, but in this case CFStringAppend only appends the first string (.../usr/bin), and appending another (macruby) doesn't work, I don't know why.
I found that this area of code was modified in changesets 213 and 214, and when I reverted those changes, the installation passed that point at which it previously failed (although it still failed later on another path).
That's all I was able to figure out, I hope this helps...

