|  | #! /usr/bin/env perl | 
|  | # Copyright 2005-2018 The OpenSSL Project Authors. All Rights Reserved. | 
|  | # | 
|  | # Licensed under the OpenSSL license (the "License").  You may not use | 
|  | # this file except in compliance with the License.  You can obtain a copy | 
|  | # in the file LICENSE in the source distribution or at | 
|  | # https://www.openssl.org/source/license.html | 
|  |  | 
|  |  | 
|  | use Fcntl; | 
|  |  | 
|  |  | 
|  | # copy.pl | 
|  |  | 
|  | # Perl script 'copy' comment. On Windows the built in "copy" command also | 
|  | # copies timestamps: this messes up Makefile dependencies. | 
|  |  | 
|  | my $stripcr = 0; | 
|  |  | 
|  | my $arg; | 
|  | my @excludes = (); | 
|  |  | 
|  | foreach $arg (@ARGV) { | 
|  | if ($arg eq "-stripcr") | 
|  | { | 
|  | $stripcr = 1; | 
|  | next; | 
|  | } | 
|  | if ($arg =~ /^-exclude_re=(.*)$/) | 
|  | { | 
|  | push @excludes, $1; | 
|  | next; | 
|  | } | 
|  | $arg =~ s|\\|/|g;	# compensate for bug/feature in cygwin glob... | 
|  | $arg = qq("$arg") if ($arg =~ /\s/);	# compensate for bug in 5.10... | 
|  | foreach my $f (glob $arg) | 
|  | { | 
|  | push @filelist, $f unless grep { $f =~ /$_/ } @excludes; | 
|  | } | 
|  | } | 
|  |  | 
|  | $fnum = @filelist; | 
|  |  | 
|  | if ($fnum <= 1) | 
|  | { | 
|  | die "Need at least two filenames"; | 
|  | } | 
|  |  | 
|  | $dest = pop @filelist; | 
|  |  | 
|  | if ($fnum > 2 && ! -d $dest) | 
|  | { | 
|  | die "Destination must be a directory"; | 
|  | } | 
|  |  | 
|  | foreach (@filelist) | 
|  | { | 
|  | if (-d $dest) | 
|  | { | 
|  | $dfile = $_; | 
|  | $dfile =~ s|^.*[/\\]([^/\\]*)$|$1|; | 
|  | $dfile = "$dest/$dfile"; | 
|  | } | 
|  | else | 
|  | { | 
|  | $dfile = $dest; | 
|  | } | 
|  | sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_"; | 
|  | sysopen(OUT, $dfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY) | 
|  | || die "Can't Open $dfile"; | 
|  | while (sysread IN, $buf, 10240) | 
|  | { | 
|  | if ($stripcr) | 
|  | { | 
|  | $buf =~ tr/\015//d; | 
|  | } | 
|  | syswrite(OUT, $buf, length($buf)); | 
|  | } | 
|  | close(IN); | 
|  | close(OUT); | 
|  | print "Copying: $_ to $dfile\n"; | 
|  | } | 
|  |  | 
|  |  |