diff options
author | Dimitrij <kvarkas@gmail.com> | 2022-10-31 00:45:23 +0300 |
---|---|---|
committer | Dimitrij <kvarkas@gmail.com> | 2022-10-31 00:45:23 +0300 |
commit | 302fb2e8ddea1c993552c9a30c02f41d01ca54a9 (patch) | |
tree | d6cf1b32664296ef2cecda33caeafbe39e6695c1 /licence.pl | |
parent | 59105d9b26363e47f00676bd365b2ac8d4cb536a (diff) | |
parent | 4ff82ab29a22936b78510c68f544a99e677efed3 (diff) |
Diffstat (limited to 'licence.pl')
-rwxr-xr-x[-rw-r--r--] | licence.pl | 149 |
1 files changed, 84 insertions, 65 deletions
diff --git a/licence.pl b/licence.pl index e1d3a51f..f927bcb2 100644..100755 --- a/licence.pl +++ b/licence.pl @@ -1,17 +1,31 @@ -#!/usr/bin/env perl -w +#!/usr/bin/env perl # 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 warnings; use File::Basename; - -# Read the input file. -$infile = "LICENCE"; +use Getopt::Long; + +my $usage = "usage: licence.pl (--header|--licencedoc|--copyrightdoc) " . + "[-o OUTFILE]\n"; +my $mode = undef; +my $output = undef; +GetOptions("--header" => sub {$mode = "header"}, + "--licencedoc" => sub {$mode = "licencedoc"}, + "--copyrightdoc" => sub {$mode = "copyrightdoc"}, + "o|output=s" => \$output) + and defined $mode + or die $usage; + +# Read the input file. We expect to find that alongside this script. +my $infile = (dirname __FILE__) . "/LICENCE"; open my $in, $infile or die "$infile: open: $!\n"; my @lines = (); while (<$in>) { + y/\r//d; chomp; push @lines, $_; } @@ -36,76 +50,68 @@ 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. +my $out = ""; + +if ($mode eq "header") { + $out .= "/*\n"; + $out .= " * licence.h - macro definitions for the PuTTY licence.\n"; + $out .= " *\n"; + $out .= " * Generated by @{[basename __FILE__]} from $infile.\n"; + $out .= " * You should edit those files rather than editing this one.\n"; + $out .= " */\n"; + $out .= "\n"; + + $out .= "#define LICENCE_TEXT(parsep) \\\n"; + for my $i (0..$#paras) { + my $lit = &stringlit($paras[$i]); + $out .= " parsep \\\n" if $i > 0; + $out .= " \"$lit\""; + $out .= " \\" if $i < $#paras; + $out .= "\n"; + } + $out .= "\n"; -$outfile = "doc/licence.but"; -open $out, ">", $outfile or die "$outfile: open: $!\n"; -select $out; + $out .= sprintf "#define SHORT_COPYRIGHT_DETAILS \"%s\"\n", + &stringlit($shortdetails); +} elsif ($mode eq "licencedoc") { + # Write out doc/licence.but. -print "\\# Generated by @{[basename __FILE__]} from $infile.\n"; -print "\\# You should edit those files rather than editing this one.\n\n"; + $out .= "\\# Generated by @{[basename __FILE__]} from $infile.\n"; + $out .= "\\# You should edit those files rather than editing this one.\n\n"; -print "\\A{licence} PuTTY \\ii{Licence}\n\n"; + $out .= "\\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 + for my $i (0..$#paras) { + my $para = &halibutescape($paras[$i]); + if ($i == 0) { + $para =~ s!copyright!\\i{copyright}!; # index term in paragraph 1 + } + $out .= "$para\n\n"; } - print "$para\n\n"; -} - -close $out; +} elsif ($mode eq "copyrightdoc") { + # Write out doc/copy.but, which defines a macro used in the manual + # preamble blurb. -# And write out doc/copy.but, which defines a macro used in the manual -# preamble blurb. + $out .= "\\# Generated by @{[basename __FILE__]} from $infile.\n"; + $out .= "\\# You should edit those files rather than editing this one.\n\n"; -$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"; + $out .= sprintf "\\define{shortcopyrightdetails} %s\n\n", + &halibutescape($shortdetails); +} -printf "\\define{shortcopyrightdetails} %s\n\n", - &halibutescape($shortdetails); +my $outfile; +my $opened = (defined $output) ? + (open $outfile, ">", $output) : (open $outfile, ">-"); +$opened or die "$output: open: $!\n"; +print $outfile $out; +close $outfile; -close $out; +sub stringlit { + my ($lit) = @_; + $lit =~ s!\\!\\\\!g; + $lit =~ s!"!\\"!g; + return $lit; +} sub halibutescape { my ($text) = @_; @@ -113,3 +119,16 @@ sub halibutescape { $text =~ s!"([^"]*)"!\\q{$1}!g; # convert quoted strings to \q{} return $text; } + +sub write { + my ($filename, $newcontents) = @_; + if (open my $fh, "<", $filename) { + my $oldcontents = ""; + $oldcontents .= $_ while <$fh>; + close $fh; + return if $oldcontents eq $newcontents; + } + open my $fh, ">", $filename or die "$filename: open: $!\n"; + print $fh $newcontents; + close $fh; +} |