Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'licence.pl')
-rwxr-xr-x[-rw-r--r--]licence.pl149
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;
+}