]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
New module 'terminfo'.
authorBruno Haible <bruno@clisp.org>
Tue, 19 Dec 2006 19:58:33 +0000 (19:58 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:14:32 +0000 (12:14 +0200)
gnulib-local/ChangeLog
gnulib-local/Makefile.am
gnulib-local/m4/terminfo.m4 [new file with mode: 0644]
gnulib-local/modules/terminfo [new file with mode: 0644]

index fa804a495ac7a586cbd25c3298092440804109ef..8196eecb8e745f31f2d581da8ba11e6d11b31bbe 100644 (file)
@@ -1,3 +1,9 @@
+2006-12-19  Bruno Haible  <bruno@clisp.org>
+
+       * m4/terminfo.m4: New file.
+       * modules/terminfo: New file.
+       * Makefile.am (EXTRA_DIST): Add them.
+
 2006-12-19  Bruno Haible  <bruno@clisp.org>
 
        * m4/termcap.m4 (gl_TERMCAP, gl_TERMCAP_BODY): Rename cache variables.
index e33d6a386c1e9d66ec16c1a3502598e5013345ad..bcc8c2ae0dbeaa1549c704a3003d221c969add20 100644 (file)
@@ -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 (file)
index 0000000..cdf627f
--- /dev/null
@@ -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 (file)
index 0000000..25e244a
--- /dev/null
@@ -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
+