X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/ac2def5602c14b52869a761bc0309ab55c1cc869..fc51acddb45242904128a7637dc2ab9216ba0662:/build-aux/update-b4-copyright diff --git a/build-aux/update-b4-copyright b/build-aux/update-b4-copyright index 8cc5bbad..35bacd3e 100755 --- a/build-aux/update-b4-copyright +++ b/build-aux/update-b4-copyright @@ -1,8 +1,10 @@ #!/usr/bin/perl -0777 -pi -# Update an b4_copyright invocation to include the current year. -# Copyright (C) 2009 Free Software Foundation, Inc. -# +# Update b4_copyright invocations or b4_copyright_years definitions to +# include the current year. + +# Copyright (C) 2009-2014 Free Software Foundation, Inc. + # 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 3, or (at your option) @@ -19,42 +21,42 @@ use strict; use warnings; +my $margin = 72; + my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR}; -if (!$this_year || $this_year !~ m/^\d\d(\d\d)?$/) +if (!$this_year || $this_year !~ m/^\d{4}$/) { my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ()); $this_year = $year + 1900; } -my $margin = 72; my $old_re = <<'EOF' ( (?:^|\n) + #BEFORE (?: - b4_copyright\(\[[^]]*] + b4_copyright\(\[[^][]*] | m4_(?:push|pop)def\(\[b4_copyright_years] ) + #AFTER ) (?: ,\s* ( - \[\s* (?:\d{4}(,\s*|-))* (\d{4}) \s*] + \[\s* (?:\d{4}(?:,\s*|-))* (\d{4}) \s*] ) )? \) EOF ; -while (/$old_re/x) +while (/($old_re)/gx) { - my $b4_copyright_line = $1; - my $year_lines = $2; - my $sep = $3 ? $3 : ""; + my $start = pos() - length ($1); + my $b4_copyright_line = $2; + my $year_lines = $3; my $final_year = $4; $year_lines .= ')'; - # Mark it completed. - $b4_copyright_line =~ s/b4_/b4*/g; - # If there was a second argument, it contains years, so update them. if ($final_year) { @@ -62,63 +64,89 @@ while (/$old_re/x) if ($final_year != $this_year) { # Update the year. - if ($sep eq '-' && $final_year + 1 == $this_year) - { - $year_lines =~ s/$final_year/$this_year/; - } - elsif ($sep ne '-' && $final_year + 1 == $this_year) + $year_lines =~ s/$final_year/$final_year, $this_year/; + } + + # Normalize all whitespace. + $year_lines =~ s/\s+/ /g; + + # Put spaces after commas. + $year_lines =~ s/, ?/, /g; + + # Compress to intervals. + $year_lines =~ + s/ + (\d{4}) + (?: + (,\ |-) + ((??{ + if ($2 eq '-') { '\d{4}'; } + elsif (!$3) { $1 + 1; } + else { $3 + 1; } + })) + )+ + /$1-$3/gx; + + # Format within margin. + my $year_lines_new; + my $indent = index ($b4_copyright_line, '['); + --$indent if ($b4_copyright_line =~ m/^\n/); + while (length $year_lines) + { + my $text_margin = $margin - $indent; + if (($year_lines =~ s/^(.{1,$text_margin})(?: |$)//) + || ($year_lines =~ s/^([\S]+)(?: |$)//)) { - $year_lines =~ s/$final_year/$final_year-$this_year/; + my $line = "\n" . (' 'x$indent) . $1; + ++$indent if (!$year_lines_new); + $year_lines_new .= $line; } else { - $year_lines =~ s/$final_year/$final_year, $this_year/; + # Should be unreachable, but we don't want an infinite + # loop if it can be reached. + die; } } - # Normalize all whitespace. - $year_lines =~ s/\s+/ /g; - - # Put spaces after commas. - $year_lines =~ s/, ?/, /g; - - # Format within margin. - my $year_lines_new; - my $indent = index ($b4_copyright_line, '['); - --$indent if ($b4_copyright_line =~ m/^\n/); - while (length $year_lines) - { - my $text_margin = $margin - $indent; - if (($year_lines =~ s/^(.{1,$text_margin})(?: |$)//) - || ($year_lines =~ s/^([\S]+)(?: |$)//)) - { - my $line = "\n" . (' 'x$indent) . $1; - ++$indent if (!$year_lines_new); - $year_lines_new .= $line; - } - else - { - # Should be unreachable, but we don't want an infinite - # loop if it can be reached. - die; - } - } - $year_lines = $year_lines_new; - } + # Replace the old invocation. Should never die. + die if (!s/$old_re\G/$b4_copyright_line$year_lines_new/x); - # Replace the old invocation. - s/$old_re/$b4_copyright_line$year_lines/x; + # Prepare for the next search. + pos () = $start + length ("$b4_copyright_line$year_lines_new"); + } } -if (/\bb4_copyright\(/) +while (/(\bb4_copyright\()/g) { - print STDERR - "$ARGV: warning: failed to update a b4_copyright invocation\n"; + my $start = pos () - length ($1); + my $end = pos (); + my $re = $old_re; + pos () = $start; + $re =~ s/\#BEFORE/\\G/; + if (!/$re/x) + { + my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1; + print STDERR + "$ARGV:$line: warning: failed to update a b4_copyright\n"; + } + pos () = $end; } -if (/\[b4_copyright_years]/) + +while (/(\[b4_copyright_years])/g) { - print STDERR - "$ARGV: warning: failed to update a b4_copyright_years use\n"; + my $start = pos () - length ($1); + my $end = pos (); + my $re = $old_re; + $re =~ s/\#AFTER/\\G/; + if (!/$re/x) + { + # The substr operation blows away pos (), so restoring pos () + # at the end is necessary. + my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1; + print STDERR + "$ARGV:$line: warning: failed to update a" + . " b4_copyright_years\n"; + } + pos () = $end; } - -s/b4\*copyright/b4_copyright/g;