./devel/ncurses, CRT screen handling and optimization package

[ CVSweb ] [ Homepage ] [ RSS ] [ Required by ] [ Add to tracker ]


Branch: CURRENT, Version: 6.5, Package name: ncurses-6.5, Maintainer: pkgsrc-users

The ncurses (new curses) library is a free software emulation of
curses in System V Release 4.0, and more. It uses terminfo format,
supports pads and color and multiple highlights and forms characters
and function-key mapping, and has all the other SYSV-curses
enhancements over BSD curses.


Required to build:
[pkgtools/cwrappers]

Master sites: (Expand)

Filesize: 3602.04 KB

Version history: (Expand)


CVS history: (Expand)


   2024-05-07 12:06:11 by Jonathan Perkin | Files touched by this commit (1)
Log message:
ncurses: Put back fake ncurses.pc handling.

Fixes build of e.g. editors/mg on macOS using builtin ncurses.
   2024-05-06 17:08:02 by Jonathan Perkin | Files touched by this commit (1)
Log message:
ncurses: Provide a compat symlink for ncursesw.pc.

Some packages hardcode requests for this file, even though the actual
functionality is in libncurses, so just redirect there.
   2024-05-06 10:24:05 by Jonathan Perkin | Files touched by this commit (5) | Package updated
Log message:
ncurses: Update to 6.5 and overhaul package.

The first half of this commit message describes the pkgsrc changes, the
second half contains the changes in ncurses 6.5 since 6.4.

This combines ncurses and ncursesw into a single package, and ships
combined versions of libncurses and the ncurses/ include directory.
There are no longer separate versions of libncursesw and ncursesw/.

This aligns with what many other operating systems are doing nowadays,
simplifies the package immensely, provides a consistent interface for
other packages to request curses features, improves performance due to
the removal of questionable code in ncursesw's buildlink3.mk, and fixes
bugs - notably the recent python fallout.

Packages that require wide-curses support can use the standardised
"wide" value for USE_CURSES to ensure they are built against the
wide-curses API, while providing the option for NetBSD's builtin curses
to handle that instead, should support be added in the future.

When opting into the wide-curses API, the NCURSES_WIDECHAR define is
used instead of _XOPEN_SOURCE_EXTENDED as the latter cannot be used on
certain operating systems.

A number of other cleanups are included:

 - stop using a custom TERMINFODIR on SunOS
 - remove unused PLIST_SUBST
 - print-PLIST fixes
 - use newer make syntax
 - pkglint cleanups

This package now conflicts with and supersedes ncursesw-[0-9]*.  Removal
of support for devel/ncursesw will come next.

