SubversionをmacOSでビルドする

ひとまず、Subversionをビルドできたので備忘までに記しておく。

そもそも、SubversionをビルドすることになったのはBlenderのソースコードを久しぶりに見ようとして、コードを最新にするための make update を実行したことだ。コマンドの実行結果にSubversionがないと出た。インストールしようとSubversionのページをみたがSubversionプロジェクトが直接バイナリパッケージを配布している様な記述は見当たらなかった。

1
2
3
4
5
6
7
$ make update
python3 ./build_files/utils/make_update.py

Checking out Precompiled Libraries

svn not found, can't checkout libraries
make: *** [update] Error 1

手元のMacはApple siliconだが、この端末は以前に壊れたので工場に修理に出した。そこで真っ新な状態になって戻ってきたのでSubversionがない。Blenderのビルドは端末が戻って来てからは一度もしていない。

そこで念の為に公式ページを見てBlenderの開発環境セットアップ手順を確認した。以前と変わらずSubversion, CMakeが必要と記載があった。macOSでソフトウェア開発をする場合はHomebrewを使う人がほとんどだろうから、それを前提にしたのか、そのようなセットアップ手順が載っていた。

私は趣味でいじっているのでHomebrewやMacPortsを使わないでやりたい。そこでソースコードから自力でビルドだ。まずはSubversionと依存関係にあるライブラリを調べた。その結果、以下の通りだった。

Subversionと依存関係にあるライブラリ

Apache Portable Runtime

Apache Portable RuntimeはAPRと略されるのだが、コードは以下のものを使う。ただ、このままビルドするとエラーが起きる。

そこで修正パッチがHomebrewのformula-patchesにあるのでそれを適用する。(Homebrewのパッチを使うならHomebrewでインストールすればいいのだが、まぁちょっとしたゲームの制限プレイということでこのまま進める)

1
2
3
4
5
6
7
8
tar xzvf apr-1.7.0.tar.gz
cd apr-1.7.0
patch -p0 -i ../r1871981-macos11.patch # apr-1.7.0.tar.gz と同じディレクトリにパッチがあることを想定
patch -p1 -i ../r1882980+1882981-configure.patch # 同上
autoconf
./configure --prefix=$HOME/dev
make
make install

インストールしたらコマンド apr-1-config ヘルプを表示して実行権限があることを確認する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
~/dev/bin/apr-1-config --help
Usage: apr-1-config [OPTION]

Known values for OPTION are:
  --prefix[=DIR]    change prefix to DIR
  --bindir          print location where binaries are installed
  --includedir      print location where headers are installed
  --cc              print C compiler name
  --cpp             print C preprocessor name and any required options
  --cflags          print C compiler flags
  --cppflags        print C preprocessor flags
  --includes        print include information
  --ldflags         print linker flags
  --libs            print additional libraries to link against
  --srcdir          print APR source directory
  --installbuilddir print APR build helper directory
  --link-ld         print link switch(es) for linking to APR
  --link-libtool    print the libtool inputs for linking to APR
  --shlib-path-var  print the name of the shared library path env var
  --apr-la-file     print the path to the .la file, if available
  --apr-so-ext      print the extensions of shared objects on this platform
  --apr-lib-target  print the libtool target information
  --apr-libtool     print the path to APR's libtool
  --version         print the APR's version as a dotted triple
  --help            print this help

When linking with libtool, an application should do something like:
  APR_LIBS="`apr-1-config --link-libtool --libs`"
or when linking directly:
  APR_LIBS="`apr-1-config --link-ld --libs`"

An application should use the results of --cflags, --cppflags, --includes,
and --ldflags in their build process.

ライブラリ libapr-1.dylib もインストールされている。configureする際にprefixを$HOME/devに指定したので ~dev/lib にあることも確認する。

Apache Portable Runtime Utility

Apache Portable Runtime Utilityをインストールする。
https://archive.apache.org/dist/apr/apr-util-1.6.1.tar.gz

1
2
3
4
5
tar xzvf apr-util-1.6.1.tar.gz
cd ../apr-util-1.6.1/
./configure --prefix=$HOME/dev --with-apr=$HOME/dev/bin/apr-1-config
make
make install

make install 後に以下のファイルの存在を確認する。

  • ~/dev/bin/apu-1-config

    • apu-1-config --help を実行できることも確認する。
  • ~/dev/lib/libaprutil-1.dylib

