automake
[Top][All Lists]
Advanced

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

Re: How about making it ten times faster?


From: Akim Demaille
Subject: Re: How about making it ten times faster?
Date: 28 Feb 2001 10:54:32 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Cuyahoga Valley)

Hm, I sent my patch yesterday, but it didn't show up :(

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        Let's make it run ten times faster...

        * automake.in (&transform): Be sure to remove the `\n' with ?FOO?
        transformations.
        (&file_contents): Let `$command' remove the Automake commands, and
        normalize the series of `\n'.
        Slurp the file and apply $command in a single step.
        No longer apply the address@hidden@' transformation which
        is already normalized to be handled by &transform.

Index: automake.in
--- automake.in Tue, 27 Feb 2001 20:24:10 +0100 akim (am/f/39_automake.i 1.87 
755)
+++ automake.in Tue, 27 Feb 2001 21:11:36 +0100 akim (am/f/39_automake.i 1.87 
755)
@@ -6586,21 +6586,26 @@ sub file_contents
     &prog_error ("file_contents: $command")
         if $command ne '' && substr ($command, -1) ne ';';
     $command .=
-      &transform ('CYGNUS'          => $cygnus_mode,
-                 'MAINTAINER_MODE' => $seen_maint_mode,
+      # We don't use IGNORE_PATTERN because it contains $ which
+      # prevents us from matching the end of line.
+      "s/##([^#\n].*)?\\n//gmo;"
+       . &transform ('CYGNUS'          => $cygnus_mode,
+                     'MAINTAINER_MODE' => $seen_maint_mode,
+
+                     'SHAR'        => $options{'dist-shar'},
+                     'BZIP2'       => $options{'dist-bzip2'},
+                     'ZIP'         => $options{'dist-zip'},
+                     'COMPRESS'    => $options{'dist-tarZ'},
+
+                     'INSTALL-INFO' => !$options{'no-installinfo'},
+                     'INSTALL-MAN'  => !$options{'no-installman'},
+                     'CK-NEWS'      => $options{'check-news'},
+
+                     'SUBDIRS' => &variable_defined ('SUBDIRS'))
+         # We don't need more than two consecutive new-lines.
+         . 's/\n{3,}/\n\n/g';

-                 'SHAR'        => $options{'dist-shar'},
-                 'BZIP2'       => $options{'dist-bzip2'},
-                 'ZIP'         => $options{'dist-zip'},
-                 'COMPRESS'    => $options{'dist-tarZ'},
-
-                 'INSTALL-INFO' => !$options{'no-installinfo'},
-                 'INSTALL-MAN'  => !$options{'no-installman'},
-                 'CK-NEWS'      => $options{'check-news'},
-
-                 'SUBDIRS' => &variable_defined ('SUBDIRS'));
-
-    # Swallow the file and applied the COMMAND.
+    # Swallow the file and apply the COMMAND.
     my $file = $am_dir . '/' . $basename . '.am';
     my $fc_file = new IO::File ("< $file");
     if (! $fc_file)
@@ -6612,39 +6617,15 @@ sub file_contents

     # Swallow into $CONTENTS the whole content of the file, after
     # having performed the $COMMAND, and removed Automake comments.
-    my $contents = '';
-
-    while ($_ = $fc_file->getline)
-    {
-       $_ =~ s/address@hidden@//g
-           unless $seen_maint_mode;
-
-       $had_chars = length ($_) && $_ ne "\n";
-        eval $command;
-       # If the transform caused all the characters to go away, then
-       # ignore the line.  Why do this?  Because in Perl 4, a "next"
-       # inside of an eval doesn't affect a loop outside the eval.
-       # So we can't pass in a "transform" that uses next.  We used
-       # to do this.  "Empty" also means consisting of a single
-       # newline.
-       next if $had_chars && ($_ eq '' || $_ eq "\n");
-
-       # Merely delete comments beginning with two hashes.
-       next if /$IGNORE_PATTERN/o;
-
-       $contents .= $_;
-    }
+    my $saved_dollar_slash = $/;
+    undef $/;
+    $_ = $fc_file->getline;
+    $/ = $saved_dollar_slash;
+    eval $command;
+    $contents = $_;

     $fc_file->close;

-    # We don't need more than two consecutive new-lines.
-    $contents =~ s/\n{3,}/\n\n/g;
-
-    # A rule has three parts: a list of targets, a list of dependencies,
-    # and optionally actions.
-    my $RULE_PATTERN =
-      "^($TARGET_PATTERN(?:(?:\\\\\n|\\s)+$TARGET_PATTERN)*) *:([^=].*|)\$";
-

     # Process each Make `paragraph'.
     #
@@ -6658,6 +6639,12 @@ sub file_contents
     # perl goes loopy if you try to
     #
     #  $result_rules =~ /^($TARGET_PATTERN *)+: ($TARGET_PATTERN *)+\n\n/sm
+
+    # A rule has three parts: a list of targets, a list of dependencies,
+    # and optionally actions.
+    my $RULE_PATTERN =
+      "^($TARGET_PATTERN(?:(?:\\\\\n|\\s)+$TARGET_PATTERN)*) *:([^=].*|)\$";
+
     my $result_vars = '';
     my $result_rules = '';
     my $comment = '';
@@ -6780,14 +6767,14 @@ sub transform (%)

     while (my ($token, $val) = each %pairs)
     {
-        $result .= "s/\Q%$token%\E/\Q$val\E/g;";
+        $result .= "s/\Q%$token%\E/\Q$val\E/gm;";
        if ($val)
        {
-           $result .= "s/\Q?$token?\E//g;s/^.*\Q?!$token?\E.*\$//g;";
+           $result .= "s/\Q?$token?\E//gm;s/^.*\Q?!$token?\E.*\\n//gm;";
        }
        else
        {
-           $result .= "s/\Q?!$token?\E//g;s/^.*\Q?$token?\E.*\$//g;";
+           $result .= "s/\Q?!$token?\E//gm;s/^.*\Q?$token?\E.*\\n//gm;";
        }
     }

@@ -6851,12 +6838,12 @@ sub am_install_var
     if (defined $configure_vars{'LIBTOOL'})
     {
        # Transform '%LIBTOOL ...%' to '$(LIBTOOL) ...'
-       $ltxform = 's/%LIBTOOL([^\%]*)%/\$(LIBTOOL) $1/;';
+       $ltxform = 's/%LIBTOOL([^\%]*)%/\$(LIBTOOL) $1/g;';
     }
     else
     {
        # Delete '%LIBTOOL ...%'
-       $ltxform = 's/%LIBTOOL([^%]*)%//;';
+       $ltxform = 's/%LIBTOOL([^%]*)%//g;';
     }

     my $cygxform;



reply via email to

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