WCSLIB version 8.3 (2024/05/14)
-------------------------------

* C library

  - Until now, wcsset() always operated unconditionally - the wcsprm
    struct was set or reset regardless of its current state.  Likewise
    the various *set() functions for the other structs.

    However, in some situations, particularly in threaded applications,
    it is desirable to have wcsset(), etc., check the state of the
    struct and return immediately if it has already been set.  This may
    now be accomplished by setting wcsprm::flag == 1 (instead of 0)
    before calling wcsset().  Likewise for the other structs.  This sets
    a "bypass" flag within the struct itself.

  - A new function, wcsenq(), queries the state of the wcsprm struct,
    specifically whether WCSLIB is managing its memory, whether the
    struct has been set, and whether or not it is in bypass mode, and
    whether it is self-consistent.  There are corresponding functions
    for the other structs: celenq(), disenq(), linenq(), prjenq(),
    spcenq(), and tabenq().  Please refer to the WCSLIB manual.

  - In the C test suite, modified twcs to test wcsenq() and also
    wcsset() in bypass mode.

  - Quelled nuisance compiler warnings in wcsbth(), wcspih(), wcsp2s(),
    and wcshdo().

* Fortran wrappers

  - Interprocedural Link Time Optimization (LTO), when used with the
    strict compiler options required by some Linux distributions, may
    place more stringent requirements on mixing code written in
    different languages.  Specifically, as far as WCSLIB is concerned,
    this applies for Fortran calling C (or vice versa) where the
    function parameter list includes a character variable.

    It is important to note that the existing Fortran wrappers work as
    they did before, with or without LTO, that issues only arise when
    strict LTO compiler options are enabled, and that wrappers without
    a character argument are unaffected.

    Fortran 2003 introduced the "language-binding-spec" attribute using
    the keyword BIND.  The INTERFACE block for a procedure may be given
    the BIND(C) attribute to specify the interface of an external,
    interoperable C function.  Use of this BIND(C) attribute is now
    virtually mandated by LTO (with said strict compiler options).

    The WCSLIB Fortran wrappers are written in C, e.g. wcs_f.c, with a
    Fortran-compliant interface, and these C functions are intended to
    be called directly from Fortran applications.  Three options were
    considered for achieving strict LTO compliance:

      1) Require that all existing Fortran applications be modified to
         conform to the Fortran 2003 language binding specification via
         the addition of INTERFACE blocks bearing the BIND(C) attribute
         for the existing wrappers.

         This option is clearly untenable.

      2) Rewrite the WCSLIB Fortran wrappers completely in Fortran 2003.

         It seems that this option may be tenable as the BIND(C) spec
         allows for C-equivalent derived types.  However, it would
         require rewriting all of the wrappers, 5 kloc of C code, in
         Fortran 2003 code that must directly manipulate the internals
         of all of the WCSLIB structs.

      3) Introduce a new layer of thin wrappers, written in Fortran
         2003, that do nothing more than define the INTERFACE to the
         existing wrappers written in C and then call them.
         Essentially this extracts the changes required in option (1)
         into a new set of wrappers.

         This was the option chosen on the basis of simplicity - only
         specific wrappers, namely those with character arguments, need
         be rewrapped.  It also minimises WCSLIB's exposure to Fortran
         2003, particularly for the sake of legacy astronomical packages
         such as Miriad and AIPS.  Further, it admits the possibility of
         the optional use of this extra layer of wrappers.

    The new Fortran 2003 wrappers reside in the Fortran subdirectory in
    files by the name of *_bindc.f90.  By default they are not compiled
    and not used.  To use them, WCSLIB must be configure'd with the new
    '--with-bindc' option.  This causes the new BIND(C) wrappers to be
    compiled, and the names of the old wrappers to be changed, for
    example from wcspih_() to wcspih_c().

    LTO compile problems reported by Eli Schwartz, Gentoo maintainer.

  - Added wrappers for celenq(), disenq(), linenq(), prjenq(), spcenq(),
    tabenq(), and wcsenq().

  - In the Fortran test suite, modified twcs to test WCSENQ and also
    WCSSET in bypass mode.

* PGSBOX

  - Changes mirroring those described above for the Fortran wrappers,
    the difference being that here we have a mix of C calling Fortran
    (e.g. cpgsbox() calling PGSBOX) as well as Fortran calling C (e.g.
    PGWCSL calling pgwcsl_c()).  As with the Fortran wrappers, the new
    configure option, '--with-bindc', chooses whether to use the new
    BIND(C) PGSBOX wrappers.

