Download Latest Version plplot-5.15.0.tar.gz (15.4 MB)
Email in envelope

Get an email when there's a new version of PLplot

Home / plplot / 5.15.0 Source
Name Modified Size InfoDownloads / Week
Parent folder
README.release 2019-06-01 141.7 kB
plplot-5.15.0.tar.gz 2019-06-01 15.4 MB
plplot-5.15.0.tar.gz.asc 2019-06-01 488 Bytes
Totals: 3 Items   15.5 MB 107
PLplot Release 5.15.0

This is a release of the PLplot plotting package. It represents the
ongoing best efforts (roughly ~50 commits since the last release) of
the PLplot development community to improve this package, and it is
the only version of PLplot that we attempt to support.  Releases in
the 5.x.y series should be available roughly two times per year.

Note that PLplot has been continuously developed since 1986 so it has
accumulated a lot of cruft since that time.  Therefore, we are now
slowing removing that cruft to improve the lot of both new users and
new members of the development team.  As a result virtually every
PLplot release has some backwards incompatibilities introduced to help
clean it up so please pay careful attention to the OFFICIAL NOTICES
FOR USERS below (and also in the various sections of
README.cumulated_release if you need backward incompatibility
information for several recent releases) where we document such
incompatibilities to make life easier for those who have prior
experience with older PLplot releases.

If you encounter a problem with this release that is not already
documented on our bug tracker, then please send bug reports to PLplot
developers via our mailing lists (preferred for initial discussion of
issues) at <http://sourceforge.net/p/plplot/mailman/>. If it turns out
no quick resolution is possible via mailing-list discussion, then the
issue should be placed on our bug tracker at
<http://sourceforge.net/p/plplot/bugs/>.

This software is primarily distributed under the LGPL.  See the
Copyright file for all licensing details.
________________________________________________________________

CONTENTS

1. OFFICIAL NOTICES FOR USERS

1.1 CMake version compatibility
1.2 Remove typedefs for PL_NC_GENERIC_POINTER and PL_GENERIC_POINTER
1.3 Fix typedef for PLINT_NC_VECTOR

2. Improvements relative to the previous release

2.1 Bug fixes
2.2 Update PLplot to be consistent with modern free software
2.3 Rewrite the configuration of the INSTALL_RPATH target property
2.4 Rewrite the rpath configuration of traditionally built examples
2.5 Factor the PLplot export files
2.6 Introduce symbolic constants in our color-map routines
2.7 New implementation of the range checks for the validity of cmap0 and cmap1 user input
2.8 New implementation of the -bg command-line option
2.9 Implement ctest for the build system of the installed examples

3. PLplot testing
________________________________________________________________

1. OFFICIAL NOTICES FOR USERS

1.1 CMake version compatibility

Our build system is implemented using CMake.  The minimum version of
CMake we currently allow is 3.13.2 on all platforms, and currently the
latest version of CMake that has been officially released is 3.14.4.

Note, that as of the time of this release we have the following
free distribution packaging support for modern CMake versions:

* Cygwin: 3.13.1 from <https://cygwin.com/cgi-bin2/package-grep.cgi>
* MinGW-w64/MSYS2: 3.14.4 from <http://repo.msys2.org/mingw/x86_64/>
* Fink: 3.11.0 from <http://pdb.finkproject.org/pdb/browse.php?name=cmake>
* MacPorts: 3.14.4 from <https://www.macports.org/ports.php?by=name&substr=cmake>
* Homebrew: 3.14.4 from <https://formulae.brew.sh/formula/cmake>
* Debian Testing: 3.13.4 (from <https://packages.debian.org/buster/cmake> where Testing = Buster is likely to become the official Debian Stable release of Debian in mid-2019, i.e., soon, see <https://en.wikipedia.org/wiki/Debian_version_history>).
* Other modern Linux distributions: likely 3.13.4 or greater since they typically package later versions of CMake than are available for Debian Stable.

It appears from the above table that binary packages for CMake for our
minimum allowed version (3.13.2) or later should be available soon or
immediately on most modern free software distributions.  However,
PLplot users of distributions that do not package 3.13.2 or later
(e.g., Cygwin and Fink) will need to build CMake 3.13.2 or later for
themselves before they build PLplot-5.15.0

This particular PLplot release has been comprehensively tested for
CMake-3.13.2 through 3.14.4 on a variety of platforms (see
<http://sourceforge.net/p/plplot/wiki/Testing_Reports> for details
of recent tests on all platforms).

Therefore, if the CMake version is within this range there is an
excellent chance that our build system will "just work" on all
platforms.  Furthermore, if later on you try CMake versions greater
than the latest version of CMake that is available at the time of this
PLplot release (3.14.4), our build system will likely continue to work
well because CMake has an excellent reputation for preserving
backwards compatibility.

1.2 Remove typedefs for PL_NC_GENERIC_POINTER and PL_GENERIC_POINTER

typedef PLPointer   PL_NC_GENERIC_POINTER;
typedef PLPointer   PL_GENERIC_POINTER;

were introduced as of 5.12.0 as the start of a plan that was almost
immediately abandoned.  So these typedefs were officially deprecated
in 5.13.0, and they are now being dropped as of this release.

This cruft-removal causes a backwards-incompatible change to our C API
that is of no concern for users who do not use PL_NC_GENERIC_POINTER
and PL_GENERIC_POINTER in their code.  However, for the remaining
users the solution must be to replace PL_NC_GENERIC_POINTER and
PL_GENERIC_POINTER by PLPointer everywhere in their code.

1.3 Fix typedef for PLINT_NC_VECTOR

This typedef (first defined as of 5.12.0) has been changed from

-typedef int *                 PLINT_NC_VECTOR;
+typedef PLINT *               PLINT_NC_VECTOR;

to fix an inconsistency that was incorrectly and inadvertently created
for 5.12.0 between this typedef and all other PLINT* typedefs.

For systems that provide the stdint.h header the PLINT typedef is

typedef int32_t        PLINT;

but for those systems that do not provide that header, this typedef is

typedef int            PLINT;

Therefore the above change to the typedef for PLINT_NC_VECTOR is
backwards-incompatible (requiring recompilation of user code but no
changes to that code to fix the problem) for users with systems that
(a) provide the stdint.h header, and (b) define int differently than
int32_t for those systems.
________________________________________________________________

2. Improvements relative to the previous release

2.1 Bug fixes

The bug fixes in this release are noted in the ~50 commit messages
collected in ChangeLog.release.

Commit plplot-5.14.0-8-gdb9d90d0b should be of particular note since
it finally makes results achieved with our qt device driver linked to
Qt5 similar to the high quality of results achieved with that same
device driver when it is linked to Qt4.

2.2 Update PLplot to be consistent with modern free software

This ongoing project is implemented by making sure PLplot passes all
[comprehensive
tests](<https://sourceforge.net/p/plplot/wiki/Testing_Reports) on the
Debian Testing platform which is a high-quality rolling release that
keeps up to date with modern free software development.  As a result
PLplot should be compatible with the following modern versions of free
software packages:

* CMake-3.13.2 through 3.14.4       (core, bindings, and device drivers)
* gcc 8.3.0			    (core)
* qhull 2015.2			    (optional core interpolation functionality)
* shapelib 1.4.1		    (optional core map functionality)
* swig 3.0.12 through 4.0.0	    (java, lua, octave, and python bindings)
* gnatmake/gdc/gfortran 8.3.0	    (ada, d, and fortran bindings)
* g++ 8.3.0			    (c++ binding and psttf and wxwidgets device drivers)
* pango 1.42.3, cairo 1.16.0	    (cairo device driver)
* openjdk 11.0.3		    (java binding)
* lua 5.3.5			    (lua binding)
* camlidl 1.05, ocaml 4.05	    (ocaml binding)
* octave 4.4.1	      		    (octave binding)
* python 3.7.3			    (python binding)
* Qt 5.11.3			    (qt binding and qt device driver)
* Tcl/Tk 8.6.9			    (tcl/tk binding and tk device driver)
* libx11 2:1.6.7		    (tk and xwin device drivers)
* wxWidgets 3.0.4		    (wxwidgets binding and device driver)

Notes for this table:

* The CMake versions used for testing were locally built rather than
  installed from Debian testing, see Section 1.1 for details.

* The Debian Testing package for swig 3.0.12 contains a swig fix from
  swig-4.0.0. That fix allows an Octave-4.4 binding to be built for
  PLplot.  If your swig-3 version does not have this fix, you should
  use Octave-4.2 until swig-4 is released.

* The swig-4.0.0 version used for testing was locally built since this
  version is not packaged for Debian Testing (yet).

* The Debian Testing package for lua 5.3.3 currently perpetuates
  [a serious bug](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=902238)
  for that particular upstream version.  The above good results for lua
  5.3.5 were generated with a locally built version of upstream 5.3.5
  that contains the essential fix for 5.3.3.

2.3 Rewrite the configuration of the INSTALL_RPATH target property

This change is important for those Unix users who install
PLplot dependencies (such as libLASi) in non-standard locations and
who use the traditional build of our installed examples rather than
the CMake-based build of those examples.

DT_RPATH and its more modern variant DT_RUNPATH are two ways on Unix
systems to inform the run-time loader of non-standard locations of
shared libraries that are needed by applications.  Therefore, the
details of how our build system configures use of the INSTALL_RPATH
target property (which controls DT_RPATH on old Unix systems such as
Debian Jessie and DT_RUNPATH on more modern Unix systems such as
Debian Testing) become important for the traditional build of
installed examples if any external library (e.g., libLASi) needed by
any PLplot component is installed in a non-standard location.  (Note
that CMake-based builds automatically take care of all rpath concerns
so our CMake-based core build and CMake-based build of the installed
examples automatically work fine regardless of where our external
libraries are installed or the INSTALL_RPATH target property set for
them.)

Our INSTALL_RPATH configuration worked fine for our traditional builds
of installed examples on DT_RPATH platforms such as Debian Jessie and
was extensively tested in that era with epa_built external libraries
that were installed in non-standard locations.  However, that
configuration did not work correctly for DT_RUNPATH platforms such as
Debian Testing since it was not always consistent with the following
additional constraint on the use of DT_RUNPATH that has been taken
from
<https://refspecs.linuxfoundation.org/elf/gabi4+/ch5.dynamic.html>:

  "The set of directories specified by a given DT_RUNPATH entry is
  used to find only the immediate dependencies of the executable or
  shared object containing the DT_RUNPATH entry. That is, it is used
  only for those dependencies contained in the DT_NEEDED entries of
  the dynamic structure containing the DT_RUNPATH entry, itself. One
  object's DT_RUNPATH entry does not affect the search for any other
  object's dependencies."

As a result PLplot's use of the new libLASi release (which necessarily
had to be built locally and with a non-standard install prefix) failed
for our traditional build.

To address this issue I (AWI) have completely rewritten our rpath
configuration logic for the INSTALL_RPATH property of installed
targets to (i) be consistent with the above additional DT_RUNPATH
constraint, and (ii) have that configuration done in a standardized
way for all our installed targets (executables, dll's (modules)
generated by swig, ordinary dll's, shared libraries and static
libraries).  The result of this work is a substantial reduction in the
number of lines of CMake logic in our build system (since virtually
all of the INSTALL_RPATH logic is now taken care of in the new
process_rpath function).

Note that this new logic always uses the transitive INSTALL_RPATH
method for the static build case and by default uses non-transitive
INSTALL_RPATH method for the shared library case (regardless of
whether the device drivers are dynamic or nondynamic).  And that
default for the shared library case works well for Debian Testing.
But if there are still some Unix platforms out there that only work
for the transitive INSTALL_RPATH method for the shared library case,
the user can choose that method by setting the
-DNON_TRANSITIVE_RPATH=OFF cmake option.  And as always if the user
(typically a binary package maintainer) specifies -DUSE_RPATH=OFF, the
INSTALL_RPATH target property (transitive or otherwise) will not be
set at all for installed targets with the result that DT_RPATH (old
Unix systems) and DT_RUNPATH (modern Unix systems) will not be set for
those targets.

N.B. in the rewritten INSTALL_RPATH logic the simplifying assumption
is made that in both the non-transitive and transitive rpath cases,
that all non-system library locations must be mentioned in the derived
DT_RPATH or DT_RUNPATH.  Of course, this assumption is only necessary
if the relevant libraries are shared so the result in the case where
the relevant library (whether external or internal) is static is the
non-standard location of that library is unnecessarily listed in the
resulting DT_RPATH or DT_RUNPATH.  So the result is the run-time
loader has to check a bit more before deciding that location
information is irrelevant so it adds slightly to start-up latency.
However, implementing a check whether external and internal libraries
are shared or not would so complicate our build system code and
therefore make it more fragile that I have decided to stick with using
this simplifying assumption.

2.4 Rewrite the rpath configuration of traditionally built examples

In this case, "traditionally built" refers to the traditional (GNU
make + pkg-config) build of the installed examples (including the
ocaml examples) AND the CMake-based builds of the ocaml examples in
the core build tree and the build tree for the installed examples.
(OCaml is a special case because there is no CMake official support
for this language so even for the CMake-based build of ocaml examples,
low-level CMake add_custom_command/target pairs must be used that are
very similar to the traditional build of the installed ocaml examples.

This change updated the somewhat sloppy transitive rpath method that
was used before for traditionally built examples to the rigorous
method I have implemented (see Section 2.3) recently for the case of
the INSTALL_RPATH property for installed targets.  That is, for the
non-transitive rpath case the traditionally built examples only refer
to the directory location of the "PLPLOT::" libraries that the plplot
examples in question depend on, and for the transitive case append the
INSTALL_RPATH locations for just the internal libraries that are
dependencies of the examples in question.  See the process_rpath
function in cmake/modules/plplot_functions.cmake for details.)

Note we use the same simplifying assumption mentioned in Section 2.3
to decide which library locations should be inserted in DT_RPATH or
DT_RUNPATH for traditionally built examples.

Note this more rigorous approach solved an ocaml rpath bug that was
exposed by the DT_RUNPATH Debian Testing platform.  So as far as I
know the combination of this change and the INSTALL_RPATH changes
described in section 2.3 eliminates the last known regression against
the good test results I achieved with the old sloppy rpath method on
the Debian Jessie platform with its old-fashioned but nevertheless
working DT_RPATH capability.

In sum, recent comprehensive tests on the Debian Testing platform
support the idea that our rewritten INSTALL_RPATH configuration for
installed targets and our rewritten rpath configuration for
traditionally built executables generates working DT_RUNPATH results
for the case where either/both PLplot libraries or external libraries
are installed in non-standard locations.  And presumably that good
result also holds true for generated DT_RPATH results since even quite
sloppy rpath configuration seems to have worked well in the past on
such systems (e.g., Debian Jessie).  However, if there are Unix
platforms still out there where the run-time loader (operating at run
time in contrast to the linker that operates at build time) errors out
by saying it cannot find a library for the present rpath methods, the
first thing the user should try is -DUSE_RPATH=ON (if they are not
using that default already) and the second thing they should try if
this trouble occurs for the shared build case is
-DNON_TRANSITIVE_RPATH=OFF.

2.5 Factor the PLplot export files

Packagers of binary versions of PLplot used in free software
distributions such as Debian and Fedora typically split the PLplot
installation into many different package components, and users of
those distributions have the option of only installing the subset of
those packages (and their dependencies) that they need.  However, the
CMake-based build system that is part of the examples package (which
contains source code for all our test examples) can currently only
build the examples if the user installs all binary components of
PLplot.

The current change is a large step toward removing that constraint.
This change factors the the two previous integrated PLplot export
files into two exported files per exported target (which can be an
installed library, module, or executable).  So if packagers distribute
these factored export files in the same binary packages which contain
the actual libraries, modules, or executables which are described by
the exported targets, then *any* CMake-based build systems for
software that depends on the PLplot installation can simply
interrogate that installation (using the if(TARGET ...)  command) to
see what subset of the PLplot targets have been installed and act
accordingly.

N.B. the CMake-based build system for the example source code that is
installed is a (large) example of such software.  But that software
has not yet been changed as described above so packagers will have to
wait until the next release before the source code for the appropriate
subset of the examples in that package can be built properly against
the subset of binary PLplot packages that have been installed by
users.

2.6 Introduce symbolic constants in our color-map routines

These new symbolic constants (in their C/C++ form) are

// Default number of colors for cmap0 and cmap1.
#define PL_DEFAULT_NCOL0    16
#define PL_DEFAULT_NCOL1    128
// minimum and maximum PLINT RGB values.
#define MIN_PLINT_RGB       0
#define MAX_PLINT_RGB       255
// minimum and maximum PLFLT cmap1 color index values.
#define MIN_PLFLT_CMAP1     0.
#define MAX_PLFLT_CMAP1     1.
// minimum and maximum PLFLT alpha values.
#define MIN_PLFLT_ALPHA     0.
#define MAX_PLFLT_ALPHA     1.

These constants should be defined for our core C "plplot" library and
all our different supported language bindings.  These symbolic
constants are used, for example, in our range checks for the validity
of cmap0 and cmap1 user input.

2.7 New implementation of the range checks for the validity of cmap0 and cmap1 user input

Instead of exiting when cmap0 or cmap1 user input is invalid, the
philosophy for the new implementation of cmap0 and cmap1 range
checking is to issue a warning message, substitute something
reasonable, and continue.  In addition, for the new implementation we
attempt to catch all invalid cmap0 or cmap1 user input rather than
just a subset of such cases.

2.8 New implementation of the -bg command-line option

The -bg command-line option is used to specify the RGB and (optional)
alpha values of the background.  The new implementation is much more
careful about checking for user input errors in both the RGB and alpha
values and follows the philosophy of warning and continuing with
reasonable default values when the user specifies an non-parsable or
invalid value for the RGB or alpha values of the background.

2.9 Implement ctest for the build system of the installed examples

Previously the ctest command was only configured for the CMake-based
build system of the core build of PLplot libraries and the source code
of the PLplot examples that appears in the PLplot source tree.  What
is changed now is the ctest command has also been configured for the
CMake-based build system of the installed source code for the PLplot
examples using in most cases common CMake logic as for the core build
case.  As a result, the ctest results in the two very different cases
cover the same tests.  In addition the same (good) ctest results have
been achieved for these two different builds confirming that all is
well with the core build of PLplot libraries and examples as well as
the installed binary version of PLplot libraries and corresponding
CMake-based build system for the installed source code for the PLplot
examples that is built against those installed libraries.
________________________________________________________________

3. PLplot testing

Comprehensive tests of this release are documented in
<https://sourceforge.net/p/plplot/wiki/Testing_Reports>.  In addition,
developers and users who have used the evolving git master tip
development version of PLplot for their plotting needs during this
release cycle have provided additional important testing of this
release of PLplot.
________________________________________________________________


DETAILED CHANGELOG FOR THIS RELEASE


commit 4f88e45dbd85468a96364548f8d06a9b52dac14a
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sat Jun 1 16:10:17 2019 -0700

    Prepend README.release for 5.15.0 to README.cumulated_release

M	README.cumulated_release

commit 3f343c78072b0a8567434f0eb5ce41cb947a66c6
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sat Jun 1 16:08:00 2019 -0700

    Update README.Release_Manager_Cookbook to reflect what has occurred during the PLplot-5.15.0 release process

M	README.Release_Manager_Cookbook

commit ae52e0496603d9cb63433b6baf54a82d5deb6b33
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sat Jun 1 16:05:59 2019 -0700

    Update website for plplot-5.15.0
    
    Fix a broken Homebrew link and update the version to 5.15.0.

M	doc/docbook/src/CMakeLists.txt
M	www/downloads.php

commit d9755e1210ba41bc692fbcbe43c62bfb8310e823
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sat Jun 1 11:53:27 2019 -0700

    Fix the -DBUILD_DOX_DOC=ON case for the _plplotc -> plplotc target name change
    
    Recent versions of CMake including 3.13.2 and above (where 3.13.2 is
    our minimum acceptable version) have dropped the leading underscore in
    the target names for swig-generated target names for Python modules.
    I have previously corrected our build system for this change, but I
    had missed the -DBUILD_DOX_DOC=ON case which is now fixed in this
    commit.
    
    I also took this opportunity to impose the PLPLOT:: namespace prefix
    (e.g., plplotc => PLPLOT::plplotc) on all read-only target names used
    in doc/CMakeLists.txt since that is the preferred modern CMake style
    for referring to read-only target names.  (I had previously run a test
    to detect all instances in our build-system logic of references to
    read-only target names which did not have a namespace prefix, but that
    test did not cover the -DBUILD_DOX_DOC=ON case.)
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by successfully building and testing the doxygen documentation
    following the procedure in doc/README.doxygen.

M	doc/CMakeLists.txt
M	doc/README.doxygen

commit b2530e3ca4b047f1db2e30d25c15a247bf090afc
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri May 31 15:15:01 2019 -0700

    Style bindings/swig-support/plplotcapi.i after its recent #defines update commit, and document why this styling is necessary.
    
    The check_plplotcapi_defines target collects all the numerical
    #defines in include/plplot.h in a generated file and then compares
    that file with the collected numerical #defines in
    swig-support/plplotcapi.i and complains if there is a non-whitespace
    difference.  The reason we have to ignore whitespace differences is
    that uncrustify's algorithm for styling alignment takes account of the
    different context lines around the lines that are being aligned.  So
    as a result the whitespace of the #defines in those styled files is
    necessarily different.  So after inserting (typically by replacing the
    #defines section of swig-support/plplotcapi.i with the above generated
    file) #defines that have been aligned in a variety of ways depending
    on context lines for include/plplot.h into swig-support/plplotcapi.i,
    it is necessary to run
    
    scripts/style_source.sh --apply
    
    and follow the directions emitted by that script to smooth out the
    variable alignment issues for the unified #defines section of
    swig-support/plplotcapi.i.
    
    Document this change in procedure!
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the above check_plplotcapi_defines target
    (which demonstrated there are no #defines inconsistencies [other than
    tahe necessary whitespace differences] between include/plplot.h and
    swig-support/plplotcapi.i), and running scripts/style_source.sh (which
    verifies no styling is necessary for swig-support/plplotcapi.i).

