Update to odrcore 6.0.0 - #128
Merged
Merged
Conversation
conan-odr-index moves to 36caf08, which adds the odrcore/6 recipe. 6.0.0 drops the pdf2htmlEX and wvWare backends and reworks the HTTP server API, so the consumer side has to move with it: - `with_pdf2htmlEX` and `with_wvWare` are gone from the recipe, and both were already off here. pdf2htmlex, poppler-data and fontconfig leave the dependency graph with them, so the deployer branches copying their data into the bundle are dead and go too - odrcore's own data is all that is left. - `HttpServer::listen(host, port)` is split into `bind()` + `listen()`. bind() runs on the calling thread, reports a failed bind as ServerBindFailed instead of swallowing it, and returns the port it got. That removes the reason for every socket call in CoreWrapper: the bind test that checked the port was not somebody else's, and the readiness probe that waited for listen() to bind on the server's own thread. Connections are accepted from bind() onwards. It also removes the reason for a fixed port. Binding port 0 asks for whichever one is free and bind() says which that was, so the two flavors of the app can no longer collide on 29665 - the failure this API change was made for. The port is kept in a global, since `isServedURL:` and the page URLs both need it. - `HttpServer::Config::cache_path` and `config()` are gone, and clear() no longer deletes files. Nothing is lost: the pages were translated into the cache path passed to `html::translate`, which is the system's temporary directory, and the server's own cache directory was only ever used by the `serve_file` that 6.0.0 removed. The port in the tests is now derived from the served URL rather than hardcoded, with a bare-host case added since a URL without a port no longer reads as "not ours" for free. Verified with `conan/setup-all.sh` across all 13 configurations, `fastlane tests` (27 passing, including the loopback and web view ones), and device Release builds of both flavors. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018nJRmG9vePpssqA3jnfNv9
andiwand
enabled auto-merge (squash)
July 27, 2026 22:48
andiwand
disabled auto-merge
July 27, 2026 22:57
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
🤖 Generated with Claude Code
Pulls
conan-odr-indexup to 36caf08, which adds theodrcore/6recipe, and moves the app onto odrcore 6.0.0.6.0.0 drops the pdf2htmlEX and wvWare backends and reworks the HTTP server API, so the consumer side has to move with it.
Dropped backends
with_pdf2htmlEXandwith_wvWareare gone from the recipe, and both were alreadyFalsehere.pdf2htmlex,poppler-dataandfontconfigleave the dependency graph with them, which leaves the deployer branches that copied their data into the app bundle dead — odrcore's own data is all there is left to deploy.Nothing in the app referenced those assets: PDFs are handed to
WKWebView, not to odrcore.bind() / listen()
HttpServer::listen(host, port)is split intobind()+listen().bind()runs on the calling thread, reports a failed bind asServerBindFailedinstead of swallowing it, and returns the port it got. That removes the reason for every socket callCoreWrapperhad:listen()to bind on the server's own threadConnections land in the backlog from
bind()onwards, so there is nothing to wait for before handing URLs to the web view.It also removes the reason for a fixed port. Binding port 0 asks for whichever one is free and
bind()reports which that was, so the two flavors of the app can no longer collide on 29665 — the failure this API change was made for. The port lives in a global now, sinceisServedURL:and the page URLs both need it.Net: −94 lines in
CoreWrapper.mm.Server cache
HttpServer::Config::cache_pathandconfig()are gone, andclear()no longer deletes files. Nothing is lost — the pages were always translated into the cache path passed tohtml::translate, which is the system's temporary directory. The server's own cache directory was only ever used by theserve_filethat 6.0.0 removed.Tests
The port in
testOnlyTheServersOwnURLsCountAsPagesis derived from the served URL rather than hardcoded, with a bare-host case (http://127.0.0.1/…) added — a URL without a port no longer reads as "not ours" for free.Verification
conan/setup-all.sh— all 13 configurations resolve and buildbundle exec fastlane tests— 27 passing, includingtestPagesAreServedOverLoopbackandtestTheWebViewLoadsAServedPagexcodebuild … -sdk iphoneos—ODR Full/Release andODR Lite/Release Lite both build