cyclist をコンパイルしてみました

Pocket

cyclist というツールがコンパイルできないことで有名らしいので、やってみた。

コンパイル環境

  • OS: AWS Ubuntu Server 14.04 LTS (HVM)
  • ocaml: 4.01.0
  • g++: 4.8.4
  • melt: 1.4.0
  • PCRE bindings for OCaml: 7.0.4
  • Spot: 1.1.4

準備

とりあえずaptをアップデートしておきます。

コンパイル手順

出発点は cyclist (github) です。README によると開発は現在も頻繁に行われているようなので、なんとかなりそうな雰囲気です。README.compiling を見てみると、以下の環境ではコンパイルが可能とのこと。

  • OCaml (tested with 4.01) [Debian packages: ocaml-nox, ocaml-native-compilers]
  • g++ and headers (tested with 4.8) [Debian packages: g++, libstdc++-4.8-dev]
  • Melt (tested with 1.4.0) [Debian package: ocaml-melt]
  • Spot (tested with 1.1.4) [sources at http://spot.lip6.fr/wiki/ ]
  • PCRE bindings for OCaml (tested with 7.0.4) [Debian package: libpcre-ocaml-dev]
  • make: 3.8.1

とりあえず上記のうち、 Spot 以外は apt でインストールできるので、ささっと終わらせます。

問題はここからで、Spot のバージョンが 1.1.4 と書いてありますが、最新バージョンは 2.0.1 です。最新バージョンでは無理という噂を聞いているので、1.1.4 を入れることにします。

README を読むと Spot をコンパイルするためには以下のツールが必要らしい。

  • Python (2.0 or later)
  • Boost libraries
  • BuDDy

実は Spot をコンパイル (BuDDy 含む) するためには、上記以外にも数多くのツールが必要です。一気にインストールします。

また、BuDDy は自分でインストールします。

次に、以下の流れで Makefile を作ります。

configure と Makefile ができたのでコンパイルしてインストールします。

 

次に、同様の流れで Spot の Makefile を作ります。

ここで以下の警告が出ました。

automake: warning: possible forward-incompatibility.
automake: At least a source file is in a subdirectory, but the ‘subdir-objects’
automake: automake option hasn’t been enabled. For now, the corresponding output
automake: object file(s) will be placed in the top-level directory. However,
automake: this behaviour will change in future Automake versions: they will
automake: unconditionally cause object files to be placed in the same subdirectory
automake: of the corresponding sources.
automake: You are advised to start using ‘subdir-objects’ option throughout your
automake: project, to avoid future incompatibilities.
wrap/python/Makefile.am:37: warning: source file ‘$(srcdir)/spot_wrap.cxx’ is in a subdirectory,
wrap/python/Makefile.am:37: but option ‘subdir-objects’ is disabled
wrap/python/Makefile.am:28: installing ‘tools/py-compile’

ということなので、configure.ac の26行目を以下のように書き換えます。

再度コマンドを実行し、無事に automake が終わった後、autoconf を走らせます。

これで make コマンドが叩けます。

ここで以下のエラーが発生します。

cd . && \
bison -Wall -Werror –report=all \
ltlparse.yy -o ltlparse.cc
ltlparse.yy:321.17: error: empty rule without %empty [-Werror=empty-rule]
OP_SQBKT_SEP_opt: | OP_SQBKT_SEP_unbounded
^
ltlparse.yy:322.10: error: empty rule without %empty [-Werror=empty-rule]
error_opt: | error

どうやら、-Werror オプションによって警告をエラーに昇格させているようです。直せる気がしないので -Werror を削除する方向にします。

もう一度 make してみます。

次のエラーはこちら。

eltlparse.yy:68.1-12: error: %define variable ‘api.pure’ is not used

%pure-parser

^^^^^^^^^^^^

使ってないらしいので、単純に削除することにして、make を続けます。

順調にいったかと思いきや、次のエラーです。

make[3]: Entering directory /home/ubuntu/spot-spot-1-1-4-9d6d53ed9223a22d87bd7a6ed3072b2791227a40/wrap/python'
Makefile:1228: .deps/buddy_wrap.Plo: No such file or directory
Makefile:1229: .deps/spot_wrap.Plo: No such file or directory
make[3]: *** No rule to make target
.deps/spot_wrap.Plo’. Stop.

wrap/python フォルダを見てみると $(srcdir) という謎のフォルダができています。きっと変数展開ミスでしょう。特定するのが面倒なので、フォルダを適切なパスに移動することにして、make を続けます。

make が完了したので、テストしてみます。

readsave.test だけコケますが、他はパスしているので、問題無いことにしてインストールしましょう。

これで spot がインストールできました。

 

あとは、cyclist を make するだけです。

これで目的である cyclist のコンパイルが完了しました。

 

まとめ

参考サイト

  1. cyclist on github
  2. Spot
  3. Spot on GitLab
  4. autotools でコンパイルする (2. automake)
  5. Automakeでmakeする
  6. sedとxargsで特定文字列を一括置換
  7. 8.3.9.1 Error: ‘required file `./ltmain.sh’ not found’
cyclist をコンパイルしてみました

コメントを残す

メールアドレスが公開されることはありません。

Top