トップに戻る 最初に戻る 前に戻る 次へ進む
$Date: 2014-08-14 17:26:53 +0900 (2014/08/14 (木)) $
$Revision: 973 $

Subversion のコンパイル (for Windows) 基本編 (VS2005)

概要

Subversion を Visual Studio 2005 Pro(以下 VS2005)で コンパイルする方法を簡単に説明します。 わかりやすくするため、手順はまず最小の構成でコンパイルし、 徐々にオプションの機能を追加していく形で説明します。

VC6 の場合との違い

準備

必要なファイルの入手

下準備

berkley DBのコンパイル

  1. berkley DB のソースコードを展開する。 以下のような構成で展開される。(berkley DB 4.5.20 の場合)
    db-4.4.20
     │
     ├─build_win32
     │   │
     │   ├─Berkeley_DB.dsw
     │   ├─build_all.dsp
     │   │  ... (中略) ...
     │   ├─db.h
     │   └─db_cxx.h
     │
    ... 以下略 ...
    
  2. build_win32\Berkeley_DB.dsw を Visual Studio 2005 で開く。 変換するか確認されるので、『すべてはい』を選ぶ。
  3. build_all を Debug/Release の構成でコンパイルする。
  4. 以下のようなディレクトリ構成になるようにコピーする。
    db4-win32\
     │
     ├─bin
     │   │
     │   ├─db_archive.exe
     │   ├─db_checkpoint.exe
     │   │  ... (中略) ...
     │   ├─excxx_txnguide_inmem.exe
     │   ├─libdb44d.dll  ← build_win32\Debug からコピーする
     │   └─libdb44.dll   ← build_win32\Release からコピーする
     │
     ├─include
     │   │
     │   ├─db.h          ← build_win32 からコピーする(同じ名前のファイルが複数ある)
     │   └─db_cxx.h      ← build_win32 からコピーする
     │
     └─lib
          │
          ├─libdb44.exp
          ├─libdb44d.exp
          ├─libdb44sd.lib ← build_win32\Debug からコピーする
          ├─libdb44d.lib  ← build_win32\Debug からコピーする
          ├─libdb44.lib   ← build_win32\Release からコピーする
          └─libdb44s.lib  ← build_win32\Release からコピーする
    

必要なファイルの配置

以下のような感じでファイルを置くとして以後の説明をする。
 │
 ├─common
 │   │
 │   ├─db4-win32 ← さきほど作成したディレクトリ
 │   ├─httpd-2.0.59
 │   ├─neon-0.26.2
 │   └─zlib-1.2.3
 │
 └─trunk (subversion のソースコード)
      │
      ├─INSTALL
      │  ... (中略) ...
      └─gen-make.py

apache のコンパイル

neon の Makefile (neon.mak) の編集

neon.mak は VS2005 で使用するには問題があるため "$(MAKE)" を $(MAKE) に編集します。

apache の DSP ファイルの変換 (Apache 2.2.x を使用する場合)

  1. cvtdsp.pl を Apache のソースコードのトップディレクトリにコピーする。
  2. Apache のソースコードのトップディレクトリに移動する。
  3. 以下のコマンドを実行する。
    D:\svnwork\vs2005\common\httpd-2.2.4>perl cvtdsp.pl -2005
    Converted project httpd.dsp to 2005 in .
    Converted project libhttpd.dsp to 2005 in .
    Converted project mod_access_compat.dsp to 2005 in ./modules/aaa
    Converted project mod_authnz_ldap.dsp to 2005 in ./modules/aaa
                    中略
    Converted project rotatelogs.dsp to 2005 in ./support
    Converted project wintty.dsp to 2005 in ./support/win32
    
この手順を行わなかった場合 httpd.rc のコンパイルエラーになります

apache のコンパイル

  1. Apache.dswを Visual Studio 2005 で開く。 変換するか確認されるので、『すべてはい』を選ぶ。
  2. mod_dav_fs のプロジェクトを選択する。
  3. Debug/Release の各構成をコンパイルする。

Subversion のコンパイル

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

以下のコマンドを subversion のソースコードのルートで実行する。 条件を少し変えて何度も実行することになるので、 バッチファイルを作成して実行すると便利です。 (見やすくするため改行していますが、実際には1行で入力します。)
c:\...\trunk> python gen-make.py -t vcproj --vsnet-version=2005
	--with-neon=..\common\neon-0.26.2
	--with-berkeley-db=..\common\db4-win32
	--with-zlib=..\common\zlib-1.2.3 
	--with-httpd=..\common\httpd-2.0.59
ルートディレクトリにソリューションファイルができる
subversion_vcnet.sln
以下のディレクトリにプロジェクトファイルができる
build\win32\vcnet-vcproj

subversion library の static ライブラリ化

r22841 以降のバージョンではデフォルトで subversion のライブラリを 独立した DLL としてコンパイルするようになっています。 もし static ライブラリとしてコンパイルするためにはプロジェクトファイル 作成時に、--disable-shared をつけて実行してください。

C:\...\trunk> python gen-make.py -t vcproj --vsnet-version=2005
	--with-neon=..\common\neon-0.26.2
	--with-berkeley-db=..\common\db4-win32
	--with-zlib=..\common\zlib-1.2.3
	--with-httpd=..\common\httpd-2.0.59
	--disable-shared 

