Skip to content

ssr: bump revision to get newest libfmt version#46

Closed
HaHeho wants to merge 1 commit into
SoundScapeRenderer:mainfrom
HaHeho:HaHeho-bump-ssr
Closed

ssr: bump revision to get newest libfmt version#46
HaHeho wants to merge 1 commit into
SoundScapeRenderer:mainfrom
HaHeho:HaHeho-bump-ssr

Conversation

@HaHeho

@HaHeho HaHeho commented Jun 8, 2026

Copy link
Copy Markdown

This should create bottles which depend on libfmt version 12.

As done before in #35.

Similar to the discussion in #32, I'm currently getting the following error due to the dependency on libfmt version 11.

❯ ssr-brs
dyld[95706]: Library not loaded: /opt/homebrew/opt/fmt/lib/libfmt.11.dylib
  Referenced from: <CE55D2BD-650A-3B89-AACA-8369A1F9AB70> /opt/homebrew/Cellar/ssr/0.6.1_2/bin/ssr-brs
  Reason: tried: '/opt/homebrew/opt/fmt/lib/libfmt.11.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/opt/fmt/lib/libfmt.11.dylib' (no such file), '/opt/homebrew/opt/fmt/lib/libfmt.11.dylib' (no such file), '/opt/homebrew/Cellar/fmt/12.1.0/lib/libfmt.11.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/Cellar/fmt/12.1.0/lib/libfmt.11.dylib' (no such file), '/opt/homebrew/Cellar/fmt/12.1.0/lib/libfmt.11.dylib' (no such file)
[2]    95706 abort      ssr-brs

@HaHeho

HaHeho commented Jun 8, 2026

Copy link
Copy Markdown
Author

Hmmm ... this might solve one issue, but might not lead to a successful build at the moment. A previously mentioned workaround before rebuilding the bottle was to run brew reinstall ssr --build-from-source. However, that currently yields errors, starting with

