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 )