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.1.0 (in progress)
===========================

2021-04-19: olly
	    Fix use of uninitialised variable in the generated code for an
	    empty typecheck typemap, such as the dummy one we include for
	    std::initializer_list.

2021-04-12: olly
	    #1777 [Python] Specifying -py3 now generates a check for Python
	    version >= 3.0.

2021-03-26: olly
	    [PHP] Add PHP keywords 'fn' (added in 7.4) and 'match' (added in
	    8.0) to the list SWIG knows to automatically rename.

2021-03-23: wsfulton
            #1942 [Python] Fix compilation error in wrappers when using -builtin
            and wrapping varargs in constructors.

2021-03-22: goto40
            #1977 Fix handling of template template parameters.

2021-03-21: olly
	    #1929, #1978 [PHP] Add support for PHP 8.

2021-03-19: wsfulton
            #1610 Remove -ansi from default compilation flags.

2021-03-19: dot-asm
            #1934 [Java] Clean up typemaps for long long arrays.

2021-03-19: olly
	    #1527 [PHP] Improve PHP object creation in directorin case.
	    Reportedly the code we were using in this case gave segfaults in
	    PHP 7.2 and later - we've been unable to reproduce these, but the
	    new approach is also simpler and should be bit faster too.

2021-03-18: olly
	    #1655 [PHP] Fix char* typecheck typemap to accept PHP Null like the
	    corresponding in typemap does.

2021-03-18: olly
	    #1900, #1905 [PHP] Fix wrapping of overloaded directed methods with
	    non-void return.

2021-03-11: murillo128
            #1498 [Javascript] Support type conversion.

2021-03-06: nshmyrev
            #872 [Javascript] Various typemap issues in arrays_javascript.i fixed.

2021-03-03: vaughamhong
            #577 [Javascript] Implemented SetModule/GetModule for JSC to allow type sharing
            across modules.

2021-03-01: xantares, Oliver Buchtala, geographika
            #1040 Add support for building SWIG with CMake. See documentation in Windows.html.

2021-03-01: vadz
            #1952 Fix incorrect warning "Unknown Doxygen command: ."

2021-02-28: p2k
            #969 [Javascript] v8/node - prevent crash calling a constructor without new keyword.

2021-02-28: alecmev
            #405 #1121 [Javascript] Fix OUTPUT typemaps on methods that don't return void.
            The output value is appended to the return value.

2021-02-26: murillo128, wsfulton
            #1269 [Javascript] Fix handling of large positive unsigned long and
            unsigned long long values.

2021-02-24: tomleavy, yegorich, tungntpham
            #1746 [Javascript] Add support for Node v12 and v14.
            SWIG support for Node is now for v6 and later only.

2020-02-09: ZackerySpytz
            #1872 Fix typos in attribute2ref macros.

2020-10-10: wsfulton
            [Javascript] Fix so that ccomplex.i interface to file can be used.

2020-10-10: wsfulton
            #252 complex can now be used as a C identifier and doesn't give a syntax error.

2020-10-10: lpsinger
            #1770 Correct C complex support.
            _Complex is now parsed as a keyword rather than complex as per the C99 standard.
            The complex macro is available in the ccomplex.i library file along with other
            complex number handling provided by the complex.h header.

2020-10-07: ZackerySpytz
            [Python] #1812 Fix the error handling for the PyObject_GetBuffer() calls in
            pybuffer.i.

2020-10-07: treitmayr
            #1824 Add missing space in director method declaration returning
            const pointer.

2020-10-07: adelva1984
            #1859 Remove all (two) exceptions from SWIG executable.

2020-09-25: wsfulton
            [C#, Java] #1874 Add ability to change the modifiers for the interface
            generated when using the %interface macros.

            For C# use the 'csinterfacemodifiers' typemap.
            For Java use the 'javainterfacemodifiers' typemap.

            For example:

              %typemap(csinterfacemodifiers) X "internal interface"


2020-09-24: geefr
            [C#] #1868 Fix wchar_t* csvarout typemap for member variable wrappers.

2020-08-28: wsfulton
            [Java] #1862 Fix crashes in swig_connect_director during director class construction
            when using the director class from multiple threads - a race condition initialising
            block scope static variables. The fix is guaranteed when using C++11, but most
            compilers also fix it when using C++03/C++98.

2020-08-16: wsfulton
            [Python] Add missing initializer for member ‘_heaptypeobject::ht_module’ when using
            -builtin to complete Python 3.9 support.

2020-08-16: wsfulton
            [Python] Remove PyEval_InitThreads() call for Python 3.7 and later as Python calls
            it automatically now. This removes a deprecation warning when using Python 3.9.

2020-08-15: wsfulton
            [Python] All Python examples and tests are written to be Python 2 and Python 3
            compatible, removing the need for 2to3 to run the examples or test-suite.

2020-08-13: wsfulton
            [C#] Add support for void *VOID_INT_PTR for member variables.

2020-07-29: chrisburr
            #1843 [Python] Compilation error fix in SwigPyBuiltin_SetMetaType when using PyPy.

2020-06-14: ZackerySpytz
            #1642 #1809 Fix virtual comparison operators in director classes - remove incorrect
            space in the function name, for example, operator= = is now operator==.
