public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r12-9326] fixincludes: Declare memmem if it's not declared in system headers [PR109293]
@ 2023-03-28 10:01 Xi Ruoyao
  0 siblings, 0 replies; only message in thread
From: Xi Ruoyao @ 2023-03-28 10:01 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:743088c3c7c670f180978dd7b59a57fd9626c5a2

commit r12-9326-g743088c3c7c670f180978dd7b59a57fd9626c5a2
Author: Xi Ruoyao <xry111@xry111.site>
Date:   Tue Mar 28 01:48:02 2023 +0800

    fixincludes: Declare memmem if it's not declared in system headers [PR109293]
    
    memmem is not POSIX so the system may lack it.  Then libiberty will
    provide an implementation, but it's a "supplemental function" and not
    declared in libiberty.h.  We need to declare the prototype to use it
    then.
    
    See libiberty doc at
    https://gcc.gnu.org/onlinedocs/libiberty/Supplemental-Functions.html.
    
    Tested by bootstrapping GCC in the following container environments on
    x86_64-linux-gnu:
    
    1. "Vanilla" system with memmem in Glibc.
    2. memmem removed from string.h.
    3. memmem removed from both string.h and libc.so.
    
    For 3, also verified that memmem from libiberty is linked into fixincl
    executable.
    
    Note that the backport does not contain a complete regeneration of
    configure and config.h.in (attempting such regeneration resulted in all
    the USED_FOR_TARGET conditional disappearing; this already happened in
    trunk at r13-2200).
    
    fixincludes/ChangeLog:
    
            PR other/109293
            * configure.ac (AC_CHECK_DECLS): Add memmem.
            * configure: Regenerate.
            * config.h.in: Regenerate.
            * system.h (memmem): Declare if HAVE_DECL_MEMMEM is zero.
    
    (cherry picked from commit 21c74b6ea41d21ef96813b34bfa55c51a82d6c99)

Diff:
---
 fixincludes/config.h.in  |  4 ++++
 fixincludes/configure    | 10 ++++++++++
 fixincludes/configure.ac |  2 +-
 fixincludes/system.h     |  4 ++++
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/fixincludes/config.h.in b/fixincludes/config.h.in
index 3f6cf1e574e..9792fdb2419 100644
--- a/fixincludes/config.h.in
+++ b/fixincludes/config.h.in
@@ -138,6 +138,10 @@
 #endif
 
 
+/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't.
+   */
+#undef HAVE_DECL_MEMMEM
+
 /* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
    you don't. */
 #ifndef USED_FOR_TARGET
diff --git a/fixincludes/configure b/fixincludes/configure
index 6e2d67b655b..0d5cd6967ca 100755
--- a/fixincludes/configure
+++ b/fixincludes/configure
@@ -5043,6 +5043,16 @@ fi
 cat >>confdefs.h <<_ACEOF
 #define HAVE_DECL_VASPRINTF $ac_have_decl
 _ACEOF
+ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default"
+if test "x$ac_cv_have_decl_memmem" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_MEMMEM $ac_have_decl
+_ACEOF
 
 ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default"
 if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then :
diff --git a/fixincludes/configure.ac b/fixincludes/configure.ac
index 14813b910f1..ef2227e3c93 100644
--- a/fixincludes/configure.ac
+++ b/fixincludes/configure.ac
@@ -88,7 +88,7 @@ define(fixincludes_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
   fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
   putchar_unlocked putc_unlocked)
 AC_CHECK_FUNCS(fixincludes_UNLOCKED_FUNCS)
-AC_CHECK_DECLS([abort, asprintf, basename(char *), errno, vasprintf])
+AC_CHECK_DECLS([abort, asprintf, basename(char *), errno, vasprintf, memmem])
 AC_CHECK_DECLS(m4_split(m4_normalize(fixincludes_UNLOCKED_FUNCS)))
 
 # Checks for typedefs, structures, and compiler characteristics.
diff --git a/fixincludes/system.h b/fixincludes/system.h
index dca5d57b2e3..687fb2e2025 100644
--- a/fixincludes/system.h
+++ b/fixincludes/system.h
@@ -209,6 +209,10 @@ extern int errno;
 extern void abort (void);
 #endif
 
+#if defined (HAVE_DECL_MEMMEM) && !HAVE_DECL_MEMMEM
+extern void *memmem (const void *, size_t, const void *, size_t);
+#endif
+
 #if HAVE_SYS_STAT_H
 # include <sys/stat.h>
 #endif

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-03-28 10:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-28 10:01 [gcc r12-9326] fixincludes: Declare memmem if it's not declared in system headers [PR109293] Xi Ruoyao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).