summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2018-01-18 10:41:53 +0100
committerSergey Poznyakoff <gray@gnu.org.ua>2018-01-18 10:41:53 +0100
commit4d73721eee53abef0127119a8e3fa6a7517a8159 (patch)
tree94a4b0b8f4144e6efe12ce968e268cebf1f18281
parentd5b1a8029b6c0c9c53f8f4b94f6bc86080ff2608 (diff)
downloadslackbuilder-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.pm4
-rw-r--r--lib/SlackBuilder.pm50
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);
}
}

Return to:

Send suggestions and report system problems to the System administrator.