mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			99 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env perl
 | 
						|
 | 
						|
use strict;
 | 
						|
use warnings;
 | 
						|
 | 
						|
use Getopt::Std qw(getopts);
 | 
						|
 | 
						|
my %opts;
 | 
						|
getopts("dm:", \%opts) or usage();
 | 
						|
 | 
						|
my $mode = $opts{m};
 | 
						|
 | 
						|
if ($opts{d}) {
 | 
						|
    shell("mkdir -p @ARGV");
 | 
						|
    exit;
 | 
						|
}
 | 
						|
 | 
						|
if (@ARGV < 2) {
 | 
						|
    usage();
 | 
						|
}
 | 
						|
 | 
						|
my $dst = pop;
 | 
						|
 | 
						|
my @src = @ARGV;
 | 
						|
 | 
						|
my $target_dir;
 | 
						|
 | 
						|
if (@src > 1 || $dst =~ m{/$}) {
 | 
						|
    $target_dir = $dst;
 | 
						|
 | 
						|
} elsif (-d $dst) {
 | 
						|
    $target_dir = $dst;
 | 
						|
 | 
						|
} elsif ($dst =~ m{(.+)/}) {
 | 
						|
    $target_dir = $1;
 | 
						|
 | 
						|
} else {
 | 
						|
    $target_dir = '.';
 | 
						|
}
 | 
						|
 | 
						|
if (!-d $target_dir) {
 | 
						|
    shell("mkdir -p $target_dir");
 | 
						|
}
 | 
						|
 | 
						|
if (-f $dst) {
 | 
						|
    shell("rm $dst");
 | 
						|
 | 
						|
} else {
 | 
						|
    for my $f (@src) {
 | 
						|
        if (-f $f) {
 | 
						|
            (my $name = $f) =~ s{.*/}{}g;
 | 
						|
            my $target = "$target_dir/$name";
 | 
						|
            if (-f $target) {
 | 
						|
                shell("rm $target");
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
shell("cp @src $dst");
 | 
						|
 | 
						|
if (-f $dst) {
 | 
						|
    if (defined $mode) {
 | 
						|
        chmod oct($mode), $dst or
 | 
						|
            die "failed to change mode of $dst to $mode.\n";
 | 
						|
    }
 | 
						|
 | 
						|
    exit;
 | 
						|
}
 | 
						|
 | 
						|
for my $src (@src) {
 | 
						|
    my $name;
 | 
						|
 | 
						|
    if ($src =~ m{/([^/]+)$}) {
 | 
						|
        $name = $1;
 | 
						|
 | 
						|
    } else {
 | 
						|
        $name = $src;
 | 
						|
    }
 | 
						|
 | 
						|
    if (defined $mode) {
 | 
						|
        my $target = "$target_dir/$name";
 | 
						|
        chmod oct($mode), $target or
 | 
						|
            die "failed to change mode of $target to $mode.\n";
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
sub usage {
 | 
						|
    die "Usage: install [-d] [-m <attrs>] <src>... <dst>\n";
 | 
						|
}
 | 
						|
 | 
						|
sub shell {
 | 
						|
    my $cmd = shift;
 | 
						|
    #warn $cmd;
 | 
						|
    system($cmd) == 0 or
 | 
						|
        die "failed to run command $cmd\n";
 | 
						|
}
 | 
						|
 |