diff --git a/scripts/prt-auf b/scripts/prt-auf index 2f58a1e..b2006c9 100755 --- a/scripts/prt-auf +++ b/scripts/prt-auf @@ -504,6 +504,7 @@ sub list_ports { if (($subset eq "dependent") and (! find_port_by_name($seed,1,1,0))) { print "$seed not found in the ports tree.\n"; return; } + $seed =~ s/\+/\\\+/g; # workaround for any port with a plus sign in its name our @searchspace=(($subset eq "orphans") or ($odepends{all}==0)) ? keys %V_INST : keys %DEPENDS; @@ -645,6 +646,7 @@ sub deporder { sub up_inst { # returns scalar references to five arrays my $type=shift; my @requested=@_; my %EXEMPT; my %WANTED; my %pdirs; + my %builtpkg; my %mkcmd; my %addcmd; my %status; my %logfile; my %pvars; my $PKGMK=$opkg{makecommand}; my $PKGADD=$opkg{addcommand}; my $SUDO="/usr/bin/doas"; my $FAKEROOT="/usr/bin/fakeroot"; @@ -669,24 +671,23 @@ sub up_inst { # returns scalar references to five arrays # first determine the directories from which pkgmk must be called, # the package that will appear after a successful build, # and where to save the build log. - my %builtpkg; my %mkcmd; my %addcmd; my %status; my %logfile; my %pvars; my ($COMPRESSION, $PKG_DIR) = parse_pkgmk_conf(); foreach my $t (@targets) { - $opkg{$t} = $opkg{margs}; $pvars{'%n'}=$t; - $opkg{$t} =~ s/-f// unless ($WANTED{$t}); - $pvars{'%p'} = find_port_by_name($t,1,1,0); $pdirs{$t} = $pvars{'%p'}; - ($pvars{'%v'}, $pvars{'%r'}) = (get_pkgfile_fields($pvars{'%p'}))[0,1]; - $builtpkg{$t} = ($PKG_DIR) ? "$PKG_DIR/$t#$pvars{'%v'}-$pvars{'%r'}.pkg.tar.$COMPRESSION" : "$pvars{'%p'}/$t#$pvars{'%v'}-$pvars{'%r'}.pkg.tar.$COMPRESSION"; - $builtpkg{$t} =~ s/\$name/$t/g; $builtpkg{$t} =~ s/\$\{name\}/$t/g; - $mkcmd{$t} = "$PKGMK -d $opkg{$t}"; - $addcmd{$t} = "$PKGADD -u $builtpkg{$t}"; - $status{$t} = "not done"; - if ($olog{write} eq "enabled") { - $logfile{$t} = $olog{file}; - $logfile{$t} =~ s/(%n|%v|%r|%p)/$pvars{$1}/g; - $mkcmd{$t} .= ($olog{mode} eq "append") ? " 2>&1 |/usr/bin/tee -a $logfile{$t}" - : " 2>&1 |/usr/bin/tee $logfile{$t}"; - } + $opkg{$t} = $opkg{margs}; $pvars{'%n'}=$t; + $opkg{$t} =~ s/-f// unless ($WANTED{$t}); + $pvars{'%p'} = find_port_by_name($t,1,1,0); $pdirs{$t} = $pvars{'%p'}; + ($pvars{'%v'}, $pvars{'%r'}) = (get_pkgfile_fields($pvars{'%p'}))[0,1]; + $builtpkg{$t} = ($PKG_DIR) ? "$PKG_DIR/$t#$pvars{'%v'}-$pvars{'%r'}.pkg.tar.$COMPRESSION" : "$pvars{'%p'}/$t#$pvars{'%v'}-$pvars{'%r'}.pkg.tar.$COMPRESSION"; + $builtpkg{$t} =~ s/\$name/$t/g; $builtpkg{$t} =~ s/\$\{name\}/$t/g; + $mkcmd{$t} = "$PKGMK -d $opkg{$t}"; + $addcmd{$t} = "$PKGADD -u $builtpkg{$t}"; + $status{$t} = "not done"; + if ($olog{write} eq "enabled") { + $logfile{$t} = $olog{file}; + $logfile{$t} =~ s/(%n|%v|%r|%p)/$pvars{$1}/g; + $mkcmd{$t} .= ($olog{mode} eq "append") ? " 2>&1 |/usr/bin/tee -a $logfile{$t}" + : " 2>&1 |/usr/bin/tee $logfile{$t}"; + } } # build each package, unless already installed or satisfied by an alias @@ -702,12 +703,13 @@ sub up_inst { # returns scalar references to five arrays if ($mkcmd{$t}) { if ((-f "$pdirs{$t}/pre-install") and ($opkg{runscripts} eq "yes")) { - system("sh","$pdirs{$t}/pre-install") unless ($opkg{test} eq "yes"); - $status{$t} .= ( $?>>8 == 0 ) ? "pre-install ok. " : "pre-install failed. "; + system("sh","$pdirs{$t}/pre-install") unless ($opkg{test} eq "yes"); + $status{$t} .= ( $?>>8 == 0 ) ? "pre-install ok. " : "pre-install failed. "; } ($opkg{test} eq "no") ? chdir $pdirs{$t} : print "cd $pdirs{$t}\n"; ($opkg{test} eq "no") ? system("$mkcmd{$t}") : print "$mkcmd{$t}\n"; - $status{$t} .= ( $?>>8 == 0 ) ? "build ok. " : "build failed. "; + $status{$t} .= ( $?>>8 == 0 ) ? "build ok. " : "build failed. " unless ($logfile{$t}); + $status{$t} .= (! log_failure($logfile{$t})) ? "build ok. " : "build failed. " if ($logfile{$t}); $status{$t} = ( $mkcmd{$t} =~ /skipped/ ) ? "build skipped. " : $status{$t}; if (($status{$t} =~ /build ok/) or ($mkcmd{$t} =~ /up to date/)) { $addcmd{$t} =~ s/ -u / / if (port_diff("utd",$t)<0); @@ -724,6 +726,13 @@ sub up_inst { # returns scalar references to five arrays last if (($status{$t} =~ /failed/) and ($type eq "grpinst")); } + sub log_failure { + my $lf=shift; local $/=""; my $failed=0; + open(FH,$lf) or return 0; + while () { $failed=1 if m/ERROR: Unsuccessful build!$/; } + close(FH); return $failed; + } + my @ok = grep { $status{$_} =~ /pkgadd ok/ } @targets; my @ok_pre = grep { $status{$_} =~ /pre-install ok/ } @targets; my @ok_post = grep { $status{$_} =~ /post-install ok/ } @ok;