#!/usr/bin/perl

=pod

=head1 NAME

mad convert

=head1 SYNOPSIS

To convert a file 'source.pm' from Perl 5.10 to Kurila you need to do:

  kurilapath=/usr/src/perl/kurila-1.9
  bleadpath=/usr/src/perl/perl-5.11.0
  cd $kurilapath
  madfrom='perl-5.10' madto='kurila-1.9' \
    madconvert="/usr/bin/perl $kurilapath/mad/p5kurila.pl" \
    madpath="$bleadpath/mad" \
    mad/convert /path/to/source.pm

=cut

use strict;
use warnings;

our $kurilapath;
BEGIN {
    $kurilapath = $ENV{kurilapath} || "../";
    push @INC, "$kurilapath/mad/";
}

use Convert;
use IO::Handle;

use Fatal qw|open close|;

{
    local $/ = undef;
    my $filename = $ARGV[0];
    my $fh;
    open $fh, '+<', "$filename";
    my $input = $fh->getline;
    use File::Basename;
    my (undef, $dir, undef) = File::Basename::fileparse($filename);
    my @lib;
    push @lib, "$ENV{madpath}/lib";
    push @lib, "./lib", "./blib/lib", "./blib/arch/", "../lib/", "./t", "../t";
    #push @lib, $dir;
    for (keys %ENV) {
        $_ =~ m/^mad_(.*)$/ or next;
        my $k = $1;
        $ENV{$k} = $ENV{"mad_$k"};
    }
    my $output = eval { Convert::convert($input,
                                         "$ENV{madconvert}",
                                         from => "$ENV{madfrom}",
                                         to => "$ENV{madto}",
                                         dumpcommand => "$ENV{madperl}",
                                         switches => join ' ', map { "-I $_" } @lib ) };
    if ($output) {
        if ($input ne $output) {
            open my $fh, '>', "$filename.p5k" or die;
            $fh->print($output);
            close $fh or die;
        }
    } else {
        warn "Failed converting $filename:\n\n$@\n\n";
    }
}

