RT# 81961 Pod2Html can use installed libs, or Freeside source
authorMitch Jackson <mitch@freeside.biz>
Wed, 20 Feb 2019 01:17:29 +0000 (20:17 -0500)
committerMitch Jackson <mitch@freeside.biz>
Wed, 20 Feb 2019 01:38:13 +0000 (20:38 -0500)
FS/FS/Misc/Pod2Html.pm

index 08358aa..1dfca04 100644 (file)
@@ -2,6 +2,7 @@ package FS::Misc::Pod2Html;
 use strict;
 use warnings;
 use Carp qw( croak );
+use File::Copy;
 use Pod::Simple::HTML;
 use Pod::Simple::HTMLBatch;
 use Pod::Simple::Search;
@@ -9,12 +10,15 @@ use Pod::Simple::Search;
 use base 'Exporter';
 our @EXPORT_OK = qw(
   fs_pod2html
+  fs_pod2html_from_src
+  fs_pod2html_from_dirs
   $include_system_perl_modules
   $quiet_mode
 );
 
 our $include_system_perl_modules = 1;
 our $quiet_mode = 0;
+our $DEBUG = 0;
 
 =head1 NAME
 
@@ -31,9 +35,9 @@ Usage:
   use FS::Misc::Pod2Html 'fs_pod2html';
   fs_pod2html( '/output/directory' );
 
-=head2 fs_pod2html /output/directory/
+Also:
 
-Generates Freeside-themed HTML docuemtnation from installed perl modules
+  perl -MFS::Misc::Pod2Html -e "FS::Misc::Pod2Html::fs_pod2html('/tmp/pod2html');"
 
 =cut
 
@@ -52,14 +56,15 @@ our $html_after_title = q{</h1>};
 
 our $html_footer = q{</div><% include ('/elements/footer.html' ) %>};
 
-sub fs_pod2html {
-  my $html_dir = shift
-    or croak 'Please specify an output directory';
+=head2 fs_pod2html output_dir
 
-  croak "Directory $html_dir: No write access"
-    unless -w $html_dir;
+Generates Freeside-themed HTML docuemtnation from installed perl modules
 
-  my @search_dirs = (
+=cut
+
+sub fs_pod2html {
+  fs_pod2html_from_dirs(
+    shift,
     '/usr/local/share/perl/5.24.1',
     '/usr/local/bin',
     $include_system_perl_modules ? (
@@ -68,12 +73,79 @@ sub fs_pod2html {
       '/usr/share/perl/5.24.1',
     ) : (),
   );
+}
+
+=head2 fs_pod2html_from_src output_dir
+
+Generate Freeside-themed HTML documentation from a Freeside source tree
+
+Will fail, unless run with CWD at the root of the Freesidse source tree
+
+=cut
+
+sub fs_pod2html_from_src {
+  my $html_dir = shift;
+
+  fs_pod2html_from_dirs(
+    $html_dir,
+    'FS/bin',
+    'bin',
+    'FS',
+    'fs_selfservice/FS-SelfService',
+    # '/usr/local/share/perl/5.24.1',
+    # '/usr/local/bin',
+    $include_system_perl_modules ? (
+      '/usr/share/perl5',
+      '/usr/share/perl/5.24',
+      '/usr/share/perl/5.24.1',
+    ) : (),
+  );
+
+  # FS-SelfService is loosely packaged:
+  #   perl modules are not stored in lib/FS, scripts not stored in /bin, so
+  # batch_convert() places these .html in the wrong locations
+  #
+  # Copy to correct locations, and correct relative links
+  copy( "$html_dir/SelfService.html", "$html_dir/FS/SelfService.html" );
+  mkdir( "$html_dir/FS/SelfService" );
+  copy( "$html_dir/SelfService/XMLRPC.html", "$html_dir/FS/SelfService/XMLRPC.html" );
+    for my $sed_cmd (
+    'sed -i "s/href=\"\.\//href=\"\.\.\//g" "'.$html_dir.'/FS/SelfService.html"',
+    'sed -i "s/href=\"\\..\//href=\"\.\.\/\.\.\//g" "'.$html_dir.'/FS/SelfService/XMLRPC.html"',
+  ) {
+    `$sed_cmd`
+  }
+}
+
+=head2 fs_pod2html output_dir @source_scan_dirs
+
+Generate Freeside-themed HTML documentation, scanning the provided directories
+
+=cut
+
+sub fs_pod2html_from_dirs {
+  my $html_dir = shift
+    or croak 'Please specify an output directory';
+
+  croak "Directory $html_dir: No write access"
+    unless -w $html_dir;
+
+  my @search_dirs = @_;
+
+  for my $dir ( @search_dirs ) {
+    unless ( -d $dir ) {
+      croak "Cannot continue - source directory ($dir) not found! ";
+    }
+  }
 
   my $parser = Pod::Simple::HTMLBatch->new;
 
   $parser->verbose(0)
     if $quiet_mode;
 
+  $parser->verbose(2)
+    if $DEBUG;
+
   $parser->search_class('Inline::Pod::Simple::Search');
   $parser->html_render_class('Inline::Pod::Simple::HTML');
   $parser->contents_page_start(
@@ -105,8 +177,11 @@ sub new {
   my $class = shift;
   my $self = Pod::Simple::Search->new( @_ );
   $self->laborious(1);
+  $self->verbose(2)
+    if $DEBUG;
   $self;
 }
+
 1;
 
 =head1 NAME