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