Index: ChangeLog
from Akim Demaille <[EMAIL PROTECTED]>
* automake.in (IF_PATTERN): Unobfuscate the parens.
(ENDIF_PATTERN): Allow a condition to be specified.
(&file_contents): Use a @cond_stack.
(&transform): At least for an easy transition, also transform
%?FOO% and %!FOO%, as suggested by Lars.
* scripts.am: First test bed for static if/endif use.
Index: automake.in
--- automake.in Thu, 08 Mar 2001 23:52:12 +0100 akim (am/f/39_automake.i 1.132 755)
+++ automake.in Thu, 08 Mar 2001 23:59:48 +0100 akim (am/f/39_automake.i 1.132 755)
@@ -59,9 +59,9 @@
my $MACRO_PATTERN = "^ *([A-Za-z0-9_\@]+)[ \t]*([:+]?)=[ \t]*(.*)\$";
my $BOGUS_MACRO_PATTERN = "^ *([^ \t]*)[ \t]*([:+]?)=[ \t]*(.*)\$";
my $GNITS_VERSION_PATTERN = "[0-9]+\\.[0-9]+([a-z]|\\.[0-9]+)?";
-my $IF_PATTERN = "^if[ \t]+\([A-Za-z][A-Za-z0-9_]*\)[ \t]*\(#.*\)?\$";
-my $ELSE_PATTERN = "^else[ \t]*\(#.*\)?\$";
-my $ENDIF_PATTERN = "^endif[ \t]*\(#.*\)?\$";
+my $IF_PATTERN = "^if[ \t]+([A-Za-z][A-Za-z0-9_]*)[ \t]*(#.*)?\$";
+my $ELSE_PATTERN = "^else[ \t]*(#.*)?\$";
+my $ENDIF_PATTERN = "^endif(?:[ \t]+([A-Za-z][A-Za-z0-9_]*))?[ \t]*(#.*)?\$";
my $PATH_PATTERN='(\\w|[/.-])+';
# This will pass through anything not of the prescribed form.
my $INCLUDE_PATTERN = "^include[
\t]+((\\\$\\\(top_srcdir\\\)/${PATH_PATTERN})|(\\\$\\\(srcdir\\\)/${PATH_PATTERN})|([^/\\\$]${PATH_PATTERN}))[
\t]*(#.*)?\$";
@@ -6739,6 +6739,7 @@ sub file_contents ($%)
my $result_rules = '';
my $comment = '';
my $separator = '';
+ my @cond_stack = ();
foreach (split (/(?<!\\)\n(?![\t#])/, $contents))
{
# Strip leading new lines. This can happen for comments:
@@ -6763,7 +6764,46 @@ sub file_contents ($%)
{
# Stick comments before the incoming macro or rule.
$comment = "$_\n";
- }
+
+ }
+
+ # Handling the conditionals.
+ elsif (/$IF_PATTERN/o)
+ {
+ my $cond = $1;
+ &am_line_error ($., "$cond does not appear in AM_CONDITIONAL")
+ if ! $configure_cond{$cond} && $cond !~ /^TRUE|FALSE$/;
+ push (@cond_stack,
+ ($cond =~ /^TRUE|FALSE$/) ? "$cond" : "${cond}_TRUE");
+ }
+ elsif (/$ELSE_PATTERN/o)
+ {
+ if (! @cond_stack)
+ {
+ &am_line_error ($., "else without if");
+ }
+ elsif ($cond_stack[$#cond_stack] =~ /^(.*_)?FALSE$/)
+ {
+ &am_line_error ($., "else after else");
+ }
+ else
+ {
+ $cond_stack[$#cond_stack] =~ s/TRUE$/FALSE/;
+ }
+ }
+ elsif (/$ENDIF_PATTERN/o)
+ {
+ if (! @cond_stack)
+ {
+ &am_line_error ($., "endif without if");
+ }
+ else
+ {
+ pop @cond_stack;
+ }
+ }
+
+ # Handling rules.
elsif (/$RULE_PATTERN/mso)
{
# Separate relationship from optional actions: the first
@@ -6799,7 +6839,8 @@ sub file_contents ($%)
if (!defined $targets{$targets})
{
$result_rules .= "$separator$comment$paragraph\n";
- rule_define ($targets, 1, '', $.);
+ rule_define ($targets, 1,
+ conditional_string (@cond_stack), $.);
}
$comment = $separator = '';
last;
@@ -6854,10 +6895,12 @@ sub transform (%)
if ($val)
{
$result .= "s/\Q?$token?\E//gm;s/^.*\Q?!$token?\E.*\\n//gm;";
+ $result .= "s/\Q%?$token%\E/TRUE/gm;s/^.*\Q%!$token%\E.*\\n/FALSE/gm;";
}
else
{
$result .= "s/\Q?!$token?\E//gm;s/^.*\Q?$token?\E.*\\n//gm;";
+ $result .= "s/\Q%?$token%\E/FALSE/gm;s/^.*\Q%!$token%\E.*\\n/TRUE/gm;";
}
}
Index: scripts.am
--- scripts.am Wed, 07 Mar 2001 21:02:27 +0100 akim (am/g/15_scripts.am 1.7 644)
+++ scripts.am Thu, 08 Mar 2001 23:54:33 +0100 akim (am/g/15_scripts.am 1.7 644)
@@ -21,38 +21,41 @@
## Installing. ##
## ------------ ##
-?INSTALL?_am_installdirs += $(DESTDIR)$(%NDIR%dir)
-?INSTALL??EXEC?.PHONY install-exec-am: install-%DIR%SCRIPTS
-?INSTALL??!EXEC?.PHONY install-data-am: install-%DIR%SCRIPTS
-?INSTALL?install-%DIR%SCRIPTS: $(%DIR%_SCRIPTS)
-?INSTALL? @$(NORMAL_INSTALL)
-?INSTALL? $(mkinstalldirs) $(DESTDIR)$(%NDIR%dir)
+if %?INSTALL%
+_am_installdirs += $(DESTDIR)$(%NDIR%dir)
+?EXEC?.PHONY install-exec-am: install-%DIR%SCRIPTS
+?!EXEC?.PHONY install-data-am: install-%DIR%SCRIPTS
+install-%DIR%SCRIPTS: $(%DIR%_SCRIPTS)
+ @$(NORMAL_INSTALL)
+ $(mkinstalldirs) $(DESTDIR)$(%NDIR%dir)
## Funny invocation because Makefile variable can be empty, leading to
## a syntax error in sh.
-?INSTALL? @list='$(%DIR%_SCRIPTS)'; for p in $$list; do \
-?INSTALL? f="`echo $$p|sed '$(transform)'`"; \
-?INSTALL? if test -f $$p; then \
-?INSTALL? echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(%NDIR%dir)/$$f"; \
-?INSTALL? $(INSTALL_SCRIPT) $$p $(DESTDIR)$(%NDIR%dir)/$$f; \
-?INSTALL? elif test -f $(srcdir)/$$p; then \
-?INSTALL? echo " $(INSTALL_SCRIPT) $(srcdir)/$$p
$(DESTDIR)$(%NDIR%dir)/$$f"; \
-?INSTALL? $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(%NDIR%dir)/$$f; \
-?INSTALL? else :; fi; \
-?INSTALL? done
-
+ @list='$(%DIR%_SCRIPTS)'; for p in $$list; do \
+ f="`echo $$p|sed '$(transform)'`"; \
+ if test -f $$p; then \
+ echo " $(INSTALL_SCRIPT) $$p $(DESTDIR)$(%NDIR%dir)/$$f"; \
+ $(INSTALL_SCRIPT) $$p $(DESTDIR)$(%NDIR%dir)/$$f; \
+ elif test -f $(srcdir)/$$p; then \
+ echo " $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(%NDIR%dir)/$$f"; \
+ $(INSTALL_SCRIPT) $(srcdir)/$$p $(DESTDIR)$(%NDIR%dir)/$$f; \
+ else :; fi; \
+ done
+endif %?INSTALL%
## -------------- ##
## Uninstalling. ##
## -------------- ##
-?INSTALL?.PHONY uninstall-am: uninstall-%DIR%SCRIPTS
-?INSTALL?uninstall-%DIR%SCRIPTS:
-?INSTALL? @$(NORMAL_UNINSTALL)
-?INSTALL? @list='$(%DIR%_SCRIPTS)'; for p in $$list; do \
-?INSTALL? f="`echo $$p|sed '$(transform)'`"; \
-?INSTALL? echo " rm -f $(DESTDIR)$(%NDIR%dir)/$$f"; \
-?INSTALL? rm -f $(DESTDIR)$(%NDIR%dir)/$$f; \
-?INSTALL? done
+if %?INSTALL%
+.PHONY uninstall-am: uninstall-%DIR%SCRIPTS
+uninstall-%DIR%SCRIPTS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(%DIR%_SCRIPTS)'; for p in $$list; do \
+ f="`echo $$p|sed '$(transform)'`"; \
+ echo " rm -f $(DESTDIR)$(%NDIR%dir)/$$f"; \
+ rm -f $(DESTDIR)$(%NDIR%dir)/$$f; \
+ done
+endif %?INSTALL%
## ---------- ##