1# Configure a GNU-like replacement for <string.h>. 2 3# Copyright (C) 2007-2021 Free Software Foundation, Inc. 4# This file is free software; the Free Software Foundation 5# gives unlimited permission to copy and/or distribute it, 6# with or without modifications, as long as this notice is preserved. 7 8# serial 32 9 10# Written by Paul Eggert. 11 12AC_DEFUN_ONCE([gl_STRING_H], 13[ 14 dnl Ensure to expand the default settings once only, before all statements 15 dnl that occur in other macros. 16 AC_REQUIRE([gl_STRING_H_DEFAULTS]) 17 gl_NEXT_HEADERS([string.h]) 18 19 dnl Check for declarations of anything we want to poison if the 20 dnl corresponding gnulib module is not in use, and which is not 21 dnl guaranteed by C89. 22 gl_WARN_ON_USE_PREPARE([[#include <string.h> 23 ]], 24 [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul 25 strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r 26 strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) 27 28 AC_REQUIRE([AC_C_RESTRICT]) 29]) 30 31# gl_STRING_MODULE_INDICATOR([modulename]) 32# sets the shell variable that indicates the presence of the given module 33# to a C preprocessor expression that will evaluate to 1. 34# This macro invocation must not occur in macros that are AC_REQUIREd. 35AC_DEFUN([gl_STRING_MODULE_INDICATOR], 36[ 37 dnl Ensure to expand the default settings once only. 38 gl_STRING_H_REQUIRE_DEFAULTS 39 gl_MODULE_INDICATOR_SET_VARIABLE([$1]) 40 dnl Define it also as a C macro, for the benefit of the unit tests. 41 gl_MODULE_INDICATOR_FOR_TESTS([$1]) 42]) 43 44# Initializes the default values for AC_SUBSTed shell variables. 45# This macro must not be AC_REQUIREd. It must only be invoked, and only 46# outside of macros or in macros that are not AC_REQUIREd. 47AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS], 48[ 49 m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [ 50 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO]) 51 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL]) 52 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL]) 53 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR]) 54 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM]) 55 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY]) 56 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR]) 57 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR]) 58 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY]) 59 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY]) 60 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL]) 61 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP]) 62 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT]) 63 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP]) 64 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN]) 65 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK]) 66 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP]) 67 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR]) 68 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR]) 69 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R]) 70 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN]) 71 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN]) 72 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR]) 73 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR]) 74 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR]) 75 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP]) 76 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP]) 77 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP]) 78 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR]) 79 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN]) 80 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK]) 81 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN]) 82 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP]) 83 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R]) 84 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR]) 85 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R]) 86 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP]) 87 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP]) 88 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP]) 89 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL]) 90 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP]) 91 dnl Support Microsoft deprecated alias function names by default. 92 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1]) 93 gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1]) 94 ]) 95 m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS]) 96 AC_REQUIRE([gl_STRING_H_DEFAULTS]) 97]) 98 99AC_DEFUN([gl_STRING_H_DEFAULTS], 100[ 101 HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) 102 dnl Assume proper GNU behavior unless another module says otherwise. 103 HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) 104 HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) 105 HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) 106 HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) 107 HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) 108 HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) 109 HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) 110 HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) 111 HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) 112 HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) 113 HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) 114 HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) 115 HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) 116 HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) 117 HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) 118 HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) 119 HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) 120 HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) 121 HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) 122 HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) 123 HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) 124 HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) 125 HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) 126 REPLACE_FFSLL=0; AC_SUBST([REPLACE_FFSLL]) 127 REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) 128 REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) 129 REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) 130 REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) 131 REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) 132 REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) 133 REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) 134 REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) 135 REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) 136 REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) 137 REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) 138 REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) 139 REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) 140 REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) 141 REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) 142 UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) 143]) 144