* Installation

  - Added '--with-bindc' as a new configure option (or BINDC=yes from
    the environment) to signal the use of the new strictly LTO-compliant
    Fortran wrappers.  See above.

  - Modified 'configure' to report the version of gcc used.  Likewise,
    for the 'show' rule in makedefs.

* User manual

  - Quelled a nuisance compiler warning in doxextr.

  - Documentation generation moved to doxygen 1.10.0 (was 1.9.8).


WCSLIB version 8.2.2 (2023/11/29)
---------------------------------

* C library (installation)

  - In prj.c, a number of variables with global scope that are only used
    internally were declared static to avoid namespace conflicts arising
    in Link Time Optimization (LTO) builds of the Rwcs wrappers.  This
    is a patch release as it does not affect the library itself other
    than in localising some symbols that were never meant to be global.
    Reported by Rodrigo Carrizo with patch.

    Likewise for an internally used helper function, prjoff().
    Likewise for a handful of variables in cel.c, dis.c, lin.c, tab.c,
    wcs.c, wcsfix.c, and wcshdr.c.


WCSLIB version 8.2.1 (2023/11/17)
---------------------------------

* Installation

  - With searching enabled in the HTML manual, doxygen creates a new
    subdirectory, html/search, which must be installed explicitly.


WCSLIB version 8.2 (2023/11/16)
-------------------------------

* C library

  - In wcshdo(), fixed character buffer overflows in the comment string
    for the longitude and latitude axes triggered by some projections,
    and also the formatting for generic coordinate systems.  Reported by
    Shu Niu.

* User manual

  - Documentation generation moved to doxygen 1.9.8 (was 1.9.7).

  - Enabled searching in the HTML manual.


WCSLIB version 8.1 (2023/07/06)
-------------------------------

Changes in the contents of the auxprm struct (in 8.0 beta) necessitated
incrementing the major version number from 7 to 8, i.e. the ABI changed.
Took the opportunity for minor tweaks to wcsprm and disprm.

* C library

  - In disprm, changed the order of maxdis and totdis to ensure correct
    alignment of doubles on 32-bit machines.

* Fortran wrappers

  - Match changes to disprm in the C library.

  - In the Fortran test suite, inserted a brief pause between plots in
    tprj2, tspc, and tpih2, which have long been a blur.

* PGSBOX

  - Quell innocuous compiler warnings from gfortran 12.1.0.  Inserted a
    brief pause between plots in pgtest and cpgtest.


WCSLIB version 8.0 beta (2023/07/01)
------------------------------------

Beta test version, not publically released.

* C library

  - Support planetary keywords A_RADIUS, B_RADIUS, C_RADIUS, BLON_OBS,
    BLAT_OBS, and BDIS_OBS in auxprm by analogy with the Solar keywords
    added at 7.1.  Requested by Chiara Marmo (Observatoire de Paris).

  - Added wcsprm::time to the wcsprm struct to record the TIME axis
    number (along with lng, lat, and spec).

  - Fixed a bug in wcspih() and wcsbth() where trailing blanks were not
    stripped from string keyvalues.  Reported by Naveen Dukiya.

    Changed test program tdis3 to test this.

  - Fixed a problem affecting thread safety in disp2x(), disx2p(), and
    diswarp().  Reported by Mohammad Akhlaghi.

* Fortran wrappers

  - Match changes to the C library supporting planetary keywords in
    auxprm and the addition of wcsprm::time.

* User manual

  - Documentation generation moved to doxygen 1.9.7 (was 1.9.5).


WCSLIB version 7.12 (2022/09/09)
--------------------------------

* C library

  - In wcsp2s() and wcss2p(), fixed handling of status returns from
    linp2x() and linx2p() relating to distortion functions, specifically
    with respect to setting the stat[] vector.  Reported by Sepideh
    Eskandarlou (via Mohammad Akhlaghi).

  - When extracting by axis type, wcssub() did not account for the
    possibility of time axes with -TAB or -LOG algorithm codes.
    Reported by Mihai Cara.

* Utilities

  - Fixed a bit of confusion in wcsgrid relating to cfitsio file opening
    syntax, e.g. file.fits+1.  It now matches wcsware in that regard.

  - Portability fix in sundazel - need to define _POSIX_C_SOURCE as
    199506L in order to get the declaration of localtime_r().  Reported
    by Marc Espie.

