Build MySQL 5.1.3X with VC++2008EE

MySQLのGenerally Availableが5.1になったので、入れ替えようと思ったんですが、ふとソースからビルドしたくなってしまいました。そのときの備忘録です。 ビルドに使用したソース、ツールは

  • MySQL 5.1.30 Compressed GNU TAR archive.
  • Visual C++ 2008 Express Edition. (SP1なし)
  • GnuWin32のbison
  • Cmake の Win32バイナリ

ソースに同梱されているINSTALL-WIN-SOURCE ファイルにビルド方法が書かれているので基本的には書いてあるとおりにすればビルドできる。ただ、Visual Studio 2005 が最新のターゲットになっているので、Visual Studio 2008 Express Edition でビルドするには若干ファイルを修正する必要がありました。

CmakeとbisonのWin32バイナリが必要なので、以下URLからゲト。

  • http://www.cmake.org/cmake/resources/software.html
  • http://sourceforge.net/project/showfiles.php?group_id=23617&package_id=22822

bisonは bison-2.1-bin.zip にはDLLファイルが入っていないので、bison-2.1-dep.zip もゲトする。 cmakeはWindows Installerのものをインストールするのがカンタンです。

bisonとCMakeをインストールしたら、各実行ファイルがあるディレクトリを環境(システム)変数”PATH”にビルドする前に追加してパスを通しておく。 それと・・・Express Edition でビルドする場合、mc.exe(メッセージコンパイラ)が無い! というエラーが出るのでどこからか調達する必要があります。幸いまだ以前のSDK、「Platform SDK for Windows Server 2003 R2」が残っていたので、そのディレクトリをVC2008の設定で実行ファイルの検索パスに追加。 やっと準備ができました。 MySQL 5.1.30のソースファイルを作業ディレクトリに展開し、Visual C++ 2008のコマンドプロンプトを起動し、以下のように実行。

e:WorkingDirmysql-5.1.30> winconfigure  \
WITH_INNOBASE_STORAGE_ENGINE \
WITH_PARTITION_STORAGE_ENGINE \
WITH_ ARCHIVE_STORAGE_ENGINE \
WITH_BLACKHOLE_STORAGE_ENGINE __NT__

e:WorkingDirmysql-5.1.30> winbuild-vs9.bat

実際には”\”は削除して一行で。 winbuild-vs9.bat はもともと存在しません。winbuild-vs8.batをコピーしてVisual Studio 2008用に以下のように修正。要するに8と2005をそれぞれ9と2008に修正しただけでオケ。

@echo off
if exist cmakecache.txt del cmakecache.txt
copy winvs9cache.txt cmakecache.txt
cmake -G "Visual Studio 9 2008"
copy cmakecache.txt winvs9cache.txt

作業ディレクトリのルートにMySQL.sln というVisual Studio 2008のソリューションファイルができているので、Visual C++ 2008のIDEで開く。 ここで、Release を選んで「ソリューションのビルド」をすれば出来上がるのですが、僕の環境では、sql_locale.cc でエラーが出ます。ネットで検索すると、該当のソースファイルがBOMなしのUNICODEなのが原因で、BOM付で保存するとエラーが出なくなります。そのかわりに大量の文字エンコード関係の警告がでますが、支障はないと思うので放っておく。

INSTALL-WIN-SOURCEにはここでテストするようなことが書かれているのですが・・・まぁ大丈夫でしょう。これで あとはINSTALL-WIN-SOURCEに書かれているように必要なファイルをコピーして終了・・・と思いきや記述されているディレクトリがまず存在しないので、結局は手作業で必要なファイルを拾ってコピーするしかないようです・・・。 nmake installとかでやってくれないものか・・・ とりあえず、ちゃんと動いているような・・・・感じです。。。