@ -10,23 +10,76 @@ use warnings;
use Getopt::Std ;
# Because we know that Text::Template isn't a core Perl module, we use
# a fallback in case it's not installed on the system
use File::Basename ;
use File::Spec::Functions ;
use lib catdir ( dirname ( __FILE__ ) ) ;
use with_fallback qw( Text::Template ) ;
# We actually expect to get the following hash tables from configdata:
#
# %config
# %target
# %withargs
# %unified_info
#
# We just do a minimal test to see that we got what we expected.
# $config{target} must exist as an absolute minimum.
die "You must run this script with -Mconfigdata\n" if ! exists ( $ config { target } ) ;
# Make a subclass of Text::Template to override append_text_to_result,
# as recommended here:
#
# http://search.cpan.org/~mjd/Text-Template-1.46/lib/Text/Template.pm#Automatic_postprocessing_of_template_hunks
package OpenSSL::Template ;
# Because we know that Text::Template isn't a core Perl module, we use
# a fallback in case it's not installed on the system
use File::Basename ;
use File::Spec::Functions ;
use lib catdir ( dirname ( __FILE__ ) ) ;
use with_fallback qw( Text::Template ) ;
use parent qw/Text::Template/ ;
# Override constructor
sub new {
my ( $ class ) = shift ;
# Call the constructor of the parent class, Person.
my $ self = $ class - > SUPER:: new ( @ _ ) ;
# Add few more attributes
$ self - > { _output_off } = 0 ; # Default to output hunks
bless $ self , $ class ;
return $ self ;
}
sub append_text_to_output {
my $ self = shift ;
if ( $ self - > { _output_off } == 0 ) {
$ self - > SUPER:: append_text_to_output ( @ _ ) ;
}
return ;
}
sub output_reset_on {
my $ self = shift ;
$ self - > { _output_off } = 0 ;
}
sub output_on {
my $ self = shift ;
if ( - - $ self - > { _output_off } < 0 ) {
$ self - > { _output_off } = 0 ;
}
}
sub output_off {
my $ self = shift ;
$ self - > { _output_off } + + ;
}
# Come back to main
package main ;
# Helper functions for the templates #################################
# It might be practical to quotify some strings and have them protected
@ -98,7 +151,7 @@ my @autowarntext = ("WARNING: do not edit!",
my $ prev_linecount = 0 ;
my $ text =
@ ARGV
? join ( "" , map { my $ x = Text::Template:: _load_text ( $ _ ) ;
? join ( "" , map { my $ x = "{- output_reset_on() -}" . Text::Template:: _load_text ( $ _ ) ;
my $ linecount = $ x =~ tr /\n/ / ;
$ prev_linecount = ( $ linecount += $ prev_linecount ) ;
$ lines { $ linecount } = $ _ ;
@ -110,13 +163,31 @@ my $text =
# Load the full template (combination of files) into Text::Template
# and fill it up with our data. Output goes directly to STDOUT
my $ template = Text::Template - > new ( TYPE = > 'STRING' , SOURCE = > $ text ) ;
my $ template = OpenSSL::Template - > new ( TYPE = > 'STRING' , SOURCE = > $ text ) ;
sub output_reset_on {
$ template - > output_reset_on ( ) ;
"" ;
}
sub output_on {
$ template - > output_on ( ) ;
"" ;
}
sub output_off {
$ template - > output_off ( ) ;
"" ;
}
$ template - > fill_in ( OUTPUT = > \ * STDOUT ,
HASH = > { config = > \ % config ,
target = > \ % target ,
withargs = > \ % withargs ,
unified_info = > \ % unified_info ,
autowarntext = > \ @ autowarntext ,
quotify1 = > \ & quotify1 ,
quotify_l = > \ & quotify_l } ,
quotify_l = > \ & quotify_l ,
output_reset_on = > \ & output_reset_on ,
output_on = > \ & output_on ,
output_off = > \ & output_off } ,
DELIMITERS = > [ "{-" , "-}" ] ,
BROKEN = > \ & broken ) ;