* User manual

  - Documentation generation moved to doxygen 1.9.5 (was 1.9.3).


WCSLIB version 7.11 (2022/04/26)
--------------------------------

* C library

  - In tabini(), the default index array should contain a 1-relative
    sequence: {1, 2,... N}.  Previously it was 0-relative.


WCSLIB version 7.10 (2022/04/24)
--------------------------------

* C library

  - In tabcpy(), collapse degenerate table index arrays if they are
    collapsed in the source struct.  Minor fix for output formatting
    in tabprt().

  - In the C test suite, added calls to wcstrim() in twcsfix to tidy
    the structs before printing.

* Utilities

  - The default option in wcsware now trims the wcsprm struct before
    printing it.  Use the '-p' option to print the untrimmed struct.


WCSLIB version 7.9 (2022/03/26)
-------------------------------

* C library

  - In wcsset(), bug fix for identifying time coordinate axes.
    Reported by Mihai Cara with patch.


WCSLIB version 7.8 (2022/03/25)
-------------------------------

* C library

  - In wcssub(), bug fix for tabular coordinates that change axis
    number, thus requiring tabprm::map to be updated.  Reported by
    Mihai Cara with patch.

    Also in wcssub():
      - check that all axes of a multi-dimensional table are extracted
        together,
      - fixed potential memory leaks for tabular coordinate axes when
        an attempt to subimage non-separable axes fails,
      - the error messages for non-separable coordinate systems are
        generally more informative,
      - subimage extraction by coordinate type now recognises time
        coordinate axis types via WCSSUB_TIME.

  - wcsset() now identifies time coordinate axes in wcsprm::types.

  - Extended test program twcssub to test the above modifications.

* Installation

  - Bug fix in the utils makefile for creating $(MANDIR)/man1.
    Reported by Aleksander Kurek.

  - Bug fix in the Fortran makefile for compiling and using 'tofits'.
    Reported by Stefan Brüns.

* User manual

  - Documentation generation moved to doxygen 1.9.3 (was 1.9.1).


WCSLIB version 7.7 (2021/07/12)
-------------------------------

* C library

  - In disfree() and disset(), removed potential for double invokation
    of free() on allocated memory.  Reported by Cyril Richard.

  - In wcsutil_fptr2str(), fixed a bug reported by Ralf Palsa (with fix)
    that caused it to be overly enthusiastic in stripping leading zeroes
    off addresses of function pointers.

  - In wcspcx(), replaced variable length arrays with allocated memory
    (portability issue).  Reported by Mihai Cara with patch.

  - Fixed buglets in wcsbth() and linsize() uncovered by gcc 11.1.0.

  - Quelled inconsequential compiler warnings from gcc 11.1.0 concerning
    wcsmix() (function prototype in wcs.h), wcstrim(), wcseulexe(),
    wcsulex(), and wcsutrne().

  - Defined _POSIX_C_SOURCE appropriately in tprj2.c and tspc.c to get
    the function prototype etc. for nanosleep() from time.h.

* Fortran wrappers

  - Quelled numerous inconsequential compiler warnings from gfortran
    11.1.0.

  - Fixed minor bugs uncovered by gfortran 11.1.0 in test programs tdis2
    and ttab3.

* Utilities

  - Moved 'tofits' from ./C/test/ into the utilities directory as it's
    generally useful, and added usage (converted to man page).

    Also made it a bit smarter in dealing with ISO/IEC 8859 and UTF-8
    encoded byte streams, in particular translating non-breaking spaces
    into ordinary spaces.

* Installation

  - Two patches for configure.ac provided by Mosè Giordano:
    1. makes it possible to build the Windows library using the MinGW
       cross-compiler,
    2. makes the soname of the MacOSX library consistent with other
       Unix systems.


WCSLIB version 7.6 (2021/04/13)
-------------------------------

