15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/perl -w
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)use strict;
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_man_page($);
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_bin_tool($);
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_txt_file($);
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_spec_file($);
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub get_file_info($);
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our $directory = $ARGV[0];
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our $version = $ARGV[1];
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our $release = $ARGV[2];
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our @man_pages = ("man/gendesc.1",  "man/genhtml.1",  "man/geninfo.1",
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  "man/genpng.1", "man/lcov.1", "man/lcovrc.5");
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our @bin_tools = ("bin/gendesc", "bin/genhtml", "bin/geninfo",
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		  "bin/genpng", "bin/lcov");
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our @txt_files = ("README");
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)our @spec_files = ("rpm/lcov.spec");
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if (!defined($directory) || !defined($version) || !defined($release)) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	die("Usage: $0 <directory> <version string> <release string>\n");
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)foreach (@man_pages) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	print("Updating man page $_\n");
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	update_man_page($directory."/".$_);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)foreach (@bin_tools) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	print("Updating bin tool $_\n");
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	update_bin_tool($directory."/".$_);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)foreach (@txt_files) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	print("Updating text file $_\n");
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	update_txt_file($directory."/".$_);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)foreach (@spec_files) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	print("Updating spec file $_\n");
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	update_spec_file($directory."/".$_);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)print("Done.\n");
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub get_file_info($)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my ($filename) = @_;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my ($sec, $min, $hour, $year, $month, $day);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my @stat;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	@stat = stat($filename);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	($sec, $min, $hour, $day, $month, $year) = localtime($stat[9]);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$year += 1900;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$month += 1;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	return (sprintf("%04d-%02d-%02d", $year, $month, $day),
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		sprintf("%04d%02d%02d%02d%02d.%02d", $year, $month, $day,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)			$hour, $min, $sec),
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		sprintf("%o", $stat[2] & 07777));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_man_page($)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my ($filename) = @_;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my @date = get_file_info($filename);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my $date_string = $date[0];
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *IN;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *OUT;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	$date_string =~ s/-/\\-/g;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(OUT, ">$filename.new") ||
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		die("Error: cannot create $filename.new\n");
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	while (<IN>) {
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		s/\"LCOV\s+\d+\.\d+\"/\"LCOV $version\"/g;
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		s/\d\d\d\d\\\-\d\d\\\-\d\d/$date_string/g;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		print(OUT $_);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(OUT);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(IN);
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	chmod(oct($date[2]), "$filename.new");
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("mv", "-f", "$filename.new", "$filename");
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("touch", "$filename", "-t", $date[1]);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_bin_tool($)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my ($filename) = @_;
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my @date = get_file_info($filename);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *IN;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *OUT;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(OUT, ">$filename.new") ||
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		die("Error: cannot create $filename.new\n");
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	while (<IN>) {
963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)		s/(our\s+\$lcov_version\s*=\s*["']).*(["'].*)$/$1LCOV version $version$2/g;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		print(OUT $_);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(OUT);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(IN);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	chmod(oct($date[2]), "$filename.new");
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("mv", "-f", "$filename.new", "$filename");
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("touch", "$filename", "-t", $date[1]);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_txt_file($)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my ($filename) = @_;
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my @date = get_file_info($filename);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *IN;
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *OUT;
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(OUT, ">$filename.new") ||
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		die("Error: cannot create $filename.new\n");
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	while (<IN>) {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		s/(Last\s+changes:\s+)\d\d\d\d-\d\d-\d\d/$1$date[0]/g;
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		print(OUT $_);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(OUT);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(IN);
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	chmod(oct($date[2]), "$filename.new");
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("mv", "-f", "$filename.new", "$filename");
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("touch", "$filename", "-t", $date[1]);
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)sub update_spec_file($)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my ($filename) = @_;
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	my @date = get_file_info($filename);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *IN;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	local *OUT;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	open(OUT, ">$filename.new") ||
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		die("Error: cannot create $filename.new\n");
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	while (<IN>) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		s/^(Version:\s*)\d+\.\d+.*$/$1$version/;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		s/^(Release:\s*).*$/$1$release/;
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)		print(OUT $_);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	}
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(OUT);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	close(IN);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("mv", "-f", "$filename.new", "$filename");
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)	system("touch", "$filename", "-t", $date[1]);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
147