libdrm, libpciaccess, openexr, pngquant3: state compiler floors, fix the meson c_std overrides - #7397
Open
th0ma7 wants to merge 5 commits into
Open
libdrm, libpciaccess, openexr, pngquant3: state compiler floors, fix the meson c_std overrides#7397th0ma7 wants to merge 5 commits into
th0ma7 wants to merge 5 commits into
Conversation
th0ma7
force-pushed
the
tvheadend-capability-floors
branch
from
August 23, 2026 10:49
07ab583 to
31760d6
Compare
th0ma7
force-pushed
the
tvheadend-capability-floors
branch
2 times, most recently
from
August 25, 2026 10:06
5033f83 to
cc35771
Compare
Three failures the 5.2 toolchains have carried for as long as CI has not built them. None is about a capability floor; they surfaced together only because DSM 5.2 was switched on to exercise one. cross/m4 (ppc853x-5.2, gcc 4.3.7) format.c guards its in-function `#pragma GCC diagnostic push/ignored/pop` with _GL_GNUC_PREREQ (4, 3). gcc took `#pragma GCC diagnostic` at file scope from 4.2 but only allowed push/pop inside a function from 4.6, so 4.3 stops at "#pragma GCC diagnostic not allowed inside functions". Patched to ask for 4.6. Verified: cross/m4 now builds for ppc853x-5.2. cross/libmaxminddb (x86-5.2 and x64-5.2, gcc 4.7.3) The bundled libtap needs MAP_ANONYMOUS, which the pre-4.8 toolchains' headers only expose under _DEFAULT_SOURCE -- and the package compiles with -std=c99, which turns that off. The -DMAP_ANONYMOUS=0x20 workaround was already here, behind an arch list naming 88f6281 and ppc853x; x86 and x64 at 5.2 need it just as much and were simply never built. Keyed on gcc < 4.8 instead, which is exactly those four toolchains and nothing else. Verified: cross/libmaxminddb now builds for x86-5.2. spksrc.spk-meta/videodriver.mk (x86-5.2) The meta is selected by architecture alone, and x64_ARCHS contains the 5.2 archs, so every consumer pulled spk/synocli-videodriver into spk-stage1 on DSM 5.2 -- where that package can only stop at "DSM Toolchain 5.2 is lower than 6.2.4", failing the consumer with it (ffmpeg6 did). synocli-videodriver declares REQUIRED_MIN_DSM = 6.2.4; the selector now asks for the same. Verified: ffmpeg6 spk-stage1 pulls no meta at x86-5.2 and still pulls it at apollolake-7.1. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JiBhJxRTbjD6HWSEjzE41g (cherry picked from commit 49aadd9fd8ff7fff7817f32541a9748b6d55f1da)
…uant3: floors libdrm needed no compiler floor at all. Its meson.build asks for c_std=c11 and gcc < 4.7 only knows -std=c1x, so it died on "unrecognized command line option '-std=c11'" -- an option to override, not a compiler to outgrow. With -Dc_std=gnu99 it builds on gcc 4.6.4 and even on ppc853x's 4.3.7, so the UNSUPPORTED_ARCHS = ARMv5 + old PowerPC it carried is dropped outright rather than restated as a floor. This is the failure mode a floor is supposed to avoid: that Makefile named no reason, and inferring one from its exclusion set gave the wrong answer. libpciaccess had the same override already, but written in two broken ways: the condition read version_ge 4.9, handing gnu99 to the compilers that do not need it, and it sat above the include where TC_GCC does not exist yet, so it never fired either way. Now version_lt 5, between spksrc.common.mk and spksrc.cross-meson.mk. openexr and pngquant3 keep a floor, because theirs is a compiler limit and they said so themselves -- "Toolchains lacking c++11 compiler", "Fails on older gcc for its internal dependencies". Both become MIN_GCC_VERSION = 4.8, measured the same way: core C++11 fails on 4.6.4 and 4.7.3 and works from 4.8.3. openexr also loses its UNSUPPORTED_ARCHS_TCVERSION = x86-5.2 exception, since that arch runs gcc 4.7.3 and the floor already covers it. No architecture is freed except on libdrm, and every newly excluded one is a DSM 5.2 arch below the floor. DSM 6.x and 7.x are untouched. Left as architecture lists on purpose: llvm-140 and Khronos-SPIRV-LLVM-Translator-140 are x86_64 host tooling, openh264 has no PowerPC support upstream, and c-ares-latest needs IN_NONBLOCK, which no glibc floor can express -- x86-5.2 ships 2.17 without it while 88f6281 ships 2.15 with it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JiBhJxRTbjD6HWSEjzE41g
Both the OPTIONAL_DEPENDS entry and the DEPENDS fallback taken when the ffmpeg meta's shared libraries are unavailable. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JiBhJxRTbjD6HWSEjzE41g
th0ma7
force-pushed
the
tvheadend-capability-floors
branch
from
September 1, 2026 19:23
cc35771 to
74534b9
Compare
Both carried "requires c11 and proper atomic using gcc-4.9+ support" directly above an architecture list that does not say 4.9. ffmpeg7 and ffmpeg8 already declare MIN_GCC_VERSION = 4.9; these four Makefiles now do the same, so all four versions express the requirement the same way. Nothing is freed. Every arch the list named is below 4.9 at every DSM it has a toolchain for -- 88f6281 4.6.4, hi3535 4.8.3, ppc853x 4.3.7 -- and powerpc, ppc824x and ppc854x have no toolchain at all. What the floor adds is the fourteen toolchains the list silently admitted: qoriq-5.2 4.3.7 avoton-5.2 4.7.3 evansport-5.2 4.6.3 braswell-5.2 4.7.3 alpine-5.2 4.6.4 bromolow-5.2 4.7.3 armada370-5.2 4.6.4 cedarview-5.2 4.7.3 armada375-5.2 4.6.4 x64-5.2 4.7.3 armadaxp-5.2 4.6.4 x86-5.2 4.7.3 comcerto2k-5.2 4.6.4 monaco-5.2 4.8.3 All DSM 5.2, all below the stated requirement, none of them ever built because 5.2 is not in the CI matrix. qoriq is the one that could have been hit outside 5.2: it is a PowerPC arch but not in OLD_PPC_ARCHS, so the list never covered it. DSM 6.x and 7.x are untouched. This matters now rather than later: the videodriver-meta fix in this branch lets ffmpeg6 get past spk-stage1 on x86-5.2, where it would then reach the compiler the comment says it cannot use. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JiBhJxRTbjD6HWSEjzE41g
Revert before merge. Every architecture whose behaviour changes in this branch is a DSM 5.2 one, and DSM 5.2 is not part of the default matrix, so without this the change is not exercised anywhere. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JiBhJxRTbjD6HWSEjzE41g
th0ma7
force-pushed
the
tvheadend-capability-floors
branch
from
September 1, 2026 20:08
74534b9 to
49ef7f2
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.
Rebased on master, and split: the
cairoandglibhalf moved to #7427, which carries the larger dependency fan-out. This PR keeps the mesonc_stdoverrides, the two remaining floors, and the tvheadend ffmpeg bump. It will rebase onto #7427 once that lands.Groundwork for #7391.
libdrm needed no floor at all
Its
meson.buildasks forc_std=c11and gcc < 4.7 only knows-std=c1x, so it died on "unrecognized command line option '-std=c11'" — an option to override, not a compiler to outgrow. With-Dc_std=gnu99it builds on gcc 4.6.4 and on ppc853x's 4.3.7, soUNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(OLD_PPC_ARCHS)is dropped outright rather than restated as a floor.This is exactly the failure mode a version floor is supposed to avoid. That Makefile stated no reason, and an earlier revision of this branch inferred 4.8 from its exclusion set; the inference was wrong.
libpciaccesshad the same override already, but written in two broken ways: the condition readversion_ge 4.9, handing gnu99 to the compilers that do not need it, and it sat above the include whereTC_GCCdoes not exist yet, so it never fired either way. Nowversion_lt 5, betweenspksrc.common.mkandspksrc.cross-meson.mk.The two packages that do keep a floor
openexr$(ARMv5_ARCHS) $(OLD_PPC_ARCHS)+UNSUPPORTED_ARCHS_TCVERSION = x86-5.2MIN_GCC_VERSION = 4.8pngquant3$(ARMv5_ARCHS) $(OLD_PPC_ARCHS)MIN_GCC_VERSION = 4.8Both said so themselves — "Toolchains lacking c++11 compiler", "Fails on older gcc for its internal dependencies". 4.8 is measured on the Synology toolchains, not taken from upstream release notes. Core C++11 —
unique_ptrbrace-init,std::mutex, lambdas,-std=c++11:openexralso loses itsx86-5.2exception — that arch runs gcc 4.7.3 and fails the same check, so the floor already covers it.Blast radius
No architecture is freed except on
libdrm, which gains ARMv5 and old PowerPC. Every newly excluded one is a DSM 5.2 arch below the floor:They were never named because DSM 5.2 is not built in CI, so nobody hit them. DSM 6.x and 7.x are untouched.
build.ymlturns DSM 5.2 on temporarily so CI exercises exactly those archs. That commit reverts before merge.The DSM 5.2 toolchain fixes (
cross/m4,cross/libmaxminddb, the videodriver meta selector) are the same commit as in #7427 — they are needed under both halves while 5.2 is switched on, and the rebase will absorb it once #7427 lands. Details there.tvheadend
OPTIONAL_DEPENDSand theDEPENDSfallback followcross/ffmpeg7→cross/ffmpeg8.Deliberately left as architecture lists
llvm-140,Khronos-SPIRV-LLVM-Translator-140— x86_64 host tooling, a genuine architecture restriction.openh264— no PowerPC support upstream.c-ares-latest— needsIN_NONBLOCK, which no glibc floor can express: x86-5.2 ships glibc 2.17 without it while 88f6281 ships 2.15 with it. The Synology toolchains are not uniform at equal version, so a floor would wrongly admit x86-5.2. Worth noting that x86-5.2 is therefore already broken for this package today, silently.Follow-on
Once #7391 lands, five archs regain these packages through the overlay: 88f6281-5.2, 88f6281-6.2.4, ppc853x-5.2, x64-5.2, x86-5.2.
nghttp3is not part of this set. It reaches tvheadend only throughcross/curl'sOPTIONAL_DEPENDS, andcross/tvheadendsetsBUILD_CURL_WITH="gnutls libssh2 zstd"without it; it appeared here because the dependency walk was run withoutARCH, which returns the optional superset. Its floor also turned out to be 4.9, not 4.8 — nghttp3 1.x builds its min/max helpers on_Generic, which gcc only implements from 4.9. That landed with the version bump in #7399.ffmpeg5 and ffmpeg6
Both
cross/andspk/Makefiles carried— a comment naming 4.9 above a list that does not say 4.9.
ffmpeg7andffmpeg8already declareMIN_GCC_VERSION = 4.9; all four versions now express it the same way.Nothing is freed: every arch the list named is below 4.9 at every DSM it has a toolchain for (88f6281 4.6.4, hi3535 4.8.3, ppc853x 4.3.7), and
powerpc,ppc824x,ppc854xhave no toolchain at all. What the floor adds is the fourteen toolchains the list silently admitted —qoriq-5.24.3.7,evansport-5.24.6.3,alpine/armada370/armada375/armadaxp/comcerto2k-5.24.6.4,avoton/braswell/bromolow/cedarview/x64/x86-5.24.7.3,monaco-5.24.8.3. All DSM 5.2, all below the stated requirement, none ever built.qoriqis the one that could have been hit outside 5.2: it is a PowerPC arch but not inOLD_PPC_ARCHS, so the list never covered it.This lands here rather than separately because the videodriver-meta fix lets
ffmpeg6get pastspk-stage1on x86-5.2, where it would then reach the compiler its own comment says it cannot use.🤖 Generated with Claude Code
https://claude.ai/code/session_01JiBhJxRTbjD6HWSEjzE41g