* GNU Libtool could not be what it is today without the invaluable help of
  the people named in this file.


* The following people have made sufficiently significant code contributions
  to Libtool that an exchange of legal papers with the FSF was warranted:

  Gord Matzigkeit		gord@gnu.org			  1996-07-11
  Kean Johnston			jkj@sco.com			  1997-08-26
  Gary V. Vaughan		gary@gnu.org			  1998-11-24
  Alexandre Oliva		oliva@dcc.unicamp.br		  1999-03-26
  Thomas Tanner			tanner@ffii.org			  1999-06-23
  Pavel Roskin			pavel_roskin@geocities.com	  1999-07-20
  Ossama Othman			ossama@debian.org		  1999-12-06
  Lars J. Aas			lars@sim.no			  2000-07-07
  Morten Eriksen		morten@sim.no			  2000-07-07
  Robert Boehne			rboehne@gnu.org			  2000-09-25
  Stepan Kasal			kasal@ucw.cz			  2000-04-12
  Paul Sokolovsky		Paul.Sokolovsky@technologist.com  2000-05-06
  Daniel P. McNichol		mcnichol@austin.ibm.com		  2000-12-08
  Bruce Korb			bkorb@gnu.org			  2000-10-11
  Tim Van Holder		tim.van.holder@pandora.be	  2001-02-20
  Derek R. Price		dprice@collab.net		  2001-03-12
  Edward M. Lee			tailbert@yahoo.com		  2001-03-22
  Erik Lindahl			erik@theophys.kth.se		  2001-08-22
  Carsten Griwodz		griff@ifi.uio.no		  2001-08-29
  Hans-Peter Nilsson		hp@bitrange.com			  2001-10-24
  Akim Demaille			akim@freefriends.org		  2001-11-01
  Francis James Franklin	fjf@alinameridon.com		  2001-11-15
  Robert Collins		rbtcollins@hotmail.com		  2001-12-27
  Michael Elizabeth Chastain	mec@shout.net			  2001-12-27
  Nishio Futoshi		fut_nis@d3.dion.ne.jp		  2002-01-23
  Trevor Forbes			trevorf@idl.com.au		  2002-04-26
  Charles S. Wilson		cwilson@ece.gatech.edu		  2002-05-23
  Federico G. Schwindt		fgsch@openbsd.org		  2002-05-21
  Greg McGary			greg@mcgary.org			  2002-06-05
  Robert J. Friesenhahn		bfriesen@simple.dallas.tx.us	  2002-06-27
  Assar Westerlund		assar@kth.se			  2002-09-13
  Allan Sandfeld Jensen		snowwolf@one2one-networks.com	  2002-10-07
  Ross Douglas Alexander	ross.alexander@uk.neceur.com	  2002-10-29
  Alexandre Duret-Lutz		duret_g@lrde.epita.fr		  2002-11-06
  Christian Cornelssen		ccorn@cs.tu-berlin.de		  2002-11-05
  Jan Kratochvil		project-libtool@jankratochvil.net 2003-01-28
  Raja R. Harinath		harinath@acm.org		  2003-02-25
  Richard Nicholas Somer Dawe	rich@phekda.freeserve.co.uk	  2003-03-12
  Peter O'Gorman		peter@pogma.com			  2003-03-14
  Ralph Schleicher		rs@nunatak.allgaeu.org		  2003-03-13
  Keith Packard			keithp@keithp.com		  2003-03-12
  Felix Lee			felix.1@canids.net		  2003-03-31
  Bernardo Innocenti		bernie@develer.com		  2003-07-31
  Albert Chin-A-Young		china@thewrittenword.com	  2003-08-02
  Scott Remnant			scott@netsplit.com		  2003-10-04
  Robert Millan Hernandez	robertmh@gnu.org		  2003-10-16
  Kevin Fleming			kpfleming@backtobasicsmgmt.com	  2003-11-17
  Benjamin Reed			ranger@befunk.com		  2004-02-08
  Ralf Wildenhues		Ralf.Wildenhues@gmx.de		  2004-02-12
  Nick Hudson			skrll@netbsd.org		  2004-03-29
  Paolo Bonzini			bonzini@gnu.org			  2003-03-01
  Noah Jeffrey Misch		noah@cs.caltech.edu		  2004-07-05
  Thorsten Glaser		tg@66h.42h.de			  2004-10-11
  Peter Rosin			peda@lysator.liu.se		  2005-04-12
  Tim Rice			tim@multitalents.net		  2005-11-10
  Eric Blake			ebb9@byu.net			  2006-01-18