このオプションをつけないでプロジェクトファイルを 作成した場合、実行時に Subversion library の各種DLL を実行ファイルと 同じディレクトリにコピーする必要があります。( libsvn_repos-1.dll 等)

Subversionのコンパイル

subversion_vcnet.sln を VS2005 で開いて __ALL__ または __ALL__TESTS__ の 構成を選択してビルドを実行する。

svn コマンドの実行確認

以下のような構成でファイルをコピーする。

gen-make.py を実行するときに --disable-shared を指定した場合

│
├─libapr-1.dll ( APR 0.9.x の場合 libapr.dll)
├─libapriconv-1.dll (同様に libapriconv.dll )
├─libaprutil-1.dll  (同様に libaprutil.dll )
├─libdb44.dll
├─svn.exe
├─svnadmin.exe
├─svndumpfilter.exe
├─svnlook.exe
├─svnserve.exe
├─svnsync.exe
└─svnversion.exe

gen-make.py を実行するときに --disable-shared を指定しなかった場合

│
├─libapr-1.dll ( APR 0.9.x の場合 libapr.dll)
├─libapriconv-1.dll (同様に libapriconv.dll )
├─libaprutil-1.dll  (同様に libaprutil.dll )
├─libdb44.dll
├─libsvn_client-1.dll
├─libsvn_delta-1.dll
├─libsvn_diff-1.dll
├─libsvn_fs-1.dll
├─libsvn_ra-1.dll
├─libsvn_repos-1.dll
├─libsvn_subr-1.dll
├─libsvn_wc-1.dll
├─svn.exe
├─svnadmin.exe
├─svndumpfilter.exe
├─svnlook.exe
├─svnserve.exe
├─svnsync.exe
└─svnversion.exe

動作確認

svn.exe を実行して以下の出力が出ることを確認する。
c:\...\trunk\Release\subversion\svn> svn
Type 'svn help' for usage.
c:\...\trunk\Release\subversion\svn> svn --version
svn, version 1.5.0 (dev build)
   compiled Nov 18 2007, 16:21:05

Copyright (C) 2000-2007 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
  - handles 'http' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme

Trouble Shooting

コンパイル時

neon のコンパイルに失敗する。

以下のようなコンパイルエラーが出てコンパイルに失敗する
4>------ ビルド開始: プロジェクト: neon, 構成: Release Win32 ------
4>メイクファイル プロジェクト動作を実行しています。
4> tempfile.bat
4>'""C:\Program' は、内部コマンドまたは外部コマンド、
4>操作可能なプログラムまたはバッチ ファイルとして認識されていません。
4>NMAKE : fatal error U1077: '.\tempfile.bat' : return code '0x1'
4>Stop.
4>Project : error PRJ0019: ツールはエラー コードを返しました : "メイクファイル プロジェクト動作を実行しています。"
これは neon のMakefile (neon.mak) に不備があるためです。 neon.mak を編集して "$(MAKE)" となっているものを $(MAKE) と いうようにダブルクオートを削除します。 $(MAKE) は既にダブルクオートが含まれます。

PRJ0009 の警告が出る

13>------ ビルド開始: プロジェクト: test_compat, 構成: Release Win32 ------
13>test_compat : warning PRJ0009 : ビルド ログを開いて書き込むことができませんでした。
13>ファイルが別のプロセスによって開かれていないこと、また書込み禁止になっていないことを確認してください。
12>リンクしています...
12>マニフェストを埋め込んでいます...
13>コンパイルしています...
13>compat-test.c
12>ビルドログは "file://d:\svnwork\SVN2005\trunk\Release\subversion\tests\libsvn_subr\BuildLog.htm" に保存されました。
12>test_config - エラー 0、警告 0
19>------ ビルド開始: プロジェクト: test_translate, 構成: Release Win32 ------
19>test_translate : warning PRJ0009 : ビルド ログを開いて書き込むことができませんでした。
19>ファイルが別のプロセスによって開かれていないこと、また書込み禁止になっていないことを確認してください。
18>コンパイルしています...
18>time-test.c
19>コンパイルしています...
19>translate-test.c
18>リンクしています...
18>マニフェストを埋め込んでいます...
19>リンクしています...
18>ビルドログは "file://d:\svnwork\SVN2005\trunk\Release\subversion\tests\libsvn_subr\BuildLog.htm" に保存されました。
18>test_time - エラー 0、警告 0
この警告は、上記のログでもわかるように ビルドログ BuildLog.htm のパスが 複数のプロジェクトで同じになっています。Visual Studio 2005 自体が 開いているためにそれ以降のプロジェクトで書き込みができないためです。

実行時

libapr-1.dll が見つからないといわれる

svn.exe と同じディレクトリに libapr-1.dll 等のファイルを コピーするか DLLがあるディレクトリを 環境変数 PATH に 追加する。

libapr***.dll で落ちる場合のメモ

Subversion のバイナリをインストーラでインストール した場合、システムの PATH 環境変数に Subversion の コマンドのパスが指定されている場合があります。 そうすると、subversion のバイナリはこちらの APR をロードするので、バイナリ互換性のない APR が インストールされていると落ちます。

このため PATH 環境変数から別のバージョンの APR を削除するか、インストーラでインストール してバイナリをコンパイルしたファイルで すべて上書きするようにしてください。