]>
Commit | Line | Data |
---|---|---|
053cfcdd | 1 | # getline.m4 serial 26 |
15c69261 | 2 | |
053cfcdd | 3 | dnl Copyright (C) 1998-2003, 2005-2007, 2009-2013 Free Software Foundation, |
15c69261 YB |
4 | dnl Inc. |
5 | dnl | |
6 | dnl This file is free software; the Free Software Foundation | |
7 | dnl gives unlimited permission to copy and/or distribute it, | |
8 | dnl with or without modifications, as long as this notice is preserved. | |
9 | ||
10 | AC_PREREQ([2.59]) | |
11 | ||
12 | dnl See if there's a working, system-supplied version of the getline function. | |
13 | dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems | |
14 | dnl have a function by that name in -linet that doesn't have anything | |
15 | dnl to do with the function we need. | |
16 | AC_DEFUN([gl_FUNC_GETLINE], | |
17 | [ | |
18 | AC_REQUIRE([gl_STDIO_H_DEFAULTS]) | |
19 | ||
20 | dnl Persuade glibc <stdio.h> to declare getline(). | |
21 | AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) | |
22 | ||
23 | AC_CHECK_DECLS_ONCE([getline]) | |
24 | ||
25 | gl_getline_needs_run_time_check=no | |
26 | AC_CHECK_FUNC([getline], | |
27 | [dnl Found it in some library. Verify that it works. | |
28 | gl_getline_needs_run_time_check=yes], | |
29 | [am_cv_func_working_getline=no]) | |
30 | if test $gl_getline_needs_run_time_check = yes; then | |
31 | AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], | |
32 | [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data | |
33 | AC_RUN_IFELSE([AC_LANG_SOURCE([[ | |
34 | # include <stdio.h> | |
35 | # include <stdlib.h> | |
36 | # include <string.h> | |
37 | int main () | |
38 | { | |
39 | FILE *in = fopen ("./conftest.data", "r"); | |
40 | if (!in) | |
41 | return 1; | |
42 | { | |
43 | /* Test result for a NULL buffer and a zero size. | |
44 | Based on a test program from Karl Heuer. */ | |
45 | char *line = NULL; | |
46 | size_t siz = 0; | |
47 | int len = getline (&line, &siz, in); | |
48 | if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) | |
053cfcdd | 49 | return 2; |
15c69261 YB |
50 | } |
51 | { | |
52 | /* Test result for a NULL buffer and a non-zero size. | |
53 | This crashes on FreeBSD 8.0. */ | |
54 | char *line = NULL; | |
55 | size_t siz = (size_t)(~0) / 4; | |
56 | if (getline (&line, &siz, in) == -1) | |
053cfcdd | 57 | return 3; |
15c69261 YB |
58 | } |
59 | return 0; | |
60 | } | |
61 | ]])], [am_cv_func_working_getline=yes] dnl The library version works. | |
62 | , [am_cv_func_working_getline=no] dnl The library version does NOT work. | |
63 | , dnl We're cross compiling. Assume it works on glibc2 systems. | |
64 | [AC_EGREP_CPP([Lucky GNU user], | |
65 | [ | |
66 | #include <features.h> | |
67 | #ifdef __GNU_LIBRARY__ | |
053cfcdd | 68 | #if (__GLIBC__ >= 2) && !defined __UCLIBC__ |
15c69261 YB |
69 | Lucky GNU user |
70 | #endif | |
71 | #endif | |
72 | ], | |
053cfcdd VS |
73 | [am_cv_func_working_getline="guessing yes"], |
74 | [am_cv_func_working_getline="guessing no"])] | |
15c69261 YB |
75 | )]) |
76 | fi | |
77 | ||
78 | if test $ac_cv_have_decl_getline = no; then | |
79 | HAVE_DECL_GETLINE=0 | |
80 | fi | |
81 | ||
053cfcdd VS |
82 | case "$am_cv_func_working_getline" in |
83 | *no) | |
84 | dnl Set REPLACE_GETLINE always: Even if we have not found the broken | |
85 | dnl getline function among $LIBS, it may exist in libinet and the | |
86 | dnl executable may be linked with -linet. | |
87 | REPLACE_GETLINE=1 | |
88 | ;; | |
89 | esac | |
15c69261 YB |
90 | ]) |
91 | ||
92 | # Prerequisites of lib/getline.c. | |
93 | AC_DEFUN([gl_PREREQ_GETLINE], | |
94 | [ | |
053cfcdd | 95 | : |
15c69261 | 96 | ]) |