Release Notes

   These notes are for ncurses 6.5, released April 27, 2024.

   This  release  is  designed  to  be source-compatible with ncurses 5.0
   through  6.4; providing extensions to the application binary interface
   (ABI).  Although  the  source  can  still be configured to support the
   ncurses  5  ABI, the reason for the release is to reflect improvements
   to the ncurses 6 ABI and the supporting utility programs.

   There  are,  of  course,  numerous  other improvements, listed in this
   announcement.

   The   most  important  bug-fixes/improvements  dealt  with  robustness
   issues.  The  release notes also mention some other bug-fixes, but are
   focused  on  new  features and improvements to existing features since
   ncurses 6.4 release.

  Library improvements

    New features

   These are new features:
     * The low-level terminfo and termcap interfaces are used both by the
       higher-level curses library, as well as by many applications.
       The  functions  which  convert  parameterized  terminal capability
       strings  for output to the terminal (tiparm and tparm) analyze the
       capability string to determine which parameters are strings (i.e.,
       addresses), versus numbers (not addresses).
       The  library's analysis of a capability string may differ from the
       calling  application's design if environment variables are used to
       point  to  an  invalid  terminal  database. This is a longstanding
       problem  with  all  implementations  of  terminfo, dating from the
       early 1980s.
       Two  new  functions  address this problem: by providing a function
       which  allows  the  calling  application  to tell ncurses how many
       string-parameters to expect:
          + tiscan_s  helps  applications  check  formatting capabilities
            that would be passed to tiparm_s.
          + tiparm_s provides applications a way to tell ncurses what the
            expected parameters are for a capability.
     * The  ncurses library supports a compile-time feature (enabled with
       the   configure   --enable-check-size   option)  which  simplifies
       initialization  with  terminals  which  do  not  negotiate  window
       (screen)  size.  This is done in setupterm, by providing for using
       ANSI cursor-position report (in user6/user7 terminfo capabilities)
       to  obtain  the  screen  size  if neither environment variables or
       ioctl is used.
       The  ncurses  test-program  with options "-E -T" demonstrates this
       feature.
     * add functions to query tty-flags in SCREEN

   This release drops compatibility with obsolete versions of tack, e.g.,
   pre-1.08

    Other improvements

   These are improvements to existing features:
     * In  addition  to  the  new,  safer function tiparm_s, ncurses adds
       checks to make the older tiparm, tparm and tgoto functions safer:
          + the  terminfo  functions  tiparm  and  tparm  ensure that the
            capability  string  comes from the terminal description which
            ncurses  loads,  rather  than  from  random  data  which  the
            application happens to have.
          + the  tgoto function disallows capabilities which its analysis
            shows will attempt to use string parameters.
          + ncurses  uses  internal functions which correspond to tiparm,
            and  tgoto which ensure that the capability strings which are
            passed  to  these  functions  come  from  the loaded terminal
            description.
     * improve  check  in  lib_tparm.c, ensuring that a char* fits into a
       TPARM_ARG
     * modify  _nc_syserr_abort  to  use _nc_env_access, rather than only
       checking root uid
     * improve thread lock in lib_trace.c
     * modify  flushinp  to  use  file descriptors in SCREEN, rather than
       from TERMINAL, and check if they are for a terminal, like SVr4
     * modify mcprint to use file descriptor in SCREEN, for consistency
     * modify  internal  function  _nc_read_file_entry  to  show relevant
       filename in warnings
     * improve  checks  in  internal  function convert_string for corrupt
       terminfo entry
     * review/improve handling of out-of-memory conditions
     * limit  delays  to 30 seconds, i.e., padding delays in terminfo, as
       well as napms and delay_output functions
     * fix  reallocation  loop  for  vsnprintf  in  _nc_sprintf_string by
       copying the va_list variable
     * modify  delscreen  to  limit  the windows which it creates to just
       those associated with the screen
     * modify  endwin to return an error if it is called again without an
       intervening screen update
     * modify wenclose to handle pads
     * eliminate use of PATH_MAX in lib_trace.c
     * provide for any CCHARW_MAX greater than 1

   These are corrections to existing features:
     * correct loop termination condition in waddnstr and waddnwstr
     * improve  parsing  in  internal  function _nc_msec_cost, allowing a
       single decimal point
     * amend  parameter check for entire string versus specific length in
       winsnstr  and wins_nwstr to match Solaris; make similar correction
       to wins_nwstr
     * correct   internal   function   wadd_wch_literal   when  adding  a
       non-spacing character to a double-width character
     * correct  definition of Charable macro for non-wide ncurses library
       .

  Program improvements

   Several improvements were made to the utility programs. Some were done
   to  make  the  infocmp  option  "-u" option help refactor the terminal
   database.

   infocmp

          + add  limit  checks  for processing extended capabilities with
            the "-u" option
          + correct  initial  alignment of extended capabilities, so that
            the "-u" option can be used for more than two terminal types
          + modify  "-u"  option  to not report cancels for strings which
            were already cancelled in a use'd chunk.
          + correct  an  assignment  "-u"  for  detecting if a boolean is
            unset  in  a base entry and set in a use'd chunk, i.e., if it
            was cancelled.

   tic

          + correct limit-check when dumping tc/use clause via "-I"
          + check  return  value  of  _nc_save_str, in special case where
            extended   capabilities   are   processed  but  the  terminal
            description was not initialized
          + modify  check for multiply defined aliases to report problems
            within  the  current  runtime  rather than for conflicts with
            pre-existing terminal descriptions.
          + disallow  using $TERMINFO or $HOME/.terminfo when "-o" option
            is used

   tput and tset

          + add "-v" option to tput, to show warnings
          + modify reset command to avoid altering clocal if the terminal
            uses a modem
          + modify  reset feature to avoid 1-second sleep if running in a
            pseudo-terminal

    Examples

   Along  with  the  library and utilities, improvements were made to the
   ncurses-examples:
     * modify test_tparm to account for extended capabilities
     * corrected mouse mask in test/testcurs.c
     * modify test/clip_printw.c to optionally test non-wrapped updates
     * modify test/test_mouse.c to use curses api for raw/noraw
     * modify test/clip_printw.c to optionally test non-wrapped updates

   There is one new demo/test programs:

   test/test_endwin.c
          This program shows the return-status from endwin with different
          combinations of endwin (repeated), initscr, newterm.

  Terminal database

   There are several new terminal descriptions:
     * ansi+apparrows
     * contour
     * linux+kbs for terminals which imitate xterm's behavior with Linux
     * rio, rio-direct
     * mostlike
     * ms-vt100-16color, winconsole
     * vt100+noapp,   vt100+noapp+pc,  xterm+app+pc,  xterm+decedit  from
       xterm #389
     * putty+cursor to reflect amending of modified cursor-keys in 2021
     * wezterm

   There  are  many  changes to existing terminal descriptions. Some were
   updates  to  several  descriptions, using the infocmp "-u" option in a
   script  to  determine  which  building-block  entries could be used to
   replace multiple capability settings (and trim redundant information).

   Other changes include:
     * document XF, kxIN and kxOUT
     * add note on sun regarding wscons/cmdtool/shelltool
     * remove DECCOLM+DECSCLM from foot
     * add xterm+focus to foot+base
     * add ecma+strikeout to putty
     * use CSI 3J in vte-2017
     * use oldxterm+sm+1006 in vte-2014
     * modify xgterm to work around line-drawing bug
     * add  xterm  focus  mode 1004 to xterm+focus as fe/fd capabilities,
       like vim.
     * add xterm+focus to alacritty+common
     * add  XR/xr,  to work with vim, and use RV/rv to denote DA2 and its
       response
     * add  XF  flag  to  xterm+focus so that termcap applications can be
       aware of terminals which may support focus in/out
     * use xterm+focus in xterm-p370 and tmux
     * remove xterm+sm+1006 from tmux
     * NetBSD-related fixes for x68k and wsvt25

  Documentation

   As usual, this release
     * improves documentation by describing new features,
     * attempts  to  improve the description of features which users have
       found confusing
     * fills  in overlooked descriptions of features which were described
       in the NEWS file but treated sketchily in manual pages.

   In  addition  to  providing  background  information  to explain these
   features   and   show   how   they  evolved,  there  are  corrections,
   clarifications, etc.:
     * Corrections:
          + add   assignment   in  CF_MAN_PAGES  to  fill  in  value  for
            TERMINFO_DIRS in ncurses, terminfo and tic manpages.
          + clarify  interaction  of  -R  option  versus -C, -I and -r in
            infocmp manpage.
          + correct manpage description of panel_hidden.
          + improve  manpage  description  for addch versus unctrl format
            used for non-printable characters.
          + improve  manpages  discussing  file  descriptors in low-level
            functions.
          + improve description of search rules for terminal descriptions
            in terminfo manpage.
          + modify  dist.mk  to  avoid  passing  developer's  comments in
            manpages into the generated html documentation.
          + modify  test-package  "ncurses6-doc"  to use manpage-aliases,
            which  in  turn  required a change to the configure script to
            factor in the extra-suffix option when deriving alias names.
     * New/improved history and portability sections:
          + add  information  about  "ttycap",  termcap's  forerunner, to
            tset.1
          + document   limitations   of   tparm,   and  error-returns  in
            curs_terminfo.3x
          + document   limitations   of   tgoto,   and  error-returns  in
            curs_termcap.3x
     * Other improvements:
          + This  release  has many changes to improve the formatting and
            style of the manpages.
          + Manpages  now use consistent section-naming, page headers and
            footers (including the modification date for each page).
          + Table layout has been revised.

   There  are  no new manual pages (all of the manual page updates are to
   existing pages).

  Interesting bug-fixes

   The  changes to tparm, tgoto which improve the design of the low-level
   interfaces are interesting, but are not bug-fixes per se.

  Configuration changes

    Major changes

   These are the major changes (aside from introducing tiparm_s):
     * use wide-character (ncursesw) by default
     * use opaque typedefs by default

   However,  most  of  the  work  on configure scripts was done to reduce
   warnings within the configure script:
     * intrusive warnings from GNU grep regarding fgrep and egrep
     * fatal  errors  in  compile-checks,  arising from recent "Modern C"
       efforts  by  some  developers  which caused longstanding configure
       checks to fail.
       After  repairing  the  configure  script,  none  of  that activity
       affected  ncurses  because stricter warnings are used routinely in
       development.

   Other improvements made to configure checks include
     * use  string-hacks in alloc_entry.c, alloc_type.c and hardscroll.c,
       overlooked due to compiler changes in recent OpenBSD releases
     * revise progs.priv.h to provide for NC_ISATTY reuse
     * configure check for MB_LEN_MAX provides warning as needed
     * trim   a   space  after  some  "-R"  options,  fixing  builds  for
       applications built using clang and ncurses on Solaris
     * work  around  misconfiguration  of  MacPorts  gcc13, which exposes
       invalid  definition  of  MB_LEN_MAX  in  gcc's  fallback  copy  of
       limits.h
     * modified  experimental  Windows  driver  works  with  xterm  mouse
       protocol

    Configuration options

   There are a few new configure options:

   --disable-setuid-environ
          Compile  with  environment  restriction, so certain environment
          variables  are  not  available when running via a setuid/setgid
          application. These are (for example $TERMINFO) those that allow
          the  search  path  for  the  terminfo  or  termcap  entry to be
          customized.

          A  setuid/setgid application inherits its environment variables
          from  the current user, in contrast to sudo which may limit the
          environment variables that ncurses uses.

   --enable-check-size
          Compile-in  feature to detect screensize for terminals which do
          not advertise their screensize, e.g., serial terminals.

   --with-abi-altered=NUM
          Override  the  displayed  (rather  than  compiled-in) ABI. Only
          packagers who have created configurations where the ABI differs
          from ncurses should be interested in this option.

   --with-strip-program=XXX
          When  stripping  executables  during install, use the specified
          program  rather  than  "strip" overriding program chosen by the
          install program for stripping executables.

   These configure options are modified:

   --with-pkg-config-libdir[=DIR]
          The  optional  DIR parameter can now be "auto" to automatically
          use pkg-config's library directory.

          The default is $(libdir).

   --with-xterm-kbs[=XXX]
          The  default  is  "auto"  which  tells  the configure script to
          choose BS or DEL according to platform defaults.

  Portability

   Many  of  the  portability  changes  are implemented via the configure
   script:
     * add/use   configure   check   for   clock_gettime,   to  supersede
       gettimeofday.
     * modify  configure script check for pkg-config library directory to
       take   into   account   an   older   version   0.15.0  which  used
       PKG_CONFIG_PATH but not PKG_CONFIG_LIBDIR
     * allow for MinGW32-/64-bit configurations to use _DEFAULT_SOURCE
     * modify   CF_XOPEN_SOURCE  macro's  amend  default  case  to  avoid
       undefining _XOPEN_SOURCE if _POSIX_C_SOURCE is defined
     * updated configure script macro CF_XOPEN_SOURCE, for uClibc-ng
     * modify version-check for gcc/g++, now works for msys2
     * build-fixes related to configure-options and/or platform:
          + fix for --enable-fvisibility
          + fix for unusual values of --with-rel-version
          + fix for unusual values of --with-abi-version
          + fix for --disable-tcap-names
          + fix for termcap in nc_access.h
     * other configure-script improvements:
          + recent msys2 headers work with _DEFAULT_SOURCE; amend check
          + use  $ac_includes_default in most cases where stdlib.h should
            work
          + use #error consistently vs "make an error"
          + add configure macro for gettimeofday vs inline check

   Here are some of the other portability fixes:
     * modify  configure  scripts/makefiles  to  omit  KEY_RESIZE  if the
       corresponding SIGWINCH feature is disabled
     * increase MB_CUR_MAX to 16, matching glibc's MB_LEN_MAX
     * add BSD erase2 to characters handled by tset/reset
     * use getauxval when available, to improve setuid/setgid checks
     * set dwShareMode in calls to CreateConsoleScreenBuffer
     * use  CreateFile  with "CONIN$", "CONOUT$" rather than \ 
