1.29 2026-04-23 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * GH #87, PR #88 - Fix configure-time function detection probes being
      broken by compiler optimization. The probes stored function pointers
      in local variables which -O2/-Os (added to probe flags in PR #81)
      eliminated as dead stores, so the linker never saw the function
      reference. On systems where openpty() lives in -lutil (older glibc,
      BSDs), the probe falsely succeeded without -lutil, producing
      "undefined symbol: openpty" at runtime. Fixed by storing the
      function pointer in a file-scope global variable which the optimizer
      cannot eliminate.

  Maintenance:
    * PR #89 - Add Ubuntu LTS version matrix (20.04, 22.04, 24.04) to the
      GitHub Actions test suite. Exercises the system perl on each current
      Ubuntu LTS release via Docker containers, running after the main
      ubuntu job.

1.28 2026-04-23 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * PR #69 - Fix make_slave_controlling_terminal() on Solaris/HP-UX to use
      _open_tty() instead of IO::Tty->open(), ensuring STREAMS modules (ptem,
      ldterm, ttcompat) are pushed via I_PUSH when the slave is opened for
      controlling terminal setup. Parallel fix to the slave() method fix in
      1.24.
    * PR #74 - Fix Perl 5.40+ "Possible memory corruption: ioctl overflowed
      3rd argument" warning in clone_winsize_from() and get_winsize(). Use
      pack_winsize(0,0,0,0) to pre-allocate the ioctl buffer with SvCUR
      matching sizeof(struct winsize) instead of an empty string.
    * PR #76, PR #79 - Fix diagnostic warnings being silently suppressed when
      callers use lexical "use warnings" (the modern standard since Perl 5.6).
      $^W and PL_dowarn only fire under perl -w; replaced with
      warnings::enabled() in IO::Tty and IO::Pty (PR #76) and ckWARN(WARN_IO)
      in Tty.xs (PR #79).
    * PR #77 - Fix file descriptor leak in IO::Pty when new_from_fd() fails
      after pty_allocate() or _open_tty() returns raw C-level fds. Added
      POSIX::close() calls on the raw fds before croaking at three sites in
      new() and slave().
    * PR #78 - Fix openpty() detection on Alpine Linux and other musl-based
      systems where openpty() has moved from libutil into libc (glibc 2.34+).
      Probe libc first before falling back to -lutil.
    * PR #80 - Fix -Wsign-compare compiler warnings: change namebuflen
      parameter type from int to size_t in open_slave() and allocate_pty()
      to match the return type of strlcpy() and the size argument of snprintf().
    * PR #81 - Fix spurious "_FORTIFY_SOURCE requires compiling with
      optimization" warnings during configure probes when $Config{optimize}
      (e.g. -Os) is separate from $Config{ccflags}. Include optimize flags in
      all configure probe compilations.
    * PR #84 - Fix header probes in Makefile.PL missing platform extension
      defines (_GNU_SOURCE, _BSD_VISIBLE, etc.) that function probes already
      included. Bare #includes could cause HAVE_PTY_H and similar to be unset
      on strict POSIX systems even when the header exists.

  Improvements:
    * PR #86 - Use L<> instead of C<> for cross-module POD references in
      Tty.pm and Pty.pm so MetaCPAN renders IO::Pty, IO::Handle, and IO::Stty
      as clickable links.

  Maintenance:
    * PR #70 - Modernize POD in Tty.pm and Pty.pm: remove stale platform
      version references (FreeBSD 4.4, OpenBSD 2.8, HPUX 10.20, Solaris 2.6),
      replace defunct SourceForge/mailing list URLs with GitHub issue tracker.
    * PR #73 - Modernize the try example script: add strict/warnings, my
      declarations, 3-arg open, and lexical filehandles. The script is shipped
      to CPAN and referenced in POD as the canonical usage example.
    * PR #75 - Strengthen test coverage for set_raw() and winsize: verify all
      termios flags set by cfmakeraw (iflag, oflag, PARENB, CSIZE, CS8, VMIN,
      VTIME) and add a test for the unpack_winsize() length-validation croak.
    * PR #85 - Update GitHub Actions to Node.js 24 versions: actions/checkout
      v6, cross-platform-actions/action v1, perl-actions/install-with-cpm v2.
      Required before GitHub forces Node.js 24 in June 2026.

1.27 2026-04-03 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * GH #68, PR #68 - Fix build on OpenBSD by including termios.h to
      detect openpty reliably and setting _BSD_SOURCE to find strlcpy
      in includes. (Alexander Bluhm)

1.26 2026-04-02 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * PR #67 - Fix strlcpy detection on DragonFly BSD to avoid
      static/non-static declaration conflict. Added __DragonFly__ guard
      to the function test (paralleling __FreeBSD__) and added a
      belt-and-suspenders check for perl's own HAS_STRLCPY in Tty.xs.

  Maintenance:
    * PR #66 - Add 5-minute timeout to all CI test steps to prevent
      hung tests from consuming CI resources indefinitely.

1.25 2026-04-01 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * GH #62, PR #64 - Fix IO::Pty DESTROY force-closing the slave pty.
      The DESTROY method (added in 1.21) explicitly closed the cached
      slave handle, breaking consumers like IPC::Run that hold a
      reference to the slave via $pty->slave() and expect it to survive
      master destruction. Now just deletes the internal reference and
      lets Perl's refcounting handle fd closure correctly.

  Maintenance:
    * PR #61 - Simplify version variables to a single source of truth.
      Extract version from Tty.pm in Makefile.PL using
      MM->parse_version() instead of hardcoding it, use VERSION_FROM in
      WriteMakefile, and remove $XS_VERSION from Tty.pm.
1.24 2026-03-27 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * GH #54, PR #55 - Fix slave pty reopening on Solaris/illumos. After
      close_slave(), reopening with plain Perl open() skipped pushing
      STREAMS modules (ptem, ldterm, ttcompat), causing isatty() to
      return false. Added _open_tty() XS function that opens the device
      and pushes STREAMS modules on platforms that support I_PUSH.
    * GH #56, PR #58 - Fix undef warnings on Perl 5.8.8 by removing the
      undef operator on localized $SIG{__DIE__}, and fix XS ttyname() on
      older Perls by avoiding the InOutStream typemap which can return
      NULL for filehandles created via new_from_fd.
    * GH #57, PR #59 - Add __BSD_VISIBLE for FreeBSD in function probes.
      The _XOPEN_SOURCE definition hid BSD extensions like strlcpy,
      causing probe failures and subsequent compile errors from
      conflicting static/non-static declarations.

  Maintenance:
    * PR #60 - Modernize Makefile.PL: replace BUILD_REQUIRES with
      TEST_REQUIRES (EUMM 6.64+), add CONFIGURE_REQUIRES, upgrade
      META_MERGE to meta-spec v2, modernize generated Constant.pm to
      use 'our' instead of 'use vars', and remove dead PPD postamble.

1.23 2026-03-24 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * PR #52 - Replace deprecated indirect object syntax (e.g. `new IO::Pty`)
      with direct method calls (`IO::Pty->new`). Perl 5.36+ disables indirect
      object calls, so this fixes forward compatibility.

  Improvements:
    * PR #53 - Add clone_winsize_from() test coverage (7 new tests) covering
      basic clone between slave ttys, non-tty master fast path, croak on
      non-tty source, and pixel dimension preservation.

  Maintenance:
    * PR #52 - Regenerate README from POD to fix stale version.
    * PR #53 - Modernize `use vars` to `our` declarations in Tty.pm and
      Pty.pm. Add missing `use warnings` to Pty.pm.
    * Add AI_POLICY.md for transparency on AI-assisted contributions.
    * Convert README to Markdown and update MANIFEST.

1.22 2026-03-24 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * GH #47, PR #48 - Fix function detection on Solaris by adding
      __EXTENSIONS__ to expose BSD extensions (like strlcpy) that are
      hidden when _XOPEN_SOURCE is defined.
    * PR #49 - Fix file descriptor leaks in open_slave() error paths.
      The master pty fd was not closed on several early-return error
      paths, causing fd leaks when falling through multiple pty
      allocation methods.

  Improvements:
    * PR #50 - Add unit tests for ttyname(), slave()/close_slave()
      lifecycle, set_winsize()/get_winsize() round-trips,
      pack_winsize/unpack_winsize, and constant importing (28 new tests).
    * PR #51 - Replace DynaLoader with XSLoader and bump minimum perl
      version to 5.8.8. XSLoader is simpler and has been in core since
      perl 5.6.

  Maintenance:
    * PR #44 - Fix stale POD versions, add Perl 5.38/5.40 to CI, and
      update repository URLs from toddr/IO-Tty to cpan-authors/IO-Tty.
    * PR #45 - Remove dead Perl 5.003 compatibility code, modernize XS
      (Nullch to NULL, perl_get_sv to get_sv, sprintf to snprintf).
    * PR #46 - Modernize CI with dynamic perl version discovery via
      perl-actions/perl-versions and add a disttest job.

1.21 2026-03-22 Todd Rinaldo <toddr@cpan.org>

  Bug Fixes:
    * GH #14, PR #39 - Fix slave fd leak on IO::Pty destruction. The slave
      pty file descriptor was not closed when the IO::Pty object was
      destroyed, leaking file descriptors until process exit.
    * GH #12, PR #40 - Fix set_raw() to modify cflag for proper raw mode
      on BSD/macOS. set_raw() was not clearing CSIZE|PARENB or setting CS8
      in cflag, causing incomplete raw mode on macOS, OpenBSD, and NetBSD.
    * GH #38, PR #41 - Modernize function detection to use proper system
      headers instead of fragile K&R-style forward declarations. The old
      approach conflicted with real prototypes on modern compilers
      (especially FreeBSD/Clang), causing all function checks to fail.

  Improvements:
    * PR #42 - Add BSD CI testing for FreeBSD, OpenBSD, and NetBSD via
      cross-platform-actions. Also bumps actions/checkout from v2 to v4.

1.20 2023-12-28 Todd Rinaldo <toddr@cpan.org>
    * #32 - Skip t/pty_get_winsize.t tests on AIX
    * #27 - Fix patchlevel check for util.h

1.19 2023-12-28 Todd Rinaldo <toddr@cpan.org>
    * #37 - Remove --no-undefined from compiler test which is not compatible with all platforms.

1.18 2023-11-27 Todd Rinaldo <toddr@cpan.org>
    * #35 - Address Freebsd build issue: Make function checks more robust within shared lib

1.17 2022-11-11 Todd Rinaldo <toddr@cpan.org>
    * Switch changelog entries to metacpan friendly format
    * #29 - Fix printf format conversion specifiers in croak to support size_t on all platforms
    * #11,#30 - Tty.pm: pre-allocate buffer for ioctl but leave it length 0
    * #28 - Use $arg to match @ARGV in Makefile.PL

1.16 2021-01-2 Todd Rinaldo <toddr@cpan.org>
    * Switch to github for issue tracker.
    * Switch to testsuite CI workflow.
    * Tidy

1.15 2020-10-03 Todd Rinaldo <toddr@cpan.org>
    * Skip winsize test on Solaris and QNX NTO
    * Make function tests more robust
    * Work around a header name collission on util.h. This is breaking on recent OSX

1.15 2020-01-18 Todd Rinaldo <toddr@cpan.org>
    * Add strict/warnings to Tty.pm
    * Fix pod errors
    * Typo: s/dependend/dependent/
    * Prevent spurious warning from get_winsize()
    * Fix usage of setsid
    * Github actions testing. Windows is off of course.
    * Make README.md

1.13_01 2014-12-14 Todd Rinaldo <toddr@cpan.org>
    * RT 91590 - Remove MAP_TARGET from Makefile.PL
    * RT 88271 - Fix for Solaris setuid when root running as other user

1.12 2014-09-12 Todd Rinaldo <toddr@cpan.org>
    * Merge pull request from Chris Williams (bingos) to fix "redefinition of typedef" errors with v5.19.4 and above

1.11 2014-05-05 Todd Rinaldo <toddr@cpan.org>
    * Release 1.11 to CPAN with explicit dropping of support for Win32 (we never supported it) - RT 77813
    * Bump version to a devel release 1.11_01 for experimental work.
    * Fix typo in compilter - RT 75649
    * Add support for PERL_MM_OPT

1.10 2010-10-11   Todd Rinaldo <toddr@cpan.org>
    * CPAN testers clean. Bumping to release version 1.10

1.09_01 2010-10-04   Todd Rinaldo <toddr@cpan.org>
    * RT 60788 - Better error reporting on Operating Systems
      that can't set a controlling terminal e.g. BeOS
    * Bump to 1.09_01

1.09 2010-10-04   Todd Rinaldo <toddr@cpan.org>
    * CPAN testers looks clean. Internal testing done on perl 5.6
    * Bump version to 1.09 and release to CPAN

1.08_03 2010-10-02   Todd Rinaldo <toddr@cpan.org>
    * RT 61642 - Fix file number test to work without hang on cygwin
    * Bump to 1.08_03

1.08_02 2010-09-10   Todd Rinaldo <toddr@cpan.org>
    * Update all versions to the new version. bump to 1.08_02

1.08_01 2010-09-10   Todd Rinaldo <toddr@cpan.org>
    * RT 45008 - only try TIOCSCTTY if we don't have a ctty
    * RT 53883 - IO::Tty detection on BeOS w/fix
    * RT 60014 - better META.yml by modernizing Makefile.PL
    * RT 44771 - Add _ to list of escape characters for compiler
      so it'll compile on windows This is experimental pending a
      successful dev release

v1.08 2009-02-05   Roland Giersig  <rgiersig@cpan.org>
    * Makefile.PL, Tty.xs: added support for posix_openpt(), thanks to Ed Schouten for providing a patch

v1.07 2006-07-18   Roland Giersig  <rgiersig@cpan.org>
    * Tty.xs: added some more letter to BSD allocation

v1.06 2006-07-15   Roland Giersig  <rgiersig@cpan.org>
    * Tty.pm: pre-allocate buffer for ioctl

v1.05 2006-06-06   Roland Giersig  <rgiersig@cpan.org>
    * Tty.xs: added includes <sys/pty.h>  and <sys/ptyio.h>

v1.04 2006-05-28   Roland Giersig  <rgiersig@cpan.org>
    * Tty.xs: added handling for z/OS (uses /dev/ptyp0000)
    * Makefile.PL: added <sys/pty.h> (for HPUX)

v1.03 2006-04-25   Roland Giersig  <rgiersig@cpan.org>
    * Tty.c: changed newCONSTSUB to use newSV(0) instead of PL_sv_undef, now undef'd constants work
    * Makefile.PL: made ccflags handling meta-char safe, added ldflags; enhanced error msg
    * Makefile.PL: added <sys/ptyio.h>

v1.02 2002-04-02   Roland Giersig  <rgiersig@cpan.org>
    * Tty.pm, Pty.pm: v1.02; disable warning for non-existant die handler

v1.01 2002-03-18   Roland Giersig  <rgiersig@cpan.org>
    * Makefile.PL: remove cpp, test-compile instead
    * Tty.pm, Pty.pm: disable die handler when requiring Stty

v0.97_04 2002-03-06  Roland Giersig  <rgiersig@cpan.org>
    * v0.97_04, final pre-release version

v0.97_03 2002-03-04  Roland Giersig  <rgiersig@cpan.org>
    * Pty.pm: v0.97_03
    * Makefile.PL: order of include files is preserved; added test for
    working cpp.
    * Tty.pm (clone_winsize_from): v0.97_03; added function.
    * Tty.xs (allocate_pty): fixed typo in close for _getpty; changed order of termios.h and termio.h includes

2002-02-26   Roland Giersig  <rgiersig@cpan.org>

    * test.pl: replaced Test.pm

    * Tty.pm (set_raw): v0.97_01; moved set_raw() from test to method

    * Tty.xs: got rid of snprintf; don't try openpty() and getpt() if
    ptsname is not there.

    * Pty.pm: v0.97_01; updated docs 

    * Makefile.PL: v0.97_01; auto-create IO::Tty::Constant

2002-01-31   Roland Giersig  <rgiersig@cpan.org>

    * Pty.pm: add IO::Stty to @ISA, master pty is sometimes a tty.

    * Tty.pm: v0.95_01

2002-01-30   Roland Giersig  <rgiersig@cpan.org>

    * Tty.pm, Pty.pm: v0.94_05

    * Tty.xs (allocate_pty): moved getpt() and openpty() before muxes

    * test.pl: if master isatty, set it also to raw; seems to be needed.

    * Makefile.PL: fixed checks; test problematic constants with a compile.
    
2002-01-23   Roland Giersig  <rgiersig@cpan.org>

    * Tty.pm: v0.94_03

    * test.pl: changed test to probe for maximum chunk the pty can
    handle; also, the /dev/tty test probes if an EOF is correctly
    reported from the child to the parent.

    * Tty.xs: finally made debug printfs optional via $IO::Tty::DEBUG.

2002-01-18   Roland Giersig  <rgiersig@cpan.org>

    * Tty.pm: v0.94_02

    * Tty.xs: added #include termio.h

2002-01-07   Roland Giersig  <rgiersig@cpan.org>

    * Pty.pm: adapted to new interface
    (close_slave): added for keeping open filecount straight
    (make_slave_controlling_terminal): created anew
    (slave): reverted from open_slave()

    * Tty.pm: v0.94_01

    * test.pl: adapted to new interface

    * Tty.xs: reverted to opening slave at creation time; added debug
    printfs
    (open_slave): use ptsname_r if there, forget about erroneous ttyname.
    (allocate_pty): added name param on openpty (doesn't take NULL for name)
    
2001-11-28   Roland Giersig  <rgiersig@cpan.org>

    * Tty.pm: v0.92_04

    * Tty.xs (BOOT): use perl_get_sv for backward compat

    * Makefile.PL: added analysis of configuration

2001-11-27   Roland Giersig  <rgiersig@cpan.org>

    * Tty.pm: v0.92_03

    * Tty.xs (BOOT): removed export_fail, undefined constants are now
    undef instead of not exportable; added CONFIG variable.

    * Makefile.PL: added setting of CONFIG var

    * test.pl: added printing of CONFIG var

    * Pty.pm (spawn): fixed bug with $^W handling

2001-11-17   Roland Giersig  <rgiersig@cpan.org>

    * Tty.xs (pty_allocate): complete rewrite, based on ideas from
    openssh and Xemacs.  Tries all ways detected by Makefile.PL in
    order, so in theory it should work everywhere (modulo system
    quirks).  First tries the high-level openpty() before getpt(),
    then various clone devices and finally BSD-style ptys.

    * Tty.xs (open_slave): moved master init stuff here, must be done
    before opening the slave.  The Stream module pushes are now tried
    on all systems but only generate warnings on systems that we know
    need them.

    * Makefile.PL: added tests for all kinds of functions and clone
    devices.
    
2001-11-14   Roland Giersig  <rgiersig@cpan.org>

    * Tty.xs (MODULE): stole creation code from openssh

    * test.pl: added test for controlling terminal

    * Pty.pm (spawn): rearranged setsid() and added a fresh open of
    the slave pty so the pty becomes the controlling terminal for the
    process.

2001-10-25   Roland Giersig  <rgiersig@cpan.org>

    * Pty.pm (spawn): copied spawning process from Tcl/Expect (thanks,
      Don!); should set the controlling tty so ssh and other password
      requesting programs should be OK; also now returns exec errors.
      (slave_pid): added method to get at PID of spawned process.

    * Makefile.PL: added TIOCCONS.

    * try: adapted to use spawn().

    * test.pl: adapted to use spawn(); added test for exec errors.

2001-10-16  Roland Giersig  <rgiersig@cpan.org>

    * Pty.pm (new): fixed bad my() line

    * automatically add IO::Stty to ISA if it exists.

2001-07-16  Roland Giersig  <rgiersig@cpan.org>

    * test.pl: finally some tests!  Spawns a perl mini-script that
      echoes back all characters from STDIN, but inverted.

    * Pty.pm (slave): slave now is set to be a controlling tty if possible;
      it also remembers it's name now.

    * Makefile.PL: 
      - on SCO, the slave pts* are in the /dev dir, not /dev/pts
      - added test for libutil.h, util.h, pty.h and openpty()
      - added symbol TIOCSCTTY

    * Tty.xs:
      - some SVR4 only define __SVR4; fixed.
      - OSF machines need termio.h for various macros
      - AIX doesn't define VOIDSIG; fixed.
      - Cygwin can use /dev/ptmx even though that file doesn't exist.
      - added openpty() version for FreeBSD and others that have 
        no good method for creating ptys; untested.

    * Tty.pm:
      - moved docu over from Pty.pm to lessen confusion Pty <-> Tty
      - added verified systems list
    
Change 588 on 2000/09/04 by <gbarr@pobox.com> (Graham Barr)

    Check for /dev/ptmx and /dev/pts instead of testing defined(SVR4)

Change 587 on 2000/09/04 by <gbarr@pobox.com> (Graham Barr)

    Make ttyname just warn when it is not implemented instead of croak

Change 586 on 2000/09/04 by <gbarr@pobox.com> (Graham Barr)

    Include <sys/modem.h> for HPUX

Change 585 on 2000/09/04 by <gbarr@pobox.com> (Graham Barr)

    Makefile.PL
    - Fix to how cc is called

Change 461 on 2000/03/29 by <gbarr@pobox.com> (Graham Barr)

    Release 0.03

Change 460 on 2000/03/29 by <gbarr@pobox.com> (Graham Barr)

    General cleanup and added PPD stuff into Makefile.PL

Change 310 on 1999/05/10 by <gbarr@pobox.com> (Graham Barr)

    - Removed the need for Configure by implementing a test in Makefile.PL
    - The existance of constants are now checked at import time, so @EXPORT
      had to be renamed to @EXPORT_OK. ie noting is imported by default


