makedocs.pl 6.52 KB
Newer Older
1
#!/usr/bin/perl -w
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
# -*- Mode: perl; indent-tabs-mode: nil -*-
#
# The contents of this file are subject to the Mozilla Public
# License Version 1.1 (the "License"); you may not use this file
# except in compliance with the License. You may obtain a copy of
# the License at http://www.mozilla.org/MPL/
#
# Software distributed under the License is distributed on an "AS
# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
# implied. See the License for the specific language governing
# rights and limitations under the License.
#
# The Original Code is the Bugzilla Bug Tracking System.
#
# The Initial Developer of the Original Code is Netscape Communications
# Corporation. Portions created by Netscape are
# Copyright (C) 1998 Netscape Communications Corporation. All
# Rights Reserved.
#
# Contributor(s): Matthew Tuck <matty@chariot.net.au>
22
#                 Jacob Steenhagen <jake@bugzilla.org>
23
#                 Colin Ogilvie <colin.ogilvie@gmail.com>
24
#                 Max Kanat-Alexander <mkanat@bugzilla.org>
25 26 27 28 29

# This script compiles all the documentation.

use strict;

30 31 32 33 34 35 36
# We need to be in this directory to use our libraries.
BEGIN {
    require File::Basename;
    import File::Basename qw(dirname);
    chdir dirname($0);
}

37
use lib qw(.. ../lib lib);
38 39 40 41 42 43 44 45 46 47 48 49 50

# We only compile our POD if Pod::Simple is installed. We do the checks
# this way so that if there's a compile error in Pod::Simple::HTML::Bugzilla,
# makedocs doesn't just silently fail, but instead actually tells us there's
# a compile error.
my $pod_simple;
if (eval { require Pod::Simple }) {
    require Pod::Simple::HTMLBatch::Bugzilla;
    require Pod::Simple::HTML::Bugzilla;
    $pod_simple = 1;
};

use Bugzilla::Install::Requirements 
51
    qw(REQUIRED_MODULES OPTIONAL_MODULES);
52
use Bugzilla::Constants qw(DB_MODULE BUGZILLA_VERSION);
53 54 55 56 57 58 59 60 61 62 63 64 65

###############################################################################
# Generate minimum version list
###############################################################################

my $modules = REQUIRED_MODULES;
my $opt_modules = OPTIONAL_MODULES;

open(ENTITIES, '>', 'xml/bugzilla.ent') or die('Could not open xml/bugzilla.ent: ' . $!);
print ENTITIES '<?xml version="1.0"?>' ."\n\n";
print ENTITIES '<!-- Module Versions -->' . "\n";
foreach my $module (@$modules, @$opt_modules)
{
66
    my $name = $module->{'module'};
67 68 69 70 71 72 73
    $name =~ s/::/-/g;
    $name = lc($name);
    #This needs to be a string comparison, due to the modules having
    #version numbers like 0.9.4
    my $version = $module->{'version'} eq 0 ? 'any' : $module->{'version'};
    print ENTITIES '<!ENTITY min-' . $name . '-ver "'.$version.'">' . "\n";
}
74

75 76 77 78
# CGI is a special case, because it has an optional version *and* a required
# version.
my ($cgi_opt) = grep($_->{package} eq 'CGI', @$opt_modules);
print ENTITIES '<!ENTITY min-mp-cgi-ver "' . $cgi_opt->{version} . '">' . "\n";
79

80 81 82 83
print ENTITIES "\n <!-- Database Versions --> \n";

my $db_modules = DB_MODULE;
foreach my $db (keys %$db_modules) {
84 85
    my $dbd  = $db_modules->{$db}->{dbd};
    my $name = $dbd->{package};
86
    $name = lc($name);
87
    my $version    = $dbd->{version} || 'any';
88 89 90 91 92
    my $db_version = $db_modules->{$db}->{'db_version'};
    print ENTITIES '<!ENTITY min-' . $name . '-ver "'.$version.'">' . "\n";
    print ENTITIES '<!ENTITY min-' . lc($db) . '-ver "'.$db_version.'">' . "\n";
}
close(ENTITIES);
93 94 95 96 97

###############################################################################
# Environment Variable Checking
###############################################################################

98 99
my ($JADE_PUB, $LDP_HOME, $build_docs);
$build_docs = 1;
100 101 102 103
if (defined $ENV{JADE_PUB} && $ENV{JADE_PUB} ne '') {
    $JADE_PUB = $ENV{JADE_PUB};
}
else {
104 105 106
    print "To build 'The Bugzilla Guide', you need to set the ";
    print "JADE_PUB environment variable first.\n";
    $build_docs = 0;
107 108 109 110 111 112
}

if (defined $ENV{LDP_HOME} && $ENV{LDP_HOME} ne '') {
    $LDP_HOME = $ENV{LDP_HOME};
}
else {
113 114 115
    print "To build 'The Bugzilla Guide', you need to set the ";
    print "LDP_HOME environment variable first.\n";
    $build_docs = 0;
116 117 118 119 120 121
}

###############################################################################
# Subs
###############################################################################

122
sub MakeDocs {
123 124 125

    my ($name, $cmdline) = @_;

126
    print "Creating $name documentation ...\n" if defined $name;
127 128 129 130 131 132
    print "$cmdline\n\n";
    system $cmdline;
    print "\n";

}

133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
sub make_pod {

    print "Creating API documentation...\n";

    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);
    $converter->batch_convert(['../'], 'html/api/');

    print "\n";
}

167 168 169 170
###############################################################################
# Make the docs ...
###############################################################################

171 172 173 174 175 176 177 178 179
if (!-d 'txt') {
    unlink 'txt';
    mkdir 'txt', 0755;
}
if (!-d 'pdf') {
    unlink 'pdf';
    mkdir 'pdf', 0755;
}

180
make_pod() if $pod_simple;
181
exit unless $build_docs;
182

183 184 185
chdir 'html';

MakeDocs('separate HTML', "jade -t sgml -i html -d $LDP_HOME/ldp.dsl\#html " .
186
	 "$JADE_PUB/xml.dcl ../xml/Bugzilla-Guide.xml");
187 188
MakeDocs('big HTML', "jade -V nochunks -t sgml -i html -d " .
         "$LDP_HOME/ldp.dsl\#html $JADE_PUB/xml.dcl " .
189
	 "../xml/Bugzilla-Guide.xml > Bugzilla-Guide.html");
190
MakeDocs('big text', "lynx -dump -justify=off -nolist Bugzilla-Guide.html " .
191
	 "> ../txt/Bugzilla-Guide.txt");
192

193
if (! grep($_ eq "--with-pdf", @ARGV)) {
194 195 196 197 198 199 200
    exit;
}

MakeDocs('PDF', "jade -t tex -d $LDP_HOME/ldp.dsl\#print $JADE_PUB/xml.dcl " .
         '../xml/Bugzilla-Guide.xml');
chdir '../pdf';
MakeDocs(undef, 'mv ../xml/Bugzilla-Guide.tex .');
201 202 203
MakeDocs(undef, 'pdfjadetex Bugzilla-Guide.tex');
MakeDocs(undef, 'pdfjadetex Bugzilla-Guide.tex');
MakeDocs(undef, 'pdfjadetex Bugzilla-Guide.tex');
204
MakeDocs(undef, 'rm Bugzilla-Guide.tex Bugzilla-Guide.log Bugzilla-Guide.aux Bugzilla-Guide.out');
205