読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

Windowsで公式のOCamlをいれて、utop動かすところまで出来た

おはようございます。GW初日は、奥さんが子供たちを連れたお台場の日本科学未来館に行って来てくれ、その間、自由時間を過ごすことができたkjunichiです。

TL;DR

エラーメッセージを読んで、それに対応する。

背景

.opamフォルダを消す

やり直すには、.opamフォルダをとりあえず消す。

Windows10だとCygwinの設定を手動でやる必要がある

インストーラーではCygwinのインストールをやってくれない。

Note: on Windows 8.1 and above, the OCaml installer will fail to launch Cygwin's setup.exe. In that case, launch it manually (it has been downloaded to your desktop).

と書かれていた、だから先走って入れたChocolatyのCygwinしかなかったのかw。

そんなわけで、自分はChocolateyで入れたCygwinで環境構築することにして、以下の作業を行った。

まずは、ChocolateyのCygwinのセットアッププログラム(C:\tools\cygwin\cygwinsetup.exe)を起動して、 ドキュメントに掲載されたCygwinのパッケージを入れる。

opam init前の作業

環境変数をいったん無効化

ほかにも、前回のインストール作業で設定されてるが、これらは面倒だから放置した。

unset OCAMLLIB
unset CAML_LD_LIBRARY_PATH
unset CAMLP4LIB

環境変数OCAMLLIBを設定する

このOCAMLLIBが曲者だったw

公式のドキュメントではsqlite3のビルドではWindows表記にしろと書いてあるが、 少なくともそれまでの作業では以下のようななんとなくUNIXスタイル?でないとダメ。

多分この設定がocamlfindコマンドに埋め込まれる模様。

export OCAMLLIB=C:/OCaml/lib

opam init実行

これまでの手順で、opam initはうまくいく。 もっとも、前回の記事の際もこれはうまくできていた。

再び、環境変数

source ~/.bashrc

して戻す。この際に、OCAMLLIBの設定も.bashrcに書いておいても 良いかも。

最初の難関

depext-cygwinportsのインストール これ、

という理由と思われるが、とにかくopam installできない。

出来ないが、一旦は

opam install depext-cygwinports

を実行する。これで、必要なファイルが展開された状態になる。

opamで展開されたconfigureを編集しても、次回のopam install時に 戻されてしまう。

なので、手動でやる。展開されているディレクトリに移り、opamファイルの記述を参考に

cd ~/.opam/system/build/depext-cygwinports.0.0.6/
vi configure # アーキテクチャのチェック箇所をコメントアウト
if [ "$mingw_arch" != "mingw64" ] && [ "$mingw_arch" != "mingw" ] ; then
    echo "unsupported mingw_arch: '$mingw_arch'" >&2
    #exit 2
fi
./configure && make all && make wrappers && make install

本来のopamインストールが何をやるのか分からないので、 以降の追加作業を行った。

depext-cygwin.confのコピー

mkdir ../etc/depext-cygwinports
cp depext-cygwinports.conf ../etc/depext-cygwinports

depext-cygwinports.confの修正

アーキテクチャの設定箇所が改行を修正しておく。

(*  your mingw-toolchain: mingw32 or mingw64 *)
mingw_arch = "mingw64"

pkg-config.exeの無効化

/usr/local/binに入れられたpkg-config.exeを無効にしておく

mv /usr/local/bin/pkg-config.exe /usr/local/bin/pkg-config.exe.bak

これで、たぶんdepext-cygwinportsが入ったことになる。

utopのインストール

今回の目標のutopのインストールで少しハマった。

lambda-term問題

公式のドキュメントにも別のパッケージを例に解決方法が出ていた。

rm ~/.opam/repo/default/packages/lambda-term/lambda-term.1.10.1/files/lambda-term.install

あれこれやって発見したが、lambda-termは1.11系はflexlinkが「-g」オプションに対応しておらず、 インストールできない。opam install utopでなく、直接lambda-tarm等を指定するとこれが原因で 上手くいかない。

まとめ

まぁ、エラーメッセージを読んでそれに対処すれば、UNIXの経験があれば、 何とかなるっぽい。

https://pbs.twimg.com/media/C-5hFLHXkAAUEtb.jpg:large

関連記事

10年前の記事