This file contains a brief overview of the changes made in each release.
A detailed description of changes are available in the CHANGES.current
and CHANGES files.

Release Notes
=============
Detailed release notes are available with the release and are also
published on the SWIG web site at https://swig.org/release.html.

SWIG-4.2.0 summary:
- PHP7 support removed, PHP8 is now the supported PHP version.
- D1/Tango support removed.  D2/Phobos is now the supported D version
  and SWIG now generates code which works with recent D2 releases.

SWIG-4.1.1 summary:
- Couple of stability fixes.
- Stability fix in ccache-swig when calculating hashes of inputs.
- Some template handling improvements.
- R - minor fixes plus deprecation for rtypecheck typemaps being optional.

SWIG-4.1.0 summary:
- Add Javascript Node v12-v18 support, remove support prior to v6.
- Octave 6.0 to 6.4 support added.
- Add PHP 8 support.
- PHP wrapping is now done entirely via PHP's C API - no more .php wrapper.
- Perl 5.8.0 is now the oldest version SWIG supports.
- Python 3.3 is now the oldest Python 3 version SWIG supports.
- Python 3.9-3.11 support added.
- Various memory leak fixes in Python generated code.
- Scilab 5.5-6.1 support improved.
- Many improvements for each and every target language.
- Various preprocessor expression handling improvements.
- Improved C99, C++11, C++14, C++17 support. Start adding C++20 standard.
- Make SWIG much more move semantics friendly.
- Add C++ std::unique_ptr support.
- Few minor C++ template handling improvements.
- Various C++ using declaration fixes.
- Few fixes for handling Doxygen comments.
- GitHub Actions is now used instead of Travis CI for continuous integration.
- Add building SWIG using CMake as a secondary build system.
- Update optional SWIG build dependency for regex support from PCRE to PCRE2.

SWIG-4.0.2 summary:
- A few fixes around doxygen comment handling.
- Ruby 2.7 support added.
- Various minor improvements to C#, D, Java, OCaml, Octave, Python,
  R, Ruby.
- Considerable performance improvement running SWIG on large
  interface files.

SWIG-4.0.1 summary:
- SWIG now cleans up on error by removing all generated files.
- Add Python 3.8 support.
- Python Sphinx compatibility added for Doxygen comments.
- Some minor regressions introduced in 4.0.0 were fixed.
- Fix some C++17 compatibility problems in Python and Ruby generated
  code.
- Minor improvements/fixes for C#, Java, Javascript, Lua, MzScheme,
  Ocaml, Octave and Python.

SWIG-4.0.0 summary:
- Support for Doxygen documentation comments which are parsed and
  converted into JavaDoc or PyDoc comments.
- STL wrappers improved for C#, Java and Ruby.
- C++11 STL containers added for Java, Python and Ruby.
- Improved support for parsing C++11 and C++14 code.
- Various fixes for shared_ptr.
- Various C preprocessor corner case fixes.
- Corner case fixes for member function pointers.
- Python module overhaul by simplifying the generated code and turning
  most optimizations on by default.
- %template improvements wrt scoping to align with C++ explicit
  template instantiations.
- Added support for a command-line options file (sometimes called a
  response file).
- Numerous enhancements and fixes for all supported target languages.
- SWIG now classifies the status of target languages into either
  'Experimental' or 'Supported' to indicate the expected maturity
  level.
- Support for CFFI, Allegrocl, Chicken, CLISP, S-EXP, UFFI, Pike,
  Modula3 has been removed.
- Octave 4.4-5.1 support added.
- PHP5 support removed, PHP7 is now the supported PHP version.
- Minimum Python version required is now 2.7, 3.2-3.7 are the only
  other versions supported.
- Added support for Javascript NodeJS versions 2-10.
- OCaml support is much improved and updated, minimum OCaml version
  required is now 3.12.0.

SWIG-3.0.12 summary:
- Add support for Octave-4.2.
- Enhance %extend to support template functions.
- Language specific enhancements and fixes for C#, D, Guile, Java, PHP7.

SWIG-3.0.11 summary:
- PHP 7 support added.
- C++11 alias templates and type aliasing support added.
- Minor fixes and enhancements for C# Go Guile Java Javascript Octave
  PHP Python R Ruby Scilab XML.

