-#!/usr/bin/perl
+#!/usr/bin/env perl
#
use strict;
use warnings;
-use CSS::Minifier::XS;
+use CSS::Minifier::XS 0.07;
use File::Copy;
use File::Find;
+use File::Path qw(make_path);
use File::Slurp;
use File::Spec;
use Getopt::Long;
## Add the exim-html-current symlink
print "Symlinking exim-html-current to exim-html-$opt{latest}\n";
-symlink( "$opt{docroot}/exim-html-$opt{latest}", "$opt{docroot}/exim-html-current" );
+unlink("$opt{docroot}/exim-html-current") if ( -l "$opt{docroot}/exim-html-current" );
+symlink( "exim-html-$opt{latest}", "$opt{docroot}/exim-html-current" )
+ || die "symlink to $opt{docroot}/exim-html-current failed";
## Generate the website files
sub do_web {
## Build HTML from XSL files and simply copy static files which have changed
if ( $path =~ /(.+)\.xsl$/ ) {
- print "Generating : docroot:/$1.html\n";
+ print "Generating : docroot:/$1.html\n" if ($opt{verbose});
transform( undef, "$opt{tmpl}/web/$path", "$opt{docroot}/$1.html" );
}
elsif ( -f "$opt{tmpl}/web/$path" ) {
return if -f "$opt{docroot}/$path" && ( stat("$opt{tmpl}/web/$path") )[9] == ( stat("$opt{docroot}/$path") )[9];
if ( $path =~ /(.+)\.css$/ ) {
- print "CSS to : docroot:/$path\n";
+ print "CSS to : docroot:/$path\n" if ($opt{verbose});
my $content = read_file("$opt{tmpl}/web/$path");
- my $output = $opt{minify} ? CSS::Minifier::XS::minify($content) : $content;
- $output =~ s/and\(/and (/g; # hack round minify bug
- write_file( "$opt{docroot}/$path", $output );
+ write_file( "$opt{docroot}/$path", $opt{minify} ? CSS::Minifier::XS::minify($content) : $content );
}
elsif ( $path =~ /(.+)\.js$/ ) {
- print "JS to : docroot:/$path\n";
+ print "JS to : docroot:/$path\n" if ($opt{verbose});
my $content = read_file("$opt{tmpl}/web/$path");
write_file( "$opt{docroot}/$path", $opt{minify} ? JavaScript::Minifier::XS::minify($content) : $content );
}
else {
## Copy
- print "Copying to : docroot:/$path\n";
+ print "Copying to : docroot:/$path\n" if ($opt{verbose});
copy( "$opt{tmpl}/web/$path", "$opt{docroot}/$path" ) or die "$path: $!";
}
## Set mtime
## Generate a Table of Contents XML file
{
my $path = "exim-html-$version/doc/html/spec_html/" . ( $type eq 'filter' ? 'filter_toc' : 'index_toc' ) . ".xml";
- print "Generating : docroot:/$path\n";
+ print "Generating : docroot:/$path\n" if ($opt{verbose});
transform( $xml, "$opt{tmpl}/doc/toc.xsl", "$opt{docroot}/$path", );
}
## Transform the chapter into html
{
my $path = sprintf( 'exim-html-%s/doc/html/spec_html/%sch%02d.html', $version, $prepend_chapter, $counter );
- print "Generating : docroot:/$path\n";
+ print "Generating : docroot:/$path\n" if ($opt{verbose});
transform( $doc, "$opt{tmpl}/doc/chapter.xsl", "$opt{docroot}/$path", );
}
}
my $doc = $stylesheet->transform($xml);
## Make the containing directory if it doesn't exist
- mkdirp( ( $out_path =~ /^(.+)\/.+$/ )[0] );
+ make_path( ( $out_path =~ /^(.+)\/.+$/ )[0], { verbose => 1 } );
## Write out the document
- open my $out, '>', $out_path or die $!;
+ open my $out, '>', $out_path or die "Unable to write $out_path - $!";
print $out $stylesheet->output_as_bytes($doc);
close $out;
}
-## "mkdir -p "
-sub mkdirp {
- my $path = shift;
-
- my @parts = ();
- foreach ( split( /\//, $path ) ) {
- push @parts, $_;
- my $make = join( '/', @parts );
- next unless length($make);
- next if -d $make;
- mkdir($make) or die "Unable to mkdir $make: $!\n";
- }
-}
-
## error_help
sub error_help {
my $msg = shift;
## Parse arguments
sub parse_arguments {
- my %opt = ( spec => [], filter => [], help => 0, man => 0, web => 0, minify => 1 );
- GetOptions( \%opt, 'help|h!', 'man!', 'web!', 'spec=s{1,}', 'filter=s{1,}', 'latest=s', 'tmpl=s', 'docroot=s', 'minify!' )
+ my %opt = ( spec => [], filter => [], help => 0, man => 0, web => 0, minify => 1, verbose => 0 );
+ GetOptions( \%opt, 'help|h!', 'man!', 'web!', 'spec=s{1,}', 'filter=s{1,}', 'latest=s', 'tmpl=s', 'docroot=s', 'minify!', 'verbose!' )
|| pod2usage( -exitval => 1, -verbose => 0 );
## --help
error_help('Excess arguments') if ( scalar(@ARGV) );
error_help('Must include at least one of --web, --spec or --filter')
- unless ( defined $opt{web} || scalar( @{ $opt{spec} } ) || scalar( @{ $opt{web} } ) );
+ unless ( $opt{web} || scalar( @{ $opt{spec} || [] } ) || scalar( @{ $opt{filter} || [] } ) );
return %opt;
}