* C library

  - Bug fix in tabs2x() triggered for 1-dimensional coordinate lookup
    tables on axes > 1.  Reported by Mihai Cara.

  - In datfix(), don't return status 0 if no change was made (fix for
    change made at release 7.4).  Reported by Derek Homeier.

  - New function wcspcx() in the wcsfix suite regularizes the linear
    transformation component of a coordinate description to make it more
    human-readable.  It decomposes CDi_ja into PCi_ja and CDELTia in
    such a way that CDELTia forms meaningful scaling parameters, often
    leaving an orthogonal or near-orthogonal matrix.  Optionally, it can
    then permute rows of this matrix to unscramble axis permutations.

    A test header may be generated from wcspcx.keyrec for input to
    wcsware (not exercised as part of the standard test suite).

  - New function wcstrim() frees memory allocated by wcsinit() for
    arrays in a wcsprm struct that remain unused after the struct has
    been set up.

  - New functions wcssize(), auxsize(), tabsize(), linsize(), dissize(),
    celsize(), prjsize(), spcsize(), and wcserr_size() compute the total
    size of the relevant structs, including allocated memory.

  - In the C test suite, inserted a brief pause in tprj2 and tspc, which
    otherwise have now become a blur.

* Fortran wrappers

  - Added wrappers for wcspcx(), wcstrim(), wcssize(), auxsize(),
    tabsize(), linsize(), dissize(), celsize(), prjsize(), spcsize(),
    and wcserr_size().

* Utilities

  - Added -c, -cp, -C, and -Cp options to wcsware to apply wcspcx()
    in a variety of ways, -m to apply wcstrim(), and -z to report the
    total size of the wcsprm struct with a breakdown of the sizes of
    its constituent structs.

  - Fixed compiler warnings for sundazel (portability issue).

* Installation

  - Upped the required version of Flex to 2.6.0 (was 2.5.9).  Problems
    with Flex 2.5.39 reported by Derek Homeier.

    Also added '--disable-flex' as a new configure option to force the
    use of the pre-generated Flex sources.


WCSLIB version 7.5 (2021/03/20)
-------------------------------

The C code in WCSLIB is moving piecemeal to the C99 standard.  In fact,
various indispensible C99 constructs have been used in WCSLIB for many
years: the long long int data type (in fitshdr() only); stdint.h,
inttypes.h, and the use of PRI formatting control (in wcsprintf(), which
is widely used by the library); and the C99-extended library function
vsnprintf() (used by wcserr for a decade).  Flex-generated C code also
uses C99 extensions, though with workarounds if they are not available.

Except in the header prologues, which are formatted in a special way for
generating the user manual, comments were changed en masse to C99 style
in release 7.3.1, and variable declarations in code that I have occasion
to modify will transition to the more general placement allowed by C99.
However, I have no plans to use any of the more esoteric features of
C99.

* C library

  - New function, wcsccs(), changes the celestial coordinate system of a
    wcsprm struct, for example, from equatorial to galactic coordinates.
    The parameters that define the spherical coordinate transformation
    must be provided.  This allows WCSLIB to provide this functionality
    without needing to know anything about specific celestial coordinate
    systems, and has the advantage of making the routine completely
    general.  Requested by Mohammad Akhlaghi.

    Modified test program twcsfix also to test wcsccs().

  - Fixed a problem common to all of the Flex code (fitshdr, wcsbth,
    wcspih, wcsulex, and wcsutrn) that made it thread-unsafe.  Reported
    by Cyril Richard.

    Added a new test program, tpthreads, to test thread safety.  It is
    only used for code development, and not exercised as part of the
    standard test suite.

  - In fitshdr(), fixed a problem that potentially could arise on
    systems where sizeof(long long int) is greater than 8 (64 bits).

* Fortran wrappers

  - Match changes to the C library: added a wrapper for wcsccs(), and
    modified twcsfix.f.

  - Because null addresses cannot be passed to functions in Fortran,
    wcssub_() now interprets *nsub == -1 && *axes == -1 as a signal to
    do a deep copy of one wcsprm struct to another.

* Utilities

  - New utility, sundazel, computes the local time of the Sun's passage
    through the specified apparent longitude or latitude in a user-
    defined coordinate system.  It can also perform several other Solar
    related calculations.  (It is unrelated to FITS WCS, and does not
    use WCSLIB.)

* Installation

  - Added an 'uninstall' rule to the makefiles.  Suggested by
    Cyril Richard.


WCSLIB version 7.4 (2021/01/31)
-------------------------------

