The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use Getopt::Long;
use Config;
use File::Spec;

# If you have several working directories and they all use a shared DrIFT,
# you need to point symlinks to the current one if you want to regenerate
# files. We should probably make this arrangement less hacky, but until
# we do, this "claims" DrIFT links.
#
# usage: cd $pugs_wd ; util/claim-drift.pl

our ($FS) = ($Config{sitelib} =~ /([\/\\])/)
       or die "Can't determine file_sep";

GetOptions \our %Conf, qw(--verbose|v --no|n);

if (! -d "..${FS}DrIFT") {
    warn <<".";
*** No DrIFT directory found. Make sure you are in the top level of a pugs
    working directory, and that you have a copy of DrIFT one level up.
.
    exit 1;
}

for my $orig (glob join $FS, qw<.. DrIFT src *.hs>) {
    (my $real = $orig) =~ s,.*$FS,src${FS}DrIFT${FS},;
    next unless -f $real;
    my $clean = sub { $_[0] = File::Spec->canonpath(File::Spec->rel2abs($_[0])) };

    $clean->($orig);
    $clean->($real);

    print "rm $orig\n"                                    if $Conf{verbose};
    do { 1 == unlink  $orig        or die "unlink: $!" }  unless $Conf{no};

    print "ln -s $real $orig\n"                           if $Conf{verbose};
    do { 1 == symlink $real, $orig or die "symlink: $!" } unless $Conf{no};
}