ci: give the macOS OBS sub-build a version-carrying SDK path
Second macOS failure, after the Xcode-generator one: OBS's own cmake/macos/compilerconfig.cmake reads the macOS SDK version by regex-matching "MacOSX<major>.<minor>.sdk" out of CMAKE_OSX_SYSROOT, and hard-fails when that does not match -- string sub-command REGEX, mode MATCH needs at least 5 arguments Your macOS SDK version () is too low. The macOS 13.1 SDK (Xcode 14.2) is required to build OBS. -- with an empty version in the message, which is the tell. With upstream's Xcode generator CMAKE_OSX_SYSROOT stays the literal string "macosx" and Xcode resolves it late, so that regex never runs against a real path. With Ninja, which this project now uses because the CI runner has no Xcode, CMake resolves it eagerly to `xcrun --show-sdk-path` -- and on a Command-Line-Tools-only install that is the UNVERSIONED symlink /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk. So swapping the generator moved the failure rather than removing it. _resolve_versioned_macos_sdk now hands the sub-build a path whose filename carries the version: a versioned sibling if the toolchain ships one (the common layout), otherwise a symlink to the same SDK created under .deps/sdk and named MacOSX<major>.<minor>.sdk. Either way clang gets the same SDK; only the spelling of the path changes, which is all OBS's check looks at. Also: the source's worker thread now backs off when the source is unconfigured, instead of re-evaluating once a second forever, and resets the backoff whenever the settings change -- a settings change is an operator action and should retry immediately. Filling the settings in bumps the generation counter and wakes the worker straight away, so the longer backoff costs no responsiveness. Linux re-verified: ctest 6/6. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RL8abRmgFXkVASHkkqiJbE
This commit is contained in:
@@ -237,6 +237,11 @@ void workerLoop(CameraSource *self)
|
||||
}
|
||||
|
||||
const bool config_changed = generation != connected_generation;
|
||||
if (config_changed) {
|
||||
// A settings change is an operator action: try again immediately,
|
||||
// whatever the previous attempt's backoff had grown to.
|
||||
backoff_ms = kBackoffStartMs;
|
||||
}
|
||||
const bool needs_connect =
|
||||
!connected || config_changed ||
|
||||
(self->session && (self->session->state() == SessionState::Failed ||
|
||||
@@ -253,7 +258,11 @@ void workerLoop(CameraSource *self)
|
||||
if (!config.is_valid() || camera.empty()) {
|
||||
self->setStatus("not configured -- set the server URL, room, read key and camera");
|
||||
connected_generation = generation;
|
||||
backoff_ms = kBackoffStartMs;
|
||||
// Back off like any other unsuccessful attempt, so an
|
||||
// unconfigured source is not a once-a-second no-op forever.
|
||||
// Filling the settings in bumps the generation and wakes this
|
||||
// thread immediately, so the backoff costs no responsiveness.
|
||||
backoff_ms = backoff_ms * 2 < kBackoffMaxMs ? backoff_ms * 2 : kBackoffMaxMs;
|
||||
} else {
|
||||
self->setStatus("connecting...");
|
||||
const TokenResult token = self->api->requestToken(config);
|
||||
|
||||
Reference in New Issue
Block a user