gecodeをCygwin向けにパッケージ化してみる


http://qiita.com/yositani2002/items/6e9b765452676a40a2ef
こちらでBerkshlelfのv3系を使いたいが為に,gecodeをソースインストールしました。
ソースインストールにはかなり時間がかかりますので、パッケージが無いのか探してみました。

Cygwinには標準のレポジトリ以外に、cygportというレポジトリがあるようです。
cygportで以下のように探してみましたが、gecodeやlibgecodeを探しても見つかりませんでした。

bash
##設定を有効化
$ apt-cyg update -m ftp://ftp.cygwinports.org/pub/cygwinports
# 名前で検索
$ apt-cyg find gecode*
$ apt-cyg find libgecode*
##元のレポジトリに戻し
$ apt-cyg update -m  ftp://ftp.jaist.ac.jp/pub/cygwin/

名前が同じで紛らわしいですが、自分でパッケージをつくるビルドツールとしてのcygportというコマンドがあるようです。

今回はそのビルドツールとしてのcygportでgecode-3.7.3をパッケージ化し、配布できるようにしてみました。

出来上がったものだけで、ビルドツールに興味ないという方は以下のファイルを解凍の上、
ftpかhttpのサーバーに展開し、以下のようにすれば導入できるかと思います。

bash
$ wget https://bitbucket.org/yositani2002/cygport-gecode/downloads/x86_64.tar.gz
$ tar xzvf x86_64.tar.gz
$ mv x86_64 <公開ディレクトリ>
$ apt-cyg update -m  {ftp,http}://<公開しているサーバー>/
$ apt-cyg install gecode
//レポジトリ戻し
$ apt-cyg update -m  ftp://ftp.jaist.ac.jp/pub/cygwin/

以下は自力でパッケージ化する場合の話になります。

本家マニュアル
https://cygwin.com/cygport/manual.html
http://www.cygwin.com/cygport/README

参考にしたサイト
http://fd0.hatenablog.jp/entry/2014/01/26/002816

以下はレポジトリからとってきてパッケージ化する流れです。

bash
//依存パッケージはREADMEのREQUIREMENTSを参照ください。
$ apt-cyg install cygport gettext gettext-devel ..
$ cd /usr/src
$ git clone https://bitbucket.org/yositani2002/cygport-gecode.git
$ cd cygport-gecode
$ cygport gecode fetch
//一つづついく場合
$ cygport gecode prep
$ cygport gecode make
$ cygport gecode check
$ cygport gecode install
$ cygport gecode package
//またはprepからpackageまで一括でやる場合
$ cygport gecode all

treeコマンドがなかったのでDOS窓から。

C:\cygwin64\usr\src\gecode-3.7.3.x86_64>tree dist /F
フォルダー パスの一覧
ボリューム シリアル番号は 32A1-7B09 です
C:\CYGWIN64\USR\SRC\GECODE-3.7.3.X86_64\DIST
└─gecode
    │  gecode-3.7.3-src.tar.xz
    │  gecode-gecode-3.7.3-3.7.3.tar.xz
    │  setup.hint
    │
    └─gecode-debuginfo
            gecode-debuginfo-gecode-3.7.3-3.7.3.tar.xz
            setup.hint

geniniコマンドはperlのスクリプトです。cygwinの本家にあります。
以下の手順で、dist配下が公開されている状態を想定しています。。

$ cp -R gecode /var/www/dist/x86_64/release/
$ cd /var/www/dist
$ genini --recursive x86_64 | bzip2 -c > x86_64/setup.bz2

以上でパッケージの作成と公開が終了です。
これで例えば、berkshelfのインストールは最短コースだとこうなるかと思います。

bash
$ apt-cyg update -m  http://<ホスト>/<パス>
$ apt-cyg install gecode
//戻し
$ apt-cyg update -m  ftp://ftp.jaist.ac.jp/pub/cygwin/
$ USE_SYSTEM_GECODE=1 gem install berkshelf

うまくいったでしょうか。