Skip to content

Commit

Permalink
Autogenerate licence text in doc subdir from LICENCE.
Browse files Browse the repository at this point in the history
Now we have licence.pl, it seems to me to make very good sense to have
it generate the Halibut form(s) of the licence and copyright year as
well as the source-code forms.

As a result, I believe _no_ copies of the licence text or copyright
date exist any more except for the master one in LICENCE - so I can
completely remove the checklist section about all the places to update
it, because there's only one. Hooray!
  • Loading branch information
sgtatham committed Dec 22, 2015
1 parent 9ddd071 commit 774d37a
Show file tree
Hide file tree
Showing 6 changed files with 72 additions and 64 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@
/doc/*.hhp
/doc/*.hhc
/doc/*.hhk
/doc/licence.but
/icons/*.png
/icons/*.ico
/icons/*.icns
Expand Down
17 changes: 0 additions & 17 deletions CHECKLST.txt
Original file line number Diff line number Diff line change
@@ -1,23 +1,6 @@
Checklists for PuTTY administrative procedures
==============================================

Locations of the licence
------------------------

The PuTTY copyright notice and licence are stored in multiple
places. At the start of a new year, the copyright year needs
updating in all of them; and when someone sends a massive patch,
their name needs adding in all of them too.

The LICENCE file in the main source distribution:

- putty/LICENCE

The documentation (both the preamble blurb and the licence appendix):

- putty/doc/blurb.but
- putty/doc/licence.but

Preparing to make a release
---------------------------

Expand Down
4 changes: 2 additions & 2 deletions doc/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ else
VERSIONIDS=vids
endif

CHAPTERS := $(SITE) blurb intro gs using config pscp psftp plink pubkey
CHAPTERS += pageant errors faq feedback licence udp pgpkeys sshnames
CHAPTERS := $(SITE) copy blurb intro gs using config pscp psftp plink
CHAPTERS += pubkey pageant errors faq feedback licence udp pgpkeys sshnames
CHAPTERS += index $(VERSIONIDS)

INPUTS = $(patsubst %,%.but,$(CHAPTERS))
Expand Down
2 changes: 1 addition & 1 deletion doc/blurb.but
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ features not described here; and the \i\cw{pterm} and command-line
Unix-specific documentation that currently exists is the
\I{man pages for PuTTY tools}man pages.

\copyright This manual is copyright 2001-2015 Simon Tatham. All
\copyright This manual is copyright \shortcopyrightdetails. All
rights reserved. You may distribute this documentation under the MIT
licence. See \k{licence} for the licence text in full.
27 changes: 0 additions & 27 deletions doc/licence.but

This file was deleted.

85 changes: 68 additions & 17 deletions licence.pl
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -41,6 +31,25 @@
}
}

# 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]);
Expand All @@ -51,14 +60,56 @@
}
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;
$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;
}

0 comments on commit 774d37a

Please sign in to comment.