サイトマップ 連絡先 トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2018-07-07 06:49:13 +0900 (2018/07/07 (土)) $
$Revision: 1347 $

Subversion のコンパイル (for Windows) 国際化対応 (VC6)

概要

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

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

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

準備

必要なファイルの入手

下準備

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.2.3
│   ├─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 C++ 6 の設定

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 dsp 
	--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_msvc.dsw
以下のディレクトリにプロジェクトファイルができる
build\win32\msvc-dsp

Subversionのコンパイル

subversion_msvc.dsw を VC6 で開いて __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--------------------
Running msgfmt on de.po...
'python' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
(null): error while opening "de.spo" for reading: No such file or directory
D:\svnwork\subversion\trunk\subversion\po\de.spo が見つかりませんでした。
Running msgfmt on es.po...
'python' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
(null): error while opening "es.spo" for reading: No such file or directory
D:\svnwork\subversion\trunk\subversion\po\es.spo が見つかりませんでした。

                      ... 中略 ...

Running msgfmt on zh_TW.po...
'python' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
(null): error while opening "zh_TW.spo" for reading: No such file or directory
D:\svnwork\subversion\trunk\subversion\po\zh_TW.spo が見つかりませんでした。

svn_locale.exe - エラー 12、警告 0
python.exe へのパスが通っていません。Visual C++ 6 の設定 を参照してください。

実行時の問題

英語で表示される場合

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

文字化けする場合

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