This file explains how we use our CMake-based build system and other
tools to build dynamically loaded python extension modules
implementing PLplot support for either Python 3 (preferred because
it generally is less buggy/better supported than Python 2 these days) or
Python 2.

I. Selection of Python 3 or Python 2:

Because of the above fundamental preference our build system first
searches for the Python 3 executable (unless the user specifies
-DFORCE_PYTHON2=ON).  But if it cannot find a Python 3 executable or
the user has specified -DFORCE_PYTHON2=ON it will search for a Python
2 executable.  If a Python executable is found our build system uses
that executable to find the Python library and numpy extension
corresponding to that executable.

II. plplotc.py and _plplotc.so

These files (where plplotc.py wraps _plplotc.so) constitute the
plplotc Python extension that implements our raw Python binding.  This
extension is automatically generated by swig using the PLplot API
specified in bindings/swig-support/plplotcapi.i (which also controls
the swig-generated PLplot bindings that are implemented for Java, Lua,
and Octave).  The details of
how swig treats that API for the Python case are handled by plplotc.i
(and fragments.i which was copied from swig version 1.3.21 to keep the
returned tuple style flat rather than hierarchical).  Our build system
then runs swig to generate plplotcPYTHON_wrap.c, build and install
_plplotc.so from that source code, and generate and install a wrapper
for the extension module called plplotc.py.

III. plplot.py

This file is our hand-crafted wrapper for plplotc.py that adds
some useful functionality (e.g., additional variations of the argument
lists) to what is available for plplotc.py.  This is the module
that should be imported by users.

IV. Pltk_init.py and _Pltk_init.so
These files (where Pltk_init.py wraps _Pltk_init.so) constitute the
Pltk_init Python extension that implements loading loading plframe
from Python.  This extension is automatically generated by swig using
Pltk_init.i.  Actual use of this extension is demonstrated
by examples/python/pytkdemo which imports Plframe which in turn
imports TclSup.

V. plplot_pyqt4.so

This extension module (only available for Qt4) implements pyqt4 support for PLplot.  Our build system
builds it in bindings/qt_gui/pyqt4 using sip-generated source files.

VI. plplot_pyqt5.so

This extension module (only available for Qt5) implements pyqt5 support for PLplot.  Our build system
builds it in bindings/qt_gui/pyqt5 using sip-generated source files.
