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

Copyright (c) 1995-2010 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)

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)
 Gonzalo Garramuno (ggarra@advancedsl.com.ar)           (Ruby, Ruby's UTL)
 John Lenz                                              (Guile, MzScheme updates, Chicken module, runtime system)
 Ian Lance Taylor                                       (Go)
 Vadim Zeitlin                                          (PCRE)

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
 (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. 

