diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-06-14 16:27:09 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-06-14 16:27:09 +0200 |
commit | 7c785ca236c25c0f18448c9c01bdb784cbcbf615 (patch) | |
tree | 4f9672d270b0d4d51d8c0b2d5e0efef49601f183 /lib/SlackBuild/Request.pm | |
parent | 14f145017b8c50e92384ab16bbdf48a84d7acc96 (diff) | |
download | slackbuilder-7c785ca236c25c0f18448c9c01bdb784cbcbf615.tar.gz slackbuilder-7c785ca236c25c0f18448c9c01bdb784cbcbf615.tar.bz2 |
Optionally modify local file names for downloaded sources
* lib/SlackBuild/Request.pm (local_name): New attribute.
(extract_local_name): New method.
* lib/SlackBuilder.pm (run): Use request->extract_local_name to
obtain local file name from URI.
Diffstat (limited to 'lib/SlackBuild/Request.pm')
-rw-r--r-- | lib/SlackBuild/Request.pm | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/lib/SlackBuild/Request.pm b/lib/SlackBuild/Request.pm index 531c221..53d1e16 100644 --- a/lib/SlackBuild/Request.pm +++ b/lib/SlackBuild/Request.pm @@ -5,6 +5,8 @@ use Carp; use SlackBuild::URI; use Text::ParseWords; use JSON; +use File::Basename; +use Safe; =head1 NAME @@ -95,6 +97,9 @@ my %attributes = ( }, environ => { type => 'HASH' + }, + local_name => { + type => 'ARRAY' } ); @@ -219,4 +224,26 @@ sub prereq { } } +sub extract_local_name { + my ($self, $path) = @_; + my $result; + + if (my $codelist = $self->local_name) { + my $s = new Safe; + my $package = $self->package; + my $version = $self->version; + $s->share('$package','$version'); + foreach my $code (@$codelist) { + $_ = $path; + if (defined(my $r = $s->reval($code))) { + $result = $_; + last; + } else { + croak "failed to eval \"$code\" on \"$path\": \n$@\n"; + } + } + } + return $result || basename($path) +} + 1; |