From: Bruno Haible Date: Tue, 19 Dec 2006 19:58:33 +0000 (+0000) Subject: New module 'terminfo'. X-Git-Tag: v0.17~557 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1c20b44d8e6170ec908b8feed538e9759e025b5b;p=thirdparty%2Fgettext.git New module 'terminfo'. --- diff --git a/gnulib-local/ChangeLog b/gnulib-local/ChangeLog index fa804a495..8196eecb8 100644 --- a/gnulib-local/ChangeLog +++ b/gnulib-local/ChangeLog @@ -1,3 +1,9 @@ +2006-12-19 Bruno Haible + + * m4/terminfo.m4: New file. + * modules/terminfo: New file. + * Makefile.am (EXTRA_DIST): Add them. + 2006-12-19 Bruno Haible * m4/termcap.m4 (gl_TERMCAP, gl_TERMCAP_BODY): Rename cache variables. diff --git a/gnulib-local/Makefile.am b/gnulib-local/Makefile.am index e33d6a386..bcc8c2ae0 100644 --- a/gnulib-local/Makefile.am +++ b/gnulib-local/Makefile.am @@ -267,6 +267,7 @@ m4/quotearg.m4.diff \ m4/quote.m4.diff \ m4/relocatable.m4 \ m4/termcap.m4 \ +m4/terminfo.m4 \ m4/term-ostream.m4 \ m4/unionwait.m4 \ m4/vasprintf.m4 \ @@ -308,6 +309,7 @@ modules/relocwrapper \ modules/styled-ostream \ modules/termcap \ modules/termcap-h \ +modules/terminfo \ modules/term-ostream \ modules/term-ostream-tests \ modules/term-styled-ostream \ diff --git a/gnulib-local/m4/terminfo.m4 b/gnulib-local/m4/terminfo.m4 new file mode 100644 index 000000000..cdf627f4d --- /dev/null +++ b/gnulib-local/m4/terminfo.m4 @@ -0,0 +1,327 @@ +# terminfo.m4 serial 1 (gettext-0.16.2) +dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_TERMINFO], +[ + AC_REQUIRE([gl_TERMINFO_BODY]) + if test $gl_cv_terminfo_tparam = no && test $gl_cv_terminfo_tparm = no; then + AC_LIBOBJ([tparm]) + fi +]) + +AC_DEFUN([gl_TERMINFO_BODY], +[ + dnl Some systems have setupterm(), tigetnum(), tigetstr(), tigetflag(), + dnl tputs(), tgoto() in the same library as tgetent(), tgetnum(), tgetstr(), + dnl tgetflag(), e.g. Linux (in libncurses) or Solaris (in libtermcap = + dnl libncurses). + dnl Some systems have them in a different library, e.g. OSF/1 (in libcurses, + dnl not in libtermcap) or HP-UX (in libxcurses, not in libtermcap). + dnl Some systems, like NetBSD or BeOS, don't have these functions at all; + dnl they have only a libtermcap. + dnl Some systems, like BeOS, use GNU termcap, which has tparam() instead of + dnl tparm(). + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libncurses and define LIBNCURSES, LTLIBNCURSES and INCNCURSES + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([ncurses]) + + dnl Search for libtermcap and define LIBTERMCAP, LTLIBTERMCAP and INCTERMCAP + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([termcap]) + + dnl Search for libxcurses and define LIBXCURSES, LTLIBXCURSES and INCXCURSES + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([xcurses]) + + dnl Search for libcurses and define LIBCURSES, LTLIBCURSES and INCCURSES + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([curses]) + + dnl When searching for the terminfo functions, prefer libtermcap over + dnl libxcurses and libcurses, because it is smaller. + AC_CACHE_CHECK([where terminfo library functions come from], [gl_cv_terminfo], [ + gl_cv_terminfo="not found, consider installing GNU ncurses" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int setupterm (const char *, int, int *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetnum (const char *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetflag (const char *); + extern + #ifdef __cplusplus + "C" + #endif + const char * tigetstr (const char *); + ], [return setupterm ("xterm", 0, (int *)0) + + tigetnum ("colors") + + tigetflag ("hc") + * tigetstr("oc");], + [gl_cv_terminfo=libc]) + if test "$gl_cv_terminfo" != libc; then + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBNCURSES" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int setupterm (const char *, int, int *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetnum (const char *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetflag (const char *); + extern + #ifdef __cplusplus + "C" + #endif + const char * tigetstr (const char *); + ], [return setupterm ("xterm", 0, (int *)0) + + tigetnum ("colors") + + tigetflag ("hc") + * tigetstr("oc");], + [gl_cv_terminfo=libncurses]) + LIBS="$gl_save_LIBS" + if test "$gl_cv_terminfo" != libncurses; then + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBTERMCAP" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int setupterm (const char *, int, int *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetnum (const char *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetflag (const char *); + extern + #ifdef __cplusplus + "C" + #endif + const char * tigetstr (const char *); + ], [return setupterm ("xterm", 0, (int *)0) + + tigetnum ("colors") + + tigetflag ("hc") + * tigetstr("oc");], + [gl_cv_terminfo=libtermcap]) + LIBS="$gl_save_LIBS" + if test "$gl_cv_terminfo" != libtermcap; then + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBXCURSES" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int setupterm (const char *, int, int *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetnum (const char *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetflag (const char *); + extern + #ifdef __cplusplus + "C" + #endif + const char * tigetstr (const char *); + ], [return setupterm ("xterm", 0, (int *)0) + + tigetnum ("colors") + + tigetflag ("hc") + * tigetstr("oc");], + [gl_cv_terminfo=libxcurses]) + LIBS="$gl_save_LIBS" + if test "$gl_cv_terminfo" != libxcurses; then + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBCURSES" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int setupterm (const char *, int, int *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetnum (const char *); + extern + #ifdef __cplusplus + "C" + #endif + int tigetflag (const char *); + extern + #ifdef __cplusplus + "C" + #endif + const char * tigetstr (const char *); + ], [return setupterm ("xterm", 0, (int *)0) + + tigetnum ("colors") + + tigetflag ("hc") + * tigetstr("oc");], + [gl_cv_terminfo=libcurses]) + LIBS="$gl_save_LIBS" + fi + fi + fi + fi + ]) + case "$gl_cv_terminfo" in + libc) + LIBTERMINFO= + LTLIBTERMINFO= + INCTERMINFO= + ;; + libncurses) + LIBTERMINFO="$LIBNCURSES" + LTLIBTERMINFO="$LTLIBNCURSES" + INCTERMINFO="$INCNCURSES" + ;; + libtermcap) + LIBTERMINFO="$LIBTERMCAP" + LTLIBTERMINFO="$LTLIBTERMCAP" + INCTERMINFO="$INCTERMCAP" + ;; + libxcurses) + LIBTERMINFO="$LIBXCURSES" + LTLIBTERMINFO="$LTLIBXCURSES" + INCTERMINFO="$INCXCURSES" + ;; + libcurses) + LIBTERMINFO="$LIBCURSES" + LTLIBTERMINFO="$LTLIBCURSES" + INCTERMINFO="$INCCURSES" + ;; + esac + case "$gl_cv_terminfo" in + libc | libncurses | libtermcap | libxcurses | libcurses) + AC_DEFINE([HAVE_TERMINFO], 1, + [Define if setupterm(), tigetnum(), tigetstr(), tigetflag() + are among the termcap library functions.]) + ;; + *) + dnl Use the termcap functions as a fallback. + AC_CACHE_CHECK([where termcap library functions come from], [gl_cv_termcap], [ + gl_cv_termcap="not found, consider installing GNU ncurses" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int tgetent (char *, const char *); + ], [return tgetent ((char *) 0, "xterm");], + [gl_cv_termcap=libc]) + if test "$gl_cv_termcap" != libc; then + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBNCURSES" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int tgetent (char *, const char *); + ], [return tgetent ((char *) 0, "xterm");], + [gl_cv_termcap=libncurses]) + LIBS="$gl_save_LIBS" + if test "$gl_cv_termcap" != libncurses; then + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBTERMCAP" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + int tgetent (char *, const char *); + ], [return tgetent ((char *) 0, "xterm");], + [gl_cv_termcap=libtermcap]) + LIBS="$gl_save_LIBS" + fi + fi + ]) + case "$gl_cv_termcap" in + libc) + LIBTERMINFO= + LTLIBTERMINFO= + INCTERMINFO= + ;; + libncurses) + LIBTERMINFO="$LIBNCURSES" + LTLIBTERMINFO="$LTLIBNCURSES" + INCTERMINFO="$INCNCURSES" + ;; + libtermcap) + LIBTERMINFO="$LIBTERMCAP" + LTLIBTERMINFO="$LTLIBTERMCAP" + INCTERMINFO="$INCTERMCAP" + ;; + esac + ;; + esac + AC_SUBST([LIBTERMINFO]) + AC_SUBST([LTLIBTERMINFO]) + AC_SUBST([INCTERMINFO]) + + dnl Test against the old GNU termcap, which provides a tparam() function + dnl instead of the classical tparm() function. + AC_CACHE_CHECK([for tparam], [gl_cv_terminfo_tparam], [ + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBTERMINFO" + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCTERMINFO" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + char * tparam (const char *, void *, int, ...); + char buf; + ], [return tparam ("\033\133%dm", &buf, 1, 8);], + [gl_cv_terminfo_tparam=yes], [gl_cv_terminfo_tparam=no]) + CPPFLAGS="$gl_save_CPPFLAGS" + LIBS="$gl_save_LIBS" + ]) + if test $gl_cv_terminfo_tparam = yes; then + AC_DEFINE([HAVE_TPARAM], 1, + [Define if tparam() is among the termcap library functions.]) + else + dnl Test whether a tparm() function is provided. It is missing e.g. + dnl in NetBSD 3.0 libtermcap. + AC_CACHE_CHECK([for tparm], [gl_cv_terminfo_tparm], [ + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBTERMINFO" + gl_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCTERMINFO" + AC_TRY_LINK([extern + #ifdef __cplusplus + "C" + #endif + char * tparm (const char *, ...); + ], [return tparm ("\033\133%dm", 8);], + [gl_cv_terminfo_tparm=yes], [gl_cv_terminfo_tparm=no]) + CPPFLAGS="$gl_save_CPPFLAGS" + LIBS="$gl_save_LIBS" + ]) + fi +]) diff --git a/gnulib-local/modules/terminfo b/gnulib-local/modules/terminfo new file mode 100644 index 000000000..25e244a94 --- /dev/null +++ b/gnulib-local/modules/terminfo @@ -0,0 +1,27 @@ +Description: +Information about terminal capabilities. + +Files: +m4/terminfo.m4 +lib/tparm.c + +Depends-on: +havelib +c-ctype + +configure.ac: +gl_TERMINFO + +Makefile.am: +if GL_COND_LIBTOOL +lib_LDFLAGS += $(LTLIBTERMINFO) +endif + +Include: + +License: +LGPL + +Maintainer: +Bruno Haible +