clang++ -DHAVE_CONFIG_H -I.  -I./../apf -I./../gml/include -I./../rapidjson/include -DSSR_DATA_DIR="\"/opt/homebrew/Cellar/ssr/0.6.1_2/share/ssr\"" -D_POSIX_PTHREAD_SEMANTICS -I./gui -I/opt/homebrew/include/lib$
In file included from ssr_binaural.cpp:30:
In file included from ./ssr_main.h:34:
In file included from ./controller.h:64:
In file included from ./legacy_network/server.h:44:
./legacy_network/connection.h:63:33: error: no type named 'io_service' in namespace 'asio'
   63 |     static pointer create(asio::io_service &io_service
      |                           ~~~~~~^
clang++ -DHAVE_CONFIG_H -I.  -I./../apf -I./../gml/include -I./../rapidjson/include -DSSR_DATA_DIR="\"/opt/homebrew/Cellar/ssr/0.6.1_2/share/ssr\"" -D_POSIX_PTHREAD_SEMANTICS -I./gui -I/opt/homebrew/include/lib$
./legacy_network/connection.h:75:22: error: no type named 'io_service' in namespace 'asio'
   75 |     Connection(asio::io_service &io_service, api::Publisher &controller
      |                ~~~~~~^

According to the asio release notes, io_service was deprecated before, eventually removed in version 1.33.0. That release was never bottled for homebrew, hence didn't cause issues for SSR immediately. I assume the current errors would arise since Apr 11, 2025. where the bottle was updated to version 1.34.2. I had installed the latest version 1.36.0 (see history) in the above test.

@HaHeho

HaHeho commented Jun 8, 2026

Copy link
Copy Markdown
Author

In addition, there is also the following issue with the websocketpp formula having become deprecated, which is a dependency for the SSR. It can still be installed from homebrew with a warning, but it may become a problem for the SSR installation eventually.

❯ brew info websocketpp
==> websocketpp ✔ (disabled): stable 0.8.2 (bottled)
WebSocket++ is a cross platform header only C++ library
https://www.zaphoyd.com/websocketpp
Deprecated because it is not maintained upstream! It was disabled on 2026-04-10.
Installed (on request)
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/w/websocketpp.rb
License: BSD-3-Clause
==> Installed Kegs and Versions
websocketpp ✔ 0.8.2 (101 files, 941.3KB) [Linked]
==> Dependencies
Required (1): asio ✔
Recursive Runtime (5): 4 installed ✔, 1 missing ✘
Dependents: 1
==> Downloading https://formulae.brew.sh/api/formula/websocketpp.json
==> Analytics
install: 9 (30 days), 53 (90 days), 338 (365 days)
install-on-request: 9 (30 days), 51 (90 days), 329 (365 days)
build-error: 0 (30 days)

websocketpp also includes asio::io_service, which shows up as errors in my above try of brew reinstall ssr --build-from-source

clang++ -DHAVE_CONFIG_H -I.  -I./../apf -I./../gml/include -I./../rapidjson/include -DSSR_DATA_DIR="\"/opt/homebrew/Cellar/ssr/0.6.1_2/share/ssr\"" -D_POSIX_PTHREAD_SEMANTICS -I./gui -I/opt/homebrew/include/lib$
In file included from ssr_binaural.cpp:30:
In file included from ./ssr_main.h:34:
In file included from ./controller.h:68:
In file included from ./websocket/server.h:36:
In file included from ./websocket/connection.h:38:
In file included from /opt/homebrew/include/websocketpp/config/asio_no_tls.hpp:32:
In file included from /opt/homebrew/include/websocketpp/transport/asio/endpoint.hpp:32:
/opt/homebrew/include/websocketpp/transport/asio/connection.hpp:89:24: error: no type named 'io_service' in namespace 'websocketpp::lib::asio'
   89 |     typedef lib::asio::io_service * io_service_ptr;
      |             ~~~~~~~~~~~^
/opt/homebrew/include/websocketpp/transport/asio/connection.hpp:91:40: error: no member named 'io_service' in namespace 'websocketpp::lib::asio'
   91 |     typedef lib::shared_ptr<lib::asio::io_service::strand> strand_ptr;
      |                             ~~~~~~~~~~~^
/opt/homebrew/include/websocketpp/transport/asio/connection.hpp:315:17: error: no matching constructor for initialization of 'lib::asio::steady_timer' (aka 'basic_waitable_timer<chrono::steady_clock>')
  315 |             new lib::asio::steady_timer(
      |                 ^
  316 |                 *m_io_service,
      |                 ~~~~~~~~~~~~~~
  317 |                 lib::asio::milliseconds(duration))
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/include/asio/basic_waitable_timer.hpp:231:12: note: candidate constructor template not viable: no known conversion from 'lib::chrono::milliseconds' (aka 'duration<long long, ratio<1LL, 1000LL>>') $
  231 |   explicit basic_waitable_timer(ExecutionContext& context,
      |            ^
  232 |       const time_point& expiry_time,
      |       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/include/asio/basic_waitable_timer.hpp:253:3: note: candidate constructor not viable: no known conversion from 'int' to 'const executor_type' (aka 'const asio::any_io_executor') for 1st argument
  253 |   basic_waitable_timer(const executor_type& ex, const duration& expiry_time)
      |   ^                    ~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/include/asio/basic_waitable_timer.hpp:211:3: note: candidate constructor not viable: no known conversion from 'int' to 'const executor_type' (aka 'const asio::any_io_executor') for 1st argument
  211 |   basic_waitable_timer(const executor_type& ex, const time_point& expiry_time)
      |   ^                    ~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/include/asio/basic_waitable_timer.hpp:193:12: note: candidate template ignored: substitution failure [with ExecutionContext = int]: no type named 'type' in 'asio::constraint<false>'
  193 |   explicit basic_waitable_timer(ExecutionContext& context,
      |            ^
/opt/homebrew/include/asio/basic_waitable_timer.hpp:274:12: note: candidate template ignored: substitution failure [with ExecutionContext = int]: no type named 'type' in 'asio::constraint<false>'
  274 |   explicit basic_waitable_timer(ExecutionContext& context,
      |            ^
/opt/homebrew/include/asio/basic_waitable_timer.hpp:337:3: note: candidate template ignored: could not match 'basic_waitable_timer<steady_clock, wait_traits<steady_clock>, Executor1>' against 'int'
  337 |   basic_waitable_timer(
      |   ^
/opt/homebrew/include/asio/basic_waitable_timer.hpp:177:12: note: candidate constructor not viable: requires single argument 'ex', but 2 arguments were provided
  177 |   explicit basic_waitable_timer(const executor_type& ex)
      |            ^                    ~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/include/asio/basic_waitable_timer.hpp:298:3: note: candidate constructor not viable: requires single argument 'other', but 2 arguments were provided
  298 |   basic_waitable_timer(basic_waitable_timer&& other)
      |   ^                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/opt/homebrew/include/asio/basic_waitable_timer.hpp:600:3: note: candidate constructor not viable: requires 1 argument, but 2 were provided
  600 |   basic_waitable_timer(const basic_waitable_timer&) = delete;
      |   ^                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

@HaHeho

HaHeho commented Jun 9, 2026

Copy link
Copy Markdown
Author

The CI pipeline failed as expected, with the same two issues outlined before. Both are caused by the removed io_service. One solution would be to pin asio<1.33.0, but I don't think this can be easily done with homebrew, since only the latest version is available. Some libraries have multiple formulas with pinned versions to solve such compatibility issues. I suppose one could be created for asio@1.32. Alternatively, a compatible release of asio@1.30.2 could be fetched from https://sourceforge.net/projects/asio/files/asio/1.30.2%20%28Stable%29/.

I'm sure you know best how this could be solved.

@HaHeho HaHeho marked this pull request as draft June 9, 2026 15:27
@HaHeho

HaHeho commented Jun 17, 2026

Copy link
Copy Markdown
Author

I understood now that you were already aware of these issues, as summarized in SoundScapeRenderer/ssr#420.

@HaHeho HaHeho closed this Jun 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant