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.1 summary:
- Tcl 9.0 support.
- Octave 9.0 support.
- Improvements wrapping friend functions.
- Variadic templated functions within a template support.
- Type deduction enhancements.
- Stability and regression fixes.

SWIG-4.2.0 summary:
- Various template wrapping improvements: template template parameters,
  variadic templates, partially specialized templates, const template
  parameters and improved error checking instantiating templates.
- Improved decltype() support for expressions.
- C++14 auto without trailing return type and C++11 auto variables.
- Numerous C++ using declarations improvements.
- Numerous fixes for constructors, destructors and assignment operators:
  implicit, default and deleted and related non-assignable variable
  wrappers.
- STL: std::array and std::map improvements, std::string_view support
  added.
- Various C preprocessor improvements.
- Various issues fixed to do with architecture specific long type.
- Various Doxygen improvements.
- D1/Tango support removed.  D2/Phobos is now the supported D version
  and SWIG now generates code which works with recent D2 releases.
- New Javascript generator targeting Node.js binary stable ABI Node-API.
- Octave 8.1 support added.
- PHP7 support removed, PHP8 is now the supported PHP version.
- Python STL container wrappers now use the Python Iterator Protocol.
- Python stable ABI support added.
- Python 3.12 support added.
- Ruby 3.2 and 3.3 support.
- Scilab 2023.* support added.
- Various minor enhancements for C#, Go, Guile, Javascript, Lua, Ocaml,
  Perl, PHP, R, Racket, Ruby, Scilab and Tcl.
- A number of deprecated features have been removed.

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.