M	bindings/swig-support/CMakeLists.txt
M	bindings/swig-support/plplotcapi.i

commit 41bff5992c3cdb0b44a551d748c5ca64aa477224
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri May 31 14:41:15 2019 -0700

    Remove trailing white space from recently created documentation file

M	README.PLplot_Contract_Testing

commit 7fd04b611ed7d7009f51f298dcac5bf53278f849
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri May 31 12:44:31 2019 -0700

    Update PLplot version to 5.15.0 and update PLplot library version numbers
    
    I use semantic library versioning rules (see
    cmake/modules/plplot_version.cmake for the details of how this is
    implemented for PLplot) to determine a separate version number (and
    associated SONAME) for each of our versioned libraries.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by simply looking at
    
    git diff www
    
    to check the version change in that subdirectory and
    
    git diff cmake/modules/plplot_version.cmake |grep '^[+-]' |sort --key=1.2 |less
    
    to summarize all version changes known to the build system..
    
    I used these simple tests to look just for obvious typographical
    errors in this commit because PLplot will be tested by a final
    comprehensive test just prior to the release.

M	cmake/modules/plplot_version.cmake
M	www/examples.php

commit 361c6bef52eadd61783404dfe4a4093f8c686b0c
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri May 31 00:03:33 2019 -0700

    Propagate new cmap0 and cmap1 symbolic constants to most of our bindings
    
    These new symbolic constants (implemented in this release cycle in
    include/plplot.h) are
    
    #define PL_DEFAULT_NCOL0    16
    #define PL_DEFAULT_NCOL1    128
    #define MIN_PLINT_RGB       0
    #define MAX_PLINT_RGB       255
    #define MIN_PLFLT_CMAP1     0.
    #define MAX_PLFLT_CMAP1     1.
    #define MIN_PLFLT_ALPHA     0.
    #define MAX_PLFLT_ALPHA     1.
    
    This commit propates these new symbolic constants from our core C
    library and also (automatically since C++ includes plplot.h) our C++
    binding to our swig-generated bindings (Java, Python, Octave, and Lua)
    and our Fortran and Tcl bindings.  These changes to improve internal
    consistency are essential to the forthcoming release of PLplot-5.15.0
    and were implemented by building the "check_all" target, and
    when any of those subtargets which are dependencies of that target
    errored out due to a detected internal inconsistency, I took the
    appropriate action (usually copying a generated file back to the
    source tree) to resolve that issue.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by configuring PLplot with the
    -DADD_SPECIAL_CONSISTENCY_CHECKING=ON option, putting the golang
    program plplot-doc-check (see comments in
    doc/docbook/src/CMakeLists.txt for how to build that programme) on the
    PATH and building the check_all and check_api_xml_consistency targets.
    There were no build errors for those targets which shows PLplot
    currently passes *all* our internal consistency checks (this result is
    essential to the forthcoming release of PLplot-5.15.0) including the
    ones that demand consistency (established by this commit) for symbolic
    constants defined in plplot.h for our core C library (and therefore
    our C++ binding which also includes plplot.h) and the six
    swig-generated, Fortran, and Tcl bindings.

M	bindings/fortran/included_plplot_parameters.f90
M	bindings/swig-support/plplotcapi.i
M	bindings/tcl/plplot_parameters.h

commit 4baf2b49a8ab61ef5b6922ab6cb96963fa5da1f7
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu May 30 18:03:16 2019 -0700

    Finalize release notes for the forthcoming PLplot-5.15.0 release
    
    I used a preliminary Changelog for all commits in this release cycle
    to determine the major changes for this release, and I
    updated the release notes for the forthcoming
    PLplot-5.15.0 accordingly.

M	README.release

