1#!/bin/sh 2# Automatically update copyright for GDB, the GNU debugger. 3# 4# Copyright (C) 2007 Free Software Foundation, Inc. 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 10# the Free Software Foundation; either version 3 of the License, or 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 19# along with this program. If not, see <http://www.gnu.org/licenses/>. 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 48byhand=" 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 62# generated, non-FSF, or otherwise special (e.g. license text, 63# or test cases which must be sensitive to line numbering). 64prunes=" 65COPYING 66COPYING.LIB 67CVS 68configure 69copying.c 70gdbarch.c 71gdbarch.h 72fdl.texi 73gpl.texi 74gdbtk 75gdb.gdbtk 76osf-share 77aclocal.m4 78step-line.inp 79step-line.c 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. 90set -f 91 92version=`$EMACS --version | sed 's/GNU Emacs \([0-9]*\)\..*/\1/; 1q'` 93if test "$version" -lt 22; then 94 echo "error: $EMACS is too old; use at least an Emacs 22.0.XX snapshot." >&2 95 exit 1 96fi 97 98if test $# -lt 1; then 99 dir=. 100else 101 dir=$1 102fi 103 104if ! test -f doc/gdbint.texinfo; then 105 echo "\"$dir\" is not a GDB source directory." 106 exit 1 107fi 108 109cat > 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 139EOF 140 141for f in $prunes $byhand; do 142 prune_opts="$prune_opts -name $f -prune -o" 143done 144 145for 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)) 154EOF 155done 156 157cat >> copytmp.el <<EOF 158(delete-file "copytmp.el") 159;; Comment out the next line to examine the message buffer. 160(kill-emacs) 161EOF 162 163exec $EMACS --no-site-file -q -l ./copytmp.el 164