june
1
5
Installing Ruby 1.8.7 on Mac OS X 10.5.3
Yah, this week is all about solving problems. I run into a lot of them, but it gives me something to blog about. But hey, if I can spend 20 minutes writing down a solution to a couple hour problem that I had, then I could save you a few hours too.
Problem
Trying to install Ruby 1.8.7 (or even 1.9) on my Leopard machine produces warning messages on “make” that look like this:
gcc -I. -I../../.ext/include/i686-darwin9.1.0 -I../.././include -I../.././ext/readline -DRUBY_EXTCONF_H=\"extconf.h\" -fno-common -g -O2 -pipe -fno-common -o readline.o -c readline.c readline.c: In function 'filename_completion_proc_call': readline.c:659: error: 'filename_completion_function' undeclared (first use in this function) readline.c:659: error: (Each undeclared identifier is reported only once readline.c:659: error: for each function it appears in.) readline.c:659: warning: assignment makes pointer from integer without a cast readline.c: In function 'username_completion_proc_call': readline.c:684: error: 'username_completion_function' undeclared (first use in this function) readline.c:684: warning: assignment makes pointer from integer without a cast make[1]: *** [readline.o] Error 1 make: *** [all] Error 1
Solution
I originally came across this problem right around new years and eventually found a solution thanks to Han Kessels on the Ruby Forums. It involved the following steps:
-
Download the newest version of readline (version 5.2 at the time of writing) at GNU.org. You may have to apply the following patch. Thanks to Michael Biven for showing a nice simple way to do this from the command line:
$ curl -O ftp://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz $ tar xzvf readline-5.2.tar.gz $ cd readline-5.2 $ curl -O http://ftp.gnu.org/gnu/readline/readline-5.2-patches/readline52-012 $ patch -p0 < readline52-012 $ ./configure --prefix=/usr/local $ make $ sudo make install $ cd ..
-
Now you can download the 1.8.7 version of ruby, and install it but you should point to the version of readline that you just installed (to /usr/local) like so:
$ curl -O ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7.tar.gz $ tar xzvf ruby-1.8.7.tar.gz $ cd ruby-1.8.7 $ ./configure --prefix=/usr/local/ruby1.8.7 --with-readline-dir=/usr/local $ make $ sudo make install $ cd /usr/local/ruby1.8.7/bin $ ./ruby -v ruby 1.8.7 (2008-05-31 patchlevel 0) [i686-darwin9.3.0]
The End Result
If you followed my terminal commands from above you should have a working Ruby 1.8.7 version installed in your "/usr/local/ruby1.8.7/bin". If you wanted ruby in a different directory then change the "--prefix=/usr/local/ruby1.8.7" option on ./configure to instead point to the directory you wanted it.
Why put it in its own directory at all? Well, I happen to have multiple version of ruby. By default I have 1.8.6, I have this version of 1.8.7, I even have a 1.9 version I installed a while ago. Its easy to remember where each is if the directory they reside in clearly states the name. This way I can test a script, maybe even run benchmarks, in each version of ruby. However, you might not want to take this extra measure.


Jan on February 12, 2009 at 7:28 pm #
Thanks a lot – made my day (or at least saved me quite some time poking around in error logs et al…) :)