Lua を一般ユーザでソースコードからインストールする
ただし、readline も ncurses も一般ユーザでソースコードからインストールしている場合の方法。
そんな奇特な人はそんなにいないと思うけれど、自分のためにメモ。
各ソフトウェアのバージョン等は以下の通りです。
- Lua (5.2.3)
- ${HOME}/local/lua にインストールしたい
- readline (6.3)
- ${HOME}/local/readline にインストール済
- ncurses (5.9)
- ${HOME}/local/ncurses にインストール済
とりあえずダウンロード & 展開して
$ wget "http://www.lua.org/ftp/lua-5.2.3.tar.gz" $ tar zxvf lua-5.2.3.tar.gz $ cd lua-5.2.3
普通にコンパイルしてみると
$ make linux cd src && make linux ### ... (中略) ... ### gcc -O2 -Wall -DLUA_COMPAT_ALL -DLUA_USE_LINUX -c -o lua.o lua.c lua.c:67:31: error: readline/readline.h: そのようなファイルやディレクトリはありません lua.c:68:30: error: readline/history.h: そのようなファイルやディレクトリはありません ### ... (中略) ... ### make: *** [linux] エラー 2
readline のヘッダが見つからないためコンパイルできないので、環境変数 MYCFLAGS と MYLDFLAGS に readline へのパスを指定してコンパイルしてみる。
$ make linux MYCFLAGS="-I${HOME}/local/readline/include" MYLDFLAGS="-L${HOME}/local/readline/lib" cd src && make linux ### ... (中略) ... ### gcc -o lua -L/home/hatyuki/local/readline/lib lua.o liblua.a -lm -Wl,-E -ldl -lreadline /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `PC' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `tgetflag' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `tgetent' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `UP' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `tputs' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `tgoto' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `tgetnum' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `BC' /home/hatyuki/local/readline/lib/libreadline.so: undefined reference to `tgetstr' ### ... (中略) ... ### make: *** [linux] エラー 2
エラーの内容としては、以下のページの情報がビンゴでした。
上記ページを参考に、今回は termcap に ncurses を利用しているので MYLDFLAGS と MYLIBS に ncurses へのパスを指定して、再度コンパイル。
$ make linux MYCFLAGS="-I${HOME}/local/readline/include" MYLDFLAGS="-L${HOME}/local/readline/lib -L${HOME}/local/ncurses/lib" MYLIBS="-lncursesw"
無事にコンパイルできました。
ということで、あとは INSTALL_TOP を指定し、インストールをします。
$ make install INSTALL_TOP=$HOME/local/lua
これでインストール完了。
ちなみに、ログイン時に ${HOME}/local 以下の bin ディレクトリを見つけて、勝手に PATH を設定するよう、.zshrc には以下のように書いてあります。
if [ -d $HOME/local ]; then export PATH=`find $HOME/local -maxdepth 2 -type d -name bin | paste -s -d : -`:$PATH fi
よって、.zshrc を再読込して Lua を起動します。
$ source ~/.zshrc $ lua lua: error while loading shared libraries: libreadline.so.6: cannot open shared object file: No such file or directory
おっと。
いろいろ自前でやりすぎたので、今度は LD_LIBRARY_PATH の設定が必要ですね。。。
ということで、.zshrc に以下を追記して
if [ -d $HOME/local ]; then export LD_LIBRARY_PATH=`find $HOME/local -maxdepth 2 -type d -name lib | paste -s -d : -`:$LD_LIBRARY_PATH fi
再度 Lua を起動すると
$ source ~/.zshrc $ lua Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio >
わーい。
とりあえず、一般ユーザでもなんとかなるもんですね。