Home | History | Annotate | Download | only in bin
      1 #!/usr/bin/perl -w
      2 
      3 use strict;
      4 
      5 sub update_man_page($);
      6 sub update_bin_tool($);
      7 sub update_txt_file($);
      8 sub update_spec_file($);
      9 sub get_file_info($);
     10 
     11 our $directory = $ARGV[0];
     12 our $version = $ARGV[1];
     13 our $release = $ARGV[2];
     14 
     15 our @man_pages = ("man/gendesc.1",  "man/genhtml.1",  "man/geninfo.1",
     16 		  "man/genpng.1", "man/lcov.1", "man/lcovrc.5");
     17 our @bin_tools = ("bin/gendesc", "bin/genhtml", "bin/geninfo",
     18 		  "bin/genpng", "bin/lcov");
     19 our @txt_files = ("README");
     20 our @spec_files = ("rpm/lcov.spec");
     21 
     22 if (!defined($directory) || !defined($version) || !defined($release)) {
     23 	die("Usage: $0 <directory> <version string> <release string>\n");
     24 }
     25 
     26 foreach (@man_pages) {
     27 	print("Updating man page $_\n");
     28 	update_man_page($directory."/".$_);
     29 }
     30 foreach (@bin_tools) {
     31 	print("Updating bin tool $_\n");
     32 	update_bin_tool($directory."/".$_);
     33 }
     34 foreach (@txt_files) {
     35 	print("Updating text file $_\n");
     36 	update_txt_file($directory."/".$_);
     37 }
     38 foreach (@spec_files) {
     39 	print("Updating spec file $_\n");
     40 	update_spec_file($directory."/".$_);
     41 }
     42 print("Done.\n");
     43 
     44 sub get_file_info($)
     45 {
     46 	my ($filename) = @_;
     47 	my ($sec, $min, $hour, $year, $month, $day);
     48 	my @stat;
     49 
     50 	@stat = stat($filename);
     51 	($sec, $min, $hour, $day, $month, $year) = localtime($stat[9]);
     52 	$year += 1900;
     53 	$month += 1;
     54 
     55 	return (sprintf("%04d-%02d-%02d", $year, $month, $day),
     56 		sprintf("%04d%02d%02d%02d%02d.%02d", $year, $month, $day,
     57 			$hour, $min, $sec),
     58 		sprintf("%o", $stat[2] & 07777));
     59 }
     60 
     61 sub update_man_page($)
     62 {
     63 	my ($filename) = @_;
     64 	my @date = get_file_info($filename);
     65 	my $date_string = $date[0];
     66 	local *IN;
     67 	local *OUT;
     68 
     69 	$date_string =~ s/-/\\-/g;
     70 	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
     71 	open(OUT, ">$filename.new") ||
     72 		die("Error: cannot create $filename.new\n");
     73 	while (<IN>) {
     74 		s/\"LCOV\s+\d+\.\d+\"/\"LCOV $version\"/g;
     75 		s/\d\d\d\d\\\-\d\d\\\-\d\d/$date_string/g;
     76 		print(OUT $_);
     77 	}
     78 	close(OUT);
     79 	close(IN);
     80 	chmod(oct($date[2]), "$filename.new");
     81 	system("mv", "-f", "$filename.new", "$filename");
     82 	system("touch", "$filename", "-t", $date[1]);
     83 }
     84 
     85 sub update_bin_tool($)
     86 {
     87 	my ($filename) = @_;
     88 	my @date = get_file_info($filename);
     89 	local *IN;
     90 	local *OUT;
     91 
     92 	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
     93 	open(OUT, ">$filename.new") ||
     94 		die("Error: cannot create $filename.new\n");
     95 	while (<IN>) {
     96 		s/(our\s+\$lcov_version\s*=\s*["']).*(["'].*)$/$1LCOV version $version$2/g;
     97 		print(OUT $_);
     98 	}
     99 	close(OUT);
    100 	close(IN);
    101 	chmod(oct($date[2]), "$filename.new");
    102 	system("mv", "-f", "$filename.new", "$filename");
    103 	system("touch", "$filename", "-t", $date[1]);
    104 }
    105 
    106 sub update_txt_file($)
    107 {
    108 	my ($filename) = @_;
    109 	my @date = get_file_info($filename);
    110 	local *IN;
    111 	local *OUT;
    112 
    113 	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
    114 	open(OUT, ">$filename.new") ||
    115 		die("Error: cannot create $filename.new\n");
    116 	while (<IN>) {
    117 		s/(Last\s+changes:\s+)\d\d\d\d-\d\d-\d\d/$1$date[0]/g;
    118 		print(OUT $_);
    119 	}
    120 	close(OUT);
    121 	close(IN);
    122 	chmod(oct($date[2]), "$filename.new");
    123 	system("mv", "-f", "$filename.new", "$filename");
    124 	system("touch", "$filename", "-t", $date[1]);
    125 }
    126 
    127 sub update_spec_file($)
    128 {
    129 	my ($filename) = @_;
    130 	my @date = get_file_info($filename);
    131 	local *IN;
    132 	local *OUT;
    133 
    134 	open(IN, "<$filename") || die ("Error: cannot open $filename\n");
    135 	open(OUT, ">$filename.new") ||
    136 		die("Error: cannot create $filename.new\n");
    137 	while (<IN>) {
    138 		s/^(Version:\s*)\d+\.\d+.*$/$1$version/;
    139 		s/^(Release:\s*).*$/$1$release/;
    140 		print(OUT $_);
    141 	}
    142 	close(OUT);
    143 	close(IN);
    144 	system("mv", "-f", "$filename.new", "$filename");
    145 	system("touch", "$filename", "-t", $date[1]);
    146 }
    147