# This script generates licence.h (containing the PuTTY licence in the
# form of macros expanding to C string literals) from the LICENCE
-# master file.
+# master file. It also regenerates the licence-related Halibut input
+# files.
use File::Basename;
+# Read the input file.
$infile = "LICENCE";
-$outfile = "licence.h";
open my $in, $infile or die "$infile: open: $!\n";
-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";
-
my @lines = ();
while (<$in>) {
chomp;
}
}
+# 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 "\n";
-die "bad format of first paragraph\n"
- unless $paras[0] =~ m!copyright ([^\.]*)\.!i;
-
-printf "#define SHORT_COPYRIGHT_DETAILS \"%s\"\n", &stringlit($1);
+printf "#define SHORT_COPYRIGHT_DETAILS \"%s\"\n", &stringlit($shortdetails);
sub stringlit {
my ($lit) = @_;
$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;
+}