OpenSSL

macOS 12.5で標準搭載のOpenSSLは以下のものだ。

1
2
$ openssl version
LibreSSL 2.8.3

Apache SerfがOpenSSL 1.1系を必要とするのでビルドする。
https://www.openssl.org から openssl-1.1.1q.tar.gz をダウンロードする。

そのままビルドすると test/v3ext.c#include <string.h> がされていないためにエラーが発生する。

test/v3ext.c を開いて #include <string.h> を追記する。その修正をしたら以下のコマンドでビルドしてインストールする。

1
2
3
4
./Configure --prefix=~/dev darwin64-arm64-cc enable-ec_nistp_64_gcc_128 no-ssl3 no-ssl3-method no-zlib
make
make install
make test

HTTPS通信をする際にOpenSSLを使うので、どこかにルート証明書が必要になる。今回は既存の /etc/ssl/cert.pem を使う。 /etc/ssl/cert.pem をQuick Lookすると通称を Autoridad de Certificacion Firmaprofesional CIF A62634068 と確認できる。これをキーチェーンアクセスで確認するとルート認証局であり、また有効な状態であるとわかる。

./images/figure_02.png

そこで /etc/ssl/cert.pem のシンボリックリンクを OpenSSLdir (本記事では /dev/etc/openssl/cert.pem ) に作成する。

1
ln /etc/ssl/cert.pem ~/dev/etc/openssl/cert.pem

Apache Serf

Apache Serf
https://www.apache.org/dist/serf/serf-1.3.9.tar.bz2

Apache Serfをビルドする前に以下の下準備が必要だ。

  • Python3 (Xcode同梱のパッケージ)のシンボリックリンクを貼る
  • scons-local Packageをインストールする。
  • Apache Serfのコードを修正する

まず、Python3だがこれはXcodeに同梱されているパッケージを使う。シンボリックリンクを貼る。もちろんPython3の環境を別に用意してあるのならばこれに限らない。

1
ln -s /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/bin/python3 ~/dev/bin/python

次に scons-local Package をダウンロードする。それを ~/dev/bin に展開する。
http://prdownloads.sourceforge.net/scons/scons-local-4.3.0.tar.gz

1
ln -s ~/dev/bin/scons-local-4.3.0/scons.py ~/dev/bin/scons

次にApache Serfのコード SConstruct を修正する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 修正前 L167
match = re.search('SERF_MAJOR_VERSION ([0-9]+).*'
                  'SERF_MINOR_VERSION ([0-9]+).*'
                  'SERF_PATCH_VERSION ([0-9]+)',
                  env.File('serf.h').get_contents(),
                  re.DOTALL)

# 修正後 L167
match = re.search(b'SERF_MAJOR_VERSION ([0-9]+).*'
                  b'SERF_MINOR_VERSION ([0-9]+).*'
                  b'SERF_PATCH_VERSION ([0-9]+)',
                  env.File('serf.h').get_contents(),
                  re.DOTALL)

# 修正前 L187
unknown = opts.UnknownVariables()
if unknown:
  print 'Warning: Used unknown variables:', ', '.join(unknown.keys()) 

# 修正後 L187
unknown = opts.UnknownVariables()
if unknown:
  print('Warning: Used unknown variables:', ', '.join(unknown.keys())) # printの後を括弧でくくる

下準備ができたらApache Surfのビルドに移る。

1
2
3
cd ../serf-1.3.9/
scons APR=~/dev/bin/apr-1-config APU=~/dev/bin/apu-1-config PREFIX=~/dev OPENSSL=~/dev
scons install

~/dev/lib/libserf-1.dylib が存在することを確認する。

Subversion

さて、ここまできてようやくSubversionのインストールに移れる。

Subversion
https://archive.apache.org/dist/subversion/subversion-1.14.2.tar.bz2

ビルド手順は以下の通り。

1
2
3
4
5
6
./Configure --prefix=~/dev \
			--openssldir=~/dev/etc/openssl \
			darwin64-arm64-cc enable-ec_nistp_64_gcc_128 \
			no-ssl3 no-ssl3-method no-zlib
make
make install

以上でSubversionのインストールが完了する。あとはmake updateを実行してBlenderのソースコードを最新にすれば終了だ。