nptclのブログ

Common Lisp処理系nptの開発メモです。https://github.com/nptcl/npt

clispをFreeBSDにインストールする

【追記】13.0-RELEASEの手順はこちら FreeBSD 13.0-RELEASEでclispをソースから構築 - nptclのブログ
【追記】portsclispが追加されました clispをFreeBSDにインストールする2 - nptclのブログ
【追記】最新バージョンのclispを入れる手順を追記しました

大昔のFreeBSDでは、clispが普通にportsで利用できていたように思えます。 しかし、ある日忽然と消えてしまいました。 clisp本家からたどれる、 Get CLISP->FreeBSD にはDEPRECATEDとか書かれています。 だからもう利用できません。

本当にそうなのか? 少なくとも自分はclispがないと生きていけないんですが、 みんな諦めて別のを使っているのでしょうか? たぶん諦めた方が賢明かもしれませんが、 ここではFreeBSDclispをインストールする方法を説明します。

FreeBSDから削除された理由は、たぶんFreeBSDの標準コンパイラgccからclangに変わったからだと思います。 clangではclispコンパイルできませんでした。 結構がんばったのですが、gccじゃないとコンパイルは無理っぽい。

gccportsから導入できるはずですが、 clispのためだけに入れるのも嫌だったので、 ここでは、ローカル環境でclispコンパイルする方法を示します。 ちなみに確認用に実施した環境は FreeBSD 11.1-RELEASE (amd64)。

事前準備

shellは/bin/shで説明します。 csh系を使っている場合は切り替えてください。

% /bin/sh
$

方法はgccをローカルに入れて、そのあとにclispコンパイルするという流れとなります。 手順では、$HOME/work配下に下記のディレクトリを作成します。

ディレクト 説明
install 作業用
gcc gccコンパイラ一式
clisp clisp一式

ディレクトリ名をいちいち入力するのが面倒なので、 作業用ディレクトリ用の環境変数を設定します。

$ work="${HOME}/work"
$ gcc="${HOME}/work/gcc"
$ clisp="${HOME}/work/clisp"

作業用ディレクトリを作成します。

$ mkdir ${work}
$ mkdir ${work}/install

gccのインストール

最新の安定版gccは8.3.0でした。 最低限の依存関係を考慮した場合、下記のファイルが必要になります。

  • gmp-6.1.2.tar.xz
  • mpc-1.1.0.tar.gz
  • mpfr-4.0.2.tar.xz
  • isl-0.20.tar.xz
  • make-4.2.1.tar.bz2
  • gcc-8.3.0.tar.xz

ダウンロード

$ cd ${work}/install
$ fetch http://ftp.jaist.ac.jp/pub/GNU/gmp/gmp-6.1.2.tar.xz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/mpc/mpc-1.1.0.tar.gz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/mpfr/mpfr-4.0.2.tar.xz
$ fetch http://isl.gforge.inria.fr/isl-0.20.tar.xz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/make/make-4.2.1.tar.bz2
$ fetch http://ftp.jaist.ac.jp/pub/GNU/gcc/gcc-8.3.0/gcc-8.3.0.tar.xz

ミラーサイトjaistさんを利用させていただきました。 ありがとうございます。

gmpの導入

$ cd ${work}/install
$ tar Jxf gmp-6.1.2.tar.xz
$ cd gmp-6.1.2
$ ./configure --prefix=${gcc}
$ make
$ make install
$ make clean

mpfrの導入

$ cd ${work}/install
$ tar Jxf mpfr-4.0.2.tar.xz
$ cd mpfr-4.0.2
$ ./configure --prefix=${gcc} --with-gmp=${gcc}
$ make
$ make install
$ make clean

mpcの導入

$ cd ${work}/install
$ tar zxf mpc-1.1.0.tar.gz
$ cd mpc-1.1.0
$ ./configure --prefix=${gcc} --with-gmp=${gcc} --with-mpfr=${gcc}
$ make
$ make install
$ make clean

islの導入

$ cd ${work}/install
$ tar Jxf isl-0.20.tar.xz
$ cd isl-0.20
$ ./configure --prefix=${gcc} --with-gmp-prefix=${gcc}
$ make
$ make install
$ make clean

GNU makeの導入

$ cd ${work}/install
$ tar jxf make-4.2.1.tar.bz2
$ cd make-4.2.1
$ ./configure --prefix=${gcc}
$ make
$ make install
$ make clean

gccの導入

$ cd ${work}/install
$ tar Jxf gcc-8.3.0.tar.xz
$ mkdir gcc-object
$ cd gcc-object
$ export LD_LIBRARY_PATH=${gcc}/lib:$LD_LIBRARY_PATH
$ export LIBRARY_PATH=${gcc}/lib
$ export C_INCLUDE_PATH=${gcc}/include
$ export CPLUS_INCLUDE_PATH=${gcc}/include
$ export LC_COLLATE=C
$ ../gcc-8.3.0/configure \
--enable-languages=c \
--prefix=${gcc} \
--with-gmp=${gcc} \
--with-mpfr=${gcc} \
--with-mpc=${gcc} \
--with-isl=${gcc} \
--disable-bootstrap
$ ${gcc}/bin/make
$ ${gcc}/bin/make install
$ ${gcc}/bin/make clean

