summaryrefslogtreecommitdiff
path: root/config/srclist-update
blob: b4ae7c0cfe38e2affb1a6983695992ca5fb93bc3 (plain)
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
#!/bin/sh
# $Id: srclist-update,v 1.3 2002-11-25 00:20:03 karl Exp $
# 
# Check for files in directory $1 being up to date, according to the
# list on stdin.  Don't actually make any changes, just show the diffs.
# 
# Source `dirname $0`/srclistvars.sh first, if it exists.

if test -n "$1"; then
  cd "$1" || exit 1
fi

verbose=false
#chicken="echo (would)"

srctmp=${TMPDIR-/tmp}/srclist.src
dsttmp=${TMPDIR-/tmp}/srclist.dst

mydir=`dirname $0`
test -r $mydir/srclistvars.sh && . $mydir/srclistvars.sh


# 
# $1 is input, output to stdout with gpl.
# 
fixlicense() \
{
    sed '/The .* is free software/,/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 2, 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, write to the Free Software Foundation,\
   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
' $1
}


# $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.
# 
fixfile() \
{
  if echo "$options" | grep -w gpl >/dev/null; then
    fixlicense $1
  else
    cat $1
  fi \
  | fgrep -v '$'"Id:" >$2
}


# 
cat | while read src dst options; do
  test -z "$dst" && continue  # skip lines without second element
  echo "$src $dst" | sed 's/#.*$//' | egrep '^\s*$' >/dev/null \
  && continue  # skip whitespace and comment-only lines
  
  src=`eval echo $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
  # write destination file dst/foo.c.
  dst=`eval echo $dst`
  test -d $dst && dst=$dst/`basename $src`
  
  # Make changes for sake of comparison.
  fixfile $src $srctmp
  test -r $dst && fixfile $dst $dsttmp
  
  # don't show license differences.
  gplsrc=$TMPDIR/`basename $src`
  fixlicense $src >$gplsrc
  cmp -s $src $gplsrc && gplsrc=$src
  
  if test ! -e $dst; then
    echo "## $gplsrc $dst  # new"
    $chicken cp -p $gplsrc $dst
  elif cmp -s $srctmp $dsttmp; then
    $verbose && echo "## $gplsrc $dst  # unchanged"
  else
    echo "## $gplsrc $dst  # changes"
    diff -c2 $dst $gplsrc
  fi
done

rm -f $srctmp $dsttmp