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