#! /bin/perl

########################################################################
#
# /u/sonmi/bin/path_uniq
#
# this script makes components of a PATH like string unique cand prints
# it to stdout
#
# parameters
# ----------
#    PATH
#
# options
# -------
#     -d delimiter - default : 
#     -s shortens the path
#
# usefull enhancements: in the usage part, try to guess what was meant as 
# a path and echo it to stdout to not break for PATHs with blanks
#
########################################################################

sub usage {
    print STDERR "usage $0 [-s] [-d <delimiter>] PATH\n";
    print STDERR "    this script makes components of the PATH unique, if you\n";
    print STDERR "    pass in a searchpath A:B:C:A:B:E it will print A:B:C:E to\n";
    print STDERR "    the stdout\n\n";
    print STDERR "    -s will mercylessly cut components from the path, \n";
    print STDERR "    use at your own risk\n\n";
    print STDERR "    the parameters you gave were: \n";
    for ( $i = 0; $i <= $#ARGV; $i++ ) {
        print STDERR "        $ARGV[$i]\n";
    }
    exit ;
}


$i = 0;
$j = 0;
$delimiter = ":";
$searchpath = "";
@pathcomponents;
$found=0;
$newpath="";
$shorten=0;

for ( $i=0; $i <= $#ARGV; $i++) {
    if ( $ARGV[$i] eq '-d' ) {
        $delimiter = $ARGV[++$i];
    } elsif  ( $ARGV[$i] eq '-s' ) {
        $shorten=1;
    } else {
        $searchpath = $ARGV[$i];
    }
}
if ( $searchpath eq "" ) {
    usage;
}
#print STDERR "delimiter $delimiter\n";
#print STDERR "shorten $shorten\n";
#print STDERR "searchpath $searchpath\n";

@pathcomponents=split($delimiter, $searchpath);

for ( $i = 0; $i <= $#pathcomponents; $i++ ) {
    $found=0;
    if ( $shorten == 1 ) {
        if ( "\/tools\/ns-arch\/sparc_sun_solaris2\.4\/lib\/sparcworks\/SUNWspro/bin" eq $pathcomponents[$i] ||
              "\/h\/tortoise\/export\/share\/builds\/tools\/sparc_sun_solaris2\.5\.1\/perl5\.004\/bin" eq $pathcomponents[$i] ||
              "\/usr\/dist\/local\/exe" eq $pathcomponents[$i] ||
              "\/opt\/SUNWspro\/bin" eq $pathcomponents[$i] ||
              "\/opt\/SUNWwabi\/bin" eq $pathcomponents[$i] ||
              "\/u\/svbld\/bin" eq $pathcomponents[$i] ||
              "\/usr\/demos" eq $pathcomponents[$i] ||
              "\/usr\/audio\/bin" eq $pathcomponents[$i] ||
              "\/usr\/openwin\/demo" eq $pathcomponents[$i] ||
              "\/tools\/contrib\/bin" eq $pathcomponents[$i] ||
              "\/usr\/etc\/" eq $pathcomponents[$i] ||
              "\/usr\/demos\/bin" eq $pathcomponents[$i] ) {

            
            #print "dumped: $pathcomponents[$i]\n";
            next;
        }
            #print "keep: $pathcomponents[$i]\n";
    }
    for ( $j = 0; $j < $i; $j++ ) {
        if ( $pathcomponents[$j] eq $pathcomponents[$i] ) {
            #print "$i and $j match - $pathcomponents[$i] - $pathcomponents[$j]\n";
            $found=1;
            last;
        }
    }
    if ( $found == 0 ) {
        #print "$pathcomponents[$i]:";
        if ($i == 0) {
            $newpath = $pathcomponents[$i];
        } else {
            $newpath=join($delimiter, $newpath,$pathcomponents[$i]);
        }
    }
}
print "$newpath\n";
exit;


