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)
 Swati Sharma (itawswati@gmail.com)                     (Objective C)  
 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)
 Ian Lance Taylor                                       (Go)
 Vadim Zeitlin                                          (PCRE)
 Stefan Zager (szager@gmail.com)			(Python)

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.

