"Fossies" - the Fresh Open Source Software Archive

Member "bison-3.4.1/build-aux/update-b4-copyright" (26 Apr 2019, 4133 Bytes) of package /linux/misc/bison-3.4.1.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Perl source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. See also the last Fossies "Diffs" side-by-side code changes report for "update-b4-copyright": 3.2.4_vs_3.3.

    1 #!/usr/bin/perl -0777 -pi
    2 
    3 # Update b4_copyright invocations or b4_copyright_years definitions to
    4 # include the current year.
    5 
    6 # Copyright (C) 2009-2015, 2018-2019 Free Software Foundation, Inc.
    7 
    8 # This program is free software; you can redistribute it and/or modify
    9 # it under the terms of the GNU General Public License as published by
   10 # the Free Software Foundation; either version 3, or (at your option)
   11 # any later version.
   12 #
   13 # This program is distributed in the hope that it will be useful,
   14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
   15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16 # GNU General Public License for more details.
   17 #
   18 # You should have received a copy of the GNU General Public License
   19 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
   20 
   21 use strict;
   22 use warnings;
   23 
   24 my $margin = 72;
   25 
   26 my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
   27 if (!$this_year || $this_year !~ m/^\d{4}$/)
   28   {
   29     my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
   30     $this_year = $year + 1900;
   31   }
   32 my $old_re = <<'EOF'
   33   (
   34     (?:^|\n)
   35     #BEFORE
   36     (?:
   37       b4_copyright\(\[[^][]*]
   38       | m4_(?:push|pop)def\(\[b4_copyright_years]
   39     )
   40     #AFTER
   41   )
   42   (?:
   43     ,\s*
   44     (
   45       \[\s* (?:\d{4}(?:,\s*|-))* (\d{4}) \s*]
   46     )
   47   )?
   48   \)
   49 EOF
   50   ;
   51 
   52 while (/($old_re)/gx)
   53   {
   54     my $start = pos() - length ($1);
   55     my $b4_copyright_line = $2;
   56     my $year_lines = $3;
   57     my $final_year = $4;
   58     $year_lines .= ')';
   59 
   60     # If there was a second argument, it contains years, so update them.
   61     if ($final_year)
   62       {
   63         $b4_copyright_line .= ',';
   64         if ($final_year != $this_year)
   65           {
   66             # Update the year.
   67             $year_lines =~ s/$final_year/$final_year, $this_year/;
   68           }
   69 
   70         # Normalize all whitespace.
   71         $year_lines =~ s/\s+/ /g;
   72 
   73         # Put spaces after commas.
   74         $year_lines =~ s/, ?/, /g;
   75 
   76         # Compress to intervals.
   77         $year_lines =~
   78           s/
   79             (\d{4})
   80             (?:
   81               (,\ |-)
   82               ((??{
   83                 if    ($2 eq '-') { '\d{4}'; }
   84                 elsif (!$3)       { $1 + 1;  }
   85                 else              { $3 + 1;  }
   86               }))
   87             )+
   88           /$1-$3/gx;
   89 
   90         # Format within margin.
   91         my $year_lines_new;
   92         my $indent = index ($b4_copyright_line, '[');
   93         --$indent if ($b4_copyright_line =~ m/^\n/);
   94         while (length $year_lines)
   95           {
   96             my $text_margin = $margin - $indent;
   97             if (($year_lines =~ s/^(.{1,$text_margin})(?: |$)//)
   98                 || ($year_lines =~ s/^([\S]+)(?: |$)//))
   99               {
  100                 my $line = "\n" . (' 'x$indent) . $1;
  101                 ++$indent if (!$year_lines_new);
  102                 $year_lines_new .= $line;
  103               }
  104             else
  105               {
  106                 # Should be unreachable, but we don't want an infinite
  107                 # loop if it can be reached.
  108                 die;
  109               }
  110           }
  111 
  112         # Replace the old invocation.  Should never die.
  113         die if (!s/$old_re\G/$b4_copyright_line$year_lines_new/x);
  114 
  115         # Prepare for the next search.
  116         pos () = $start + length ("$b4_copyright_line$year_lines_new");
  117       }
  118   }
  119 
  120 while (/(\bb4_copyright\()/g)
  121   {
  122     my $start = pos () - length ($1);
  123     my $end = pos ();
  124     my $re = $old_re;
  125     pos () = $start;
  126     $re =~ s/\#BEFORE/\\G/;
  127     if (!/$re/x)
  128       {
  129         my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1;
  130         print STDERR
  131           "$ARGV:$line: warning: failed to update a b4_copyright\n";
  132       }
  133     pos () = $end;
  134   }
  135 
  136 while (/(\[b4_copyright_years])/g)
  137   {
  138     my $start = pos () - length ($1);
  139     my $end = pos ();
  140     my $re = $old_re;
  141     $re =~ s/\#AFTER/\\G/;
  142     if (!/$re/x)
  143       {
  144         # The substr operation blows away pos (), so restoring pos ()
  145         # at the end is necessary.
  146         my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1;
  147         print STDERR
  148           "$ARGV:$line: warning: failed to update a"
  149           . " b4_copyright_years\n";
  150       }
  151     pos () = $end;
  152   }