This is the mail archive of the automake@gnu.org mailing list for the automake project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

88-file-contents-include.patch


Index: ChangeLog
from  Akim Demaille  <akim@epita.fr>

	* automake.in (@conditional_stack): Rename as...
	(@cond_stack): this.
	(&file_contents_internal): Support inclusion of files.

Index: automake.in
--- automake.in Sun, 25 Mar 2001 18:00:42 +0200 akim (am/f/39_automake.i 1.214 755)
+++ automake.in Sun, 25 Mar 2001 18:32:55 +0200 akim (am/f/39_automake.i 1.214 755)
@@ -492,7 +492,7 @@ sub finish ($)
 my %target_conditional;

 # This is the conditional stack.
-my @conditional_stack;
+my @cond_stack;

 # This holds the set of included files.
 my @include_stack;
@@ -633,7 +633,7 @@ sub initialize_per_input ()

     %target_conditional = ();

-    @conditional_stack = ();
+    @cond_stack = ();

     @include_stack = ();

@@ -6299,8 +6299,8 @@ sub read_am_file
     # We save the conditional stack on entry, and then check to make
     # sure it is the same on exit.  This lets us conditonally include
     # other files.
-    my @saved_cond_stack = @conditional_stack;
-    my $cond = conditional_string (@conditional_stack);
+    my @saved_cond_stack = @cond_stack;
+    my $cond = conditional_string (@cond_stack);

     my $saw_bk = 0;
     my $was_rule = 0;
@@ -6341,7 +6341,7 @@ sub read_am_file
 	{
 	    if ($was_rule)
 	    {
-	        $output_trailer .= &make_condition (@conditional_stack);
+	        $output_trailer .= &make_condition (@cond_stack);
 		$output_trailer .= $_;
 	    }
 	    else
@@ -6369,38 +6369,38 @@ sub read_am_file
 	    my $new_cond = $1;
 	    &am_line_error ($., "$new_cond does not appear in AM_CONDITIONAL")
 		if ! $configure_cond{$new_cond} && $new_cond !~ /^TRUE|FALSE$/;
-	    push (@conditional_stack,
+	    push (@cond_stack,
 		  (($new_cond =~ /^TRUE|FALSE$/)
 		   ? "$new_cond" : "${new_cond}_TRUE"));
-	    $cond = conditional_string (@conditional_stack);
+	    $cond = conditional_string (@cond_stack);
 	}
 	elsif (/$ELSE_PATTERN/o)
 	{
-	    if (! @conditional_stack)
+	    if (! @cond_stack)
 	    {
 		&am_line_error ($., "else without if");
 	    }
-	    elsif ($conditional_stack[$#conditional_stack] =~ /_FALSE$/)
+	    elsif ($cond_stack[$#cond_stack] =~ /_FALSE$/)
 	    {
 		&am_line_error ($., "else after else");
 	    }
 	    else
 	    {
-		$conditional_stack[$#conditional_stack]
-		  = condition_negate ($conditional_stack[$#conditional_stack]);
-		$cond = conditional_string (@conditional_stack);
+		$cond_stack[$#cond_stack]
+		  = condition_negate ($cond_stack[$#cond_stack]);
+		$cond = conditional_string (@cond_stack);
 	    }
 	}
 	elsif (/$ENDIF_PATTERN/o)
 	{
-	    if (! @conditional_stack)
+	    if (! @cond_stack)
 	    {
 		&am_line_error ($., "endif without if");
 	    }
 	    else
 	    {
-		pop @conditional_stack;
-		$cond = conditional_string (@conditional_stack);
+		pop @cond_stack;
+		$cond = conditional_string (@cond_stack);
 	    }
 	}
 	elsif (/$RULE_PATTERN/o)
@@ -6412,7 +6412,7 @@ sub read_am_file

 	    $var_line{$1} = $.;
 	    $output_trailer .= $comment . $spacing;
-            $output_trailer .= &make_condition (@conditional_stack);
+            $output_trailer .= &make_condition (@cond_stack);
             $output_trailer .= $_;
 	    $comment = $spacing = '';
 	}
@@ -6476,7 +6476,7 @@ sub read_am_file
 	    # In fact, this is what we assume.
 	    $was_rule = 1;
 	    $output_trailer .= $comment . $spacing;
-	    $output_trailer .= &make_condition  (@conditional_stack);
+	    $output_trailer .= &make_condition  (@cond_stack);
 	    $output_trailer .= $_;
 	    $comment = $spacing = '';
 	}
@@ -6487,11 +6487,11 @@ sub read_am_file

     $output_trailer .= $comment;

-    if (join (' ', @saved_cond_stack) ne join (' ', @conditional_stack))
+    if (join (' ', @saved_cond_stack) ne join (' ', @cond_stack))
     {
-	if (@conditional_stack)
+	if (@cond_stack)
 	{
-	    &am_error ("unterminated conditionals: @conditional_stack");
+	    &am_error ("unterminated conditionals: @cond_stack");
 	}
 	else
 	{
@@ -6712,8 +6712,12 @@ sub file_contents_internal ($%)
     my $result_rules = '';
     my $comment = '';
     my $spacing = '';
-    my @cond_stack = ();
-    my $cond = '';
+
+    # We save the conditional stack on entry, and then check to make
+    # sure it is the same on exit.  This lets us conditonally include
+    # other files.
+    my @saved_cond_stack = @cond_stack;
+    my $cond = conditional_string (@cond_stack);

     foreach (make_paragraphs ($file, %transform))
     {
@@ -6737,6 +6741,22 @@ sub file_contents_internal ($%)
  	    $comment = "$_\n";
 	}

+	# Handle inclusion of other files.
+        elsif (/$INCLUDE_PATTERN/o)
+        {
+	    if ($cond ne 'FALSE')
+	      {
+		(my $file = $1) =~ s/\.am$//g;
+
+		# N-ary `.=' fails.
+		my ($com, $vars, $rules)
+		  = file_contents_internal ($file, %transform);
+		$comment .= $com;
+		$result_vars .= $vars;
+		$result_rules .= $rules;
+	      }
+        }
+
         # Handling the conditionals.
         elsif (/$IF_PATTERN/o)
 	{
@@ -6861,6 +6881,19 @@ sub file_contents_internal ($%)
  	}
     }

+    if (join (' ', @saved_cond_stack) ne join (' ', @cond_stack))
+    {
+	if (@cond_stack)
+	{
+	    &am_error ("unterminated conditionals: @cond_stack");
+	}
+	else
+	{
+	    # FIXME: better error message here.
+	    &am_error ("conditionals not nested in include file");
+	}
+    }
+
     return ($comment, $result_vars, $result_rules);
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]