summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2022-09-11 15:41:16 -0700
committerSean Whitton <spwhitton@spwhitton.name>2022-09-11 21:42:41 -0700
commitaaef86e93ddaa764f5ccd3f204cc9311215880cc (patch)
tree354ec71268205793ac84eb3dcadaa4f72bb2a5cc /bin
parent1aef06d24904114b2c96db066bd6bfd3b7579e85 (diff)
downloaddotfiles-aaef86e93ddaa764f5ccd3f204cc9311215880cc.tar.gz
reprepro-rebuilder: support crossbuilding for specified archs
Diffstat (limited to 'bin')
-rwxr-xr-xbin/reprepro-rebuilder45
1 files changed, 26 insertions, 19 deletions
diff --git a/bin/reprepro-rebuilder b/bin/reprepro-rebuilder
index df8aa9e4..b79864ac 100755
--- a/bin/reprepro-rebuilder
+++ b/bin/reprepro-rebuilder
@@ -27,16 +27,18 @@ use File::Basename;
use File::Spec::Functions "catfile", "rel2abs";
use File::Temp "tempdir";
use Array::Utils "array_minus";
+use List::Util "uniq";
use Git::Wrapper;
use Getopt::Long;
use Term::UI;
use File::chdir;
-our $repo = "$ENV{HOME}/lib/athena-apt";
-our $prefix = "athena";
-our @dists = qw(bullseye bullseye-backports unstable experimental);
-our $bpo_dist = "bullseye-backports";
-our $bpo_dist_num = 11;
+our $repo = "$ENV{HOME}/lib/athena-apt";
+our $prefix = "athena";
+our @dists = qw(bullseye bullseye-backports unstable experimental);
+our $bpo_dist = "bullseye-backports";
+our $bpo_dist_num = 11;
+our @crossbuild_archs = qw(arm64);
my $us = basename $0;
@@ -173,32 +175,37 @@ sub build {
reprepro("retrack", @dists);
foreach my $dist (@dists) {
- my @all_needed = map dsc2rel($_),
- reprepro("build-needing", $dist, "all");
- my @arch_needed = map dsc2rel($_),
- reprepro("build-needing", $dist, $arch);
- next unless @all_needed or @arch_needed;
+ my @all_needed = dsc2rel(reprepro("build-needing", $dist, "all"));
+ my @arch_needed = dsc2rel(reprepro("build-needing", $dist, $arch));
+ my %cross_needed = map {
+ my @dscs = reprepro("build-needing", $dist, $_);
+ @dscs ? ($_, [dsc2rel(@dscs)]) : ()
+ } grep $_ ne $arch, @crossbuild_archs;
+ next unless @all_needed or @arch_needed or %cross_needed;
@arch_needed = array_minus @arch_needed, @all_needed;
my $build_debs = sub {
- my @args = ("--no-run-lintian", "-d", $dist);
- push @args, shift ? "--arch-all" : "--no-arch-all";
+ my ($desc, @args) = shift->@*;
+ push @args, "--no-run-lintian", "-d", $dist;
for (@_) {
my $basename = basename $_;
{ no autodie; system "sbuild", @args, $basename }
- $? == 0
- ? push(@succeeded, $basename)
- : push(@failed, $basename);
+ push @{ $? == 0 ? \@succeeded : \@failed }, "$basename:$desc";
}
};
local $CWD = $repo;
my $temp = tempdir CLEANUP => 1;
- system "dcmd", "cp", $_, $temp for @all_needed, @arch_needed;
+ system "dcmd", "cp", $_, $temp
+ for uniq @all_needed, @arch_needed, map @$_, values %cross_needed;
local $CWD = $temp;
- $build_debs->(1, @all_needed);
- $build_debs->(0, @arch_needed);
+ $build_debs->([$arch, "--no-arch-all"], @arch_needed);
+ $build_debs->(["$arch+all", "--arch-all"], @all_needed);
+ $build_debs->(
+ [$_, "--no-arch-all", "--host=$_"],
+ $cross_needed{$_}->@*
+ ) for keys %cross_needed;
{
no autodie;
@@ -211,7 +218,7 @@ sub build {
say "failed builds: @failed" if @failed;
}
-sub dsc2rel { (split " ", $_[0])[2] }
+sub dsc2rel { map +(split)[2], @_ }
sub reprepro {
local $CWD = $repo;