163 lines
4.5 KiB
Perl
Executable File
163 lines
4.5 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
# defined by the Mozilla Public License, v. 2.0.
|
|
|
|
# This script compiles all the documentation.
|
|
#
|
|
# Required software:
|
|
#
|
|
# 1) Sphinx documentation builder (python-sphinx package on Debian/Ubuntu)
|
|
#
|
|
# 2a) rst2pdf
|
|
# or
|
|
# 2b) pdflatex, which means the following Debian/Ubuntu packages:
|
|
# * texlive-latex-base
|
|
# * texlive-latex-recommended
|
|
# * texlive-latex-extra
|
|
# * texlive-fonts-recommended
|
|
#
|
|
# All these TeX packages together are close to a gig :-| But after you've
|
|
# installed them, you can remove texlive-latex-extra-doc to save 400MB.
|
|
|
|
use 5.10.1;
|
|
use strict;
|
|
use warnings;
|
|
|
|
use File::Basename;
|
|
BEGIN { chdir dirname($0); }
|
|
|
|
use lib qw(.. ../lib lib);
|
|
|
|
use Cwd;
|
|
use File::Copy::Recursive qw(rcopy);
|
|
use File::Find;
|
|
use File::Path qw(rmtree make_path);
|
|
use File::Which qw(which);
|
|
use Pod::Simple;
|
|
|
|
use Bugzilla::Constants qw(BUGZILLA_VERSION bz_locations);
|
|
use Pod::Simple::HTMLBatch::Bugzilla;
|
|
use Pod::Simple::HTML::Bugzilla;
|
|
|
|
###############################################################################
|
|
# Subs
|
|
###############################################################################
|
|
|
|
my $error_found = 0;
|
|
sub MakeDocs {
|
|
my ($name, $cmdline) = @_;
|
|
|
|
say "Creating $name documentation ..." if defined $name;
|
|
system('make', $cmdline) == 0
|
|
or $error_found = 1;
|
|
print "\n";
|
|
}
|
|
|
|
sub make_pod {
|
|
say "Creating API documentation...";
|
|
|
|
my $converter = Pod::Simple::HTMLBatch::Bugzilla->new;
|
|
# Don't output progress information.
|
|
$converter->verbose(0);
|
|
$converter->html_render_class('Pod::Simple::HTML::Bugzilla');
|
|
|
|
my $doctype = Pod::Simple::HTML::Bugzilla->DOCTYPE;
|
|
my $content_type = Pod::Simple::HTML::Bugzilla->META_CT;
|
|
my $bz_version = BUGZILLA_VERSION;
|
|
|
|
my $contents_start = <<END_HTML;
|
|
$doctype
|
|
<html>
|
|
<head>
|
|
$content_type
|
|
<title>Bugzilla $bz_version API Documentation</title>
|
|
</head>
|
|
<body class="contentspage">
|
|
<h1>Bugzilla $bz_version API Documentation</h1>
|
|
END_HTML
|
|
|
|
$converter->contents_page_start($contents_start);
|
|
$converter->contents_page_end("</body></html>");
|
|
$converter->add_css('./../../../../style.css');
|
|
$converter->javascript_flurry(0);
|
|
$converter->css_flurry(0);
|
|
make_path('html/integrating/api');
|
|
$converter->batch_convert(['../../'], 'html/integrating/api');
|
|
|
|
print "\n";
|
|
}
|
|
|
|
###############################################################################
|
|
# Make the docs ...
|
|
###############################################################################
|
|
|
|
my @langs;
|
|
# search for sub directories which have a 'rst' sub-directory
|
|
opendir(LANGS, './');
|
|
foreach my $dir (readdir(LANGS)) {
|
|
next if (($dir eq '.') || ($dir eq '..') || (! -d $dir));
|
|
if (-d "$dir/rst") {
|
|
push(@langs, $dir);
|
|
}
|
|
}
|
|
closedir(LANGS);
|
|
|
|
my $docparent = getcwd();
|
|
foreach my $lang (@langs) {
|
|
chdir "$docparent/$lang";
|
|
|
|
make_pod();
|
|
|
|
next if grep { $_ eq '--pod-only' } @ARGV;
|
|
|
|
chdir $docparent;
|
|
|
|
# Generate extension documentation, both normal and API
|
|
my $ext_dir = bz_locations()->{'extensionsdir'};
|
|
my @ext_paths = grep { $_ !~ /\/create\.pl$/ && ! -e "$_/disabled" }
|
|
glob("$ext_dir/*");
|
|
my %extensions;
|
|
foreach my $item (@ext_paths) {
|
|
my $basename = basename($item);
|
|
if (-d "$item/docs/$lang/rst") {
|
|
$extensions{$basename} = "$item/docs/$lang/rst";
|
|
}
|
|
}
|
|
|
|
# Collect up local extension documentation into the extensions/ dir.
|
|
rmtree("$lang/rst/extensions", 0, 1);
|
|
|
|
foreach my $ext_name (keys %extensions) {
|
|
my $src = $extensions{$ext_name} . "/*";
|
|
my $dst = "$docparent/$lang/rst/extensions/$ext_name";
|
|
mkdir($dst) unless -d $dst;
|
|
rcopy($src, $dst);
|
|
}
|
|
|
|
chdir "$docparent/$lang";
|
|
|
|
MakeDocs('HTML', 'html');
|
|
MakeDocs('TXT', 'text');
|
|
|
|
if (grep { $_ eq '--with-pdf' } @ARGV) {
|
|
if (which('pdflatex')) {
|
|
MakeDocs('PDF', 'latexpdf');
|
|
}
|
|
elsif (which('rst2pdf')) {
|
|
rmtree('pdf', 0, 1);
|
|
MakeDocs('PDF', 'pdf');
|
|
}
|
|
else {
|
|
say 'pdflatex or rst2pdf not found. Skipping PDF file creation';
|
|
}
|
|
}
|
|
|
|
rmtree('doctrees', 0, 1);
|
|
}
|
|
|
|
die "Error occurred building the documentation\n" if $error_found;
|