# $Id: /xmltwig/trunk/Makefile.PL 33 2008-04-30T08:03:41.004487Z mrodrigu $
# tool installation part shamelessly lifted from YAML's Makefile.PL
use ExtUtils::MakeMaker;
my @prompts=(
[ xml_pp => y => "XML pretty printer" ],
[ xml_grep => y => "XML grep - grep XML files using XML::Twig's subset of XPath" ],
[ xml_split => y => "split big XML files" ],
[ xml_merge => y => "merge back files created by xml_split" ],
[ xml_spellcheck => y => "spellcheck XML files skipping tags" ],
);
my @programs;
my $opt= $ARGV[0] ? $ARGV[0] : '';
if( $opt eq "-n")
{ @programs=(); }
elsif( $opt eq "-y")
{ @programs= map { $_->[0] } @prompts; }
elsif( $opt eq "-d")
{ @programs= map { $_->[0] if( $_->[1] eq 'y') } @prompts; }
elsif( $ENV{AUTOMATED_TESTING} || $ENV{NONINTERACTIVE_TESTING})
{ @programs=(); }
else
{ print "run 'perl Makefile.PL -y' to install all tools,\n",
" 'perl Makefile.PL -n' to skip installation\n";
foreach my $prompt (@prompts)
{ my ($program, $default, $description) = @$prompt;
if( prompt("Do you want to install '$program' ($description)?", $default) =~ /^y/i)
{ push(@programs, $program); }
}
}
MyWriteMakefile(
META_MERGE => {
resources => {
repository => 'http://github.com/mirod/xmltwig',
},
},
META_ADD => {
prereqs => {
build => {
requires => {
'ExtUtils::MakeMaker' => "0",
}
},
configure => {
requires => {
'ExtUtils::MakeMaker' => "0",
}
},
test => {
recommends => {
'Test' => '1.25_02',
'IO::Scalar' => '2.110',
'IO::CaptureOutput' => '1.1102',
},
suggests => {
'Test::Pod' => '1.45',
'XML::Simple' => '2.18',
'XML::Handler::YAWriter' => '0.23',
'XML::SAX::Writer' => '0.53',
'XML::Filter::BufferText' => '1.01',
},
},
runtime => {
requires => {
'XML::Parser' => '2.23',
},
recommends => {
'Scalar::Util' => '1.23',
'Encode' => '2.42_01',
'XML::XPathEngine' => '0.13',
},
suggests => {
'LWP' => '6.04',
'HTML::TreeBuilder' => '4.2',
'HTML::Entities::Numbered' => '0.04',
'HTML::Tidy' => '1.50',
'HTML::Entities' => '3.69',
'Tie::IxHash' => '1.22',
'Text::Wrap' => '2009.0305',
},
}
}
},
#BUILD_REQUIRES => {
#},
NAME => 'XML::Twig',
ABSTRACT => 'XML, The Perl Way',
AUTHOR => 'Michel Rodriguez <[email protected]>',
LICENSE => 'perl',
EXE_FILES => [ map {"tools/$_/$_"} @programs],
VERSION_FROM => 'Twig.pm',
PREREQ_PM => { 'XML::Parser' => '2.23' },
dist => { COMPRESS => 'gzip -9f',
SUFFIX => 'gz',
},
depend => { 'Twig.pm' => "FORCE\n\t\$(PERL) speedup Twig_pm.slow > Twig.pm\n\t\$(PERL) -i_bak -p filter_for_5.005 Twig.pm Twig/XPath.pm\n\t\$(PERL) check_optional_modules",
'FORCE' => '',
},
);
sub MyWriteMakefile { #Written by Alexandr Ciornii, version 0.21. Added by eumm-upgrade.
my %params=@_;
my $eumm_version=$ExtUtils::MakeMaker::VERSION;
$eumm_version=eval $eumm_version;
die "EXTRA_META is deprecated" if exists $params{EXTRA_META};
die "License not specified" if not exists $params{LICENSE};
if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) {
#EUMM 6.5502 has problems with BUILD_REQUIRES
$params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} };
delete $params{BUILD_REQUIRES};
}
delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52;
delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48;
delete $params{META_MERGE} if $eumm_version < 6.46;
delete $params{META_ADD} if $eumm_version < 6.46;
delete $params{LICENSE} if $eumm_version < 6.31;
delete $params{AUTHOR} if $] < 5.005;
delete $params{ABSTRACT_FROM} if $] < 5.005;
delete $params{BINARY_LOCATION} if $] < 5.005;
WriteMakefile(%params);
add_prereqs_to_mymeta( $params{META_ADD}->{prereqs});
}
sub add_prereqs_to_mymeta
{ my $prereqs= shift;
my $MYJSON= 'MYMETA.json';
my $MYYAML= 'MYMETA.yml';
my $JSON = 'META.json';
my $YAML = 'META.yml';
rename $MYYAML, $YAML;
if( eval { require JSON; })
{ my $json= JSON->new()->pretty->canonical;
if( my $meta= eval { $json->decode( slurp( -s $MYJSON ? $MYJSON : $JSON )); })
{ $meta->{prereqs}= $prereqs;
spit( $JSON, $json->encode( $meta));
warn "updated prereqs in $JSON\n";
}
}
}
sub slurp
{ my( $file)= @_;
my $in;
open( $in, "<$file") or return ''; # can't use fancy open so this works in 5.005
local undef $/;
return <$in>;
}
sub spit
{ my $file= shift;
my $out;
open( $out, ">$file") or ( warn "cannot update $file: $!" && return);
print {$out} @_;
}