top page > la vie en rose > here

SBCL on FreeBSD


概要

目的は,最新の SBCL を FreeBSD の ports として導入する方法を提示することです.

対象は次のようなものです.

  1. OS は FreeBSD の 8 系以降 (FreeBSD/i386, /pc98, /amd64)
  2. SBCL は 1.3.9 について例示します.

目次

1. 概説
2. 導入

1. 概説

SBCL (Steel Bank Common Lisp) は FreeBSD の ports/packages に収録されています.

ソースは以下のところにあります.ここで歴代の version を確認することができます.

http://sourceforge.net/projects/sbcl/files/sbcl

version up は,ほぼ毎月行なわれています. ここ数年以内に FreeBSD の ports になったものを以下に記します.
    1.1.12 (2013.9.30)     (ports 2013.10.4)
    1.2.9  (2015.2.27)     (ports 2015.4.12)
    1.3.1  (2015.11.27)    (ports 2015.12.10)
    1.3.9  (2016.8.30)     移植して bugzilla に送りました.
    1.3.10 (2016.10.1)     移植して bugzilla に送りました.
    1.3.11 (2016.11.3)     移植して bugzilla に送りました.
    1.3.12 (2016.12.2)     移植して bugzilla に送りました.
    1.3.13 (2017.1.5)      移植して bugzilla に送りました.   (ports 2017.1.15) [2]
    1.3.14 (2017.2.1)      移植して試用中.[3]
    1.3.15 (2017.3.1)
    1.3.16 (2017.3.27)     移植して試用中.[3]
    1.3.17 (2017.4.28)     移植して試用中.[3]
    1.3.18 (2017.5.30)     移植して試用中.[3]
    1.3.19 (2017.6.28)     移植して試用中.[3]
    1.3.20 (2017.7.31)     移植して bugzilla に送りました. → 2017.8.4 に commit されました
    1.3.21 (2017.8.31)     移植して試用中.[3]
    1.4.0  (2017.10.1)     移植して試用中.[4]
    1.4.1  (2017.10.31)    移植して bugzilla に送りました. → 2017.11.14 に commit されました
    1.4.2  (2017.11.30)    移植して試用中.[3] (2017.12.12 に ports になっています.[5])
    1.4.3  (2017.12.29)    移植して試用中.[3] (2018.1.9 に ports になっています.[5])
    1.4.4  (2018.1.31)     移植して試用中.
    1.4.5  (2018.2.28)     移植して試用中.(2018.3.8 の時点で ports になっていました.[5])
    1.4.6  (2018.3.30)     移植して試用中.
    1.4.7  (2018.4.29)     移植して試用中.(2018.5.6 の時点で ports になっていました.[5])
    1.4.8  (2018.5.29)
    1.4.9  (2018.6.28)
    1.4.10 (2018.7.26)     (2018.8.18 の時点で ports になっていました.[5])
    1.4.11 (2018.8.28)     (2018.9.15 の時点で ports になっていました.[5])
    1.4.12 (2018.9.29)     (2018.10.12 の時点で ports になっていました.[5])
    1.4.13 (2018.10.28)    (2018.11.4 の時点で ports になっていました.[5])
    1.4.14 (2018.11.29)    (2018.12.17 の時点で ports になっていました.[5])
    1.4.15 (2018.12.30)    (2019.1.15 の時点で ports になっていました.[5])
    1.4.16 (2019.1.27)     (2019.2.8 の時点で ports になっていました.[5])
    1.5.0  (2019.2.25)     (2019.4.2 の時点で ports になっていました.[5])
    1.5.1  (2019.3.31)
    1.5.2  (2019.4.30)     (2019.5.18 の時点で ports になっていました.[5])
    1.5.3  (2019.5.28)     (2019.6.15 の時点で ports になっていました.[5])
    1.5.4  (2019.6.30)     (2019.7.18 の時点で ports になっていました.[5])
    1.5.5  (2019.7.28)     (2019.8.26 の時点で ports になっていました.[5])
    1.5.6  (2019.8.26)
    1.5.7  (2019.9.28)
    1.5.8  (2019.10.26)    (2019.10.28 の時点で ports になっていました.[5])
    1.5.9  (2019.11.27)

ついに major version が 2 になりました.
    2.0.0  (2019.12.29)    (2020.1.2 の時点で ports になっていました.[5])
    2.0.1  (2020.1.27)     (2020.3.8 の時点で ports になっていました.[5])
    2.0.2  (2020.3.1)
    2.0.3  (2020.3.29)     (2020.5.5 の時点で ports になっていました.[5])
    2.0.4  (2020.4.27)     (2020.5.23 の時点で ports になっていました.[5])
    2.0.5  (2020.5.31)     (2020.7.1 の時点で ports になっていました.[5])
    2.0.6  (2020.6.29)     (2020.7.9 の時点で ports になっていました.[5])
    2.0.7  (2020.7.31)     (2020.8.4 の時点で ports になっていました.[5])
    2.0.8  (2020.8.31)
    2.0.9  (2020.9.28)     (2020.10.10 の時点で ports になっていました.[5])
    2.0.10 (2020.10.27)    (2020.11.3 の時点で ports になっていました.[5])
    2.0.11 (2020.11.29)

