Imported Upstream version 0.18.3.2
[platform/upstream/gettext.git] / gettext-tools / gnulib-m4 / terminfo.m4
1 # terminfo.m4 serial 3 (gettext-0.18)
2 dnl Copyright (C) 2000-2002, 2006, 2008 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 dnl From Bruno Haible.
8
9 AC_DEFUN([gl_TERMINFO],
10 [
11   AC_REQUIRE([gl_TERMINFO_BODY])
12   if test $gl_cv_terminfo_tparam = no && test $gl_cv_terminfo_tparm = no; then
13     AC_LIBOBJ([tparm])
14   fi
15   case "$gl_cv_terminfo" in
16     no*)
17       case "$gl_cv_termcap" in
18         no*)
19           AC_LIBOBJ([tputs])
20           ;;
21       esac
22       ;;
23   esac
24 ])
25
26 AC_DEFUN([gl_TERMINFO_BODY],
27 [
28   dnl Some systems have setupterm(), tigetnum(), tigetstr(), tigetflag(),
29   dnl tputs(), tgoto() in the same library as tgetent(), tgetnum(), tgetstr(),
30   dnl tgetflag(), e.g. Linux (in libncurses) or Solaris (in libtermcap =
31   dnl libncurses).
32   dnl Some systems have them in a different library, e.g. OSF/1 (in libcurses,
33   dnl not in libtermcap) or HP-UX (in libxcurses, not in libtermcap).
34   dnl Some systems, like NetBSD or BeOS, don't have these functions at all;
35   dnl they have only a libtermcap.
36   dnl Some systems, like BeOS, use GNU termcap, which has tparam() instead of
37   dnl tparm().
38   dnl Some systems, like mingw, have nothing at all.
39
40   dnl Some people want to avoid these libraries, in special situations such
41   dnl as when cross-compiling.
42   AC_REQUIRE([gl_CURSES])
43
44   dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
45   AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
46   AC_REQUIRE([AC_LIB_RPATH])
47
48   if test "$gl_curses_allowed" != no; then
49
50     dnl Search for libncurses and define LIBNCURSES, LTLIBNCURSES and INCNCURSES
51     dnl accordingly.
52     AC_LIB_LINKFLAGS_BODY([ncurses])
53
54     dnl Search for libtermcap and define LIBTERMCAP, LTLIBTERMCAP and INCTERMCAP
55     dnl accordingly.
56     AC_LIB_LINKFLAGS_BODY([termcap])
57
58     dnl Search for libxcurses and define LIBXCURSES, LTLIBXCURSES and INCXCURSES
59     dnl accordingly.
60     AC_LIB_LINKFLAGS_BODY([xcurses])
61
62     dnl Search for libcurses and define LIBCURSES, LTLIBCURSES and INCCURSES
63     dnl accordingly.
64     AC_LIB_LINKFLAGS_BODY([curses])
65
66   else
67
68     LIBNCURSES=
69     LTLIBNCURSES=
70     INCNCURSES=
71
72     LIBTERMCAP=
73     LTLIBTERMCAP=
74     INCTERMCAP=
75
76     LIBXCURSES=
77     LTLIBXCURSES=
78     INCXCURSES=
79
80     LIBCURSES=
81     LTLIBCURSES=
82     INCCURSES=
83
84   fi
85
86   dnl When searching for the terminfo functions, prefer libtermcap over
87   dnl libxcurses and libcurses, because it is smaller.
88   AC_CACHE_CHECK([where terminfo library functions come from], [gl_cv_terminfo], [
89     gl_cv_terminfo="not found, consider installing GNU ncurses"
90     AC_TRY_LINK([extern
91       #ifdef __cplusplus
92       "C"
93       #endif
94       int setupterm (const char *, int, int *);
95       extern
96       #ifdef __cplusplus
97       "C"
98       #endif
99       int tigetnum (const char *);
100       extern
101       #ifdef __cplusplus
102       "C"
103       #endif
104       int tigetflag (const char *);
105       extern
106       #ifdef __cplusplus
107       "C"
108       #endif
109       const char * tigetstr (const char *);
110       ], [return setupterm ("xterm", 0, (int *)0)
111                  + tigetnum ("colors")
112                  + tigetflag ("hc") + * tigetstr("oc");],
113       [gl_cv_terminfo=libc])
114     if test "$gl_cv_terminfo" != libc; then
115       gl_save_LIBS="$LIBS"
116       LIBS="$LIBS $LIBNCURSES"
117       AC_TRY_LINK([extern
118         #ifdef __cplusplus
119         "C"
120         #endif
121         int setupterm (const char *, int, int *);
122         extern
123         #ifdef __cplusplus
124         "C"
125         #endif
126         int tigetnum (const char *);
127         extern
128         #ifdef __cplusplus
129         "C"
130         #endif
131         int tigetflag (const char *);
132         extern
133         #ifdef __cplusplus
134         "C"
135         #endif
136         const char * tigetstr (const char *);
137         ], [return setupterm ("xterm", 0, (int *)0)
138                    + tigetnum ("colors")
139                    + tigetflag ("hc") + * tigetstr("oc");],
140         [gl_cv_terminfo=libncurses])
141       LIBS="$gl_save_LIBS"
142       if test "$gl_cv_terminfo" != libncurses; then
143         gl_save_LIBS="$LIBS"
144         LIBS="$LIBS $LIBTERMCAP"
145         AC_TRY_LINK([extern
146           #ifdef __cplusplus
147           "C"
148           #endif
149           int setupterm (const char *, int, int *);
150           extern
151           #ifdef __cplusplus
152           "C"
153           #endif
154           int tigetnum (const char *);
155           extern
156           #ifdef __cplusplus
157           "C"
158           #endif
159           int tigetflag (const char *);
160           extern
161           #ifdef __cplusplus
162           "C"
163           #endif
164           const char * tigetstr (const char *);
165           ], [return setupterm ("xterm", 0, (int *)0)
166                      + tigetnum ("colors")
167                      + tigetflag ("hc") + * tigetstr("oc");],
168           [gl_cv_terminfo=libtermcap])
169         LIBS="$gl_save_LIBS"
170         if test "$gl_cv_terminfo" != libtermcap; then
171           gl_save_LIBS="$LIBS"
172           LIBS="$LIBS $LIBXCURSES"
173           AC_TRY_LINK([extern
174             #ifdef __cplusplus
175             "C"
176             #endif
177             int setupterm (const char *, int, int *);
178             extern
179             #ifdef __cplusplus
180             "C"
181             #endif
182             int tigetnum (const char *);
183             extern
184             #ifdef __cplusplus
185             "C"
186             #endif
187             int tigetflag (const char *);
188             extern
189             #ifdef __cplusplus
190             "C"
191             #endif
192             const char * tigetstr (const char *);
193             ], [return setupterm ("xterm", 0, (int *)0)
194                        + tigetnum ("colors")
195                        + tigetflag ("hc") + * tigetstr("oc");],
196             [gl_cv_terminfo=libxcurses])
197           LIBS="$gl_save_LIBS"
198           if test "$gl_cv_terminfo" != libxcurses; then
199             gl_save_LIBS="$LIBS"
200             LIBS="$LIBS $LIBCURSES"
201             AC_TRY_LINK([extern
202               #ifdef __cplusplus
203               "C"
204               #endif
205               int setupterm (const char *, int, int *);
206               extern
207               #ifdef __cplusplus
208               "C"
209               #endif
210               int tigetnum (const char *);
211               extern
212               #ifdef __cplusplus
213               "C"
214               #endif
215               int tigetflag (const char *);
216               extern
217               #ifdef __cplusplus
218               "C"
219               #endif
220               const char * tigetstr (const char *);
221               ], [return setupterm ("xterm", 0, (int *)0)
222                          + tigetnum ("colors")
223                          + tigetflag ("hc") + * tigetstr("oc");],
224               [gl_cv_terminfo=libcurses])
225             LIBS="$gl_save_LIBS"
226           fi
227         fi
228       fi
229     fi
230   ])
231   case "$gl_cv_terminfo" in
232     libc)
233       LIBTERMINFO=
234       LTLIBTERMINFO=
235       INCTERMINFO=
236       ;;
237     libncurses)
238       LIBTERMINFO="$LIBNCURSES"
239       LTLIBTERMINFO="$LTLIBNCURSES"
240       INCTERMINFO="$INCNCURSES"
241       ;;
242     libtermcap)
243       LIBTERMINFO="$LIBTERMCAP"
244       LTLIBTERMINFO="$LTLIBTERMCAP"
245       INCTERMINFO="$INCTERMCAP"
246       ;;
247     libxcurses)
248       LIBTERMINFO="$LIBXCURSES"
249       LTLIBTERMINFO="$LTLIBXCURSES"
250       INCTERMINFO="$INCXCURSES"
251       ;;
252     libcurses)
253       LIBTERMINFO="$LIBCURSES"
254       LTLIBTERMINFO="$LTLIBCURSES"
255       INCTERMINFO="$INCCURSES"
256       ;;
257   esac
258   case "$gl_cv_terminfo" in
259     libc | libncurses | libtermcap | libxcurses | libcurses)
260       AC_DEFINE([HAVE_TERMINFO], 1,
261         [Define if setupterm(), tigetnum(), tigetstr(), tigetflag()
262          are among the termcap library functions.])
263       ;;
264     *)
265       dnl Use the termcap functions as a fallback.
266       AC_CACHE_CHECK([where termcap library functions come from], [gl_cv_termcap], [
267         gl_cv_termcap="not found, consider installing GNU ncurses"
268         AC_TRY_LINK([extern
269           #ifdef __cplusplus
270           "C"
271           #endif
272           int tgetent (char *, const char *);
273           ], [return tgetent ((char *) 0, "xterm");],
274           [gl_cv_termcap=libc])
275         if test "$gl_cv_termcap" != libc; then
276           gl_save_LIBS="$LIBS"
277           LIBS="$LIBS $LIBNCURSES"
278           AC_TRY_LINK([extern
279             #ifdef __cplusplus
280             "C"
281             #endif
282             int tgetent (char *, const char *);
283             ], [return tgetent ((char *) 0, "xterm");],
284             [gl_cv_termcap=libncurses])
285           LIBS="$gl_save_LIBS"
286           if test "$gl_cv_termcap" != libncurses; then
287             gl_save_LIBS="$LIBS"
288             LIBS="$LIBS $LIBTERMCAP"
289             AC_TRY_LINK([extern
290               #ifdef __cplusplus
291               "C"
292               #endif
293               int tgetent (char *, const char *);
294               ], [return tgetent ((char *) 0, "xterm");],
295               [gl_cv_termcap=libtermcap])
296             LIBS="$gl_save_LIBS"
297           fi
298         fi
299       ])
300       case "$gl_cv_termcap" in
301         libc)
302           LIBTERMINFO=
303           LTLIBTERMINFO=
304           INCTERMINFO=
305           ;;
306         libncurses)
307           LIBTERMINFO="$LIBNCURSES"
308           LTLIBTERMINFO="$LTLIBNCURSES"
309           INCTERMINFO="$INCNCURSES"
310           ;;
311         libtermcap)
312           LIBTERMINFO="$LIBTERMCAP"
313           LTLIBTERMINFO="$LTLIBTERMCAP"
314           INCTERMINFO="$INCTERMCAP"
315           ;;
316       esac
317       case "$gl_cv_termcap" in
318         libc | libncurses | libtermcap)
319           AC_DEFINE([HAVE_TERMCAP], 1,
320             [Define if tgetent(), tgetnum(), tgetstr(), tgetflag()
321              are among the termcap library functions.])
322           ;;
323       esac
324       ;;
325   esac
326   AC_SUBST([LIBTERMINFO])
327   AC_SUBST([LTLIBTERMINFO])
328   AC_SUBST([INCTERMINFO])
329
330   dnl Test against the old GNU termcap, which provides a tparam() function
331   dnl instead of the classical tparm() function.
332   AC_CACHE_CHECK([for tparam], [gl_cv_terminfo_tparam], [
333     gl_save_LIBS="$LIBS"
334     LIBS="$LIBS $LIBTERMINFO"
335     gl_save_CPPFLAGS="$CPPFLAGS"
336     CPPFLAGS="$CPPFLAGS $INCTERMINFO"
337     AC_TRY_LINK([extern
338       #ifdef __cplusplus
339       "C"
340       #endif
341       char * tparam (const char *, void *, int, ...);
342       char buf;
343       ], [return tparam ("\033\133%dm", &buf, 1, 8);],
344       [gl_cv_terminfo_tparam=yes], [gl_cv_terminfo_tparam=no])
345     CPPFLAGS="$gl_save_CPPFLAGS"
346     LIBS="$gl_save_LIBS"
347   ])
348   if test $gl_cv_terminfo_tparam = yes; then
349     AC_DEFINE([HAVE_TPARAM], 1,
350       [Define if tparam() is among the termcap library functions.])
351   else
352     dnl Test whether a tparm() function is provided. It is missing e.g.
353     dnl in NetBSD 3.0 libtermcap.
354     AC_CACHE_CHECK([for tparm], [gl_cv_terminfo_tparm], [
355       gl_save_LIBS="$LIBS"
356       LIBS="$LIBS $LIBTERMINFO"
357       gl_save_CPPFLAGS="$CPPFLAGS"
358       CPPFLAGS="$CPPFLAGS $INCTERMINFO"
359       AC_TRY_LINK([extern
360         #ifdef __cplusplus
361         "C"
362         #endif
363         char * tparm (const char *, ...);
364         ], [return tparm ("\033\133%dm", 8);],
365         [gl_cv_terminfo_tparm=yes], [gl_cv_terminfo_tparm=no])
366       CPPFLAGS="$gl_save_CPPFLAGS"
367       LIBS="$gl_save_LIBS"
368     ])
369   fi
370 ])