When compiling Ruby 1.8.6 (in this case, p287) on OS X 10.5, you may encounter an error similar to the following:

readline.c: In function ‘filename_completion_proc_call’:
readline.c:703: error: ‘filename_completion_function’ undeclared (first use in this function)
readline.c:703: error: (Each undeclared identifier is reported only once
readline.c:703: error: for each function it appears in.)
readline.c:703: warning: assignment makes pointer from integer without a cast
readline.c: In function ‘username_completion_proc_call’:
readline.c:730: error: ‘username_completion_function’ undeclared (first use in this function)
readline.c:730: warning: assignment makes pointer from integer without a cast
make[1]: *** [readline.o] Error 1
make: *** [all] Error 1

Some sites suggest you will need to apply a series of patches to correct this issue and compile for Leopard, but this is not the case. Everything you need comes with OS X by default.

First, make sure your configure line is set up for OS X properly:

./configure --enable-shared --enable-pthread CFLAGS=-D_XOPEN_SOURCE=1

Then, if your make command terminates with errors about readline, do:

cd ext/readline
sudo make clean
sudo ruby extconf.rb
sudo make
sudo make install
cd ..

Now make should finish without error, and you can make check and sudo make install as expected.

Thanks to Dan Benjamin for his guide to compiling ruby and brianp’s helpful comment about the need for extconf.rb in that same post, my upgrade from ruby 1.8.4 to 1.8.6 went smoothly.

DeliciousStumbleUponDiggTwitterFacebookRedditLinkedInEmail
Tags: , , , , ,
2 Responses to “Compiling ruby on OS X 10.5: readline.c:703: error: ‘filename_completion_function’ undeclared”
  1. Greg says:

    Still get…
    gcc -I. -I. -I/usr/local/lib/ruby/1.8/i686-darwin9.6.0 -I. -DHAVE_READLINE_READLINE_H -DHAVE_READLINE_HISTORY_H -DHAVE_RL_FILENAME_COMPLETION_FUNCTION -DHAVE_RL_COMPLETION_MATCHES -DHAVE_RL_DEPREP_TERM_FUNCTION -DHAVE_RL_COMPLETION_APPEND_CHARACTER -DHAVE_RL_BASIC_WORD_BREAK_CHARACTERS -DHAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS -DHAVE_RL_BASIC_QUOTE_CHARACTERS -DHAVE_RL_COMPLETER_QUOTE_CHARACTERS -DHAVE_RL_FILENAME_QUOTE_CHARACTERS -DHAVE_RL_ATTEMPTED_COMPLETION_OVER -DHAVE_RL_LIBRARY_VERSION -DHAVE_RL_EVENT_HOOK -DHAVE_RL_CLEANUP_AFTER_SIGNAL -DHAVE_REPLACE_HISTORY_ENTRY -DHAVE_REMOVE_HISTORY -I/usr/local/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -fno-common -g -O2 -fno-common -pipe -fno-common -c readline.c
    readline.c: In function ‘username_completion_proc_call’:
    readline.c:730: error: ‘username_completion_function’ undeclared (first use in this function)
    readline.c:730: error: (Each undeclared identifier is reported only once
    readline.c:730: error: for each function it appears in.)
    make: *** [readline.o] Error 1

    [Reply]

  2. Dan says:

    I’ve got pretty much the same thing. readline.c:730 is the problem:

    bash-3.2# make
    gcc -I. -I. -I/usr/local/lib/ruby/1.8/powerpc-darwin8.10.0 -I. -DHAVE_READLINE_READLINE_H -DHAVE_READLINE_HISTORY_H -DHAVE_RL_DEPREP_TERM_FUNCTION -DHAVE_RL_COMPLETION_APPEND_CHARACTER -DHAVE_RL_BASIC_WORD_BREAK_CHARACTERS -DHAVE_RL_COMPLETER_WORD_BREAK_CHARACTERS -DHAVE_RL_BASIC_QUOTE_CHARACTERS -DHAVE_RL_COMPLETER_QUOTE_CHARACTERS -DHAVE_RL_FILENAME_QUOTE_CHARACTERS -DHAVE_RL_ATTEMPTED_COMPLETION_OVER -DHAVE_RL_LIBRARY_VERSION -DHAVE_RL_EVENT_HOOK -DHAVE_RL_CLEANUP_AFTER_SIGNAL -DHAVE_REPLACE_HISTORY_ENTRY -DHAVE_REMOVE_HISTORY -I/usr/local/include -fno-common -g -O2 -fno-common -pipe -fno-common -c readline.c
    readline.c: In function ‘readline_readline’:
    readline.c:82: error: ‘rb_io_t’ undeclared (first use in this function)
    readline.c:82: error: (Each undeclared identifier is reported only once
    readline.c:82: error: for each function it appears in.)
    readline.c:82: error: ‘ofp’ undeclared (first use in this function)
    readline.c:82: error: ‘ifp’ undeclared (first use in this function)
    readline.c: In function ‘filename_completion_proc_call’:
    readline.c:703: error: ‘filename_completion_function’ undeclared (first use in this function)
    readline.c:703: warning: assignment makes pointer from integer without a cast
    readline.c: In function ‘username_completion_proc_call’:
    readline.c:730: error: ‘username_completion_function’ undeclared (first use in this function)
    readline.c:730: warning: assignment makes pointer from integer without a cast
    make: *** [readline.o] Error 1

    Any ideas? Perhaps I should switch over permanently to Windows, which installed flawlessly in a matter of minutes. ;-)

    [Reply]

  3.  
Leave a Reply

*Type the letter/number combination in the abvoe field before clicking submit.

*