| #!/usr/bin/perl -i |
| # |
| # build/replace_license_blocks file ... |
| # |
| # Replace a <@LICENSE> ... </@LICENSE> delimited block of comment text inside |
| # an arbitrary number of files with the contents of the file named |
| # 'newlicense'. The comment character to use at start-of-line is read |
| # from the file being worked on, e.g. |
| # |
| # * <@LICENSE> |
| # |
| # will result in all lines of the license text being prefixed with " * ". |
| # |
| # do something like the following: |
| # - create a "newlicense" file with the license text as appropriate |
| # - run something like: |
| # grep -rl @LICENSE * | egrep -v 'replace_license_blocks|\.svn' | xargs build/replace_license_blocks |
| # |
| |
| # read the new license text; die if not available |
| open (IN, "<newlicense") or die "cannot read 'newlicense'"; |
| my $license = join ('', <IN>); |
| close IN; |
| |
| # remove final comment if present |
| $license =~ s/\n \*\/$//gs; |
| # remove C comment start-of-line markers |
| $license =~ s/^(?:\/\* | \* | \*\/| \*)//gm; |
| |
| # and fixup in-place |
| $in_license_block = 0; |
| |
| while (<>) { |
| if ($in_license_block) { |
| # we're waiting until the end-of-license "closing tag" |
| if (s/^.+<\/\@LICENSE>//) { |
| $in_license_block = 0; |
| } |
| } else { |
| if (s{^(.+)<\@LICENSE>\s*$}{ license_with_prefix($1); }eg) { |
| $in_license_block = 1; |
| } else { |
| # a non-block form -- will be replaced with a block |
| s{^(.+)\@LICENSE\s*$}{ license_with_prefix($1); }eg; |
| } |
| print; |
| } |
| } |
| |
| sub license_with_prefix { |
| my $prefix = shift; |
| |
| # if the prefix is "/*" replace with " *" |
| my $orig = $prefix; |
| $prefix =~ s@^(\s*)/\*(.*)$@$1 *$2@; |
| |
| my $text = $license; $text =~ s/^/$prefix/gm; |
| |
| return $orig."<\@LICENSE>\n". |
| $text. |
| $prefix."</\@LICENSE>\n"; |
| } |