wpewebkit: update to 2.54.0, drop legacy WPE - #146
Merged
Merged
Conversation
dangowrt
force-pushed
the
wpewebkit-2.52.6
branch
from
August 20, 2026 17:29
f93bafb to
3b9c8ae
Compare
dangowrt
force-pushed
the
wpewebkit-2.52.6
branch
from
September 15, 2026 22:41
3b9c8ae to
ace1d94
Compare
dangowrt
marked this pull request as ready for review
September 15, 2026 22:41
dangowrt
force-pushed
the
wpewebkit-2.52.6
branch
from
September 23, 2026 13:18
ace1d94 to
d7e07be
Compare
dangowrt
force-pushed
the
wpewebkit-2.52.6
branch
from
September 23, 2026 13:44
d7e07be to
77221f2
Compare
dangowrt
force-pushed
the
wpewebkit-2.52.6
branch
4 times, most recently
from
September 28, 2026 11:02
e095d1f to
7ee9839
Compare
Switch to WPEPlatform only: ENABLE_WPE_LEGACY_API=OFF drops the libwpe API and with it the wpebackend-fdo backend, which served no other package. MiniBrowser builds against WPEPlatform without them. WPEWebKit now needs 128-bit atomics, so add libatomic. libstdcpp and libxkbcommon used to arrive through libwpe and are linked directly, so declare them. Patch 122 is upstream and is dropped; 126 keeps only its DWARF register mapping hunk. 138 and 147 are ported to the refactored atomic op macros, where upstream hoisted 63 inline bodies out into named macros, and 147's compare-exchange slow path gains the expected-value argument and the result move it was missing. Eight patches are new. The WebDriver log channel is read unguarded while it is only declared when logging is compiled in. WPE reports prefers-reduced-motion inverted, so animations are disabled by default. WebKit cannot resolve a WebCore header that another WebCore header includes by bare name, which stops the prefix header compiling as the translation unit of its own that a precompiled header needs. libpas picks a __uint128_t for pas_pair wherever the compiler is not Clang and the target is not 32-bit ARM, which leaves 32-bit x86 without a type, and its pair atomics then need the same unreachable stub that 32-bit ARM already uses. The remaining four are RISCV64. The offlineasm backend cannot lower a call to a local label, nor a floating-point branch to a global label, both of which the LLInt asm emits. B3 declares u64 inside the ARM64 and X86_64 arms of isValidFPImm64Form and reads it after the #endif, which no other architecture compiles. The MacroAssembler is missing the store64(TrustedImm32, BaseIndex) and immediate-valued moveConditionally32 forms that DFGSpeculativeJIT calls. Add test-version.sh: nothing the packages install reports the version, so the generic test cannot probe for it. The helper processes take no arguments and print nothing, WPEWebDriver has no --version, and the .pc file that carries the version belongs to Build/InstallDev. Regenerate the whole series with git format-patch so every patch carries a git-am header and a description, refresh it for the new line numbers, and correct two descriptions that referred to WebKitGTK. Link: https://wpewebkit.org/release/wpewebkit-2.54.0.html Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Cog is a launcher built on the libwpe API and wpebackend-fdo, which wpewebkit no longer provides now that it is built against WPEPlatform only. MiniBrowser covers the testing role, and applications should use the WPE API directly. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
The only consumers were wpewebkit, which is now built with ENABLE_WPE_LEGACY_API=OFF, and cog, which is gone. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Nothing depends on the libwpe API any more: wpewebkit is built against WPEPlatform, and wpebackend-fdo and cog are gone. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
dangowrt
force-pushed
the
wpewebkit-2.52.6
branch
from
September 29, 2026 00:54
7ee9839 to
949701a
Compare
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.
📦 Package Details
Maintainer: @dangowrt
Description:
Update WPEWebKit to 2.54.0 and move the feed to a WPEPlatform-only build, retiring the libwpe legacy API and the packages that existed only to serve it. This supersedes the previous contents of this PR (the 2.52.6 point-release update), retargeted to 2.54.0 and rebased onto current master.
ENABLE_WPE_LEGACY_API=OFFbuilds WPEWebKit against WPEPlatform alone.WPE::libwpeis linked only under that option,Tools/wpe/backends(the wpebackend-fdo consumer) is only added when it is on, and the generatedwpe-webkit-2.0.pcemitsRequires: ... wpe-1.0from the same guard. With it off, libwpe and wpebackend-fdo have no remaining consumer, and cog was the only other package using them. MiniBrowser covers the testing role and links neither.Two dependency adjustments are required by 2.54.
libatomicis new becauselibWPEWebKit-2.0.sonow pulls__atomic_load_16,__atomic_store_16and__atomic_compare_exchange_16, which are not inlined on x86_64 without-mcx16.libstdcppandlibxkbcommonused to arrive transitively through libwpe; WPEPlatform linksXkbCommon::XkbCommondirectly and libstdc++ is a directNEEDEDof the library, the injected bundle and all three helper processes.On the patch series: 122 applies in reverse against 2.54 and is dropped as upstream; 126 keeps only its DWARF register-mapping hunk, upstream having taken the other three. Patches 138 and 147 are ported rather than refreshed, because upstream hoisted the 63 inline atomic op bodies out of
atomicLoadOp(...)/ipintOp(...)into 63 nameddo*Atomic*macros; the mapping was verified rather than assumed, deriving the expected slow-path helper from each macro name reproduces the helper named in the corresponding hunk for all 63. While porting, 147's compare-exchange slow path was found to issuecCall4while assigning onlya1anda3, nevera2, so the helper received an uninitialisedexpectedargument, and the result inr0was never moved back; both are fixed across all seven cmpxchg macros.Six patches are new.
LOG_CHANNEL(WebDriverClassic)is read unguarded inWebDriverService::handleRequest()whileSource/WebDriver/Logging.honly declares the channels under#if !LOG_DISABLED || !RELEASE_LOG_DISABLED; a release build with assertions off and no journald, OS_LOG or Android backend disables both and fails to compile.Two are RISCV64 offlineasm gaps of the same shape, both found by CI.
emitCallaccepts onlyRegisterIDandLabelReference, socall .continueinLowLevelInterpreter.asmaborts LLIntAssembly.h generation with "Unable to match operands [LocalLabelReference]", whileemitJumpimmediately above already treats both label kinds alike. Thenriscv64LowerFPBranchaccepts only aLocalLabelReference, so a floating-point branch to a global label fails with "Unable to match operands [FPRegisterID, FPRegisterID, LabelReference]"; it lowers to the zero-compare branches, whose renderer has the same restriction, whereas the two-register branch renderer beside it already accepts both.One is for 32-bit x86, also found by CI. libpas selects a
__uint128_tforpas_pairwherever the compiler is not Clang and the target is not 32-bit ARM, which leaves 32-bit x86 without a type; keying the structure fallback on!defined(__SIZEOF_INT128__)covers every such target instead of enumerating architectures. The pair atomics need the same condition, becausepas_compare_and_swap_pair_weakand its four siblings passpas_pairto__atomic_*_n, which takes a scalar. 32-bit ARM already answers that with an unreachable stub, and nothing calls those functions on such a target sinceBENABLE_LIBPASrequiresBCPU(ADDRESS64).Those three reproduce identically on 2.52.3, so they are long-standing rather than regressions introduced by this update.
The next is specific to 2.54, which introduces precompiled headers (2.52's
WebKitMacros.cmakehad no PCH machinery at all) and so compiles the WebKit prefix header as a translation unit of its own for the first time. WebCore stages its private headers as a flat directory of symlinks into the source tree, so a WebCore header reached from WebKit resolves its siblings by bare name against the directory it really lives in:WebKitPrefix.hreachesGStreamerCommon.hviaSharedBuffer.h, and that includes"GraphicsTypesGL.h", which sits one level up inplatform/graphicswhere nothing on WebKit's include path reaches it. Adding the flat private header directory toWebKit_PRIVATE_INCLUDE_DIRECTORIESresolves it. It is added last deliberately: WebKit carries its own headers with names WebCore also uses,WebGPUSupportedFeatures.hamong them, and placing the directory earlier shadows them and breaks the GPUProcess build with incompleteWebKit::WebGPUtypes.Removing wpebackend-fdo drops @mirko's stale-buffer fix along with the package it fixes. That fix is in wpebackend-fdo's own
src/ws-shm.cppandsrc/ws-egl.cpp, not in cog; cog's drm renderer copy loop was only where the symptom appeared. It has no counterpart under WPEPlatform, whose Wayland support is a plain Wayland client with nowayland-server,wl_shm_buffer,surfaceCommitorexportShmBufferanywhere, so there is no equivalent site to carry it to.prefers-reduced-motionis inverted on WPE:SystemSettingsManagerProxy::reducedMotion()negatesWPE_SETTING_REDUCED_MOTION, which is documented and registered as defaulting to false, so the default reports that the user prefers reduced motion and every site honouring the media query disables its animations. The negation is left over fromenableAnimations(), which this function replaced in WebKit/WebKit@446267f, where it was correct because the value read was the opposite settingWPE_SETTING_DISABLE_ANIMATIONS. Still present in WebKitmainand unreported upstream at the time of writing; being filed at bugs.webkit.org separately. This is a 2.54-series regression, since neither the function nor the setting exists in 2.52.x.A
test-version.shoverride is added for the generic package tests. Nothing these packages install reports the package version: the three programs inlibwpewebkitare helper processes the library spawns and take no arguments,WPEWebDriverhas no--version, andwpe-webkit-2.0.pcbelongs toBuild/InstallDevand is not shipped. The override checks that each subpackage installed the artefacts it should, which is what the probe was standing in for.Link: https://wpewebkit.org/release/wpewebkit-2.54.0.html
🧪 Run Testing Details
libwpewebkit,wpewebkit-driverandwpewebkit-minibrowserall compile and package for x86_64/musl with no unresolved library dependencies, and the whole series applies withgit amonto a pristine 2.54.0 tree. The riscv64 and i386 fixes are derived from the CI logs of the previous run and have not been built on those targets locally.On the CI results themselves:
arm_cortex-a9completed a full build in 5h26m, so the work does fit inside the runner limit, butaarch64_genericandarm_cortex-a15are cancelled at 6h. That boundary moves with runner load and with how long the Mesa and LLVM builds take, host and target, so those two are expected to flip either way between runs rather than indicating a defect. Themips,mipselandpowerpcjobs pass quickly because the architecture is outside this package'sDEPENDS.✅ Formalities
If your PR contains a patch:
git am