SWIG-3.0.10 summary:
- Regression fixes for smart pointers and importing Python modules.

SWIG-3.0.9 summary:
- Add support for Python's implicit namespace packages.
- Fixes to support Go 1.6.
- C++11 std::array support added for Java.
- Improved C++ multiple inheritance support for Java/C# wrappers.
- Various other minor fixes and improvements for C#, D, Go, Java,
  Javascript, Lua, Python, R, Ruby, Scilab.

SWIG-3.0.8 summary:
- pdf documentation enhancements.
- Various Python 3.5 issues fixed.
- std::array support added for Ruby and Python.
- shared_ptr support added for Ruby.
- Minor improvements for CFFI, Go, Java, Perl, Python, Ruby.

SWIG-3.0.7 summary:
- Add support for Octave-4.0.0.
- Remove potential Android security exploit in generated Java classes.
- Minor new features and bug fixes.

SWIG-3.0.6 summary:
- Stability and regression fixes.
- Fixed parsing of C++ corner cases.
- Language improvements and bug fixes for C#, Go, Java, Lua, Python, R.

SWIG-3.0.5 summary:
- Added support for Scilab.
- Important Python regression fix when wrapping C++ default arguments.
- Minor improvements for C#, Go, Octave, PHP and Python.

SWIG-3.0.4 summary:
- Python regression fix when wrapping C++ default arguments.
- Improved error messages.

SWIG-3.0.3 summary:
- Add support for C++11 strongly typed enumerations.
- Numerous bug fixes and minor enhancements for C#, D, Go, Java,
  Javascript, PHP, Perl and Python wrappers.

SWIG-3.0.2 summary:
- Bug fix during install and a couple of other minor changes.

SWIG-3.0.1 summary:
- Javascript module added. This supports JavascriptCore (Safari/Webkit),
  v8 (Chromium) and node.js currently.
- A few notable regressions introduced in 3.0.0 have been fixed - in 
  Lua, nested classes and parsing of operator <<.
- The usual round of bug fixes and minor improvements for:
  C#, GCJ, Go, Java, Lua, PHP and Python.

SWIG-3.0.0 summary:
- This is a major new release focusing primarily on C++ improvements.
- C++11 support added. Please see documentation for details of supported
  features: https://www.swig.org/Doc3.0/CPlusPlus11.html
- Nested class support added. This has been taken full advantage of in
  Java and C#. Other languages can use the nested classes, but require
  further work for a more natural integration into the target language.
  We urge folk knowledgeable in the other target languages to step
  forward and help with this effort.
- Lua: improved metatables and support for %nspace.
- Go 1.3 support added.
- Python import improvements including relative imports.
- Python 3.3 support completed.
- Perl director support added.
- C# .NET 2 support is now the minimum. Generated using statements are
  replaced by fully qualified names.
- Bug fixes and improvements to the following languages:
  C#, Go, Guile, Java, Lua, Perl, PHP, Python, Octave, R, Ruby, Tcl
- Various other bug fixes and improvements affecting all languages.
- Note that this release contains some backwards incompatible changes
  in some languages.
- Full detailed release notes are in the changes file.

SWIG-2.0.12 summary:
- This is a maintenance release backporting some fixes from the pending
  3.0.0 release.
- Octave 3.8 support added.
- C++11 support for new versions of erase/insert in the STL containers.
- Compilation fixes on some systems for the generated Lua, PHP, Python
  and R wrappers.

SWIG-2.0.11 summary:
- Minor bug fixes and enhancements mostly in Python, but also
  C#, Lua, Ocaml, Octave, Perl, PHP, Python, R, Ruby, Tcl.

SWIG-2.0.10 summary:
- Ruby 1.9 support is now complete.
- Add support for Guile 2.0 and Guile 1.6 support (GH interface) has
  been dropped.
- Various small language neutral improvements and fixes.
- Various bug fixes and minor improvements specific to C#, CFFI, D,
  Java, Octave, PHP, Python,
- Minor bug fix in ccache-swig.
- Development has moved to Github with Travis continuous integration
  testing - patches using https://github.com/swig/swig are welcome.

SWIG-2.0.9 summary:
- Improved typemap matching.
- Ruby 1.9 support is much improved.
- Various bug fixes and minor improvements in C#, CFFI, Go, Java,
  Modula3, Octave, Perl, Python, R, Ruby, Tcl and in ccache-swig.

