#1128743 pyinstaller: FTBFS with glibc 2.43 due to ISO C23 const return types

Package:
src:pyinstaller
Source:
src:pyinstaller
Submitter:
Aurelien Jarno
Date:
2026-09-10 04:37:01 UTC
Severity:
normal
Tags:
#1128743#5
Date:
2026-02-22 16:16:58 UTC
From:
To:
Dear maintainer(s),

pyinstaller fails to build from source with glibc 2.43, currently in
experimental. From the build log:

| [ 8/23] Compiling src/pyi_utils_posix.c
| 12:18:38 runner ['/usr/bin/gcc', '-g', '-O2', '-Werror=implicit-function-declaration', '-ffile-prefix-map=/build/reproducible-path/pyinstaller-6.18.0+ds=.', '-fstack-protector-strong', '-fstack-clash-protection', '-Wformat', '-Werror=format-security', '-mbranch-protection=standard', '-O2', '-Wall', '-Werror', '-Wno-error=unused-variable', '-Wno-error=unused-function', '-Wno-error=unused-but-set-variable', '-U_FORTIFY_SOURCE', '-Isrc', '-I../../src', '-Iwindows', '-I../../windows', '-Izlib', '-I../../zlib', '-D_REENTRANT', '-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-D_FORTIFY_SOURCE=2', '-DHAVE_SEMAPHORE_H=1', '-DPYI_USE_POSIX_SEMAPHORE', '-DHAVE_STDBOOL_H=1', '-DHAVE_UNSETENV=1', '-DHAVE_MKDTEMP=1', '-DHAVE_DIRNAME=1', '-DHAVE_BASENAME=1', '-DHAVE_WCSDUP=1', '-DLAUNCH_DEBUG', '-DNDEBUG', '../../src/pyi_utils_posix.c', '-c', '-o/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug/src/pyi_utils_posix.c.1.o', '-Wdate-time', '-D_FORTIFY_SOURCE=2']

...

