Autoconf-Template
view release on metacpan or search on metacpan
bin/autoconf-template-perl view on Meta::CPAN
'rpm-install-from-cpan' => q{whether to include a %post section for installing Perl modules},
'source-dir' => q{original source directory from whence your project files came},
'unit-tests' => q{whether to include unit-test stubs},
);
my @data = map { { description => $descriptions{$_}, option => "--$_", value => $meta_data{$_} } }
sort keys %meta_data;
my $rows = [
Option => sub { return shift->{option}; },
Value => sub {
my $v = shift->{value};
$v = ref $v ? join "\n", @{$v} : $v =~ /^(0|1)$/xsm ? (qw( false true))[$1] : $v;
},
Description => sub { return shift->{description}; },
];
print easy_table(
data => \@data,
table_options => { headingText => 'Project Options' },
rows => $rows,
);
return;
}
########################################################################
sub create_manifest {
########################################################################
my ($options) = @_;
load_autoconf_templaterc($options);
if ( !$options->{project} ) {
print {*STDERR} "WARNING: you do not have a project name (-p to add project name)\n";
}
if ( !$options->{description} ) {
print {*STDERR} "WARNING: you do not have a project description (-D to add description)\n";
}
my %files;
my $srcdir = $options->{'source-dir'} // getcwd;
DEBUG(
Dumper(
[ srcdir => $srcdir,
'source-dir' => $options->{'source-dir'}
]
)
);
my %file_types = (
perl_modules => ['pm'],
perl_scripts => ['pl'],
cgi_scripts => ['cgi'],
bash_scripts => ['sh'],
html_files => ['html'],
css_files => ['css'],
image_files => [qw(png gif jpg jpeg)],
javascript_files => ['js'],
config_files => [qw(json ini cfg yaml)],
);
my @exclude_files = @{ $options->{'exclude-files'} };
my @exclude_dirs = @{ $options->{'exclude-dirs'} };
$srcdir //= $DOT;
if ( $srcdir eq $DOT ) {
$srcdir = getcwd;
}
foreach my $dir (@exclude_dirs) {
next if ref $dir || $dir =~ /^\//xsm;
$dir =~ s/^/$srcdir\//xsm;
}
foreach my $param ( keys %file_types ) {
my @file_list;
foreach my $type ( @{ $file_types{$param} } ) {
DEBUG(
Dumper(
[ type => $type,
path => $srcdir,
exclude_dirs => \@exclude_dirs
]
)
);
push @file_list,
find_files_of_type(
type => $type,
path => $srcdir,
exclude_dirs => \@exclude_dirs,
);
}
$files{$param} = [ filter_list( \@file_list, $srcdir, @exclude_files ) ];
}
TRACE Dumper( [ exclude => \@exclude_files, 'exclude-dirs' => \@exclude_dirs ] );
my @resources;
find(
sub {
return
if ( -d $_ ) || is_exclude_dir( $File::Find::name, \@exclude_dirs );
TRACE Dumper( [ resource => $File::Find::name, exclude_dirs => \@exclude_dirs ] );
if ( $File::Find::name =~ /project[.]yaml/xsm ) {
carp "traversing a directory that may already be a project...\n";
croak "use -f to force\n"
bin/autoconf-template-perl view on Meta::CPAN
$file =~ s/$root\/resources\///xsm;
DEBUG Dumper( [ file => $file ] );
push @resources, $file;
},
"$root/resources"
);
return \@resources;
}
########################################################################
sub init_parameters {
########################################################################
my ($options) = @_;
my @now = localtime;
$now[5] += 1900;
$now[4] += 1;
my $root = $options->{root};
my %timestamp = timestamp();
$options->{date} = $timestamp{date};
$options->{timestamp} = $timestamp{timestamp};
# Fri Feb 10 14:16:12 2023
$options->{version} = '2.1.0'; ## no critic (RequireInterpolation)
$options->{generator} = basename $PROGRAM_NAME;
# convenience routines for TT
# creates a list that looks like this:
# FOO = \
# ITEM \
# ITEM \
# ITEM
$options->{makefile_am_list} = \&makefile_am_list;
$options->{makefile_am_flatten_list} = \&makefile_am_flatten_list;
if ( $options->{refresh} ) {
# main() prepped 'destdir', 'project' for refresh option from
# abs_top_srcdir in Makefile, so we should be certain that root
# for refresh is correct...
my $resources = find_resources($options);
$options->{'strip-dir'} = sprintf '%s/%s', $options->{root}, 'resources';
create_target_file_list( $options, [ resources => $resources ] );
# refresh the list of files for 'built' assets look for .in files
# in each directory, presumably someone dropped a new .in file in
# one of these and wants to refresh the Makefile.am
my %html_files = (
html => [ 'htdocs', ['html'] ],
javascript => [ 'javascript', ['js'] ],
css => [ 'css', ['css'] ],
image => [ 'image', [qw(png gif jpeg jpg)] ],
);
foreach ( keys %html_files ) {
my $file_list = $_ . '_files';
$options->{$file_list} = [];
my ( $subdir, $ext_list ) = @{ $html_files{$_} };
foreach my $file_type ( @{$ext_list} ) {
my @files = find_files_of_type(
path => "$root/src/main/html/$subdir",
type => $file_type,
);
push @{ $options->{$file_list} }, map { basename $_ } @files;
}
}
$options->{bash_scripts}
= [ find_files( "$root/src/main/bash/bin", 'sh', $TRUE ) ];
$options->{perl_scripts}
= [ find_files( "$root/src/main/perl/bin", 'pl', $TRUE ) ];
$options->{cgi_scripts}
= [ find_files( "$root/src/main/perl/cgi-bin", 'pl', $TRUE ) ];
$options->{perl_modules}
= [ find_files( "$root/src/main/perl/lib", 'pm', $TRUE ) ];
TRACE Dumper( [ perl_modules => $options->{perl_modules} ] );
$options->{perl_modules} = [ map { find_module_filename( $_ . '.in' ) } @{ $options->{perl_modules} } ];
DEBUG Dumper(
[ 'refreshing',
bash_scripts => $options->{bash_scripts},
perl_scripts => $options->{perl_scripts},
perl_modules => $options->{perl_modules},
cgi_scripts => $options->{cgi_scripts},
resources => $options->{resources},
]
);
$options->{bash_scripts}
= [ map { ( basename $_) . '.in' } @{ $options->{bash_scripts} } ];
my @target_dirs = (
cgi_scripts => 'perl/cgi-bin',
css_files => 'html/css',
html_files => 'html/htdocs',
image_files => 'html/images',
javascript_files => 'html/javascript',
perl_scripts => 'perl/bin',
);
for my $p ( pairs @target_dirs ) {
my ( $type, $dir ) = @{$p};
( run in 1.497 second using v1.01-cache-2.11-cpan-788537b7465 )