MinGW64 環境の Git で文字化けを解消する


はじめに

MinGW (64bit) + MSYS 環境の構築 (1) | DeVlog – 銀の翼で翔べ – で、Git の入った MinGW 環境を作る方法について記述しました。その後色々と作業しているうちに、ソースに日本語が使われていると git log や git diff が文字化けしてしまう事がわかりました。本記事では、この問題の原因と解決方法について紹介します。

文字化けの原因

Windows のコマンドプロンプトは、SJIS で表示するようになっています。一方、MSYS の各種ツールは UTF-8 で表示するようになっています。この違いにより文字化けが発生するようです。ちなみに、コミット後に表示されるログは文字化けしませんでした。どうやら、Git の各種コマンドのうちページャを使って表示するものが文字化けするようです。

解決方法

文字化けを解決するには、Git がページャ表示する際に nkf を通して表示するように設定すると良さそうです。以下、その手順です。

  1. nkf のインストール
    1. http://sourceforge.jp/projects/nkf/ からソースをダウンロードして展開
    2. Makefile の CC = cc を CC = gcc に変更
    3. 以下のコマンドでビルドしてインストール
  2. ~/.bashrc に以下を記述

以上の設定後、msys.bat でコマンドプロンプトを起動すれば、文字化けしない Git が使えるようになっています。

[関連記事]

  1. MinGW (64bit) + MSYS 環境の構築 (1) | DeVlog – 銀の翼で翔べ –
  2. MinGW (64bit) + MSYS 環境の構築 (2) | DeVlog – 銀の翼で翔べ –

[参考サイト]
WindowsでのGit環境構築とその注意点 3ページ | SourceForge.JP Magazine

MinGW (64bit) + MSYS 環境の構築 (2)


はじめに

前回の記事に続いて、64ビットバイナリを生成できる MinGW (SEH, posix-threads) 環境の構築について紹介します。前回は、Mingw-64 とMSYS をインストールするところまで記述しました。今回は、主に Qt5 のビルドを想定して、追加のツールをインストールしていきます。ディレクトリは、前回の記事で採用したものを使う前提で説明します。

Strawberry Perl のインストール

前回インストールした MSYS には、perl がインストールされています。

現在(2013年12月)、perl の最新バージョンは 5.18.x であり、MSYS の perl はかなり古いといわざるを得ません。実際、いくつかのビルドができない場合もありました。新しい perl を導入するには、Strawberry Perl for Windows をインストールするのが簡単で確実です。

  1. Strawberry Perl for Windows から、Recommended stable versions の 64bit 版をダウンロードしてインストールします。(インストール先は、デフォルトでC:strawberry)
  2. MSYS 環境の /etc/fstab (C:mingw64msysetc) に、以下を追加します。 このようにマウントしておくと、後でパスを設定する時に設定がしやすく、間違いもおきにくいのでお勧めします。
  3. /perl/bin を MSYS 環境のパスに加えます。この時、MSYS に含まれている perl.exe より先に見つかる必要があるので、/bin より前に加える必要があります。また、/perl/bin には、MinGW と共通の dll が含まれているため、/mingw/bin より前にパスがくると、MinGW のコンパイラが正しく動作しなくなります。つまり、/mingw/bin:/perl/bin:/bin のような順番にする必要があります。このように設定するには、/etc/profile (C:mingw64msysetcprofile) で設定するのが良いでしょう。19行目を以下のように修正します。
  4. PERL 環境変数を設定しておきます。~/.bashrc (C:mingw64msyshomeuser-name.bashrc) に以下を追加します。 configure スクリプトの中には、別の環境の perl を見つけてきてしまうようなケースがありますが、この環境変数でそれを回避できます。

バージョンを確認しておきます。

Python 2.7 のインストール

Perl と同様 Python も様々なスクリプトを記述するのに利用されています。最新の Python は 3系ですが、よく使われているのは 2系です。ここでは、2.7 をインストールします。

  1. ダウンロード から、python-2.7.6.amd64.msi をダウンロードしてインストールします。(デフォルトのインストール先は、C:Python27)
  2. Perl と同様の要領で、ディレクトリのマウントとパスの設定を行います。
    /etc/fstab /etc/profile
  3. バージョンを確認しておきます。

Ruby のインストール

Qt のビルドでは Ruby も必要となるので、インストールしておきます。

  1. Downloads から、Ruby 2.0.0-pxxx (x64) をダウンロードしてインストールします。(デフォルトのインストール先: c:Ruby200-x64)
  2. ディレクトリのマウントとパスの設定を行います。
    /etc/fstab /etc/profile
  3. バージョンを確認しておきます。

Yasm のビルドとインストール