* The following additional people made especially gracious contributions of
  their time and energy in helping to track down bugs, port to new systems,
  and generally assist in the libtool maintainership process:

  Alan Hourihane		alanh@fairlite.co.uk
  Alexei Sheplyakov		varg@theor.jinr.ru
  Alon Bar-Lev			alon.barlev@gmail.com
  Andreas Schwab		schwab@suse.de
  Andrey Slepuhin		pooh@msu.ru
  Aneesh Kumar K.V		kvaneesh@hotmail.com
  Brad Smith			brad@comstyle.com
  Brent Leback			brent.leback@st.com
  Brian Barrett			brbarret@osl.iu.edu
  Bruno Haible			haible@ilog.fr
  Camilo La Rota		camilo.larota@ens-lyon.fr
  Carl D. Roth			roth@cse.ucsc.edu
  Chris Demetriou		cgd@google.com
  Chris P. Ross			cross@eng.us.uu.net
  Christian Biesinger		cbiesinger@web.de
  Christian Rössel		christian.roessel@gmx.de
  Christoph Egger		Christoph_Egger@gmx.de
  Christopher Hulbert		cchgroupmail@gmail.com
  Craig Tierney			Craig.Tierney@noaa.gov
  Dalibor Topic			robilad@kaffe.org
  Daniel Reed			n@ml.org
  Daniel Richard G.		skunk@iSKUNK.ORG
  Dave Korn			dave.korn.cygwin@googlemail.com
  DJ Delorie			dj@delorie.com
  Donn Washburn			n5xwb@comcast.net
  Edouard G. Parmelan		Edouard.Parmelan@France.NCR.COM
  Erez Zadok			ezk@shekel.mcl.cs.columbia.edu
  Eric Estievenart		eric@via.ecp.fr
  Ethan Mallove			ethan.mallove@sun.com
  Frank Ch. Eigler		fche@cygnus.com
  Fred Cox			sailorfred@yahoo.com
  H.J. Lu			hjl@gnu.org
  Henning Nielsen Lund		hnl_dk@amigaos.dk
  Howard Chu			hyc@highlandsun.com
  Ian Lance Taylor		ian@cygnus.com
  Ingo Weinhold			ingo_weinhold@gmx.de
  Jakub Bogusz			qboosh@pld-linux.org
  Jacob Meuser			jakemsr@jakemsr.com
  James Su			james.su@gmail.com
  Jay Krell			jay.krell@cornell.edu
  Jeff Squyres			jsquyres@lam-mpi.org
  Jeremy C. Reed		reed@reedmedia.net
  Jim Meyering			jim@meyering.net
  Joakim Tjernlund		joakim.tjernlund@transmode.se
  Joel N. Weber II		devnull@gnu.org
  Joerg Sonnenberger		joerg@netbsd.org
  John Bowler			jbowler@acm.org
  John R. Cary			cary@txcorp.com
  John Wolfe			jlw@sco.com
  Josh Hursey			jjhursey@open-mpi.org
  Joseph Beckenbach III		jrb3@best.com
  Lennart Poettering		lennart@poettering.net
  Karl Berry			karl@freefriends.org
  Kenneth Albanowski		kjahds@kjahds.com
  Kevin Ryde			user42@zip.com.au
  Kurt D. Zeilenga		Kurt@OpenLDAP.Org
  Maciej Helminiak		dion2@wp.pl
  Maciej W. Rozycki		macro@linux-mips.org
  Mahesh Narayanamurthi		mahesh.mach@gmail.com
  Manfred Weichel		Manfred.Weichel@pdb.siemens.de
  Marc Espie			espie@nerim.net
  Marc J. Fraioli		fraioli@dg-rtp.dg.com
  Marcel Loose			loose@astron.nl
  Mark Kettenis			kettenis@phys.uva.nl
  Matthijs Kooijman		matthijs@stdin.nl
  Micheal E. Faenza		mfaenza@mitre.org
  Michael Haubenwallner		michael.haubenwallner@salomon.at
  Mike Gorchak			mike@malva.ua
  Mike Frysinger		vapier@gentoo.org
  Nix				nix@esperi.org.uk
  Olaf Lenz			olenz@fias.uni-frankfurt.de
  Olly Betts			olly@muscat.co.uk
  Patrice Fromy			patrice.fromy@u-psud.fr
  Patrick Welche		prlw1@newn.cam.ac.uk
  Paul Biggar			paul.biggar@gmail.com
  Paul Eggert			eggert@twinsun.com
  Peter Eisentraut		peter_e@gmx.net
  Peter Fritzsche		peter.fritzsche@gmx.de
  Peter Jeremy			peterjeremy@optushome.com.au
  Peter Kjellerstedt		peter.kjellerstedt@axis.com
  Philip Allison		philip.allison@smoothwall.net
  Rainer Emrich			r.emrich@de.tecosim.com
  Rainer Orth			ro@TechFak.Uni-Bielefeld.DE
  Rainer Tammer			tammer@tammer.net
  Ralf Menzel			menzel@ls6.cs.uni-dortmund.de
  Richard B. Kreckel		kreckel@ginac.de
  Richard Purdie		rpurdie@rpsys.net
  Richard Sandiford		richards@transitive.com
  Robert Garron			Robert.Garron@Access3000.net
  Robert Millan			rmh@aybabtu.com
  Robert Ögren			lists@roboros.com
  Roberto Bagnara		bagnara@cs.unipr.it
  Roland Mainz			roland.mainz@nrubsig.org
  Roumen Petrov			bugtrack@roumenpetrov.info
  Rudolf Leitgeb		r.leitgeb@x-pin.com
  Ryan Hill			dirtyepic@gentoo.org
  Sam Thursfield		ssssam@gmail.com
  Scott McCreary		scottmc2@gmail.com
  Sebastian Wilhelmi		wilhelmi@ira.uka.de
  Simon Josefsson		jas@extundo.com
  Stephan Kulow			coolo@kde.org
  Steve Ellcey			sje@cup.hp.com
  Steven M. Schultz		sms@wlv.iipo.gtegsc.com
  Sven Verdoolaege		skimo@liacs.nl
  Terry D. Dontje		Terry.Dontje@Sun.COM
  Tim Mooney			mooney@dogbert.cc.ndsu.NoDak.edu
  Todd Vierling			tv@pobox.com
  Tom Tromey			tromey@cygnus.com
  Tor Lillqvist			tml@iki.fi
  Ulrich Drepper		drepper@ipd.info.uni-karlsruhe.de
  Warren Dodge			warren.l.dodge@Tektronix.com
  Vadim Zeitlin			vz-libtool@zeitlins.org
  Vincent Lefevre		vincent@vinc17.org
  Vincent Torri			vtorri@univ-evry.fr
  Xavier Pianet			xavier@xingo.com
  Юрий Андреевич Пухальский	pooh@cryptopro.ru


* And, not forgetting everyone that was kind enough to spend time testing
  libtool, use it in their packages and report bugs, all of whom are too
  numerous to mention here.  Many people who have kindly submitted bug reports
  and small patches are credited for their contributions in the ChangeLogs.

-- 
  Copyright (C) 1996, 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006,
                2007, 2008 Free Software Foundation, Inc.
  Written by Gord Matzigkeit, 1996

  This file is part of GNU Libtool.

GNU Libtool is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.

GNU Libtool is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Libtool; see the file COPYING.  If not, a copy
can be downloaded from  http://www.gnu.org/licenses/gpl.html,
or obtained by writing to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

