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