diff options
author | 2018-06-23 13:11:41 +0000 | |
---|---|---|
committer | 2018-06-23 13:11:41 +0000 | |
commit | 44c7a24371ec2c7e5e318f5e426ce25cfedd05bc (patch) | |
tree | c244ea5b8a44a2f4d0c950c87fb88a68e8c0af4b | |
parent | Improve the consistency of variable naming in unp_externalize(). (diff) | |
download | wireguard-openbsd-44c7a24371ec2c7e5e318f5e426ce25cfedd05bc.tar.xz wireguard-openbsd-44c7a24371ec2c7e5e318f5e426ce25cfedd05bc.zip |
do some more basic checking of tags vs define-tag so that parameter usage
is handled more gracefully
-rw-r--r-- | usr.sbin/pkg_add/OpenBSD/PkgCreate.pm | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm b/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm index 4c3c077b96a..7d4a3a99710 100644 --- a/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm +++ b/usr.sbin/pkg_add/OpenBSD/PkgCreate.pm @@ -1,6 +1,6 @@ #! /usr/bin/perl # ex:ts=8 sw=4: -# $OpenBSD: PkgCreate.pm,v 1.145 2018/06/22 21:29:06 espie Exp $ +# $OpenBSD: PkgCreate.pm,v 1.146 2018/06/23 13:11:41 espie Exp $ # # Copyright (c) 2003-2014 Marc Espie <espie@openbsd.org> # @@ -911,6 +911,35 @@ sub solve_wantlibs return $okay; } +sub verify_tag +{ + my ($self, $tag, $state, $final) = @_; + if (!defined $tag->{definition_list}) { + $state->errsay("Can't find \@tag #1 in dependency tree", + $tag->name) if $final; + return 0; + } + my $use_params = 0; + for my $d (@{$tag->{definition_list}}) { + if ($d->{expanded} =~ m/\%[lu]/) { + $use_params = 1; + last; + } + } + if ($tag->{params} eq '' && $use_params) { + $state->errsay( + "\@tag #1 has no parameters but some define wants them", + $tag->name) if $final; + return 0; + } elsif ($tag->{params} ne '' && !$use_params) { + $state->errsay( + "\@tag #1 has parameters but no define uses them", + $tag->name) if $final; + return 0; + } + return 1; +} + sub solve_tags { my ($solver, $state, $final) = @_; @@ -921,12 +950,12 @@ sub solve_tags $solver->{tag_finder} //= OpenBSD::lookup::tag->new($solver, $state); return 1 if !defined $plist->{tags}; for my $tag (@{$plist->{tags}}) { - next if $solver->{tag_finder}->lookup($solver, - $solver->{to_register}{$h}, $state, $tag); - next if $solver->find_in_self($plist, $state, $tag); - $state->errsay("Can't do #1: tag definition not found #2", - $plist->pkgname, $tag->name) if $final; - $okay = 0; + $solver->{tag_finder}->lookup($solver, + $solver->{to_register}{$h}, $state, $tag) || + $solver->find_in_self($plist, $state, $tag); + if (!$solver->verify_tag($tag, $state, $final)) { + $okay = 0; + } } if (!$okay && $final) { $solver->dump($state); |