* C library

  - In wcshdo(), fixed a bug introduced in release 5.9 that potentially
    caused loss of numerical precision in the sprintf() formatting of
    floating point keyvalues.  This was triggered when a large range of
    CRPIXja, PCi_ja, or CDELTia values (as three separate groups) were
    formatted using an 'f' format descriptor, the range not being so
    large that it would have forced wcshdo() to revert to 'E' format.
    Reported by Mohammad Akhlaghi.

    Also in wcshdo(), fixed a bug introduced in release 7.1 that caused
    the coefficients of the TPD distortion function not to be written to
    the header.  TPD and Polynomial distortion function headers will now
    always include the DPja.DOCORR keyword.  Reported by Derek Homeier
    with patch.

  - In wcsset(), fixed a segv generated in attempting to report a non-
    standard units string with wcserr message reporting disabled.
    Reported by Mohammad Akhlaghi.

    In wcsutrne(), allow 'Angstroms' and 'angstroms' as additional
    synonyms for 'Angstrom'.

  - In datfix(), ensure that 0 is returned if an informational message
    is set in wcsprm::err.  Consequent on feedback independently from
    Mihai Cara and Bruce Merry.

    Clarified that informational messages may be set in wcsprm::err
    for returns of 0 from datfix(), obsfix(), unitfix(), and spcfix().

* User manual

  - Added cautions about translating CDi_ja to PCi_ja plus CDELTia for
    those historical distortion functions (TPV, TNX, ZPX) that expect to
    operate on intermediate world coordinates, rather than intermediate
    pixel coordinates.  Consequent on feedback from Mohammad Akhlaghi.

  - Documentation generation moved to doxygen 1.9.1 (was 1.8.19).


WCSLIB version 7.3.1 (2020/08/17)
---------------------------------

There are no functional changes in this release.

