TortoiseSVN

エクスプローラーと統合可能なSVNクライアントのTortoiseSVNのビルド方法。

目的
TortoiseSVNをソースからビルドする。
環境
Windows XP Pro SP1、VisualStudio.NET 2003
前提条件
id:yowitirow:20040303の手順でsubversionのビルドを実行し、suv.exeクライアントが存在していること。
  • Windows Template Libraryのインストール

Windows Template Libraryがいるのでダウンロードしてインストールする。
ダウンロードサイトWTL70.exe
WTL70.exeは実行型ZIPファイルなので適当なところに解凍する。
解凍先フォルダのincludeフォルダをVC.NET2003のインクルードパスに追加しておく。

  • ビルド用フォルダ
    • フォルダ作成

ビルド用フォルダを用意する。仮にはフォルダ名をSUVとする。
SUVにcommonフォルダを作る。

    • opensslソースのコピー

commonにopenssl\inc32\opensslフォルダを作る。
subversionビルド時に使用したopensslソースフォルダ内のinc32\openssl\フォルダの中身をコピーする。

    • zlibソースのコピー

commonにzlibフォルダを作る。
subversionビルド時に使用したzlib113-win32フォルダの中身をコピーする。

commonフォルダにて

svn checkout http://svn.collab.net/repos/svn/trunk subversion

を実行しsubversionのソースを取得。

svn checkout http://svn.collab.net/repos/tortoisesvn/trunk tortoisesvn

を実行しTortoiseSVNのソースを取得。

以前の方法と同じだが作業内容を列挙しておく。詳細はid:yowitirow:20040303を参照。
subversionソースフォルダにneonフォルダを作り、ダウンロード済みneonフォルダの中身をコピー。
subversionソースフォルダにdb4-win32\includeとdb4-win32\libフォルダを作る。
BerkeleyDBソースフォルダのbuild_win32フォルダのdb.hをdb4-win32\includeにコピー。
BerkeleyDBソースフォルダのbuild_win32\Releaseフォルダのlibdb42.libをdb4-win32\libにコピー。
Apacheソースフォルダ\srclibのaprapr-util、apr-iconvをsubversionソースフォルダにコピー。
subversionソースフォルダで以下のスクリプトを実行。

python gen-make.py -t vcproj --with-zlib=C:\download\zlib\zlib113-win32 --with-openssl=C:\download\OpenSSL\openssl-0.9.7c --with-httpd=C:\download\Apache\httpd-2.0.48

作成されたsubversion_vcnet.slnをVS.NET2003で開く。
libaprutilのビルドで../db4-win32/lib/libdb42.libへのパスがない。
Projectのプロパティでリンカ->入力ファイルの追加の依存ファイルに../db4-win32/lib/libdb42.libを追加。
Releseで__ALL__をビルド。

tortoisesvn\src\TortoiseSVN.slnをVS.NET2003で開く。

      • 依存ライブラリの参照先を変更する

そのまま実行すると"__imp__apr_pool_create_ex@16" は未解決ですなどのエラーが出る。
subversionaprを使っているところがdllでビルドなのが原因なのだと思うが、TortoiseSVNの修正だけで済ませることにする。
プロジェクトSubWCRevのプロパティでリンカ->入力の追加の依存ファイルの参照先を変更する。
aprapr-util、apr-iconの各フォルダのlibRを参照しているものをReleaseになおす。
TortoiseProc、TortoiseMerger、TortoiseShellのプロジェクトでも同様。

../../../Subversion\apr\libR\apr.lib
../../../Subversion\apr-util\libR\aprutil.lib
../../../Subversion\apr-iconv\libR\apriconv.lib

以下に修正。

../../../Subversion\apr\Release\libapr.lib
../../../Subversion\apr-util\Release\libaprutil.lib
../../../Subversion\apr-iconv\Release\libapriconv.lib
      • SubWCRevのビルド。

SubWCRevは他のプロジェクトの実行に使用されるので、先にビルドされる。
このとき以下の各dllにパスがとおっていないと実行できないのでパスを通しておくか、SubWCRevフォルダにコピーするようにしておく。

..\..\..\Subversion\apr-util\Release\libaprutil.dll
..\..\..\Subversion\apr-iconv\Release\libapriconv.dll
..\..\..\Subversion\apr\Release\libapr.dll

libdb42.dllにもパスがいるが、すでにパスが存在していれば追加する必要はない。
ソリューションのビルドを実行すると、インストーラー作成プロジェクト以外のビルドが実行される。

      • DOCの作成。

ドキュメント類を作成する。DOCフォルダ以下にソースが存在しているので、作成用ツールパックをダウンロードする。
tortoisesvn dwonloadにてtools.zipをダウンロード。
中身をTortoisesvnソースフォルダ\doc\toolsフォルダに解凍する。
Tortoisesvnソースフォルダ\doc\makedocを実行。ヘルプファイルが作成される。

      • 言語コンバート用ファイルのコピー

subversionソースフォルダ\apr-iconv\Release\iconvフォルダの中身をTortoisesvnソースフォルダ\bin\Release\iconvフォルダにコピーする

TortoiseSVNSetupプロジェクトをビルドする。
TortoiseSVNSetup.msiが完成する。

    • インストール

完成したTortoiseSVNSetup.msiを実行しインストールする。

以上でビルドできるが、実はtortoisesvn dwonloadにビルド済みのファイルが存在しているのでそれをインストールすればいいような気もする。
なんかおかしなところがありましたら教えてくれると空に舞い上がるほど喜びます。