MinGW+MSYS 猫科研究所パック assemble008 構築ツールキット

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
●概要

猫科研究所パックを構築するためのツールキットです。毎回詳細に注意しながら猫研パッ
クを構築するのが面倒なので、自動的にMinGW/MSYS環境を構築する環境を作成しました。
猫研パックの立場で言うと環境を作成するためのメタ環境になります。

【基本方針】
	・初期状態の外部ツールとして7-zip(7za.exe)のみがあれば構築可能。
	・バッチファイルとWSHでダウンロードと一次展開までを完了させる。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
●使い方

/_felidlabo以下がツールキットになっています。これ以外のディレクトリは存在しない
状態から開始します。99_cleanup_all.batを実行すればその初期状態になりますが、既存
のMinGW/MSYS環境が削除されますので注意してください。

/_felidlabo以下のバッチファイルを順番に叩けばインストールが完了します。

	00_prepare.bat
		wget.exeと依存ライブラリをダウンロードしてメタ環境に展開・追加します。
	01_download.bat
		wget.exeを使用して/_felidlabo/listに基づきファイルをダウンロードします。
	02_extract.bat
		/_felidlabo/listに基づきアーカイブを各ディレクトリに展開します。
	03_postinstall.bat
		インストール後調整スクリプト（MSYSに元々付属）の改造版を実行します。
		これにより重複コマンドの調整が行われます。
		また、複数バージョンのgcc間の調整が行われます。
	04_gccinstall.bat
		使用するgccのバージョンを指定し、環境をそれに合わせます。
	05_plus-build.bat
		nasm, yasm, libjpeg, libpng等のオプションパックをビルドします。
	xx_env.bat
		バッチファイル間で共通で使用する変数をまとめたバッチファイルです。
		直接使用することはありません。

猫科研究所パックは03_postinstall.batまでが完了した状態で配布しています。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
●仕様・制限・注意

以下に、このツールキットの構成や設計思想に関するメモを残します。これをもって仕様
とします。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★7zaの同梱に関して

7za.exeもダウンロードしてからメタ環境に追加することはできるのですが、その場合に
はzipfldr.dllがレジストリに登録されている必要があります。シェルに統合されたアー
カイバが気持ち悪く感じる方も中にはいて、登録を解除していることが考えられるため、
7za.exeは同梱しました。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★wgetのダウンロード(bin/wgetmodoki.wsf, bin/flhttp.wsc)に関して

wgetはhttp/ftpによりファイルをダウンロードするツールです。wgetをダウンロードする
ためにWSHでWinHttpを使用してダウンロードするwgetmodoki.wsfを作成しました。実際に
はflhttp.wscがWinHttpのラッパであり、wgetmodoki.wsfはこれを使用してwgetのような
インターフェースで動作します。

wgetmodoki.wsfはhttpにしか対応しないので、ftpでのダウンロードが基本であるlibxml2
を含めたかった今回はwgetが必須でした。WSHでftpを扱うこと自体はShellを経由すれば
不可能ではないのですが、完了/失敗を検出する安定的手段が存在しないので避けました。
また、ActiveX経由でWinHttp/Shellを扱う場合、非同期操作が満足に行えず、進捗状況が
表示できないことも理由の一つです。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★01_download.bat

wgetはURLのリストを書いたテキストファイルを入力できますが、ダウンロードのチェッ
クと02_extract.batでの展開先を記述するため、バッチファイルのFOR文で1つ1つダウン
ロードする方式としました。URLとファイル名を別に書いているのは、将来的にURLの末尾
からファイル名を得られないアーカイブに対応するためです。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★02_extract.bat, bin/extract.bat, bin/chknest.bat

このバッチファイルはリストからアーカイブ名を抽出して/_felidlabo/bin/extract.bat
に渡す役目を負っています。7za.exeはtar.gzやtar.bzを与えるとgunzipは行いますが、
tarを展開してくれません。このため2回展開する必要があり、FOR文の中でこの処理を行
わせるのは厳しいため、bin/extract.batを切り出しました。ところが、バッチファイル
で扱えるファイル名操作では、patch.gzのように1度の展開でよいものを区別する方法が
見つかりません。仕方なく、ファイル名の判断はさらにchknest.batに委譲しています。

この多重展開はパイプを使用して2つの7za.exeを繋ぐことで、中間ファイルを発生させず
直接展開することができます。この場合に「ERROR:パイプは終了しました」と表示される
ことがあるようですが、問題はないようです。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★03_postinstall.bat, bin/pi-felidlabo.sh, bin/pi.sh

03_postinstall.batはバッチファイルの体裁だけで、pi-felidlabo.shが本体です。

pi-felidlabo.shは最初にpi.shを起動します。pi.shはオリジナルのMSYSのpostinstallを
改造したものです。猫研パックでは不要な処理を無効にしています。diffを取りやすくす
るため、不要部分はヒアドキュメントにして/dev/nullにcatしています。

	元々の処理で残しているもの
		・重複するコマンドの調整

