#! /bin/sh

# mkstamp - extract data from Revision and Date RCS tags in a file
# Copyright (C) 1999 Free Software Foundation, Inc.
# Alexandre Oliva <oliva@dcc.unicamp.br>
#
# This file 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 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.

# This script expects to find a line containing both Revision and Date
# tags, and it edits this line so that it looks line ` ($rev $date)'

# Command-line arguments are passed down to sed; additional -e cmd
# arguments are acceptable.  If no input filename is specified in the
# command line, sed will read from stdin.

exec sed -e '
	s%.*\$''Revision: \([^$]*\) \$.*\$''Date: \([^$]*\) \$.*% (\1 \2)%
	t end
	d
	: end' ${1+"$@"}
