#! /usr/local/bin/perl -w
# -*- mode:perl -*-
# $Id: readlink.pl,v 1.20 1998/08/26 00:56:57 user Exp $
# Copyright (c) 2002 travis+web@subspacefield.org

use strict;
use integer; # REMOVE IF YOU USE FLOATING POINT!

use File::Basename;
$main::progname = basename $0;

use Getopt::Long;

$main::quiet = 0;
$main::abs = 0;
$main::chase = 0;
$main::track = 0;
$main::sep = ' ';
GetOptions('quiet', \$main::quiet, 'abs', \$main::abs, 'chase', \$main::chase,
	   'track', \$main::track, 'sep=s', \$main::sep)
    or die "Usage: $main::progname [--quiet] [--abs | [--sep string] [--chase | --track]] [files...]\n";

$main::chase = 1 if $main::track;
$main::abs = 1 if $main::chase;

if ($main::abs) { use File::PathConvert; }

$main::exitcode = 0;

my $linkee;
ARGUMENT:
foreach (@ARGV ? @ARGV : map { scalar(chomp $_, $_) } <STDIN>) {
    goto START_PRINTING if $main::track;
    if ($linkee = readlink $_) {
	$_ = $linkee;
	$linkee = "";
	goto START_PRINTING unless $main::abs;
	while (1) {
	    $_ = File::PathConvert::rel2abs($_, $linkee);
	    $linkee = dirname $_;
	  START_PRINTING:
	    print;
	    unless ($main::chase and $_ = readlink)	{
		print "\n";
		next ARGUMENT;
	    }
	    print $main::sep;
	}
    }
    else {
	warn "$main::progname: error reading link $_: $!\n" unless $main::quiet;
	$main::exitcode++;
    }
}

exit $main::exitcode;



