#!/usr/bin/perl -w

use strict;
no strict 'refs';


my %vars = ();

foreach (@ARGV) {
  my ($n, $v) = split('=', $_);
  $vars{$n} = $v;
}

my @checks = qw(
  PERL CC AUTOMAKE AUTOCONF LIBTOOL
);

foreach my $check (@checks) {
  my @check = &{"check_$check"};
  $check  = sprintf("% 10s %s %s", $check, shift(@check), shift(@check));
  $check .= sprintf(" (%s)", join('; ', @check)) if @check;
  $check .= "\n";
  print $check;
}


sub check_PERL {
  my @meta;

  my $pl = $vars{'PERL_BIN'} || '';
  $pl = '' if $pl eq 'this';
  $pl ||= $vars{'PERL'} || "perl";
  $pl = (split(/\s+/, $pl))[0];

  my @plver = split(/\s+/, `$pl --version 2>&1` || '');
  my $plver;
  if($plver[4] ne 'version') {
    $plver = $plver[4];
    $plver =~ s/^v//;
  } else {
    $plver = sprintf("%i.%i.%i", split(/[._]/, $plver[5]), 0);
  }

  push(@meta, 'override') if $vars{'PERL'} and $pl ne $vars{'PERL'};
  return($pl, $plver, @meta);
}

sub check_CC {
  my @meta;
  my $cc = $vars{'CC'} || "cc";

  my $ccver = (`$cc --version 2>&1`)[0] || 0;
  chomp($ccver);
  my $gnucc = grep("gnu", `$cc --help 2>&1` || '');

  push(@meta, 'gnu') if $gnucc;
  return($cc, $ccver, @meta);
}

sub check_LIBC {
  my @meta;
  my $lc = grep(/libc/, (`ldd /bin/sh 2>&1`));
  $lc = (split(/\s+/, $lc))[3];

  return($lc, 0, @meta);
}

sub check_LDD {
  my @meta;
  
}

sub check_AUTOMAKE {
  my @meta;
  my $am = $vars{'AUTOMAKE'} || "automake";

  my @amver = split(/\s+/, `$am --version 2>&1` || '');
  my $gnuam = $amver[1] =~ /GNU/i;
  my $amver = $gnuam ? $amver[3] : 0;

  push(@meta, 'gnu') if $gnuam;
  return($am, $amver, @meta);
}

sub check_AUTOCONF {
  my @meta;
  my $ac = $vars{'AUTOCONF'} || "autoconf";

  my @acver = split(/\s+/, `$ac --version 2>&1` || '');
  my $gnuac = $acver[1] =~ /GNU/i;
  my $acver = $gnuac ? $acver[3] : 0;

  push(@meta, 'gnu') if $gnuac;
  return($ac, $acver, @meta);
}

sub check_LIBTOOL {
  my @meta;
  my $lt = $vars{'LIBTOOL'} || "libtool";

  my @ltver = split(/\s+/, `$lt --version 2>&1` || '');
  my $gnult = $ltver[1] =~ /GNU/i;
  my $ltver = $gnult ? $ltver[3] : 0;

  push(@meta, 'gnu') if $gnult;
  return($lt, $ltver, @meta);
}
