[Debian-astro-maintainers] Bug#1069909: dcraw: FTBFS due to conflicting memmem prototype

Steve Langasek steve.langasek at ubuntu.com
Fri Apr 26 23:01:22 BST 2024


Package: dcraw
Version: 9.28-5
Severity: normal
Tags: patch
User: ubuntu-devel at lists.ubuntu.com
Usertags: origin-ubuntu noble ubuntu-patch

Hi Filip,

In Ubuntu, dcraw was failing to build because of a local implementation of
memmem() whose prototype conflicts with the glibc prototype:

[...]
gcc -DPACKAGE_NAME=\"dcraw\" -DPACKAGE_TARNAME=\"dcraw\" -DPACKAGE_VERSION=\"9.28\" -DPACKAGE_STRING=\"dcraw\ 9.28\" -DPACKAGE_BUGREPORT=\"hroch at physics.muni.cz\" -DPACKAGE_URL=\"\" -DPACKAGE=\"dcraw\" -DVERSION=\"9.28\" -DHAVE_LIBM=1 -DHAVE_STDIO_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_STRINGS_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_UNISTD_H=1 -DSTDC_HEADERS=1 -DHAVE_JPEGLIB_H=1 -DHAVE_LIBJPEG=1 -DHAVE_LCMS2_H=1 -DHAVE_LIBLCMS2=1 -I.   -Wdate-time -D_FORTIFY_SOURCE=3  -g -O2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -ffile-prefix-map=/<<PKGBUILDDIR>>=. -flto=auto -ffat-lto-objects -fstack-protector-strong -fstack-clash-protection -Wformat -Werror=format-security -fcf-protection -fdebug-prefix-map=/<<PKGBUILDDIR>>=/usr/src/dcraw-9.28-5build1 -O4 -c -o parse.o parse.c
[...]
parse.c:1216:7: error: conflicting types for ‘memmem’; have ‘char *(char *, size_t,  char *, size_t)’ {aka ‘char *(char *, long unsigned int,  char *, long unsigned int)’}
 1216 | char *memmem (char *haystack, size_t haystacklen,
      |       ^~~~~~
In file included from parse.c:13:
/usr/include/string.h:389:14: note: previous declaration of ‘memmem’ with type ‘void *(const void *, size_t,  const void *, size_t)’ {aka ‘void *(const void *, long unsigned int,  const void *, long unsigned int)’}
  389 | extern void *memmem (const void *__haystack, size_t __haystacklen,
      |              ^~~~~~
[...]

  (https://launchpad.net/ubuntu/+source/dcraw/9.28-5build1/+build/28000832)

This is not currently a build failure in Debian, but that is strictly a
question of compiler behavior, and this may start to FTBFS in Debian at some
later point.

And anyway, there's no reason to reimplement memmem() here, it's probably
less performant than the version provided by glibc.

We have applied the attached patch in Ubuntu to fix the build failure.  I
think it would be a good idea to apply it in Debian as well.

Thanks for considering,
-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
Ubuntu Developer                                   https://www.debian.org/
slangasek at ubuntu.com                                     vorlon at debian.org
-------------- next part --------------
diff -Nru dcraw-9.28/debian/patches/remove-duplicate-memmem.patch dcraw-9.28/debian/patches/remove-duplicate-memmem.patch
--- dcraw-9.28/debian/patches/remove-duplicate-memmem.patch	1969-12-31 16:00:00.000000000 -0800
+++ dcraw-9.28/debian/patches/remove-duplicate-memmem.patch	2024-04-09 16:49:27.000000000 -0700
@@ -0,0 +1,28 @@
+Description: don't reimplement memmem()
+ memmem() is implemented in glibc, don't have a redundant duplicate
+ implementation with a different prototype.
+Author: Steve Langasek <steve.langasek at canonical.com>
+Last-Update: 2024-04-09
+Forwarded: no
+
+Index: dcraw-9.28/parse.c
+===================================================================
+--- dcraw-9.28.orig/parse.c
++++ dcraw-9.28/parse.c
+@@ -1213,16 +1213,6 @@
+   }
+ }
+ 
+-char *memmem (char *haystack, size_t haystacklen,
+-              char *needle, size_t needlelen)
+-{
+-  char *c;
+-  for (c = haystack; c <= haystack + haystacklen - needlelen; c++)
+-    if (!memcmp (c, needle, needlelen))
+-      return c;
+-  return NULL;
+-}
+-
+ /*
+    Identify which camera created this file, and set global variables
+    accordingly.	 Return nonzero if the file cannot be decoded.
diff -Nru dcraw-9.28/debian/patches/series dcraw-9.28/debian/patches/series
--- dcraw-9.28/debian/patches/series	2024-03-26 02:42:04.000000000 -0700
+++ dcraw-9.28/debian/patches/series	2024-04-09 16:48:07.000000000 -0700
@@ -8,3 +8,4 @@
 iowrap.diff
 0009-missing_headers.patch
 0010-Fuji-headers.patch
+remove-duplicate-memmem.patch


More information about the Debian-astro-maintainers mailing list