Below are the changes for the current release.
See the CHANGES file for changes in older releases.
See the RELEASENOTES file for a summary of changes in each release.
Issue # numbers mentioned below can be found on Github. For more details, add
the issue number to the end of the URL: https://github.com/swig/swig/issues/

Version 4.0.1 (in progress)
===========================

2019-08-01: wsfulton
            #1602 Fix regression in 4.0.0 where a template function containing a parameter
            with the same name as the function name led to the parameter name used in the
            target language being incorrectly modified.

2019-07-29: wsfulton
            Remove all generated files on error. Previously generated files were not removed,
            potentially breaking Makefiles using file dependencies, especially when -Werror
            (warnings as errors) was used.

2019-07-23: smithx
            [C#] #1530 #1532 Fix marshalling of std::wstring to C#.

2019-07-18: gicmo
            [Python] #1587 Python 3.8 support - remove use of deprecated PyObject_GC_UnTrack.

2019-07-18: cher-nov
            [Python] #1573 Generated Python code uses consistent string quoting style - double
            quotes.

2019-07-16: geefr
            [C#] #616 #1576 Fix C# bool INPUT[], bool OUTPUT[], bool INOUT[] typemaps to marshall
            as 1-byte.

2019-07-12: vadz
            [C#, Java] #1568 #1583 Fix std::set<> typemaps for primitive types.

2019-07-12: vadz
            #1566 #1584 Regression in 4.0.0 - fix missing value for first item of enums with
            trailing comma.

2019-07-11: mcfarljm
            #1548 #1578 Fix segfault in Doxygen parser parsing empty lines in some commands like
            \code.

2019-07-09: IsaacPascual
            [C#, Java] #1570 Fix name of generated C#/Java classes for %interface macros
            in swiginterface.i when wrapping nested C++ classes.

2019-07-05: wsfulton
            [Python] #1547 Whitespace fixes in Doxygen translated comments into pydoc comments
            for Sphinx compatibility.

2019-06-28: wsfulton
            [MzScheme, OCaml] #1559 $arg and $input were incorrectly substituted in the
            argout typemap when two or more arguments were present.

2019-06-24: wsfulton
            [Python, Ruby] #1538 Remove the UnknownExceptionHandler class in order to be
            C++17 compliant as it uses std::unexpected_handler which was removed in C++17.
            This class was intended for director exception handling but was never used by
            SWIG and was never documented.

            *** POTENTIAL INCOMPATIBILITY ***

2019-06-06: bkotzz
            [Java] #1552 Improve performance in Java std::vector constructor wrapper that takes
            a native Java array as input.

2019-06-03: olly
	    [Python] Fix regression in implicit_conv handling of tuples,
	    introduced in SWIG 4.0.0.  Fixes #1553, reported by Alexandre
	    Duret-Lutz.

2019-05-24: wsfulton
            [Octave] Fix detection of Octave on MacOS.

2019-05-24: opoplawski
            [Octave] #1522 Adapt OCTAVE_LDFLAGS for Octave 5.1.

2019-05-22: ferdynator
	    [PHP] #1528 Don't add a closing '?>' PHP tag to generated files.
	    PSR-2 says it MUST be omitted for files containing only PHP.
