1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
#!/usr/bin/perl -w
use strict;
use warnings FATAL => 'all';
use Data::Dumper;
use File::Basename;
use FileHandle;
use File::Find;
use File::Spec;
use File::Path;
use File::Copy;
use Cwd;
local $SIG{__DIE__} = sub
{
for (my $i = 0; ; $i++)
{
last unless (my @c = caller ($i));
printf ("%s:%d\n", @c[1,2]);
}
};
sub runCommand
{
my @cmd = @_;
print "@cmd\n";
system (@cmd)
and die ("Command `@cmd' failed");
}
sub copyLink
{
my ($src, $dir) = @_;
my $dst = "$dir/$src";
&mkpath (&dirname ($dst));
unlink ($dst);
symlink (readlink ($src), $dst)
or die ("Creating symbolic link $dst failed");
}
sub copyFile
{
my ($src, $dir) = @_;
my $dst = "$dir/$src";
&mkpath (&dirname ($dst));
unlink ($dst);
link ($src, $dst)
or die ("Copy $src, $dst failed");
}
sub copyDirectory
{
my ($src, $dir) = @_;
my $dst = "$dir/$src";
&mkpath (&dirname ($dst));
&runCommand ('cp', '-alf', $src, $dst);
}
sub copyNode
{
my ($f, $dir) = @_;
if (-l $f)
{
©Link ($f, $dir);
}
elsif (-f $f)
{
©File ($f, $dir);
}
elsif (-d $f)
{
©Directory ($f, $dir);
}
}
sub installFile
{
my ($src, $dir) = @_;
©Node ($src, $dir);
}
my @pack = map { &basename ($_, qw (.install)) } <debian/*.install>;
my @node;
for my $pack (@pack)
{
push @node, grep { !/^#/o } do { my $fh = 'FileHandle'->new ("<debian/$pack.install"); <$fh> };
}
for (@node)
{
chomp;
s/\s+.*$//o;
s,^(\w+/),,o;
}
for my $node (@node)
{
for (glob ($node))
{
&installFile ($_, "debian/tmp/usr");
}
}
|