#!/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.14.0; use strict; use warnings; use File::Basename; BEGIN { chdir dirname($0); } use lib qw(.. ../lib lib ../local/lib/perl5); use Cwd; use File::Copy::Recursive qw(rcopy); 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 = < $content_type Bugzilla $bz_version API Documentation

Bugzilla $bz_version API Documentation

END_HTML $converter->contents_page_start($contents_start); $converter->contents_page_end(""); $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; 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;