* C library
* Fortran wrappers
* PGSBOX
* Utilities

  - Changed all C code, including within the flex sources, Fortran and
    PGSBOX wrappers, and test suite, to use C99 style commenting (i.e.
    using //), excluding the header prologues used to generate the user
    manual.

* User manual

  - Documentation generation moved to doxygen 1.8.19 (was 1.8.18).


WCSLIB version 7.3 (2020/06/03)
-------------------------------

* C library

  - wcshdo() was writing MJD-OBS twice to the header, and MJD-BEG not
    at all.

  - In wcshdo(), if MJDREF assumes its default value, just write
    MJDREF = 0 (not MJDREFI & MJDREFF), and omit writing DATEREF,
    which, with a value of '1858-11-17', looks strange and is
    potentially confusing.  Reported by Thomas Robitaille.

    If the fractional part of MJDREF is zero, then just write the
    integer part as MJDREF (i.e. not as MJDREFI & MJDREFF).

  - Bug fix in wcsfix() - it was writing error messages that referred
    to DATE-REF and MJD-REF rather then DATEREF and MJDREF.  Reported
    by Mihai Cara.

  - Under control of a new flag, WCSHDR_DATEREF, added the option to
    wcspih() and wcsbth() to accept DATE-REF, MJD-REF, MJD-REFI,
    MJD-REFF, JDREF, JD-REFI, and JD-REFF as synonyms for the standard
    keywords, DATEREF, MJDREF, MJDREFI, MJDREFF, JDREF, JDREFI, and
    JDREFF.  The latter buck the pattern set by the other date keywords
    ({DATE,MJD}-{OBS,BEG,AVG,END}), thereby increasing the potential
    for confusion and error.

* Fortran wrappers

  - As compilers are becoming much stricter (gfortran 10), modified all
    Fortran test programs to use the type-specific equivalents of the
    various *PUT and *GET routines.  Reported by Ole Streicher.

  - For the fitshdr wrappers, added type-specific equivalents of
    KEYGET: KEYGTI, KEYGTD, and KEYGTC.

* PGSBOX

  - Modified pgtest to use the type-specific equivalents of WCSPUT.

* User manual

  - In the section "WCSLIB Fortran wrappers", promoted use of the type-
    specific equivalents of the various *PUT and *GET routines.

  - In the section "FITS-WCS and related software", added ASCL and ADS
    codes, where they exist, for all software packages mentioned.

  - Documentation generation moved to doxygen 1.8.18 (was 1.8.17).


WCSLIB version 7.2 (2020/03/09)
-------------------------------

* C library

  - In wcssub(), fixed a bug relating to handling coordinate lookup
    tables.  Reported by Mihai Cara with fix.

    Also increased the number of coordinate axes handled from 10 to 32.

* Installation

  - New configure option, '--disable-shared', defeats generation of the
    sharable library.


WCSLIB version 7.1 (2020/01/01)
-------------------------------

Changes in the contents of the wcsprm struct necessitated incrementing
the major version number from 6 to 7 (i.e. the ABI changed).

* C library

  - In wcsset(), set wcsprm::mjdref[] to zero if neither it nor
    wcsprm::dateref are defined, as per the standard.  Reported by
    Thomas Robitaille.

    wcsset() now also checks that the number of coordinate axes does not
    exceed 32.

  - In tabs2x(), fixed an out-of-bounds array access produced by invalid
    world coordinates.  Reported by Mihai Cara and Michael Seifert.

    In tab.c, declare static three helper functions, tabedge(),
    tabrow(), and tabvox(), used by tabs2x().  Increased the number of
    coordinate axes handled by tabvox() from 16 to 32.

  - Extended datfix() to handle MJDREF/DATEREF, overlooked in the
    changes in release 6.1.  Also fixed the handling of MJD < 0.

  - Support Solar keywords RSUN_REF, DSUN_OBS, CRLN_OBS, CRLT_OBS,
    HGLN_OBS, and HGLT_OBS by accomodating them within an auxiliary
    struct, auxprm, within the wcsprm struct.  Now filled by the header
    parsers, wcspih() and wcsbth() and handled routinely by wcsinit(),
    wcssub(), wcscompare(), wcsfree(), wcsprt(), wcsset(), and wcshdo().
    Requested by Stuart Mumford (SunPy) with input from Bill Thompson.

  - Bug fix in wcsprintf_set() for resetting the output disposition.
    Reported by Mihai Cara with patch.

  - In dis.{h,c}, the DOCORR record is now handled as a first-class
    value via disprm::docorr.  This required changing the struct.

  - In cel.c, spc.c, wcserr.c, wcsfix.c, wcshdr.c, and wcsutil.c,
    quelled compiler warnings from gcc 9.2.0 generated by
    -Wmaybe-uninitialized and -Wstringop-truncation (via -Wall).

    Similarly for various programs in the test suite.

  - In various functions, quelled warnings from the Microsoft Visual C++
    compiler, mostly relating to pointer arithmetic.  Reported by
    Michael Seifert.

* Fortran wrappers

  - Handled compiler warnings from gcc 9.2.0 generated by
    -Wstringop-truncation (via -Wall).

  - Minor enhancements to character argument handling, including, in
    prjget_(), blank-filling the returned strings matching PRJ_CODE and
    PRJ_NAME, and likewise for SPC_TYPE and SPC_CODE in spcget_().

* Utilities

  - In wcsgrid, handled compiler warnings from gcc 9.2.0 generated by
    -Wstringop-truncation (via -Wall).

* User manual

  - In the section on "FITS-WCS and related software", added mention of
    the R wrappers (Rwcs).  Suggested by Aaron Robotham.

  - Added a new section detailing the limit on the number of image axes
    that WCSLIB can handle (currently 32), and how this could be
    increased if needed.  Prompted by Thomas Robitaille.

  - Augmented the section on the Fortran wrappers, particularly with
    respect to character string handling in argument lists.

  - Documentation generation moved to doxygen 1.8.17 (was 1.8.16).


WCSLIB version 6.4 (2019/08/15)
-------------------------------

* Installation

  - The rule change to the Fortran makefile in v6.3 to add getwcstab_f.o
    to the sharable library causes it to depend on CFITSIO to resolve
    fits_get_wcstab().  Hence backed out of that change.

* User manual

  - Documentation generation moved to doxygen 1.8.16 (was 1.8.14).


WCSLIB version 6.3 (2019/07/12)
-------------------------------

* C library

  - Fixed the Polynomial and TPD distortions so that, as stipulated in
    WCS Paper IV, they are now considered to return an additive
    correction to be applied to the given coordinates, rather than the
    corrected coordinates themselves.

    Added a new subsection to the prologue of dis.h entitled 'Historical
    idiosyncrasies', which discusses this issue and other vagueries.

    Amended components of the test suite accordingly: SIPTPV.keyrec,
    TPV7.keyrec, and tdis1.c.

  - Fixed memory leaks and other potential problems that arose in the
    wcserr system consequent on changes made in release 6.1.

    Memory allocated by wcsfixi() for messages in the array of wcserr
    structs must now be freed by the caller.  Amended twcsfix.c
    accordingly.

  - Plugged memory leaks arising in disset().

  - New function wcsdealloc() provided to free memory allocated within
    certain WCSLIB routines.  Suggested by David Motl.

  - Eliminated a swag of inconsequential compiler warnings, particularly
    those emanating from the flex sources.

* Validation

  - The library, Fortran wrappers, utilities, and test programs now pass
    runtime analysis using -fsanitize=address and -fsanitize=undefined
    in gcc 8.3.0, in addition to valgrind.  Also compile-time strictures
    using -std=c99, -pedantic, -Wall, -Wextra, and -DFORTIFY_SOURCE=2.
    Prompted by feedback from Ole Streicher.

* Installation

  - The non-graphical tests now run reliably in parallel builds
    (make CHECK=nopgplot -j8 check).  Requested by Mohammed Akhlaghi.

    The graphical tests can also be run in parallel, but as PGPLOT can
    only handle one stream at a time, some graphics are likely to be
    lost.  Nevertheless, it is a useful option, especially with runtime
    analysis via -fsanitize=address, etc.

  - As CFITSIO doesn't provide a Fortran wrapper for fits_read_wcstab(),
    getwcstab_f.o is now always included in the WCSLIB object library
    and sharable library if CFITSIO is available (and the WCSLIB Fortran
    wrappers are required).  Use 'configure --without-cfitsio' to
    defeat this.

  - Tidied up some aspects of the build where CFITSIO is not available.

* User manual

  - Fixed minor formatting problems in dis.h.


WCSLIB version 6.2 (2018/10/20)
-------------------------------

* C library

  - Consequent on the change in release 6.1, reapplied soothing balm to
    the wtbarr struct definition in wcs.h for C++ compilation (C and
    Fortran compilation being unaffected).  While the object libraries
    themselves are unchanged, the modified wcs.h must be installed for
    compiling C++ applications.  Reported by Corentin Schreiber.

* User manual

  - Fixed minor formatting problems with the doxygen manual generation.


WCSLIB version 6.1 (2018/10/19)
-------------------------------

* C library

  - Added support for time-related WCS keywords (Paper VII) by expanding
    the wcsprm struct to store them as auxiliary values, now filled by
    the header parsers, wcspih() and wcsbth() and handled routinely by
    wcsinit(), wcssub(), wcscompare(), wcsfree(), wcsprt(), wcsset(),
    and wcshdo().

  - Augmented datfix() to do various consistency checks on the new
    time-related keyvalues, and added a new routine, obsfix(), to check
    consistency of the OBSGEO-[XYZLBH] observatory coordinates.

  - In the usage notes for wcsbth(), clarified that, according to WCS
    Papers III and VII, certain global image header keywords are
    permitted in binary table headers and are expected to be inherited
    by image arrays and pixel lists, and elaborated on the difficulties
    that such inheritance may cause for pixel lists.

  - Revamped message string handling in the wcserr module to allow
    arbitrarily long messages while greatly reducing the sizeof the
    struct.

  - Extracted the definition of the wtbarr struct from wcs.h to a
    separate header file, wtbarr.h, in order to reduce the number of
    irrelevant warnings generated by 'gcc -Wpadded' (primarily for
    code development).  Applications code that needs to access members
    of the struct (unlikely) must now include wtbarr.h (or wcslib.h).

  - The WCSLIB major version number was incremented as changes to the
    wcsprm struct makes the ABI of the sharable library incompatible
    with executables linked with that of older releases.

* Fortran wrappers

  - Match changes to the C library, including adding a wrapper for
    obsfix().

* Installation

  - Several changes to configure and the makefiles aimed at facilitating
    code development.


WCSLIB version 5.20 (2018/10/05)
--------------------------------

* C library

  - Added utility functions dpkeyi() and dpkeyd() to dis.c, and removed
    the corresponding functions from wcsutil.c.

* Fortran wrappers

  - New wrappers for dpkeyi() and dpkeyd().

* Installation

  - Reworked the makefiles to allow parallel library builds, as required
    by some software distributions.  Reported by Dustin Lang with
    suggested patch, and Zaak Beekman.  (Parallel execution of the test
    suite is not supported.)

  - The introduction of "deterministic" archiving (ar(1)) broke
    dependency analysis in the WCSLIB makefiles on the many systems
    where it is now enabled by default (i.e. binutils configured with
    --enable-deterministic-archives).

    Modified configure to force non-deterministic archiving during the
    library builds, thus repairing the dependency analysis.  However,
    the static object libraries are now reconstructed using
    deterministic archiving in the process of installing them.

  - Fixed problems with the dependency analysis, solely affecting code
    development.


WCSLIB version 5.19.1 (2018/07/28)
----------------------------------

* Installation

  - Updated ./config/config.{guess,sub} to the latest versions from the
    GIT repository, timestamped 2018-07-18 and 2018-07-25, respectively.
    The previous pair were dated 2012-02-10 and 2012-04-18.


WCSLIB version 5.19 (2018/07/27)
--------------------------------

* C library

  - In wcssub(), fixed a bug in handling distortion functions on axes
    with changed axis number in the subimage (i.e. via deletion or
    addition of an axis).

  - In various routines within dis.c, wcs.c, wcshdr.c, and wcspih.l,
    increased the size of various sprintf() output buffers to avert
    -Wformat-overflow warnings from gcc 8.1.0 (with -DFORTIFY_SOURCE=2).
    Reported by Simon Conseil.

    Also fixed other warnings in these routines from gcc 8.1.0
    relating to -Wcast-function-type, -Wmaybe-uninitialized, and
    -Wunused-parameter.

  - In wcsutrn.l (the units alias translator used by wcsfix), recognise
    'Deg', 'Degree', and 'Degrees' as aliases for 'deg'.  Rogue header
    reported by Jim Lewis.

  - Added a note to the prologue of spx.h explaining WCSLIB's use of
    Cox's air-to-vacuum transformation equation rather than the IUGG
    relation cited in WCS Paper III.  Noted by Benjamin Alan Weaver.

  - In the test suite, avert nuisance compiler warnings in tdis1.
    Made tsphdpa more robust in handling user coordinate input.

* PGSBOX

  - In pgwcsl_(), avert nuisance warnings from gcc 8.1.0 relating to
    unused parameters (-Wunused-parameter).  Also averted nuisance
    compiler warnings in cpgtest.

* Utilities

  - wcsware was not reading the -TAB table from the FITS file for
    alternate descriptions, bug reported by Chiara Marmo.  Nor was
    wcsfix() ever invoked for them.

    Made it more robust in handling user input of coordinates for the
    -x and -w options.

  - Fixed compiler warnings from gcc 8.1.0 in HPXcvt
    (-Wmaybe-uninitialized), and wcsgrid (-Wformat-overflow).

* Installation

  - Amended configure.ac to allow cross-compilation, and also updated
    the auxiliary configure scripts in the config/ directory.  Patch
    supplied by Mosè Giordano.


WCSLIB version 5.18 (2018/01/10)
--------------------------------

* C library

  - New routines introduced to preclude altering the global variables
    NPVMAX, NPSMAX, and NDPMAX, which determine how much memory to
    allocate for storing PVi_ma, PSi_ma, DPja, and DQia keyvalues:
    wcsinit(), lininit(), lindist(), and disinit().  These are now used
    by various WCSLIB routines, such as the header parsers, which
    previously temporarily altered the global variables, thus posing a
    thread hazard.  Testing and feedback on thread-safety issues, with
    patches, from Rodrigo Tobar Carrizo.

  - The Flex scanners, fitshdr(), wcsbth(), wcspih(), wcsulexe(), and
    wcsutrne(), have been rewritten as thin wrappers (with the same API)
    over scanners that were modified (with changed API) as required to
    use Flex's "reentrant" option.  Consequently, they are now reentrant
    and should be thread-safe.  That also passes through to the
    deprecated wrappers, wcsulex() and wcsutrn().

  - Fixed memory leaks in lindist() and lincpy() uncovered by valgrind.

  - Test programs tfitshdr, tpih1, tpih2, and ttab3 are now careful to
    free all allocated memory before exit to defeat spurious reports of
    memory leaks by valgrind.

* Fortran wrappers

  - New wrappers for wcsinit(), lininit(), lindist(), and disinit().

* Installation

  - configure now recognises the value of ARFLAGS obtained from the
    environment.

* User manual

  - Updates and amendments in line with the above changes.

  - Documentation generation moved to doxygen 1.8.14 (was 1.8.13).


WCSLIB version 5.17 (2017/09/18)
--------------------------------

* C library

  - Fixed a memory leak in wcspih().  Reported by Pim Schellart.

  - Fixed compiler warnings about comparison between signed and unsigned
    integers in tab.c (Pey-Lian Lim).  Also fixed warnings in other
    functions about unused parameters.

* Fortran wrappers

  - Fixed compiler warnings about comparison between signed and unsigned
    integers in several routines.

* PGSBOX

  - Fixed a compiler warning about comparison between signed and
    unsigned ints.

* Installation
