[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
62-variable-pretty-output.patch
From: |
Akim Demaille |
Subject: |
62-variable-pretty-output.patch |
Date: |
Mon, 19 Mar 2001 10:21:53 +0100 |
There is one test that fails with this patch, but I leave it on
purpose, because there is a choice to make: is it Makefile.in that
should be pretty, or is it Makefile?
The current situation, left by this patch, looks like:
am/tests/testSubDir % cat produced 22:33 remo
@ONE_FALSE@@THREE_FALSE@@address@hidden = two.$(OBJEXT)
@ONE_FALSE@@THREE_FALSE@@address@hidden =
@ONE_FALSE@@THREE_TRUE@@address@hidden = two.$(OBJEXT) \
@ONE_FALSE@@THREE_TRUE@@TWO_TRUE@ three.$(OBJEXT)
@ONE_FALSE@@THREE_TRUE@@address@hidden = three.$(OBJEXT)
@ONE_TRUE@@THREE_FALSE@@address@hidden = one.$(OBJEXT) \
@ONE_TRUE@@THREE_FALSE@@TWO_TRUE@ two.$(OBJEXT)
@ONE_TRUE@@THREE_FALSE@@address@hidden = one.$(OBJEXT)
@ONE_TRUE@@THREE_TRUE@@address@hidden = one.$(OBJEXT) \
@ONE_TRUE@@THREE_TRUE@@TWO_TRUE@ two.$(OBJEXT) three.$(OBJEXT)
@ONE_TRUE@@THREE_TRUE@@address@hidden = one.$(OBJEXT) \
@ONE_TRUE@@THREE_TRUE@@TWO_FALSE@ three.$(OBJEXT)
clearly, Makefile.in looks nice. Before we had:
am/tests/testSubDir % cat expected 22:33 remo
@ONE_FALSE@@THREE_FALSE@@address@hidden = two.$(OBJEXT)
@ONE_FALSE@@THREE_FALSE@@address@hidden =
@ONE_FALSE@@THREE_TRUE@@address@hidden = two.$(OBJEXT) \
@ONE_FALSE@@THREE_TRUE@@TWO_TRUE@ three.$(OBJEXT)
@ONE_FALSE@@THREE_TRUE@@address@hidden = three.$(OBJEXT)
@ONE_TRUE@@THREE_FALSE@@address@hidden = one.$(OBJEXT) \
@ONE_TRUE@@THREE_FALSE@@TWO_TRUE@ two.$(OBJEXT)
@ONE_TRUE@@THREE_FALSE@@address@hidden = one.$(OBJEXT)
@ONE_TRUE@@THREE_TRUE@@address@hidden = one.$(OBJEXT) \
@ONE_TRUE@@THREE_TRUE@@TWO_TRUE@ two.$(OBJEXT) three.$(OBJEXT)
@ONE_TRUE@@THREE_TRUE@@address@hidden = one.$(OBJEXT) \
@ONE_TRUE@@THREE_TRUE@@TWO_FALSE@ three.$(OBJEXT)
which will make a nicer Makefile. Hence my question: should we
neglect the length of the conditions because we consider filling when
they are AC_SUBST'ed, or we should consider their length before
substitution for filling?
Index: ChangeLog
from Akim Demaille <address@hidden>
* automake.in (&variable_output): Admit a list of @CONDS.
(&variable_pretty_output): New.
(&define_pretty_variable): Use it.
(&read_am_file, &file_contents_internal): Prepend a separator to
$am_vars only if there is none yet.
(&file_contents_internal): Rename $separator as $spacing to
harmonize with &read_am_file.
Index: automake.in
--- automake.in Mon, 12 Mar 2001 21:43:02 +0100 akim (am/f/39_automake.i 1.180
755)
+++ automake.in Mon, 12 Mar 2001 22:28:15 +0100 akim (am/f/39_automake.i 1.180
755)
@@ -6102,27 +6102,56 @@ sub variable_value_as_list_worker
}
-# &variable_output ($VAR)
-# -----------------------
-sub variable_output ($)
+# &variable_output ($VAR, address@hidden)
+# ---------------------------------
+# Output all the values of $VAR is @COND is not specified, else only
+# that corresponding to @COND.
+sub variable_output ($@)
{
- my ($var) = @_;
+ my ($var, @conds) = @_;
+
+ @conds = sort by_condition keys %{$conditional{$var}}
+ unless @conds;
$output_vars .= $am_vars{$var}
if defined $am_vars{$var};
- foreach my $cond (sort by_condition keys %{$conditional{$var}})
+ foreach my $cond (@conds)
{
my $val = $conditional{$var}{$cond};
- my $output_var = ($var . ' '
- . $def_type{$var} . "= "
- . $val);
+ my $output_var = "$var $def_type{$var}= $val";
$output_var =~ s/^/&make_condition ($cond)/meg;
$output_vars .= $output_var . "\n";
}
}
+# &variable_pretty_output ($VAR, address@hidden)
+# ----------------------------------------
+# Likewise, but pretty, i.e., we *split* the values at spaces. Use only
+# with variables holding filenames.
+sub variable_pretty_output ($@)
+{
+ my ($var, @conds) = @_;
+
+ @conds = sort by_condition keys %{$conditional{$var}}
+ unless @conds;
+
+ $output_vars .= $am_vars{$var}
+ if defined $am_vars{$var};
+
+ foreach my $cond (@conds)
+ {
+ my $val = $conditional{$var}{$cond};
+ my $make_condition = make_condition ($cond);
+ $output_vars .= pretty_print_internal ("$make_condition$var"
+ . " $def_type{$var}=",
+ "$make_condition\t",
+ split (' ' , $val));
+ }
+}
+
+
# This is just a wrapper for variable_value_as_list_worker that
# initializes the global hash `vars_scanned'. This hash is used to
# avoid infinite recursion.
@@ -6144,12 +6173,14 @@ sub define_pretty_variable
{
my ($var, $cond, @value) = @_;
+ # Beware that an empty $cond has a different semantics for
+ # variable_define and variable_pretty_output.
+ $cond ||= 'TRUE';
+
if (! &variable_defined ($var, $cond))
{
variable_define ($var, 0, '', $cond, join (' ', @value), undef);
- my $make_condition = &make_condition ($cond);
- &pretty_print ($make_condition . $var . ' =',
- $make_condition, @value);
+ variable_pretty_output ($var, $cond || 'TRUE');
$content_seen{$var} = 1;
}
elsif ($var_was_plus_eq{$var})
@@ -6380,7 +6411,10 @@ sub read_am_file
if (!/\\$/)
{
- $am_vars{$last_var_name} = $comment . $spacing;
+ $am_vars{$last_var_name} .= "$spacing"
+ if (!defined $am_vars{$last_var_name}
+ || substr ($am_vars{$last_var_name}, -1) ne "\n");
+ $am_vars{$last_var_name} .= "$comment";
$comment = $spacing = '';
variable_define ($last_var_name, 0,
$last_var_type, $cond,
@@ -6466,7 +6500,11 @@ sub read_am_file
# FIXME: this doesn't always work correctly; it will
# group all comments for a given variable, no matter
# where defined.
- $am_vars{$last_var_name} = $comment . $spacing;
+ # Accumulating variables must not be output.
+ $am_vars{$last_var_name} .= "$spacing"
+ if (!defined $am_vars{$last_var_name}
+ || substr ($am_vars{$last_var_name}, -1) ne "\n");
+ $am_vars{$last_var_name} .= "$comment";
$comment = $spacing = '';
variable_define ($last_var_name, 0,
@@ -6732,7 +6770,7 @@ sub file_contents_internal ($%)
my $result_vars = '';
my $result_rules = '';
my $comment = '';
- my $separator = '';
+ my $spacing = '';
my @cond_stack = ();
my $cond = '';
@@ -6750,7 +6788,7 @@ sub file_contents_internal ($%)
if (/^$/)
{
# Stick empty line before the incoming macro or rule.
- $separator = "\n";
+ $spacing = "\n";
}
elsif (/$COMMENT_PATTERN/mso)
{
@@ -6837,10 +6875,10 @@ sub file_contents_internal ($%)
if (!defined $targets{$targets}
&& $cond ne 'FALSE')
{
- $result_rules .= "$separator$comment$paragraph\n";
+ $result_rules .= "$spacing$comment$paragraph\n";
rule_define ($targets, 1, $cond, $.);
}
- $comment = $separator = '';
+ $comment = $spacing = '';
last;
}
}
@@ -6852,17 +6890,20 @@ sub file_contents_internal ($%)
if /\\$/;;
# Accumulating variables must not be output.
- $am_vars{$var} .= "$separator$comment";
+ $am_vars{$var} .= "$spacing"
+ if (!defined $am_vars{$var}
+ || substr ($am_vars{$var}, -1) ne "\n");
+ $am_vars{$var} .= "$comment";
variable_define ($var, 1, $type, $cond, $val, $.);
push (@var_list, $var);
# If the user has set some variables we were in charge
# of (which is detected by the first reading of
# `header-vars.am'), we must not output them.
- $result_vars .= "$separator$comment$_\n"
+ $result_vars .= "$spacing$comment$_\n"
if $type ne '+' && $var_is_am{$var} && $cond ne 'FALSE';
- $comment = $separator = '';
+ $comment = $spacing = '';
}
else
{
@@ -6871,9 +6912,9 @@ sub file_contents_internal ($%)
# or some part of a rule cut by an if/endif.
if ($cond ne 'FALSE')
{
- $result_rules .= "$separator$comment$_\n";
+ $result_rules .= "$spacing$comment$_\n";
}
- $comment = $separator = '';
+ $comment = $spacing = '';
}
}
@@ -7064,7 +7105,7 @@ sub am_install_var
my $nodir_name = $X;
# If files should be distributed, do so.
- my $dist_p;
+ my $dist_p = '0';
if ($can_dist)
{
$dist_p = (($default_dist && $one_name !~ /^nodist_/)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- 62-variable-pretty-output.patch,
Akim Demaille <=