[Buildroot] [PATCH v2 2/2] package/jpeg-turbo: fix libm linking issue
Thomas Perale
thomas.perale at mind.be
Fri Sep 4 12:17:25 UTC 2026
In reply of:
> Buildroot commit bb38f6f7208497cf5a4df922e833492001170111 bumped the
> package to 3.2.0. This version first included upstream commit
> https://github.com/libjpeg-turbo/libjpeg-turbo/commit/ed00e0f4b39291e954958b96a8d941ca4a9e03a2
> which removed the dependency to libm causing build errors detected by
> the autobuilders.
>
> Disabling the build of tests by the previous patch of this series is not
> enough because the build will fail on other tools like
>
> [ 98%] Linking C executable djpeg-static
> /home/bernd/buildroot/output/per-package/jpeg-turbo/host/bin/../lib/gcc/i686-buildroot-linux-gnu/15.3.0/../../../../i686-buildroot-linux-gnu/bin/ld:
> src/spng/CMakeFiles/spng-static.dir/spng.c.o: in function
> `spng_decode_image':
> spng.c:(.text+0x4c62): undefined reference to `__fpclassifyf'
>
> Add upstream commit to fix the problem.
>
> Fixes:
> https://autobuild.buildroot.net/results/981/98114d4ea7afe62bb4cef934a06bf289d863ad3f/
>
> Signed-off-by: Bernd Kuhls <bernd at kuhls.net>
Applied to 2026.05.x. Thanks
> ---
> v2: add upstream commit instead of -lm
>
> Gitlab pipelines passed:
> https://gitlab.com/bkuhls/buildroot/-/commits/42f55ce3d2bd3c15b6e8f865676bc17899cbe79c
>
> ...-Really-remove-gamma-correction-code.patch | 113 ++++++++++++++++++
> 1 file changed, 113 insertions(+)
> create mode 100644 package/jpeg-turbo/0001-libspng-Really-remove-gamma-correction-code.patch
>
> diff --git a/package/jpeg-turbo/0001-libspng-Really-remove-gamma-correction-code.patch b/package/jpeg-turbo/0001-libspng-Really-remove-gamma-correction-code.patch
> new file mode 100644
> index 0000000000..594e28f65c
> --- /dev/null
> +++ b/package/jpeg-turbo/0001-libspng-Really-remove-gamma-correction-code.patch
> @@ -0,0 +1,113 @@
> +From 0da22762971551462cfad8f0b11cfb037472a4e8 Mon Sep 17 00:00:00 2001
> +From: DRC <information at libjpeg-turbo.org>
> +Date: Thu, 16 Jul 2026 12:09:54 -0400
> +Subject: [PATCH] libspng: Really remove gamma correction code
> +
> +We really don't use it, and fpclassify() apparently introduces yet
> +another libm dependency in some cases (although I can't reproduce that.)
> +
> +Fixes #904
> +
> +Upstream: https://github.com/libjpeg-turbo/libjpeg-turbo/commit/0da22762971551462cfad8f0b11cfb037472a4e8
> +
> +Signed-off-by: Bernd Kuhls <bernd at kuhls.net>
> +---
> + src/spng/spng.c | 20 ++++++++++++++++++--
> + 1 file changed, 18 insertions(+), 2 deletions(-)
> +
> +diff --git a/src/spng/spng.c b/src/spng/spng.c
> +index 06249d68..aeadb67e 100644
> +--- a/src/spng/spng.c
> ++++ b/src/spng/spng.c
> +@@ -353,9 +353,12 @@ struct spng_ctx
> + int widest_pass;
> + int last_pass; /* last non-empty pass */
> +
> ++#if 0 /* libjpeg-turbo: Eliminate unused gamma correction code, which
> ++ introduces an unwanted libm dependency */
> + uint16_t *gamma_lut; /* points to either _lut8 or _lut16 */
> + uint16_t *gamma_lut16;
> + uint16_t gamma_lut8[256];
> ++#endif
> + unsigned char trns_px[8];
> + union spng__decode_plte decode_plte;
> + struct spng_sbit decode_sb;
> +@@ -1742,6 +1745,8 @@ static uint16_t sample_to_target(uint16_t sample, unsigned bit_depth, unsigned s
> + return sample;
> + }
> +
> ++#if 0 /* libjpeg-turbo: Eliminate unused gamma correction code, which
> ++ introduces an unwanted libm dependency */
> + static inline void gamma_correct_row(unsigned char *row, uint32_t pixels, int fmt, const uint16_t *gamma_lut)
> + {
> + uint32_t i;
> +@@ -1785,6 +1790,7 @@ static inline void gamma_correct_row(unsigned char *row, uint32_t pixels, int fm
> + }
> + }
> + }
> ++#endif
> +
> + /* Apply transparency to output row */
> + static inline void trns_row(unsigned char *row,
> +@@ -3302,7 +3308,10 @@ int spng_decode_scanline(spng_ctx *ctx, void *out, size_t len)
> + const struct spng_subimage *sub = ctx->subimage;
> +
> + const struct spng_ihdr *ihdr = &ctx->ihdr;
> ++#if 0 /* libjpeg-turbo: Eliminate unused gamma correction code, which
> ++ introduces an unwanted libm dependency */
> + const uint16_t *gamma_lut = ctx->gamma_lut;
> ++#endif
> + unsigned char *trns_px = ctx->trns_px;
> + const struct spng_sbit *sb = &ctx->decode_sb;
> + const struct spng_plte_entry *plte = ctx->decode_plte.rgba;
> +@@ -3529,7 +3538,10 @@ int spng_decode_scanline(spng_ctx *ctx, void *out, size_t len)
> +
> + if(f.do_scaling) scale_row(out, width, fmt, processing_depth, sb);
> +
> ++#if 0 /* libjpeg-turbo: Eliminate unused gamma correction code, which
> ++ introduces an unwanted libm dependency */
> + if(f.apply_gamma) gamma_correct_row(out, width, fmt, gamma_lut);
> ++#endif
> +
> + /* The previous scanline is always defiltered */
> + void *t = ctx->prev_scanline;
> +@@ -3768,6 +3780,8 @@ int spng_decode_image(spng_ctx *ctx, void *out, size_t len, int fmt, int flags)
> +
> + /*if(f.same_layout && !flags && !f.interlaced) f.zerocopy = 1;*/
> +
> ++#if 0 /* libjpeg-turbo: Eliminate unused gamma correction code, which
> ++ introduces an unwanted libm dependency */
> + uint16_t *gamma_lut = NULL;
> +
> + if(f.apply_gamma)
> +@@ -3807,15 +3821,14 @@ int spng_decode_image(spng_ctx *ctx, void *out, size_t len, int fmt, int flags)
> + unsigned i;
> + for(i=0; i < lut_entries; i++)
> + {
> +-#if 0 /* libjpeg-turbo: Eliminate libm dependency */
> + float c = pow((float)i / max, exponent) * max;
> +-#endif
> + float c = 0.0f;
> + if(c > max) c = max;
> +
> + gamma_lut[i] = (uint16_t)c;
> + }
> + }
> ++#endif
> +
> + struct spng_sbit *sb = &ctx->decode_sb;
> +
> +@@ -5000,7 +5013,10 @@ void spng_ctx_free(spng_ctx *ctx)
> +
> + if(!ctx->user_owns_out_png) spng__free(ctx, ctx->out_png);
> +
> ++#if 0 /* libjpeg-turbo: Eliminate unused gamma correction code, which
> ++ introduces an unwanted libm dependency */
> + spng__free(ctx, ctx->gamma_lut16);
> ++#endif
> +
> + spng__free(ctx, ctx->row_buf);
> + spng__free(ctx, ctx->scanline_buf);
> +--
> +2.47.3
> +
> --
> 2.47.3
>
> _______________________________________________
> buildroot mailing list
> buildroot at buildroot.org
> https://lists.buildroot.org/mailman/listinfo/buildroot
More information about the buildroot
mailing list