diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2022-09-11 15:41:16 -0700 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2022-09-11 21:42:41 -0700 |
commit | aaef86e93ddaa764f5ccd3f204cc9311215880cc (patch) | |
tree | 354ec71268205793ac84eb3dcadaa4f72bb2a5cc /bin | |
parent | 1aef06d24904114b2c96db066bd6bfd3b7579e85 (diff) | |
download | dotfiles-aaef86e93ddaa764f5ccd3f204cc9311215880cc.tar.gz |
reprepro-rebuilder: support crossbuilding for specified archs
Diffstat (limited to 'bin')
-rwxr-xr-x | bin/reprepro-rebuilder | 45 |
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; |