1 27363023 2022-08-25 op #!/usr/bin/env perl
3 27363023 2022-08-25 op use open ":std", ":encoding(UTF-8)";
7 27363023 2022-08-25 op use IO::Poll qw(POLLOUT);
9 054f3fd4 2022-08-25 op use OpenBSD::Pledge;
10 054f3fd4 2022-08-25 op use OpenBSD::Unveil;
12 27363023 2022-08-25 op my $jobs = $ENV{'MAKE_JOBS'} // 1;
14 27363023 2022-08-25 op my $poll = IO::Poll->new();
15 27363023 2022-08-25 op for (1..$jobs) {
16 27363023 2022-08-25 op open(my $kid, '|-', './mexp') or die "can't exec ./mexp: $!";
17 27363023 2022-08-25 op $poll->mask($kid => POLLOUT);
21 27363023 2022-08-25 op die "poll: $!" if $poll->poll() == -1;
22 27363023 2022-08-25 op my @handles = $poll->handles(POLLOUT) or die "no procs ready?";
23 27363023 2022-08-25 op my $handle = $handles[int(rand(@handles))];
24 27363023 2022-08-25 op say $handle $_ foreach @_;
27 054f3fd4 2022-08-25 op unveil("./mexp", "rx") or die "unveil mexp: $!";
28 054f3fd4 2022-08-25 op pledge("stdio proc exec") or die "pledge: $!";
32 27363023 2022-08-25 op print; # continue the pipeline
35 27363023 2022-08-25 op m/^([^ ]+) <([^>]+)> (.+)(\d{4}-\d{2}-\d{2} \d{2}:\d{2}) <([^>]+)> (.*)/;
36 27363023 2022-08-25 op die "can't parse: $_" unless defined $1;
38 27363023 2022-08-25 op my $level = length($3) - 1;
39 27363023 2022-08-25 op $level = 10 if $3 =~ m/\.\.\d{2}\.\./;
41 27363023 2022-08-25 op if ($level == 0 && @thread) {
42 27363023 2022-08-25 op process @thread;
46 27363023 2022-08-25 op push @thread, $_;
49 27363023 2022-08-25 op process @thread if @thread;