確認

これで下記のファイルからgccを使用できます。

  • ${HOME}/work/gcc/bin/gcc

確認してみます。

$ ${HOME}/work/gcc/bin/gcc --version
gcc (GCC) 8.3.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

注意点があり、環境変数をちゃんと設定しないと コンパイルが上手く動作しません。 この辺りはclispコンパイル時にちゃんと見ていきます。

clispのインストール

前の手順にてすでに設定されていますが、 念のため次の環境変数が設定されているか確認してください。

$ work="${HOME}/work"
$ gcc="${HOME}/work/gcc"
$ clisp="${HOME}/work/clisp"

前手順ではローカル環境にgccを導入したので、環境変数の設定をします。

$ export CC=${gcc}/bin/gcc
$ export LD_LIBRARY_PATH=${gcc}/lib:$LD_LIBRARY_PATH
$ export LIBRARY_PATH=${gcc}/lib
$ export C_INCLUDE_PATH=${gcc}/include
$ export CPLUS_INCLUDE_PATH=${gcc}/include

最新版clispは2.49でした。 最低限の依存関係を考慮した場合、下記のファイルが必要になります。

  • libsigsegv-2.12.tar.gz
  • ffcall-1.10.tar.gz
  • readline-8.0.tar.gz
  • clisp-2.49.tar.bz2

ダウンロード

$ cd ${work}/install
$ fetch http://ftp.jaist.ac.jp/pub/GNU/libsigsegv/libsigsegv-2.12.tar.gz
$ fetch http://www.haible.de/bruno/gnu/ffcall-1.10.tar.gz
★もしsslエラーになったら下記を実行
    $ fetch --no-verify-peer http://www.haible.de/bruno/gnu/ffcall-1.10.tar.gz
$ fetch http://ftp.jaist.ac.jp/pub/GNU/readline/readline-8.0.tar.gz

【追記】リリース版のclispを入れる場合

$ fetch http://ftp.jaist.ac.jp/pub/GNU/clisp/release/2.49/clisp-2.49.tar.bz2

【追記】最新版のclispを入れる場合

$ fetch --no-verify-peer https://gitlab.com/gnu-clisp/clisp/-/archive/master/clisp-master.tar.bz2

libsigsegvの導入

$ cd ${work}/install
$ tar zxf libsigsegv-2.12.tar.gz
$ cd libsigsegv-2.12
$ ./configure --prefix=${clisp}
$ make
$ make install
$ make clean

ffcallの導入

$ cd ${work}/install
$ tar zxf ffcall-1.10.tar.gz
$ cd ffcall-1.10
$ ./configure --prefix=${clisp}
$ make
$ make install
$ make clean

readlineの導入

$ cd ${work}/install
$ tar zxf readline-8.0.tar.gz
$ cd readline-8.0
$ ./configure --prefix=${clisp}
$ make
$ make install
$ make clean

clispの導入

$ cd ${work}/install

★リリース版の場合
$ tar jxf clisp-2.49.tar.bz2
$ cd clisp-2.49

★最新版の場合
$ tar jxf clisp-master.tar.bz2
$ cd clisp-master

$ ./configure --prefix=${clisp} \
--with-libsigsegv-prefix=${clisp} \
--with-libffcall-prefix=${clisp} \
--with-readline-prefix=${clisp} \
--disable-mmap
$ cd src
$ make
$ make install
$ make clean

確認

これで下記のファイルが作成されます。

  • ${HOME}/work/clisp/bin/clisp

実行できるか確認します。

$ ${HOME}/work/clisp/bin/clisp
  i i i i i i i       ooooo    o        ooooooo   ooooo   ooooo
  I I I I I I I      8     8   8           8     8     o  8    8
  I  \ `+' /  I      8         8           8     8        8    8
   \  `-+-'  /       8         8           8      ooooo   8oooo
    `-__|__-'        8         8           8           8  8
        |            8     o   8           8     o     8  8
  ------+------       ooooo    8oooooo  ooo8ooo   ooooo   8

Welcome to GNU CLISP 2.49 (2010-07-07) <http://clisp.cons.org/>

Copyright (c) Bruno Haible, Michael Stoll 1992, 1993
Copyright (c) Bruno Haible, Marcus Daniels 1994-1997
Copyright (c) Bruno Haible, Pierpaolo Bernardi, Sam Steingold 1998
Copyright (c) Bruno Haible, Sam Steingold 1999-2000
Copyright (c) Sam Steingold, Bruno Haible 2001-2010

Type :h and hit Enter for context help.

[1]> (quit)
Bye.
$

環境変数が設定されていなくても実行できるはずなので、 確認をするなら一度ログアウトしてから実施してみてください。