* lisp/emacs-lisp/authors.el (authors-aliases): Remove more unused entries
[bpt/emacs.git] / lisp / emacs-lisp / authors.el
CommitLineData
4d6769e1 1;;; authors.el --- utility for maintaining Emacs's AUTHORS file -*-coding: utf-8 -*-
3215096c 2
ba318903 3;; Copyright (C) 2000-2014 Free Software Foundation, Inc.
3215096c 4
60e8e0a5 5;; Author: Gerd Moellmann <gerd@gnu.org>
f39caf44 6;; Maintainer: Kim F. Storm <storm@cua.dk>
60e8e0a5 7;; Keywords: maint
aad4679e 8;; Package: emacs
60e8e0a5 9
3215096c
GM
10;; This file is part of GNU Emacs.
11
d6cba7ae 12;; GNU Emacs is free software: you can redistribute it and/or modify
3215096c 13;; it under the terms of the GNU General Public License as published by
d6cba7ae
GM
14;; the Free Software Foundation, either version 3 of the License, or
15;; (at your option) any later version.
3215096c
GM
16
17;; GNU Emacs is distributed in the hope that it will be useful,
18;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;; GNU General Public License for more details.
21
22;; You should have received a copy of the GNU General Public License
d6cba7ae 23;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
3215096c
GM
24
25;;; Commentary:
26
27;; Use M-x authors RET to create an *Authors* buffer that can used as
44e97401 28;; or merged with Emacs's AUTHORS file.
3215096c
GM
29
30;;; Code:
31
25b30b16 32(defvar authors-coding-system 'utf-8
f39caf44
KS
33 "Coding system used in the AUTHORS file.")
34
3215096c
GM
35(defconst authors-many-files 20
36 "Maximum number of files for which to print individual information.
f39caf44
KS
37If an author has modified more files, only the names of the most
38frequently modified files are printed and a count of the additional
39files.")
3215096c
GM
40
41(defconst authors-aliases
f39caf44 42 '(
01cc3e13 43 ("Aaron S. Hawley" "Aaron Hawley")
31a9ef2e 44 ("Alexandru Harsanyi" "Alex Harsanyi")
9109bf49 45 ("Andrew Csillag" "Drew Csillag")
9dfa8726 46 ("Anna M. Bigatti" "Anna Bigatti")
f39caf44
KS
47 ("Barry A. Warsaw" "Barry A. Warsaw, Century Computing, Inc."
48 "Barry A. Warsaw, ITB" "Barry Warsaw")
31a9ef2e 49 ("Bill Carpenter" "WJ Carpenter")
6b5e47dd
GM
50 ("Bill Mann" "William F. Mann")
51 ("Bill Rozas" "Guillermo J. Rozas")
25b30b16 52 ("Björn Torkelsson" "Bjorn Torkelsson")
f39caf44 53 ("Brian Fox" "Brian J. Fox")
574411d0 54 ("Brian P Templeton" "BT Templeton")
31a9ef2e 55 ("Brian Sniffen" "Brian T. Sniffen")
31a9ef2e 56 ("David Abrahams" "Dave Abrahams")
6b5e47dd 57 ("David De La Harpe Golden" "David Golden")
f39caf44 58 ("David Gillespie" "Dave Gillespie")
25b30b16 59 ("David Kågedal" "David K..edal")
fc23fe2d 60 ("David M. Koppelman" "David Koppelman")
d0f483e8 61 ("David M. Smith" "David Smith" "David M Smith")
c6029348 62 ("David O'Toole" "David T. O'Toole")
01cc3e13 63 ("Deepak Goel" "D. Goel")
d0f483e8 64 ("Ed L. Cashin" "Ed L Cashin")
d13bb153 65 ("Edward M. Reingold" "Ed Reingold" "Edward M Reingold" "Reingold Edward M")
4ee02020 66 ("Emilio C. Lopes" "Emilio Lopes")
f39caf44
KS
67 ("Eric M. Ludlam" "Eric Ludlam")
68 ("Eric S. Raymond" "Eric Raymond")
d0f483e8 69 ("Francis J. Wright" "Dr Francis J. Wright" "Francis Wright")
25b30b16
GM
70 ("François Pinard" "Francois Pinard")
71 ("Francesco Potortì" "Francesco Potorti" "Francesco Potorti`")
f39caf44 72 ("Frederic Pierresteguy" "Fred Pierresteguy")
25b30b16 73 ("Gerd Möllmann" "Gerd Moellmann")
6b5e47dd 74 ("Hallvard B. Furuseth" "Hallvard B Furuseth" "Hallvard Furuseth")
25b30b16 75 ("Hrvoje Nikšić" "Hrvoje Niksic")
5e6e6794
GM
76 ;; lisp/org/ChangeLog 2010-11-11.
77 (nil "aaa bbb")
2603d79b 78 (nil "Code Extracted") ; lisp/newcomment.el's "Author:" header
f39caf44 79 ("Jaeyoun Chung" "Jae-youn Chung" "Jae-you Chung" "Chung Jae-youn")
25b30b16 80 ("Jan Djärv" "Jan D." "Jan Djarv")
fc23fe2d 81 ("Jay K. Adams" "Jay Adams")
25b30b16 82 ("Jérôme Marant" "Jérôme Marant" "Jerome Marant")
f39caf44 83 ("Jens-Ulrik Holger Petersen" "Jens-Ulrik Petersen")
605046ef 84 ("Jeremy Bertram Maitin-Shepard" "Jeremy Maitin-Shepard")
25b30b16 85 ("Johan Bockgård" "Johan Bockgard")
31a9ef2e 86 ("John J Foerch" "John Foerch")
4ee02020 87 ("John W. Eaton" "John Eaton")
f39caf44 88 ("Jonathan I. Kamens" "Jonathan Kamens")
8c106d17 89 ("Jorgen Schäfer" "Jorgen Schaefer")
f39caf44 90 ("Joseph Arceneaux" "Joe Arceneaux")
6b5e47dd 91 ("Joseph M. Kelsey" "Joe Kelsey") ; FIXME ?
25b30b16 92 ("Juan León Lahoz García" "Juan-Leon Lahoz Garcia")
f39caf44 93 ("K. Shane Hartman" "Shane Hartman")
fc23fe2d 94 ("Kai Großjohann" "Kai Grossjohann")
f39caf44 95 ("Karl Berry" "K. Berry")
25b30b16 96 ("Károly Lőrentey" "Károly Lőrentey" "Lőrentey Károly")
d13bb153 97 ("Kazushi Marukawa" "Kazushi (Jam) Marukawa")
f39caf44
KS
98 ("Ken Manheimer" "Kenneth Manheimer")
99 ("Kenichi Handa" "Ken'ichi Handa" "Kenichi HANDA")
4ee02020 100 ("Kevin Greiner" "Kevin J. Greiner")
f39caf44 101 ("Kim F. Storm" "Kim Storm")
d0f483e8 102 ("Kyle Jones" "Kyle E. Jones")
31a9ef2e 103 ("Lars Magne Ingebrigtsen" "Lars Ingebrigtsen")
f39caf44 104 ("Marcus G. Daniels" "Marcus Daniels")
d0f483e8 105 ("Mark D. Baushke" "Mark D Baushke")
6b5e47dd 106 ("Marko Kohtala" "Kohtala Marko")
342f8163 107 ("Agustín Martín" "Agustin Martin" "Agustín Martín Domingo")
d0f483e8
KS
108 ("Martin Lorentzon" "Martin Lorentzson")
109 ("Matt Swift" "Matthew Swift")
6b5e47dd 110 ("Maxime Edouard Robert Froumentin" "Max Froumentin")
4ee02020 111 ("Michael R. Mauger" "Michael Mauger")
f39caf44 112 ("Michael D. Ernst" "Michael Ernst")
25b30b16 113 ("Michaël Cadilhac" "Michael Cadilhac")
d13bb153 114 ("Michael I. Bushnell" "Michael I Bushnell" "Michael I. Bushnell, p/BSG")
6b5e47dd
GM
115 ("Michael R. Cook" "Michael Cook")
116 ("Michael Sperber" "Michael Sperber \\[Mr. Preprocessor\\]")
4ee02020 117 ("Mikio Nakajima" "Nakajima Mikio")
6b5e47dd 118 ("Nelson Jose dos Santos Ferreira" "Nelson Ferreira")
31a9ef2e 119 ("Noorul Islam" "Noorul Islam K M")
d13bb153 120 ("Paul Eggert" "Paul R\\. Eggert")
fc23fe2d 121 ("Pavel Janík" "Pavel Janík Ml." "Pavel Janik Ml." "Pavel Janik")
24e15888 122 ("Pavel Kobiakov" "Pavel Kobyakov")
f39caf44 123 ("Per Abrahamsen" "Per Abhiddenware")
24e15888 124 ("Per Starbäck" "Per Starback")
31a9ef2e 125 ("Peter J. Weisberg" "PJ Weisberg")
fc23fe2d 126 ("Peter S. Galbraith" "Peter S Galbraith" "Peter Galbraith")
d0f483e8 127 ("Peter Runestig" "Peter 'luna' Runestig")
8c106d17
GM
128 ("Piotr Zieliński" "Piotr Zielinski")
129 ("Rainer Schöpf" "Rainer Schoepf")
6b5e47dd
GM
130 ("Raja R. Harinath" "Raja R Harinath")
131 ("Richard G. Bielawski" "Richard G Bielawski" "Richard Bielawski")
132 ("Richard King" "Dick King")
d13bb153 133 ("Richard M. Stallman" "Richard Stallman" "rms@gnu.org")
f39caf44
KS
134 ("Robert J. Chassell" "Bob Chassell")
135 ("Roland B. Roberts" "Roland B Roberts" "Roland Roberts")
fc23fe2d 136 ("Rui-Tao Dong" "Rui-Tao Dong ~{6-HpLN~}")
a8d37031 137 ("Sacha Chua" "Sandra Jean Chua")
f39caf44 138 ("Sam Steingold" "Sam Shteingold")
9109bf49 139 ("Satyaki Das" "Indexed search by Satyaki Das")
31a9ef2e 140 ("Sébastien Vauban" "Sebastien Vauban")
93da04c0
GM
141 ;; There are other Stefans.
142;;; ("Stefan Monnier" "Stefan")
f39caf44 143 ("Steven L. Baur" "SL Baur" "Steven L Baur")
93da04c0 144 ("Stewart M. Clamen" "Stewart Clamen")
6b5e47dd 145 ("Stuart D. Herring" "Stuart Herring" "Davis Herring")
31a9ef2e 146 ("T.V. Raman" "T\\. V\\. Raman")
93da04c0 147 ("Taichi Kawabata" "KAWABATA,? Taichi")
f39caf44 148 ("Takaaki Ota" "Tak Ota")
4ee02020 149 ("Takahashi Naoto" "Naoto Takahashi")
d0f483e8 150 ("Teodor Zlatanov" "Ted Zlatanov")
31a9ef2e 151 ("Thomas Dye" "Tom Dye")
6b5e47dd
GM
152 ("Thomas Horsley" "Tom Horsley") ; FIXME ?
153 ("Thomas Wurgler" "Tom Wurgler")
c0ea195d 154 ("Toby Cubitt" "Toby S\\. Cubitt")
6b5e47dd 155 ("Tomohiko Morioka" "MORIOKA Tomohiko")
25b30b16
GM
156 ("Torbjörn Axelsson" "Torbjvrn Axelsson")
157 ("Torbjörn Einarsson" "Torbj.*rn Einarsson")
d13bb153 158 ("Toru Tomabechi" "Toru TOMABECHI")
6b5e47dd 159 ("Tsugutomo Enami" "enami tsugutomo")
1e266c88 160 ("Ulrich Müller" "Ulrich Mueller")
f39caf44 161 ("Vincent Del Vecchio" "Vince Del Vecchio")
9109bf49 162 ("William M. Perry" "Bill Perry")
f39caf44 163 ("Wlodzimierz Bzyl" "W.*dek Bzyl")
6b5e47dd
GM
164 ("Yoni Rabkin" "Yoni Rabkin Katzenell")
165 ("Yoshinori Koseki" "KOSEKI Yoshinori" "小関 吉則")
f39caf44 166 ("Yutaka NIIBE" "NIIBE Yutaka")
d5ab63b2 167 )
3215096c
GM
168 "Alist of author aliases.
169
f39caf44 170Each entry is of the form (REALNAME REGEXP...). If an author's name
a1506d29 171matches one of the REGEXPs, use REALNAME instead.
f39caf44 172If REALNAME is nil, ignore that author.")
3215096c 173
5e6e6794 174;; FIXME seems it would be less fragile to check for O', Mc, etc.
eef72fce 175(defconst authors-fixed-case
574411d0
GM
176 '("Brian van den Broek"
177 "Bryan O'Sullivan"
eef72fce 178 "Christian von Roques"
93da04c0 179 "Christophe de Dinechin"
eef72fce
GM
180 "Craig McDaniel"
181 "David J. MacKenzie"
182 "David McCabe"
183 "David O'Toole"
5e6e6794 184 "Devon Sean McCullough"
eef72fce
GM
185 "Dominique de Waleffe"
186 "Edward O'Connor"
187 "Exal de Jesus Garcia Carrillo"
188 "Greg McGary"
189 "Hans de Graaff"
190 "James TD Smith"
574411d0 191 "Jay McCarthy"
24e15888 192 "Joel N. Weber II"
574411d0 193 "Matt McClure"
eef72fce
GM
194 "Michael McNamara"
195 "Mike McEwan"
6b5e47dd 196 "Nelson Jose dos Santos Ferreira"
eef72fce
GM
197 "Peter von der Ahe"
198 "Peter O'Gorman"
5e6e6794 199 "Piet van Oostrum"
eef72fce 200 "Roland McGrath"
5e6e6794
GM
201 "Sean O'Halpin"
202 "Sean O'Rourke"
574411d0 203 "Thomas DeWeese"
5e6e6794 204 "Tijs van Bakel")
eef72fce 205 "List of authors whose names cannot be simply capitalized.")
3215096c 206
0a521885 207(defvar authors-public-domain-files
eef72fce 208 '("emerge\\.el"
0a521885
GM
209 "vi\\.el"
210 "feedmail\\.el"
211 "mailpost\\.el"
212 "hanoi\\.el"
213 "meese\\.el"
214 "studly\\.el"
eef72fce
GM
215 "modula2\\.el"
216 "nnmaildir\\.el"
217 "nnil\\.el"
218 "b2m\\.c"
219 "unexhp9k800\\.c"
220 "emacsclient\\.1"
221 "check-doc-strings")
0a521885
GM
222 "List of regexps matching files for which the FSF doesn't need papers.")
223
224
8a5506f2 225(defvar authors-obsolete-files-regexps
0d613483 226 '(".*loaddefs.el$" ; not obsolete, but auto-generated
fea1add4
GM
227 "\\.\\(cvs\\|git\\)ignore$" ; obsolete or uninteresting
228 "\\.arch-inventory$"
31a9ef2e 229 ;; TODO lib/? Matches other things?
0d613483 230 "build-aux/" "m4/" "Emacs.xcodeproj" "mapfiles" "\\.map\\'"
fea1add4 231 "preferences\\.\\(nib\\|gorm\\)"
0d613483
GM
232 ;; Generated files that have since been removed.
233 "\\(refcard\\(-de\\|-pl\\)?\\|calccard\\|dired-ref\\|orgcard\\|\
234gnus-booklet\\|fr-drdref\\)\\.p\\(df\\|s\\)\\'")
8a5506f2 235 "List of regexps matching obsolete files.
31a9ef2e 236Changes to files matching one of the regexps in this list are not listed.")
8a5506f2 237
4ee02020
KS
238(defconst authors-ignored-files
239 '("external-lisp"
240 "lock" "share-lib" "local-lisp"
241 "noleim-Makefile.in"
eef72fce
GM
242 "NEWS" "ORDERS" "PROBLEMS" "FAQ" "AUTHORS" "FOR-RELEASE" "TODO" "todo"
243 "MACHINES" "SERVICE"
244 "README.unicode" "README.multi-tty" "TUTORIAL.translators"
245 "NEWS.unicode" "COPYING.DJ" "Makefile.old" "Makefile.am"
246 "NEWS.1" "OOOOONEWS...OONEWS" "OOOONEWS" "etc/NEWS"
247 "NEWS.1-17" "NEWS.18" "NEWS.19" "NEWS.20" "NEWS.21" "NEWS.22"
6b5e47dd 248 "MAINTAINERS" "MH-E-NEWS"
0d613483 249 "install.sh" "install-sh" "missing" "mkinstalldirs"
eef72fce
GM
250 "termcap.dat" "termcap.src" "termcap.ucb" "termcap"
251 "ChangeLog.nextstep" "Emacs.clr" "spec.txt"
252 "gfdl.1"
253 "texi/Makefile.in"
254 "Imakefile" "icons/sink.ico" "aixcc.lex"
255 "nxml/char-name/unicode"
0d613483 256 "spec.txt"
1fc28a2c 257 "js2-mode.el" ; only installed very briefly, replaced by js.el
0d613483
GM
258 ;; In the old imported lisp/url ChangeLog, but never in Emacs.
259 "mule-sysdp.el"
260 ;; Only briefly present.
261 "tests/gnustest-nntp.el" "tests/gnustest-registry.el"
fea1add4
GM
262 "cedet/tests/testtemplates.cpp"
263 "cedet/tests/testusing.cpp"
264 "cedet/tests/scopetest.cpp"
265 "cedet/tests/scopetest.java"
266 "cedet/tests/test.cpp"
267 "cedet/tests/test.py"
268 "cedet/tests/teststruct.cpp"
269 "*.el"
6b5e47dd 270 ;; Autogen:
0d613483 271 "cus-load.el" "finder-inf.el" "ldefs-boot.el" "loaddefs-boot.el"
31a9ef2e 272 "compile" "config.guess" "config.sub" "depcomp"
8449dd1f
GM
273 "autogen/compile" "autogen/config.guess" "autogen/config.in"
274 "autogen/config.sub" "autogen/depcomp" "autogen/install-sh"
275 "autogen/missing" "autogen"
276 "autogen/copy_autogen" ; not generated, but trivial and now removed
277 "dir_top"
31a9ef2e
GM
278 ;; Only existed briefly, then renamed:
279 "images/icons/allout-widgets-dark-bg"
280 "images/icons/allout-widgets-light-bg"
eef72fce 281 ;; Never had any meaningful changes logged, now deleted:
31a9ef2e 282 "unidata/bidimirror.awk" "unidata/biditype.awk"
eef72fce 283 "split-man" "Xkeymap.txt" "ms-7bkermit" "ulimit.hack"
93da04c0 284 "gnu-hp300" "refcard.bit" "ledit.l" "forms.README" "forms-d2.dat"
eef72fce
GM
285 "CXTERM-DIC/PY.tit" "CXTERM-DIC/ZIRANMA.tit"
286 "CXTERM-DIC/CTLau.tit" "CXTERM-DIC/CTLauB.tit"
0d613483
GM
287 "copying.paper" "celibacy.1" "condom.1" "echo.msg" "sex.6"
288 "COOKIES" "INTERVIEW" "MAILINGLISTS" "MOTIVATION"
eef72fce
GM
289 "NICKLES.WORTH" "INTERVAL.IDEAS" "RCP"
290 "3B-MAXMEM" "AIX.DUMP" "SUN-SUPPORT" "XENIX"
291 "CODINGS" "CHARSETS"
8c106d17 292 "calc/INSTALL" "calc/Makefile" "calc/README.prev"
46e6650e 293 "vms-pp.trans" "_emacs" "batcomp.com" "notes/cpp" ; admin/
c11cc37a 294 "emacsver.texi.in"
3c855b96
GM
295 "vpath.sed"
296 "Cocoa/Emacs.base/Contents/Info.plist"
297 "Cocoa/Emacs.base/Contents/Resources/English.lproj/InfoPlist.strings"
298 "GNUstep/Emacs.base/Resources/Info-gnustep.plist"
299 "GNUstep/Emacs.base/Resources/Emacs.desktop"
300 "Cocoa/Emacs.base/Contents/Resources/English.lproj"
301 ;; Only existed briefly, then deleted:
302 "coccinelle/overlay.cocci" "coccinelle/symbol.cocci"
eef72fce
GM
303 ;; MH-E stuff not in Emacs:
304 "import-emacs" "release-utils"
305 ;; Erc stuff not in Emacs:
306 "ChangeLog.2001" "ChangeLog.2002" "ChangeLog.2003" "ChangeLog.2004"
307 "ChangeLog.2005"
308 "README.extras" "dir-template" "mkChangeLog" "MkChangeLog" "erc-auto.in"
309 "CREDITS" "HACKING"
310 "debian/changelog"
311 "debian/control"
312 "debian/copyright"
313 "debian/maint/conffiles"
314 "debian/maint/conffiles.in"
315 "debian/maint/postinst"
316 "debian/maint/postinst.in"
317 "debian/maint/prerm"
318 "debian/maint/prerm.in"
319 "debian/README.Debian"
320 "debian/README.erc-speak"
321 "debian/rules"
322 "debian/scripts/install"
323 "debian/scripts/install.in"
324 "debian/scripts/remove"
325 "debian/scripts/remove.in"
326 "debian/scripts/startup"
327 "debian/scripts/startup.erc"
328 "debian/scripts/startup.erc-speak"
8c106d17
GM
329 ;; Used to be in admin, not very interesting.
330 "emacs-pretesters" "make-announcement" "make-changelog-diff"
0d613483
GM
331 ;; Textual comments that are not files.
332 "All" "Version" "Everywhere" "Many" "Various" "files"
333 ;; Directories.
334 "vms" "mac" "url" "tree-widget"
eef72fce 335 )
4ee02020
KS
336 "List of files and directories to ignore.
337Changes to files in this list are not listed.")
8a5506f2 338
fea1add4
GM
339;; List via: find . -name '*.el' | sed 's/.*\///g' | sort | uniq -d
340;; FIXME It would be better to discover these dynamically.
fea1add4 341(defconst authors-ambiguous-files
0d613483
GM
342 '("Makefile.in"
343 "makefile.w32-in"
344 "chart.el"
345 "cl-lib.el"
fea1add4
GM
346 "compile.el"
347 "complete.el"
348 "cpp.el"
349 "ctxt.el"
31a9ef2e
GM
350 "custom.el"
351 "cyrillic.el"
352 "czech.el"
fea1add4
GM
353 "debug.el"
354 "dired.el"
355 "el.el"
31a9ef2e
GM
356 "eshell.el"
357 "ethiopic.el"
358 "f90.el"
fea1add4
GM
359 "files.el"
360 "find.el"
361 "format.el"
31a9ef2e
GM
362 "generic.el"
363 "georgian.el"
0d613483 364 "grammar.el"
31a9ef2e 365 "greek.el"
fea1add4 366 "grep.el"
31a9ef2e 367 "hebrew.el"
fea1add4 368 "imenu.el"
31a9ef2e 369 "indian.el"
0d613483 370 "info-xref.el"
31a9ef2e 371 "japanese.el"
fea1add4 372 "java.el"
31a9ef2e 373 "lao.el"
fea1add4
GM
374 "linux.el"
375 "locate.el"
376 "make.el"
377 "mode.el"
0d613483 378 "mule-util.el"
fea1add4 379 "python.el"
31a9ef2e 380 "rmailmm.el"
fea1add4
GM
381 "semantic.el"
382 "shell.el"
383 "simple.el"
31a9ef2e 384 "slovak.el"
fea1add4
GM
385 "sort.el"
386 "speedbar.el"
387 "srecode.el"
388 "table.el"
389 "texi.el"
31a9ef2e 390 "thai.el"
0d613483 391 "thingatpt.el"
31a9ef2e 392 "tibetan.el"
fea1add4 393 "util.el"
31a9ef2e 394 "vc-bzr.el"
fea1add4
GM
395 "wisent.el")
396 "List of basenames occurring more than once in the source.")
397
6b5e47dd
GM
398;; FIXME :cowrote entries here can be overwritten by :wrote entries
399;; derived from a file's Author: header (eg mh-e). This really means
400;; the Author: header is erroneous.
d5ab63b2 401(defconst authors-fixed-entries
8b1163a3 402 '(("Richard M. Stallman" :wrote "[The original GNU Emacs and numerous files]")
f39caf44 403 ("Joseph Arceneaux" :wrote "xrdb.c")
6b5e47dd
GM
404 ;; This refers to the obsolete Willisson (qv) version.
405;;; ("Blitz Product Development Corporation" :wrote "ispell.el")
d5ab63b2
GM
406 ("Frank Bresz" :wrote "diff.el")
407 ("David M. Brown" :wrote "array.el")
93da04c0
GM
408 ;; No longer distributed.
409;;; ("Gary Byers" :changed "xenix.h")
d2f16e93
GM
410 ;; No longer distributed: freebsd.h
411 ;; Only trivial pieces remain, merged into configure.ac.
412 ("Shawn M. Carey" :wrote "[some early FreeBSD support]")
93da04c0 413 ;; hp800.h renamed from hp9000s800.h, hpux.h merged into hpux10-20.h.
6b5e47dd
GM
414 ;; FIXME overwritten by Author:.
415 ("Satyaki Das" :cowrote "mh-search.el")
d2f16e93
GM
416 ;; No longer distributed: hp800.h, hpux10-20.h.
417 ;; Only trivial pieces remain, merged into configure.ac.
418 ("Eric Decker" :changed "sysdep.c (and other files for HP-UX support)")
93da04c0
GM
419 ("Lawrence R. Dodd" :cowrote "dired-x.el")
420 ;; No longer distributed.
421;;; ("Viktor Dukhovni" :wrote "unexsunos4.c")
276d5f5d 422 ("Paul Eggert" :wrote "rcs2log") ; "vcdiff"
29cf3e20 423 ("Fred Fish" :changed "unexcoff.c")
93da04c0
GM
424 ;; No longer distributed.
425;;; ("Tim Fleehart" :wrote "makefile.nt")
d5ab63b2
GM
426 ("Keith Gabryelski" :wrote "hexl.c")
427 ("Kevin Gallagher" :wrote "flow-ctrl.el")
93da04c0
GM
428 ;; Also wrote an earlier version of disp-table.el, since replaced
429 ;; by Erik Naggum's version; also iso-syntax.el, later renamed to
430 ;; latin-1.el, since deleted.
431 ("Howard Gayle" :wrote "casetab.c")
432 ;; :wrote mh-pick.el, since merged into mh-search.el.
6b5e47dd
GM
433 ;; Originally wrote mh-funcs.el, but it has been rewritten since.
434 ("Stephen Gildea" :wrote "refcard.tex"
435 :cowrote "mh-funcs.el" "mh-search.el")
93da04c0
GM
436 ;; cl.texinfo renamed to cl.texi.
437 ("David Gillespie" :wrote "cl.texi")
438 ;; No longer distributed: emacsserver.c.
439 ("Hewlett-Packard" :changed "emacsclient.c" "server.el" "keyboard.c")
440 ;; No longer distributed.
441;;; ("Thomas Horsley" :wrote "cxux.h" "cxux7.h")
d5ab63b2
GM
442 ("Indiana University Foundation" :changed "buffer.c" "buffer.h"
443 "indent.c" "search.c" "xdisp.c" "region-cache.c" "region-cache.h")
93da04c0 444 ;; ibmrt.h, ibmrt-aix.h no longer distributed.
d5ab63b2 445 ("International Business Machines" :changed "emacs.c" "fileio.c"
29cf3e20 446 "process.c" "sysdep.c" "unexcoff.c")
93da04c0
GM
447 ;; No longer distributed.
448;;; ("Ishikawa Chiaki" :changed "aviion.h" "dgux.h")
d2f16e93
GM
449 ;; No longer distributed: ymakefile, intel386.h, mem-limits.h, template.h,
450 ;; linux.h (was renamed to lignux.h, then to gnu-linux.h, then removed)
451 ("Michael K. Johnson" :changed "configure.ac" "emacs.c"
452 "process.c" "sysdep.c" "syssignal.h" "systty.h" "unexcoff.c")
93da04c0
GM
453 ;; No longer distributed.
454;;; ("Kyle Jones" :wrote "mldrag.el")
4ee02020 455 ("Henry Kautz" :wrote "bib-mode.el")
d2f16e93
GM
456 ;; No longer distributed: vms-pwd.h, vmsfns.c, uaf.h,
457 ;; dir.h (was renamed to vmsdir.h, then removed)
458 ("Joseph M. Kelsey" :changed "fileio.c")
d5ab63b2 459 ("Sam Kendall" :changed "etags.c" "etags.el")
93da04c0
GM
460 ;; ack.texi: "We're not using his backquote.el any more."
461 ("Richard King" :wrote "userlock.el" "filelock.c")
d5ab63b2
GM
462 ("Sebastian Kremer" :changed "add-log.el")
463 ("Mark Lambert" :changed "process.c" "process.h")
464 ("Aaron Larson" :changed "bibtex.el")
6b5e47dd
GM
465 ;; It was :wrote, but it has been rewritten since.
466 ("James R. Larus" :cowrote "mh-e.el")
93da04c0
GM
467 ("Lars Lindberg" :changed "dabbrev.el" :cowrote "imenu.el")
468 ;; No longer distributed: lselect.el.
d5ab63b2
GM
469 ("Lucid, Inc." :changed "bytecode.c" "byte-opt.el" "byte-run.el"
470 "bytecomp.el" "delsel.el" "disass.el" "faces.el" "font-lock.el"
93da04c0 471 "lmenu.el" "mailabbrev.el" "select.el" "xfaces.c" "xselect.c")
6b5e47dd
GM
472 ;; MCC. No longer distributed: emacsserver.c.
473 ("Microelectronics and Computer Technology Corporation"
474 :changed "etags.c" "emacsclient.c" "movemail.c"
d5ab63b2
GM
475 "rmail.el" "rmailedit.el" "rmailkwd.el"
476 "rmailmsc.el" "rmailout.el" "rmailsum.el" "scribe.el"
6b5e47dd 477 ;; It was :wrote for xmenu.c, but it has been rewritten since.
29cf3e20 478 "server.el" "lisp.h" "sysdep.c" "unexcoff.c" "xmenu.c")
d5ab63b2 479 ("Niall Mansfield" :changed "etags.c")
93da04c0 480 ("Brian Marick" :cowrote "hideif.el")
d5ab63b2
GM
481 ("Marko Kohtala" :changed "info.el")
482 ("Sidney Markowitz" :changed "doctor.el")
93da04c0
GM
483 ;; No longer distributed: env.c.
484 ("Richard Mlynarik" :wrote "ehelp.el")
d5ab63b2
GM
485 ("Mosur Mohan" :changed "etags.c")
486 ("Jeff Morgenthaler" :changed "flow-ctrl.el" "vt200.el" "vt201.el"
487 "vt220.el" "vt240.el")
488 ("Motorola" :changed "buff-menu.el")
489 ("Hiroshi Nakano" :changed "ralloc.c")
7a3f511d
GM
490 ;; File removed in Emacs 24.1.
491;;; ("Sundar Narasimhan" :changed "rnewspost.el")
93da04c0
GM
492 ;; No longer distributed.
493;;; ("NeXT, Inc." :wrote "unexnext.c")
d5ab63b2 494 ("Mark Neale" :changed "fortran.el")
93da04c0
GM
495 ;; Renamed from sc.el.
496 ("Martin Neitzel" :changed "supercite.el")
d2f16e93 497 ("Andrew Oram" :changed "calendar.texi (and other doc files)")
d5ab63b2
GM
498 ("Frederic Pierresteguy" :wrote "widget.c")
499 ("Michael D. Prange" :changed "tex-mode.el")
93da04c0
GM
500 ;; No longer distributed (dgux5-4r3.h was renamed to dgux5-4-3.h).
501;;; ("Paul Reilly" :wrote "gux5-4r2.h" "dgux5-4-3.h")
502 ("Roland B. Roberts" :changed "files.el" "sort.el"
503 "buffer.h" "callproc.c" "dired.c" "process.c" "sysdep.c" "systty.h")
504 ;; No longer distributed.
505;;; "vmspaths.h" "build.com" "compile.com" "kepteditor.com" "precomp.com"
506;;; "vmsproc.el" :wrote "logout.com" "mailemacs.com")
4ac0ba71 507;;; ("Guillermo J. Rozas" :wrote "fakemail.c")
d5ab63b2
GM
508 ("Wolfgang Rupprecht" :changed "lisp-mode.el" "loadup.el"
509 "sort.el" "alloc.c" "callint.c"
d2f16e93
GM
510 ;; config.in renamed from config.h.in, now a generated file.
511 ;; ecrt0.c renamed from crt0.c, then removed.
512 "data.c" "fns.c"
93da04c0
GM
513 "lisp.h" "lread.c" ; "sun3.h" "ymakefile" - no longer distributed
514 "print.c" :wrote "float-sup.el" "floatfns.c")
d5ab63b2 515 ("Schlumberger Technology Corporation" :changed "gud.el")
93da04c0
GM
516 ;; Replaced by tcl.el.
517;;; ("Gregor Schmid" :wrote "tcl-mode.el")
9148ee92
GM
518 ;; No longer distributed since 24.1.
519;;; ("Rainer Schöpf" :wrote "alpha.h" "unexalpha.c")
93da04c0
GM
520 ;; No longer distributed: emacsserver.c.
521 ("William Sommerfeld" :wrote "emacsclient.c" "scribe.el")
522 ;; No longer distributed: emacsserver.c.
523 ("Leigh Stoller" :changed "emacsclient.c" "server.el")
22bcf204 524 ("Steve Strassmann" :wrote "spook.el")
d5ab63b2 525 ("Shinichirou Sugou" :changed "etags.c")
93da04c0
GM
526 ;; No longer distributed: emacsserver.c.
527 ("Sun Microsystems, Inc" :changed "emacsclient.c" "server.el"
528 :wrote "emacs.icon" "sun.el")
529 ;; No longer distributed.
530;;; "emacstool.1" "emacstool.c" "sun-curs.el"
531;;; "sun-fns.el" "sun-mouse.el" "sunfns.c")
532 ;; Renamed from sc.el.
533 ("Kayvan Sylvan" :changed "supercite.el")
534 ;; No longer distributed: emacsserver.c, tcp.c.
535 ("Spencer Thomas" :changed "emacsclient.c" "server.el"
29cf3e20 536 "dabbrev.el" "unexcoff.c" "gnus.texi")
d5ab63b2 537 ("Jonathan Vail" :changed "vc.el")
d2f16e93
GM
538 ;; No longer distributed: usg5-4.h
539 ("James Van Artsdalen" :changed "unexcoff.c")
93da04c0
GM
540 ;; No longer distributed: src/makefile.nt, lisp/makefile.nt
541 ;; winnt.el renamed to w32-fns.el; nt.[ch] to w32.[ch];
542 ;; ntheap.[ch] to w32heap.[ch]; ntinevt.c to w32inevt.c;
543 ;; ntproc.c to w32proc.c; ntterm.c to w32term.c;
544 ;; windowsnt.h to ms-w32.h.
545 ("Geoff Voelker" :wrote "w32-fns.el" "w32.c" "w32.h" "w32heap.c"
546 "w32heap.h" "w32inevt.c" "w32proc.c" "w32term.c" "ms-w32.h")
8fc29035 547 ("Morten Welinder" :wrote "dosfns.c" "[many MS-DOS files]" "msdos.h")
ed6ec139
EZ
548 ("Eli Zaretskii" :wrote "bidi.c" "[bidirectional display in xdisp.c]"
549 "[tty menus in term.c]")
93da04c0
GM
550 ;; Not using this version any more.
551;;; ("Pace Willisson" :wrote "ispell.el")
6b5e47dd
GM
552 ;; FIXME overwritten by Author:.
553 ("Bill Wohler" :cowrote "mh-e.el")
d5ab63b2 554 ("Garrett Wollman" :changed "sendmail.el")
9109bf49 555 ("Dale R. Worley" :changed "mail-extr.el")
93da04c0
GM
556 ("Jamie Zawinski" :changed "bytecode.c" :wrote "tar-mode.el"
557 :cowrote "disass.el"))
d5ab63b2
GM
558 "Actions taken from the original, manually (un)maintained AUTHORS file.")
559
560
f39caf44
KS
561(defconst authors-valid-file-names
562 '("aclocal.m4"
eef72fce 563 "build-ins.in"
0d613483 564 "Makefile"
eef72fce 565 "Makefile.noleim"
4ee02020 566 "makedist.bat"
eef72fce
GM
567 "makefile.def"
568 "makefile.nt"
3c855b96 569 "ns.mk"
0d613483
GM
570 "README"
571 ;; There were a few of these, not just the generated top-level one.
572 "configure" "config.h"
573 ;; nt/
574 "ebuild.bat" "install.bat" "fast-install.bat"
eef72fce 575 "debug.bat.in" "emacs.bat.in"
0d613483 576 "inc/sys/dir.h" "inc/gettext.h"
eef72fce
GM
577 ".gdbinit-union"
578 "alloca.s"
579 "make-delta"
580 "config.w95"
8449dd1f 581 "msysconfig.sh"
eef72fce
GM
582 "emacstool.1"
583 "align.umax"
584 "cxux-crt0.s"
585 "gould-sigvec.s"
586 "getdate.y"
587 "ymakefile"
588 "permute-index" "index.perm"
46e6650e 589 "ibmrs6000.inp"
3c855b96 590 "b2m.c" "b2m.1" "b2m.pl" "rcs-checkin.1"
c11cc37a 591 "emacs.bash" "emacs.csh" "ms-kermit"
93da04c0 592 "emacs.ico"
eef72fce 593 "emacs21.ico"
3c855b96 594 "emacs.py" "emacs2.py" "emacs3.py"
c11cc37a 595 "BABYL" "LPF" "LEDIT" "OTHER.EMACSES"
eef72fce
GM
596 "emacs16_mac.png" "emacs24_mac.png"
597 "emacs256_mac.png" "emacs32_mac.png"
598 "emacs48_mac.png" "emacs512_mac.png"
0d613483
GM
599 "ps-prin2.ps" "ps-prin3.ps"
600 "emacs.xbm" "gnu.xpm" "gnus-pointer.xbm" "gnus-pointer.xpm"
601 ;; Moved from etc/ to etc/images, and/or removed.
602 "gnus.pbm" "gnus.xbm" "gnus.xpm" "letter.pbm" "letter.xbm" "letter.xpm"
603 "splash.pbm" "splash.xbm" "splash.xpm" "splash8.xpm"
604 "images/execute.pbm" "images/execute.xpm" "images/fld-open.pbm"
605 "images/fld-open.xpm" "images/highlight.pbm" "images/highlight.xpm"
606 "images/mail.pbm" "images/mail.xpm" "images/mail/alias.pbm"
607 "images/mail/alias.xpm" "images/mail/refile.pbm"
608 "images/mail/refile.xpm" "images/page-down.pbm"
609 "images/page-down.xpm" "images/widen.pbm" "images/widen.xpm"
610 "images/gnus/bar.xbm" "images/gnus/bar.xpm"
611 "images/gnus/reverse-smile.xpm"
fea1add4 612 "revdiff" ; admin/
3c855b96 613 "vcdiff" "rcs-checkin" "tindex.pl"
fea1add4
GM
614 "mainmake" "sed1.inp" "sed2.inp" "sed3.inp" ; msdos/
615 "mac-fix-env.m"
eef72fce
GM
616 ;; Deleted vms stuff:
617 "temacs.opt" "descrip.mms" "compile.com" "link.com"
0d613483
GM
618 "compact.el" "fadr.el"
619 "calc/calc-maint.el"
620 "emacs-lisp/eieio-comp.el"
621 "erc-hecomplete.el"
622 "eshell/esh-maint.el"
623 "language/persian.el"
624 "meese.el"
625 "mh-exec.el" "mh-init.el" "mh-customize.el"
626 "net/zone-mode.el" "xesam.el"
627 "term/mac-win.el" "sup-mouse.el"
628 "url-https.el"
629 "org-mac-message.el" "org-mew.el" "org-w3m.el" "org-vm.el" "org-wl.el"
630 "org-mks.el" "org-remember.el" "org-xoxo.el" "org-docbook.el"
631 "org-freemind.el" "ox-jsinfo.el"
632 "org-exp-blocks.el" ; maybe this is ob-exp now? dunno
633 "org-lparse.el"
634 "org-special-blocks.el" "org-taskjuggler.el"
635 ;; gnus
636 "nnwfm.el" "nnlistserv.el" "nnkiboze.el" "nndb.el" "nnsoup.el"
637 "netrc.el" "password.el" "sasl-cram.el" "sasl-digest.el" "sasl-ntlm.el"
638 "sasl.el" "dig.el" "dns.el" "hex-util.el" "sha1.el" "md4.el"
639 "hmac-def.el" "hmac-md5.el" "ntlm.el" "hashcash.el" "smime-ldap.el"
640 "assistant.el" "gnus-utils.el" "tls.el" "pgg-def.el" "pgg-gpg.el"
641 "gnus-compat.el" "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "pgg.el"
642 "dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el"
643 "gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el"
644 "eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el"
645 ;; doc
646 "getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi"
647 "back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el"
648 "front-cover-1.texi" "locals.texi" "calendar.texi" "info-stnd.texi"
649 "tasks.texi"
650 "advice.texi" "picture.texi" "texinfo.tex"
651 ;; lwlib:
652 "dispatch.c" "dispatch.h" "xrdb-cpp.c" "xrdb.c"
653 "lwlib-Xol.c" "lwlib-Xol.h" "lwlib-Xolmb.c" "lwlib-Xolmb.h"
654 "lwlib-XolmbP.h"
655 ;; lib/
656 "lib/stdio.c" "lib/gl_openssl.h" "lib/sigprocmask.c"
657 "lib/pthread_sigprocmask.c" "lib/ldtoastr.c" "lib/dummy.c"
658 "lib/ignore-value.h"
659 ;; lib-src/
660 "cvtmail.c" "digest-doc.c" "emacsserver.c" "emacstool.c" "env.c"
661 "etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c"
662 "getopt_.h" "getopt_int.h" "gettext.h" "leditcfns.c" "loadst.c"
663 "make-path.c" "qsort.c" "sorted-doc.c" "tcp.c" "timer.c" "wakeup.c"
664 "yow.c"
665 ;; etc/
666 "emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
667 "tpu-doc.el" ; FIXME? renamed to something?
eef72fce 668 )
fea1add4
GM
669 "File names which are valid, but no longer exist (or cannot be found)
670in the repository.")
f39caf44 671
0d613483
GM
672;; Note that any directory part on the RHS is retained.
673;; Cf authors-renamed-files-regexps.
674;; NB So only add a directory if needed to disambiguate.
675;; FIXME?
676;; Although perhaps we could let authors-disambiguate-file-name do that?
f39caf44
KS
677(defconst authors-renamed-files-alist
678 '(("nt.c" . "w32.c") ("nt.h" . "w32.h")
679 ("ntheap.c" . "w32heap.c") ("ntheap.h" . "w32heap.h")
680 ("ntinevt.c" . "w32inevt.c") ("ntinevt.h" . "w32inevt.h")
681 ("ntproc.c" . "w32proc.c")
682 ("w32console.c" . "w32term.c")
683 ("unexnt.c" . "unexw32.c")
684 ("s/windowsnt.h" . "s/ms-w32.h")
837b365b 685 ("s/ms-w32.h" . "inc/ms-w32.h")
0d613483 686 ("src/config.h" . "config.h")
93da04c0 687 ("winnt.el" . "w32-fns.el")
0d613483 688 ("linux.h" . "gnu-linux.h")
3c855b96 689 ("emacs.manifest" . "emacs-x86.manifest")
f39caf44 690 ("config.emacs" . "configure")
c4907a5e 691 ("configure.in" . "configure.ac")
93da04c0
GM
692 ("config.h.dist" . "config.in")
693 ("config.h-dist" . "config.in")
694 ("config.h.in" . "config.in")
0d613483
GM
695 ("debug.bat" . "debug.bat.in")
696 ("emacs.bat" . "emacs.bat.in")
697 ;; paths.h.dist -> paths.h-dist -> paths.h.in -> paths.in -> epaths.in.
698 ("paths.h.dist" . "epaths.in")
699 ("paths.h-dist" . "epaths.in")
700 ("paths.h.in" . "epaths.in")
701 ("paths.in" . "epaths.in")
eef72fce 702 ("patch1" . "sed1.inp")
0d613483
GM
703 ("INSTALL.MSYS" . "INSTALL")
704 ("server.c" . "emacsserver.c")
705 ("lib-src/etags.c" . "etags.c")
706 ;; msdos/
707 ("is-exec.c" . "is_exec.c")
92f78ea3 708 ("enriched.doc" . "enriched.txt")
f39caf44 709 ("GETTING.GNU.SOFTWARE" . "FTP")
eef72fce
GM
710 ("etc/MACHINES" . "MACHINES")
711 ("ONEWS" . "NEWS.19")
712 ("ONEWS.1" . "NEWS.1-17")
713 ("ONEWS.2" . "NEWS.1-17")
714 ("ONEWS.3" . "NEWS.18")
715 ("ONEWS.4" . "NEWS.18")
716 ("ORDERS.USA" . "ORDERS")
717 ("EUROPE" . "ORDERS")
718 ("DIFF" . "OTHER.EMACSES")
719 ("CCADIFF" . "OTHER.EMACSES")
720 ("GOSDIFF" . "OTHER.EMACSES")
721 ("Makefile.in.in" . "Makefile.in")
4ee02020
KS
722 ("leim-Makefile" . "leim/Makefile")
723 ("leim-Makefile.in" . "leim/Makefile.in")
92158bc3
KS
724 ("emacs-lisp/testcover-ses.el" . "tcover-ses.el")
725 ("emacs-lisp/testcover-unsafep.el" . "tcover-unsafep.el")
0d613483 726 ("progmodes/dos.el" . "bat-mode.el")
6b5e47dd
GM
727 ;; index and pick merged into search.
728 ("mh-index.el" . "mh-search.el")
729 ("mh-pick.el" . "mh-search.el")
fea1add4 730 ("font-setting.el" . "dynamic-setting.el")
0d613483
GM
731 ("help-funs.el" . "help-fns.el")
732 ("erc-notifications.el" . "erc-desktop-notifications.el")
733 ("org-complete.el" . "org-pcomplete.el")
734 ("org-export.el" . "ox.el") ; ?
735 ;; Was definitely renamed to org-latex.el, then... ?
736 ("org-export-latex.el" . "ox-latex.el") ; ?
737 ("org-exp.el" . "ox.el") ; ?
738 ("progmodes/cfengine3.el" . "cfengine.el")
739 ;; Obsolete.
740 ("play/bruce.el" . "bruce.el")
741 ("patcomp.el" . "patcomp.el")
742 ;; From lisp to etc/forms.
743 ("forms-d2.el" . "forms-d2.el")
744 ("forms-pass.el" . "forms-pass.el")
745 ;; From lisp/ to etc/nxml.
746 ("nxml/test.invalid.xml" . "test-invalid.xml")
747 ("nxml/test.valid.xml" . "test-valid.xml")
748 ;; The one in lisp is eshell/eshell.el.
749 ("eshell.el" . "automated/eshell.el")
750 ("eshell/esh-test.el" . "automated/eshell.el")
751 ;; INSTALL-CVS -> .CVS -> .BZR -> .REPO
752 ("INSTALL-CVS" . "INSTALL.REPO")
753 ("INSTALL.CVS" . "INSTALL.REPO")
ac4c50ad 754 ("INSTALL.BZR" . "INSTALL.REPO")
0d613483 755 ("gnus-logo.eps" . "gnus-logo.eps") ; moved to refcards/
eef72fce
GM
756 ("build-install" . "build-ins.in")
757 ("build-install.in" . "build-ins.in")
758 ("unidata/Makefile" . "unidata/Makefile.in")
0d613483
GM
759 ;; Moved from top to etc/
760 ("CONTRIBUTE" . "CONTRIBUTE")
761 ("FTP" . "FTP")
762 ;; Moved from top to build-aux/
763 ("move-if-change" . "move-if-change")
764 ("update-subdirs" . "update-subdirs")
765 ("emacs.tex" . "emacs.texi")
766 ("faq.texi" . "efaq.texi")
767 ("major.texi" . "modes.texi")
768 ;; And from emacs/ to misc/ and back again.
769 ("ns-emacs.texi" . "macos.texi")
770 ("overrides.texi" . "gnus-overrides.texi")
771 ("xresmini.texi" . "xresources.texi")
eef72fce
GM
772 ;; Not renamed, but we only have the latter in the Emacs repo.
773 ("trampver.texi.in" . "trampver.texi")
0d613483
GM
774 ;; Renamed with same directory.
775 ("e/eterm" . "eterm-color")
776 ("e/eterm.ti" . "eterm-color.ti")
eef72fce
GM
777 ("README.txt" . "README")
778 ("emacs.names" . "JOKES")
779 ("ED.WORSHIP" . "JOKES")
780 ("GNU.JOKES" . "JOKES")
781 ("CHARACTERS" . "TODO")
0d613483
GM
782 ("images/gnus/mail_send.xpm" . "mail-send.xpm") ; still in images/gnus
783 ;; Renamed within same directory.
784 ("schema/xhtml-basic-form.rnc" . "xhtml-bform.rnc" )
785 ("schema/xhtml-basic-table.rnc" . "xhtml-btable.rnc")
786 ("schema/xhtml-list.rnc" . "xhtml-lst.rnc")
787 ("schema/xhtml-target.rnc" . "xhtml-tgt.rnc")
788 ("schema/xhtml-style.rnc" . "xhtml-xstyle.rnc")
789 ("schema/docbook-dyntbl.rnc" . "docbk-dyntbl.rnc")
790 ("schema/docbook-soextbl.rnc" . "docbk-soextbl.rn" )
fea1add4 791 ("edt-user.doc" . "edt.texi")
c11cc37a 792 ("DEV-NOTES" . "nextstep")
31a9ef2e 793 ("org/COPYRIGHT-AND-LICENSE" . "org/README")
eef72fce
GM
794 ;; Moved to different directories.
795 ("ctags.1" . "ctags.1")
796 ("etags.1" . "etags.1")
797 ("emacs.1" . "emacs.1")
798 ("emacsclient.1" . "emacsclient.1")
799 ("icons/emacs21.ico" . "emacs21.ico")
8449dd1f
GM
800 ("ja-dic" . "leim/ja-dic")
801 ("quail" . "leim/quail")
802 ;; Moved from autogen/ to admin/.
803 ("autogen/update_autogen" . "update_autogen")
804 ;; Moved from etc/ to admin/.
805 ("grammars" . "grammars")
0d613483
GM
806 ;; From etc to lisp/cedet/semantic/.
807 ("grammars/bovine-grammar.el" . "bovine/grammar.el")
808 ("grammars/wisent-grammar.el" . "wisent/grammar.el")
c11cc37a
GM
809 ;; Moved from admin/nt/ to nt/.
810 ("nt/README.W32" . "README.W32")
f39caf44
KS
811 )
812 "Alist of files which have been renamed during their lifetime.
813Elements are (OLDNAME . NEWNAME).")
814
0d613483
GM
815;; Should still test that the renamed file exists. Does it?
816;; But it might be relative to a different ChangeLog...
817;;
818;; Note that only the basename of the RHS is used.
819;; Cf authors-renamed-files-alist.
f39caf44 820(defconst authors-renamed-files-regexps
0d613483
GM
821 '(("\\`\\(arg-nonnull\\|c\\+\\+defs\\|warn-on-use\\)\\.h\\'"
822 "build-aux/snippet/\\&")
823 ("\\`\\(ebuild\\|emacs\\|install\\|fast-install\\)\\.cmd\\'" "\\1.bat")
824 ("\\`\\(book-spine\\|cl\\|forms\\|functions\\|gnus\\|sc\\|texinfo\\|vip\\)\
825\\.texinfo\\'" "\\1.texi")
826 ("\\`\\(\\(calc\\|org\\|vip\\)card\\|viperCard\\|\
827\\(\\(cs\\|fr\\|sk\\)-\\)?dired-ref\\|\
828\\(\\(cs\\|de\\|fr\\|gnus\\|pl\\|pt-br\\|ru\\|sk\\)-\\)?refcard\\|\
829\\(\\(cs\\|fr\\|sk\\)-\\)?survival\\)\\.tex\\'" "refcards/\\&")
830 ("\\`refcard-\\(de\\|pl\\)\\.tex\\'" "refcards/\\1-refcard.tex")
831 ("\\`\\(refcards/\\)?fr-drdref\\.tex\\'" "refcards/fr-dired-ref.tex")
832 ("^\\(TUTORIAL[^/]*\\)" "tutorials/\\1")
833 ("\\`themes/dev-\\(tsdh-\\(?:light\\|dark\\)-theme\\.el\\)\\'"
834 "themes/\\1")
835 ;; Moved from lisp/toolbar to etc/images.
836 ("\\`toolbar/\\(back\\|fwd\\|left\\|right\\|up\\)_arrow\
837\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/\\1-arrow\\2")
838 ("\\`toolbar/lc-\\(back\\|fwd\\|left\\|right\\|up\\)_arrow\
839\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/low-color/\\1-arrow\\2")
840 ("\\`toolbar/mail_\\(compose\\|send\\)\\(\\.[xp]bm\\)\\'"
841 "images/mail/\\1")
842 ("\\`toolbar/jump_to\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/jump-to\\1")
843 ("\\`toolbar/lc-jump_to\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
844 "images/low-color/jump-to\\1")
845 ("\\`toolbar/\\(attach\\|cancel\\|close\\|copy\\|cut\\|\
846diropen\\|exit\\|help\\|home\\|index\\|info\\|mail\\|new\\|open\\|\
847paste\\|preferences\\|print\\|save\\|saveas\\|search\\|search-replace\\|\
848spell\\|undo\\)\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/\\1\\2")
849 ("\\`toolbar/gud-\\(break\\|cont\\|down\\|finish\\|print\\|pstar\\|\
850remove\\|run\\|until\\|up\\|watch\\)\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
851 "images/gud/\\1\\2")
852 ("\\`\\(toolbar/gud-\\|images/gud/\\)n\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
853 "images/gud/next\\2\\3")
854 ("\\`\\(toolbar/gud-\\|images/gud/\\)s\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
855 "images/gud/step\\2\\3")
856 ("\\`toolbar/lc-\\([-a-z]+\\.xpm\\)\\'" "images/low-color/\\1")
857 ("^\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.\\(png\\|xpm\\)\\)$"
eef72fce 858 "images/\\1")
0d613483 859 ("^\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)"
eef72fce 860 "\\1\\2\\3_mac\\4")
0d613483 861 ("\\(images/icons/\\)emacs_\\([0-9][0-9]\\)\\.png"
eef72fce 862 "\\1hicolor/\\2x\\2/apps/emacs.png")
0d613483
GM
863 ;; Moved from leim/ to lisp/leim/.
864 ("\\`quail/[-a-z0-9]+\\.el\\'" "leim/\\&")
865 ("\\`ja-dic/ja-dic\\.el\\'" "leim/\\&")
866 ("\\`vc-\\(rcs\\|cvs\\|sccs\\)-hooks\\.el\\'" "vc/vc-\\1.el")
867 ("\\`vc-\\(annotate\\|arch\\|bzr\\|cvs\\|dav\\|dir\\|dispatcher\\|\
868git\\|hg\\|hooks\\|mtn\\|rcs\\|sccs\\|svn\\)\\.el\\'" "vc/\\&")
869 ("\\`ediff-\\(diff\\|help\\|hook\\|init\\|merg\\|mult\\|ptch\\|util\\|\
870vers\\|wind\\)\\.el\\'" "vc/\\&")
871 ("\\`pcvs-\\(defs\\|info\\|parse\\|util\\)\\.el\\'" "vc/\\&")
872 ("\\`\\(add-log\\|compare-w\\|cvs-status\\|diff-mode\\|diff\\|\
873ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
874 "vc/\\&")
875 ("\\`\\(emacs-lisp/\\)?helpers\\.el\\'" "emacs-lisp/subr-x.el")
876 ;; I assume this is (essentially) what happened, org/ChangeLog is vague.
877 ("\\`org-\\(ascii\\|beamer\\|html\\|icalendar\\|jsinfo\\|latex\
878\\|odt\\|publish\\)\\.el\\'" "ox-\\1.el")
879 ;; From test/ to test/automated/.
880 ("comint-testsuite.el" "automated/\\&")
881 ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\
882-testsuite\\.el" "automated/\\1-tests.el")
883 ;; NB lax rules should come last.
884 ("^m/m-\\(.*\\.h\\)$" "m/\\1" t)
885 ("^m-\\(.*\\.h\\)$" "\\1" t)
886 ("^s/s-\\(.*\\.h\\)$" "s/\\1" t)
887 ("^s-\\(.*\\.h\\)$" "\\1" t)
888 ("\\.\\(el\\|[ch]\\|x[pb]m\\|pbm\\)\\'" t t)
f39caf44 889 )
0d613483
GM
890 "List of regexps and rewriting rules for renamed files.
891Elements are (REGEXP REPLACE [LAX]). If REPLACE is a string, the file
f39caf44 892name matching REGEXP is replaced by REPLACE using `replace-string'.
0d613483
GM
893Otherwise, the file name is accepted as is.
894Elements with LAX non-nil are only used in `authors-lax-changelogs'.")
895
896;; It's really not worth trying to make these old logs fully valid.
897;; All the obvious real errors are gone.
898;; The main issue is _lots_ of moving around of files.
899;; Eg the progmodes/ (etc) directories did not exist before 1997.
900;; Also, lib-src/ did not exist, the files were in etc/.
901;; And various other things.
902;; Maybe this should just be any ChangeLog with a . extension,
903;; assuming we always fix logs fully before rotating them?
904(defconst authors-lax-changelogs
905 '("erc/ChangeLog\\.0[1-8]\\'"
906 "gnus/ChangeLog\\.[1-2]\\'"
907 "lisp/ChangeLog\\.\\([1-9]\\|1[0-5]\\)\\'"
908 "mh-e/ChangeLog\\.1\\'"
909 "src/ChangeLog\\.\\([1-9]\\|1[0-2]\\)\\'")
910 "List of regexps matching ChangeLogs that we do not print errors from.
911These are older ChangeLogs that have various issues.
912Additionally, for these logs we apply the `lax' elements of
913`authors-renamed-files-regexps'.")
914
f39caf44
KS
915
916(defvar authors-checked-files-alist)
917(defvar authors-invalid-file-names)
918
0d613483 919;; This has become rather yucky. :(
fea1add4
GM
920(defun authors-disambiguate-file-name (fullname)
921 "Convert FULLNAME to an unambiguous relative-name."
922 (let ((relname (file-name-nondirectory fullname))
0d613483
GM
923 dir parent)
924 (if (and (member relname authors-ambiguous-files)
925 ;; Try to identify the top-level directory.
926 ;; FIXME should really use ROOT from M-x authors.
927 (not (and (file-directory-p
928 (expand-file-name
929 "lib-src"
930 (setq dir (file-name-directory fullname))))
931 (file-directory-p (expand-file-name "etc" dir)))))
932 ;; I think it looks weird to see eg "lisp/simple.el".
933 ;; But for eg Makefile.in, we do want to say "lisp/Makefile.in".
934 (if (and (string-equal "lisp"
935 (setq parent (file-name-nondirectory
936 (directory-file-name dir))))
937 ;; TODO better to simply have hard-coded list?
938 ;; Only really Makefile.in where this applies.
939 (not (file-exists-p
940 (expand-file-name (concat "../" relname) dir))))
fea1add4 941 relname
0d613483
GM
942 ;; In case of ambiguity, just prepend the parent directory.
943 ;; FIXME obviously this is not a perfect solution.
944 (format "%s/%s" (file-name-nondirectory (directory-file-name dir))
945 relname))
fea1add4
GM
946 relname)))
947
0d613483
GM
948(defun authors-lax-changelog-p (file)
949 "Return non-nil if FILE matches `authors-lax-changelogs'."
950 (let ((list authors-lax-changelogs)
951 found)
952 (while list
953 (setq list (if (setq found (string-match-p (car list) file))
954 nil
955 (cdr list))))
956 found))
957
f39caf44 958(defun authors-canonical-file-name (file log-file pos author)
6b5e47dd 959 "Return canonical file name for FILE found in LOG-FILE.
f39caf44 960Checks whether FILE is a valid (existing) file name, has been renamed,
fea1add4 961or is on the list of removed files. Returns the non-directory part of
6b5e47dd
GM
962the file name. Only uses the LOG-FILE position POS and associated AUTHOR
963to print a message if FILE is not found."
93da04c0 964 ;; FILE should be re-checked in every different directory associated
c4444d16 965 ;; with a LOG-FILE. Eg configure.ac from src/ChangeLog is not the
93da04c0
GM
966 ;; same as that from top-level/ChangeLog.
967 (let* ((fullname (expand-file-name file (file-name-directory log-file)))
968 (entry (assoc fullname authors-checked-files-alist))
0d613483 969 laxlog relname valid)
f39caf44
KS
970 (if entry
971 (cdr entry)
972 (setq relname (file-name-nondirectory file))
0d613483
GM
973 (if (or (member file authors-valid-file-names)
974 (member relname authors-valid-file-names)
f39caf44 975 (file-exists-p file)
0d613483
GM
976 (file-exists-p relname) ; FIXME? appropriate?
977 )
fea1add4 978 (setq valid (authors-disambiguate-file-name fullname))
0d613483 979 (if (setq valid (assoc file authors-renamed-files-alist))
f39caf44 980 (setq valid (cdr valid))
0d613483
GM
981 (setq laxlog (authors-lax-changelog-p log-file))
982 (let ((rules authors-renamed-files-regexps)
983 rule)
f39caf44 984 (while rules
0d613483
GM
985 (setq rule (car rules))
986 (if (and (or laxlog (not (nth 2 rule)))
987 (string-match (car rule) file))
988 (setq valid (if (stringp (nth 1 rule))
f39caf44 989 (file-name-nondirectory
0d613483 990 (replace-match (nth 1 rule) t nil file))
f39caf44 991 relname)
0d613483
GM
992 rules nil)
993 (setq rules (cdr rules)))))))
f39caf44 994 (setq authors-checked-files-alist
93da04c0 995 (cons (cons fullname valid) authors-checked-files-alist))
9109bf49 996 (unless (or valid
eef72fce 997 (member file authors-ignored-files)
fea1add4 998 (authors-obsolete-file-p file)
9109bf49 999 (string-match "[*]" file)
0d613483
GM
1000 (string-match "^[0-9.]+$" file)
1001 laxlog)
a1506d29 1002 (setq authors-invalid-file-names
f39caf44
KS
1003 (cons (format "%s:%d: unrecognized `%s' for %s"
1004 log-file
1005 (1+ (count-lines (point-min) pos))
1006 file author)
1007 authors-invalid-file-names)))
1008 valid)))
1009
d5ab63b2
GM
1010(defun authors-add-fixed-entries (table)
1011 "Add actions from `authors-fixed-entries' to TABLE."
1012 (dolist (entry authors-fixed-entries)
1013 (let ((author (car entry))
1014 action)
1015 (dolist (item (cdr entry))
1016 (if (symbolp item)
1017 (setq action item)
1018 (authors-add author item action table))))))
1019
3932b29a 1020
8a5506f2
GM
1021(defun authors-obsolete-file-p (file)
1022 "Return non-nil if FILE is obsolete.
3932b29a 1023FILE is considered obsolete if it matches one of the regular expressions
8a5506f2
GM
1024from `authors-obsolete-files-regexps'."
1025 (let (obsolete-p
1026 (regexps authors-obsolete-files-regexps))
1027 (while (and regexps (not obsolete-p))
1028 (setq obsolete-p (string-match (car regexps) file)
1029 regexps (cdr regexps)))
1030 obsolete-p))
1031
1032
3215096c
GM
1033(defun authors-add (author file action table)
1034 "Record that AUTHOR worked on FILE.
1035ACTION is a keyword symbol describing what he did. Record file,
1036author and what he did in hash table TABLE. See the description of
1037`authors-scan-change-log' for the structure of the hash table."
4ee02020
KS
1038 (unless (or (member file authors-ignored-files)
1039 (authors-obsolete-file-p file)
9c1af546 1040 (equal author ""))
8a5506f2 1041 (let* ((value (gethash author table))
f39caf44
KS
1042 (entry (assoc file value))
1043 slot)
8a5506f2 1044 (if (null entry)
f39caf44
KS
1045 (puthash author (cons (list file (cons action 1)) value) table)
1046 (if (setq slot (assoc action (cdr entry)))
1047 (setcdr slot (1+ (cdr slot)))
1048 (nconc entry (list (cons action 1))))))))
3215096c
GM
1049
1050
3215096c
GM
1051(defun authors-canonical-author-name (author)
1052 "Return a canonicalized form of AUTHOR, an author name.
eef72fce
GM
1053If AUTHOR has an entry in `authors-aliases', use that. Remove
1054email addresses. Capitalize words in the author's name, unless
1055it is found in `authors-fixed-case'."
f39caf44
KS
1056 (let* ((aliases authors-aliases)
1057 regexps realname)
3215096c 1058 (while aliases
f39caf44
KS
1059 (setq realname (car (car aliases))
1060 regexps (cdr (car aliases))
1061 aliases (cdr aliases))
1062 (while regexps
1063 (if (string-match (car regexps) author)
1064 (setq author realname
1065 regexps nil
1066 aliases nil)
1067 (setq regexps (cdr regexps))))))
1068 (when author
1069 (setq author (replace-regexp-in-string "[ \t]*[(<].*$" "" author))
d0f483e8 1070 (setq author (replace-regexp-in-string "\`[ \t]+" "" author))
f39caf44 1071 (setq author (replace-regexp-in-string "[ \t]+$" "" author))
d0f483e8
KS
1072 (setq author (replace-regexp-in-string "[ \t]+" " " author))
1073 (unless (string-match "[-, \t]" author)
1074 (setq author ""))
eef72fce
GM
1075 (or (car (member author authors-fixed-case))
1076 (capitalize author))))
f39caf44 1077
f39caf44
KS
1078(defun authors-scan-change-log (log-file table)
1079 "Scan change log LOG-FILE for author information.
3215096c
GM
1080
1081For each change mentioned in the log, add an entry to hash table TABLE
1082under the author's canonical name.
1083
1084Keys of TABLE are author names. Values are alists of entries (FILE
f39caf44
KS
1085\(ACTION . COUNT) ...). FILE is one file the author worked on. The
1086rest of the entry is a list of keyword symbols describing what he did
2603d79b 1087with the file and the number of each action:
3215096c
GM
1088
1089:wrote means the author wrote the file
2603d79b 1090:cowrote means he wrote the file in collaboration with others
f39caf44 1091:changed means he changed the file COUNT times."
3932b29a 1092
2603d79b 1093 (let* ((enable-local-variables :safe) ; for find-file, hence let*
68013cfa 1094 (enable-local-eval nil)
f39caf44
KS
1095 (existing-buffer (get-file-buffer log-file))
1096 (buffer (find-file-noselect log-file))
4d6769e1 1097 authors pos)
9a529312 1098 (with-current-buffer buffer
3215096c
GM
1099 (save-restriction
1100 (widen)
1101 (goto-char (point-min))
1102 (while (re-search-forward "^[0-9]\\|^[ \t]+\\* " nil t)
1103 (beginning-of-line)
f39caf44 1104 (setq pos (point))
3215096c 1105 (cond ((looking-at "^[0-9]+-[0-9]+-[0-9]+")
6b5e47dd
GM
1106 ;; Handle joint authorship of changes.
1107 ;; This can be a bit fragile, and is not too common.
1108 (setq authors nil)
1109 (while (progn
1110 (skip-chars-forward " \t+:0-9-")
1111 (not (looking-at "\\($\\|\\*\\|\
1112Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
1113 (push (authors-canonical-author-name
1114 (buffer-substring-no-properties
1115 (point) (line-end-position))) authors)
1116 (forward-line 1)))
3215096c
GM
1117 ((looking-at "^[ \t]+\\*")
1118 (let ((line (buffer-substring-no-properties
1119 (match-end 0) (line-end-position))))
1120 (while (and (not (string-match ":" line))
1121 (forward-line 1)
1122 (not (looking-at ":\\|^[ \t]*$")))
1123 (setq line (concat line
1124 (buffer-substring-no-properties
1125 (line-beginning-position)
1126 (line-end-position)))))
1127 (when (string-match ":" line)
1128 (setq line (substring line 0 (match-beginning 0)))
1129 (setq line (replace-regexp-in-string "[[(<{].*$" "" line))
1130 (setq line (replace-regexp-in-string "," "" line))
1131 (dolist (file (split-string line))
6b5e47dd
GM
1132 (when (setq file (authors-canonical-file-name file log-file pos (car authors)))
1133 (dolist (author authors)
1134 ;;(message "%s changed %s" author file)
1135 (authors-add author file :changed table)))))
3215096c
GM
1136 (forward-line 1)))))))
1137 (unless existing-buffer
1138 (kill-buffer buffer))))
1139
1140
1141(defun authors-scan-el (file table)
1142 "Scan Lisp file FILE for author information.
1143TABLE is a hash table to add author information to."
2603d79b
GM
1144 (let* ((existing-buffer (get-file-buffer file))
1145 (enable-local-variables :safe) ; for find-file, hence let*
1146 (enable-local-eval nil)
1147 (buffer (find-file-noselect file)))
fea1add4 1148 (setq file (authors-disambiguate-file-name (expand-file-name file)))
9a529312 1149 (with-current-buffer buffer
3215096c
GM
1150 (save-restriction
1151 (widen)
1152 (goto-char (point-min))
1153 (while (and (re-search-forward
93da04c0
GM
1154 "^;+[ \t]*\\(Authors?\\|Commentary\\|Code\\):[ \t]*" nil t)
1155 (not (member (match-string 1) '("Commentary" "Code"))))
1156 (let ((continue t)
1157 (action :wrote)
1158 authors)
1159 (while continue
1160 ;; Some entries contain a year range in front of the
1161 ;; author's name.
1162 (skip-chars-forward "-0-9 \t")
1163 (push (authors-canonical-author-name
1164 (buffer-substring-no-properties
1165 (point) (line-end-position))) authors)
1166 ;; tips.texi says the continuation line should begin
1167 ;; with a tab, but often spaces are used.
1168 (setq continue
1169 (and (zerop (forward-line 1))
1170 (looking-at ";;;?\\(\t+ *\\| +\\)[[:alnum:]]")
1171 (goto-char (1- (match-end 0)))
1172 (not (looking-at "[[:upper:]][-[:alpha:]]+:[ \t]")))))
1173 (and (> (length authors) 1)
1174 (setq action :cowrote))
1175 (mapc (lambda (author)
1176 (authors-add author file action table))
1177 authors)))))
3215096c
GM
1178 (unless existing-buffer
1179 (kill-buffer buffer))))
1180
1181
0a521885
GM
1182(defun authors-public-domain-p (file)
1183 "Return t if FILE is a file that was put in public domain."
1184 (let ((public-domain-p nil)
1185 (list authors-public-domain-files))
1186 (while (and list (not public-domain-p))
1187 (when (string-match (car list) file)
1188 (setq public-domain-p t))
1189 (setq list (cdr list)))
1190 public-domain-p))
1191
f39caf44
KS
1192(defvar authors-author-list)
1193
1194(defun authors-add-to-author-list (author changes)
1195 "Insert information about AUTHOR's work on Emacs into `authors-author-list'.
1196CHANGES is an alist of entries (FILE (ACTION . COUNT) ...), as produced by
1197`authors-scan-change-log'.
93da04c0
GM
1198The element added to `authors-author-list' is (AUTHOR WROTE CO-WROTE CHANGED),
1199where WROTE, CO-WROTE, and CHANGED are lists of the files written, co-written
1200and changed by AUTHOR."
f39caf44
KS
1201 (when author
1202 (let ((nchanged 0)
1203 wrote-list
93da04c0 1204 cowrote-list
f39caf44 1205 changed-list)
3215096c 1206 (dolist (change changes)
93da04c0
GM
1207 (let* ((actions (cdr change))
1208 (file (car change))
1209 (filestat (if (authors-public-domain-p file)
1210 (concat file " (public domain)")
4d6769e1 1211 file)))
93da04c0
GM
1212 (cond ((assq :wrote actions)
1213 (setq wrote-list (cons filestat wrote-list)))
1214 ((assq :cowrote actions)
1215 (setq cowrote-list (cons filestat cowrote-list)))
1216 (t
1217 (setq changed-list
1218 (cons (cons file (cdr (assq :changed actions)))
1219 changed-list))))))
f39caf44
KS
1220 (if wrote-list
1221 (setq wrote-list (sort wrote-list 'string-lessp)))
93da04c0
GM
1222 (if cowrote-list
1223 (setq cowrote-list (sort cowrote-list 'string-lessp)))
f39caf44
KS
1224 (when changed-list
1225 (setq changed-list (sort changed-list
1226 (lambda (a b)
1227 (if (= (cdr a) (cdr b))
1228 (string-lessp (car a) (car b))
1229 (> (cdr a) (cdr b))))))
1230 (setq nchanged (length changed-list))
1231 (setq changed-list (mapcar 'car changed-list)))
1232 (if (> (- nchanged authors-many-files) 2)
1233 (setcdr (nthcdr authors-many-files changed-list)
1234 (list (format "and %d other files" (- nchanged authors-many-files)))))
1235 (setq authors-author-list
93da04c0 1236 (cons (list author wrote-list cowrote-list changed-list)
f39caf44 1237 authors-author-list)))))
3215096c 1238
3215096c
GM
1239(defun authors (root)
1240 "Extract author information from change logs and Lisp source files.
1241ROOT is the root directory under which to find the files. If called
a1506d29 1242interactively, ROOT is read from the minibuffer.
f39caf44
KS
1243Result is a buffer *Authors* containing authorship information, and a
1244buffer *Authors Errors* containing references to unknown files."
3215096c 1245 (interactive "DEmacs source directory: ")
d2f288c6 1246 (setq root (expand-file-name root))
c7efbb12 1247 (let ((logs (process-lines find-program root "-name" "ChangeLog*"))
3215096c 1248 (table (make-hash-table :test 'equal))
f39caf44
KS
1249 (buffer-name "*Authors*")
1250 authors-checked-files-alist
1251 authors-invalid-file-names)
621af279
DK
1252 (authors-add-fixed-entries table)
1253 (unless (file-exists-p (expand-file-name "src/emacs.c" root))
be3f421b
RS
1254 (unless (y-or-n-p
1255 (format "Not the root directory of Emacs: %s, continue? " root))
5a0c3f56 1256 (error "Not the root directory")))
3215096c 1257 (dolist (log logs)
77777daf 1258 (when (string-match "ChangeLog\\(.[0-9]+\\)?$" log)
3215096c
GM
1259 (message "Scanning %s..." log)
1260 (authors-scan-change-log log table)))
c7efbb12 1261 (let ((els (process-lines find-program root "-name" "*.el")))
3215096c
GM
1262 (dolist (file els)
1263 (message "Scanning %s..." file)
1264 (authors-scan-el file table)))
f39caf44 1265 (message "Generating buffer %s..." buffer-name)
3215096c
GM
1266 (set-buffer (get-buffer-create buffer-name))
1267 (erase-buffer)
f39caf44 1268 (set-buffer-file-coding-system authors-coding-system)
a1506d29 1269 (insert
f39caf44
KS
1270"Many people have contributed code included in the Free Software
1271Foundation's distribution of GNU Emacs. To show our appreciation for
1272their public spirit, we list here in alphabetical order a condensed
1273list of their contributions.\n")
574411d0 1274 (let (authors-author-list)
f39caf44 1275 (maphash #'authors-add-to-author-list table)
a1506d29 1276 (setq authors-author-list
f39caf44
KS
1277 (sort authors-author-list
1278 (lambda (a b) (string-lessp (car a) (car b)))))
1279 (dolist (a authors-author-list)
1280 (let ((author (car a))
1281 (wrote (nth 1 a))
93da04c0 1282 (cowrote (nth 2 a))
574411d0 1283 (changed (nth 3 a)))
f39caf44
KS
1284 (insert "\n" author ": ")
1285 (when wrote
1286 (insert "wrote")
1287 (dolist (file wrote)
1288 (if (> (+ (current-column) (length file)) 72)
1289 (insert "\n "))
1290 (insert " " file))
1291 (insert "\n"))
93da04c0 1292 (when cowrote
f39caf44
KS
1293 (if wrote
1294 (insert "and "))
93da04c0
GM
1295 (insert "co-wrote")
1296 (dolist (file cowrote)
1297 (if (> (+ (current-column) (length file)) 72)
1298 (insert "\n "))
1299 (insert " " file))
1300 (insert "\n"))
1301 (when changed
1302 (if (or wrote cowrote)
1303 (insert "and "))
f39caf44
KS
1304 (insert "changed")
1305 (dolist (file changed)
1306 (if (> (+ (current-column) (length file)) 72)
1307 (insert "\n "))
1308 (insert " " file))
1309 (insert "\n")))))
a1506d29 1310 (insert "\nLocal" " Variables:\ncoding: "
f39caf44
KS
1311 (symbol-name authors-coding-system) "\nEnd:\n")
1312 (message "Generating buffer %s... done" buffer-name)
d5ab63b2 1313 (unless noninteractive
f39caf44
KS
1314 (when authors-invalid-file-names
1315 (with-current-buffer (get-buffer-create "*Authors Errors*")
eef72fce 1316 (setq buffer-read-only nil)
f39caf44
KS
1317 (erase-buffer)
1318 (set-buffer-file-coding-system authors-coding-system)
1319 (insert "Unrecognized file entries found:\n\n")
0c8b414f
JB
1320 (mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n")))
1321 (sort authors-invalid-file-names 'string-lessp))
f39caf44
KS
1322 (goto-char (point-min))
1323 (compilation-mode)
1324 (message "Errors were found. See buffer %s" (buffer-name))))
d5ab63b2
GM
1325 (pop-to-buffer buffer-name))))
1326
1327
d5ab63b2
GM
1328(defun batch-update-authors ()
1329 "Produce an AUTHORS file.
1330Call this function in batch mode with two command line arguments FILE
1331and ROOT. FILE is the file to write, ROOT is the root directory of
1332the Emacs source tree, from which to build the file."
1333 (unless noninteractive
1334 (error "`batch-update-authors' is to be used only with -batch"))
1335 (when (/= (length command-line-args-left) 2)
1336 (error "Call `batch-update-authors' with the name of the file to write"))
8e13db77
EZ
1337 (let* ((file (pop command-line-args-left))
1338 (root (pop command-line-args-left)))
d5ab63b2
GM
1339 (authors root)
1340 (write-file file)))
3215096c 1341
c420eb36
GM
1342(provide 'authors)
1343
55535639 1344;;; authors.el ends here