Ardour8.4をMacOSでビルドする

仮想環境で一からインストール(brewに何もインストールしていない状態から)できる手順を調べてまとめました。XcodeコマンドラインツールとHomebrewはインストールされていることが前提です。以降ARMでのパスを前提としていますのでintelの人は適宜読み替えてください。

wafを実行するために、まずPythonをインストールしてwhich pythonが通る状態にします。

```
brew update
brew install python3
ln -s /opt/homebrew/bin/python3 /opt/homebrew/bin/python #仮想環境でやらない場合には非推奨。pyenv使いましょう。
```

この手順はwhich pythonが通っている人は飛ばしてOKです。上記コマンドはシンボリックリンクを作成していますが、brewのディレクトリに勝手にファイルを作るのはよろしくないので、普通はpyenvを使います。

次に、ardourのソースコードをクローンして./waf --helpが実行できるかを確かめてください。

```
git clone https://github.com/Ardour/ardour
cd ardour
./waf --help
```

wafが実行できれば依存解決に進みます。wafの依存チェックはPKG_CONFIG_PATHから行っているので最初に設定する必要があります。

```
export PKG_CONFIG_PATH=/opt/homebrew/lib/pkgconfig #brewのpkgconfigにパスを通す。wafはこれを参照して依存関係を解決する。
```

```
brew install boost
export CPLUS_INCLUDE_PATH=/opt/homebrew/Cellar/boost/1.84.0_1/include
brew install pkg-config
brew install glib
brew install glibmm@2.66
brew install libsndfile
brew install libarchive
export PKG_CONFIG_PATH="/opt/homebrew/opt/libarchive/lib/pkgconfig:$PKG_CONFIG_PATH"
brew install liblo
brew install taglib
brew install vamp-plugin-sdk
brew install rubberband
brew install libusb
brew install jack
brew install fftw
brew install aubio
brew install libpng
brew install pango
brew install libsigc++@2
brew install cairomm@1.14
brew install pangomm@2.46
brew install lv2
brew install cppunit
brew install libwebsockets
brew install lrdf
brew install serd
brew install sordw
brew install sratom
brew install lilv
```

インクルードパスとPKG_CONFIG_PATHはbrew infoのパスに応じて適宜修正してください。また、brew info libarchiveで出てくる環境変数の設定もしてください。(後述)

次にパッチを適用します。wscriptが間違っているせいでこのままでは設定ができてもビルドが通らないためです。(プルリクエストを送りましたが、マージされるかどうかもわからないため書いておきます)

```
From c6300e0a430fe07a6d6efe78acab831245a0b390 Mon Sep 17 00:00:00 2001
From: paseri3739 <tael43@icloud.com>
Date: Tue, 5 Mar 2024 11:10:34 +0900
Subject: [PATCH] fix compiler flags in ytk and ydk on OSX (define
 DISABLE_VISIBILITY)

---
 libs/tk/ydk/wscript | 1 +
 libs/tk/ytk/wscript | 1 +
 2 files changed, 2 insertions(+)

diff --git a/libs/tk/ydk/wscript b/libs/tk/ydk/wscript
index 45e04326b3..e2eb99ee32 100644
--- a/libs/tk/ydk/wscript
+++ b/libs/tk/ydk/wscript
@@ -188,6 +188,7 @@ def build(bld):
         obj.cflags   += ['-xobjective-c']
         obj.uselib   += ' OSX' # -framework Cocoa -framework CoreFoundation -framework ApplicationServices
         obj.includes += ['ydk/quartz', 'ydk/quartz/gdk', 'ydk/gdk/quartz']
+        obj.defines += ['DISABLE_VISIBILITY']
         obj.export_includes += ['ydk/gdk']
         obj.export_includes += ['ydk/quartz']
     elif bld.env['build_target'] == 'mingw':
diff --git a/libs/tk/ytk/wscript b/libs/tk/ytk/wscript
index a921a79863..3701fcf02a 100644
--- a/libs/tk/ytk/wscript
+++ b/libs/tk/ytk/wscript
@@ -300,6 +300,7 @@ def build(bld):
         obj.source   = libytk_sources +  libytk_quartz_sources
         obj.cflags   += ['-xobjective-c']
         obj.uselib   += ' OSX' #  -framework Cocoa -framework CoreFoundation -framework ApplicationServices
+        obj.defines += ['DISABLE_VISIBILITY']
     elif bld.env['build_target'] == 'mingw':
         obj.source   = libytk_sources +  libytk_win32_sources
         obj.defines += [ 'INSIDE_GTK_WIN32', 'DLL_EXPORT', 'PIC' ]
-- 
2.39.3 (Apple Git-145)


```

これを適当にchanges.patchのような名前で保存します。プロジェクトのルートディレクトリにいることを確認してから以下のようにコマンドを実行してパッチを適用します。(changes.patchの部分はつけた名前に応じて変えてください)

```
git apply changes.patch
```

あとは以下のコマンドでビルドできます

```
./waf
```

これまでの手順で正しく依存が解決できていればエラーはヘッダーファイル(インクルードパス)に関連するものだけ出てくるはずです。とくに私が試した環境ではzshrcを以下のように編集しました。

```
# gcc and g++
export CPLUS_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/opt/homebrew/Cellar/boost/1.84.0/include"
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/opt/homebrew/include"
export CPATH=$CPLUS_INCLUDE_PATH
 #pkgconfig -path
export PKG_CONFIG_PATH=/opt/homebrew/lib/pkgconfig

# libarchive
export PATH="/opt/homebrew/opt/libarchive/bin:$PATH"
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/opt/homebrew/opt/libarchive/lib/pkgconfig"
export LDFLAGS="-L/opt/homebrew/opt/libarchive/lib"
export CPPFLAGS="-I/opt/homebrew/opt/libarchive/include"
```

ヘッダーファイルが見つからないエラーが出た場合にはzshrcのCPATHとCPLUS_INCLUDE_PATHを修正してシェル再起動、zshrc再読み込み、./wafを再度実行という手順でやるとうまくいきました。

1800個くらいのファイルがコンパイルされ、すべてうまくいけばbuild finished successfullyと出るはずです。(だいたいインクルードパスでコケるので一発で成功しないと思いますが)

ビルドできたらgtk2_ardour/ardevを実行して起動し、一通り動作を確認してみてください。直接build/gtk2_ardour/ardour8を起動することはできません(環境変数が設定されないため)
ardev経由で起動してください。

なお、.appバンドルを作成するためのtools/osx_packaging/osx_buildは開発者に確認したところ、有料の開発者IDを持っている場合にのみ機能するらしく、無料アカウントしかない場合には署名の問題で起動ができないことがわかりました。うざいですが、我慢するしかないです…
多分otoolとかで依存をまとめてうまくやるとバンドルできそうな気がするのですが、かなり面倒くさそうだったため放棄しました。だれかスクリプト書いて。