* lisp/emacs-lisp/authors.el (authors-fixed-entries): Addition.
[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")
80efa207 506 ("Rob Riepel" :wrote "tpu-edt.doc")
93da04c0
GM
507 ("Roland B. Roberts" :changed "files.el" "sort.el"
508 "buffer.h" "callproc.c" "dired.c" "process.c" "sysdep.c" "systty.h")
509 ;; No longer distributed.
510;;; "vmspaths.h" "build.com" "compile.com" "kepteditor.com" "precomp.com"
511;;; "vmsproc.el" :wrote "logout.com" "mailemacs.com")
4ac0ba71 512;;; ("Guillermo J. Rozas" :wrote "fakemail.c")
d5ab63b2
GM
513 ("Wolfgang Rupprecht" :changed "lisp-mode.el" "loadup.el"
514 "sort.el" "alloc.c" "callint.c"
d2f16e93
GM
515 ;; config.in renamed from config.h.in, now a generated file.
516 ;; ecrt0.c renamed from crt0.c, then removed.
517 "data.c" "fns.c"
93da04c0
GM
518 "lisp.h" "lread.c" ; "sun3.h" "ymakefile" - no longer distributed
519 "print.c" :wrote "float-sup.el" "floatfns.c")
d5ab63b2 520 ("Schlumberger Technology Corporation" :changed "gud.el")
93da04c0
GM
521 ;; Replaced by tcl.el.
522;;; ("Gregor Schmid" :wrote "tcl-mode.el")
9148ee92
GM
523 ;; No longer distributed since 24.1.
524;;; ("Rainer Schöpf" :wrote "alpha.h" "unexalpha.c")
93da04c0
GM
525 ;; No longer distributed: emacsserver.c.
526 ("William Sommerfeld" :wrote "emacsclient.c" "scribe.el")
527 ;; No longer distributed: emacsserver.c.
528 ("Leigh Stoller" :changed "emacsclient.c" "server.el")
22bcf204 529 ("Steve Strassmann" :wrote "spook.el")
d5ab63b2 530 ("Shinichirou Sugou" :changed "etags.c")
93da04c0
GM
531 ;; No longer distributed: emacsserver.c.
532 ("Sun Microsystems, Inc" :changed "emacsclient.c" "server.el"
533 :wrote "emacs.icon" "sun.el")
534 ;; No longer distributed.
535;;; "emacstool.1" "emacstool.c" "sun-curs.el"
536;;; "sun-fns.el" "sun-mouse.el" "sunfns.c")
537 ;; Renamed from sc.el.
538 ("Kayvan Sylvan" :changed "supercite.el")
539 ;; No longer distributed: emacsserver.c, tcp.c.
540 ("Spencer Thomas" :changed "emacsclient.c" "server.el"
29cf3e20 541 "dabbrev.el" "unexcoff.c" "gnus.texi")
d5ab63b2 542 ("Jonathan Vail" :changed "vc.el")
d2f16e93
GM
543 ;; No longer distributed: usg5-4.h
544 ("James Van Artsdalen" :changed "unexcoff.c")
93da04c0
GM
545 ;; No longer distributed: src/makefile.nt, lisp/makefile.nt
546 ;; winnt.el renamed to w32-fns.el; nt.[ch] to w32.[ch];
547 ;; ntheap.[ch] to w32heap.[ch]; ntinevt.c to w32inevt.c;
548 ;; ntproc.c to w32proc.c; ntterm.c to w32term.c;
549 ;; windowsnt.h to ms-w32.h.
550 ("Geoff Voelker" :wrote "w32-fns.el" "w32.c" "w32.h" "w32heap.c"
551 "w32heap.h" "w32inevt.c" "w32proc.c" "w32term.c" "ms-w32.h")
8fc29035 552 ("Morten Welinder" :wrote "dosfns.c" "[many MS-DOS files]" "msdos.h")
ed6ec139
EZ
553 ("Eli Zaretskii" :wrote "bidi.c" "[bidirectional display in xdisp.c]"
554 "[tty menus in term.c]")
93da04c0
GM
555 ;; Not using this version any more.
556;;; ("Pace Willisson" :wrote "ispell.el")
6b5e47dd
GM
557 ;; FIXME overwritten by Author:.
558 ("Bill Wohler" :cowrote "mh-e.el")
d5ab63b2 559 ("Garrett Wollman" :changed "sendmail.el")
9109bf49 560 ("Dale R. Worley" :changed "mail-extr.el")
93da04c0
GM
561 ("Jamie Zawinski" :changed "bytecode.c" :wrote "tar-mode.el"
562 :cowrote "disass.el"))
d5ab63b2
GM
563 "Actions taken from the original, manually (un)maintained AUTHORS file.")
564
565
f39caf44
KS
566(defconst authors-valid-file-names
567 '("aclocal.m4"
eef72fce 568 "build-ins.in"
0d613483 569 "Makefile"
eef72fce 570 "Makefile.noleim"
4ee02020 571 "makedist.bat"
eef72fce
GM
572 "makefile.def"
573 "makefile.nt"
3c855b96 574 "ns.mk"
0d613483
GM
575 "README"
576 ;; There were a few of these, not just the generated top-level one.
577 "configure" "config.h"
578 ;; nt/
579 "ebuild.bat" "install.bat" "fast-install.bat"
eef72fce 580 "debug.bat.in" "emacs.bat.in"
0d613483 581 "inc/sys/dir.h" "inc/gettext.h"
eef72fce
GM
582 ".gdbinit-union"
583 "alloca.s"
584 "make-delta"
585 "config.w95"
8449dd1f 586 "msysconfig.sh"
eef72fce
GM
587 "emacstool.1"
588 "align.umax"
589 "cxux-crt0.s"
590 "gould-sigvec.s"
591 "getdate.y"
592 "ymakefile"
593 "permute-index" "index.perm"
46e6650e 594 "ibmrs6000.inp"
3c855b96 595 "b2m.c" "b2m.1" "b2m.pl" "rcs-checkin.1"
c11cc37a 596 "emacs.bash" "emacs.csh" "ms-kermit"
93da04c0 597 "emacs.ico"
eef72fce 598 "emacs21.ico"
3c855b96 599 "emacs.py" "emacs2.py" "emacs3.py"
c11cc37a 600 "BABYL" "LPF" "LEDIT" "OTHER.EMACSES"
eef72fce
GM
601 "emacs16_mac.png" "emacs24_mac.png"
602 "emacs256_mac.png" "emacs32_mac.png"
603 "emacs48_mac.png" "emacs512_mac.png"
0d613483
GM
604 "ps-prin2.ps" "ps-prin3.ps"
605 "emacs.xbm" "gnu.xpm" "gnus-pointer.xbm" "gnus-pointer.xpm"
606 ;; Moved from etc/ to etc/images, and/or removed.
607 "gnus.pbm" "gnus.xbm" "gnus.xpm" "letter.pbm" "letter.xbm" "letter.xpm"
608 "splash.pbm" "splash.xbm" "splash.xpm" "splash8.xpm"
609 "images/execute.pbm" "images/execute.xpm" "images/fld-open.pbm"
610 "images/fld-open.xpm" "images/highlight.pbm" "images/highlight.xpm"
611 "images/mail.pbm" "images/mail.xpm" "images/mail/alias.pbm"
612 "images/mail/alias.xpm" "images/mail/refile.pbm"
613 "images/mail/refile.xpm" "images/page-down.pbm"
614 "images/page-down.xpm" "images/widen.pbm" "images/widen.xpm"
615 "images/gnus/bar.xbm" "images/gnus/bar.xpm"
616 "images/gnus/reverse-smile.xpm"
fea1add4 617 "revdiff" ; admin/
3c855b96 618 "vcdiff" "rcs-checkin" "tindex.pl"
fea1add4
GM
619 "mainmake" "sed1.inp" "sed2.inp" "sed3.inp" ; msdos/
620 "mac-fix-env.m"
eef72fce
GM
621 ;; Deleted vms stuff:
622 "temacs.opt" "descrip.mms" "compile.com" "link.com"
0d613483
GM
623 "compact.el" "fadr.el"
624 "calc/calc-maint.el"
625 "emacs-lisp/eieio-comp.el"
626 "erc-hecomplete.el"
627 "eshell/esh-maint.el"
628 "language/persian.el"
629 "meese.el"
630 "mh-exec.el" "mh-init.el" "mh-customize.el"
631 "net/zone-mode.el" "xesam.el"
632 "term/mac-win.el" "sup-mouse.el"
633 "url-https.el"
634 "org-mac-message.el" "org-mew.el" "org-w3m.el" "org-vm.el" "org-wl.el"
635 "org-mks.el" "org-remember.el" "org-xoxo.el" "org-docbook.el"
636 "org-freemind.el" "ox-jsinfo.el"
637 "org-exp-blocks.el" ; maybe this is ob-exp now? dunno
638 "org-lparse.el"
639 "org-special-blocks.el" "org-taskjuggler.el"
640 ;; gnus
641 "nnwfm.el" "nnlistserv.el" "nnkiboze.el" "nndb.el" "nnsoup.el"
642 "netrc.el" "password.el" "sasl-cram.el" "sasl-digest.el" "sasl-ntlm.el"
643 "sasl.el" "dig.el" "dns.el" "hex-util.el" "sha1.el" "md4.el"
644 "hmac-def.el" "hmac-md5.el" "ntlm.el" "hashcash.el" "smime-ldap.el"
645 "assistant.el" "gnus-utils.el" "tls.el" "pgg-def.el" "pgg-gpg.el"
646 "gnus-compat.el" "pgg-parse.el" "pgg-pgp.el" "pgg-pgp5.el" "pgg.el"
647 "dns-mode.el" "run-at-time.el" "gnus-encrypt.el" "sha1-el.el"
648 "gnus-gl.el" "gnus.sum.el" "proto-stream.el" "color.el" "color-lab.el"
649 "eww.el" "shr-color.el" "shr.el" "earcon.el" "gnus-audio.el" "encrypt.el"
650 ;; doc
651 "getopt.c" "texindex.c" "news.texi" "vc.texi" "vc2-xtra.texi"
652 "back.texi" "vol1.texi" "vol2.texi" "elisp-covers.texi" "two.el"
653 "front-cover-1.texi" "locals.texi" "calendar.texi" "info-stnd.texi"
654 "tasks.texi"
655 "advice.texi" "picture.texi" "texinfo.tex"
656 ;; lwlib:
657 "dispatch.c" "dispatch.h" "xrdb-cpp.c" "xrdb.c"
658 "lwlib-Xol.c" "lwlib-Xol.h" "lwlib-Xolmb.c" "lwlib-Xolmb.h"
659 "lwlib-XolmbP.h"
660 ;; lib/
661 "lib/stdio.c" "lib/gl_openssl.h" "lib/sigprocmask.c"
662 "lib/pthread_sigprocmask.c" "lib/ldtoastr.c" "lib/dummy.c"
663 "lib/ignore-value.h"
664 ;; lib-src/
665 "cvtmail.c" "digest-doc.c" "emacsserver.c" "emacstool.c" "env.c"
666 "etags-vmslib.c" "fakemail.c" "getdate.c" "getopt.h" "getopt1.c"
667 "getopt_.h" "getopt_int.h" "gettext.h" "leditcfns.c" "loadst.c"
668 "make-path.c" "qsort.c" "sorted-doc.c" "tcp.c" "timer.c" "wakeup.c"
669 "yow.c"
670 ;; etc/
671 "emacsclient.c" "etags.c" "hexl.c" "make-docfile.c" "movemail.c"
7bfc1caa 672 "test-distrib.c" "testfile"
73c1c6d7 673 "tpu-edt.doc" ; see below
eef72fce 674 )
fea1add4
GM
675 "File names which are valid, but no longer exist (or cannot be found)
676in the repository.")
f39caf44 677
0d613483
GM
678;; Note that any directory part on the RHS is retained.
679;; Cf authors-renamed-files-regexps.
680;; NB So only add a directory if needed to disambiguate.
681;; FIXME?
682;; Although perhaps we could let authors-disambiguate-file-name do that?
f39caf44
KS
683(defconst authors-renamed-files-alist
684 '(("nt.c" . "w32.c") ("nt.h" . "w32.h")
685 ("ntheap.c" . "w32heap.c") ("ntheap.h" . "w32heap.h")
686 ("ntinevt.c" . "w32inevt.c") ("ntinevt.h" . "w32inevt.h")
687 ("ntproc.c" . "w32proc.c")
688 ("w32console.c" . "w32term.c")
689 ("unexnt.c" . "unexw32.c")
690 ("s/windowsnt.h" . "s/ms-w32.h")
837b365b 691 ("s/ms-w32.h" . "inc/ms-w32.h")
0d613483 692 ("src/config.h" . "config.h")
93da04c0 693 ("winnt.el" . "w32-fns.el")
0d613483 694 ("linux.h" . "gnu-linux.h")
3c855b96 695 ("emacs.manifest" . "emacs-x86.manifest")
f39caf44 696 ("config.emacs" . "configure")
c4907a5e 697 ("configure.in" . "configure.ac")
93da04c0
GM
698 ("config.h.dist" . "config.in")
699 ("config.h-dist" . "config.in")
700 ("config.h.in" . "config.in")
0d613483
GM
701 ("debug.bat" . "debug.bat.in")
702 ("emacs.bat" . "emacs.bat.in")
703 ;; paths.h.dist -> paths.h-dist -> paths.h.in -> paths.in -> epaths.in.
704 ("paths.h.dist" . "epaths.in")
705 ("paths.h-dist" . "epaths.in")
706 ("paths.h.in" . "epaths.in")
707 ("paths.in" . "epaths.in")
eef72fce 708 ("patch1" . "sed1.inp")
0d613483
GM
709 ("INSTALL.MSYS" . "INSTALL")
710 ("server.c" . "emacsserver.c")
711 ("lib-src/etags.c" . "etags.c")
712 ;; msdos/
713 ("is-exec.c" . "is_exec.c")
92f78ea3 714 ("enriched.doc" . "enriched.txt")
f39caf44 715 ("GETTING.GNU.SOFTWARE" . "FTP")
eef72fce
GM
716 ("etc/MACHINES" . "MACHINES")
717 ("ONEWS" . "NEWS.19")
718 ("ONEWS.1" . "NEWS.1-17")
719 ("ONEWS.2" . "NEWS.1-17")
720 ("ONEWS.3" . "NEWS.18")
721 ("ONEWS.4" . "NEWS.18")
722 ("ORDERS.USA" . "ORDERS")
723 ("EUROPE" . "ORDERS")
724 ("DIFF" . "OTHER.EMACSES")
725 ("CCADIFF" . "OTHER.EMACSES")
726 ("GOSDIFF" . "OTHER.EMACSES")
73c1c6d7
GM
727 ;; Moved from lisp/tpu-doc.el to etc/tpu-edt.doc in Emacs 19.29.
728 ;; Removed in Emacs 19.30, replaced by new file etc/edt-user.doc
729 ;; (no associated ChangeLog entry).
730 ("tpu-doc.el" . "tpu-edt.doc")
eef72fce 731 ("Makefile.in.in" . "Makefile.in")
4ee02020
KS
732 ("leim-Makefile" . "leim/Makefile")
733 ("leim-Makefile.in" . "leim/Makefile.in")
92158bc3
KS
734 ("emacs-lisp/testcover-ses.el" . "tcover-ses.el")
735 ("emacs-lisp/testcover-unsafep.el" . "tcover-unsafep.el")
0d613483 736 ("progmodes/dos.el" . "bat-mode.el")
6b5e47dd
GM
737 ;; index and pick merged into search.
738 ("mh-index.el" . "mh-search.el")
739 ("mh-pick.el" . "mh-search.el")
fea1add4 740 ("font-setting.el" . "dynamic-setting.el")
0d613483
GM
741 ("help-funs.el" . "help-fns.el")
742 ("erc-notifications.el" . "erc-desktop-notifications.el")
743 ("org-complete.el" . "org-pcomplete.el")
744 ("org-export.el" . "ox.el") ; ?
745 ;; Was definitely renamed to org-latex.el, then... ?
746 ("org-export-latex.el" . "ox-latex.el") ; ?
747 ("org-exp.el" . "ox.el") ; ?
748 ("progmodes/cfengine3.el" . "cfengine.el")
cabb250c
GM
749 ("progmodes/delphi.el" . "opascal.el")
750 ("octave-inf.el" . "octave.el")
751 ("octave-mod.el" . "octave.el")
752 ("progmodes/octave-inf.el" . "octave.el")
753 ("progmodes/octave-mod.el" . "octave.el")
0d613483
GM
754 ;; Obsolete.
755 ("play/bruce.el" . "bruce.el")
756 ("patcomp.el" . "patcomp.el")
757 ;; From lisp to etc/forms.
758 ("forms-d2.el" . "forms-d2.el")
759 ("forms-pass.el" . "forms-pass.el")
760 ;; From lisp/ to etc/nxml.
761 ("nxml/test.invalid.xml" . "test-invalid.xml")
762 ("nxml/test.valid.xml" . "test-valid.xml")
763 ;; The one in lisp is eshell/eshell.el.
764 ("eshell.el" . "automated/eshell.el")
765 ("eshell/esh-test.el" . "automated/eshell.el")
766 ;; INSTALL-CVS -> .CVS -> .BZR -> .REPO
767 ("INSTALL-CVS" . "INSTALL.REPO")
768 ("INSTALL.CVS" . "INSTALL.REPO")
ac4c50ad 769 ("INSTALL.BZR" . "INSTALL.REPO")
0d613483 770 ("gnus-logo.eps" . "gnus-logo.eps") ; moved to refcards/
eef72fce
GM
771 ("build-install" . "build-ins.in")
772 ("build-install.in" . "build-ins.in")
773 ("unidata/Makefile" . "unidata/Makefile.in")
0d613483
GM
774 ;; Moved from top to etc/
775 ("CONTRIBUTE" . "CONTRIBUTE")
776 ("FTP" . "FTP")
777 ;; Moved from top to build-aux/
778 ("move-if-change" . "move-if-change")
779 ("update-subdirs" . "update-subdirs")
780 ("emacs.tex" . "emacs.texi")
781 ("faq.texi" . "efaq.texi")
782 ("major.texi" . "modes.texi")
783 ;; And from emacs/ to misc/ and back again.
784 ("ns-emacs.texi" . "macos.texi")
785 ("overrides.texi" . "gnus-overrides.texi")
786 ("xresmini.texi" . "xresources.texi")
eef72fce
GM
787 ;; Not renamed, but we only have the latter in the Emacs repo.
788 ("trampver.texi.in" . "trampver.texi")
0d613483
GM
789 ;; Renamed with same directory.
790 ("e/eterm" . "eterm-color")
791 ("e/eterm.ti" . "eterm-color.ti")
eef72fce
GM
792 ("README.txt" . "README")
793 ("emacs.names" . "JOKES")
794 ("ED.WORSHIP" . "JOKES")
795 ("GNU.JOKES" . "JOKES")
796 ("CHARACTERS" . "TODO")
0d613483
GM
797 ("images/gnus/mail_send.xpm" . "mail-send.xpm") ; still in images/gnus
798 ;; Renamed within same directory.
799 ("schema/xhtml-basic-form.rnc" . "xhtml-bform.rnc" )
800 ("schema/xhtml-basic-table.rnc" . "xhtml-btable.rnc")
801 ("schema/xhtml-list.rnc" . "xhtml-lst.rnc")
802 ("schema/xhtml-target.rnc" . "xhtml-tgt.rnc")
803 ("schema/xhtml-style.rnc" . "xhtml-xstyle.rnc")
804 ("schema/docbook-dyntbl.rnc" . "docbk-dyntbl.rnc")
805 ("schema/docbook-soextbl.rnc" . "docbk-soextbl.rn" )
fea1add4 806 ("edt-user.doc" . "edt.texi")
c11cc37a 807 ("DEV-NOTES" . "nextstep")
31a9ef2e 808 ("org/COPYRIGHT-AND-LICENSE" . "org/README")
eef72fce
GM
809 ;; Moved to different directories.
810 ("ctags.1" . "ctags.1")
811 ("etags.1" . "etags.1")
812 ("emacs.1" . "emacs.1")
813 ("emacsclient.1" . "emacsclient.1")
814 ("icons/emacs21.ico" . "emacs21.ico")
8449dd1f
GM
815 ("ja-dic" . "leim/ja-dic")
816 ("quail" . "leim/quail")
817 ;; Moved from autogen/ to admin/.
818 ("autogen/update_autogen" . "update_autogen")
819 ;; Moved from etc/ to admin/.
820 ("grammars" . "grammars")
0d613483
GM
821 ;; From etc to lisp/cedet/semantic/.
822 ("grammars/bovine-grammar.el" . "bovine/grammar.el")
823 ("grammars/wisent-grammar.el" . "wisent/grammar.el")
c11cc37a
GM
824 ;; Moved from admin/nt/ to nt/.
825 ("nt/README.W32" . "README.W32")
f39caf44
KS
826 )
827 "Alist of files which have been renamed during their lifetime.
828Elements are (OLDNAME . NEWNAME).")
829
0d613483
GM
830;; Should still test that the renamed file exists. Does it?
831;; But it might be relative to a different ChangeLog...
832;;
833;; Note that only the basename of the RHS is used.
834;; Cf authors-renamed-files-alist.
f39caf44 835(defconst authors-renamed-files-regexps
0d613483
GM
836 '(("\\`\\(arg-nonnull\\|c\\+\\+defs\\|warn-on-use\\)\\.h\\'"
837 "build-aux/snippet/\\&")
838 ("\\`\\(ebuild\\|emacs\\|install\\|fast-install\\)\\.cmd\\'" "\\1.bat")
839 ("\\`\\(book-spine\\|cl\\|forms\\|functions\\|gnus\\|sc\\|texinfo\\|vip\\)\
840\\.texinfo\\'" "\\1.texi")
841 ("\\`\\(\\(calc\\|org\\|vip\\)card\\|viperCard\\|\
842\\(\\(cs\\|fr\\|sk\\)-\\)?dired-ref\\|\
843\\(\\(cs\\|de\\|fr\\|gnus\\|pl\\|pt-br\\|ru\\|sk\\)-\\)?refcard\\|\
844\\(\\(cs\\|fr\\|sk\\)-\\)?survival\\)\\.tex\\'" "refcards/\\&")
845 ("\\`refcard-\\(de\\|pl\\)\\.tex\\'" "refcards/\\1-refcard.tex")
846 ("\\`\\(refcards/\\)?fr-drdref\\.tex\\'" "refcards/fr-dired-ref.tex")
847 ("^\\(TUTORIAL[^/]*\\)" "tutorials/\\1")
848 ("\\`themes/dev-\\(tsdh-\\(?:light\\|dark\\)-theme\\.el\\)\\'"
849 "themes/\\1")
850 ;; Moved from lisp/toolbar to etc/images.
851 ("\\`toolbar/\\(back\\|fwd\\|left\\|right\\|up\\)_arrow\
852\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/\\1-arrow\\2")
853 ("\\`toolbar/lc-\\(back\\|fwd\\|left\\|right\\|up\\)_arrow\
854\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/low-color/\\1-arrow\\2")
855 ("\\`toolbar/mail_\\(compose\\|send\\)\\(\\.[xp]bm\\)\\'"
856 "images/mail/\\1")
857 ("\\`toolbar/jump_to\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/jump-to\\1")
858 ("\\`toolbar/lc-jump_to\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
859 "images/low-color/jump-to\\1")
860 ("\\`toolbar/\\(attach\\|cancel\\|close\\|copy\\|cut\\|\
861diropen\\|exit\\|help\\|home\\|index\\|info\\|mail\\|new\\|open\\|\
862paste\\|preferences\\|print\\|save\\|saveas\\|search\\|search-replace\\|\
863spell\\|undo\\)\\(\\.\\(?:pb\\|xp\\)m\\)\\'" "images/\\1\\2")
864 ("\\`toolbar/gud-\\(break\\|cont\\|down\\|finish\\|print\\|pstar\\|\
865remove\\|run\\|until\\|up\\|watch\\)\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
866 "images/gud/\\1\\2")
867 ("\\`\\(toolbar/gud-\\|images/gud/\\)n\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
868 "images/gud/next\\2\\3")
869 ("\\`\\(toolbar/gud-\\|images/gud/\\)s\\(i\\)?\\(\\.\\(?:pb\\|xp\\)m\\)\\'"
870 "images/gud/step\\2\\3")
871 ("\\`toolbar/lc-\\([-a-z]+\\.xpm\\)\\'" "images/low-color/\\1")
872 ("^\\(tree-widget/\\(?:default\\|folder\\)/[-a-z]+\\.\\(png\\|xpm\\)\\)$"
eef72fce 873 "images/\\1")
0d613483 874 ("^\\(images/icons/\\)mac\\(emacs\\)_\\([0-9]+\\)\\(\\.png\\)"
eef72fce 875 "\\1\\2\\3_mac\\4")
0d613483 876 ("\\(images/icons/\\)emacs_\\([0-9][0-9]\\)\\.png"
eef72fce 877 "\\1hicolor/\\2x\\2/apps/emacs.png")
0d613483
GM
878 ;; Moved from leim/ to lisp/leim/.
879 ("\\`quail/[-a-z0-9]+\\.el\\'" "leim/\\&")
880 ("\\`ja-dic/ja-dic\\.el\\'" "leim/\\&")
881 ("\\`vc-\\(rcs\\|cvs\\|sccs\\)-hooks\\.el\\'" "vc/vc-\\1.el")
882 ("\\`vc-\\(annotate\\|arch\\|bzr\\|cvs\\|dav\\|dir\\|dispatcher\\|\
883git\\|hg\\|hooks\\|mtn\\|rcs\\|sccs\\|svn\\)\\.el\\'" "vc/\\&")
884 ("\\`ediff-\\(diff\\|help\\|hook\\|init\\|merg\\|mult\\|ptch\\|util\\|\
885vers\\|wind\\)\\.el\\'" "vc/\\&")
886 ("\\`pcvs-\\(defs\\|info\\|parse\\|util\\)\\.el\\'" "vc/\\&")
887 ("\\`\\(add-log\\|compare-w\\|cvs-status\\|diff-mode\\|diff\\|\
888ediff\\|emerge\\|log-edit\\|log-view\\|pcvs\\|smerge-mode\\|vc\\)\\.el\\'"
889 "vc/\\&")
890 ("\\`\\(emacs-lisp/\\)?helpers\\.el\\'" "emacs-lisp/subr-x.el")
891 ;; I assume this is (essentially) what happened, org/ChangeLog is vague.
892 ("\\`org-\\(ascii\\|beamer\\|html\\|icalendar\\|jsinfo\\|latex\
893\\|odt\\|publish\\)\\.el\\'" "ox-\\1.el")
894 ;; From test/ to test/automated/.
895 ("comint-testsuite.el" "automated/\\&")
896 ("\\`\\(bytecomp\\|font-parse\\|icalendar\\|occur\\|newsticker\\)\
897-testsuite\\.el" "automated/\\1-tests.el")
898 ;; NB lax rules should come last.
899 ("^m/m-\\(.*\\.h\\)$" "m/\\1" t)
900 ("^m-\\(.*\\.h\\)$" "\\1" t)
901 ("^s/s-\\(.*\\.h\\)$" "s/\\1" t)
902 ("^s-\\(.*\\.h\\)$" "\\1" t)
903 ("\\.\\(el\\|[ch]\\|x[pb]m\\|pbm\\)\\'" t t)
f39caf44 904 )
0d613483
GM
905 "List of regexps and rewriting rules for renamed files.
906Elements are (REGEXP REPLACE [LAX]). If REPLACE is a string, the file
f39caf44 907name matching REGEXP is replaced by REPLACE using `replace-string'.
0d613483
GM
908Otherwise, the file name is accepted as is.
909Elements with LAX non-nil are only used in `authors-lax-changelogs'.")
910
911;; It's really not worth trying to make these old logs fully valid.
912;; All the obvious real errors are gone.
913;; The main issue is _lots_ of moving around of files.
914;; Eg the progmodes/ (etc) directories did not exist before 1997.
915;; Also, lib-src/ did not exist, the files were in etc/.
916;; And various other things.
917;; Maybe this should just be any ChangeLog with a . extension,
918;; assuming we always fix logs fully before rotating them?
919(defconst authors-lax-changelogs
920 '("erc/ChangeLog\\.0[1-8]\\'"
921 "gnus/ChangeLog\\.[1-2]\\'"
922 "lisp/ChangeLog\\.\\([1-9]\\|1[0-5]\\)\\'"
923 "mh-e/ChangeLog\\.1\\'"
924 "src/ChangeLog\\.\\([1-9]\\|1[0-2]\\)\\'")
925 "List of regexps matching ChangeLogs that we do not print errors from.
926These are older ChangeLogs that have various issues.
927Additionally, for these logs we apply the `lax' elements of
928`authors-renamed-files-regexps'.")
929
f39caf44
KS
930
931(defvar authors-checked-files-alist)
932(defvar authors-invalid-file-names)
933
0d613483 934;; This has become rather yucky. :(
fea1add4
GM
935(defun authors-disambiguate-file-name (fullname)
936 "Convert FULLNAME to an unambiguous relative-name."
937 (let ((relname (file-name-nondirectory fullname))
0d613483
GM
938 dir parent)
939 (if (and (member relname authors-ambiguous-files)
940 ;; Try to identify the top-level directory.
941 ;; FIXME should really use ROOT from M-x authors.
942 (not (and (file-directory-p
943 (expand-file-name
944 "lib-src"
945 (setq dir (file-name-directory fullname))))
946 (file-directory-p (expand-file-name "etc" dir)))))
947 ;; I think it looks weird to see eg "lisp/simple.el".
948 ;; But for eg Makefile.in, we do want to say "lisp/Makefile.in".
949 (if (and (string-equal "lisp"
950 (setq parent (file-name-nondirectory
951 (directory-file-name dir))))
952 ;; TODO better to simply have hard-coded list?
953 ;; Only really Makefile.in where this applies.
954 (not (file-exists-p
955 (expand-file-name (concat "../" relname) dir))))
fea1add4 956 relname
0d613483
GM
957 ;; In case of ambiguity, just prepend the parent directory.
958 ;; FIXME obviously this is not a perfect solution.
959 (format "%s/%s" (file-name-nondirectory (directory-file-name dir))
960 relname))
fea1add4
GM
961 relname)))
962
0d613483
GM
963(defun authors-lax-changelog-p (file)
964 "Return non-nil if FILE matches `authors-lax-changelogs'."
965 (let ((list authors-lax-changelogs)
966 found)
967 (while list
968 (setq list (if (setq found (string-match-p (car list) file))
969 nil
970 (cdr list))))
971 found))
972
f39caf44 973(defun authors-canonical-file-name (file log-file pos author)
6b5e47dd 974 "Return canonical file name for FILE found in LOG-FILE.
f39caf44 975Checks whether FILE is a valid (existing) file name, has been renamed,
fea1add4 976or is on the list of removed files. Returns the non-directory part of
6b5e47dd
GM
977the file name. Only uses the LOG-FILE position POS and associated AUTHOR
978to print a message if FILE is not found."
93da04c0 979 ;; FILE should be re-checked in every different directory associated
c4444d16 980 ;; with a LOG-FILE. Eg configure.ac from src/ChangeLog is not the
93da04c0
GM
981 ;; same as that from top-level/ChangeLog.
982 (let* ((fullname (expand-file-name file (file-name-directory log-file)))
983 (entry (assoc fullname authors-checked-files-alist))
0d613483 984 laxlog relname valid)
f39caf44
KS
985 (if entry
986 (cdr entry)
987 (setq relname (file-name-nondirectory file))
0d613483
GM
988 (if (or (member file authors-valid-file-names)
989 (member relname authors-valid-file-names)
f39caf44 990 (file-exists-p file)
0d613483
GM
991 (file-exists-p relname) ; FIXME? appropriate?
992 )
fea1add4 993 (setq valid (authors-disambiguate-file-name fullname))
0d613483 994 (if (setq valid (assoc file authors-renamed-files-alist))
f39caf44 995 (setq valid (cdr valid))
0d613483
GM
996 (setq laxlog (authors-lax-changelog-p log-file))
997 (let ((rules authors-renamed-files-regexps)
998 rule)
f39caf44 999 (while rules
0d613483
GM
1000 (setq rule (car rules))
1001 (if (and (or laxlog (not (nth 2 rule)))
1002 (string-match (car rule) file))
1003 (setq valid (if (stringp (nth 1 rule))
f39caf44 1004 (file-name-nondirectory
0d613483 1005 (replace-match (nth 1 rule) t nil file))
f39caf44 1006 relname)
0d613483
GM
1007 rules nil)
1008 (setq rules (cdr rules)))))))
f39caf44 1009 (setq authors-checked-files-alist
93da04c0 1010 (cons (cons fullname valid) authors-checked-files-alist))
9109bf49 1011 (unless (or valid
eef72fce 1012 (member file authors-ignored-files)
fea1add4 1013 (authors-obsolete-file-p file)
9109bf49 1014 (string-match "[*]" file)
0d613483
GM
1015 (string-match "^[0-9.]+$" file)
1016 laxlog)
a1506d29 1017 (setq authors-invalid-file-names
f39caf44
KS
1018 (cons (format "%s:%d: unrecognized `%s' for %s"
1019 log-file
1020 (1+ (count-lines (point-min) pos))
1021 file author)
1022 authors-invalid-file-names)))
1023 valid)))
1024
d5ab63b2
GM
1025(defun authors-add-fixed-entries (table)
1026 "Add actions from `authors-fixed-entries' to TABLE."
1027 (dolist (entry authors-fixed-entries)
1028 (let ((author (car entry))
1029 action)
1030 (dolist (item (cdr entry))
1031 (if (symbolp item)
1032 (setq action item)
1033 (authors-add author item action table))))))
1034
3932b29a 1035
8a5506f2
GM
1036(defun authors-obsolete-file-p (file)
1037 "Return non-nil if FILE is obsolete.
3932b29a 1038FILE is considered obsolete if it matches one of the regular expressions
8a5506f2
GM
1039from `authors-obsolete-files-regexps'."
1040 (let (obsolete-p
1041 (regexps authors-obsolete-files-regexps))
1042 (while (and regexps (not obsolete-p))
1043 (setq obsolete-p (string-match (car regexps) file)
1044 regexps (cdr regexps)))
1045 obsolete-p))
1046
1047
3215096c
GM
1048(defun authors-add (author file action table)
1049 "Record that AUTHOR worked on FILE.
1050ACTION is a keyword symbol describing what he did. Record file,
1051author and what he did in hash table TABLE. See the description of
1052`authors-scan-change-log' for the structure of the hash table."
4ee02020
KS
1053 (unless (or (member file authors-ignored-files)
1054 (authors-obsolete-file-p file)
9c1af546 1055 (equal author ""))
8a5506f2 1056 (let* ((value (gethash author table))
f39caf44
KS
1057 (entry (assoc file value))
1058 slot)
8a5506f2 1059 (if (null entry)
f39caf44
KS
1060 (puthash author (cons (list file (cons action 1)) value) table)
1061 (if (setq slot (assoc action (cdr entry)))
1062 (setcdr slot (1+ (cdr slot)))
1063 (nconc entry (list (cons action 1))))))))
3215096c
GM
1064
1065
3215096c
GM
1066(defun authors-canonical-author-name (author)
1067 "Return a canonicalized form of AUTHOR, an author name.
eef72fce
GM
1068If AUTHOR has an entry in `authors-aliases', use that. Remove
1069email addresses. Capitalize words in the author's name, unless
1070it is found in `authors-fixed-case'."
f39caf44
KS
1071 (let* ((aliases authors-aliases)
1072 regexps realname)
3215096c 1073 (while aliases
f39caf44
KS
1074 (setq realname (car (car aliases))
1075 regexps (cdr (car aliases))
1076 aliases (cdr aliases))
1077 (while regexps
1078 (if (string-match (car regexps) author)
1079 (setq author realname
1080 regexps nil
1081 aliases nil)
1082 (setq regexps (cdr regexps))))))
1083 (when author
1084 (setq author (replace-regexp-in-string "[ \t]*[(<].*$" "" author))
d0f483e8 1085 (setq author (replace-regexp-in-string "\`[ \t]+" "" author))
f39caf44 1086 (setq author (replace-regexp-in-string "[ \t]+$" "" author))
d0f483e8
KS
1087 (setq author (replace-regexp-in-string "[ \t]+" " " author))
1088 (unless (string-match "[-, \t]" author)
1089 (setq author ""))
eef72fce
GM
1090 (or (car (member author authors-fixed-case))
1091 (capitalize author))))
f39caf44 1092
f39caf44
KS
1093(defun authors-scan-change-log (log-file table)
1094 "Scan change log LOG-FILE for author information.
3215096c
GM
1095
1096For each change mentioned in the log, add an entry to hash table TABLE
1097under the author's canonical name.
1098
1099Keys of TABLE are author names. Values are alists of entries (FILE
f39caf44
KS
1100\(ACTION . COUNT) ...). FILE is one file the author worked on. The
1101rest of the entry is a list of keyword symbols describing what he did
2603d79b 1102with the file and the number of each action:
3215096c
GM
1103
1104:wrote means the author wrote the file
2603d79b 1105:cowrote means he wrote the file in collaboration with others
f39caf44 1106:changed means he changed the file COUNT times."
3932b29a 1107
2603d79b 1108 (let* ((enable-local-variables :safe) ; for find-file, hence let*
68013cfa 1109 (enable-local-eval nil)
f39caf44
KS
1110 (existing-buffer (get-file-buffer log-file))
1111 (buffer (find-file-noselect log-file))
4d6769e1 1112 authors pos)
9a529312 1113 (with-current-buffer buffer
3215096c
GM
1114 (save-restriction
1115 (widen)
1116 (goto-char (point-min))
1117 (while (re-search-forward "^[0-9]\\|^[ \t]+\\* " nil t)
1118 (beginning-of-line)
f39caf44 1119 (setq pos (point))
3215096c 1120 (cond ((looking-at "^[0-9]+-[0-9]+-[0-9]+")
6b5e47dd
GM
1121 ;; Handle joint authorship of changes.
1122 ;; This can be a bit fragile, and is not too common.
1123 (setq authors nil)
1124 (while (progn
1125 (skip-chars-forward " \t+:0-9-")
1126 (not (looking-at "\\($\\|\\*\\|\
1127Suggested\\|Trivial\\|Version\\|Originally\\|From:\\|Patch[ \t]+[Bb]y\\)")))
1128 (push (authors-canonical-author-name
1129 (buffer-substring-no-properties
1130 (point) (line-end-position))) authors)
1131 (forward-line 1)))
3215096c
GM
1132 ((looking-at "^[ \t]+\\*")
1133 (let ((line (buffer-substring-no-properties
1134 (match-end 0) (line-end-position))))
1135 (while (and (not (string-match ":" line))
1136 (forward-line 1)
1137 (not (looking-at ":\\|^[ \t]*$")))
1138 (setq line (concat line
1139 (buffer-substring-no-properties
1140 (line-beginning-position)
1141 (line-end-position)))))
1142 (when (string-match ":" line)
1143 (setq line (substring line 0 (match-beginning 0)))
1144 (setq line (replace-regexp-in-string "[[(<{].*$" "" line))
1145 (setq line (replace-regexp-in-string "," "" line))
1146 (dolist (file (split-string line))
6b5e47dd
GM
1147 (when (setq file (authors-canonical-file-name file log-file pos (car authors)))
1148 (dolist (author authors)
1149 ;;(message "%s changed %s" author file)
1150 (authors-add author file :changed table)))))
3215096c
GM
1151 (forward-line 1)))))))
1152 (unless existing-buffer
1153 (kill-buffer buffer))))
1154
1155
1156(defun authors-scan-el (file table)
1157 "Scan Lisp file FILE for author information.
1158TABLE is a hash table to add author information to."
2603d79b
GM
1159 (let* ((existing-buffer (get-file-buffer file))
1160 (enable-local-variables :safe) ; for find-file, hence let*
1161 (enable-local-eval nil)
1162 (buffer (find-file-noselect file)))
fea1add4 1163 (setq file (authors-disambiguate-file-name (expand-file-name file)))
9a529312 1164 (with-current-buffer buffer
3215096c
GM
1165 (save-restriction
1166 (widen)
1167 (goto-char (point-min))
1168 (while (and (re-search-forward
93da04c0
GM
1169 "^;+[ \t]*\\(Authors?\\|Commentary\\|Code\\):[ \t]*" nil t)
1170 (not (member (match-string 1) '("Commentary" "Code"))))
1171 (let ((continue t)
1172 (action :wrote)
1173 authors)
1174 (while continue
1175 ;; Some entries contain a year range in front of the
1176 ;; author's name.
1177 (skip-chars-forward "-0-9 \t")
1178 (push (authors-canonical-author-name
1179 (buffer-substring-no-properties
1180 (point) (line-end-position))) authors)
1181 ;; tips.texi says the continuation line should begin
1182 ;; with a tab, but often spaces are used.
1183 (setq continue
1184 (and (zerop (forward-line 1))
1185 (looking-at ";;;?\\(\t+ *\\| +\\)[[:alnum:]]")
1186 (goto-char (1- (match-end 0)))
1187 (not (looking-at "[[:upper:]][-[:alpha:]]+:[ \t]")))))
1188 (and (> (length authors) 1)
1189 (setq action :cowrote))
1190 (mapc (lambda (author)
1191 (authors-add author file action table))
1192 authors)))))
3215096c
GM
1193 (unless existing-buffer
1194 (kill-buffer buffer))))
1195
1196
0a521885
GM
1197(defun authors-public-domain-p (file)
1198 "Return t if FILE is a file that was put in public domain."
1199 (let ((public-domain-p nil)
1200 (list authors-public-domain-files))
1201 (while (and list (not public-domain-p))
1202 (when (string-match (car list) file)
1203 (setq public-domain-p t))
1204 (setq list (cdr list)))
1205 public-domain-p))
1206
f39caf44
KS
1207(defvar authors-author-list)
1208
1209(defun authors-add-to-author-list (author changes)
1210 "Insert information about AUTHOR's work on Emacs into `authors-author-list'.
1211CHANGES is an alist of entries (FILE (ACTION . COUNT) ...), as produced by
1212`authors-scan-change-log'.
93da04c0
GM
1213The element added to `authors-author-list' is (AUTHOR WROTE CO-WROTE CHANGED),
1214where WROTE, CO-WROTE, and CHANGED are lists of the files written, co-written
1215and changed by AUTHOR."
f39caf44
KS
1216 (when author
1217 (let ((nchanged 0)
1218 wrote-list
93da04c0 1219 cowrote-list
f39caf44 1220 changed-list)
3215096c 1221 (dolist (change changes)
93da04c0
GM
1222 (let* ((actions (cdr change))
1223 (file (car change))
1224 (filestat (if (authors-public-domain-p file)
1225 (concat file " (public domain)")
4d6769e1 1226 file)))
93da04c0
GM
1227 (cond ((assq :wrote actions)
1228 (setq wrote-list (cons filestat wrote-list)))
1229 ((assq :cowrote actions)
1230 (setq cowrote-list (cons filestat cowrote-list)))
1231 (t
1232 (setq changed-list
1233 (cons (cons file (cdr (assq :changed actions)))
1234 changed-list))))))
f39caf44
KS
1235 (if wrote-list
1236 (setq wrote-list (sort wrote-list 'string-lessp)))
93da04c0
GM
1237 (if cowrote-list
1238 (setq cowrote-list (sort cowrote-list 'string-lessp)))
f39caf44
KS
1239 (when changed-list
1240 (setq changed-list (sort changed-list
1241 (lambda (a b)
1242 (if (= (cdr a) (cdr b))
1243 (string-lessp (car a) (car b))
1244 (> (cdr a) (cdr b))))))
1245 (setq nchanged (length changed-list))
1246 (setq changed-list (mapcar 'car changed-list)))
1247 (if (> (- nchanged authors-many-files) 2)
1248 (setcdr (nthcdr authors-many-files changed-list)
1249 (list (format "and %d other files" (- nchanged authors-many-files)))))
1250 (setq authors-author-list
93da04c0 1251 (cons (list author wrote-list cowrote-list changed-list)
f39caf44 1252 authors-author-list)))))
3215096c 1253
3215096c
GM
1254(defun authors (root)
1255 "Extract author information from change logs and Lisp source files.
1256ROOT is the root directory under which to find the files. If called
a1506d29 1257interactively, ROOT is read from the minibuffer.
f39caf44
KS
1258Result is a buffer *Authors* containing authorship information, and a
1259buffer *Authors Errors* containing references to unknown files."
3215096c 1260 (interactive "DEmacs source directory: ")
d2f288c6 1261 (setq root (expand-file-name root))
c7efbb12 1262 (let ((logs (process-lines find-program root "-name" "ChangeLog*"))
3215096c 1263 (table (make-hash-table :test 'equal))
f39caf44
KS
1264 (buffer-name "*Authors*")
1265 authors-checked-files-alist
1266 authors-invalid-file-names)
621af279
DK
1267 (authors-add-fixed-entries table)
1268 (unless (file-exists-p (expand-file-name "src/emacs.c" root))
be3f421b
RS
1269 (unless (y-or-n-p
1270 (format "Not the root directory of Emacs: %s, continue? " root))
5a0c3f56 1271 (error "Not the root directory")))
3215096c 1272 (dolist (log logs)
77777daf 1273 (when (string-match "ChangeLog\\(.[0-9]+\\)?$" log)
3215096c
GM
1274 (message "Scanning %s..." log)
1275 (authors-scan-change-log log table)))
c7efbb12 1276 (let ((els (process-lines find-program root "-name" "*.el")))
3215096c
GM
1277 (dolist (file els)
1278 (message "Scanning %s..." file)
1279 (authors-scan-el file table)))
f39caf44 1280 (message "Generating buffer %s..." buffer-name)
3215096c
GM
1281 (set-buffer (get-buffer-create buffer-name))
1282 (erase-buffer)
f39caf44 1283 (set-buffer-file-coding-system authors-coding-system)
a1506d29 1284 (insert
f39caf44
KS
1285"Many people have contributed code included in the Free Software
1286Foundation's distribution of GNU Emacs. To show our appreciation for
1287their public spirit, we list here in alphabetical order a condensed
1288list of their contributions.\n")
574411d0 1289 (let (authors-author-list)
f39caf44 1290 (maphash #'authors-add-to-author-list table)
a1506d29 1291 (setq authors-author-list
f39caf44
KS
1292 (sort authors-author-list
1293 (lambda (a b) (string-lessp (car a) (car b)))))
1294 (dolist (a authors-author-list)
1295 (let ((author (car a))
1296 (wrote (nth 1 a))
93da04c0 1297 (cowrote (nth 2 a))
574411d0 1298 (changed (nth 3 a)))
f39caf44
KS
1299 (insert "\n" author ": ")
1300 (when wrote
1301 (insert "wrote")
1302 (dolist (file wrote)
1303 (if (> (+ (current-column) (length file)) 72)
1304 (insert "\n "))
1305 (insert " " file))
1306 (insert "\n"))
93da04c0 1307 (when cowrote
f39caf44
KS
1308 (if wrote
1309 (insert "and "))
93da04c0
GM
1310 (insert "co-wrote")
1311 (dolist (file cowrote)
1312 (if (> (+ (current-column) (length file)) 72)
1313 (insert "\n "))
1314 (insert " " file))
1315 (insert "\n"))
1316 (when changed
1317 (if (or wrote cowrote)
1318 (insert "and "))
f39caf44
KS
1319 (insert "changed")
1320 (dolist (file changed)
1321 (if (> (+ (current-column) (length file)) 72)
1322 (insert "\n "))
1323 (insert " " file))
1324 (insert "\n")))))
a1506d29 1325 (insert "\nLocal" " Variables:\ncoding: "
f39caf44
KS
1326 (symbol-name authors-coding-system) "\nEnd:\n")
1327 (message "Generating buffer %s... done" buffer-name)
d5ab63b2 1328 (unless noninteractive
f39caf44
KS
1329 (when authors-invalid-file-names
1330 (with-current-buffer (get-buffer-create "*Authors Errors*")
eef72fce 1331 (setq buffer-read-only nil)
f39caf44
KS
1332 (erase-buffer)
1333 (set-buffer-file-coding-system authors-coding-system)
1334 (insert "Unrecognized file entries found:\n\n")
0c8b414f
JB
1335 (mapc (lambda (f) (if (not (string-match "^[A-Za-z]+$" f)) (insert f "\n")))
1336 (sort authors-invalid-file-names 'string-lessp))
f39caf44
KS
1337 (goto-char (point-min))
1338 (compilation-mode)
1339 (message "Errors were found. See buffer %s" (buffer-name))))
d5ab63b2
GM
1340 (pop-to-buffer buffer-name))))
1341
1342
d5ab63b2
GM
1343(defun batch-update-authors ()
1344 "Produce an AUTHORS file.
1345Call this function in batch mode with two command line arguments FILE
1346and ROOT. FILE is the file to write, ROOT is the root directory of
1347the Emacs source tree, from which to build the file."
1348 (unless noninteractive
1349 (error "`batch-update-authors' is to be used only with -batch"))
1350 (when (/= (length command-line-args-left) 2)
1351 (error "Call `batch-update-authors' with the name of the file to write"))
8e13db77
EZ
1352 (let* ((file (pop command-line-args-left))
1353 (root (pop command-line-args-left)))
d5ab63b2
GM
1354 (authors root)
1355 (write-file file)))
3215096c 1356
c420eb36
GM
1357(provide 'authors)
1358
55535639 1359;;; authors.el ends here