blob: 5fed4b77ec31f091b4c2a99f844d6e630f1e40d5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#!/usr/bin/perl
use v5.20;
use warnings;
use utf8;
use Const::Fast;
use IPC::Run3;
use Pod::Simple::HTMLBatch;
use Unicode::UTF8 qw(encode_utf8);
const my $EMPTY => q{};
my $destination = pop @ARGV;
my @input = @ARGV;
push @input, './lib', './doc/tutorial' unless @input;
$destination //= './doc/api.html';
my $lintian_version = guess_version();
if (!-d $destination) {
mkdir $destination
or die encode_utf8("could not create directory: $!");
}
my $convert = Pod::Simple::HTMLBatch->new;
$convert->html_render_class('My::Pod::Simple::XHTML');
$convert->contents_page_start(header());
# No footer - it contains a "current time" and is thus unreproducible
$convert->contents_page_end(q{});
$convert->css_flurry(0);
$convert->batch_convert(\@input, $destination);
print encode_utf8("HTML version available at $destination/index.html\n");
sub header {
return <<"EOF";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Lintian (v$lintian_version) API doc</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body class='contentspage'>
<h1>Lintian (v$lintian_version) API doc</h1>
<p><em>Note: </em>This API is not stable between releases.</p>
EOF
}
sub guess_version {
my $version;
my $dist;
my @dpkg_command = qw{dpkg-parsechangelog -c0};
my $output;
run3(\@dpkg_command, \undef, \$output);
my @lines = split(/\n/, $output);
while (defined(my $line = shift @lines)) {
$version = $1 if $line =~ m{\A Version: \s*+ (\S++) \s* \Z}xsm;
$dist = $1 if $line =~ m{\A Distribution: \s*+ (\S++) \s* \Z}xsm;
}
if ((not defined($dist) or $dist eq 'UNRELEASED') and -d '.git') {
delete $ENV{'GITDIR'};
# For unreleased versions, git describe is probably a better
# choice when available.
my @command = qw(git describe);
my $guess;
run3(\@command, \undef, \$guess);
chomp $guess;
$version = $guess
if $guess ne $EMPTY && $guess =~ m{\A \d+\. }xsm;
# Ignore git being missing (or even failing to work)
# - the version being incorrect for non-release cases is
# not a major issue.
}
return $version;
}
package My::Pod::Simple::XHTML;
use strict;
use warnings;
use parent qw(Pod::Simple::XHTML);
# Skip the version tag (incl. a date) to get reproducible output
sub version_tag_comment {
return q{};
}
sub batch_mode_page_object_init {
my ($self) = @_;
$self->html_doctype(
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'
);
$self->html_charset('UTF-8');
return;
}
# Local Variables:
# indent-tabs-mode: nil
# cperl-indent-level: 4
# End:
# vim: syntax=perl sw=4 sts=4 sr et
|