Qt のビルドには、Yasm は必要ないのですが、Yasm を必要とするオープンソースは結構あります。ここでは、テストも兼ねて Yasm をビルドしてみます。

  1. msys.bat を起動してコマンドプロンプトを開きます。
  2. Git リポジトリからソースをクローンします。 msys.bat を –mintty オプション付で起動していると、ここでフリーズしてしまいます。msys.bat はオプション無しで起動してください。(フリーズした場合、タスクマネージャで ssh.exe を停止してください。)
  3. yasm のプロジェクトには、configure がありません。configure を作成するには、autoreconf を使います。その後、configure を実行します。
  4. make を実行し、インストールします。
    • configure に –prefix を指定しない場合のインストール先は、/usr/local です。MSYS 環境では、/usr は / と同じです。従って、/local (c:mingw64msyslocal) にインストールされます。
    • 外付けのマルチカードリーダをつないでいると、make の時点で「ディスクがありません」というポップアップウインドウが出る場合がありました。その場合はカードリーダをはずしておいてください。
    • 以下のエラーが出る場合は、Python が正しくインストールされていません。確認してください。

      make: *** No rule to make target x86insns.c', needed by all’. Stop.

gperf のビルドとインストール

Qt のビルドで gperf が必要となるので、ここでビルドしてみます。

  • 圧縮ファイルをダウンロードして展開します。wget が使えるのでダウンロードが楽です。
  • あとは、おきまりの手順でビルドとインストールを行います。
  • ここまでで、Qt5 のビルドをする環境が整いました。次回は、この環境を使って Qt5 をビルドする記事を書く予定です。

    [参考サイト]

    [関連記事]

    1. MinGW (64bit) + MSYS 環境の構築 (1) | DeVlog – 銀の翼で翔べ –
    2. MinGW64 環境の Git で文字化けを解消する | DeVlog – 銀の翼で翔べ –

    MinGW (64bit) + MSYS 環境の構築 (1)


    はじめに

    64ビットバイナリを生成できる MinGW (SEH, posix-threads) 環境を構築しましたので、2回にわたって紹介してみます。この環境で Qt5 をビルドできる事を確認しました。また、以前、MinGW 環境から msysgit を利用する方法についてまとめましたが、今回は Git の入った MSYS を導入しましたので、msysgit は不要になります。

    ※ 2014/02/02 追加: 本記事の設定だけでは、Git コマンドの一部が文字化けします。合わせて MinGW64 環境の Git で文字化けを解消する | DeVlog – 銀の翼で翔べ – の設定もすることをおすすめします。

    MinGW バイナリの選定

    64ビットの MinGW は、本家とは独立した MinGW-w64 で提供されています。また、独自にアレンジした TDM-GCC も良く利用されているようです。MinGW-w64 プロジェクトは、さらに個別のバイナリを提供するプロジェクトで構成されていて、Downloads を開くと、Automated Builds, Cygwin, Fedora Project, Mingw-builds Project, Win-builds Project といったプロジェクトがある事がわかります。

    今回は、これらの中から以下のポイントで選定しました。

    • C++ の例外処理方法として SEH が利用できる。
    • GCC 4.8.2 以上が利用できる。

    MinGW では、C++ 例外を扱う方法として SJLJ という方式が使われてきました。一方、 Windows の標準的なビルド環境である Visual C++ では SEH が採用されていて、この差異が MinGW で生成されたバイナリを遅くする要因になっていました。(Windows で Qt5 が遅いわけ | Qt のあれこれ (仮)) MinGW-w64 では、SJLJ に加えて DWARF(32ビット), SEH(64ビット)を利用できるようになっています。今回は SEH を使ったバイナリを採用することにします。

    また、当初 TDM-GCC を使っていましたが、Qt のビルドで再定義エラーがでてしまい色々と調べたところ、 gcc 4.8.1 のヘッダに問題がある事がわかりました。そこで、gcc 4.8.2 以上とすることにしました。

    これらの事から、Mingw-builds Project のバイナリを使うことにしました。

    Mingw-builds のインストール

    1. GCC for both x64 & x86 Windows! – MinGW-w64Downloads ページにある Mingw-builds Project から Host/Winodws 64 の Download > Sourceforge.net のリンクページに移動します。(※注:installer のリンクでインストーラをダウンロードすると、gcc 4.8.1 しか選べません。)

    2. 4.8.2 > threads-posix > seh とたどり、x86_64-4.8.2-release-posix-seh-rt_v3-rev1.7z をダウンロードします。(スレッドは、posix としました。その方が多くのプロジェクトをビルドしやすいと思います。)
    3. 上記ファイルを展開し、mingw64 ディレクトリを c: に配置 (c:mingw64) します。(.7z は圧縮形式の一つです。適当なツールで展開してください。)

    MSYS のインストール

    MinGW は、DLL とコンパイラ等の最低限の環境のみ提供しています。実際に各種コードをビルドする際には、さらに多くのツールが必要となる場合が大半です。それらを提供してくれるのが MSYS です。今回導入する MSYS (32ビット) は、autotools、wget、Git、subversion 等多くのツール群が入っているのでとても使い勝手が良いです。(今回の MSYS は 32ビットですが、バイナリを生成するのは MinGW が提供するコンパイラなので、生成物には問題ありません。)
    以下の手順でインストールします。

    1. MinGW-builds – Browse Files at SourceForge.net に移動し、msys+7za+wget+svn+git+mercurial+cvs-rev13.7z をダウンロードします。
    2. 上記ファイルを展開し、msys ディレクトリを MinGW64 のルート (c:mingw64) に配置 (c:mingw64msys) します。
    3. MSYS から MinGW の環境を利用できるようにするためには、/etc/fstab を使って MinGW のディレクトリを MSYS の /mingw にマウントします。 (/etc/profile では、あらかじめ /mingw/bin をパスに加える設定になっています。) 具体的には、
      c:mingw64msysetcfstab.sample を fstab という名前でコピーし、以下の記述を追加します。(サンプルには /perl のマウントが記述されていますが、これは一旦コメントアウトしておきます。)
      Windows 上のディレクトリをセパレータ ‘/’ で記述し、スペースを空けて MSYS 上のディレクトリを記述します。(MSYS 上では、c:mingw64msys が / になっています。)

    以上で MSYS がインストールできました。ここで、エクスプローラから c:mingw64msysmsys.bat を起動してみてください。コマンドプロンプトが開きますので、ls /mingw で c:mingw64 の内容が表示されるかどうか確認してください。表示されない場合は、fstab の記述に何か間違いがあるものと思われます。

    また、ホームディレクトリ (~) は、c:mingw64msyshomeuser-name (user-name は Windows 上のアカウント名) となっていて、最初に msys.bat を実行したときに自動的に作成されます。このディレクトリは MSYS 上では /home/user-name としてマッピングされています。

    ※注) msys.bat にパラメータを指定すると、コマンドプロンプトでなく mintty 等のターミナルエミュレータを起動できます。ただし、mintty 上では、Git の動作に支障が出る場合があります。(例えば、git clone がフリーズします。) Windows ではターミナルエミュレータを起動しなくても問題はないので、パラメータ無しで起動する事をお勧めします。(パラメータを指定しないと、古いターミナルエミュレータである rxvt が起動するという情報も見受けられましたが、msys.bat を見る限りそのような事はありません。)

    MSYS のショートカットを作る

    毎回ディレクトリをたどって msys.bat を起動するのは大変なので、スタートメニューに登録しておきます。手順は以下の通りです。

    1. エクスプローラで msys.bat を右クリックし、「ショートカットの作成」でショートカットを作成する。
    2. ショートカット名を、わかりやすい名前に変更する。
    3. 上記ショートカットを左下のスタートメニューにドラッグしてドロップする。

    以上でスタートメニューから MSYS 環境を開くことができるようになります。

    MSYS の調整

    ここで、もう少し MSYS を調整しておきます。

    1. msys.bat は Windows に設定されているパスを追加しますが、これが干渉する場合もあるので最小限のパス構成にします。msys.bat の先頭に以下を追加しておきます。 これで、Windows 上のパスは、Windows ディレクトリの Sytem32 のみが取り込まれます。MSYS から必要なツール類は、別途 .bashrc で追加します。msys.bat で起動したコマンドプロンプトから、echo $PATH とすると、以下のようになっているはずです。
      .:/usr/local/bin:/mingw/bin:/bin:/c/Windows/System32
    2. MSYS のホームディレクトリ (c:mingw64msyshomeuser-name) に、以下の内容の .profile というファイルを置き、Bash が使えるようにします。
    3. c:mingw64msyshomeuser-name.bashrc を作成し、以下を記述します。

      1行目: TERM 環境変数を設定します。これが無いと以下のような警告が出る場合があります。(less コマンド等)

      WARNING: terminal is not fully functional

      2-3行目: ls コマンドの結果に色をつけます。これは好みの問題ですが、ディレクトリとファイルの区別等が色分けされていると見やすいと思いますので設定しています。

      4-5行目: コマンドプロンプトを修正しています。カレントディレクトリや、Git のブランチ名を表示するようにしています。好みに応じて修正してください。試しに ls -l /mingw を実行すると以下のように表示されます。

    4. ホームディレクトリに .ssh ディレクトリを作成し、秘密鍵 (id_rsa) を配置します。これまで使っていたものをコピーしてくれば良いと思います。(putty を使っていた場合は、.ppk を変換する必要があるでしょう。) まだ鍵を生成していない場合は、msys.bat のプロンプト上で ssh-keygen を実行して作成します。
    5. Git の設定は、今まで使っていたのものがあれば .gitconfig を MSYS のホームディレクトリにコピーすれば良いです。ただし、MSYS 上の作業では、autocrlf は切っておく方が無難です。最後にコマンドプロンプトで以下を実行しておきます。

    以上で、MinGW64 + MSYS の環境がほぼ整いました。msys.bat で開くコマンドプロンプトから、Linux のツール群を利用できます。次回は、他のツールも導入してみます。

    [参考サイト]

    [関連記事]

    1. MinGW (64bit) + MSYS 環境の構築 (2) | DeVlog – 銀の翼で翔べ –
    2. MinGW64 環境の Git で文字化けを解消する | DeVlog – 銀の翼で翔べ –