automake
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

19-if-in-scripts-am.patch


From: Akim Demaille
Subject: 19-if-in-scripts-am.patch
Date: Fri, 09 Mar 2001 00:48:09 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * 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 = "^ *(address@hidden)[ \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%


 ## ---------- ##



reply via email to

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