use alienfile;

probe sub {
  my($build) = @_;
  my @stdout = `m4 --version`;
  if(defined $stdout[0] && $stdout[0] =~ /^m4/ && $stdout[0] =~ /([0-9\.]+)$/)
  {
    my $version = $1;
    my @version = split /\./, $version;
    
    # GNU M4 seems to have a history of brokenness
    # so says AutoConf:
    # GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.
    # GNU M4 1.4.15 uses a buggy replacement strstr on some systems.
    # Glibc 2.9 - 2.12 and GNU M4 1.4.11 - 1.4.15 have another strstr bug.
    
    return 'share' unless $version[0] >= 1;
    
    if($version[0] == 1)
    {
      return 'share' unless $version[1] >= 4;
      
      if($version[1] == 4)
      {
        return 'share' unless $version[2] >= 6;
        return 'share' if $version[2] =~ /^(11|12|13|14|15)$/;
      }
    }
    
    $build->runtime_prop->{version} = $version;
    return 'system';
  }
  
  #if($^O eq 'MSWin32')
  #{
  #  $build->runtime_prop->{my_use_msys} = 1;
  #  return 'system';
  #}
  
  return 'share';
};

share {

  plugin 'Download' => (
    url     => 'http://ftp.gnu.org/gnu/m4',
    version => qr/m4-([0-9\.]+)\.tar\.gz/,
  );
  
  plugin 'Extract' => 'tar.gz';
  
  plugin 'Build::Autoconf' => ();

  gather sub {
    my($build) = @_;
    my @stdout = `m4 --version`;
    $build->runtime_prop->{version} = 
      defined $stdout[0] && $stdout[0] =~ /^m4/ && $stdout[0] =~ /([0-9\.]+)$/
        ? $1
        : 'unknown';
  };

};

if($^O eq 'MSWin32')
{
  sys {
    #requires 'Alien::MSYS' => '0.08';
    #requires 'Capture::Tiny';

    gather sub {
      my($build) = @_;
      #if($build->runtime_prop->{my_use_msys})
      #{
      #  my $m4 = $build->runtime_prop->{command} = Path::Tiny->new(Alien::MSYS::msys_path())->child('m4.exe')->stringify;
      #  my @stdout = `$m4 --version`;
      #  $build->runtime_prop->{version} = 
      #    defined $stdout[0] && $stdout[0] =~ /^m4/ && $stdout[0] =~ /([0-9\.]+)$/
      #      ? $1
      #      : 'unknown';
      #  
      #}
    };

  };
  
}

