#!/afs/athena/contrib/perl5/perl -w
# Merge paths on all Athena platforms.

use strict;
use FileHandle;

sub read_path {
  my ($file) = @_;
  local ($_);
  my $fh = new FileHandle $file, "r";

  1 until ($_ = <$fh>) =~ /^\s*set\s+athena_path\s*=\s*\(\s*/;
  $_ = $';
  $_ .= scalar <$fh> while s/\\\r?\n$//g;
  s/\).*//;
  ( split(/\s+/, $_) );
}

sub in {
  my $el = shift;
  scalar grep $_ eq $el, @_;
}

sub merge_paths {
  my @paths = @_;
  my (@result, %daid, $i, $d);

  while (1) {
    my @rest = map @$_, @paths;

    for ($i=0; $i<=$#paths; $i++) {
      warn ":: trimming $i ($paths[$i][0])\n";
      while (! in( $paths[$i][0], @rest )) {
	warn ":: skipping $paths[$i][0] from $i\n";
	push @result, ($d=shift @{$paths[$i]});
	$daid{$d} = 1;
      }
    }
    last;
  }
}

my @P = merge_paths(map [ read_path($_) ],
 reverse glob '/afs/dev.mit.edu/source/src-8.0/athena/dotfiles/system/cshrc*');
print "@P\n";
