IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

alienのインストール

alienがあるか確認

> require "alien"
stdin:1: module 'alien' not found:
    no field package.preload['alien']
    no file '/usr/local/share/lua/5.2/alien.lua'
    no file '/usr/local/share/lua/5.2/alien/init.lua'
    no file '/usr/local/lib/lua/5.2/alien.lua'
    no file '/usr/local/lib/lua/5.2/alien/init.lua'
    no file './alien.lua'
    no file '/usr/local/lib/lua/5.2/alien.so'
    no file '/usr/local/lib/lua/5.2/loadall.so'
    no file './alien.so'
stack traceback:
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: in ?

残念ながらデフォルトでは入っていないようです。

パッケージマネージャluarocksの確認

知らない間に入っていました。

$ luarocks

LuaRocks 2.3.0, a module deployment system for Lua

NAME
    /usr/local/bin/luarocks - LuaRocks main command-line interface

SYNOPSIS
    /usr/local/bin/luarocks [--from=<server> | --only-from=<server>] [--to=<tree>] [VAR=VALUE]... <command> [<argument>]

...

alienのインストール1回目

$ luarocks install alien
Installing https://luarocks.org/alien-0.7.1-2.src.rock...
Using https://luarocks.org/alien-0.7.1-2.src.rock... switching to 'build' mode
./bootstrap && ./configure LUA=/usr/local/bin/lua CPPFLAGS='-I/usr/local/include -I/usr/include' LDFLAGS=-L/usr/lib --prefix=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2 --libdir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lib --datadir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lua && make clean && make
bootstrap: running: glibtoolize --quiet

...

checking for ffi/ffi.h... yes
checking for ffi_closure_alloc in -lffi... no
configure: error: in `/tmp/luarocks_alien-0.7.1-2-4392/alien':
configure: error: cannot find new enough libffi
See `config.log' for more details

Error: Build error: Failed building.

libffiがないのでエラーになります。

libdiffのインストール

$ brew install libffi
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 4 taps (caskroom/cask, homebrew/core, homebrew/php, homebrew/services).
==> New Formulae
apm-server                   dislocker                    go-jira                      homebrew/php/php72-xdebug    kubeless                     restic
asciidoctor                  dnsdist                      heartbeat                    htslib                       libxo                        sceptre

...

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/libffi/lib
For pkg-config to find this software you may need to set:
    PKG_CONFIG_PATH: /usr/local/opt/libffi/lib/pkgconfig

==> Summary
🍺  /usr/local/Cellar/libffi/3.2.1: 16 files, 301.6KB

Homebrewでビールのアイコンでるのなんなんでしょう。禁酒中の私にとってはムカつくだけです。

alienのインストール2回目

$ luarocks install alien
Installing https://luarocks.org/alien-0.7.1-2.src.rock...
Using https://luarocks.org/alien-0.7.1-2.src.rock... switching to 'build' mode
./bootstrap && ./configure LUA=/usr/local/bin/lua CPPFLAGS='-I/usr/local/include -I/usr/include' LDFLAGS=-L/usr/lib --prefix=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2 --libdir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lib --datadir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lua && make clean && make
bootstrap: running: glibtoolize --quiet
bootstrap: running: autoreconf --symlink --install
configure.ac:11: installing 'build-aux/ar-lib'

configure: error: in `/tmp/luarocks_alien-0.7.1-2-5849/alien':
configure: error: cannot find new enough libffi
See `config.log' for more details

Error: Build error: Failed building.

libffiが見つからなくてエラーになります。

libffiの確認

$ ls /usr/local/opt/libffi/
ChangeLog       INSTALL_RECEIPT.json    LICENSE         README          lib         share

インストールは出来ているようです。

alienのインストール3回目

libffiの場所を指定してインストールします。

$ CFLAGS='-L/usr/local/opt/libffi/lib' luarocks install alien
Installing https://luarocks.org/alien-0.7.1-2.src.rock...
Using https://luarocks.org/alien-0.7.1-2.src.rock... switching to 'build' mode
./bootstrap && ./configure LUA=/usr/local/bin/lua CPPFLAGS='-I/usr/local/include -I/usr/include' LDFLAGS=-L/usr/lib --prefix=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2 --libdir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lib --datadir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lua && make clean && make
bootstrap: running: glibtoolize --quiet

...

/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-am
  CC       src/alien.lo
clang: warning: argument unused during compilation: '-L/usr/local/opt/libffi/lib'
src/alien.c:550:12: warning: implicit declaration of function 'ffi_closure_alloc' is invalid in C99 [-Wimplicit-function-declaration]
  ac->fn = ffi_closure_alloc(sizeof(ffi_closure), &ac->ffi_codeloc);
           ^
src/alien.c:550:10: warning: incompatible integer to pointer conversion assigning to 'void *' from 'int' [-Wint-conversion]
  ac->fn = ffi_closure_alloc(sizeof(ffi_closure), &ac->ffi_codeloc);
         ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/alien.c:565:14: warning: implicit declaration of function 'ffi_prep_closure_loc' is invalid in C99 [-Wimplicit-function-declaration]
    status = ffi_prep_closure_loc(ac->fn, &(ac->cif), &alien_callback_call, ac, ac->ffi_codeloc);
             ^
src/alien.c:567:5: warning: implicit declaration of function 'ffi_closure_free' is invalid in C99 [-Wimplicit-function-declaration]
    ffi_closure_free(ac->fn);
    ^
4 warnings generated.
  CCLD     src/alien_c.la
markdown doc/alien.md > doc/alien.html
/bin/sh: markdown: command not found
make[1]: *** [doc/alien.html] Error 127
make: *** [all] Error 2

Error: Build error: Failed building.

ワーニングとエラーが出ています。ワーニングはalienのインストールで出ています。エラーの方はalien理由ではなさそうです。どうもmarkdownがないのでエラーが出ているようです。これってドキュメントを作るだけなので、これがエラーでインストールできないのもどうなんでしょうか。

markdownのインストール

$ brew install markdown
==> Downloading https://homebrew.bintray.com/bottles/markdown-1.0.1.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring markdown-1.0.1.yosemite.bottle.tar.gz
🍺  /usr/local/Cellar/markdown/1.0.1: 2 files, 35.6KB

alienのインストール4回目

$ CFLAGS='-L/usr/local/opt/libffi/lib' luarocks install alien
Installing https://luarocks.org/alien-0.7.1-2.src.rock...
Using https://luarocks.org/alien-0.7.1-2.src.rock... switching to 'build' mode
./bootstrap && ./configure LUA=/usr/local/bin/lua CPPFLAGS='-I/usr/local/include -I/usr/include' LDFLAGS=-L/usr/lib --prefix=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2 --libdir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lib --datadir=/usr/local/lib/luarocks/rocks-5.2/alien/0.7.1-2/lua && make clean && make

...

Updating manifest for /usr/local/lib/luarocks/rocks-5.2
No existing manifest. Attempting to rebuild...
alien 0.7.1-2 is now built and installed in /usr/local (license: MIT/X11)

できました。

確認

$ /usr/local/bin/lua
Lua 5.2.4  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> require "alien"