123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- #!/usr/bin/env perl -w
- # This script generates licence.h (containing the PuTTY licence in the
- # form of macros expanding to C string literals) from the LICENCE
- # master file. It also regenerates the licence-related Halibut input
- # files.
- use File::Basename;
- # Read the input file.
- $infile = "LICENCE";
- open my $in, $infile or die "$infile: open: $!\n";
- my @lines = ();
- while (<$in>) {
- chomp;
- push @lines, $_;
- }
- close $in;
- # Format into paragraphs.
- my @paras = ();
- my $para = undef;
- for my $line (@lines) {
- if ($line eq "") {
- $para = undef;
- } elsif (!defined $para) {
- push @paras, $line;
- $para = \$paras[$#paras];
- } else {
- $$para .= " " . $line;
- }
- }
- # Get the copyright years and short form of copyright holder.
- die "bad format of first paragraph\n"
- unless $paras[0] =~ m!copyright ([^\.]*)\.!i;
- $shortdetails = $1;
- # Write out licence.h.
- $outfile = "licence.h";
- open my $out, ">", $outfile or die "$outfile: open: $!\n";
- select $out;
- print "/*\n";
- print " * $outfile - macro definitions for the PuTTY licence.\n";
- print " *\n";
- print " * Generated by @{[basename __FILE__]} from $infile.\n";
- print " * You should edit those files rather than editing this one.\n";
- print " */\n";
- print "\n";
- print "#define LICENCE_TEXT(parsep) \\\n";
- for my $i (0..$#paras) {
- my $lit = &stringlit($paras[$i]);
- print " parsep \\\n" if $i > 0;
- print " \"$lit\"";
- print " \\" if $i < $#paras;
- print "\n";
- }
- print "\n";
- printf "#define SHORT_COPYRIGHT_DETAILS \"%s\"\n", &stringlit($shortdetails);
- sub stringlit {
- my ($lit) = @_;
- $lit =~ s!\\!\\\\!g;
- $lit =~ s!"!\\"!g;
- return $lit;
- }
- close $out;
- # Write out doc/licence.but.
- $outfile = "doc/licence.but";
- open $out, ">", $outfile or die "$outfile: open: $!\n";
- select $out;
- print "\\# Generated by @{[basename __FILE__]} from $infile.\n";
- print "\\# You should edit those files rather than editing this one.\n\n";
- print "\\A{licence} PuTTY \\ii{Licence}\n\n";
- for my $i (0..$#paras) {
- my $para = &halibutescape($paras[$i]);
- if ($i == 0) {
- $para =~ s!copyright!\\i{copyright}!; # index term in paragraph 1
- }
- print "$para\n\n";
- }
- close $out;
- # And write out doc/copy.but, which defines a macro used in the manual
- # preamble blurb.
- $outfile = "doc/copy.but";
- open $out, ">", $outfile or die "$outfile: open: $!\n";
- select $out;
- print "\\# Generated by @{[basename __FILE__]} from $infile.\n";
- print "\\# You should edit those files rather than editing this one.\n\n";
- printf "\\define{shortcopyrightdetails} %s\n\n",
- &halibutescape($shortdetails);
- close $out;
- sub halibutescape {
- my ($text) = @_;
- $text =~ s![\\{}]!\\$&!g; # Halibut escaping
- $text =~ s!"([^"]*)"!\\q{$1}!g; # convert quoted strings to \q{}
- return $text;
- }
|