#!/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);
}