Hatena::ブログ(Diary)

闇鳥の人の好意を無視する道

2013-07-15

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

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/yamidori98/20130715/1373876245
リンク元