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