連絡先 トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2017-05-06 22:21:48 +0900 (2017/05/06 (土)) $
$Revision: 1117 $

国際化対応を入れてコンパイルする方法 (VS2005)

この情報は古いです

概要

国際化対応を有効にして VS2005 で Subversion を Windows でコンパイルする方法を簡単に説明します。

以下の手順を既に行っていることを前提としています。

  1. 最小の構成でコンパイルする (VS2005)
  2. SSLのサポート付きでコンパイルする (VS2005)

準備

必要なファイルの入手

下準備

gettext の展開

gettext-0.14.4-bin.zip と gettext-0.14.4-dep.zip を解凍して 適当なディレクトリに置く。(以下の説明では C:\gettext-0.14.4-bin ) 以下のような感じでファイルを置くとして以後の説明をする。
│
├─common
│   │
│   ├─db4-win32
│   ├─svn-win32-libintl
│   ├─openssl-0.9.8d
│   ├─httpd-2.0.59
│   ├─neon-0.26.2
│   └─zlib-1.2.3
│
└─trunk (subversion のソースコード)
      │
      ├─INSTALL
      │  ... (中略) ...
      └─gen-make.py
svn-win32-libintl\
│
├─bin
│   │
│   ├─intl3_svn.dll
│   └─intl3_svn.pdb
│
├─inc
│   │
│   └─libintl.h
│
├─lib
│   │
│   └─intl3_svn.lib
│
├─diff-0.14.1.txt ← patch を当てたバージョンを使用しているらしい。これがその修正内容。
└─README.txt
C:\
└─ gettext-0.14.4-bin
     │
     ├─bin
     │   │
     │   │ ... (中略) ...
     │   └─msgfmt.exe
    ... (以下略) ...

Visual Studio 2005 の設定

msgfmt.exe と python.exe のディレクトリパスを設定する
  1. Visual C++ のメニューから [ツール] - [オプション]を選ぶ
  2. [ディレクトリ] タブに移動する。
  3. [表示するディレクトリ] で[実行可能ファイル]を選ぶ
  4. C:\Python25 (python.exe のあるディレクトリ)を追加する
  5. C:\gettext-0.14.4-bin\bin (msgfmt.exe のあるディレクトリ)を追加する

プロジェクトファイルの作成

以下のコマンドを subversion のソースコードのルートで実行する (見やすくするため改行していますが、実際には1行で入力します。)
c:\...\trunk> python gen-make.py -t vcproj --vsnet-version=2005
	--disable-shared
	--with-openssl=..\common\openssl-0.9.8d
	--with-libintl=..\common\svn-win32-libintl
	--with-neon=..\common\neon-0.26.2 
	--with-zlib=..\common\zlib-1.2.3 
	--with-berkeley-db=..\common\db4-win32
	--with-httpd=..\common\httpd-2.2.3
ルートディレクトリにソリューションファイルができる
subversion_vcnet.sln
以下のディレクトリにプロジェクトファイルができる
build\win32\vcnet-vcproj

Subversionのコンパイル

subversion_vcnet.sln を VS2005 で開いて __ALL__ または __ALL__TESTS__ の 構成を選択してリビルドする。 SSL のときと同様に、一度コンパイルしたことがある場合、リビルドします。

注意

locale の構成をビルドするときに *.mo ファイルを作成される。 python の実行ファイルへのパスが通っていないと、『コマンドが見つからない』と いうエラーが出て、ビルドに失敗する。

Subversion のインストール

以下のような構成でファイルをコピーする。 国際化対応の Subversion をインストールするにあたり注意点があります。 APR_ICONV_PATH という環境変数を iconv の各モジュール のあるディレクトリのパスを指すようにする必要があります。 指定するディレクトリの iconv と apr-iconv のバージョンが 異なる場合もうまくいかないようです。

Subversion 1.5 では apr-iconv を使わなくなったので、 APR_ICONV_PATH の環境変数をセットする必要はありません。

インストール手順

intl3_svn.dll

intl3_svn.dll を svn.exe 等の実行ファイルと同じディレクトリに置く

mo ファイルの名前変更とディレクトリの構成

svn.exe のディレクトリからの相対バスで ../share/locale に以下の ようなディレクトリ構造で mo ファイルを置く。 なお、コンパイルしたディレクトリ( Debug\mo または Release\mo )には ja.mo や ko.mo 等の名前になっているので対応したディレクトリに コピーした後、subversion.mo に名前変更すること。
share\
 │
 └─locale
      │
      ├─de
      │   │
      │   └─LC_MESSAGES
      │        │
      │        └─subversion.mo
      │
      │ ... (中略) ...
      │
      │
      ├─ja
      │   │
      │   └─LC_MESSAGES
      │        │
      │        └─subversion.mo
      │
      │ ... (中略) ...
      │
      └─zh_TW
           │
           └─LC_MESSAGES
                │
                └─subversion.mo