commit 4ae06fd6c498a3e4e59ae67bbe4d3ce049a72a14
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun May 26 13:54:10 2019 -0700

    Summarize my (Alan W. Irwin's) recent Linux (Debian Testing) comprehensive test result in our wiki (part II)
    
    Part I of this change was a previous commit (with the same core title
    as this commit) which summarized my (good) comprehensive test results
    for CMake-3.13.2 (our minimum allowed CMake version) in our
    "Testing_Reports" wiki page.  This commit (Part II) does the same
    thing for my (good) comprehensive test results for CMake-3.14.4 (the
    latest release of CMake that is available at this time).  So these two
    commits document in our wiki that the current development version of
    PLplot works well on Linux (Debian Testing) for the range of CMake
    versions from 3.13.2 to 3.14.4.

M	doc/wiki_source/Testing_Reports

commit e8888b193205fa12e5fbde7eb8b3783cd128af05
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sat May 25 13:43:22 2019 -0700

    Document the PLplot contract test that is available as part of CMake
    
    Note that this contract test helps CMake developers discover
    regressions in the CMake source code, helps the PLplot project
    indirectly by avoiding such regressions in CMake releases, and helps
    the PLplot project directly in case the issue is a bug or some
    deficiency in the PLplot build system that is exposed by the latest
    development version of CMake.
    
    Therefore, I strongly encourage all PLplot developers to
    configure the PLplot contract test for their platform following
    this documentation.
    
    Note I (AWI) have been running this contract test on a nightly basis
    for both my previous Debian Jessie system and my current Debian Buster
    system, and I have discovered both CMake regressions and PLplot
    build system issues this way.

A	README.PLplot_Contract_Testing

commit 9c113444cc9a0ddfe49b675da972647dd4b1edfb
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu May 23 11:59:22 2019 -0700

    Summarize my (Alan W. Irwin's) recent Linux (Debian Testing) comprehensive test result in our wiki

M	doc/wiki_source/Testing_Reports

commit 15ffb9d106958690e754246a7280635a0c80cec3
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed May 22 22:12:24 2019 -0700

    Summarize Arjen's recent MinGW-w64/MSYS2 comprehensive test result in our wiki
    
    N.B.  I made consistent changes in our git copy of the wiki markdown
    source and the SourceForge version of the same following the file edit
    and subsequent cut and paste method described in README.developers.

M	doc/wiki_source/Testing_Reports

commit b766e84b408fb4ae37e86f4e3a4864dbddeb8547
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Apr 3 12:32:52 2019 -0700

    Build System: fix recently introduced PLPLOT::plfortrandemolib target bug on Windows platforms
    
    This bug causes CMake errors concerning a missing
    PLPLOT::plfortrandemolib target on Arjen's Cygwin platform.
    
    The issue was that PLPLOT::plfortrandemolib was created inside a
    
    if(USE_RPATH AND NOT WIN32_OR_CYGWIN)
    
    if block which is true on Unix platforms (which explains why
    PLPLOT::plfortrandemolib has been created properly on my Debian
    Testing platform for all my recent tests) but false otherwise (as
    Arjen discovered on Cygwin).  This commit fixes this bug by moving the
    relevant CMake code outside this if block.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by configuring a PLplot build with cmake.  There were
    no CMake errors created by a missing PLPLOT::plfortrandemolib target so
    it appears all continues to be well on this platform.  However, this
    fix does need to be checked by Arjen to confirm it completely settles
    the issue he discovered on Cygwin.

M	examples/CMakeLists.txt

commit ad53c055d066d731f077a6ab8daa82e92e409300
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Apr 3 12:08:42 2019 -0700

    Build system: set CMP0086 to NEW if that policy exists to suppress CMake warnings concerning this policy
    
    CMP0086 is implemented for CMake-3.14.0, and to suppress the warnings issued
    by CMake-3.14.0 when this policy is not set, set CMP0086 to NEW when this policy exists.
    
    This policy substantially affects the UseSWIG module and therefore our Python, Java, Octave, and Lua
    bindings.  Therefore, it needs extensive testing (see below).
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the test_noninteractive target in the
    (shared) core build tree for both CMake-3.13.2 and CMake-3.14.0.  For each
    of these CMake versions, the resulting cmake.out and
    test_noninteractive.out files were evaluated as follows:
    
    # Check for errors
    grep -i error *.out
    
    # Check for regressions in configuration warnings:
    
    grep -i warning cmake.out |grep -Ev 'Octave-4|Suitable Qt4|PLPLOT_USE_QT5|PLD_pdf|PLplot OCaml|spurious|PRIVATE|gfortran Fortran compiler|It appears these warnings|The test_.*target|requires shared libraries'
    
    # Check for regressions in the distinct run-time warning labelled by 'PLPLOT WARNING'
    # Currently on Cygwin systems you get a mixture of Unix and Windows line endings so
    # make those equivalent with the "tr" stanza (which does not harm on other platforms).
    
    grep -A1 --no-filename "PLPLOT WARNING" *.out |tr --delete $'\r' |sort -u
    
    # Check for build or run-time warnings where the trailing stanza is to
    # remove the "PLPLOT WARNING" and cmake.out warnings investigated
    # above, spurious gfortran warnings, and warnings concerning test_diff differences:
    
    grep -i warning *.out|grep -vE 'PLPLOT WARNING|cmake.out|PRIVATE|argv_dynamic|Some graphical' |less
    
    # Check for any file device (which defaults to the svg device, see below) or stdout
    # differences between all non-C languages and the corresponding C results:
    
    grep -B1 -A3 "Missing examples" *.out |less
    
    For both versions of CMake, these evaluations showed there were no
    configuration, build, or run-time issues with the results, and the
    difference report (for the default svg device) was perfect.

M	CMakeLists.txt
M	examples/CMakeLists.txt

commit d1c621d028f192b6efd67467e7460e82ffec83dc
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sat Mar 30 16:42:36 2019 -0700

    Build system: implement ctest for installed examples tree
    
    Prior to this commit, ctest was only implemented for the core build
    tree, but now it has been implemented for the installed examples tree
    as well.  This change required a substantial rewrite of the CMake
    logic in plplot_test/CMakeLists.txt to divide that logic into two
    blocks (one for CORE_BUILD only and one for both CORE_BUILD and the
    build of the installed examples).  That file is now used in two
    contexts (once for the core build and once for the installed examples
    build).  Because of the rewrite of that file, the comprehensive test
    below was done with no constraints to skip any part of it.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) with the following steps:
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
    # avoid important bugs in the Debian Testing versions of those
    # packages.  Also access a local version of libqhull to test
    # that additional rpath possibility.
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk
    # components. (This step will not be necessary as soon as the PLplot
    # build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets finding
    # more robust.)
    
    # Use -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig to test a pre-release version
    # of swig-4.0.0.
    
    # Apply no constraints to limit the tests.
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install:/home/software/qhull/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig" --build_command "make -j16" --ctest_command "ctest -j16")
    
    This command ran without issues (e.g., hangs or other obvious errors)
    and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed no configure,
    build, or obvious run-time errors (i.e., no non-zero return codes for
    any of the steps in this comprehensive test), and the difference test
    results (done with the default svg device) were perfect. Finally, since
    the script itself was changed for this test, I confirmed that the
    script did all steps it was supposed to in the correct order, e.g.,
    the new execution of ctest in the installed examples tree after the "all"
    target was built there.

M	CMakeLists.txt
R100	CTestCustom.ctest.in	CTestCustom.cmake.in
M	examples/CMakeLists.txt
M	plplot_test/CMakeLists.txt
M	scripts/comprehensive_test.sh

commit ae398a4e64a4bbe4bb78f40a6a20334fc29530a1
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Mar 27 16:31:41 2019 -0700

    Fix bug in octave binding
    
    For octave 4.4, I was obtaining the following result when building the
    test_octave_xwin target.
    
    Testing interactive octave examples for device xwin
    p1
    p2
    p3
    p8
    p9
    p12
    error: string(1): out of bound 0
    error: called from
        ginput at line 56 column 11
        p12 at line 27 column 9
    
    where line 56 of  bindings/octave/PLplot/ginput.m
    was
    
    str = double(string(1));
    
    and the issue was string was empty (which apparently it always is if
    you click with a mouse button).  I fixed this issue by making sure
    that string(1) was not converted by double unless string had a
    non-zero length.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by successfully building the test_octave_xwin target.

M	bindings/octave/PLplot/ginput.m

commit 6b00b9717a6c98ee16e49f991957f91cb5b76c1f
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Mon Mar 18 15:47:21 2019 -0700

    Future-proof PLplot against changes in a pre-release version of swig-4.0.0
    
    This commit is a response to the swig bug report at  <https://sourceforge.net/p/swig/mailman/message/36603481/> where it is shown that a pre-release version of swig-4.0.0 does not work correctly with
    plplot-5.14.0.  I verified this issue for myself with swig git version rel-3.0.12-1639-gd3ae85ee7
    (i.e., 1639 commits beyond the 3.0.12 release of swig) and fixed the issue in PLplot corresponding
    to William Fulton's advice in the above mailing-list discussion, i.e., replaced
    
    -            if ( strcmp( str, "<built-in function pltr0>" ) == 0 )
    +            if ( strstr( str, "function pltr0" ) != 0 )
    
    etc., for pltr0, pltr1, and pltr2 where he stated this change
    should work both for swig3 (which implements these functions as build-ins) and swig4
    (which implements these functions in raw form rather than as build-ins).
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) as part of the unconstrained comprehensive test used
    for the previous commit (that test was done with the current change in
    the working directory).  That comprehensively tested the current
    change for only the system version of swig (i.e., swig-3.0.12 from
    Debian Testing).
    
    In addition I tested the current change for a pre-release version of
    swig-4.0.0 (swig git version rel-3.0.12-1639-gd3ae85ee7) by
    configuring PLplot using
    -DSWIG_EXECUTABLE=/home/software/swig/install/bin/swig (to access that
    locally built and installed version) and building the
    test_noninteractive target in the (shared) core build tree.  The
    resulting cmake.out and test_noninteractive.out files were evaluated
    as follows:
    
    # Check for errors
    grep -i error *.out
    
    # Check for regressions in configuration warnings:
    
    grep -i warning cmake.out |grep -Ev 'Octave-4|Suitable Qt4|PLPLOT_USE_QT5|PLD_pdf|PLplot OCaml|spurious|PRIVATE|gfortran Fortran compiler|It appears these warnings|The test_.*target|requires shared libraries'
    
    # Check for regressions in the distinct run-time warning labelled by 'PLPLOT WARNING'
    # Currently on Cygwin systems you get a mixture of Unix and Windows line endings so
    # make those equivalent with the "tr" stanza (which does not harm on other platforms).
    
    grep -A1 --no-filename "PLPLOT WARNING" *.out |tr --delete $'\r' |sort -u
    
    # Check for build or run-time warnings where the trailing stanza is to
    # remove the "PLPLOT WARNING" and cmake.out warnings investigated
    # above, spurious gfortran warnings, and warnings concerning test_diff differences:
    
    grep -i warning *.out|grep -vE 'PLPLOT WARNING|cmake.out|PRIVATE|argv_dynamic|Some graphical' |less
    
    # Check for any file device (which defaults to the svg device, see below) or stdout
    # differences between all non-C languages and the corresponding C results:
    
    grep -B1 -A3 "Missing examples" *.out |less
    
    These evaluations demonstrated that William Fulton's suggested PLplot
    fix of the Python binding issue was backwards compatible with swig3 and
    fixed the swig4 issue (as he expected).  Furthermore, there were no
    other PLplot issues introduced by this pre-release version of
    swig-4.0.0.  That is, for both the octave3 case tested previously and
    the current octave4 test there were no configuration, build, or
    run-time issues with these results and the difference report (for the
    default svg device) was perfect.

M	bindings/python/plplotc.i

commit daafa7b60a8eedfad9084dbf703a6a3954489c6f
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Mon Mar 18 15:00:19 2019 -0700

    Drop our own version of UseSWIG.cmake so that users access the upstream CMake version of this file
    
    Our own version of this file that this commit drops corresponds to the
    upstream version for CMake-3.9.1, but since our own minimum version of
    CMake (3.13.2) is far beyond that version it is better to allow our users to
    take advantage of all the upstream development that has gone into
    UseSWIG.cmake since 3.9.1.
    
    That said, it appears our build-system logic was relying on internal details of version 3.9.1 of
    UseSWIG.cmake because the new version replaces all swig target names with leading
    underscores with that same name without the underscore.  As a result we
    had to make the following changes throughout our build system to be consistent
    with the new version(s) of UseSWIG.cmake for CMake-3.13.2 (our minimum version)
    and beyond:
    
    -         PLPLOT::_plplotc
    +         PLPLOT::plplotc
    
    -         PLPLOT::_Pltk_init
    +         PLPLOT::Pltk_init
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by the following steps:
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
    # avoid important bugs in the Debian Testing versions of those
    # packages.  Also access a local version of libqhull to test
    # that additional rpath possibility.
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk
    # components. (This step will not be necessary as soon as the PLplot
    # build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets finding
    # more robust.)
    
    # Apply no constraints to limit the tests.
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install:/home/software/qhull/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON" --build_command "make -j16" --ctest_command "ctest -j16")
    
    This command ran without issues (e.g., hangs or other obvious errors)
    and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed no configure,
    build, or obvious run-time errors (i.e., no non-zero return codes for
    any of the steps in this comprehensive test), and the difference test
    results (done with the default svg device) were perfect.

D	cmake/modules/UseSWIG.cmake
M	examples/CMakeLists.txt
M	examples/python/CMakeLists.txt

commit 902c8882bc3ba98aeecac37f23bfd492fc736887
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri Mar 8 17:28:53 2019 -0800

    Core library bug fixes: Substantial upgrade to the opt_bg logic for parsing the -bg command-line option
    
    These bug fixes were motivated by a fairly recent adventure where I
    specified the -bg 00F0.3 option when trying to debug a transparency
    "issue".  Because I forgot the underscore delimiter (i.e., I should
    have specified -bg 00F_0.3 instead) it *silently* gave me the
    equivalent of -bg 00F which wasted a lot of my time and the time of
    others I was communicating with about esoteric reasons why that 0.3
    was being ignored.
    
    To deal with this and other "non-robust" bugs when parsing the -bg
    command-line option I rewrote the opt_bg logic.
    
    That logic is now implemented as follows:
    
    1. Split the argument string at the first "_" delimiter, with
       color_field being a pointer to the (now null-terminated at the
       position of the delimiter) string before the delimiter and
       alpha_field being a pointer to the string after the delimiter.  But
       if no delimiter exists then color_field points to the whole
       argument string and alpha_pointer points to the string constant
       "1.0".
    
    2. Parse color_field as hexadecimal using strtol with base 16 with
       full checking of possible error conditions with appropriate response
       (warning message + corrective action of setting color to (warning)
       red) for integer overflow and invalid string conditions
       detected by strtol, and appropriate action (just a warning message)
       when there was a non-hexadecimal garbage suffix detected by strtol.
    
       N.B. According to the strtol man page, "The string may begin with
       an arbitrary amount of white space (as determined by isspace(3))
       followed by a single optional '+' or '-' sign.  If base is [...]
       16, the string may then include a "0x" or "0X" prefix, and the
       number will be read in base 16".
    
    3. Convert those signed hexadecimal characters stored in a long result
       to r, g, b with evaluation of a possible error condition (i.e.,
       color_field without isspace, sign, and 0x or 0X optional prefixes
       and without trailing non-hex digits is not either exactly 3 or 6
       hex digits) with appropriate response (warning message + corrective
       action of set color to (warning) red) for this error condition.
       Note in the case of 3 hex digits the result is "doubled", e.g.,
       "001" ==> 000011 and "fab" ==> "ffaabb" before the final r,g,b
       results are determined for the background colour.  Also note that
       negative signs are interpreted as the hexadecimal two's complement,
       i.e., "-fff" ==> "001" (before the "doubling" to "000011") and
       "-ffffff " ==> "000001".
    
    4. Parse alpha_field as double using strtod with full evaluation of
       possible error conditions with appropriate action (warning message
       + corrective action of set alpha to 1. = opaque) for
       floating overflow and invalid string to parse conditions
       detected by strtod, and appropriate action (just a warning message)
       when there was a non-floating-point garbage suffix detected by strtod.
    
       N.B. According to the strtod man page, "The expected form of the
       (initial portion of the) string is optional leading white space as
       recognized by isspace(3), an optional plus ('+') or minus sign
       ('-') and then either (i) a decimal number, or (ii) a hexadecimal
       number, or (iii) an infinity, or (iv) a NAN (not-a-number).
    
       Thus, opt_bg simply propagates certain invalid alpha values which
       the user might specify such as several different variants of signed
       upper or lower-case versions of "nan" and "inf" strings or ordinary
       floating point numbers that are out of the valid alpha range from
       0. to 1. (MIN_PLFLT_ALPHA to MAX_PLFLT_ALPHA) to the function
       plscolbga which it calls, and that function is responsible for
       handling all such out-of-range alpha issues.  Which it does by
       issuing a warning message and using the appropriate substituted
       value, i.e, for +/- inf or ordinary out of range the substituted
       value is MIN_PLFLT_ALPHA or MAX_PLFLT_ALPHA (whichever is closest
       to the user-specified value) while for +/- nan the substituted
       value is MAX_PLFLT_ALPHA = 1., i.e., opaque.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the x00c and svg targets for a locally
    modified version of src/plargs.c that printed out derived
    r, g, b, and alpha values and by running
    
    valgrind examples/c/x00c -dev svg -o test.svg -bg "<some string>"
    
    In all <some string> cases, the valgrind
    results were perfect ("All heap blocks were freed -- no leaks are
    possible" and "ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0
    from 0)"), and the derived r, g, b, and alpha values as expected.
    
    To summarize these tests for various <some string> values, the "_"
    delimiter appears to work properly; strtol (color field) and strtod
    (alpha field) appear to work properly with correct detection and
    warning of certain issues (i.e., invalid strings that cannot be
    converted, trailing garbage, integer [strol] or floating [strtod]
    overflow) with warning messages and appropriate corrective action as
    described above; detection of either 3 hex or 6 hex digits in the
    color field appears to work correctly with the 3-digit case correctly
    "doubled" as described above; and for the alpha field case floating
    point strings corresponding to positive and negative Inf and NaN
    values are silently accepted without strtod error, but those invalid
    alpha values are then detected, warned, and substituted for in the
    plscolbga routine as described above.

M	src/plargs.c

