automake
[Top][All Lists]
Advanced

[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_/)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]