diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-01-18 10:41:53 +0100 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2018-01-18 10:41:53 +0100 |
commit | 4d73721eee53abef0127119a8e3fa6a7517a8159 (patch) | |
tree | 94a4b0b8f4144e6efe12ce968e268cebf1f18281 | |
parent | d5b1a8029b6c0c9c53f8f4b94f6bc86080ff2608 (diff) | |
download | slackbuilder-4d73721eee53abef0127119a8e3fa6a7517a8159.tar.gz slackbuilder-4d73721eee53abef0127119a8e3fa6a7517a8159.tar.bz2 |
Place output packages into a subdirectory named after the version of Slackware it was built for
* lib/SlackBuild/Rc.pm (code): Source /etc/os-release and emit
additional output to help SlackBuilder determine Slackware version.
* lib/SlackBuilder.pm (osversion): New method.
(file): Place output package into a subdirectory named after the
Slackware version.
(_build): Set osversion
-rw-r--r-- | lib/SlackBuild/Rc.pm | 4 | ||||
-rw-r--r-- | lib/SlackBuilder.pm | 50 |
2 files changed, 31 insertions, 23 deletions
diff --git a/lib/SlackBuild/Rc.pm b/lib/SlackBuild/Rc.pm index 487c5aa..1e85032 100644 --- a/lib/SlackBuild/Rc.pm +++ b/lib/SlackBuild/Rc.pm @@ -42,7 +42,9 @@ sub code { $self->builder->error("$_: package not resolved") for (@$unresolved); return; } - my @code = ('#! /bin/sh', 'set -e', + my @code = ('#! /bin/sh', + 'set -e', + '(. /etc/os-release; echo SLACKBUILDER: DISTRO $NAME; echo SLACKBUILDER: VERSION $VERSION)', map { "/sbin/installpkg /var/pkg/$_" } @$pkglist); my $env = $self->builder->environ; diff --git a/lib/SlackBuilder.pm b/lib/SlackBuilder.pm index fb6827f..688a697 100644 --- a/lib/SlackBuilder.pm +++ b/lib/SlackBuilder.pm @@ -99,31 +99,19 @@ sub clear { my %kws = ( package => { mandatory => 1, - set => sub { - my ($self, $v) = @_; - $self->package_name($v); - } + set => \&package_name }, version => { mandatory => 1, - set => sub { - my ($self, $v) = @_; - $self->package_version($v); - } + set => \&package_version }, build => { mandatory => 0, - set => sub { - my ($self, $v) = @_; - $self->package_build($v); - } + set => \&package_build }, slackbuild_uri => { mandatory => 1, - set => sub { - my ($self, $v) = @_; - $self->slackbuild_uri($v); - } + set => \&slackbuild_uri }, source_uri => { mandatory => 0, @@ -134,10 +122,7 @@ my %kws = ( }, source_archive_name => { mandatory => 0, - set => sub { - my ($self, $v) = @_; - $self->source_archive_name($v); - } + set => \&source_archive_name }, prereq => { mandatory => 0, @@ -210,7 +195,17 @@ sub environ { sub file { my ($self, $name) = @_; my $src = File::Spec->catfile($self->tmpdir, $name); - my $dst = File::Spec->catfile($self->pkgdir, $name); + my $dst = File::Spec->catfile($self->pkgdir, $self->osversion, $name); + + my $dstdir = dirname($dst); + if (! -d $dstdir) { + unless (mkdir($dstdir)) { + $self->error("mkdir($dstdir): $!"); + $self->errno(E_FAIL); + return; + } + } + if (-e $dst) { unlink $dst; } @@ -221,6 +216,15 @@ sub file { push @{$self->{_result}{output_files}}, $name; } +sub osversion { + my $self = shift; + croak "too many arguments" if @_ > 1; + if (my $v = shift) { + $self->{_osversion} = $v; + } + return $self->{_osversion} // "UNKNOWN"; +} + sub output_files { my $self = shift; $self->{_result}{output_files} //= []; @@ -417,7 +421,9 @@ sub _build { $obj->rewind(SD_STDOUT); while (my $s = $obj->next_line(SD_STDOUT)) { chomp($s); - if ($s =~ m{^Slackware package /tmp/(.+?) created}) { + if ($s =~ s{^SLACKBUILDER: VERSION }{}) { + $self->osversion($s); + } elsif ($s =~ m{^Slackware package /tmp/(.+?) created}) { $self->file($1); } } |