SWIG Copyright and Authors
--------------------------

Copyright (c) 1995-2011 The SWIG Developers
Copyright (c) 2005-2006 Arizona Board of Regents (University of Arizona).
Copyright (c) 1998-2005 University of Chicago.
Copyright (c) 1995-1998 The University of Utah and the Regents of the University of California

Portions also copyrighted by:
 Network Applied Communication Laboratory, Inc
 Information-technology Promotion Agency, Japan

Active SWIG Developers:
 William Fulton (wsf@fultondesigns.co.uk)                 (SWIG core, Java, C#, Windows, Cygwin)
 Olly Betts (olly@survex.com)                             (PHP)
 Joseph Wang (joequant@gmail.com)                         (R)
 Xavier Delacour (xavier.delacour@gmail.com)              (Octave)
 David Nadlinger (code@klickverbot.at)                    (D)
 Oliver Buchtala (oliver.buchtala@gmail.com)              (Javascript)
 Neha Narang (narangneha03@gmail.com)                     (Javascript)
 Simon Marchetto (simon.marchetto@scilab-enterprises.com) (Scilab)
 Zackery Spytz (zspytz@gmail.com)                         (OCaml, SWIG core)

Past SWIG developers and major contributors include:
 Dave Beazley (dave-swig@dabeaz.com)                      (SWIG core, Python, Tcl, Perl)
 Henning Thielemann (swig@henning-thielemann.de)          (Modula3)
 Matthias Köppe (mkoeppe@mail.math.uni-magdeburg.de)      (Guile, MzScheme)
 Luigi Ballabio (luigi.ballabio@fastwebnet.it)            (STL wrapping)
 Mikel Bancroft (mikel@franz.com)                         (Allegro CL)
 Surendra Singhi (efuzzyone@netscape.net)                 (CLISP, CFFI)
 Marcelo Matus (mmatus@acms.arizona.edu)                  (SWIG core, Python, UTL[python,perl,tcl,ruby])
 Art Yerkes (ayerkes@speakeasy.net)                       (OCaml)
 Lyle Johnson (lyle@users.sourceforge.net)                (Ruby)
 Charlie Savage (cfis@interserv.com)                      (Ruby)
 Thien-Thi Nguyen (ttn@glug.org)                          (build/test/misc)
 Richard Palmer (richard@magicality.org)                  (PHP)
 Sam Liddicott - Ananova Ltd (saml@liddicott.com)         (PHP)
 Tim Hockin - Sun Microsystems (thockin@sun.com)          (PHP)
 Kevin Ruland                                             (PHP)
 Shibukawa Yoshiki                                        (Japanese Translation)
 Jason Stewart (jason@openinformatics.com)                (Perl5)
 Loic Dachary                                             (Perl5)
 David Fletcher                                           (Perl5)
 Gary Holt                                                (Perl5)
 Masaki Fukushima                                         (Ruby)
 Scott Michel (scottm@cs.ucla.edu)                        (Java directors)
 Tiger Feng (songyanf@cs.uchicago.edu)                    (SWIG core)
 Mark Rose (mrose@stm.lbl.gov)                            (Directors)
 Jonah Beckford (beckford@usermail.com)                   (CHICKEN)
 Ahmon Dancy (dancy@franz.com)                            (Allegro CL)
 Dirk Gerrits                                             (Allegro CL)
 Neil Cawse                                               (C#)
 Harco de Hilster                                         (Java)
 Alexey Dyachenko (dyachenko@fromru.com)                  (Tcl)
 Bob Techentin                                            (Tcl)
 Martin Froehlich <MartinFroehlich@ACM.org>               (Guile)
 Marcio Luis Teixeira <marciot@holly.colostate.edu>       (Guile)
 Duncan Temple Lang                                       (R)
 Miklos Vajna <vmiklos@frugalware.org>                    (PHP directors)
 Mark Gossage (mark@gossage.cjb.net)                      (Lua)
 Raman Gopalan (ramangopalan@gmail.com)                   (eLua)
 Gonzalo Garramuno (ggarra@advancedsl.com.ar)             (Ruby, Ruby's UTL)
 John Lenz                                                (Guile, MzScheme updates, Chicken module, runtime system)
 Baozeng Ding  <sploving1@163.com>                        (Scilab)
 Ian Lance Taylor                                         (Go)
 Dmitry Kabak (userdima@gmail.com)                        (Doxygen)
 Vadim Zeitlin                                            (PCRE, Python, Doxygen)
 Stefan Zager (szager@gmail.com)                          (Python)
 Vincent Couvert                                          (Scilab)
 Sylvestre Ledru                                          (Scilab)
 Wolfgang Frisch                                          (Scilab)

Past contributors include:
 James Michael DuPont, Clark McGrew, Dustin Mitchell, Ian Cooke, Catalin Dumitrescu, Baran
 Kovuk, Oleg Tolmatcev, Tal Shalif, Lluis Padro, Chris Seatory, Igor Bely, Robin Dunn,
 Edward Zimmermann, David Ascher, Dominique Dumont, Pier Giorgio Esposito, Hasan Baran Kovuk,
 Klaus Wiederänders, Richard Beare, Hans Oesterholt.
 (See CHANGES and CHANGES.current and the bug tracker for a more complete list).

Past students:
 Songyan Feng (Chicago).
 Xinghua Shi (Chicago).
 Jing Cao (Chicago).
 Aquinas Hobor (Chicago).

Historically, the following people contributed to early versions of SWIG.
Peter Lomdahl, Brad Holian, Shujia Zhou, Niels Jensen, and Tim Germann
at Los Alamos National Laboratory were the first users. Patrick
Tullmann at the University of Utah suggested the idea of automatic
documentation generation. John Schmidt and Kurtis Bleeker at the
University of Utah tested out the early versions.  Chris Johnson
supported SWIG's developed at the University of Utah. John Buckman,
Larry Virden, and Tom Schwaller provided valuable input on the first
releases and improving the portability of SWIG. David Fletcher and
Gary Holt have provided a great deal of input on improving SWIG's
Perl5 implementation. Kevin Butler contributed the first Windows NT
port.

Early bug reports and patches:
Adam Hupp, Arthur Smyles, Brad Clements, Brett Williams, Buck Hodges,
Burkhard Kloss, Chia-Liang Kao, Craig Files, Dennis Marsa, Dieter Baron,
Drake Diedrich, Fleur Diana Dragan, Gary Pennington, Geoffrey Hort, Gerald Williams,
Greg Anderson, Greg Kochanski, Greg Troxel, Henry Rowley, Irina Kotlova,
Israel Taller, James Bailey, Jim Fulton, Joel Reed, Jon Travis,
Junio Hamano, Justin Heyes-Jones, Karl Forner, Keith Davidson,
Krzysztof Kozminski, Larry Virden, Luke J Crook, Magnus Ljung, Marc Zonzon,
Mark Howson, Micahel Scharf, Michel Sanner, Mike Romberg, Mike Simons,
Mike Weiblen, Paul Brannan, Ram Bhamidipaty, Reinhard Fobbe, Rich Wales,
Richard Salz, Roy Lecates, Rudy Albachten, Scott Drummonds
Scott Michel, Shaun Lowry, Steve Galser, Tarn Weisner Burton,
Thomas Weidner, Tony Seward, Uwe Steinmann, Vadim Chugunov, Wyss Clemens,
Zhong Ren.

