jamulussoftware / jamulussoftware/jamulus

macOS: CONFIG+=serveronly needs two changes, not one

オープン
#3,914 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

macOS needs documentation
主要言語
C
スター
1.1k
フォーク
248
平均マージ
2日 3時間
マージ済み PR(30日)
9

説明

🤖 AI: #2551 left macOS out of CONFIG+=serveronly with an open invitation — "The MacOS build might be feasible but there were the bundle options already there and I've no way to check what's going on with the MacOS build. If someone else wants to have a go at that, add DEFINES += SERVER_ONLY and see if it works." Now it is run on a Mac, at c862872e, macOS 12.7.6, Qt 5.15.2, command-line qmake+make, x86_64.

That change does most of it, and is not sufficient. With DEFINES += SERVER_ONLY added to the macx branch and nothing else, the define reaches every compile line and all 15 client-side undefined symbols go away. Nine remain, and every one of them is CSoundBase:

$ qmake Jamulus.pro CONFIG+=serveronly CONFIG+=headless && make -j2
Project MESSAGE: Restricting build to server-only due to CONFIG+=serveronly.
Project MESSAGE: Using CoreAudio.
[...]
Undefined symbols for architecture x86_64:
  "CSoundBase::ReinitRequest(int)", referenced from:
      CSound::deviceNotification(unsigned int, unsigned int, AudioObjectPropertyAddress const*, void*) in sound.o
  "CSoundBase::staticMetaObject", referenced from:
      CSound::staticMetaObject in moc_sound.o
  "vtable for CSoundBase", referenced from:
      CSoundBase::~CSoundBase() in sound.o
[6 further CSoundBase symbols, 9 in total]
ld: symbol(s) not found for architecture x86_64

The nine come from the second difference between the branches: the macx branch adds coreaudio-mac/sound.cpp unconditionally, while soundbase.cpp is stripped platform-independently — so CSound is compiled without its base class. win32 does not hit this because its ASIO sources sit inside the else-branch of its own serveronly test. So macOS needs two changes, not one: the missing define, and a serveronly guard around the CoreAudio sources. With both, a plain CONFIG+=serveronly CONFIG+=headless build links and runs:

$ qmake Jamulus.pro CONFIG+=serveronly CONFIG+=headless && make -j2
Project MESSAGE: Restricting build to server-only due to CONFIG+=serveronly.
Project MESSAGE: Server-only build: skipping CoreAudio.
[...]
$ Jamulus.app/Contents/MacOS/Jamulus --version
- Starting in server mode by default (due to compile time option)
 *** Jamulus, Version 3.12.4dev-nogit

With neither change the option half-applies rather than being ignored: five platform-independent !contains(CONFIG, "serveronly") blocks strip client sources while SERVER_ONLY stays undefined, and the link fails with 24 undefined symbols.

No released artifact is affected: the macOS server app is built by mac/deploy_mac.sh with CONFIG+=server_bundle alone, which keeps both sound files — built at the same commit here, 0 errors, JamulusServer starts in server mode.

Documentation is affected either way: the compile-time arguments table marks server_bundle "macOS only" and jackonmac "on macOS", while serveronly carries no platform qualifier and its one worked example, qmake "CONFIG+=headless serveronly", sits under ## Linux.


🤖 This message was written by AI and reviewed by @mcfnord.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

Jamulus.pro の macx ソースリストと既存の serveronly 条件分岐から始め、次に COMPILING.md のコンパイル時引数の表と Linux の例を確認します。macOS で CONFIG+=serveronly CONFIG+=headless を付けて qmake を実行し、server-only ビルドがリンクされ、Jamulus.app/Contents/MacOS/Jamulus --version がサーバーモードで起動することを確認します。macOS のサポートと関連するオプションを正確に説明するよう、ドキュメントを更新します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
cpp, macos
領域
build-system
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
活発
明瞭さ
明確に書かれている
初心者へのやさしさ
78/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。