rcmdnk's blog

Programming in Lua プログラミング言語Lua公式解説書

Vimでの補完機能のプラグインであるneocompletecache の後継版neocomplete を使うためにVimを再インストールした際の手順。 Lua自体がない環境もあったので、 Luaのインストールからです。

Linux

  • su権限持っていないのでローカルにluaをインストール:

luaのダウンロードページより最新のを取ってきてインストール。 取り敢えずmakeしてみるとエラーがでた。

$ cd ~/tmp/
$ wget http://www.lua.org/ftp/lua-5.2.2.tar.gz
$ tar xzf lua-5.2.2.tar.gz
$ cd lua-5.2.2
$ make linux
...
make[1]: Entering directory `/home/user/tmp/lua-5.2.2/src'
make all SYSCFLAGS="-DLUA_USE_LINUX" SYSLIBS="-Wl,-E -ldl -lreadline"
make[2]: Entering directory `/home/user/tmp/lua-5.2.2/src'
gcc -o lua   lua.o liblua.a -lm -Wl,-E -ldl -lreadline-
/usr/lib/../lib64/libreadline.so: undefined reference to `PC'
/usr/lib/../lib64/libreadline.so: undefined reference to `tgetflag'
/usr/lib/../lib64/libreadline.so: undefined reference to `tgetent'
/usr/lib/../lib64/libreadline.so: undefined reference to `UP'
/usr/lib/../lib64/libreadline.so: undefined reference to `tputs'
/usr/lib/../lib64/libreadline.so: undefined reference to `tgoto'
/usr/lib/../lib64/libreadline.so: undefined reference to `tgetnum'
/usr/lib/../lib64/libreadline.so: undefined reference to `BC'
/usr/lib/../lib64/libreadline.so: undefined reference to `tgetstr'
collect2: ld returned 1 exit status
make[2]: *** [lua] Error 1
make[2]: Leaving directory `/home/user/tmp/lua-5.2.2/src'
make[1]: *** [linux] Error 2
make[1]: Leaving directory `/home/user/tmp/lua-5.2.2/src'
make: *** [linux] Error 2

libreadlineを調べてみると

$ ldd -r /usr/lib64/libreadline.so
        linux-vdso.so.1 =>  (0x00007fffbe3aa000)
        /$LIB/snoopy.so => /lib64/snoopy.so (0x00002b2a6a387000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b2a6a5af000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b2a6a907000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b2a69f29000)
undefined symbol: PC    (/usr/lib64/libreadline.so)
undefined symbol: UP    (/usr/lib64/libreadline.so)
undefined symbol: BC    (/usr/lib64/libreadline.so)
undefined symbol: tgetflag      (/usr/lib64/libreadline.so)
undefined symbol: tgetent       (/usr/lib64/libreadline.so)
undefined symbol: tputs (/usr/lib64/libreadline.so)
undefined symbol: tgoto (/usr/lib64/libreadline.so)
undefined symbol: tgetnum       (/usr/lib64/libreadline.so)
undefined symbol: tgetstr       (/usr/lib64/libreadline.so)

こんな感じ。 これに関することが このthread にあったので、個々にある通り-ltermcapを加えてみる。

$ make linux MYLIBS=-ltermcap

OK。$HOME/usr/localpacoに登録しつつインストール。

$ paco -D "make install INSTALL_TOP=$HOME/usr/local"
  • Vimをインストール

ソースからコンパイルしてインストール。

$ cd ~/tmp/
$ hg clone https://vim.googlecode.com/hg/ vim
$ cd vim/src
$ LDFLAGS="-L$HOME/usr/local/lib/" ./configure --with-lua-prefix=$HOME/usr/local --prefix=$HOME/usr/local --with-local-dir=$HOME/usr/local --disable-selinux --disable-xim --disable-darwin --disable-xsmp --disable-xsmp-interact --enable-netbeans --enable-multibyte --enable-gui=no --enable-gtk2-check=no --enable-gnome-check=no --enable-motif-check=no --enable-athena-check=no --enable-nextaw-check=no --enable-carbon-check=no --disable-gtktest --disable-acl --disable-gpm --disable-sysmouse --enable-luainterp=yes --enable-mzschemeinterp=no --enable-perlinterp=no --enable-pythoninterp=yes --enable-python3interp=yes --enable-tclinterp --enable-rubyinterp=yes --enable-cscope --disable-workshop --disable-sniff --enable-hangulinput --enable-fontset --enable-largefile --enable-nls

--enable-luainterp=yesでluaオプションを有効にします。 他は適宣自分に合わせて設定。

LDFLAGS--with-local-dir$HOME/usr/localにあるライブラリー等を使う様に 指定してますが、lua用に --with-lua-prefix=$HOME/usr/localが別途必要の様。

ちゃんとluaが見つかれば、./configure時に、

...
checking if link with -L/home/user/usr/local/lib -llua is sane... yes
...

の様に見つかった、と言ってくれます。 --with-lua-prefixを指定しないと/usr/を見に行き、

checking --with-lua-prefix argument... no
checking LUA_PREFIX environment var... not set, default to /usr
checking --with-luajit... no
checking for lua... (cached) /usr/bin/lua
checking Lua version... (cached) 5.1
checking if lua.h can be found in /usr/include... no
checking if lua.h can be found in /usr/include/lua5.1... no

な感じで失敗します。

configureが成功したら

$ make && make install
  • PATHの設定

$HOME/usr/localにPATHが通ってない場合は以下の設定を~/.bashrcに加えておきます。

.bashrc
1
    export PATH=$HOME/usr/local/bin:$PATH

Windows (Cygwin)

  • setup.exeを使うかapt-cyg でluaをインストール:

apt-cygで

$ apt-cyg install lua
  • Vimのインストール

現状のCygwinで配布されてるバイナリが1-1110, 1112-1152のパッチが当たっていて、 さらにLua対応でビルドされてるので、 最近インストールしたなら対応しているはずです。

もし対応してなかったり古い場合は取り直し。

apt-cygにはupdateと言ったコマンドが無いので、一度削除してから入れなおします。

$ apt-cyg remove vim

そして新たにインストール:

$ apt-cyg install vim

Mac

  • Homebrewを使ってLuaをインストール:

Homebrewでluaを

$ brew install lua
  • HomebrewでMacVimのHEADバージョンをインストール1:

さらにvimも

$ brew install macvim --with-cscope --with-lua --HEAD
$ sudo ln -s /usr/local/Cellar/macvim/HEAD/MacVim.app /Applications/
  • ターミナル等から使うため~/.bashrcに次を追加:
.bashrc
1
2
3
4
#For MacVim
if [[ "$OSTYPE" =~ "darwin" ]] && [ -d /Applications/MacVim.app/Contents/MacOS ];then
  export PATH=/Applications/MacVim.app/Contents/MacOS:$PATH
fi
  • ソースから直接コンパイルしてインストール

Homebrew版でも現状7.4b版がHEADで使えて、さらに--with-luaオプションで luaを有効に出来るので充分ですが、もしソースから直接コンパイルして インストールしたい場合は

$ brew install mercurial

でMercurial(hg)をインストールしてから上のLinuxとかの様にhgでソースを取ってきて インストール。

Sponsored Links
  1. 最新パッチ&if_luaなMacVimで高速検索&補完!

Sponsored Links

« pacoでmake installしたパッケージを管理 apt-cygでsetup.iniが404 Not Foundになった »

}