SWIG-2.0.8 summary:
- Fix a couple of regressions introduced in 2.0.5 and 2.0.7.
- Improved using declarations and using directives support.
- Minor fixes/enhancements for C#, Java, Octave, Perl and Python.

SWIG-2.0.7 summary:
- Important regression fixes since 2.0.5 for typemaps in general and
  in Python.
- Fixes and enhancements for Go, Java, Octave and PHP.

SWIG-2.0.6 summary:
- Regression fix for Python STL wrappers on some systems.

SWIG-2.0.5 summary:
- Official Android support added including documentation and examples.
- Improvements involving templates:
  1) Various fixes with templates and typedef types.
  2) Some template lookup problems fixed.
  3) Templated type fixes to use correct typemaps.
- Autodoc documentation generation improvements.
- Python STL container wrappers improvements including addition of
  stepped slicing.
- Approximately 70 fixes and minor enhancements for the following
  target languages: AllegroCL, C#, D, Go, Java, Lua, Ocaml, Octave,
  Perl, PHP, Python, R, Ruby, Tcl, Xml.

SWIG-2.0.4 summary:
- This is mainly a Python oriented release including support for Python
  built-in types for superior performance with the new -builtin option.
  The -builtin option is especially suitable for performance-critical
  libraries and applications that call wrapped methods repeatedly.
  See the python-specific chapter of the SWIG manual for more info.
- Python 3.2 support has also been added and various Python bugs have
  been fixed.
- Octave 3.4 support has also been added.
- There are also the usual minor generic improvements, as well as bug
  fixes and enhancements for D, Guile, Lua, Octave, Perl and Tcl. 

SWIG-2.0.3 summary:
- A bug fix release including a couple of fixes for regressions in the
  2.0 series.

SWIG-2.0.2 summary:
- Support for the D language has been added.
- Various bug fixes and minor enhancements.
- Bug fixes particular to the Clisp, C#, Go, MzScheme, Ocaml, PHP, R,
  Ruby target languages.

SWIG-2.0.1 summary:
- Support for the Go language has been added.
- New regular expression (regex) encoder for renaming symbols based on
  the Perl Compatible Regular Expressions (PCRE) library.
- Numerous fixes in reporting file and line numbers in error and warning
  messages.
- Various bug fixes and improvements in the C#, Lua, Perl, PHP, Ruby
  and Python language modules.

SWIG-2.0.0 summary:
- License changes, see LICENSE file and https://www.swig.org/legal.html.
- Much better nested class/struct support.
- Much improved template partial specialization and explicit
  specialization handling.
- Namespace support improved with the 'nspace' feature where namespaces
  can be automatically translated into Java packages or C# namespaces.
- Improved typemap and symbol table debugging.
- Numerous subtle typemap matching rule changes when using the default
  (SWIGTYPE) type. These now work much like C++ class template partial
  specialization matching.
- Other small enhancements for typemaps. Typemap fragments are also now
  official and documented.
- Warning and error display refinements.
- Wrapping of shared_ptr is improved and documented now.
- Numerous C++ unary scope operator (::) fixes.
- Better support for boolean expressions.
- Various bug fixes and improvements in the Allegrocl, C#, Java, Lua,
  Octave, PHP, Python, R, Ruby and XML modules.

SWIG-1.3.40 summary:
- SWIG now supports directors for PHP.
- PHP support improved in general.
- Octave 3.2 support added.
- Various bug fixes/enhancements for Allegrocl, C#, Java, Octave, Perl,
  Python, Ruby and Tcl.
- Other generic fixes and minor new features.

SWIG-1.3.39 summary:
- Some new small feature enhancements.
- Improved C# std::vector wrappers.
- Bug fixes: mainly Python, but also Perl, MzScheme, CFFI, Allegrocl 
  and Ruby

SWIG-1.3.38 summary:
- Output directory regression fix and other minor bug fixes

SWIG-1.3.37 summary:
- Python 3 support added
- SWIG now ships with a version of ccache that can be used with SWIG.
  This enables the files generated by SWIG to be cached so that repeated
  use of SWIG on unchanged input files speeds up builds quite considerably.
