summaryrefslogtreecommitdiff
path: root/gnulib/config/srclist-update
blob: b528d1a40e81d10ce2bd0c74edf9db37991696f8 (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
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
#!/bin/sh
# 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.
#
# Copyright (C) 2002-2003, 2005, 2007-2011 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 <http://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 <http://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 <http://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
  *' gpl '*)
    sed_command="$sed_command; $fixlicense";;
  esac

  sed "$sed_command" $1 >$2
}


# 
cat | while read src dst options; do
  #echo "src=$src, dst=$dst, options=$options" >&2
  case $src:$dst in
    *: ) continue;;    # skip lines without second element
    '#'* ) continue;;  # skip comment-only lines
  esac

  # Expand variables and make sure we have an input file.
  eval src=$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`

  # 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 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