Autoconf-Template
view release on metacpan or search on metacpan
bin/autoconf-template-perl view on Meta::CPAN
s/$/.in/xsm;
}
$options->{$type} = [ map { basename $_ } @config_files ];
}
return $options;
}
########################################################################
sub render_templates {
########################################################################
my ($parameters) = @_;
my $file_list = $parameters->{file_list};
my $templates = $file_list->{templates};
my $exclude_templates = $parameters->{exclude_templates};
for my $template ( keys %{$templates} ) {
TRACE sprintf 'checking to see if we need to refresh: %s', $template;
next if any { $template eq $_ } @{$exclude_templates};
if ( $parameters->{refresh} ) {
next if none { $template eq $_ } @{ $file_list->{refresh} };
}
TRACE sprintf 'refreshing: %s', $template;
my ( $mode, $out, $cleanup );
if ( ref $templates->{$template} ) {
( $mode, $out, $cleanup ) = @{ $templates->{$template} };
}
else {
( $mode, $out ) = ( undef, $templates->{$template} );
}
$out = sprintf '%s/%s', $parameters->{root}, $out;
# resolve any variables in file names (@project@.spec.in), e.g.
$out = do_subst( $out, $parameters );
# preserve custom sections
my $name = basename($out);
if ( any { $name eq $_ } qw(Makefile.am perl-modules.inc perl-bin.inc perl-cgi-bin.inc) ) {
my @custom_sections = extract_custom_sections($out);
$parameters->{custom_sections} = \@custom_sections;
}
render_tt_template(
{ template => $template,
parameters => $parameters,
outfile => $out,
cleanup => $cleanup,
}
);
if ( defined $mode && $mode ) {
TRACE sprintf 'setting permissions of %s to %s', $out, $mode // $EMPTY;
chmod oct($mode), $out;
}
}
return;
}
########################################################################
sub create_requirement_files {
########################################################################
my ($options) = @_;
my $root = $options->{root};
my $m4_macro = sprintf '%s/autotools/ax_requirements_check.m4', $root;
my $requirements_text = sprintf '%s/requires.txt', $root;
my $requirements_json = sprintf '%s/requires.json', $root;
my %outfiles = (
m4 => $m4_macro,
text => $requirements_text,
json => $requirements_json,
);
## no critic (RequireInterpolationOfMetachars)
my @ax_requirements_check = '/usr/local/bin/autoconf-ax-requirements-check';
# set rootdir option
push @ax_requirements_check, '-r', $root;
if ( !$options->{'add-version-numbers'} ) {
push @ax_requirements_check, '--no-add-version-numbers';
}
# pass along log-level...and quiet flag
push @ax_requirements_check, '-l', $options->{'log-level'};
push @ax_requirements_check, $options->{quiet} ? '-Q' : ();
# create the JSON file first
system @ax_requirements_check, '-o', $outfiles{'json'}, '-f', 'json';
# create requirements file for each format using JSON file as input
for my $format (qw( text m4 )) {
system @ax_requirements_check, '-o', $outfiles{$format}, '-f', $format, '-i', $outfiles{'json'};
}
return;
}
########################################################################
sub create_changelog {
########################################################################
my ($options) = @_;
my @all_files;
my $root = $options->{root};
find(
sub {
bin/autoconf-template-perl view on Meta::CPAN
};
}
my %index = (
module_index => \%module_index,
module_names => [ sort keys %module_index ],
);
my $readme = render_tt_template(
'perl/lib/README.md.tt',
{ modules => \%index,
project => $project,
timestamp => scalar localtime,
}
);
print {*STDOUT} $readme;
return \%index;
}
########################################################################
sub copy_list {
########################################################################
my ($options) = @_;
my $root = $options->{root};
my $file_list = $options->{file_list}->{files};
foreach my $file ( keys %{$file_list} ) {
my ( $mode, $out )
= ref $file_list->{$file}
? @{ $file_list->{$file} }
: ( undef, $file_list->{$file} );
$out ||= $file;
$out = do_subst( $out, $options );
my $dest_path;
if ( $out =~ /\/$/xsm ) {
$dest_path = sprintf '%s/%s/%s', $root, $out, $file;
}
else {
$dest_path = sprintf '%s/%s', $root, $out;
}
create_path($dest_path);
TRACE sprintf 'copying %s to %s', "$PROJECT_DIR/$file", $dest_path;
croak "missing $file - perhaps you forgot to add it to Makefile.am?\n"
if !-e "$PROJECT_DIR/$file";
copy( "$PROJECT_DIR/$file", $dest_path );
if ( defined $mode ) {
TRACE sprintf 'chmod %s, %s', $mode, $dest_path;
chmod oct($mode), $dest_path;
}
}
return;
}
########################################################################
sub create_dependency_tree {
########################################################################
my ( $dirs, $all_dependencies, $root ) = @_;
my @modules;
foreach my $dir ( sort keys %{$dirs} ) {
my %module;
my $path = $dir;
$path =~ s{$root/?}{}xsm;
$module{path} = $path;
my $list = $dirs->{$dir};
$module{list} = [];
foreach my $file ( @{$list} ) {
push @{ $module{list} }, $path ? "$path/$file" : $file;
}
my $module_name = $path;
$module_name =~ s/\///xsm;
$module{name_uc} = uc $module_name || 'PERL';
$module{name_lc} = lc $module_name;
$module{files} = $list;
$module{dependencies} = {};
foreach my $file ( @{$list} ) {
my $dependencies = [];
DEBUG 'looking for ' . $path . $SLASH . $file;
my $dep_file = $path . $SLASH . $file;
$dep_file = strip_in($dep_file);
$dep_file =~ s/^\///xsm;
my @local_dependencies
= @{ $all_dependencies->{$dep_file} || [] };
next if !@local_dependencies;
for my $dependency (@local_dependencies) {
$dependency = strip_in($dependency);
push @{$dependencies}, $dependency;
}
$module{dependencies}->{$file} = $dependencies;
}
push @modules, \%module;
( run in 1.440 second using v1.01-cache-2.11-cpan-39bf76dae61 )