- PHP 4 support removed and PHP support improved in general
- Improved C# array support
- Numerous Allegro CL improvements
- Bug fixes/enhancements for Python, PHP, Java, C#, Chicken, Allegro CL,
  CFFI, Ruby, Tcl, Perl, R, Lua.
- Other minor generic bug fixes and enhancements

SWIG-1.3.36 summary:
- Enhancement to directors to wrap all protected members
- Optimisation feature for objects returned by value
- A few bugs fixes in the PHP, Java, Ruby, R, C#, Python, Lua and 
  Perl modules
- Other minor generic bug fixes

SWIG-1.3.35 summary:
- Octave language module added
- Bug fixes in Python, Lua, Java, C#, Perl modules
- A few other generic bugs and runtime assertions fixed

SWIG-1.3.34 summary:
- shared_ptr support for Python
- Support for latest R - version 2.6
- Various minor improvements/bug fixes for R, Lua, Python, Java, C#
- A few other generic bug fixes, mainly for templates and using statements

SWIG-1.3.33 summary:
- Fix regression for Perl where C++ wrappers would not compile
- Fix regression parsing macros

SWIG-1.3.32 summary:
- shared_ptr support for Java and C#
- Enhanced STL support for Ruby
- Windows support for R
- Fixed long-standing memory leak in PHP Module
- Numerous fixes and minor enhancements for Allegrocl, C#, cffi, Chicken, Guile,
  Java, Lua, Ocaml, Perl, PHP, Python, Ruby, Tcl.
- Improved warning support

SWIG-1.3.31 summary:
- Python modern classes regression fix

SWIG-1.3.30 summary:
- Python-2.5 support
- New language module: R
- Director support added for C#
- Numerous director fixes and improvements
- Improved mingw/msys support
- Better constants support in Guile and chicken modules
- Support for generating PHP5 class wrappers
- Important Java premature garbage collection fix
- Minor improvements/fixes in cffi, php, allegrocl, perl, chicken, lua, ruby,
  ocaml, python, java, c# and guile language modules
- Many many other bug fixes

SWIG-1.3.29 summary:
- Numerous important bug fixes
- Few minor new features
- Some performance improvements in generated code for Python

SWIG-1.3.28 summary:
- More powerful renaming (%rename) capability.
- More user friendly warning handling.
- Add finer control for default constructors and destructors. We discourage
  the use of the 'nodefault' option, which disables both constructors and
  destructors, leading to possible memory leaks. Use instead 'nodefaultctor'
  and/or 'nodefaultdtor'.
- Automatic copy constructor wrapper generation via the 'copyctor' option/feature.
- Better handling of Windows extensions and types.
- Better runtime error reporting.
- Add the %catches directive to catch and dispatch exceptions.
- Add the %naturalvar directive for more 'natural' variable wrapping.
- Better default handling of std::string variables using the %naturalvar directive.
- Add the %allowexcept and %exceptionvar directives to handle exceptions when
  accessing a variable.
- Add the %delobject directive to mark methods that act like destructors.
- Add the -fastdispatch option to enable smaller and faster overload dispatch
  mechanism.
- Template support for %rename, %feature and %typemap improved.
- Add/doc more debug options, such as -dump_module, -debug_typemaps, etc.
- Unified typemap library (UTL) potentially providing core typemaps for all
  scripting languages based on the recently evolving Python typemaps.
- New language module: Common Lisp with CFFI.
- Python, Ruby, Perl and Tcl use the new UTL, many old reported and hidden 
  errors with typemaps are now fixed.
- Initial Java support for languages using the UTL via GCJ, you can now use 
  Java libraries in your favorite script language using gcj + swig.
- Tcl support for std::wstring.
- PHP4 module update, many error fixes and actively maintained again.
- Allegrocl support for C++, also enhanced C support.
- Ruby support for bang methods.
- Ruby support for user classes as native exceptions.
- Perl improved dispatching in overloaded functions via the new cast and rank
  mechanism.
- Perl improved backward compatibility, 5.004 and later tested and working.
- Python improved backward compatibility, 1.5.2 and later tested and working.
- Python can use the same cast/rank mechanism via the -castmode option.
- Python implicit conversion mechanism similar to C++, via the %implicitconv
  directive (replaces and improves the implicit.i library). 