pi-felidlabo.shはこの他、猫研パック固有の調整を行います。

	固有の調整項目
		・猫研パックのための環境変数を/etc/flenvに出力
		・複数のgcc間の調整
		・coreutilsからpr.exeのみを/binにコピーする処理
		・DLL用のライブラリをリネームする処理

猫研パックはここまでの実行が完了した状態で配布しています。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★04_gccinstall.bat, bin/gccinstall.sh

04_gccinstall.batはバッチファイルの体裁だけで、gccinstall.shが本体です。

猫研パックはgcc-3とgcc-4の両方を含んでいますが、含まれるファイルがバッティングす
るため両者を同時に扱うことはできません。これらのファイルをどちらかに合わせて配置
するのがこのスクリプトです。実際にはgccswitch.shを呼び出しています。

ユーザがgcc-3とgcc-4のどちらを使用したいかは不明であるため、猫研パックではこれ以
降を未実行の状態で配布しています。これにより、plusパックをどちらでビルドするかも
ユーザが選択することができます。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★05_plus-build.bat, bin/05_plus-build.sh, bin/1?_*-build.sh

plusパックをビルドします。これに関してはもう各個撃破です。

a006より、猫研パックは中途半端に半角空白を含むパスへのインストールをサポートして
います。「中途半端に」の理由はこのplusパックのビルドに於いて、libiconvとlibxml2
がビルドできないためです。これらはビルド時に自前のlibtoolを使いますが、その際に
半角空白を含む絶対パスに対してアクセスしようとします。また、cygpathを使用しよう
としますが、MinGW/MSYSにはcygpathがありません。

根本的には、GCCが"gcc -print-prog-name=ld"等とした際に絶対パスで回答することに原
因がありそうです。が、これを回避するにはGCC自体を猫研でビルドしなければならなく
なりそうで、ちょっと作業的に重すぎます。また、この部分を変更してしまうと、MSYS環
境ではない、コマンドプロンプト等からMinGWのみを使用する場合への影響が出そうです。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
★メタ環境のクリーンアップ

メタ環境は上記のバッチファイルを実行するとファイル・ディレクトリが増えます。以下
のファイル・ディレクトリを削除すれば、初期状態になります。
	/_felidlabo/dl
	/_felidlabo/gcc
	/_felidlabo/bin/GnuWin32

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
●元ネタ(/_felidlabo以下の構築ツールキット分のみ)

猫科研究所パック構築ツールキットに含まれるファイルは下記に示す場所から得ました。

MinGW/MSYS
	http://www.mingw.org/
7-zip
	http://www.7-zip.org/

各ソフトウェアの開発者の方々に感謝します。非常にレベルの高い技術者の、非常に多く
の時間が費やされて出来上がっていることに、畏敬の念を覚えます。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
●更新履歴

assemble008 2010/10/01
	7zaを9.16にアップデート。
	msysGitの統合用WSHスクリプトとバッチファイルを含めた(EXPERIMENTAL)。

assemble007 2010/06/10
	7zaを9.14にアップデート。

assemble006 2010/04/29
	複数verのgccの競合ファイルを/mingwにディレクトリを切って保存するようにした。
	オリジナルに近いpi.shと猫研パック固有処理のpi-felidlabo.shに分けた。
	ダウンロードリストにコメントを書ける（"#"以降がコメント）ようにした。
	7zaを9.13にアップデート。
	pthread-w32の猫研による修正版を標準で使用できるようにしてみた（危険！）。
	半角空白を含むパスでの構築に中途半端に対応した（実用になりません）。
	その他細かく色々。

assemble005 2010/02/14
	pthread（clear-static版）のパッチとビルドスクリプトを追加。
	expatのDLL版のエスケープスクリプトを追加。
	pi.shの古いコードを削除した。
	7zaを9.10betaにした。

assemble004 2009/12/09
	各種アーカイブに.lzmaや.xzが使用され始めたので、仕方なく7zaを907にした。
	MinGWでzlibの最新バイナリを配布していたのでzlibのビルドを省いた。
	chknest.wsfはchknest.batでも同等の判断が可能なため差し替えた。
	二重展開時に中間ファイルを生成しないようにした。
	複数のgcc間のバッティングするファイルを半自動で解決できるようにした。
	TDW版GCCに含まれるpthread.h/sched.hの_POSIX_C_SOURCE/pid_t問題に対処。

assemble003 2009/06/21
	ツールキットが含まれる初版。

＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿＿
●おくづけ

作った人
	猫科研究所（猫Ｐ, 平田）
ライセンス
	外部由来のものは上記「元ネタ」の各ライセンスに従う。
	猫科研究所での作成分はwgetmodoki.wsfとflhttp.wscのみzlibライセンス。
	その他の猫科研究所での作成分はパブリックドメイン。
提供場所
	http://up-cat.net/