| ../../src/pyi_utils_posix.c: In function ‘_pyi_create_runtime_tmpdir’:
| ../../src/pyi_utils_posix.c:157:24: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
|   157 |     for(subpath_cursor = strchr(runtime_tmpdir, '/'); subpath_cursor != NULL; subpath_cursor = strchr(++subpath_cursor, '/')) {
|       |                        ^
| cc1: all warnings being treated as errors
|
| ../../src/pyi_utils.c: In function ‘pyi_create_parent_directory_tree’:
| ../../src/pyi_utils.c:65:25: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
|    65 |     for (subpath_cursor = strchr(filename, PYI_SEP); subpath_cursor != NULL; subpath_cursor = strchr(++subpath_cursor, PYI_SEP)) {
|       |                         ^
| cc1: all warnings being treated as errors
|
| Waf: Leaving directory `/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug'
| Build failed
|  -> task in 'OBJECTS' failed with exit status 1:
| 	{task 271633060253328: c pyi_utils_posix.c -> pyi_utils_posix.c.1.o}
| ['/usr/bin/gcc', '-g', '-O2', '-Werror=implicit-function-declaration', '-ffile-prefix-map=/build/reproducible-path/pyinstaller-6.18.0+ds=.', '-fstack-protector-strong', '-fstack-clash-protection', '-Wformat', '-Werror=format-security', '-mbranch-protection=standard', '-O2', '-Wall', '-Werror', '-Wno-error=unused-variable', '-Wno-error=unused-function', '-Wno-error=unused-but-set-variable', '-U_FORTIFY_SOURCE', '-Isrc', '-I../../src', '-Iwindows', '-I../../windows', '-Izlib', '-I../../zlib', '-D_REENTRANT', '-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-D_FORTIFY_SOURCE=2', '-DHAVE_SEMAPHORE_H=1', '-DPYI_USE_POSIX_SEMAPHORE', '-DHAVE_STDBOOL_H=1', '-DHAVE_UNSETENV=1', '-DHAVE_MKDTEMP=1', '-DHAVE_DIRNAME=1', '-DHAVE_BASENAME=1', '-DHAVE_WCSDUP=1', '-DLAUNCH_DEBUG', '-DNDEBUG', '../../src/pyi_utils_posix.c', '-c', '-o/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug/src/pyi_utils_posix.c.1.o', '-Wdate-time', '-D_FORTIFY_SOURCE=2']
|  -> task in 'OBJECTS' failed with exit status 1:
| 	{task 271633060252752: c pyi_utils.c -> pyi_utils.c.1.o}
| ['/usr/bin/gcc', '-g', '-O2', '-Werror=implicit-function-declaration', '-ffile-prefix-map=/build/reproducible-path/pyinstaller-6.18.0+ds=.', '-fstack-protector-strong', '-fstack-clash-protection', '-Wformat', '-Werror=format-security', '-mbranch-protection=standard', '-O2', '-Wall', '-Werror', '-Wno-error=unused-variable', '-Wno-error=unused-function', '-Wno-error=unused-but-set-variable', '-U_FORTIFY_SOURCE', '-Isrc', '-I../../src', '-Iwindows', '-I../../windows', '-Izlib', '-I../../zlib', '-D_REENTRANT', '-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-D_FORTIFY_SOURCE=2', '-DHAVE_SEMAPHORE_H=1', '-DPYI_USE_POSIX_SEMAPHORE', '-DHAVE_STDBOOL_H=1', '-DHAVE_UNSETENV=1', '-DHAVE_MKDTEMP=1', '-DHAVE_DIRNAME=1', '-DHAVE_BASENAME=1', '-DHAVE_WCSDUP=1', '-DLAUNCH_DEBUG', '-DNDEBUG', '../../src/pyi_utils.c', '-c', '-o/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug/src/pyi_utils.c.1.o', '-Wdate-time', '-D_FORTIFY_SOURCE=2']
| ERROR: Failed compiling the bootloader. Please compile manually and rerun
|
| ERROR Backend subprocess exited when trying to invoke build_wheel
| E: pybuild pybuild:483: build: plugin pyproject failed with: exit code=1: python3.14 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/pyinstaller-6.18.0+ds/.pybuild/cpython3_3.14

...

| [ 8/23] Compiling src/pyi_utils_posix.c
| 12:18:45 runner ['/usr/bin/gcc', '-g', '-O2', '-Werror=implicit-function-declaration', '-ffile-prefix-map=/build/reproducible-path/pyinstaller-6.18.0+ds=.', '-fstack-protector-strong', '-fstack-clash-protection', '-Wformat', '-Werror=format-security', '-mbranch-protection=standard', '-O2', '-Wall', '-Werror', '-Wno-error=unused-variable', '-Wno-error=unused-function', '-Wno-error=unused-but-set-variable', '-U_FORTIFY_SOURCE', '-Isrc', '-I../../src', '-Iwindows', '-I../../windows', '-Izlib', '-I../../zlib', '-D_REENTRANT', '-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-D_FORTIFY_SOURCE=2', '-DHAVE_SEMAPHORE_H=1', '-DPYI_USE_POSIX_SEMAPHORE', '-DHAVE_STDBOOL_H=1', '-DHAVE_UNSETENV=1', '-DHAVE_MKDTEMP=1', '-DHAVE_DIRNAME=1', '-DHAVE_BASENAME=1', '-DHAVE_WCSDUP=1', '-DLAUNCH_DEBUG', '-DNDEBUG', '../../src/pyi_utils_posix.c', '-c', '-o/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug/src/pyi_utils_posix.c.1.o', '-Wdate-time', '-D_FORTIFY_SOURCE=2']

| ../../src/pyi_utils.c: In function ‘pyi_create_parent_directory_tree’:
| ../../src/pyi_utils.c:65:25: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
|    65 |     for (subpath_cursor = strchr(filename, PYI_SEP); subpath_cursor != NULL; subpath_cursor = strchr(++subpath_cursor, PYI_SEP)) {
|       |                         ^
| cc1: all warnings being treated as errors
|
| ../../src/pyi_utils_posix.c: In function ‘_pyi_create_runtime_tmpdir’:
| ../../src/pyi_utils_posix.c:157:24: error: assignment discards ‘const’ qualifier from pointer target type [-Werror=discarded-qualifiers]
|   157 |     for(subpath_cursor = strchr(runtime_tmpdir, '/'); subpath_cursor != NULL; subpath_cursor = strchr(++subpath_cursor, '/')) {
|       |                        ^
| cc1: all warnings being treated as errors
|
| Waf: Leaving directory `/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug'
| Build failed
|  -> task in 'OBJECTS' failed with exit status 1:
| 	{task 275673165726000: c pyi_utils.c -> pyi_utils.c.1.o}
| ['/usr/bin/gcc', '-g', '-O2', '-Werror=implicit-function-declaration', '-ffile-prefix-map=/build/reproducible-path/pyinstaller-6.18.0+ds=.', '-fstack-protector-strong', '-fstack-clash-protection', '-Wformat', '-Werror=format-security', '-mbranch-protection=standard', '-O2', '-Wall', '-Werror', '-Wno-error=unused-variable', '-Wno-error=unused-function', '-Wno-error=unused-but-set-variable', '-U_FORTIFY_SOURCE', '-Isrc', '-I../../src', '-Iwindows', '-I../../windows', '-Izlib', '-I../../zlib', '-D_REENTRANT', '-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-D_FORTIFY_SOURCE=2', '-DHAVE_SEMAPHORE_H=1', '-DPYI_USE_POSIX_SEMAPHORE', '-DHAVE_STDBOOL_H=1', '-DHAVE_UNSETENV=1', '-DHAVE_MKDTEMP=1', '-DHAVE_DIRNAME=1', '-DHAVE_BASENAME=1', '-DHAVE_WCSDUP=1', '-DLAUNCH_DEBUG', '-DNDEBUG', '../../src/pyi_utils.c', '-c', '-o/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug/src/pyi_utils.c.1.o', '-Wdate-time', '-D_FORTIFY_SOURCE=2']
|  -> task in 'OBJECTS' failed with exit status 1:
| 	{task 275673165728912: c pyi_utils_posix.c -> pyi_utils_posix.c.1.o}
| ['/usr/bin/gcc', '-g', '-O2', '-Werror=implicit-function-declaration', '-ffile-prefix-map=/build/reproducible-path/pyinstaller-6.18.0+ds=.', '-fstack-protector-strong', '-fstack-clash-protection', '-Wformat', '-Werror=format-security', '-mbranch-protection=standard', '-O2', '-Wall', '-Werror', '-Wno-error=unused-variable', '-Wno-error=unused-function', '-Wno-error=unused-but-set-variable', '-U_FORTIFY_SOURCE', '-Isrc', '-I../../src', '-Iwindows', '-I../../windows', '-Izlib', '-I../../zlib', '-D_REENTRANT', '-D_BSD_SOURCE', '-D_DEFAULT_SOURCE', '-D_FORTIFY_SOURCE=2', '-DHAVE_SEMAPHORE_H=1', '-DPYI_USE_POSIX_SEMAPHORE', '-DHAVE_STDBOOL_H=1', '-DHAVE_UNSETENV=1', '-DHAVE_MKDTEMP=1', '-DHAVE_DIRNAME=1', '-DHAVE_BASENAME=1', '-DHAVE_WCSDUP=1', '-DLAUNCH_DEBUG', '-DNDEBUG', '../../src/pyi_utils_posix.c', '-c', '-o/build/reproducible-path/pyinstaller-6.18.0+ds/bootloader/build/debug/src/pyi_utils_posix.c.1.o', '-Wdate-time', '-D_FORTIFY_SOURCE=2']
| ERROR: Failed compiling the bootloader. Please compile manually and rerun
|
| ERROR Backend subprocess exited when trying to invoke build_wheel
| E: pybuild pybuild:483: build: plugin pyproject failed with: exit code=1: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/pyinstaller-6.18.0+ds/.pybuild/cpython3_3.13
| dh_auto_build: error: pybuild --build -i python{version} -p "3.14 3.13" returned exit code 13
| make: *** [debian/rules:35: binary] Error 25
| dpkg-buildpackage: error: debian/rules binary subprocess failed with exit status 2

The full build log is available here [1].

The issue is due to ISO C23 declaration of bsearch, memchr, strchr,
strpbrk, strrchr, strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr,
which now returns a pointer to a const-qualified type when the input
argument is a pointer to a const-qualified type [2].

I would like to thanks Emanuele Rocca for doing the archive rebuild on
a fast arm64 server.

Regards
Aurelien

[1] https://people.debian.org/~ema/glibc-2.43-rebuilds/output-1/pyinstaller_arm64.build
[2] https://sourceware.org/git/?p=glibc.git;a=blob;f=NEWS;h=e271fb2e4d76903c77a302aaec1ca22ce31027d0;hb=f762ccf84f122d1354f103a151cba8bde797d521#l19

#1128743#10
Date:
2026-06-17 02:00:21 UTC
From:
To:
Thanks for the bug report.

This has been fixed upstream with pyinstaller version 6.20.0.

https://pyinstaller.org/en/v6.21.0/CHANGES.html#bootloader

I will work on packaging the update.

#1128743#13
Date:
2026-06-17 02:00:21 UTC
From:
To:
Thanks for the bug report.

This has been fixed upstream with pyinstaller version 6.20.0.

https://pyinstaller.org/en/v6.21.0/CHANGES.html#bootloader

I will work on packaging the update.

#1128743#20
Date:
2026-08-10 12:44:53 UTC
From:
To:
control: severity 1127629 serious
control: severity 1128547 serious
control: severity 1128734 serious
control: severity 1128740 serious
control: severity 1128528 serious
control: severity 1128532 serious
control: severity 1128534 serious
control: severity 1128541 serious
control: severity 1128544 serious
control: severity 1128545 serious
control: severity 1128548 serious
control: severity 1128549 serious
control: severity 1128551 serious
control: severity 1128615 serious
control: severity 1128678 serious
control: severity 1128680 serious
control: severity 1128681 serious
control: severity 1128697 serious
control: severity 1128736 serious
control: severity 1128737 serious
control: severity 1128738 serious
control: severity 1128741 serious
control: severity 1128742 serious
control: severity 1128743 serious
control: severity 1128750 serious
control: severity 1128757 serious
control: severity 1128761 serious
control: severity 1128763 serious
control: severity 1128764 serious
control: severity 1128875 serious
control: severity 1128952 serious
control: severity 1128542 serious
control: severity 1128679 serious
control: severity 1128682 serious
control: severity 1128744 serious
control: severity 1128748 serious
control: severity 1128867 serious

Hi,

With the upload of glibc 2.43 to unstable, the packages now FTBFS in
unstable, hence upgrading the severity to serious.

Note that as a quick workaround, it is possible to roll back to C/C++17
standard using -std=c17, -std=gnu17, std=c++17 or std=gnu++17. This was
the default up to GCC 14, and GCC 15 changed it to C/C23.

Regards
Aurelien

#1128743#25
Date:
2026-09-10 04:34:09 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
pyinstaller, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1128743@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Soren Stoutner <soren@debian.org> (supplier of updated pyinstaller package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Wed, 09 Sep 2026 18:43:22 -0700
Source: pyinstaller
Architecture: source
Version: 6.22.2+ds-1
Distribution: unstable
Urgency: medium
Maintainer: Debian Python Team <team+python@tracker.debian.org>
Changed-By: Soren Stoutner <soren@debian.org>
Closes: 1128743
Changes:
 pyinstaller (6.22.2+ds-1) unstable; urgency=medium
 .
   * New upstream release (closes: #1128743).
   * debian/source/lintian-overrides:  Update
     "uses-deprecated-python-stdlib distutils" tags.
   * debian/tests/upstream-tests:  Stop disabling test_multiprocessing.py.
   * debian/control:
     - Disable Build-Depends on "python3-ipython <!nocheck>" as the test is
       currently broken.
     - Bump debhelper-compat from version 13 to 14, dropping the now-unnecessary
       ${misc:Depends}, ${python3:Depends}, and ${shlibs:Depends}.
   * debian/copyright:  Update for new upstream release.
   * debian/lrc.config:  Update for new upstream release.
   * debian/rules:  Stop disabling test_multiprocessing.py.
Checksums-Sha1:
 77f7ce85680d2cd4e81c44ec077a5b529ee49436 4075 pyinstaller_6.22.2+ds-1.dsc
 99b95d6254e73e47f606caf23f8e0d2641a75adb 1920016 pyinstaller_6.22.2+ds.orig.tar.xz
 695bc162162a41e0884085a08d70860019054faa 18144 pyinstaller_6.22.2+ds-1.debian.tar.xz
 7bbe11b12fb8638206077992412e86d3b3a6d928 24471 pyinstaller_6.22.2+ds-1_amd64.buildinfo
Checksums-Sha256:
 a83daf8e8516b9ef9bcb36e7faf50540449bbbef0a1002ff5102dead2f2aef51 4075 pyinstaller_6.22.2+ds-1.dsc
 a6fe0bd3787197a29bb765f56e0bdc0638873a1c98f59670de983b8c924f49f8 1920016 pyinstaller_6.22.2+ds.orig.tar.xz
 e90b56a99d8251159b8568590645f8c9ff02ae6cc1555138e632b2c9a473ffdd 18144 pyinstaller_6.22.2+ds-1.debian.tar.xz
 9d3e4528dc3b4ef85b02537fad69ea9755fc95a11c334382d02f4a4363143ff3 24471 pyinstaller_6.22.2+ds-1_amd64.buildinfo
Files:
 ecc4faec568c2e182db86163b34d521b 4075 python optional pyinstaller_6.22.2+ds-1.dsc
 2089b2f88c3502681097b40cd75bb2a0 1920016 python optional pyinstaller_6.22.2+ds.orig.tar.xz
 024b32b776ec9072226b96224ef6041c 18144 python optional pyinstaller_6.22.2+ds-1.debian.tar.xz
 961adbe530dbebcd69a7d0ef7d86d1ca 24471 python optional pyinstaller_6.22.2+ds-1_amd64.buildinfo
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCgAdFiEEJKVN2yNUZnlcqOI+wufLJ66wtgMFAmqiLvEACgkQwufLJ66w
tgNJ2A//Wg5KPmF+MNzAd/bBLC4D/XkoGqSrWx885OiEMYzzNfvoyeb27hNdqZ74
KGSKFdbxNrg9pe38KZ9HWjiQD3b3uWXD7cxE30nCdSO1g+Rwck6EbGYsviBmlfIB
XapN9SpRWriuaggQXAnwM3f5S5hrqOpRtqKAtC52LmJUVwqA/r5t7apJq/dlA4cY
Q90ka0wo6vJv390MlgbxWjD2PYcCAWkMU8ck3718dL4Sm/pnJc6zETyRxtcn2Rs6
xTh37TS65TUqkptr0AuYkFIk3G06155pJkfNwtPkQdU5ZqZLFo0wFPeR6NQcLrSx
ryzyc4BhFAwJ6ecRQJt7wqKC6UFh5MMCROatwhP/7zrZ/LMDKWtlrizz7sTj1+F7
22v5BV2swKRrfJqEKrc/6KTjc+mVfiqEhNa8WaZdPXXbC1tjwLLXDvUr8SMj5W+7
0+5j0XXKqkvPMf7jzlZKM9q0+/tzHaMEEZADFLq9xR6nvFp5nhySOd9p3iY+JWxB
PP8vNTgYIXFP/M+cVcynZ59hBZuOJatGHImPxQ6fGvli9z6xSAi9xljT7I/7aTrY
SAgOVLs4wKMLQO+0dO4j0lhoMaJbU6sDV9haBMKVdkAVRvxrjSzI0xsdzTLNCcS9
PRB8FTrarmZEPMKssMNPUBdKO4dsRd+LuM6qKYpF44AA7tF/U+c=
=Bhss
-----END PGP SIGNATURE-----