SML#のためにlib32gmp-devを入れる

SML# 2.0.0をLinuxMint17.1に入れようとしたけれど、 SML#はlib32gmp-devというパッケージに依存しており、lib32gmp-devは公式にはUbuntu12.04(Precise)=LinuxMint13までしかない。 そのため、そのままではパッケージが足りずインストール出来ない。

そこでlib32gmp-devを入れる(ついでにgmpは最新の(6.0.0a)で)ためにやったことをメモがてら書いておく。 Ubuntu12.04でやれば簡単なんだけど、どうせなら新しいので動かしたいしね? 当然これで必ずうまく行く保証はないし、やってみてどうなってもいかなる責任も負いません。

やった環境

環境は LinuxMint17.1 64bit (ベースはUbuntu14.04)
基本的にクリーンインストールの状態

当然Ubuntuでも同じ手順で大丈夫のはず

手順

  1. Preciseのlib32gmp-devのソースパッケージを入手
  2. 最新のgmpのソースファイルを入手
  3. debパッケージ用のファイルをソースパッケージから拝借
  4. ソースパッケージ内の設定ファイルを修正
  5. バイナリパッケージをビルド
  6. インストール

1. ソースパッケージを入手

の右にある

gmp ソースパッケージをダウンロード:

以下の3つのファイル(.dsc、.orig.tar.gz、.diff.gz)を同じフォルダにDL

次に

$ dpkg-source -x gmp_5.0.2+dfsg-2ubuntu1.dsc

してソースパッケージを得る。

2. 最新のgmpのソースファイルを入手

1.のソースパッケージを作ったのとは別の場所に

からソースファイルをDL

次に

$ lzip -d gmp-6.0.0a.tar.lz
$ tar xf gmp-6.0.0a.tar

して解凍する。

3. ファイルをソースパッケージから拝借

ソースパッケージ内のdebianフォルダをソースファイルのフォルダ(gmp-6.0.0)内にコピーする。

4. 設定ファイルを修正

debianフォルダ内のいくつかのファイルを修正する。

まずrulesファイル3行目のバージョンを

ORIG_SRC_VERSION = 6.0.0

と修正。

またchangelogファイルの先頭に適当に追加する。下のようにしたけど、適当すぎる(というかなにが必要でなにが不要かよくわからない(まぁ自分でインストールするだけだしいいよね()))

gmp (2:6.0.0-1) unstable;urgency=low

* Update

-- koropicot <hoge@example.com>  Sat, 20 Dec 2014 17:10:29 +0900

あとpatchesフォルダを削除する

5. バイナリパッケージをビルド

ソースファイルのフォルダ(gmp-6.0.0)内で

debuild -uc -us -b

としてパッケージをビルドする。 debuildはdevscriptsパッケージに含まれる。

ビルド中にエラーが出たときはエラーメッセージから足りなそうなパッケージ追加したりする。

gcc-multilib g++-multilib build-essential quilt debhelper

とかが必要だった気がする。

6. インストール

うまくいくとソースファイルのフォルダと同じ階層に.debファイルが幾つかできているので、そこで

$ apt-ftparchive packages . | gzip -c9 > Packages.gz
$ apt-ftparchive sources . | gzip -c9 > Sources.gz

する。

次にリポジトリとして

deb file:<Packages.gzとかがあるフォルダ> ./

を追加する。 Synaptic パッケージマネージャの設定→リポジトリ→追加リポジトリ→新しいリポジトリを追加からやった。

リポジトリを変更したので

$ sudo apt-get update

そして…

$ sudo apt-get install lib32gmp-dev

するとlib32gmp-devがインストールできる。

その後

SML#のHPからUbuntu用64bitパッケージをDLしてインストールできた。 そしてREPLも動いたので当初の目的達成。

動作かくにん! よかった。

参考サイト