commit e59bc623794e26430da331be474bce340ebcf936
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Mar 7 14:07:57 2019 -0800

    Core library: Improve range checks and use of symbolic constants for the color map routines
    
    The following symbolic constants are now used extensively in our colour map routines.
    
    +// Color limits:
    +
    +// Default number of colors for cmap0 and cmap1.
    +#define PL_DEFAULT_NCOL0    16
    +#define PL_DEFAULT_NCOL1    128
    +// minimum and maximum PLINT RGB values.
    +#define MIN_PLINT_RGB       0
    +#define MAX_PLINT_RGB       255
    +// minimum and maximum PLFLT cmap1 color index values.
    +#define MIN_PLFLT_CMAP1     0.
    +#define MAX_PLFLT_CMAP1     1.
    +// minimum and maximum PLFLT alpha values.
    +#define MIN_PLFLT_ALPHA     0.
    +#define MAX_PLFLT_ALPHA     1.
    
    Furthermore, those colour map routines now use these symbolic
    constants to do much more extensive checking of the validity of cmap1
    index values and cmap0 and cmap1 colours that are specified by the
    user using the above limits.  And this is now done for RGB(A) colours
    in a standardized way using the new static routine limit_rgba_range.
    As implemented in that routine when the user does specify an invalid
    RGB(A) color the recovery is now a much smoother one (plwarn + fixup)
    rather than the prior plabort and return.  That same "soft landing"
    approach is also now used in several places in src/plctrl.c when an
    invalid cmap1 index is specified by the user.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the test_noninteractive and
    test_interactive targets in the (shared) core build tree.  The
    resulting cmake.out, test_noninteractive.out and test_interactive.out
    files were evaluated as follows:
    
    # Check for errors
    grep -i error *.out
    
    # Check for regressions in configuration warnings:
    
    grep -i warning cmake.out |grep -Ev 'Octave-4|Suitable Qt4|PLPLOT_USE_QT5|PLD_pdf|PLplot OCaml|spurious|PRIVATE|gfortran Fortran compiler|It appears these warnings|The test_.*target|requires shared libraries'
    
    # Check for regressions in the distinct run-time warning labelled by 'PLPLOT WARNING'
    # Currently on Cygwin systems you get a mixture of Unix and Windows line endings so
    # make those equivalent with the "tr" stanza (which does not harm on other platforms).
    
    grep -A1 --no-filename "PLPLOT WARNING" *.out |tr --delete $'\r' |sort -u
    
    # Check for build or run-time warnings where the trailing stanza is to
    # remove the "PLPLOT WARNING" and cmake.out warnings investigated
    # above, spurious gfortran warnings, and warnings concerning test_diff differences:
    
    grep -i warning *.out|grep -vE 'PLPLOT WARNING|cmake.out|PRIVATE|argv_dynamic|Some graphical' |less
    
    # Check for any file device (which defaults to the svg device, see below) or stdout
    # differences between all non-C languages and the corresponding C results:
    
    grep -B1 -A3 "Missing examples" *.out |less
    
    In addition I viewed examples that used cmap0 and cmap1 colours extensively as follows:
    
    pqiv -i examples/test_examples_output_dir/x02c0[12].svg
    pqiv -i examples/test_examples_output_dir/x12c01.svg
    pqiv -i examples/test_examples_output_dir/x15c0[1-9].svg
    pqiv -i examples/test_examples_output_dir/x16c0[1-9].svg
    
    In sum, the above evaluations of the *.out results showed there were
    no concerns with any configuration, build, or run-time issues with
    these results and the difference report (for the default svg device)
    was perfect.  Furthermore, the above rendering of the svg results
    showed no obvious colour rendering bugs.

M	include/plplot.h
M	src/plctrl.c

commit 3d00e8ddc85ec3068d148493dd771288fa7df429
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Mar 6 15:22:16 2019 -0800

    Core library: check hershey_to_unicode_lookup_table array access for index out of range conditions
    
    For those occasions when the index is out of range, substitute
    (PLUNICODE) 0x00 ("unknown" unicode character) for the unicode value
    and 0 (apparently unknown font face according to notes in the
    generated include/plhershey-unicode.h file) for the font face.  Note,
    however, that I looked through our source code for all instances of
    font_face, and I could not find any place where it was actually used.
    Therefore, it may just be a place holder where the actual value
    does not matter.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the test_noninteractive and test_interactive
    targets in the (shared) core build tree.  The resulting cmake.out, test_noninteractive.out and
    test_interactive.out files were evaluated as follows:
    
    # Check for errors
    grep -i error *.out
    
    # Check for regressions in configuration warnings:
    
    grep -i warning cmake.out |grep -Ev 'Octave-4|Suitable Qt4|PLPLOT_USE_QT5|PLD_pdf|PLplot OCaml|spurious|PRIVATE|gfortran Fortran compiler|It appears these warnings|The test_.*target|requires shared libraries'
    
    # Check for regressions in the distinct run-time warning labelled by 'PLPLOT WARNING'
    # Currently on Cygwin systems you get a mixture of Unix and Windows line endings so
    # make those equivalent with the "tr" stanza (which does not harm on other platforms).
    
    grep -A1 --no-filename "PLPLOT WARNING" *.out |tr --delete $'\r' |sort -u
    
    # Check for build or run-time warnings where the trailing stanza is to
    # remove the "PLPLOT WARNING" and cmake.out warnings investigated
    # above, spurious gfortran warnings, and warnings concerning test_diff differences:
    
    grep -i warning *.out|grep -vE 'PLPLOT WARNING|cmake.out|PRIVATE|argv_dynamic|Some graphical' |less
    
    # Check for any file device (which defaults to the svg device, see below) or stdout
    # differences between all non-C languages and the corresponding C results:
    
    grep -B1 -A3 "Missing examples" *.out |less
    
    The above evaluations of the *.out results showed there were no
    concerns with configuration, build, or run-time issues with these
    results and the difference report (for the default svg device) was
    perfect.

M	src/plcore.c
M	src/plsym.c

commit d19b7f06d90ae327bab32483517d769e50acb398
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Mar 5 20:43:58 2019 -0800

    Remove unneeded libplplot dependency on qhull headers
    
    Before this commit, libplplot (via src/plgridd.c) implemented a
    run-time check concerning the size of the realT type used by libqhull
    which forced this library be dependent on qhull headers even though
    (unlike the csironn library) libplplot is not directly dependent on
    the qhull library.  This commit removes this unnecessary complication
    by implementing a CMake-based configuration check concerning the size
    of the realT type used by libqhull.  If that check is not satisfied,
    then our build system now simply drops use of qhull by dropping the
    build and use of the csironn library.
    
    N.B. src/plgridd.c now does include source code that depends directly
    on both the qhull headers and qhull library.  However, this code is
    protected by by the conditional compilation macro PLPLOT_NONN.  This
    macro (previously named NONN) has not been #defined in our official
    source tree for more than a decade which is why our build system
    currently ignores the PLPLOT_NONN possibility and simply directly
    links libplplot to the csironn library instead of using this internal
    functionality.  Of course, if someone wants to try out use of this
    internal functionality, the required build system changes would nearly
    be trivial.  That is, the build system would need changes to provide
    the PLPLOT_NONN cmake option, convert it to a C macro of the same name
    which is #defined or not depending on whether the option is true or
    not, and if the option is true drop the build of the csironn library
    and drop the libplplot dependency on that library.
    
    This commit also provides a change (preferring the libqhull form of
    includes over the old qhull form) so that the headers for a local
    build of upstream qhull (which always uses the libqhull form now)
    can be found consistently with the library for
    that local build that is found.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) using the same extensive tests described for
    the prior commit which used all these qhull-related changes
    to PLplot that were in the working directory but not committed
    at that time.

M	cmake/modules/FindQHULL.cmake
M	cmake/modules/csiro.cmake
M	src/CMakeLists.txt
M	src/plgridd.c

