makedocs.pl 6.99 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

# This script compiles all the documentation.

use strict;
29
use Cwd;
30

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

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

# 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 
52
    qw(REQUIRED_MODULES OPTIONAL_MODULES);
53
use Bugzilla::Constants qw(DB_MODULE BUGZILLA_VERSION);
54 55 56 57 58 59 60 61

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

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

62
open(ENTITIES, '>', 'bugzilla.ent') or die('Could not open bugzilla.ent: ' . $!);
63 64 65 66
print ENTITIES '<?xml version="1.0"?>' ."\n\n";
print ENTITIES '<!-- Module Versions -->' . "\n";
foreach my $module (@$modules, @$opt_modules)
{
67
    my $name = $module->{'module'};
68 69 70 71 72 73 74
    $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";
}
75

76 77 78 79
print ENTITIES "\n <!-- Database Versions --> \n";

my $db_modules = DB_MODULE;
foreach my $db (keys %$db_modules) {
80
    my $dbd  = $db_modules->{$db}->{dbd};
81 82
    my $name = $dbd->{module};
    $name =~ s/::/-/g;
83
    $name = lc($name);
84
    my $version    = $dbd->{version} || 'any';
85 86 87 88 89
    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);
90 91 92 93 94

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

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

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

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

119
sub MakeDocs {
120 121 122

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

123
    print "Creating $name documentation ...\n" if defined $name;
124 125 126 127 128 129
    print "$cmdline\n\n";
    system $cmdline;
    print "\n";

}

130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
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>");
156
    $converter->add_css('./../../../style.css');
157 158
    $converter->javascript_flurry(0);
    $converter->css_flurry(0);
159
    $converter->batch_convert(['../../'], 'html/api/');
160 161 162 163

    print "\n";
}

164 165 166 167
###############################################################################
# Make the docs ...
###############################################################################

168 169 170 171 172 173 174 175
my @langs;
# search for sub directories which have a 'xml' sub-directory
opendir(LANGS, './');
foreach my $dir (readdir(LANGS)) {
    next if (($dir eq '.') || ($dir eq '..') || (! -d $dir));
    if (-d "$dir/xml") {
        push(@langs, $dir);
    }
176
}
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
closedir(LANGS);

my $docparent = getcwd();
foreach my $lang (@langs) {
    chdir "$docparent/$lang";
    MakeDocs(undef, 'cp ../bugzilla.ent ./xml/');

    if (!-d 'txt') {
        unlink 'txt';
        mkdir 'txt', 0755;
    }
    if (!-d 'pdf') {
        unlink 'pdf';
        mkdir 'pdf', 0755;
    }
    if (!-d 'html') {
        unlink 'html';
        mkdir 'html', 0755;
    }
    if (!-d 'html/api') {
        unlink 'html/api';
        mkdir 'html/api', 0755;
    }

    make_pod() if $pod_simple;
    next unless $build_docs;

    chdir 'html';

    MakeDocs('separate HTML', "jade -t sgml -i html -d $LDP_HOME/ldp.dsl\#html " .
207
	 "$JADE_PUB/xml.dcl ../xml/Bugzilla-Guide.xml");
208
    MakeDocs('big HTML', "jade -V nochunks -t sgml -i html -d " .
209
         "$LDP_HOME/ldp.dsl\#html $JADE_PUB/xml.dcl " .
210
	 "../xml/Bugzilla-Guide.xml > Bugzilla-Guide.html");
211
    MakeDocs('big text', "lynx -dump -justify=off -nolist Bugzilla-Guide.html " .
212
	 "> ../txt/Bugzilla-Guide.txt");
213

214 215 216
    if (! grep($_ eq "--with-pdf", @ARGV)) {
        next;
    }
217

218
    MakeDocs('PDF', "jade -t tex -d $LDP_HOME/ldp.dsl\#print $JADE_PUB/xml.dcl " .
219
         '../xml/Bugzilla-Guide.xml');
220 221 222 223 224 225 226 227
    chdir '../pdf';
    MakeDocs(undef, 'mv ../xml/Bugzilla-Guide.tex .');
    MakeDocs(undef, 'pdfjadetex Bugzilla-Guide.tex');
    MakeDocs(undef, 'pdfjadetex Bugzilla-Guide.tex');
    MakeDocs(undef, 'pdfjadetex Bugzilla-Guide.tex');
    MakeDocs(undef, 'rm Bugzilla-Guide.tex Bugzilla-Guide.log Bugzilla-Guide.aux Bugzilla-Guide.out');

}
228