#!/usr/local/bin/perl -w

# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

use strict;

use Tie::File;
#use Cwd 'getcwd';

die "Bad args '@ARGV'" unless (@ARGV >= 3  && @ARGV <= 4);

my ($filename, $TARGETDIR, $SVNDIR, $BUILDDESCR) = (@ARGV, "");

my (@file, $version, $lines);

tie (@file, 'Tie::File', $filename)
	or die $!;

$version  =  `svnversion -n` or die;
$version  =~ tr/M//d;
$version .=  '-' . $BUILDDESCR if $BUILDDESCR;

/^#define SVN_VER_TAG/ and s/(?<=dev build).*(?=\)"$)/-r$version/
	for @file;
/^#define SVN_VER_NUMTAG/ and s/(?<=-dev).*(?="$)/-r$version/
	for @file;

mkdir $TARGETDIR unless -d $TARGETDIR;

chdir $SVNDIR;
system "svn diff -x-p > $TARGETDIR\\$version.diff"
	and die $!;