- Python threading support added.
- Python STL support improved, iterators are supported and STL containers can
  use now the native PyObject type.
- Python many performance options and improvements, try the -O option to test
  all of them. Python runtime benchmarks show up to 20 times better performance
  compared to 1.3.27 and older versions.
- Python support for 'multi-inheritance' on the python side.
- Python simplified proxy classes, now swig doesn't need to generate the
  additional 'ClassPtr' classes.
- Python extended support for smart pointers.
- Python better support for static member variables.
- Python backward compatibility improved, many projects that used to work
  only with  swig-1.3.21 to swig-1.3.24 are working again with swig-1.3.28
- Python test-suite is now 'valgrinded' before release, and swig also
  reports memory leaks due to missing destructors.
- Minor bug fixes and improvements to the Lua, Ruby, Java, C#, Python, Guile,
  Chicken, Tcl and Perl modules.

SWIG-1.3.27 summary:
- Fix bug in anonymous typedef structures which was leading to strange behaviour

SWIG-1.3.26 summary:
- New language modules: Lua, CLISP and Common Lisp with UFFI.
- Big overhaul to the PHP module.
- Change to the way 'extern' is handled.
- Minor bug fixes specific to  C#, Java, Modula3, Ocaml, Allegro CL,
  XML, Lisp s-expressions, Tcl, Ruby and Python modules.
- Other minor improvements and bug fixes.

SWIG-1.3.25 summary:
- Improved runtime type system.  Speed of module loading improved in
  modules with lots of types.  SWIG_RUNTIME_VERSION has been increased
  from 1 to 2, but the API is exactly the same; only internal changes
  were made.
- The languages that use the runtime type system now support external
  access to the runtime type system.
- Various improvements with typemaps and template handling.
- Fewer warnings in generated code.
- Improved colour documentation.
- Many C# module improvements (exception handling, prevention of early
  garbage collection, C# attributes support added, more flexible type
  marshalling/asymmetric types.)
- Minor improvements and bug fixes specific to the C#, Java, TCL, Guile,
  Chicken, MzScheme, Perl, Php, Python, Ruby and Ocaml modules).
- Various other bug fixes and memory leak fixes.

SWIG-1.3.24 summary:
- Improved enum handling
- More runtime library options
- More bugs fixes for templates and template default arguments, directors
  and other areas.
- Better smart pointer support, including data members, static members
  and %extend.

SWIG-1.3.23 summary:
- Improved support for callbacks
- Python docstring support and better error handling
- C++ default argument support for Java and C# added.
- Improved c++ default argument support for the scripting languages plus
  option to use original (compact) default arguments.
- %feature and %ignore/%rename bug fixes and mods - they might need default
  arguments specified to maintain compatible behaviour when using the new
  default arguments wrapping.
- Runtime library changes: Runtime code can now exist in more than one module
  and so need not be compiled into just one module
- Further improved support for templates and namespaces
- Overloaded templated function support added
- More powerful default typemaps (mixed default typemaps)
- Some important %extend and director code bug fixes
- Guile now defaults to using SCM API.  The old interface can be obtained by
  the -gh option.
- Various minor improvements and bug fixes for C#, Chicken, Guile, Java, 
  MzScheme, Perl, Python and Ruby
- Improved dependencies generation for constructing Makefiles.

SWIG-1.3.22 summary:
- Improved exception handling and translation of C errors or C++
  exceptions into target language exceptions.
- Improved enum support, mapping to built-in Java 1.5 enums and C#
  enums or the typesafe enum pattern for these two languages.
- Python - much better STL support and support for std::wstring,
  wchar_t and FILE *.
- Initial support for Modula3 and Allegro CL.
- 64 bit TCL support.
- Java and C#'s proxy classes are now nearly 100% generated from
  typemaps and/or features for finer control on the generated code.
- SWIG runtime library support deprecation.
- Improved documentation. SWIG now additionally provides documentation
  in the form of a single HTML page as well as a pdf document.
- Enhanced C++ friend declaration support.
- Better support for reference counted classes.
- Various %fragment improvements.
- RPM fixes.
- Various minor improvements and bug fixes for C#, Chicken, Guile, Java, 
  MzScheme, Perl, Php, Python, Ruby and XML.


