Commit | Line | Data |
---|---|---|
4de1f557 DJ |
1 | #!/bin/sh |
2 | # Automatically update copyright for GDB, the GNU debugger. | |
3 | # | |
9b254dd1 | 4 | # Copyright (C) 2007, 2008 Free Software Foundation, Inc. |
4de1f557 DJ |
5 | # |
6 | # This file is part of GDB. | |
7 | # | |
8 | # This program is free software; you can redistribute it and/or modify | |
9 | # it under the terms of the GNU General Public License as published by | |
50efebf8 | 10 | # the Free Software Foundation; either version 3 of the License, or |
4de1f557 DJ |
11 | # (at your option) any later version. |
12 | # | |
13 | # This program is distributed in the hope that it will be useful, | |
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | # GNU General Public License for more details. | |
17 | # | |
18 | # You should have received a copy of the GNU General Public License | |
50efebf8 | 19 | # along with this program. If not, see <http://www.gnu.org/licenses/>. |
4de1f557 DJ |
20 | |
21 | # Usage: cd src/gdb && sh ./copyright.sh | |
22 | # To use a different version of emacs, set the EMACS environment | |
23 | # variable before running. | |
24 | ||
25 | # After running, update those files mentioned in $byhand by hand. | |
26 | # Always review the output of this script before committing it! | |
27 | # A useful command to review the output is: | |
28 | # filterdiff -x \*.c -x \*.cc -x \*.h -x \*.exp updates.diff | |
29 | # This removes the bulk of the changes which are most likely | |
30 | # to be correct. | |
31 | ||
32 | #### | |
33 | # Configuration | |
34 | #### | |
35 | ||
36 | # As of Emacs 22.0 (snapshot), wrapping and copyright updating do not | |
37 | # handle these file types - all reasonable: | |
38 | # Assembly (weird comment characters, e.g. "!"); .S usually has C | |
39 | # comments, which are fine) | |
40 | # Fortran ("c" comment character) | |
41 | # igen | |
42 | # Autoconf input (dnl) | |
43 | # texinfo (@c) | |
44 | # tex (%) | |
45 | # *.defs as C | |
46 | # man | |
47 | # So these need to be done by hand, as needed | |
48 | byhand=" | |
49 | *.s | |
50 | *.f | |
51 | *.f90 | |
52 | *.igen | |
53 | *.ac | |
54 | *.texi | |
55 | *.texinfo | |
56 | *.tex | |
57 | *.defs | |
58 | *.1 | |
59 | " | |
60 | ||
61 | # Files which should not be modified, either because they are | |
85bb0718 DJ |
62 | # generated, non-FSF, or otherwise special (e.g. license text, |
63 | # or test cases which must be sensitive to line numbering). | |
4de1f557 DJ |
64 | prunes=" |
65 | COPYING | |
66 | COPYING.LIB | |
67 | CVS | |
68 | configure | |
69 | copying.c | |
70 | gdbarch.c | |
71 | gdbarch.h | |
72 | fdl.texi | |
73 | gpl.texi | |
74 | gdbtk | |
75 | gdb.gdbtk | |
76 | osf-share | |
77 | aclocal.m4 | |
85bb0718 DJ |
78 | step-line.inp |
79 | step-line.c | |
4de1f557 DJ |
80 | " |
81 | ||
82 | #### | |
83 | # Main program | |
84 | #### | |
85 | ||
86 | : ${EMACS:=emacs} | |
87 | ||
88 | # Disable filename expansion, so that we can get at the glob patterns | |
89 | # from $byhand. | |
90 | set -f | |
91 | ||
92 | version=`$EMACS --version | sed 's/GNU Emacs \([0-9]*\)\..*/\1/; 1q'` | |
93 | if test "$version" -lt 22; then | |
3e9cb5f4 | 94 | echo "error: $EMACS is too old; use at least an Emacs 22.0.XX snapshot." >&2 |
4de1f557 DJ |
95 | exit 1 |
96 | fi | |
97 | ||
98 | if test $# -lt 1; then | |
99 | dir=. | |
100 | else | |
101 | dir=$1 | |
102 | fi | |
103 | ||
104 | if ! test -f doc/gdbint.texinfo; then | |
105 | echo "\"$dir\" is not a GDB source directory." | |
106 | exit 1 | |
107 | fi | |
108 | ||
109 | cat > copytmp.el <<EOF | |
110 | (load "copyright") | |
111 | (setq vc-cvs-stay-local nil | |
112 | message-log-max t) | |
113 | (setq fsf-regexp "Free[#; \t\n]+Software[#; \t\n]+Foundation,[#; \t\n]+Inc\." | |
114 | fsf-copyright-regexp (concat copyright-regexp "[#; \t\n]+" fsf-regexp) | |
115 | generated-regexp "THIS FILE IS MACHINE GENERATED WITH CGEN") | |
116 | ||
117 | (defun gdb-copyright-update (filename) | |
118 | (widen) | |
119 | (goto-char (point-min)) | |
120 | (if (and (not (re-search-forward generated-regexp (+ (point) copyright-limit) t)) | |
121 | (re-search-forward fsf-copyright-regexp (+ (point) copyright-limit) t)) | |
122 | (progn | |
123 | (setq copyright-update t | |
124 | copyright-query nil | |
125 | fill-column 78 | |
126 | start (copy-marker (match-beginning 0)) | |
127 | end (progn | |
128 | (re-search-backward fsf-regexp) | |
129 | (re-search-forward fsf-regexp | |
130 | (+ (point) copyright-limit) t) | |
131 | (point-marker)) | |
132 | fsf-start (copy-marker (match-beginning 0))) | |
133 | (replace-match "Free_Software_Foundation,_Inc." t t) | |
134 | (copyright-update) | |
135 | (fill-region-as-paragraph start end) | |
136 | (replace-string "_" " " nil fsf-start end)) | |
137 | (message (concat "WARNING: No copyright message found in " filename)))) | |
138 | ||
139 | EOF | |
140 | ||
141 | for f in $prunes $byhand; do | |
142 | prune_opts="$prune_opts -name $f -prune -o" | |
143 | done | |
144 | ||
145 | for f in $(find "$dir" "$dir/../include/gdb" "$dir/../sim" \ | |
146 | $prune_opts -type f -print); do | |
147 | cat >> copytmp.el <<EOF | |
148 | (switch-to-buffer (find-file "$f")) | |
149 | (setq backup-inhibited t) | |
150 | (setq write-file-hooks '()) | |
151 | (gdb-copyright-update "$f") | |
152 | (save-buffer) | |
153 | (kill-buffer (buffer-name)) | |
154 | EOF | |
155 | done | |
156 | ||
157 | cat >> copytmp.el <<EOF | |
158 | (delete-file "copytmp.el") | |
159 | ;; Comment out the next line to examine the message buffer. | |
160 | (kill-emacs) | |
161 | EOF | |
162 | ||
163 | exec $EMACS --no-site-file -q -l ./copytmp.el |