xref: /Universal-ctags/m4/string_h.m4 (revision a939078a69878851c19820eb92e6cb95ba429546)
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