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';
  }
  
  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';
  };

};