commit 03e06049d828cb817df163ee8c1f980efebef0be
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Mar 5 19:27:55 2019 -0800

    Build system: Rewrite the rpath configuration of the traditionally built examples
    
    This commit follows the same rigourous rpath method for the
    traditionally built examples that was used previously to set the
    INSTALL_RPATH property of installed targets.  See the README.release
    file for full details concerning this change.  Note this commit solves
    an ocaml rpath bug that was not exposed for my tests of the earlier
    INSTALL_RPATH commit because those earlier tests were constrained too
    much.  So as far as I know the combination of this commit and the
    INSTALL_RPATH changes described in the earlier commit eliminates the
    last known regression against the good unconstrained comprehensive
    test results I historically achieved for the Debian Jessie platform.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by the following steps:
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
    # avoid important bugs in the Debian Testing versions of those
    # packages.  Also access a local version of libqhull to test
    # that additional rpath possibility.  (This only works because of additional
    # qhull configuration changes for our build system that are in my working
    # directory but not commmitted yet.  However, if I had used the system
    # version of qhull instead, the test would have been weaker and therefore
    # would very likely also succeed as well.)
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk
    # components. (This step will not be necessary as soon as the PLplot
    # build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets finding
    # more robust.)
    
    # Apply no constraints to limit the tests.
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install:/home/software/qhull/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON" --build_command "make -j16" --ctest_command "ctest -j16")
    
    N.B. the above command is a convenient summary of what I actually
    tested in a piece-meal way due to typographical errors in the ocaml
    rpath configuration that were fixed between when the interactive part
    (with failing noninteractive part) and noninteractive part
    (constrained by --do_interactive_testing no) of the above test were
    done.
    
    The interactive part of the first attempt and the (noninteractive)
    second attempt of the above command ran without issues (e.g., hangs or
    other obvious errors) and was followed up by the evaluation procedure
    documented in doc/wiki_source/Testing_PLplot.  That evaluation showed
    no configure, build, or obvious run-time errors (i.e., no non-zero
    return codes for any of the steps in this comprehensive test), and the
    difference test results (done with the default svg device) were
    perfect.
    
    In addition I checked all installed targets (for the noninteractive
    case, but the interactive case should be identical) with readelf as
    follows:
    
    pushd "$COMPREHENSIVE_TEST_PREFIX/nondynamic/noninteractive/install_tree/lib"
    (for SO in $(find . -name "*.so") ; do echo $SO; readelf -d $SO |grep -E 'NEEDED|PATH'; done) |less
    (for SO in $(find ../bin -type f) ; do echo $SO; readelf -d $SO |grep -E 'NEEDED|PATH'; done) |less
    readelf -d octave/plplot_octave.oct |grep -E 'NEEDED|PATH'
    
    I also used "readelf -d" to check the traditionally built nondynamic examples as follows:
    
    # 1. OCaml example in the CMake-based build tree for the core build:
    cd ../../build_tree/
    # Need to remake because script cleans up all these results
    make target_x00ocaml
    readelf -d examples/ocaml/x00ocaml |grep -E 'NEEDED|PATH' |less
    
    # 2. OCaml example in the CMake-based build tree for the installed examples:
    cd ../install_build_tree/
    # Need to remake because script cleans up all these results
    make target_x00ocaml
    readelf -d ocaml/x00ocaml |grep -E 'NEEDED|PATH' |less
    
    # 3. All *00* compiled examples in the traditionally built installed examples:
    cd ../install_tree/share/plplot5.14.0/examples
    # Rebuild everything because script cleans up all these results
    make -j16
    # Drop source code and some scripts by eliminating all file names with a "." in them.
    # Drop tcl and python "00" examples since those are not compiled.
    (for example in $(\ls */*00* |grep -vE "\\.|tcl|python") ; do echo $example; readelf -d $example|grep -E 'NEEDED|PATH'; done) |less
    
    # 4. All "special" traditionally built executables.
    (for example in c/ext-cairo-test c++/qt_example c++/wxPLplotDemo tk/xtk0[124] ; do echo $example; readelf -d $example|grep -E 'NEEDED|PATH'; done) |less
    
    I also repeated all the above readelf checks for the shared
    
    cd "$COMPREHENSIVE_TEST_PREFIX/shared/noninteractive/install_tree/lib"
    ...
    
    and static
    
    cd "$COMPREHENSIVE_TEST_PREFIX/static/noninteractive/install_tree/lib"
    ...
    
    cases.  Note that in the static case there are no *.so (or *.oct)
    results to analyze but the runpath results for installed executable
    targets and traditionally built examples are larger due to the
    transitive rpath method that must be used for this case.
    
    These readelf results showed the expected NEEDED and RUNPATH results in all cases.
    
    In sum, this set of *unconstrained* comprehensive tests and follow-up
    readelf tests appears to confirm that the new rigourous rpath method
    is working properly for both the installed targets AND traditionally
    built examples for the (modern DT_RUNPATH) Debian Testing = Buster
    platform.

M	README.release
M	cmake/modules/plplot_functions.cmake
M	examples/CMakeLists.txt
M	examples/ada/Makefile.examples.in
M	examples/c++/Makefile.examples.in
M	examples/c/Makefile.examples.in
M	examples/d/Makefile.examples.in
M	examples/fortran/CMakeLists.txt
M	examples/fortran/Makefile.examples.in
M	examples/ocaml/CMakeLists.txt
M	examples/ocaml/Makefile.examples.in
M	examples/plplot_configure.cmake_installed_examples.in
M	examples/tk/Makefile.examples.in

commit c99bc660f3edd7262ce8148a21b23aad4ae879f7
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri Mar 1 09:51:10 2019 -0800

    Tweak the wording of the discussion of the recent INSTALL_RPATH configuration rewrite

M	README.release

commit fc0ba06b8db38c477a055b605cd186861b2bcf36
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Feb 28 12:44:16 2019 -0800

    Add discussion of recent INSTALL_RPATH configuration rewrite to our (future) release notes
    
    This discussion was copied from what I recently wrote to the plplot-devel mailing list
    concerning these recent changes.

M	README.release

commit 3b140b22f7c8e038c16369d3612327b22bef3dd9
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Feb 28 03:06:40 2019 -0800

    Build system: Implement transitive treatment for rpath which is used for the static case
    
    In addition, implement the NON_TRANSITIVE_RPATH option which defaults to ON (except when
    ignored for the static case), but which can be set to OFF if there is a system out there
    where transitive rpath works, but non-transitive rpath does not.
    
    Note this change was almost trivial to implement because of the previous work
    to collect most INSTALL_RPATH-relevant code in the CMake functions
    configure_executable_build and configure_library_build.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by the following steps:
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
    # avoid important bugs in the Debian Testing versions of those
    # packages.
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk components. (This step
    # will not be necessary as soon as the PLplot build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets
    # finding much more robust.
    
    # Use the -DPLPLOT_TEST_DEVICE=psttfc option to do all diff tests
    # using that device (which depends on libLASi).  So this checks that
    # RUNPATH property is set properly so that the local version of
    # libLASi is found by the run-time loader in a large number of ways
    # (which are very likely all redundant, but you never know....)
    
    # Constrain the tests to nothing other than interactive and
    # noninteractive tests of the traditional build (since that build is
    # the only place that the above INSTALL_RPATH changes are tested).  Do
    # these tests (by default) for our 3 major configurations (shared,
    # nondynamic, and static).
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DPLPLOT_TEST_DEVICE=psttfc" --build_command "make -j16" --ctest_command "ctest -j16" --do_static no --do_ctest no --do_test_install_tree no)
    
    The above command ran without issues (e.g., hangs or other obvious
    errors) and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed this
    comprehensive test had no configure, build, or obvious run-time errors
    (i.e., no non-zero return codes for any of the steps in this
    comprehensive test), and the difference test results (done with the
    psttfc device) were perfect.
    
    In addition I comprehensive checked all installed targets (for the interactive case, but
    the noninteractive case should be identical) with readelf as follows:
    
    pushd "$COMPREHENSIVE_TEST_PREFIX/nondynamic/interactive/install_tree/lib"
    (for SO in $(find . -name "*.so") ; do echo $SO; readelf -d $SO |grep -E 'NEEDED|PATH'; done) |less
    (for SO in $(find ../bin -type f) ; do echo $SO; readelf -d $SO |grep -E 'NEEDED|PATH'; done) |less
    readelf -d octave/plplot_octave.oct |grep -E 'NEEDED|PATH'
    
    and similarly for
    
    pushd "$COMPREHENSIVE_TEST_PREFIX/shared/interactive/install_tree/lib"
    
    and
    
    pushd "$COMPREHENSIVE_TEST_PREFIX/static/interactive/install_tree/lib"
    
    except in that last case only test the $(find ../bin -type f) executables.
    
    The results showed the expected NEEDED and RUNPATH results in all cases.
    
    In sum, this set of tests appears to confirm that this new model for
    how INSTALL_RPATH should be configured (minimalist non-transitive
    rpath for the shared and nondynamic cases, transitive rpath for the
    static case) for installed targets is working properly on Debian
    Testing = Buster (a modern DT_RUNPATH platform) for the first time
    ever.  So this commit eliminates the last known regression against the
    test results I achieved with the old sloppy rpath method on the Debian
    Jessie platform with its old-fashioned but nevertheless working
    DT_RPATH capability.
    
    N.B. the transitive rpath part of these current tests is fairly weak
    because only one external library (libLASi) is installed in a
    non-standard location.  So the present work is essentially a
    proof-of-concept that shows the new method works in this case (for the
    first time for Debian Testing).  We have also made an effort to
    transform the old rpath implementation details to the new method
    (e.g., setting the correct non-transitive rpath variable for each
    installed PLplot target).  But essentially all those details (except
    in the libLASi case) need testing so there may be some bugs in the
    present details that will only be exposed when additional external
    libraries are installed in non-standard locations.

M	cmake/modules/plplot_functions.cmake
M	cmake/modules/rpath.cmake
M	examples/CMakeLists.txt

commit cc5e68b37a5749badc82b5415550010717e592f4
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Feb 27 12:41:31 2019 -0800

    Build system: add capabilities to configure_executable_build and configure_library_build functions
    
    The capabilities we have added are to call configure_target_install from inside these functions
    and set the properties INSTALL_RPATH or INSTALL_NAME_DIR inside configure_executable_build
    and inside configure_library_build for the swig module, module, and static library cases.
    (Previously for configure_library_build we set these properties for just the shared library case.)
    
    As a result, installed executables and installed swig and non-swig modules are now treated in a much
    more standardized way.  Furthermore, the build system logic is simplified.  That is, the
    only calls to configure_target_install in our build system logic are now inside these two functions,
    and the use of USE_RPATH and setting the properties INSTALL_RPATH or INSTALL_NAME_DIR are
    now mostly limited to just these two functions.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by the following steps:
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
    # avoid important bugs in the Debian Testing versions of those
    # packages.
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk components. (This step
    # will not be necessary as soon as the PLplot build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets
    # finding much more robust.
    
    # Use the -DPLPLOT_TEST_DEVICE=psttfc option to do all diff tests
    # using that device (which depends on libLASi).  So this checks that
    # RUNPATH property is set properly so that the local version of
    # libLASi is found by the run-time loader in a large number of ways
    # (which are very likely all redundant, but you never know....)
    
    # Constrain the tests to nothing other than interactive and
    # noninteractive tests of the traditional build (since that build is
    # the only place that the above INSTALL_RPATH changes are tested).
    # And constrain the tests to avoid the static case since the needed
    # transitive variant of how INSTALL_RPATH is populated for that case
    # is not implemented yet.
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DPLPLOT_TEST_DEVICE=psttfc" --build_command "make -j16" --ctest_command "ctest -j16" --do_static no --do_ctest no --do_test_install_tree no --do_test_build_tree no)
    
    The above command ran without issues (e.g., hangs or other obvious
    errors) and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed this
    comprehensive test had no configure, build, or obvious run-time errors
    (i.e., no non-zero return codes for any of the steps in this
    comprehensive test), and the difference test results (done with the
    psttfc device) were perfect.
    
    In addition I comprehensive checked all installed targets (for the interactive case, but
    the noninteractive case should be identical) with readelf as follows:
    
    pushd "$COMPREHENSIVE_TEST_PREFIX/nondynamic/interactive/install_tree/lib"
    (for SO in $(find . -name "*.so") ; do echo $SO; readelf -d $SO |grep -E 'NEEDED|PATH'; done) |less
    (for SO in $(find ../bin -type f) ; do echo $SO; readelf -d $SO |grep -E 'NEEDED|PATH'; done) |less
    readelf -d octave/plplot_octave.oct |grep -E 'NEEDED|PATH'
    
    and similarly for
    
    pushd "$COMPREHENSIVE_TEST_PREFIX/shared/interactive/install_tree/lib"
    
    The results showed the expected NEEDED and RUNPATH results in all cases.
    
    In sum, this set of tests appears to confirm that this new
    minimalistic model for how INSTALL_RPATH should be configured for
    installed targets is working properly on Debian Buster for the shared
    build (with or without dynamic devices) of PLplot.
    
    N.B. The above tests have deliberately avoided the static case because
    I have not yet implemented the transitive INSTALL_RPATH properties
    that are needed for that case.

M	bindings/ada/CMakeLists.txt
M	bindings/c++/CMakeLists.txt
M	bindings/d/CMakeLists.txt
M	bindings/fortran/CMakeLists.txt
M	bindings/java/CMakeLists.txt
M	bindings/lua/CMakeLists.txt
M	bindings/octave/CMakeLists.txt
M	bindings/python/CMakeLists.txt
M	bindings/qt_gui/CMakeLists.txt
M	bindings/qt_gui/pyqt4/CMakeLists.txt
M	bindings/qt_gui/pyqt5/CMakeLists.txt
M	bindings/qt_gui/smoke/CMakeLists.txt
M	bindings/tcl/CMakeLists.txt
M	bindings/tk/CMakeLists.txt
M	bindings/wxwidgets/CMakeLists.txt
M	cmake/modules/plplot_functions.cmake
M	drivers/CMakeLists.txt
M	examples/fortran/CMakeLists.txt
M	lib/csa/CMakeLists.txt
M	lib/nistcd/CMakeLists.txt
M	lib/nn/CMakeLists.txt
M	lib/qsastime/CMakeLists.txt
M	src/CMakeLists.txt
M	utils/CMakeLists.txt

commit abf81a98caed1f86a4135c0ebfa6fefbf58373b8
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Feb 21 16:42:08 2019 -0800

    Drop trailing blank from wiki source for Configure_PLplot_for_the_Visual_Studio_IDE
    
    This issue was discovered and fixed by running
    scripts/remove_trailing_whitespace.sh.
    
    Note this change to the git version of
    Configure_PLplot_for_the_Visual_Studio_IDE was accompanied by the same
    one-character change to the (edited) SF version to keep them
    identical.  Furthermore, the tag on the SF version was changed from
    2014 to 2019 to reflect the year when the page was last extensively
    edited (by Phil in this case).

M	doc/wiki_source/Configure_PLplot_for_the_Visual_Studio_IDE

commit 6a40178541937d80a37a83ac806e5537aec3b125
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Feb 21 13:30:36 2019 -0800

    Clean up how the INSTALL_RPATH property is set for installed targets for the shared build case
    
    Modern Linux distributions such as Debian now convert linker -rpath
    options (which are the result of the CMake INSTALL_RPATH property) to
    the DT_RUNPATH (rather than DT_RPATH) entry for the executable or
    shared object that is being built.  This turns out to be an important
    change since from
    <https://refspecs.linuxfoundation.org/elf/gabi4+/ch5.dynamic.html>
    there is the following constraint on the use of DT_RUNPATH:
    
      "The set of directories specified by a given DT_RUNPATH entry is
      used to find only the immediate dependencies of the executable or
      shared object containing the DT_RUNPATH entry. That is, it is used
      only for those dependencies contained in the DT_NEEDED entries of
      the dynamic structure containing the DT_RUNPATH entry, itself. One
      object's DT_RUNPATH entry does not affect the search for any other
      object's dependencies."
    
    As a result of this change, the way we currently set the INSTALL_RPATH
    property does not work correctly any more, and, for example, the
    run-time loader for the C examples in the static build case cannot
    find the shared LASi library if it is installed in a non-standard
    location.
    
    This commit implements a first step toward fixing this issue which is
    to clean up much of the INSTALL_RPATH logic so that setting that
    property corresponds exactly to DT_NEEDED entries *in the shared
    case*, i.e., corresponds to the PRIVATE (non-transitive) libraries
    that are linked in that case.  A later commit will deal with the
    static case that will actually fix the above issue, but this current
    cleanup is essential because our previous INSTALL_RPATH logic "grew
    like Topsy" and has no coherent model concerning whether that property
    is set for installed targets and exactly what paths are included in
    the install_RPATH list.
    
    Here is a list of the non-transitive (i.e., direct) dependencies of
    all installed targets.  As a result of the current commit the
    install_RPATH list for these installed targets now simply reflect
    the install locations of these dependencies alone.
    
    * lib subdirectory libraries
      Most of these depend on no other internal or external libraries (other than the C library).
      The one exception is csironn which depends on qhull.
    
    * plplot core library
      This library depends on the lib subdirectory libraries and the
      shapelib.  For the dynamic devices case it depends on the ltdl
      library, and the the nondynamic devices case depends on several
      additional external libraries required by device driver code such as
      libLASi.
    
    * dynamic device drivers
    
      Each such driver depends on libplplot and may depend on external libraries (e.g., libLASi
      for the psttf device driver).
    
    * Bindings libraries/modules
    
      Each such library/module depends on libplplot and usually some
      external library (e.g., the tcl binding depends on libtcl).  For
      most cases it has been assumed that the external library is located
      in a system location, but for some cases (e.g., tcl) we determine
      rpath information for those external libraries and use it for the
      bindings library/module.
    
    * Installed executables
    
      + pltcl depends on the plplot and Tcl/Tk/Itcl/Itk libraries.
      + plserver depends on the plplot and Tcl/Tk/Itcl/Itk libraries.
      + plrender depends on the plplot library.
      + pltek depends on the plplot librarie
      + wxPLViewer depends on the plplotwxwidgets and plplotcxx libraries.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by the following steps:
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to
    # avoid important bugs in the Debian Testing versions of those
    # packages.
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk components. (This step
    # will not be necessary as soon as the PLplot build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets
    # finding much more robust.
    
    # Use the -DPLPLOT_TEST_DEVICE=psttfc option to do all diff tests
    # using that device (which depends on libLASi).  So this checks that
    # RUNPATH property is set properly so that the local version of
    # libLASi is found by the run-time loader in a large number of ways
    # (which are very likely all redundant, but you never know....)
    
    # Constrain the tests to nothing other than interactive and
    # noninteractive tests of the traditional build (since that build is
    # the only place that the above INSTALL_RPATH changes are tested).
    # And constrain the tests to avoid the static case since the needed
    # transitive variant of how INSTALL_RPATH is populated for that case
    # is not implemented yet.
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DPLPLOT_TEST_DEVICE=psttfc" --build_command "make -j16" --ctest_command "ctest -j16" --do_static no --do_ctest no --do_test_install_tree no --do_test_build_tree no)
    
    The above command ran without issues (e.g., hangs or other obvious
    errors) and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed this
    comprehensive test had no configure, build, or obvious run-time errors
    (i.e., no non-zero return codes for any of the steps in this
    comprehensive test), and the difference test results (done with the
    psttfc device) were perfect.
    
    In addition I spot checked with
    
    readelf -d <full path to installed shared object or executable> |grep -E 'NEEDED|PATH'
    
    that all NEEDED libraries were as documented above, and RUNPATH was
    normally just set to the PLplot library install location with the
    libLASi install location added only when absolutely necessary (for the
    psttf device driver when that was compiled dynamically and for
    libplplot for nondynamic devices).
    
    In sum, this set of tests appears to confirm that this new
    minimalistic model for how INSTALL_RPATH should be configured for
    installed targets is working properly on Debian Buster for the shared
    build (with or without dynamic devices) of PLplot.

M	bindings/ada/CMakeLists.txt
M	bindings/c++/CMakeLists.txt
M	bindings/d/CMakeLists.txt
M	bindings/fortran/CMakeLists.txt
M	bindings/java/CMakeLists.txt
M	bindings/lua/CMakeLists.txt
M	bindings/octave/CMakeLists.txt
M	bindings/python/CMakeLists.txt
M	bindings/qt_gui/CMakeLists.txt
M	bindings/tcl/CMakeLists.txt
M	bindings/tk/CMakeLists.txt
M	bindings/wxwidgets/CMakeLists.txt
M	cmake/modules/plplot_functions.cmake
M	drivers/CMakeLists.txt
M	examples/CMakeLists.txt
M	lib/nn/CMakeLists.txt
M	src/CMakeLists.txt
M	utils/CMakeLists.txt

commit 518232d4097fe589fdec11405a75fe12a231a415
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri Feb 15 18:57:28 2019 -0800

    Build system: drop unnecessary BUILD_WITH_INSTALL_RPATH ON logic for test-drv-info target
    
    Our experience is that for well-supported computer languages, modern
    CMake handles all rpath issues in build trees without issues by
    default.  Thus, there is apparently no point to setting the
    INSTALL_RPATH and BUILD_WITH_INSTALL_RPATH properties for the C
    language test-drv-info target (which is only used in the build tree,
    i.e., this target is not installed) to bypass this standard CMake
    rpath capability.  (Note, the bypass occurs because setting
    BUILD_WITH_INSTALL_RPATH to ON uses the INSTALL_RPATH property of the
    target rather than CMake default capability to set rpath for the
    target in the build tree).  As a result of this commit this single
    instance of use of the BUILD_WITH_INSTALL_RPATH property in our entire
    source tree has now been removed.
    
    I first introduced this peculiar logic in 2006, and my best guess is
    it may have been needed then to work around some CMake bug.  But as
    the tests show below, this logic is no longer needed so I have removed
    it.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing).  All tests were done in the core build tree for
    the case of shared PLplot libraries and dynamic
    PLplot devices.  The following tests were done:
    
    I. Build test_dyndrivers target (which
    executes the test-drv-info target for all dynamic devices).
    There were no build or run-time issues.
    
    II. Check readelf results:
    
    software@merlin> readelf -d drivers/test-drv-info |grep -E 'PATH|NEEDED'
     0x0000000000000001 (NEEDED)             Shared library: [libplplot.so.16]
     0x0000000000000001 (NEEDED)             Shared library: [libltdl.so.7]
     0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
     0x000000000000001d (RUNPATH)            Library runpath: [/home/software/plplot/HEAD/build_dir/src]
    
    i.e., CMake does the right thing here, i.e., it sets the RUNPATH
    property (via the -Wl,-rpath,<PATHNAME> option to gcc) to the
    non-standard location of libplplot, but does not set RUNPATH
    components for the other libraries because they are located in
    standard locations.  Note for this particular test case (shared PLplot libraries and dynamic
    PLplot devices) the psttf device driver does have RUNPATH set (again by CMake) because
    both its libplplot and libLASi dependencies  are located in non-standard locations, i.e.,
    
    software@merlin> readelf -d drivers/psttf.so |grep -E 'PATH|NEEDED'
     0x0000000000000001 (NEEDED)             Shared library: [libplplot.so.16]
     0x0000000000000001 (NEEDED)             Shared library: [libLASi.so.2]
     0x0000000000000001 (NEEDED)             Shared library: [libpangoft2-1.0.so.0]
     0x0000000000000001 (NEEDED)             Shared library: [libpango-1.0.so.0]
     0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
     0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
     0x0000000000000001 (NEEDED)             Shared library: [libfontconfig.so.1]
     0x0000000000000001 (NEEDED)             Shared library: [libfreetype.so.6]
     0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
     0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
     0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
     0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
     0x000000000000001d (RUNPATH)            Library runpath: [/home/software/plplot/HEAD/build_dir/src:/home/software/lasi_svn/install/lib:]
    
    Note that test-drv-info dynamically loads psttf.so (and other dynamic
    devices when the test_dyndrivers target is build above) but it does
    not link to those shared objects so there is no need to set the
    libLASi RUNPATH component of test-drv-info.  But psttf.so does link to
    libLASi so in that case the libLASi RUNPATH component is set.
    
    III. Build the test_noninteractive target.  There were
    no build, run-time, or difference report issues.

M	drivers/CMakeLists.txt

commit e418008c888a4e8d2fd7c32ba64689a578c826e3
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri Feb 15 17:13:59 2019 -0800

    Build system: change CMake variable name from libplplot_RPATH to LTDL_LIBRARY_RPATH
    
    This corrects a misnomer that was confusing me.
    
    This change was done by a comprehensive sed script approach, i.e.,
    
    sed -i -e 's?libplplot_RPATH?LTDL_LIBRARY_RPATH?' $(find . -type f |grep -ivE '\.git|test_fortran|test_ada|epa_build' |xargs grep -l libplplot_RPATH)
    
    so that this change has been made consistently throughout the PLplot source tree.

M	bindings/qt_gui/CMakeLists.txt
M	cmake/modules/drivers.cmake
M	drivers/CMakeLists.txt
M	src/CMakeLists.txt

commit f8cf13ad0c476e5bd03c288f43fe842bde554229
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Fri Feb 8 12:06:01 2019 -0800

    Update instructions for wiki changes
    
    The previous instructions were for the case where changes were
    made in the wiki markdown source in the local git working directory
    and propagated to the appropriate SF wiki edit session.
    
    I have now documented a second case where changes are made to the
    appropriate SF wiki edit session of the markdown wiki source
    and propagated to the local git working directory.

M	README.developers

commit 7bc23f14479fdd42e32ed3847e18e389a717b5a8
Author: Phil Rosenberg <p.d.rosenberg@gmail.com>
Date:   Fri Feb 8 12:13:19 2019 +0000

    Updated wiki for building with visual studio
    
    The wiki was out of date recommending using libraries which we
    no longer recommend and needed updating to reflect changes in
    finding the wxwidgets library.

M	doc/wiki_source/Configure_PLplot_for_the_Visual_Studio_IDE

commit c67d153a5a10bbd4f33790e6723c6e3a3672f11f
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun Feb 3 14:34:38 2019 -0800

    Use the CMake upstream version rather than our own version of FindwxWidgets.cmake
    
    Our own version corresponds to the upstream CMake version 3.9.0-rc3 with the following
    additional patch
    
    software@merlin> git diff 59344dc51a25 HEAD cmake/modules/FindwxWidgets.cmake diff --git
    a/cmake/modules/FindwxWidgets.cmake b/cmake/modules/FindwxWidgets.cmake
    index 82f34ec32..4d3a2d115 100644
    --- a/cmake/modules/FindwxWidgets.cmake
    +++ b/cmake/modules/FindwxWidgets.cmake
    @@ -915,8 +915,17 @@ if (_wx_lib_missing)
     endif()
     unset(_wx_lib_missing)
    
    -# Check if a specfic version was requested by find_package().
    +# Check if a specific version was requested by find_package().
     if(wxWidgets_FOUND)
    +  # On at least one Windows platform (MinGW/MSYS) find_file fails
    +  # unless convert from /<drive_letter>/ form to <drive_letter>:/
    +  # form.  So use both forms to be sure on that platform without
    +  # disrupting other platforms.
    +  string(REGEX REPLACE ";/([a-zA-z])/" ";\\1:/" wxWidgets_search_path ";${wxWidgets_INCLUDE_DIRS}")
    +  list(REMOVE_AT wxWidgets_search_path 0)
    +  if(NOT "${wxWidgets_search_path}" STREQUAL "${wxWidgets_INCLUDE_DIRS}")
    +    list(APPEND wxWidgets_INCLUDE_DIRS ${wxWidgets_search_path})
    +  endif(NOT "${wxWidgets_search_path}" STREQUAL "${wxWidgets_INCLUDE_DIRS}")
       find_file(_filename wx/version.h PATHS ${wxWidgets_INCLUDE_DIRS} NO_DEFAULT_PATH)
       dbg_msg("_filename:  ${_filename}")
    
    That change was to help support the legacy MinGW/MSYS system which is
    now likely of zero interest to us (since its successor MinGW-w64/MSYS2
    is so much better).
    
    Meanwhile, CMake upstream has kept improving the upstream version of
    this file with 10 commits since 3.9.0-rc3.  Furthermore Phil Rosenberg
    recently found the upstream version worked for his Windows platform
    (not identified further) while our own version did not.
    
    So to take advantage of those upstream improvements (now from 3.13.2
    and later because of our recent minimum CMake version bump) we now
    have dropped our own version of FindwxWidgets.cmake.  And we can
    always ask for the above patch to be applied to the upstream version
    if that issue ever impacts any of the Windows platforms of interest to
    us.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by the same comprehensive test reported for my
    (AWI's) last commit, i.e., that comprehensive test was done with
    the  deletion of cmake/modules/FindwxWidgets.cmake in the working
    directory that is now being committed.

D	cmake/modules/FindwxWidgets.cmake

commit ec2a3d5edcf707793a32162448b5bb7f48b2786c
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun Feb 3 13:42:55 2019 -0800

    Bump minimum CMake version to 3.13.2 for all platforms
    
    Previously this minimum version was 3.7.2 for Linux platforms
    and 3.11.0 for non-Linux platforms.
    
    The fundamental purpose of keeping the minimum CMake version as close
    as possible to the latest CMake version (currently 3.13.3) is to take
    advantage of CMake improvements (bug fixes, improved policies, and
    improved software finding) that tend to occur for later versions of
    CMake.  But we normally hold back some from the lastest version so
    that the majority of our users can use the version of CMake provided
    by their distribution rather than having to build CMake themselves.
    For Linux distributions, Debian Stable is normally a good guide for
    the version to adopt.  Debian Buster currently provides 3.13.2 and
    will likely be released as Debian Stable by the time our next version
    of PLplot is released with the current change.  So I am confident the
    latest versions of most Linux distributions will supply CMake-3.13.2
    or higher by that time as well.
    
    The situation for non-Linux distributions is as follows:
    
    Cygwin: 3.13.1 from <https://cygwin.com/cgi-bin2/package-grep.cgi>
    MinGW-w64/MSYS2: 3.12.4 from <http://repo.msys2.org/mingw/x86_64/>
    Fink: 3.11.0 from <http://pdb.finkproject.org/pdb/index.php?phpLang=en>
    MacPorts: 3.13.3 from <https://www.macports.org/ports.php>
    HomeBrew:3.13.3 from <http://brewformulas.org/>
    
    So as a result of this change, Cygwin, MinGW-w64/MSYS2, and Fink users
    will have to build the latest version of CMake before they build the
    git version of PLplot.  But it is completely straightforward to do
    that using either an earlier version of CMake or the bootstrap method
    on these Unix (or Unix-like) platforms.  In any case, all of these
    non-Linux distributions are rolling releases which are designed to
    keep up with the latest software versions so it is likely that by the
    time of the next PLplot release, Cygwin, MinGW-w64/MSYS2, and Fink
    users will have distribution access to CMake-3.13.2 or above.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by running
    
    # Choose these prefixes to assure that the source, build, and install tree have
    # blanks in their pathname (to test that case during this comprehensive test)
    SOURCE_PREFIX="/home/software/plplot/HEAD/plplot blank .git"
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    
    # Set CMAKE_PREFIX_PATH to access local versions of lua and libLASi to avoid showstopping
    # errors in the Debian Testing versions of those packages.
    
    # Put a local build of CMake-3.13.2 first on the PATH to thoroughly test our
    # build system for our new minimum version of CMake.
    
    # Set LD_LIBRARY_PATH so the run time loader can find the local
    # libLASi version.  (This step will not be necessary as soon as the
    # PLplot build system is modified to implement rpath logic for
    # libLASi.)
    
    # Use the -DUSE_INCRTCL_VERSION_4=ON option to help CMake find Tcl/Tk components. (This step
    # will not be necessary as soon as the PLplot build system is modified to make Tcl/Tk/Itcl/Itk/Iwidgets
    # finding much more robust.
    
    # Apply no constraints to limit the reach of this test to give our build system the maximum possible
    # testing on Linux for our minimum CMake version (3.13.2).
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5:/home/software/lasi_svn/install PATH="/home/software/cmake/install-3.13.2/bin:$PATH" LD_LIBRARY_PATH=/home/software/lasi_svn/install/lib "$SOURCE_PREFIX"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON" --build_command "make -j16" --ctest_command "ctest -j16" --do_submit_dashboard yes)
    
    The above command ran without issues (e.g., hangs or other obvious
    errors) and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed this
    comprehensive test had no configure, build, or obvious run-time errors
    (i.e., no non-zero return codes for any of the steps in this
    comprehensive test), and the difference test results (done by default
    by the svg device) were perfect.  In addition the dashboard results
    at <https://my.cdash.org/index.php?project=PLplot_git> for this test
    were perfect other than the usual spurious warning messages for the
    configure step.

M	CMakeLists.txt
M	examples/CMakeLists.txt

commit 223dff54af4cd13d12c50b26ceb8f8aa67dc6f84
Author: Phil Rosenberg <p.d.rosenberg@gmail.com>
Date:   Tue Jan 15 11:32:06 2019 +0000

    Exported two functions from plstream.cc into the plplotcxx lib/dll for dll builds
    
    The functions Contourable_Data_evaluator() and Coord_Xform_evaluator()
    were not prefixed by PLDLLIMPEXP_CXX. This means that for dll builds of
    the library they were not available to the users (although code compiled
    it would not link). The Coord_Xform_evaluator() function is for use at
    least in the plstream::vect method for mapping between the Coord_Xformer
    class and the void * input required for the API.
    Contourable_Data_evaluator() similarly mapps between the Contourable_Data
    class and void * for ingestion into the API.
    
    Both the functions should be available to the user, hence the need for
    the export.

M	bindings/c++/plstream.h

commit ba952042a56c8c36c5c9e39163f8cde93056c730
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun Jan 6 14:07:49 2019 -0800

    Core library: Some changes to our C typedefs in plplot.h
    
    We have removed the typedefs for PL_NC_GENERIC_POINTER and
    PL_GENERIC_POINTER.  Those typedefs were introduced in 5.12.0 (as the
    start of a plan which we soon after decided not to implement) and officially
    deprecated as of 5.13.0 (where all references to these typedefs were
    replaced by PLPointer everywhere in our code other than in plplot.h).
    This current change removes these typedefs from plplot.h as well.
    
    We have changed the PLINT_NC_VECTOR typedef (first defined as of 5.12.0) as follows:
    
    -typedef int *                 PLINT_NC_VECTOR;
    +typedef PLINT *               PLINT_NC_VECTOR;
    
    to fix an inconsistency that was incorrectly and inadvertently created
    for 5.12.0 between this typedef and all other PLINT* typedefs which
    I noticed just now.
    
    For details about the (somewhat limited) backwards-incompatibilities introduced
    by these changes see README.release.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the "all" target without any warnings
    concerning the above typedefs or errors of any kind.  This was the
    expected result for the above changes to PL_NC_GENERIC_POINTER and
    PL_GENERIC_POINTER since those typedefs no longer appear anywhere in
    our code.  Furthermore, many previous build and run-time tests on this
    AMD 64-bit platform (Ryzen 7 1700) and my prior Intel 64-bit platform
    (g33) showed no ill effects due to the above inconsistency between the
    prior typedef for PLINT_NC_VECTOR and all other PLINT* types, and this
    current test shows (as expected) that removing this inconsistency
    continues to show no ill effects on my current AMD platform.

M	README.release
M	include/plplot.h

commit 9edbba4bd40ab03d229c123795abd41c088499cc
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun Jan 6 01:17:39 2019 -0800

    Implement bash script that finds the git commit year range for each individual author of a file
    
    These year ranges are output in useful sorted copyright form with
    specified comment prefix.
    
    Here is typical output for this script where the first argument is the
    filename and the second argument is the comment prefix used for the
    copyright line.
    
    software@merlin> scripts/find_commit_date_ranges.sh src/plctrl.c "//"
    // Copyright (C) 1993-2005 Maurice LeBrun
    // Copyright (C) 1995-2002 Geoffrey Furnish
    // Copyright (C) 1996 Rady Shouman
    // Copyright (C) 2000-2018 Alan W. Irwin
    // Copyright (C) 2001-2003 Joao Cardoso
    // Copyright (C) 2001-2005 Rafael Laboissiere
    // Copyright (C) 2002 Vince Darley
    // Copyright (C) 2002-2007 Andrew Roach
    // Copyright (C) 2004-2013 Andrew Ross
    // Copyright (C) 2005 Thomas Duck
    // Copyright (C) 2006-2011 Arjen Markus
    // Copyright (C) 2006-2011 Hazen Babcock
    // Copyright (C) 2008-2009 Werner Smekal
    // Copyright (C) 2009-2011 Hezekiah M. Carty
    // Copyright (C) 2015-2018 Phil Rosenberg
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) as above.

A	scripts/find_commit_date_ranges.sh

commit 02652c9a422d6f2258d073a7211940699e937046
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Jan 2 04:45:38 2019 -0800

    Fix memory management for qt_example and associated PlotWindow class
    
    The qt_example changes were as follows:
    
    * Moved back to the 5.13.0 cleanup style (where the code stanza to do
      cleanup is executed after the a.exec() call).  This style is
      problematic (see bad comprehensive test result below) since
      sometimes it is possible there is no return from a.exec().  But when
      it works it allows deleting the win PlotWindow instance.  The plan
      for later is to fix the problematic nature of this cleanup by using
      the [recommended procedure](<http://doc.qt.io/qt-5/qapplication.html#exec)
      for cleanup associated with any such call to the qApp exec() method.
    
    * Deleted the win PlotWindow instance in that cleanup stanza.
    
    * Added an experimental code stanza to test creation and destruction
      of PlotWindow for the simplified case where it is not used by the
      qApp.  Normally this stanza is ignored because of preprocessing
      logic, but a convenient single change to the code will make this
      stanza available for testing.
    
    * Emitted "Completed cleanup of qt_example" message to help verify
      if cleanup is actually done.
    
    The PlotWindow class changes were as follows:
    
    * Followed net advice (i.e.,
    <https://stackoverflow.com/questions/3153155/when-setting-the-wa-deleteonclose-attribute-on-a-qt-mainwindow-the-program-cras>
      by commenting out
    
    setAttribute( Qt::WA_DeleteOnClose );
    
      in the PlotWindow constructor.  This change very likely avoids double-free issues since
      we are deleting an automatically allocated qApp on exit from the qt_example main
      routine in any case.
    
    * Dropped all PLplot dynamic stream stuff (i.e., use default PLplot
      static stream) from PlotWindow constructor and destructor
      since qt_example does not need that complication.
    
    * Inserted
    
    plend();
    
      in the PlotWindow destructor.  According to valgrind this saved 70KB of
      memory that would otherwise have been still accessible on exit.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the qt_example and qt targets and
    running
    
    valgrind --leak-check=full --num-callers=500 --leak-check-heuristics=all examples/c++/qt_example >| valgrind.out 2>&1
    
    These results all emitted the "Completed cleanup of qt_example" message and showed "definitely lost"
    memory leaks and "still allocated" memory leaks that were quite similar to those obtained from
    using one of the qt devices, e.g.,
    
    valgrind --leak-check=full --num-callers=500 --leak-check-heuristics=all examples/c/x01c -dev pngqt -o test.png >| valgrind.out 2>&1
    
    In each case the quantity of "still allocated" memory was roughly
    ~400KB, and since that roughly agrees for each case (within the
    uncertainties of which components of Qt5 are being used by x01c and
    -dev pngqt and which components of Qt5 are being used by qt_example
    and the extqt device) it is likely due to Qt5 issues rather than
    PLplot issues.  Also, all but one of the "definitely lost" memory
    leaks could be attributed to Qt rather than PLplot, and that PLplot
    "definitely lost" memory leak (with all qt devices and not just extqt)
    ideally needs attention but is apparently harmless from the many
    successful comprehensive tests that have been completed for all qt
    devices other than extqt.
    
    So the conclusion I draw from these valgrind results is our memory
    management for qt_example and the associated PlotWindow class is in
    just as good shape as it is for ordinary, well-tested non-extqt qt
    devices.
    
    However, when I performed an interactive* comprehensive test using
    
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5 PATH="/home/software/cmake/install-3.7.2/bin:$PATH" "../plplot blank .git"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON" --build_command "make -j16" --ctest_command "ctest -j16" --do_test_noninteractive no --do_ctest no)
    
    my usual evaluation procedure for such tests (see
    doc/wiki_source/Testing_PLplot) showed all was well except for one
    issue, namely, qt_example intermittently (one instance corresponding
    to the traditional make interactive test for the installed examples
    for the static libraries/static devices case which I could not
    replicate later) hung on exit.  For this case alone there was no
    "Completed cleanup of qt_example" message.  Thus, it appears when I
    hit the exit button on the qt_example GUI, a.exec() never returned so
    the main routine of qt_example apparently could not complete.  It
    also turns out that pyqt[45]_example.py has a similar
    style of cleanup after the qApp .exec() method is executed, i.e.,
    
    app = QtWidgets.QApplication(sys.argv)
    plot = QPlot()
    plot.show()
    app.exec_()
    plot.cleanup()
    
    which is also problematic according to
    <http://pyqt.sourceforge.net/Docs/PyQt4/qapplication.html#exec> and
    therefore the likely cause for why I recently got a hang out of
    pyqt5_example during comprehensive testing (in December although not this time).
    N.B. app.exec_() is a python2 backwards-compatible wrapper for
    QApplication.exec(), but as soon as we drop support for python2 and
    stick strictly with python3 we can use app.exec() (without the
    underscore) in our python3 scripts.
    
    Anyhow, very likely the fix for these problamatic hang issues is to
    use the recommended cleanup for both qt_example and pyqt[45] which is
    to "connect clean-up code to the aboutToQuit() signal".  A working
    example of how to do that with signals and slots is given by
    <https://stackoverflow.com/questions/21408675/is-the-abouttoquit-signal-of-the-qcoreapplication-still-supported-in-qt-5-1-0>.
    Note also there is a nice introduction to signals and slots at
    <http://doc.qt.io/qt-5/signalsandslots.html>.

M	examples/c++/qt_PlotWindow.cpp
M	examples/c++/qt_example.cpp

commit 790754f35db9f797d5153005c199a1329e34583f
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun Dec 30 12:03:42 2018 -0800

    Clean up logic for creation and destruction of internal qApp
    
    The previous implementation of this logic was being made unnecessarily
    complicated and non-robust by not distinguishing clearly between the
    case where initQtApp creates an internal qApp and the case where the
    qApp is created externally.  Because of this issue, appCounter counted
    users of qApp regardless of whether that qApp had been created
    internally or externally; in one case (qt application using the extqt
    device) we were relying on that counter being negative in closeQtApp
    (the routine used to delete qApp if that was created internally by
    initQtApp) in order to not destroy the external qApp always used in
    that case, and in another case (qt application using non-extqt qt
    devices) we were adding 1 to appCounter to avoid incorrect destruction
    of the external qApp by closeQtApp.  Also as a result of this issue,
    the case of a qt application using both extqt and a non-exqt qt device
    would not work (since appCounter then ends up as zero so that the
    external qApp used for this case gets incorrectly destroyed).
    
    So for this cleanup I keep track of whether qApp is externally created
    or internally created with the bool internal_qApp global variable,
    rename appCounter to internal_qAppCounter, and consistent with that
    name change make sure that variable
    is only changed if internal_qApp is true.  This change allows us to
    not have special conditions on the initial value of what is now called
    internal_qAppCounter, and if an internal qApp is created, the last-use
    case is unequivocally signalled by internal_qAppCounter == 0 *so long
    as for each qt device that happens to use an internal qApp each initQtApp call in plD_init_* is
    matched by a corresponding call to closeQtApp in plD_tidy_*.
    
    That condition was previously met. And since extqt is the one qt
    device that never uses an internal qApp, calls to initQtApp and
    closeQtApp for that device would effectively become no-ops with the
    new more robust version of the code.  But to keep the code as simple as
    possible we continue as before not calling initQtApp from
    plD_init_extqt, but we change from calling closeQtApp in
    plD_tidy_extqt to dropping that call.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian testing) by building the test_noninteractive, test_interactive,
    and test_qt_example targets without configure, build, run-time, or
    difference report issues. (The test_qt_example target is currently
    not run as part of test_interactive because of occasional segfault issues
    on exit from qt_example, but for this test we did not encounter
    one of those, and qt_example appeared to work well despite the
    known memory management issues it has.)
    
    N.B. Our current suite of tests does not include the case of a qt
    application that uses non-extqt qt devices.  However, António R. Tomé
    has developed such applications so we request that he tests the
    current commit with those applications.

M	drivers/qt.cpp

commit c8ccc5520b9e041c064b57fce8007466d320c9c3
Author: António R. Tomé <antoniortome@users.sourceforge.net>
Date:   Mon Dec 24 15:01:53 2018 +0000

    Allow all qt devices to be used from a qt application
    
    All qt devices need a qApp in order to work and the purpose of
    initQtApp (which is called from all plD_init* routines *other than
    plD_init_extqt* that are implemented in drivers/qt.cpp) is to create a
    qApp (and the associated argv memory it needs) if a qApp doesn't exist
    already (either created by a previous call to initQtApp or created
    independently in an external qt application).  And the purpose of
    closeQtApp (which is called from all the plD_tidy_* routines
    implemented in drivers/qt.cpp) is to delete the qApp and associated
    (argv) memory if this is the last use of the qApp that was initially
    created in initQtApp, but not delete qApp if it was created
    independently.  The static variable appCounter (protected by a mutex
    to make it thread-safe if qt devices are being used in multiple threads)
    is used to keep track of last use where appCounter will be zero.
    
    This logic should work fine for non-qt applications that simply rely
    on the PLplot C library to provide the qt devices (dynamically or as
    part of the library) since for the last use case appCounter is zero
    and therefore the internally created qApp and associated argv are
    correctly deleted.  And it also works fine for qt applications (those
    which depend on libplplotqt and which must necessarily create their
    own qApp) if those applications only use the extqt device because in
    that case initQtApp is never called so that when extqt is tidied up
    appCounter ends up as -1 so the qApp created independently by that qt
    application is (rightly) not deleted.  That leaves the problem of a qt
    application that use non-extqt qt devices where prior to the present
    change appCounter ends up as zero on last-use case, and the
    independent qApp created by that qt application gets incorrectly
    deleted.  To fix that case, this commit simply adds 1 to appCounter
    in initQtApp when on first use case an external qApp is detected.
    
    Tested by: António R. Tomé <antoniortome@users.sourceforge.net> on Linux
    (openSUSE leap 15.0) by building an running his own qt application that
    uses qt devices other than extqt without issues.

M	drivers/qt.cpp

commit 50b61e5214d9d88b2e235885dcb837db30930d09
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Dec 27 16:58:02 2018 -0800

    Warn if the Qt installation does not support a requested image format
    
    I recently ran some tiffqt tests and that silently generated empty
    output files because I did not (at that time) have the Debian package
    qt5-image-formats-plugins installed which supplies the desired Qt
    plugin for TIFF (and a few other formats which PLplot doesn't support
    yet).  This commit changes that silence to a warning message
    concerning not supporting a given format.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the x30c and qt targets and running
    
    examples/c/x30c -dev tiffqt -o test.tiff -fam -bg 00F_0.3
    
    both without and with the qt5-image-formats-plugins Debian package
    installed.  In the former case the desired warning message was issued
    along with the expected generation of an empty output file.  As
    expected in the latter case there was no warning message and non-empty
    test.tiff.[12] files were produced.  Both the "display" and "pqiv"
    image viewers rendered test.tiff.1 with an incorrect opaque blue
    background but correct translucent blocks in front of that background.
    (This badly rendered translucent background issue also occurs for all
    other qt raster devices other than pngqt as discussed for the previous
    commit.)

M	bindings/qt_gui/plqt.cpp

commit aa0dd85fceaa0c94eaea443cdeac464a0749cc81
Author: António R. Tomé <antoniortome@users.sourceforge.net>
Date:   Mon Dec 24 14:58:00 2018 +0000

    Fix background transparency bug in the qt raster devices
    
    We found experimentally that QtRasterDevice::QtRasterDevice required
    the following two changes to solve a long-standing bug where the alpha
    value of the background was being completely ignored by qt raster
    devices (so semi-transparent backgrounds were being rendered as
    completely opaque):
    
    1. Change the QImage format of results for raster devices from
    QImage::Format_RGB32 to QImage::Format_ARGB32.  This change (or
    possibly changing to the QImage::Format_ARGB32_Premultiplied format in
    the future for efficiency reasons) is required because the
    QImage::Format_RGB32 documentation at
    <http://doc.qt.io/qt-5/qimage.html#Format-enum> states "The image is
    stored using a 32-bit RGB format (0xffRRGGBB)" i.e., the alpha channel
    is completely fixed at opaque. So this previously adopted opaque
    format was not correct.
    
    2. Insert a transparent fill canvas (with color Qt::transparent which
    is transparent black according to
    <http://doc.qt.io/qt-5/qt.html#GlobalColor-enum> as the first layer of
    the image.  Transparent black is essential since the normal "over"
    compositing rule (see the compositing formula in
    <https://en.wikipedia.org/wiki/Alpha_compositing> which composites the
    semi-transparent PLplot background on top of that transparent black
    canvas gives a result which is exactly the PLplot background, with
    unchanged ARGB values.
    
    Tested by: António R. Tomé <antoniortome@users.sourceforge.net> and
    Alan W. Irwin <airwin@users.sourceforge.net> on two different Linux
    platforms (António: openSUSE leap 15.0 and Alan: Debian Testing).
    Both testers built the x30c and qt targets and ran
    
    examples/c/x30c -dev pngqt -o test3_qt.png -fam -bg 00F_0.3
    
    under valgrind with good valgrind results for this case where a blue
    background with 70 per cent transparency is specified.
    
    For Alan the valgrind report showed "ERROR SUMMARY: 0 errors from 0
    contexts (suppressed: 64975 from 1)" which is a good memory management
    report aside from the memory leaks which were also mentioned.  The
    memory leak details reported by valgrind were different for António
    and Alan (likely because of different versions of Qt), and António persued those
    further with the valgrind --leak-check=full option to discover most of them were
    due to Qt but a few of them appear to be due to memory management issues
    for the Qt components of PLplot which will warrant further investigation.
    
    For Alan when the PNG file was viewed with either the "display" or
    "pqiv" image viewer applications the results showed the above
    semi-transparent blue background imposed by PLplot composited with a
    black and white checkerboard canvas.  Those canvases were rendered by
    the two different applications (as proved by the different sized
    squares in the two cases) as the traditional means of marking a
    semitransparent background.  Previous to this fix, the checkerboards
    were not present indicating an incorrect opaque blue background.
    
    António also tested this change with his own Qt GUI application with
    a variety of different transparencies, and all was well (checkerboard when
    results viewed with an image viewer, proper semi-transparent rendering when
    those PNG plot results were imported into LibreOffice Impress).
    
    Alan also tested this change for all raster qt devices as follows:
    
    (for RASTER in bmp jpg png ppm tiff; do valgrind examples/c/x30c -dev ${RASTER}qt -o test.${RASTER} -bg 00F_0.3; done) >& valgrind.report
    
    As expected (since the PLplot qt device driver uses code that is
    virtually identical for all these formats) the valgrind reports from
    these tests did not differ significantly from the earlier valgrind
    result mentioned above for the pngqt device.  A subsequent attempt to
    view these test.* plot results with both "display" and "pqiv" showed
    the expected good semi-transparent results (checkerboard background,
    translucent foreground images) for pngqt.  However, when that test was
    used for for raster formats bmp, jpg, ppm, and tiff, the foreground
    images were translucent as expected, but the background was rendered
    opaque blue.
    
    It is not clear at this stage whether this continued non-transparent
    background issue for all qt raster devices other than pngqt is a Qt
    issue, a PLplot issue, or an image viewer issue with displaying
    backgrounds.  My guess is the latter possibility is the correct one
    (i.e., PLplot and Qt are producing valid semi-transparent background
    results for all the above raster formats), but I don't know how to
    prove that.

M	bindings/qt_gui/plqt.cpp

commit c7b078afaa79201fa2bacee1f366fc5dc3091e6f
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Dec 18 12:27:13 2018 -0800

    Exclude ChangeLog.release from trailing whitespace removal script
    
    This file should be excluded to preserve the exact output of the
    "git log" command that produced this file.  Right now, for example,
    that command gives indented results which necessarily means that
    empty lines in the commit message are indented with whitespace
    which would be removed by this script.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by running
    
    scripts/remove_trailing_whitespace.sh
    
    without ChangeLog.release being modified.

M	scripts/remove_trailing_whitespace.sh

commit 66d68d93ecf8f1b2cde13d98c42069607733d3c7
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Dec 18 12:19:58 2018 -0800

    Factor the PLplot export files
    
    This change was implemented by a new CMake function, configure_target_install, which is now
    used to install all exported targets in a consistent way.
    
    N.B. part of that consistency is modules are now installed without the unnecessary
    LIBRARY qualifier for install(TARGETS...) whereas before some module targets used
    that qualifier and some did not.
    
    As a result of this change each exported target (which can be a
    library, module, or executable) is now described by two files <target
    name>_export.cmake and <target name>_export-noconfig.cmake.
    Furthermore, plplotConfig.cmake now includes the plplot_exports.cmake
    file which in turn *optionally* includes all the export files.
    
    As a result, it should be possible for software packagers to factor
    PLplot binary packages so that each installed library, module, or
    executable in a binary package is accompanied by its two export files.
    Then if a user installs the fundamental binary PLplot package (which
    should include plplotConfig.cmake and plplot_exports.cmake) but only
    part of the additional binary packages so that some export files are
    missing) then other software (such as our own installed examples)
    which uses the
    
    find_package(plplot)
    
    CMake command to import plplot targets should continue to work fine so
    long as that other software checks for the existence of imported
    PLplot targets before using them.  (Note I have not made that change
    yet to our installed examples project, but the comprehensive test
    below shows that project continues to work fine when all PLplot
    exported targets are available for import as in that test case.)
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by running
    
    COMPREHENSIVE_TEST_PREFIX="/home/software/plplot/HEAD/comprehensive_test_disposeable blank"
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5 PATH="/home/software/cmake/install-3.7.2/bin:$PATH" "../plplot blank .git"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON" --build_command "make -j16" --ctest_command "ctest -j16")
    
    This command was run with cmake (and ctest) 3.7.2 in such a way that
    the source, build, and install trees all had a blank character in
    their prefixes.  CMake option -DUSE_INCRTCL_VERSION_4=ON is currently
    necessary to find Tcl/Tk components on my Debian Testing platform.  No
    script options were used to skip any part of this test since this intrusive
    commit needed thorough testing.
    
    The above command ran without issues (e.g., hangs or other obvious
    errors) and was followed up by the evaluation procedure documented in
    doc/wiki_source/Testing_PLplot.  That evaluation showed this
    comprehensive test had no configure, build, or obvious run-time errors
    (i.e., no non-zero return codes for any of the steps in this
    comprehensive test), and the difference test results were perfect.

M	CMakeLists.txt
M	bindings/ada/CMakeLists.txt
M	bindings/c++/CMakeLists.txt
M	bindings/d/CMakeLists.txt
M	bindings/fortran/CMakeLists.txt
M	bindings/lua/CMakeLists.txt
M	bindings/octave/CMakeLists.txt
M	bindings/python/CMakeLists.txt
M	bindings/qt_gui/CMakeLists.txt
M	bindings/qt_gui/pyqt4/CMakeLists.txt
M	bindings/qt_gui/pyqt5/CMakeLists.txt
M	bindings/qt_gui/smoke/CMakeLists.txt
M	bindings/tcl/CMakeLists.txt
M	bindings/tk/CMakeLists.txt
M	bindings/wxwidgets/CMakeLists.txt
M	cmake/modules/plplot_functions.cmake
M	drivers/CMakeLists.txt
M	examples/fortran/CMakeLists.txt
M	lib/csa/CMakeLists.txt
M	lib/nistcd/CMakeLists.txt
M	lib/nn/CMakeLists.txt
M	lib/qsastime/CMakeLists.txt
R096	src/plplotConfig.cmake	plplotConfig.cmake
M	src/CMakeLists.txt
M	utils/CMakeLists.txt

commit 9397c935fed795a6baca90b2108d008d11622871
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Dec 18 11:00:01 2018 -0800

    Reduce testing of pyqt5_example.py and (in the Qt5 case) qt_example
    
    In recent Qt5 comprehensive tests these examples sometimes hung (once for
    pyqt5_example.py) and sometimes segfaulted (once for qt_example)
    demonstrating they still have memory management issues.  Therefore,
    although these tests continue to exist, I have removed them as
    dependencies of higher-level tests such as the various
    test_interactive targets that are built by the comprehensive test
    script.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by successfully running a comprehensive test.  (There
    will be more details about that test in my next commit message.)

M	examples/CMakeLists.txt
M	plplot_test/CMakeLists.txt

commit db9d90d0b4e3562d45e09715d4b0f65b13af8d87
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Sun Dec 16 16:50:56 2018 -0800

    Crucial font fix for the qt device driver
    
    António Rodrigues Tomé discovered a number of qt device font issues
    were fixed for opensuse Qt-5.12.0 by calling the QFont setFamily
    method with a bogus non-empty string rather than an empty string.  I
    also confirmed this fix solved some long-standing qt device driver
    issues (missing glphys in example 24 were found and qt started
    responding with the correct Sans, Serif, or Monotype generic fonts
    when PLplot asked for those (e.g., in example 23) rather than always
    responding with Serif fonts.
    
    So from this evidence for two different Linux platforms it appears an
    empty string is not the correct way to specify a bogus font to the
    setFamily method and this commit corrects that issue.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the test_c_pngqt target and confirming
    the example 23 and 24 results were made perfect (i.e., the exact
    equivalent other than size with the corresponding pngcairo results).
    So this appears to be a big step forward for our qt device driver, and
    my thanks to António for discovering this simple but crucial font fix
    for the qt device driver.

M	bindings/qt_gui/plqt.cpp

commit 5f32f47365515bf35659a35c32882e6875587a15
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Thu Dec 13 23:46:24 2018 -0800

    More tweaks to instructions for the release manager

M	README.Release_Manager_Cookbook

commit 3cc01dca4ee7ada907f4d26b0db4f3c672c3bb73
Author: Arjen Markus <arjenmarkus@users.sourceforge.net>
Date:   Sun Dec 16 12:19:06 2018 +0100

    Limited adjustments to the page on testing PLplot.
    
    The edits consist mostly of splitting up the long paragraphs into smaller ones. Also adding an example on how to use the comprehensive testing script in the most minimal fashion. This prepares for a further reorganisation of the page.
    
    Tested by Arjen Markus, via visual inspection of the wiki page.

M	doc/wiki_source/Testing_PLplot

commit 95162643c22076c38e8a2c45d9ca98c9852f1c78
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Dec 12 20:14:47 2018 -0800

    Tentative bug fix for qt_example
    
    This fix is motivated by <http://doc.qt.io/qt-5/qapplication.html#exec> which states
    
    "[...T]here is no guarantee that the application will have time to exit its event loop and execute code at the end of the main() function, after the QApplication::exec() call."
    
    So they recommend that call should always be at the end of main
    routines.  I made that change to qt_example and extensive interactive
    testing since shows the segfaults in qt_example for the Qt5 case are
    either hidden or completely gone.  So if this is a real fix (i.e.,
    they are completely gone), my working hypothesis to explain it is the
    delete[] calls after exec() was called previously left potentially
    dangling pointers ==> segfault if those delete[] calls are ignored as
    seems possible from the above reference.  Anyhow, we will keep
    automatically testing both qt_example and pyqt5_example in a variety
    of contexts (e.g., like below) to see if any more segfault issues pop
    up, but so far so good.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by running
    
    time (nice -19 env CMAKE_PREFIX_PATH=/home/software/lua/install-5.3.5 PATH="/home/software/cmake/install-3.13.1/bin:$PATH" "../plplot blank .git"/scripts/comprehensive_test.sh --prefix "$COMPREHENSIVE_TEST_PREFIX" --cmake_added_options "-DUSE_INCRTCL_VERSION_4=ON -DDEFAULT_NO_BINDINGS=ON -DENABLE_cxx=ON -DENABLE_qt=ON -DENABLE_python=ON -DENABLE_pyqt5=ON -DDEFAULT_NO_DEVICES=ON -DPLD_extqt=ON" --build_command "make -j16" --ctest_command "ctest -j16" --do_test_noninteractive no --do_ctest no)
    
    That is, this is a comprehensive test that is limited to testing just
    qt_example and pyqt5_example in the Qt5 case for a variety of
    configurations/contexts.  Those were for our 3 major build
    configurations (shared library/dynamic devices, shared
    library/nondynamic devices, and static library/nondynamic devices) the
    above test built all dependencies of qt_example and pyqt5_example.py
    executed both those GUIs for our CMake-based core build and installed
    examples build and also executed qt_example for our traditional build
    of the installed examples.  So this test exercised the qt_example GUI
    9 times and the pyqt5_example GUI 6 times.
    
    For each such GUI execution, we clicked on the plot==>curves,
    histogram, interactive selection in that order, and for the last of
    those moved the resulting cursor into the upper corner of the window and
    left-clicked to determine the position with results reported in a
    position GUI where I hit the exit button.  Afterwards, I exited by
    hitting the upper left corner of the GUI ==> close.  I am documenting
    all these details because that pattern of GUI use generated
    intermittent segfaults at some time in the comprehensive test for
    several repeats of the above test before the tentative fix that is
    committed here.  But since the fix, two tries of the above
    comprehensive test has found no such segfaults.  So this fix is
    looking promising for qt_example, and pyqt5_example.py is looking
    good already on its own, but we need to continue to test both of them.

M	examples/c++/qt_example.cpp

commit a0e029141cfc7aa2831f6218118cef237e35add9
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Dec 12 19:22:25 2018 -0800

    Test systems consistency tweak: for the Qt5 case test qt_example for the traditional test of the installed examples
    
    This change makes the traditional test consistent with the CMake-based test system where
    as of commit plplot-5.13.0-111-gdc217017d and for the Qt5 case, test_qt_example and test_pyqt5_example
    were reinstated as dependencies of the test_interactive target, i.e., they became part of
    general interactive testing.
    
    N.B. Presently we have extensive evidence in the Qt5 case of
    qt_example segfaulting during comprehensive interactive testing so we
    had to specifically drop that test (and we also dropped the
    pyqt5_example test) from the interactive component of our recent
    comprehensive tests using -DPLD_extqt=OFF.  However, I have a
    tentative fix for qt_example which I am about to commit so making sure
    qt_example gets full testing treatment (e.g., for the traditional
    test of the installed examples) makes sense.

M	plplot_test/CMakeLists.txt

commit 9943508755506f7cd95dd2e7af74d4ad4e1adc68
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Wed Dec 12 04:01:53 2018 -0800

    Drop some additional symbols when generating comparison for bindings/fortran/plplotfortran_ifort.def
    
    The extra line in the sed script is
    
    /^.*MOD___/ d
    
    which deletes every line with that pattern in it.  As a result the
    following raw symbols (directly from the nm --defined-only command)
    are dropped
    
    000000000004B840 T __PLPLOT_GRAPHICS_MOD___COPY_PLPLOT_GRAPHICS_PLGRAPHICSIN
    000000000004F9A0 R __PLPLOT_GRAPHICS_MOD___DEF_INIT_PLPLOT_GRAPHICS_PLGRAPHICSIN
    0000000000057C80 D __PLPLOT_GRAPHICS_MOD___VTAB_PLPLOT_GRAPHICS_PLGRAPHICSIN
    000000000004B820 T __PLPLOT_TYPES_MOD___COPY_PLPLOT_TYPES_PLCGRID
    000000000004B810 T __PLPLOT_TYPES_MOD___COPY_PLPLOT_TYPES_PLFGRID
    000000000004FA20 R __PLPLOT_TYPES_MOD___DEF_INIT_PLPLOT_TYPES_PLCGRID
    000000000004F9F0 R __PLPLOT_TYPES_MOD___DEF_INIT_PLPLOT_TYPES_PLFGRID
    0000000000057D00 D __PLPLOT_TYPES_MOD___VTAB_PLPLOT_TYPES_PLCGRID
    0000000000057CC0 D __PLPLOT_TYPES_MOD___VTAB_PLPLOT_TYPES_PLFGRID
    
    I could modify the sed script to process these symbols, but Arjen
    seems content with the current
    bindings/fortran/plplotfortran_ifort.def file that does not have the
    processed version of these files.  So this one-line sed script change
    means the generated comparison for that file is identical with the
    original with the result that building the
    check_ifort_definitions_file target succeeds.
    
    Tested by: Alan W. Irwin <airwin@users.sourceforge.net> on Linux
    (Debian Testing) by building the check_ifort_definitions_file target
    with success.

M	bindings/fortran/generate_ifort_deffile.sed

commit 7b9c86a9ca86ae47572d772c32ebc0afa0c2a956
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Dec 11 19:38:51 2018 -0800

    Create template for the Release Notes for the next release after 5.14.0

M	README.release

commit 4909eaf1083d041419406e9d9aef7831d7e6d064
Author: Alan W. Irwin <airwin@users.sourceforge.net>
Date:   Tue Dec 11 19:27:18 2018 -0800

    Last-minute tweaks in the Release Manager instructions that did not make it into 5.14.0

M	README.Release_Manager_Cookbook
Source: README.release, updated 2019-06-01