パラレルmakeがハングするMSYS DLL v1.0.18を修正する
昨日予告したMSYS DLL v1.0.18 修正版の作成方法を公開します。
作成されるMSYS DLLは、勝手にファイルバージョン 1000.18.0.1、製品バージョン 1.0.18.0.1を採番しています(オリジナルは、それぞれ1000.18.0.0と1.0.18)。また、今回のバグとは直接関係はありませんが、オリジナルのビルダーを使用すると、DLLのプロパティ情報が文字化けしていたので、こちらも修正しています。
その他
firestorageに格納したファイルへの直リンが、永続的なものではないことが分かり、バッチシェルの修正に時間を取られすぎた…。かなり、怪しい修正だが、取りあえず動いている様なので、暫くはこれで様子見。動かなくなったらゴメン。
開発環境
- MinGWのインストーラーでC, C++, MSYS Basic System, MinGW Developer ToolKitをインストール。カタログファイルは2013/7/15時点の最新を使用。
- MSYS Shell上でコンパイルを実施(MinGW Shellのショートカットのプロパティを開き、リンク先を「C:\MinGW\msys\1.0\msys.bat」から「C:\MinGW\msys\1.0\msys.bat MSYS」に変えればOK。MinGW Shellとは別のショートカットを用意した方が良いかも)
- /usr/local/binに独自でコンパイルしたgccなどを格納している場合、それが実行されない様にしてください。MSYS用のバイナリーは/usr/bin(/bin)配下のコンパイラ等を使用しないと、正しく作成されませんので、注意してください。
必要要件
下記のパッケージが必要です。いずれもmingw-getで入手可能です。なお、これらパッケージは、MSYS DLLのソースに添付されているビルド用バッチを実行すると、一括取得されますので、個別に用意する必要はありません。
MSYS DLL v1.0.18 ソースの入手
MinGWのMSYS/Base/msys-coreからmsysCORE-1.0.18-1-msys-1.0.18-src.tar.lzmaをダウンロードしてください。
下の方で紹介しているバッチシェルを利用する場合、バッチ内で取得するため、特に個別に用意する必要はありません。
MSYS DLL v1.0.18用パッチの入手
次のパッチをダウンロードしてください。
下の方で紹介しているバッチシェルを利用する場合、バッチ内で取得するため、特に個別に用意する必要はありません。
ソースの展開とパッチ適用
ソースを解凍し、修正パッチを適用します。
$ mkdir -p 任意のディレクトリ $ tar -xf msysCORE-1.0.18-1-msys-1.0.18-src.tar.lzma -C 任意のディレクトリ $ cd 上記のディレクトリ $ patch -p1 < パッチの格納ディレクトリ/diff-msysCORE-1.0.18.0.1-1-msys.patch
前提パッケージの取得
ビルドに必要なパッケージを取得します。インストール済みかどうかはチェックしていないので、既に最新のものがインストールされている場合にも、エラーが表示されます。これらエラーは無視してください。
$ ./msysrlsbld -e build_dep
コンパイル
ソースを解凍したディレクトリとは別に、新しいディレクトリを用意してください。
$ mkdir -p 任意のディレクトリその2 $ cd 上記のディレクトリ $ ソースを展開したディレクトリ/msysrlsbld
コンパイルが正常に終了すると、新しく用意したディレクトリに次のファイルが生成されます。
- msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-bin.tar.lzma
- msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-dbg.tar.lzma
- msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-dev.tar.lzma
- msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-doc.tar.lzma
- msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-ext.tar.lzma
- msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-lic.tar.lzma
インストール
MinGW/MSYSシェルがMSYS DLL(/bin/msys-1.0.dll)を使用しているため、直接インストール(展開)することはできません。いったん別のディレクトリに展開し、MinGW/MSYSシェルをすべて終了させた後、エクスプローラー等でC:\MinGW\msys\1.0\へコピー(上書き)してください。
$ mkdir -p 任意のディレクトリその3 $ tar -xf msysCORE-1.0.18.0.1-1-msys-1.0.18.0.1-bin.tar.lzma -C 任意のディレクトリその3 $ exit … 任意のディレクトリその3の配下をC:\MinGW\msys\1.0\へコピー …
ソース/パッチの入手からコンパイルまで行うバッチシェル
build-msysCORE-1.0.18.0.1-1-msys.shをダウンロードして任意のディレクトリに格納してください。
次のように実行するだけで、コンパイルまでをすべて自動で実行します。なお、生成されたmsysCORE-*.tar.lzmaは、カレントディレクトリに移動されます。
$ ./build-msysCORE-1.0.18.0.1-1-msys.sh
バッチシェルの補足説明
- カレントディレクトリ/build.log
- バッチシェル実行時のメッセージ(エラーも含む)を記録しています。問題が発生したとき、このファイルを参照してください。
- カレントディレクトリ/diff-msysCORE-1.0.18.0.1-1-msys.patch
カレントディレクトリ/msysCORE-1.0.18-1-msys-1.0.18-src.tar.lzma - ダウンロードしたソースおよびパッチが格納されます。
- カレントディレクトリ/msysCORE-*.tar.lzma
- コンパイル済みのバイナリがtar.lzma形式で格納されます。
- /usr/local/src/msysCORE-1.0.18.0.1-1/
- パッチ等を適用したソース環境です。なお、バッチ実行時に存在していた場合、削除されますので注意してください。
- /usr/local/src/msysCORE_build/
- コンパイル環境です。特に問題なければ、バッチ実行後に削除しても構いません。なお、バッチ実行時に存在していた場合、削除されますので注意してください。