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

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

概要

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

準備

必要なファイルの入手

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

c:\...\trunk> gen-make.py -t vcproj ^
--vsnet-version=2008                                ^
--with-httpd=..\common\httpd-2.2.25                 ^
--with-sqlite=..\common\sqlite-amalgamation-3071700 ^
--with-openssl=..\common\openssl-1.0.1e             ^
--with-swig=C:\swigwin-2.0.10                       ^
--with-zlib=..\common\zlib-1.2.8                    ^
--disable-shared                                    ^
--with-serf=..\common\serf-1.2.1
  • zlibのソースコード (zlib-1.x.x.tar.gz )
  • apache 2.0.x または 2.2.x のソースコード
  • cvtdsp.pl (Apache 2.2.x を使う場合)
  • awk.exe (awk95.exe をダウンロードして awk.exe に名前変更する)
    apache をインストールする場合(InstallBinの構成をコンパイルする場合)に必要。
    awk.exe を保存したディレクトリの場所を、Visual C++ に設定する。
    1. Visual C++ のメニューから [ツール] - [オプション]を選ぶ
    2. [ディレクトリ] タブに移動する。
    3. [表示するディレクトリ] で[実行可能ファイル]を選ぶ
    4. [ディレクトリ] にawk.exe を保存したディレクトリパスを追加する
    svn.exe 等をコンパイルするだけで apache をセットアップしない場合には不要
  • Subversion のソースコード
    大体以下のような方法で入手できます。(勿論最新のソースコードでなくてもいいですが、 どうせなら最新を使いたい)
  • 下準備

    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 2008 で開く。 変換するか確認されるので、『すべてはい』を選ぶ。
    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.2.25
     │   └─zlib-1.2.3
     │
     └─trunk (subversion のソースコード)
          │
          ├─INSTALL
          │  ... (中略) ...
          └─gen-make.py
    

    apache のコンパイル

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

    1. cvtdsp.pl を Apache のソースコードのトップディレクトリにコピーする。
    2. Apache のソースコードのトップディレクトリに移動する。
    3. 以下のコマンドを実行する。(perl cvtdsp.pl -2008 は動きません)
      D:\svnwork\VS2008\common\httpd-2.2.25>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 2008 で開く。 変換するか確認されるので、『すべてはい』を選ぶ。
    2. mod_dav_fs のプロジェクトを選択する。
    3. Debug/Release の各構成をコンパイルする。

    Subversion のコンパイル

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

    以下のコマンドを subversion のソースコードのルートで実行する。 条件を少し変えて何度も実行することになるので、 バッチファイルを作成して実行すると便利です。

    複数行にわけて書けるように行末にハットを使っています。 参考

    c:\...\trunk> python gen-make.py -t vcproj --vsnet-version=2008        ^
        --with-berkeley-db=..\common\db4-win32                                 ^
        --with-zlib=..\common\zlib-1.2.3                                       ^
        --with-httpd=..\common\httpd-2.2.25
    
    ルートディレクトリにソリューションファイルができる
    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=2008     ^
        --with-berkeley-db=..\common\db4-win32             ^
        --with-zlib=..\common\zlib-1.2.3                   ^
        --with-httpd=..\common\httpd-2.2.25                ^
        --disable-shared
    

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

    Subversionのコンパイル

    subversion_vcnet.sln を VS2008 で開いて __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_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

    コンパイル時

    実行時

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

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

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

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

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