Skip to content

libdrm, libpciaccess, openexr, pngquant3: state compiler floors, fix the meson c_std overrides - #7397

Open
th0ma7 wants to merge 5 commits into
SynoCommunity:masterfrom
th0ma7:tvheadend-capability-floors
Open

libdrm, libpciaccess, openexr, pngquant3: state compiler floors, fix the meson c_std overrides#7397
th0ma7 wants to merge 5 commits into
SynoCommunity:masterfrom
th0ma7:tvheadend-capability-floors

Conversation

@th0ma7

@th0ma7 th0ma7 commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Rebased on master, and split: the cairo and glib half moved to #7427, which carries the larger dependency fan-out. This PR keeps the meson c_std overrides, 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.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 on ppc853x's 4.3.7, so UNSUPPORTED_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.

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.

The two packages that do keep a floor

package was now
openexr $(ARMv5_ARCHS) $(OLD_PPC_ARCHS) + UNSUPPORTED_ARCHS_TCVERSION = x86-5.2 MIN_GCC_VERSION = 4.8
pngquant3 $(ARMv5_ARCHS) $(OLD_PPC_ARCHS) MIN_GCC_VERSION = 4.8

Both 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_ptr brace-init, std::mutex, lambdas, -std=c++11:

gcc 4.3.7  no      gcc 4.6.4  no      gcc 4.7.3  no      gcc 4.8.3  yes      gcc 4.9.3  yes

openexr also loses its x86-5.2 exception — 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:

alpine  armada370  armada375  armadaxp  avoton  braswell  bromolow
cedarview  comcerto2k  evansport  qoriq  x64  x86         (all -5.2, gcc 4.3.7 … 4.7.3)

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.yml turns 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_DEPENDS and the DEPENDS fallback follow cross/ffmpeg7cross/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 — needs IN_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.

nghttp3 is not part of this set. It reaches tvheadend only through cross/curl's OPTIONAL_DEPENDS, and cross/tvheadend sets BUILD_CURL_WITH="gnutls libssh2 zstd" without it; it appeared here because the dependency walk was run without ARCH, 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/ and spk/ Makefiles carried

# requires c11 and proper atomic using gcc-4.9+ support
UNSUPPORTED_ARCHS = $(ARMv5_ARCHS) $(ARMv7L_ARCHS) $(OLD_PPC_ARCHS)

— a comment naming 4.9 above a list that does not say 4.9. ffmpeg7 and ffmpeg8 already declare MIN_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, ppc854x have no toolchain at all. What the floor adds is the fourteen toolchains the list silently admitted — qoriq-5.2 4.3.7, evansport-5.2 4.6.3, alpine/armada370/armada375/armadaxp/comcerto2k-5.2 4.6.4, avoton/braswell/bromolow/cedarview/x64/x86-5.2 4.7.3, monaco-5.2 4.8.3. All DSM 5.2, all below the stated requirement, none ever built. 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.

This lands here rather than separately because the videodriver-meta fix lets ffmpeg6 get past spk-stage1 on 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

@th0ma7
th0ma7 force-pushed the tvheadend-capability-floors branch from 07ab583 to 31760d6 Compare August 23, 2026 10:49
@th0ma7
th0ma7 force-pushed the tvheadend-capability-floors branch 2 times, most recently from 5033f83 to cc35771 Compare August 25, 2026 10:06
th0ma7 and others added 3 commits September 1, 2026 19:21
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
th0ma7 force-pushed the tvheadend-capability-floors branch from cc35771 to 74534b9 Compare September 1, 2026 19:23
@th0ma7 th0ma7 changed the title tvheadend tree: state the compiler floors instead of listing architectures libdrm, libpciaccess, openexr, pngquant3: state compiler floors, fix the meson c_std overrides Sep 1, 2026
th0ma7 and others added 2 commits September 1, 2026 20:08
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
th0ma7 force-pushed the tvheadend-capability-floors branch from 74534b9 to 49ef7f2 Compare September 1, 2026 20:08
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