Branch
Hash :
7b089321
Author :
Date :
2025-01-01T09:24:36
maint: run 'make update-copyright'
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
#!/bin/sh
# Usage: ./srclist-update DIR
# Check for files in directory DIR being up to date, according to the
# list on stdin. Don't actually make any changes, just show the diffs.
# This script is used in gnulib and texinfo; the input files are named
# srclist.txt.
# Format of srclist.txt:
# Empty (or only whitespace) input lines are ignored.
# Lines beginning with # are ignored.
# Lines with just one word are ignored.
# Otherwise, the line has two or more whitespace-separated words:
# - the first word is the source directory, which can be a top-level
# directory of source archive,
# - the second word is the source file name relative to the source
# directory,
# - the third word is the destination, either as a directory (to be
# combined with the basename of the the source file name) or as a
# file name that includes the basename, and
# - other optional words are options.
# The possible options are
# - "gpl" (to replace the license with the GPL)
# - "doclicense" (to replace @include doclicense.texi with fdl.texi)
# - "strip-trailing-space" (to strip trailing white space from lines)
# - "release" (to use the release version instead of the development
# version).
# Unrecognized options are ignored.
# $VARIABLE expansions are done (with sh eval).
# Copyright (C) 2002-2003, 2005, 2007-2025 Free Software Foundation, Inc.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# Originally written by Karl Berry.
if test -n "$1"; then
cd "$1" || exit 1
fi
verbose=false
#chicken="echo (would)"
: "${TMPDIR=/tmp}"
dsttmp=$TMPDIR/srclist.dst
# Source `dirname $0`/srclistvars.sh first, if it exists.
mydir=`dirname $0`
test -r $mydir/srclistvars.sh && . $mydir/srclistvars.sh
#
# sed command to fix the license to be GPL.
fixlicense='
/^[[:space:]]*#[[:space:]]*Th[ei][ s].* is free software/,/^[[:space:]]*#.*USA\./c\
# This program is free software: you can redistribute it and/or modify\
# it under the terms of the GNU General Public License as published by\
# the Free Software Foundation, either version 3 of the License, or\
# (at your option) any later version.\
#\
# This program is distributed in the hope that it will be useful,\
# but WITHOUT ANY WARRANTY; without even the implied warranty of\
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\
# GNU General Public License for more details.\
#\
# You should have received a copy of the GNU General Public License\
# along with this program. If not, see <https://www.gnu.org/licenses/>.
/Th[ei][ s].* is free software/,/\*\//c\
This program is free software: you can redistribute it and/or modify\
it under the terms of the GNU General Public License as published by\
the Free Software Foundation, either version 3 of the License, or\
(at your option) any later version.\
\
This program is distributed in the hope that it will be useful,\
but WITHOUT ANY WARRANTY; without even the implied warranty of\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\
GNU General Public License for more details.\
\
You should have received a copy of the GNU General Public License\
along with this program. If not, see <https://www.gnu.org/licenses/>. */
'
# sed command to remove lines containing $Id lines.
# Quote the $ so that CVS does not expand it in this script.
remove_id_lines='/[$]Id:.*[$]/d'
# $1 is input file, $2 is output.
# Remove $Id lines, since they'll differ between source
# locations. If $options contains "gpl", change the license to be the
# standard GPL. We use this for libc files, et al.
#
fixfile() \
{
sed_command="$remove_id_lines"
case " $options " in
*' strip-trailing-space '*)
sed_command="$sed_command; s/[[:space:]]*\$//";;
esac
case " $options " in
*' gpl '*)
sed_command="$sed_command; $fixlicense";;
*' doclicense '*)
sed_command="$sed_command; s/@include doclicense.texi/@include fdl.texi/";;
esac
sed "$sed_command" $1 >$2-t && mv $2-t $2
}
#
cat | while read top src dst options; do
#echo "top=$top, src=$src, dst=$dst, options=$options" >&2
case $top:$src:$dst in
*: ) continue;; # skip lines without last element
'#'* ) continue;; # skip comment-only lines
esac
release=false
case " $options " in
*' release '*)
release=true
;;
esac
eval top=$top
if $release && test ! -d $top/.git; then
echo "$0: 'release' option only works with git checkout"
release=false
fi
# Expand variables and make sure we have an input file.
src1=$src
eval src=$top/$src
if test ! -r $src; then
echo "$0: cannot read $src" >&2
continue
fi
# Ignore subdirs in src dir. E.g., if input spec is
# src/subdir/foo.c dst
# then write destination file dst/foo.c.
eval dst=$dst
test -d $dst && dst=$dst/`basename $src`
if $release; then
rev=$(git --git-dir=$top/.git describe --abbrev=0)
reltmp=$TMPDIR/`basename $src1`:$rev
git --git-dir=$top/.git show $rev:$src1 > $reltmp
fixfile $reltmp $reltmp
fi
# Fix files in both src and dst, for the sake
# of a clean comparison.
srctmp=$TMPDIR/`basename $src`
fixfile $src $srctmp
test -r $dst && fixfile $dst $dsttmp
# if src was executable, make dst executable, to placate git.
test -x $src && chmod a+x $dst
if test ! -e $dst; then
echo "## $srctmp $dst # new"
$chicken cp -p $srctmp $dst
elif $release && cmp -s $reltmp $dsttmp; then
$verbose && echo "## $reltmp $dst # unchanged"
elif cmp -s $srctmp $dsttmp; then
$verbose && echo "## $srctmp $dst # unchanged"
else
echo "## $srctmp $dst # changes"
diff -C 2 $dst $srctmp
fi
done
rm -f $dsttmp