update from texinfo
[gnulib.git] / config / srclist-update
index 7e3c137..40619e2 100755 (executable)
@@ -1,10 +1,10 @@
 #!/bin/sh
-# $Id: srclist-update,v 1.2 2002-09-25 14:18:57 karl Exp $
-# 
-# Check for files being up to date, according to the list on stdin.
-# 
-# Source $mydir/srclistvars.sh first, if it exists, where
-# $mydir=`dirname $0`.
+# $Id: srclist-update,v 1.10 2003-07-16 12:47:48 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
@@ -13,40 +13,106 @@ fi
 verbose=false
 #chicken="echo (would)"
 
-srctmp=${TMPDIR-/tmp}/srclist.src
-dsttmp=${TMPDIR-/tmp}/srclist.dst
+: ${TMPDIR=/tmp}
+dsttmp=$TMPDIR/srclist.dst
 
 mydir=`dirname $0`
 test -r $mydir/srclistvars.sh && . $mydir/srclistvars.sh
 
-cat | while read src dst; 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`
+
+# \f
+# $1 is input, output to stdout with gpl.
+#
+fixlicense() \
+{
+    sed '
+
+  /^\([[: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 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.
+
+  /Th[ei][ s].* 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, et al.
+#
+fixfile() \
+{
+  case " $options " in
+  *' gpl '*)
+    fixlicense $1;;
+  *)
+    cat $1;;
+  esac \
+  | grep -v '[$]Id:.*[$]' >$2 2>&1
+}
+
+
+# \f
+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
-  
-  # If given src/foo.c dst, copy to dst/foo.c.
-  dst=`eval echo $dst`
+
+  # 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`
-  
-  # $ Id: lines will differ.
-  fgrep -v '$'"Id:" $src >$srctmp
-  test -r $dst && fgrep -v '$'"Id:" $dst >$dsttmp
+
+  # Do license changes and $Id removal 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 test ! -e $dst; then
-    echo "## $src $dst  # new"
-    $chicken cp -p $src $dst
+    echo "## $srctmp $dst  # new"
+    $chicken cp -p $srctmp $dst
   elif cmp -s $srctmp $dsttmp; then
-    $verbose && echo "## $src $dst  # unchanged"
+    $verbose && echo "## $srctmp $dst  # unchanged"
   else
-    echo "## $src $dst  # changes"
-    diff -c2 $dst $src
+    echo "## $srctmp $dst  # changes"
+    diff -C 2 $dst $srctmp
   fi
 done
 
-rm -f $srctmp $dsttmp
+rm -f $dsttmp