Dear Maintainer, goxel 0.15.1-1 fails to build from source with glibc >= 2.43 because strrchr() is a const-preserving macro under C23 and _GNU_SOURCE. Passing a const char * argument returns const char *, triggering -Wdiscarded-qualifiers when assigned to a non-const char *. Because SConstruct defaults to werror=True (-Werror), this leads to a fatal build error. Three locations in the codebase are affected: 1. src/utils.c:121 in str_replace_ext(): pos assigned from strrchr(str, '.'). 2. src/utils/path.c:32, 54 in path_dirname() and path_basename(): sep assigned from strrchr(path, '/'). 3. ext_src/quickjs/quickjs.c:27267 in js_default_module_normalize_name(): p assigned from strrchr(base_name, '/'). Since p is modified later (*p = '\0'), introducing a dedicated const char *p_base avoids modifying downstream mutable operations on filename. Additionally, passing werror=0 to scons in debian/rules prevents toolchain diagnostic updates from breaking distribution package builds. This issue is tracked in Ubuntu at: https://bugs.launchpad.net/ubuntu/+source/goxel/+bug/2169229 The patch below resolves the FTBFS: --- a/src/utils.c +++ b/src/utils.c @@ -116,7 +116,7 @@ bool str_replace_ext(const char *str, const char *new_ext, char *out, size_t out_size) { - char *pos; + const char *pos; assert(str && new_ext && out); pos = strrchr(str, '.'); if (!pos) return false; --- a/src/utils/path.c +++ b/src/utils/path.c @@ -24,7 +24,7 @@ char *path_dirname(const char *path, char *out, size_t size) { - char *sep; + const char *sep; int len; assert(path); @@ -46,7 +46,7 @@ char *path_basename(const char *path, char *out, size_t size) { - char *sep; + const char *sep; int len; assert(path); --- a/ext_src/quickjs/quickjs.c +++ b/ext_src/quickjs/quickjs.c @@ -27256,6 +27256,7 @@ const char *name) { char *filename, *p; + const char *p_base; const char *r; int len; @@ -27264,9 +27265,9 @@ return js_strdup(ctx, name); } - p = strrchr(base_name, '/'); - if (p) - len = p - base_name; + p_base = strrchr(base_name, '/'); + if (p_base) + len = p_base - base_name; else len = 0; --- a/debian/rules +++ b/debian/rules @@ -19,7 +19,7 @@ rm -rf .sconsign.dblite override_dh_auto_build: - scons cycles=0 debug=0 clang=1 --jobs=$(NUMJOBS) --no-cache + scons cycles=0 debug=0 clang=1 werror=0 --jobs=$(NUMJOBS) --no-cache cp -a ./osx/goxel/goxel/Assets.xcassets/AppIcon.appiconset/64.png ./goxel.png override_dh_installman: