パラレル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-bash-bin
  • msys-core-ext
  • msys-coreutils-bin
  • msys-diffutils-bin
  • msys-findutils-bin
  • msys-gawk-bin
  • msys-grep-bin
  • msys-make-bin
  • msys-sed-bin
  • msys-tar-bin
  • msys-xz-bin
  • msys-gcc-bin
  • mingw32-gcc-g++

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/
コンパイル環境です。特に問題なければ、バッチ実行後に削除しても構いません。なお、バッチ実行時に存在していた場合、削除されますので注意してください。