]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - licence.pl
first pass
[PuTTY.git] / licence.pl
index 12d38a559fc684a9ea30eb0a5d666df661c4bfe6..e1d3a51f95bde03964431f75d65c14238a02dfbc 100644 (file)
@@ -2,24 +2,14 @@
 
 # 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;
@@ -41,6 +31,25 @@ for my $line (@lines) {
     }
 }
 
+# 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]);
@@ -51,10 +60,7 @@ for my $i (0..$#paras) {
 }
 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) = @_;
@@ -62,3 +68,48 @@ sub stringlit {
     $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;
+}