GetStdHandle
       to  obtain a handle on the actual console, avoiding redirection in
       the MinGW/Win32 configurations
     * modify  MinGW  driver  to  return KEY_BACKSPACE when an unmodified
       VK_BACK virtual key is entered
     * modify  MinGW  configuration  to provide for running in MSYS/MSYS2
       shells, assuming ConPTY support
   2024-05-06 10:00:28 by Jonathan Perkin | Files touched by this commit (2)
Log message:
ncurses: Stop installing the demo.cc example.

If more than 2 people have used this in the 25 years it's been added to
this package, I'd be very surprised.
   2024-05-06 09:59:27 by Jonathan Perkin | Files touched by this commit (1)
Log message:
ncurses: Remove faked-up files.

Some of this has already been moved to mk/curses.buildlink3.mk, and the
rest is obsolete now that this file will only be included if we are
specifically using ncurses and not some other implementation pretending
to be ncurses.
   2024-05-06 09:58:24 by Jonathan Perkin | Files touched by this commit (1)
Log message:
ncurses: Remove USE_NCURSES support.

This was superseded by USE_CURSES many years ago.  If this file is being
included then we are already using ncurses.

This only removes support for the variable, removing it from individual
packages will come later.
   2024-05-06 09:57:35 by Jonathan Perkin | Files touched by this commit (1)
Log message:
ncurses: Remove USE_TERMINFO.

This is a long-obsolete variable, support was moved to
mk/terminfo.buildlink3.mk many years ago.
   2024-05-06 09:56:51 by Jonathan Perkin | Files touched by this commit (1)
Log message:
ncurses: Remove INCOMPAT_CURSES.

This was moved to mk/curses.builtin.mk over 10 years ago.