なんだこれは

はてなダイアリーから移転しました。

Mac で iolib に依存した cl-iconv を利用する

Mac OSX で cl-iconv をインストールする際のメモ。依存関係で iolib が要求する libfixposix をインストールする。

(ql:quickload "iconv")

を実行すると、依存関係で iolibが要求される。このiolib の iolib.syscalls が次のようなコンパイルを実行しようとして lpf.h がないというのでgive upせざるをえない。

g++ -m64 -Wno-write-strings -I /opt/local/include/ -I/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/grovel/ -o /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/syscalls/ffi-types-unix /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/syscalls/ffi-types-unix.c

この無いといわれた、lpf.hというのは、https://github.com/sionescu/libfixposix に含まれているようだ。
こいつをインストールしてみよう。
libfixposix は MacPort に収録されようとしているもようだが現時点では含まれていないのでソースからインストールする。

ただし、autoconf , automake , libtool と checkというテストのフレームワークに依存している。
check は macport に収録されていてもうインストールずみだった。

mkdir -p ~/work
cd ~/work
git clone https://github.com/sionescu/libfixposix.git
cd libfixposix
autoreconf -i -f
mkdir build
cd build
../configure --prefix=/usr/local
make
sudo make install

インストールできたので、lispのREPLに戻ってつづける。

(ql:quickload "iconv")

To load "iconv":
Load 1 ASDF system:
iconv
; Loading "iconv"
; g++ -m64 -Wno-write-strings -I /opt/local/include/ -I/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/grovel/ -o /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/syscalls/ffi-types-unix /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/syscalls/ffi-types-unix.c
; /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/syscalls/ffi-types-unix /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/syscalls/ffi-types-unix.grovel-tmp.lisp
..................................................
..................................................
[package iolib.multiplex].........................
[package iolib.streams]...........................
[package idna]....................................
[package swap-bytes]..............................
[package iolib.sockets]; g++ -m64 -Wno-write-strings -I /opt/local/include/ -I/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/grovel/ -o /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/sockets/grovel /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/sockets/grovel.c
; /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/sockets/grovel /Users/fu7mu4/.cache/common-lisp/ccl-1.10-f96-macosx-x64/Users/fu7mu4/quicklisp/dists/quicklisp/software/iolib-20150302-git/src/sockets/grovel.grovel-tmp.lisp
...........................
..................................................
..................................................
[package iolib]...................................
[package koto.iconv]....

できた。

追記

cl-iconv でちゃんと文字列→usb8 usb8→文字列をエンコードを指定して変換はできたのですが、推定する機能はなかったようです。