From d0b3a5b8b20f282d6a3cefdd5845691cbed6a33a Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Wed, 20 Nov 2002 22:33:15 +0000 Subject: [PATCH] * lib/Automake/Conditional.pm (strip): New function. * lib/Automake/ConditionalSet.pm (sub_conditions): Use it. Suggested by Raja R Harinath. --- ChangeLog | 4 ++++ lib/Automake/Conditional.pm | 22 ++++++++++++++++++++++ lib/Automake/ConditionalSet.pm | 22 ++++++++++------------ 3 files changed, 36 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5a78c8a7..60fa609e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2002-11-20 Alexandre Duret-Lutz + * lib/Automake/Conditional.pm (strip): New function. + * lib/Automake/ConditionalSet.pm (sub_conditions): Use it. + Suggested by Raja R Harinath. + * automake.in (conditional_ambiguous_p, macro_define, rule_define, require_variables): Use ->human instead of ->string. * lib/Automake/Conditional.pm (string): Don't sort conditions, they diff --git a/lib/Automake/Conditional.pm b/lib/Automake/Conditional.pm index c2d6551f..df36938f 100644 --- a/lib/Automake/Conditional.pm +++ b/lib/Automake/Conditional.pm @@ -44,6 +44,10 @@ Automake::Conditional - record a conjunction of conditions # Likewise, but using a list of atomic conditional strings my $both2 = $cond->merge_conds ("COND3_FALSE"); + # Strip from $both any subconditions which are in $other. + # This is the opposite of merge. + $cond = $both->strip ($other); + # Return the list of conditions ("COND1_TRUE", "COND2_FALSE"): my @conds = $cond->conds; @@ -228,6 +232,24 @@ sub merge_conds ($@) new Automake::Conditional $self->conds, @conds; } +=item C<$newcond = $cond-Estrip ($minuscond)> + +Return a new condition which has all the subconditions of C<$cond> +except those of C<$minuscond>. This is the opposite of C. + +=cut + +sub strip ($$) +{ + my ($self, $minus) = @_; + my @res; + foreach my $cond ($self->conds) + { + push @res, $cond unless $minus->has ($cond); + } + return new Automake::Conditional @res; +} + =item C<@list = $cond-Econds> Return the set of conditions defining C<$cond>, as strings. Note that diff --git a/lib/Automake/ConditionalSet.pm b/lib/Automake/ConditionalSet.pm index 9ace53bf..b9fdb487 100644 --- a/lib/Automake/ConditionalSet.pm +++ b/lib/Automake/ConditionalSet.pm @@ -52,6 +52,13 @@ Automake::ConditionalSet - record a disjunction of conditions # that complements $set. my $inv = $set->invert; + # Multiply two ConditionalSets. + my $prod = $set1->multiply ($set2) + + # Return the subconditions of a ConditionalSet with respect to + # a Conditional. See the description for a real example. + my $subconds = $set->sub_conditions ($cond) + =head1 DESCRIPTION A C is a disjunction of atomic conditions. In @@ -712,7 +719,6 @@ C. sub sub_conditions ($$) { my ($self, $subcond) = @_; - my @res; # Make $subcond blindingly apparent in the ConditionalSet. # For instance `$a->_multiply($b)' (from the POD example) is: @@ -723,19 +729,11 @@ sub sub_conditions ($$) # new Automake::Conditional ("FALSE")); my $prod = $self->_multiply ($subcond); - # Now, strip $subcond from the non-false Conditionals. + # Now, strip $subcond from the remaining (i.e., non-false) Conditionals. + my @res; foreach my $c ($prod->conds) { - if (! $c->false) - { - my @rescond; - foreach my $cc ($c->conds) - { - push @rescond, $cc - unless $subcond->has ($cc); - } - push @res, new Automake::Conditional @rescond; - } + push @res, $c->strip ($subcond) unless $c->false; } return new Automake::ConditionalSet @res; } -- 2.43.5