torutkのブログ

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

Java SE 6 (Mustang) b91ビルド

makeを実行すると、unameコマンドが見つからない!といったエラーがいきなり出てくる、うっ、重症っぽい。Cygwinのバージョンを1.5.20にアップしているのが原因かもしれない。

というよりも、WindowsGNU makeコマンドの相性が最悪なのである。Windows環境でのJDKビルド環境はかなり問題が多い。

以下問題解決メモ

環境変数PATHの修正

Cygwinの実行ファイルのパスを追加する際に、

PATH=...<中略>...;;C:\cygwin\bin

のように、;;と区切子が2つ連続で入っているのが原因。Visual Studio環境変数設定バッチファイルでPATHの設定の最後に;がついており(最低!)、それを知らずにJDKビルド用バッチファイルで、PATH=%PATH%;C:\Cygwin\binと設定していたため。

回避策として、PATH=%PATH%C:\Cygwin\binのようにしなくてはならない。

今までエラーにならなかったので、CygwinGNU make)のバージョンアップが引き金になっている可能性大。

makeエラー(multiple target patterns)

sanity-rules.gmk:44で以下の記述でmultiple target patternsエラーが発生

$(ERROR_FILE) $(WARNING_FILE) $(MESSAGE_FILE):
	@$(prep-target)

make -pコマンドで、ERROR_FILE、WARNING_FILE、MESSAGE_FILEを調べると、

ERROR_FILE := D:/mustang/b91out/sanityCheckErrors.txt
WARNING_FILE := D:/mustang/b91out/sanityCheckWarnings.txt
MEESSAGE_FILE := D:/mustang/b91out/sanityCheckMessages.txt

のようになっている。D:という部分がmakeの書式と干渉してエラーになっていると考えられる。相対パスで記述するか、ドライブ記述を削除するかが回避策として考えられる。(同じDドライブ上で作業している場合、D:を削除して/mustang/...と記述してもアクセス可能)

ERROR_FILE等は、control/make/common/Defs.gmkで定義されます。

# The MESSAGE, WARNING and ERROR files are used to store sanityck and 
# SCCS check messages, warnings and errors. 
export ERROR_FILE   := $(ABS_OUTPUTDIR)/sanityCheckErrors.txt
export WARNING_FILE := $(ABS_OUTPUTDIR)/sanityCheckWarnings.txt
export MESSAGE_FILE := $(ABS_OUTPUTDIR)/sanityCheckMessages.txt

CygwinのMLを探すと、makeのバージョン3.81でこのエラーが発生するとの報告あり。原因は、makeのバージョン3.81ではWindowsのパスを認識できないためです。ドライブレターの直後の:が、ターゲットの末尾の:と誤認されてしまいます。
http://cygwin.com/ml/cygwin/2006-07/msg00389.html

そこで、makeのバージョンを3.80に戻して回避します。