63 строки
1.3 KiB
Perl
Executable File
63 строки
1.3 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use Cwd qw( cwd );
|
|
use Getopt::Std;
|
|
|
|
my %opts;
|
|
getopts('f', \%opts) or
|
|
die "Usage: $0 [-f]
|
|
Options:
|
|
-f Override exising symbolic links with force
|
|
";
|
|
|
|
my $root = shift || 'src';
|
|
|
|
my $force = $opts{f};
|
|
|
|
opendir my $dir, $root
|
|
or die "Can't open directory src/ for reading: $!\n";
|
|
|
|
my @links;
|
|
|
|
while (my $entry = readdir $dir) {
|
|
my ($base, $ext);
|
|
|
|
my $source = "$root/$entry";
|
|
|
|
if (-l $source || -d $source) {
|
|
warn "skipping $source\n";
|
|
next;
|
|
}
|
|
|
|
if ($entry =~ m{ ^ ngx_ (?: \w+ _ )+ (\w+) \. ([ch]|rl) $}x) {
|
|
($base, $ext) = ($1, $2);
|
|
} else {
|
|
next;
|
|
}
|
|
|
|
my $target = "$root/$base.$ext";
|
|
if (-e $target && ! -l $target) {
|
|
die "target $target already exists, and not a symlink, not overriding...Abort.\n";
|
|
} elsif (-l $target) {
|
|
#warn "it's a link";
|
|
if ( ! $force ) {
|
|
die "target $target already exists, not overriding...Abort.\n";
|
|
}
|
|
warn "overriding existing symlink $target\n";
|
|
}
|
|
#warn "creating $target --> $root/$entry\n";
|
|
system("ln -svf `pwd`/$source $target") == 0 or
|
|
die "Failed to create the symlink\n";;
|
|
|
|
push @links, $target;
|
|
}
|
|
|
|
print join("\n", @links), "\n";
|
|
|
|
close $dir;
|
|
|
|
|