major.minor version が 2.1 になりました.
    2.1.0  (2020.12.29)    (2021.1.3 の時点で ports になっていました.[5])
    2.1.1  (2021.1.30)
    2.1.2  (2021.3.2)      (2021.3.7 の時点で ports になっていました.[5])
    2.1.3  (2021.3.29)
    2.1.4  (2021.4.29)     (2021.5.18 の時点で ports になっていました.[5])
    2.1.5  (2021.5.31)     (2021.6.10 の時点で ports になっていました.[5])
    2.1.6  (2021.6.29)     (2021.7.24 の時点で ports になっていました.[5])
    2.1.7  (2021.7.30)     (2021.8.3 の時点で ports になっていました.[5])
    2.1.8  (2021.8.30)
    2.1.9  (2021.9.29)     (2021.10.2 の時点で ports になっていました.[5])
    2.1.10 (2021.10.29)
    2.1.11 (2021.12.1)

major.minor version が 2.2 になりました.
    2.2.0  (2021.12.31)
    2.2.1  (2022.1.30)     (2022.1.20 の時点で ports になっていました.[5])
    2.2.2  (2022.2.28)
    2.2.3  (2022.3.29)
    2.2.4  (2022.4.30)     (2022.5.3 の時点で ports になっていました.[5])
    2.2.5  (2022.5.30)
    2.2.6  (2022.6.30)
    2.2.7  (2022.7.30)     (2022.8.2 の時点で ports になっていました.[5])
    2.2.8  (2022.8.30)
    2.2.9  (2022.9.29)
    2.2.10 (2022.10.31)    (2023.2.2 の時点で ports になっていました.[5])
    2.2.11 (2022.11.29)

major.minor version が 2.3 になりました.
    2.3.0  (2022.12.29)
    2.3.1  (2023.1.28)
    2.3.2  (2023.2.26)
    2.3.3  (2023.3.29)     (2023.4.2 の時点で ports になっていました.[5])
    2.3.4  (2023.4.30)
    2.3.5  (2023.5.28)     (2023.6.10 の時点で ports になっていました.[5])
    2.3.6  (2023.6.28)     (2023.7.12 の時点で ports になっていました.[5])
    2.3.7  (2023.7.29)
    2.3.8  (2023.8.28)
    2.3.9  (2023.9.28)     (2023.10.16 の時点で ports になっていました.[5])
    2.3.10 (2023.10.31)
    2.3.11 (2023.11.28)    (2023.12.3 の時点で ports になっていました.[5])

major.minor version が 2.4 になりました.
    2.4.0  (2023.12.28)
    2.4.1  (2023.1.28)
    2.4.2  (2023.2.29)

頻繁に version up が行なわれるので,最新版にこだわったら時間がいくらあっても足りません. ただまあ,1.1.12 のように一年半も使い続けるのもどうかと思います.[1]

そこで,以下に最新の SBCL を FreeBSD に ports として導入する方法を提示致します. ここで「ports として」とは,他の ports/packages と同等に FreeBSD の管理ツールを使うことができると言う意味です.

[1]「古いからいけない,新しいものが良い」と主張するつもりはありません. 動作が安定していて機能に満足しているなら,個人としては更新する必要はありません.

[2] sbcl の maintainer をしていただける方が現われました. 今回の commit はこの人の貢献によるものです.

[3] files/ にある三つの patch は 1.3.13 用に作られたものですが,1.3.14 -- 1.4.3 にもそのまま使うことができます. 従って,Makefile の version の部分と distfilespkg-plist を変更するだけで大丈夫です.
    これまでの移植作業において,BOOT_VERSION として 1.0.31 を使うとエラーになることが多かったので,bugzilla にもそれを報告して 1.2.7 を使うような patch を送ってきましたが,反映されませんでした. それで,うちでは 1.2.7 を使うことを試みました. この場合には Makefile の修正がやっかいで,とりあえず FreeBSD/amd64 専用にして移植に成功しました.
(2017.10.31) 1.4.1 の port からは 1.2.7 を使うようになっています.

[4] files/ にある三つの patch は,そのまま使うことができます. ただし,以下に提示された変更も反映させないと,compile error になります.

https://sourceforge.net/p/sbcl/sbcl/ci/8603d89d6bafb0dcd3f453c259dbf8c9f3ab9fb6/

この部分は 1.4.1 では修正されています.

[5] これは私の貢献によるものではありません. 最近,まめに更新されているので楽です.

2. 導入

ある port を更新する方法の一般論は,maintain ports に提示しました. ここでは SBCL 特有の事項を述べます.

ソースは,以下のようにして download できます.

% fetch http://sourceforge.net/projects/sbcl/files/sbcl/1.3.9/sbcl-1.3.9-source.tar.bz2
% fetch http://sourceforge.net/projects/sbcl/files/sbcl/1.3.9/sbcl-1.3.9-documentation-html.tar.bz2

新しい SBCL を ports として導入するために必要な作業は,lang/sbcl の中の以下のファイルを修正することです.

ここで,

また,ここ一年以内の version においては,FreeBSD 独自の patch は必要ありませんでした.[1] ですから,更新は比較的容易であると考えます.[2]

[1] 1.3.13 用の ports には FreeBSD 独自の patch があります. これは 1.3.21 まで,および 1.4.0 から 1.4.3 まで,そのまま使うことができます.

[2] 私が SBCL を使うのは Maxima を通じてだけであり,言語としての LISP は使えないのです. 従って,make や動作に問題が生じた場合,私には対処できそうにないのです.
(2020.7.3) FreeBSD の ports における Maxima の default の Lisp が ecl (Embeddable Common Lisp) に変更されていました. sbcl も選択肢として残されています.