#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-08-10 12:53:20 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