The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use strict;
use Cwd;
use FindBin;
use lib Cwd::abs_path "$FindBin::Bin/../lib";
use File::Share;
use Hash::Merge 'merge';
use IO::All;
use JSON;
use Template::Toolkit::Simple;
use YAML::XS;
use Zilla::Dist;

my ($template, $target, $json) = @ARGV;

$target ||= $template;
$json ||= '{}';

if (-e "pkg/$template") {
    my $text = io->file("pkg/$template")->all;
    io->file($target)->print($text);
}
else {
    my $meta = Load io->file('Meta')->all;
    my $cpan = delete($meta->{'=zild'}) || {};
    my $data = merge($cpan, $meta);
    if ($template ne 'dist.ini') {
        my $travis = delete($meta->{'=travis'}) || {};
        $travis->{type} ||= $data->{language};
        exit unless $travis->{type} eq 'perl';
        $data = merge($travis, $data);
    }
    $data->{RequiredModules} = [];
    if (my $r = $data->{requires}) {
        push @{$data->{RequiredModules}}, keys %$r;
    }
    if (my $r = $data->{test}{requires}) {
        push @{$data->{RequiredModules}}, keys %$r;
    }
    if (my $r = $data->{recommends}) {
        push @{$data->{RequiredModules}}, keys %$r;
    }
    ($data->{namepath} = $data->{libname} || $data->{name})
        =~ s/(?:-|::)/\//g;
    $data->{sharedir} = 1 if -d 'share';

    my $text = tt
        ->path([File::Share::dist_dir('Zilla-Dist')])
        ->data($data)
        ->render($template);

    io->file($target)->print($text);
}