以下のようなスクリプトを作成して *.mo ファイルがあるディレクトリで 実行すると上記のようなディレクトリ構造を作成できる。
#!/usr/bin/perl

use File::Copy;
use File::Path;

@mo_files = <*.mo>;
foreach $mo_file ( @mo_files ){
	$lang = $mo_file;
	$lang =~ s!\.mo$!!;
	$dir      = "../share/locale/$lang/LC_MESSAGES";
	$mov_file = "$dir/subversion.mo";
	
	mkpath $dir;
	copy $mo_file, $mov_file;
}

環境変数 APR_ICONV_PATH

apr-iconv のコンパイルしたディレクトリ(cp932.so や utf-8.so のあるディレクトリ) からすべての *.so ファイルをコピーする。 コピー先のディレクトリパスを環境変数 APR_ICONV_PATH にセットする。 !!! 重要 !!!

ディレクトリ構成の例(gen-make.py を実行するときに --disable-shared を指定した場合)

subversion
 │
 ├─bin
 │   │
 │   ├─intl3_svn.dll
 │   ├─libapr-1.dll ( APR 0.9.x の場合 libapr.dll)
 │   ├─libapriconv-1.dll (同様に libapriconv.dll )
 │   ├─libaprutil-1.dll  (同様に libaprutil.dll )
 │   ├─libdb44.dll
 │   ├─libeay32.dll
 │   ├─ssleay32.dll
 │   ├─svn.exe
 │   ├─svnadmin.exe
 │   ├─svndumpfilter.exe
 │   ├─svnlook.exe
 │   ├─svnserve.exe
 │   ├─svnsync.exe
 │   └─svnversion.exe
 │
 ├─iconv ← このディレクトリの絶対パスを APR_ICONV_PATH に設定する
 │   │
 │   │   ... (中略)
 │   ├─cp932.so
 │   │   ... (中略)
 │   ├─utf-16.so
 │   └─utf-8.so
 │
 └─share
      │
      └─locale ← svn.exe 等からの相対パスで ../share/locale になるようにする 
           │
           ├─de
           │   │
           │   └─LC_MESSAGES
           │        │
           │        └─subversion.mo
           │
           │ ... (中略) ...
           │
           ├─ja
           │   │
           │   └─LC_MESSAGES
           │        │
           │        └─subversion.mo ← ja.mo を名前変更したもの 
           │
           │
           │ ... (中略) ...
           │
           └─zh_TW
                │
                └─LC_MESSAGES
                     │
                     └─subversion.mo

動作確認

以下のように出力されれば OK
c:\...\trunk\Release\subversion\svn> svn --version
svn, バージョン 1.5.0 (dev build)
   コンパイル日時: Nov 18 2007, 16:21:05

Copyright (C) 2000-2007 CollabNet.
Subversion はオープンソースソフトウェアです。
http://subversion.tigris.org/ を参照してください。
この製品には、CollabNet (http://www.Collab.Net/) によって開発されたソフトウェア
が含まれています。

以下のリポジトリアクセス (RA) モジュールが利用できます:

* ra_neon : Neon を利用して WebDAV (DeltaV) プロトコルでリポジトリにアクセスするモジュール。
  - 'http' スキームを操作します
  - 'https' スキームを操作します
* ra_svn : svn ネットワークプロトコルを使ってリポジトリにアクセスするモジュール。
  - 'svn' スキームを操作します
* ra_local : ローカルディスク上のリポジトリにアクセスするモジュール。
  - 'file' スキームを操作します

Trouble Shooting

コンパイル時の問題

locale のプロジェクトのコンパイルに失敗する

以下のようなエラーメッセージが出て locale のコンパイルに失敗する
--------------------構成: locale - Win32 Release--------------------
1>------ すべてのリビルド開始: プロジェクト: locale, 構成: Release Win32 ------
1>メイクファイル プロジェクト動作を実行しています。
1>サブディレクトリまたはファイル ..\..\Release\mo は既に存在します。
1>Running msgfmt on de.po...

                   ... 中略 ...

1>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
1>Running msgfmt on ja.po...
1>'msgfmt.exe' は、内部コマンドまたは外部コマンド、
1>操作可能なプログラムまたはバッチ ファイルとして認識されていません。

                   ... 中略 ...

1>Running msgfmt on zh_TW.po...
1>'msgfmt.exe' は、内部コマンドまたは外部コマンド、
1>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
1>ビルドログは "....\trunk\build\win32\Release\BuildLog.htm" に保存されました。
1>locale - エラー 0、警告 0
========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ==========
python.exe へのパスが通っていません。Visual Studio 2005 の設定 を参照してください。

実行時の問題

英語で表示される場合

subversion.mo が正しい場所にあるかどうか確認してください。

文字化けする場合

環境変数 APR_ICONV_PATH の設定が正しいディレクトリを指しているか確認してください。