copy strdup.c from libc again.
[gnulib.git] / config / srclist-update
1 #!/bin/sh
2 # $Id: srclist-update,v 1.5 2002-11-26 22:58:57 karl Exp $
3 #
4 # Check for files in directory $1 being up to date, according to the
5 # list on stdin.  Don't actually make any changes, just show the diffs.
6 #
7 # Source `dirname $0`/srclistvars.sh first, if it exists.
8
9 if test -n "$1"; then
10   cd "$1" || exit 1
11 fi
12
13 verbose=false
14 #chicken="echo (would)"
15
16 : ${TMPDIR=/tmp}
17 srctmp=$TMPDIR/srclist.src
18 dsttmp=$TMPDIR/srclist.dst
19
20 mydir=`dirname $0`
21 test -r $mydir/srclistvars.sh && . $mydir/srclistvars.sh
22
23
24\f
25 # $1 is input, output to stdout with gpl.
26 #
27 fixlicense() \
28 {
29     sed '/The .* is free software/,/USA\.  *\*\//c\
30    This program is free software; you can redistribute it and/or modify\
31    it under the terms of the GNU General Public License as published by\
32    the Free Software Foundation; either version 2, or (at your option)\
33    any later version.\
34 \
35    This program is distributed in the hope that it will be useful,\
36    but WITHOUT ANY WARRANTY; without even the implied warranty of\
37    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\
38    GNU General Public License for more details.\
39 \
40    You should have received a copy of the GNU General Public License along\
41    with this program; if not, write to the Free Software Foundation,\
42    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
43 ' $1
44 }
45
46
47 # $1 is input file, $2 is output.
48 # Remove $Id lines, since they'll differ between source locations.
49 # If $options contains "gpl", change the license to be the standard
50 # GPL.  We use this for libc files.
51 #
52 fixfile() \
53 {
54   if echo "$options" | grep -w gpl >/dev/null; then
55     fixlicense $1
56   else
57     cat $1
58   fi \
59   | fgrep -v '$'"Id:" >$2
60 }
61
62
63\f
64 cat | while read src dst options; do
65   test -z "$dst" && continue  # skip lines without second element
66   echo "$src $dst" | sed 's/#.*$//' | egrep '^\s*$' >/dev/null \
67   && continue  # skip whitespace and comment-only lines
68
69   src=`eval echo $src`
70   if test ! -r $src; then
71     echo "$0: cannot read $src" >&2
72     continue
73   fi
74
75   # Ignore subdirs in src dir.  E.g., if input spec is
76   #   src/subdir/foo.c dst
77   # write destination file dst/foo.c.
78   dst=`eval echo $dst`
79   test -d $dst && dst=$dst/`basename $src`
80
81   # Make changes for sake of comparison.
82   fixfile $src $srctmp
83   test -r $dst && fixfile $dst $dsttmp
84
85   # don't show license differences.
86   gplsrc=$TMPDIR/`basename $src`
87   fixlicense $src >$gplsrc
88   cmp -s $src $gplsrc && gplsrc=$src
89
90   if test ! -e $dst; then
91     echo "## $gplsrc $dst  # new"
92     $chicken cp -p $gplsrc $dst
93   elif cmp -s $srctmp $dsttmp; then
94     $verbose && echo "## $gplsrc $dst  # unchanged"
95   else
96     echo "## $gplsrc $dst  # changes"
97     diff -c2 $dst $gplsrc
98   fi
99 done
100
101 rm -f $srctmp $dsttmp