Mercurial > hg > octave-nkf > gnulib-hg
annotate m4/strtok_r.m4 @ 13160:0b76eb201e75
strtok_r: Improve idiom.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Mon, 05 Apr 2010 12:53:27 +0200 |
parents | c2cbabec01dd |
children | d352958def8f |
rev | line source |
---|---|
13160 | 1 # strtok_r.m4 serial 10 |
2 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2010 Free Software Foundation, | |
12559
c2cbabec01dd
update nearly all FSF copyright year lists to include 2010
Jim Meyering <meyering@redhat.com>
parents:
11961
diff
changeset
|
3 dnl Inc. |
5611
87c42e194f4a
Use an all-permissive copyright notice, recommended by RMS.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5434
diff
changeset
|
4 dnl This file is free software; the Free Software Foundation |
87c42e194f4a
Use an all-permissive copyright notice, recommended by RMS.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5434
diff
changeset
|
5 dnl gives unlimited permission to copy and/or distribute it, |
87c42e194f4a
Use an all-permissive copyright notice, recommended by RMS.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5434
diff
changeset
|
6 dnl with or without modifications, as long as this notice is preserved. |
5434 | 7 |
8 AC_DEFUN([gl_FUNC_STRTOK_R], | |
9 [ | |
9264
a1355710e330
Rename string_.h to string.in.h.
Bruno Haible <bruno@clisp.org>
parents:
8814
diff
changeset
|
10 dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'. |
8814
04b21457982b
Ensure AC_C_RESTRICT is invoked.
Bruno Haible <bruno@clisp.org>
parents:
7982
diff
changeset
|
11 AC_REQUIRE([AC_C_RESTRICT]) |
04b21457982b
Ensure AC_C_RESTRICT is invoked.
Bruno Haible <bruno@clisp.org>
parents:
7982
diff
changeset
|
12 |
7982
6b61aba76343
Enforce ordering constraints between gl_HEADER_STRING_H_DEFAULTS and the
Bruno Haible <bruno@clisp.org>
parents:
7944
diff
changeset
|
13 AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) |
11960
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
14 AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
15 AC_CHECK_FUNCS([strtok_r]) |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
16 if test $ac_cv_func_strtok_r = yes; then |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
17 dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
18 dnl when the second argument to strtok_r is a constant string that has |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
19 dnl exactly one byte and compiling with optimization. This bug is, for |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
20 dnl example, present in the glibc 2.7-18 package in Debian "lenny". |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
21 dnl See <http://sources.redhat.com/bugzilla/show_bug.cgi?id=5614>. |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
22 AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works], |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
23 [AC_RUN_IFELSE( |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
24 [AC_LANG_PROGRAM([[ |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
25 #ifndef __OPTIMIZE__ |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
26 # define __OPTIMIZE__ 1 |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
27 #endif |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
28 #undef __OPTIMIZE_SIZE__ |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
29 #undef __NO_INLINE__ |
11961
53f6a3c1d867
For NULL, include <stdlib.h>, not <stdio.h>.
Bruno Haible <bruno@clisp.org>
parents:
11960
diff
changeset
|
30 #include <stdlib.h> |
11960
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
31 #include <string.h> |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
32 ]], |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
33 [[char delimiters[] = "xxxxxxxx"; |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
34 char *save_ptr = (char *) 0xd0d0; |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
35 strtok_r (delimiters, "x", &save_ptr); |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
36 strtok_r (NULL, "x", &save_ptr); |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
37 return 0; |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
38 ]]) |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
39 ], |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
40 [gl_cv_func_strtok_r_works=yes], |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
41 [gl_cv_func_strtok_r_works=no], |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
42 [ |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
43 changequote(,)dnl |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
44 case "$host_os" in |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
45 # Guess no on glibc systems. |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
46 *-gnu*) gl_cv_func_strtok_r_works="guessing no";; |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
47 *) gl_cv_func_strtok_r_works="guessing yes";; |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
48 esac |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
49 changequote([,])dnl |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
50 ]) |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
51 ]) |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
52 case "$gl_cv_func_strtok_r_works" in |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
53 *no) |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
54 dnl We could set REPLACE_STRTOK_R=1 and AC_LIBOBJ([strtok_r]) here, |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
55 dnl but it's only the macro version in <bits/string2.h> which is wrong. |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
56 dnl The code compiled into libc is fine. |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
57 UNDEFINE_STRTOK_R=1 |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
58 ;; |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
59 esac |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
60 else |
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
61 AC_LIBOBJ([strtok_r]) |
13160 | 62 gl_PREREQ_STRTOK_R |
11960
bc6846876d71
Work around a glibc bug in strtok_r.
Ben Pfaff <blp@gnu.org>
parents:
11007
diff
changeset
|
63 fi |
11007
f6cba5a556ce
many *.m4 files: improve m4 quoting
Jim Meyering <meyering@redhat.com>
parents:
9264
diff
changeset
|
64 AC_CHECK_DECLS_ONCE([strtok_r]) |
7944
a1d177cd9523
* doc/gnulib-tool.texi (Initial import): Update to match current
Paul Eggert <eggert@cs.ucla.edu>
parents:
7099
diff
changeset
|
65 if test $ac_cv_have_decl_strtok_r = no; then |
a1d177cd9523
* doc/gnulib-tool.texi (Initial import): Update to match current
Paul Eggert <eggert@cs.ucla.edu>
parents:
7099
diff
changeset
|
66 HAVE_DECL_STRTOK_R=0 |
a1d177cd9523
* doc/gnulib-tool.texi (Initial import): Update to match current
Paul Eggert <eggert@cs.ucla.edu>
parents:
7099
diff
changeset
|
67 fi |
5434 | 68 ]) |
69 | |
7944
a1d177cd9523
* doc/gnulib-tool.texi (Initial import): Update to match current
Paul Eggert <eggert@cs.ucla.edu>
parents:
7099
diff
changeset
|
70 # Prerequisites of lib/strtok_r.c. |
5434 | 71 AC_DEFUN([gl_PREREQ_STRTOK_R], [ |
8814
04b21457982b
Ensure AC_C_RESTRICT is invoked.
Bruno Haible <bruno@clisp.org>
parents:
7982
diff
changeset
|
72 : |
5434 | 73 ]) |