summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorespie <espie@openbsd.org>2018-06-23 13:11:41 +0000
committerespie <espie@openbsd.org>2018-06-23 13:11:41 +0000
commit44c7a24371ec2c7e5e318f5e426ce25cfedd05bc (patch)
treec244ea5b8a44a2f4d0c950c87fb88a68e8c0af4b
parentImprove the consistency of variable naming in unp_externalize(). (diff)
downloadwireguard-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.pm43
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);