bitkeeperからソースを落としてパッケージング

MySQLはbitkeeperのWebサイトを見れば最新のソースから過去のソースまで全て見れるし、
http://mysql.bkbits.net/
bkf (Bitkeeper Free Client)を使えばそのソースコードを丸ごとダウンロードすることもできます。

以前はサーバの負荷が高かったためか過去のリビジョンを指定してダウンロードすることはできない状態がつづいていましたが、今は-rオプションをつければどのリビジョンでも可能です。

bkf clone -r1.2476 bk://mysql.bkbits.net/mysql-5.0-community hoge

で、このbitkeeperから落としたソースというのは、普段、tarball形式でダウンロードしてくるソースと実は違いまして、、、

  • bk版はAutotools系が実行されてないのでconfigure前に実行する必要がある
  • bk版はLinux/Windowsソースが混在している

という感じになっています。

Linux向けのソースはbkからcloneした後、以下の手順で実は作成されて、配布されていると思われます。

  1. BUILD/autorun.sh
  2. BUILD/compile-dist
  3. make
  4. make dist

一方、Windows向けのソースは以下のように作成されていると思われます。

  1. BUILD/autorun.sh
  2. BUILD/compile-dist
  3. make
  4. scripts/make_win_src_distribution

ここで、うちみたいにMySQLの改造をしてる人にとっては大きな問題だったりするのが、

  • 改造対象はある特定のリリースにしたい。bitkeeperにある最新とかあるリリースの間とかはいや。だってpatch作るのが面倒になるから。
  • LinuxだけでなくWindowsでもビルドできるようにしたい

という点です。

前者は単にbitkeeper版ではなく、tarballを入手して使えばいいのですが、tarball版だと、、

  • Linux向けtarball版にはmake_win_src_distributionの実行に必要なファイル(VC++Files)が無い。
  • Windows用zipにはもちろんLinux向けソースを生成する機能は無い

ということで「LinuxだけでなくWindowsでもビルドできるようにしたい」というのが満たせないです。

そこで、じゃあbitkeeperから落としたらいいじゃないか、という話になるのですが、それが本エントリの結論、というかこれがいいたかっただけともいう。

BitkeeperのWebページをたどってtagとrevisionの関係を調べましょう。
http://mysql.bkbits.net:8080/mysql-5.0-community/?PAGE=tags
例えばMySQL 5.0.41ならこれ。
http://mysql.bkbits.net:8080/mysql-5.0-community/?PAGE=cset&REV=mysql-5.0.41
それによると"ChangeSet@1.2476"とのことなので、後は以下のようにしてbkf cloneすればおk。

bkf clone -r1.2476 bk://mysql.bkbits.net/mysql-5.0-community hoge

で、BUILD/autorun.shすれば、make_win_src_distribution動作可能なLinuxソースパッケージみたいな感じになるので後は好きなように改造するなり既存パッチをあてるなりして、そこからmake distあるいはmake_win_src_distributionをやればLinux/Win向けのソースパッケージができる。