torutkのブログ

ソフトウェア・エンジニアのブログ

Java SE 6(Mustang)をソースからビルドする

日経バイトに連載されている青木淳さんの記事を読んで衝撃を受けたので、MustangのJDKをビルドしてみるべしとチャレンジしました。

Windows版のビルドに必要なもの

C++コンパイラは今回無償のVisual C++ Toolkit 2003を使ってみます。うまくいくかは何とも・・・。

さて最初の試み

java.netからMustangのソースを入手し作業ディレクトリに展開します。ソースアーカイブは実行可能JAR形式なので、展開にはjavaコマンドで実行します。

~$ java -jar jdk-6_0-ea-src-b48-jrl-18_aug_2005.jar

環境設定は、VC++の環境設定用バッチファイルVCVARS32.BATを実行し、さらにたくさんの環境変数を設定します。VCVARS32.BATは、Visual C++ Toolkit 2003の中に含まれるものを使用します。

エラー対処

D:/win32app/cygwin/bin/df: `C:/TEMP': No such file or directory

これは、C:/TEMPを作るしかありません。

ERROR: Missing ./../src/share/lib/fonts/LucidaTypewriterRegular.ttf. Verify you have downloaded and overlayed on the source area all the binary files.

JDK 5.0またはJDK 6.0(バイナリリリース)の中(jre/lib/fonts)にあるフォントファイル(*.ttf)一式を、j2se/src/share/lib/fonts/の中にコピーします。

/bin/sh: D:/Program Files/Microsoft Visual C++ Toolkit 2003/bin/rc: No such file or directory

VC++ Toolkit 2003にはリソースコンパイラRC.exeが含まれていません。しかし、Microsoft Platform SDKには含まれています。そこで、Platform SDKのRC.exeとRCdll.dllをVisual C++ Toolkitのbinにコピーします。ちなみにショートカットでごまかすことはできませんでした。

環境変数PATHが通っていれば、RC.exeが依存するDLLはRC.exeと同じディレクトリになくてもよいのですが、後々PATH設定で面倒になることもあるので、RC.exeが使用するDLLを調べて必要なDLLは一緒にコピーしています。依存するDLLの調べ方は、Microsoft Platform SDKに入っているDepends.exeを実行します。これはDependency Walkerという名前のGUIツールで、指定した実行ファイルが依存するDLLファイルを調べることができます。

RC.exeの場合、KERNEL32.DLLとRCDLL.DLLです。

../../../../src/windows/resource/version.rc(9) : fatal error RC1015: cannot open include file 'afxres.h'.

以下を入手し、Visual C++ Toolkit 2003/includeに保存しました。
http://cvs.sourceforge.net/viewcvs.py/ffdshow/ffvfw/src/cygwin/afxres.h
あるいは、以下の内容のafxres.hを作ってもごまかせるかもしれません。

#include "WinUser.h"
#define IDC_STATIC (-1)
Makefile:110: *** multiple target patterns. Stop.

これは原因、対処不明。