Re: [PATCH] Re: Restore nicetext (was Re: Remove nicetext() (was Re: [ANNOUNCE] ExtUtils::MakeMaker 6.38)) - restore_nicetext.patch (1/1)

[email protected] (Michael G Schwern)
Newsgroups perl.perl5.porters,perl.makemaker
Message-ID <[email protected]>
Craig A. Berry wrote:
> In article 
> <[email protected]>,
>  [email protected] ("Craig A. Berry") wrote:
> 
>> On Dec 6, 2007 7:43 PM, Craig A. Berry <[email protected]> wrote:
>> I'm afraid we need nicetext
>> back, at least on VMS, and we'll just have to tune up the regex 
> 
> The attached patch does those things and gets all of the core 
> extensions to build with YAML generation intact on VMS.  So except for 
> version bumps and a changelog entry, this could become 6.41.  I didn't 
> restore the MM_Unix.t test for nicetext if that's important.  Sorry for 
> the churn.

Thanks, Craig.  I decided to fix a few things as long as we were at it.  I
changed the name to be more accurate and also fixed it so it won't give up
when it sees a macro declaration.

Could you try out the attached patch?
maketext_filter.patch (text/plain, 3.5 KB)
--- t/maketext_filter.t	(revision 41142)
+++ t/maketext_filter.t	(revision 41143)
@@ -0,0 +1,65 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+    if( $ENV{PERL_CORE} ) {
+        chdir 't' if -d 't';
+        @INC = '../lib';
+    }
+    else {
+        unshift @INC, 't/lib';
+    }
+}
+chdir 't';
+
+use Test::More tests => 6;
+
+use ExtUtils::MakeMaker;
+use ExtUtils::MM_VMS;
+
+sub test_filter {
+    my($text, $vms_text) = @_;
+    
+    local $Test::Builder::Level = $Test::Builder::Level + 1;
+    is( MM->maketext_filter($text),               $text,     'default filter' );
+    is( ExtUtils::MM_VMS->maketext_filter($text), $vms_text, 'VMS filter' );
+}
+
+
+# VMS filter puts a space after the target
+test_filter(<<'END', <<'VMS');
+foo: bar
+    thing: splat
+END
+foo : bar
+    thing: splat
+VMS
+
+
+# And it does it for all targets
+test_filter(<<'END', <<'VMS');
+foo: bar
+    thing: splat
+
+up: down
+    yes
+END
+foo : bar
+    thing: splat
+
+up : down
+    yes
+VMS
+
+
+# And it doesn't mess with macros
+test_filter(<<'END', <<'VMS');
+CLASS=Foo: Bar
+
+target: stuff
+    $(PROGRAM) And::Stuff
+END
+CLASS=Foo: Bar
+
+target : stuff
+    $(PROGRAM) And::Stuff
+VMS
--- MANIFEST	(revision 41142)
+++ MANIFEST	(revision 41143)
@@ -69,6 +69,7 @@
 t/lib/TieOut.pm
 t/Liblist.t
 t/make.t
+t/maketext_filter.t
 t/Mkbootstrap.t
 t/MM_Any.t
 t/MM_BeOS.t
--- lib/ExtUtils/MM_Any.pm	(revision 41142)
+++ lib/ExtUtils/MM_Any.pm	(revision 41143)
@@ -236,6 +236,24 @@
 }
 
 
+=head3 maketext_filter
+
+    my $filter_make_text = $mm->maketext_filter($make_text);
+
+The text of the Makefile is run through this method before writing to
+disk.  It allows systems a chance to make portability fixes to the
+Makefile.
+
+By default it does nothing.
+
+This method is protected and not intended to be called outside of
+MakeMaker.
+
+=cut
+
+sub maketext_filter { return $_[1] }
+
+
 =head3 cd  I<Abstract>
 
   my $subdir_cmd = $MM->cd($subdir, @cmds);
--- lib/ExtUtils/MakeMaker.pm	(revision 41142)
+++ lib/ExtUtils/MakeMaker.pm	(revision 41143)
@@ -637,7 +637,9 @@
             my(%a) = %{$self->{$section} || {}};
             push @{$self->{RESULT}}, "\n# --- MakeMaker $section section:";
             push @{$self->{RESULT}}, "# " . join ", ", %a if $Verbose && %a;
-            push @{$self->{RESULT}}, $self->$method( %a );
+            push @{$self->{RESULT}}, $self->maketext_filter(
+                $self->$method( %a )
+            );
         }
     }
 
--- lib/ExtUtils/MM_VMS.pm	(revision 41142)
+++ lib/ExtUtils/MM_VMS.pm	(revision 41143)
@@ -1572,6 +1572,22 @@
     join '', @m;
 }
 
+# --- Output postprocessing section ---
+
+=item maketext_filter (override)
+
+Insure that colons marking targets are preceded by space, in order
+to distinguish the target delimiter from a colon appearing as
+part of a filespec.
+
+=cut
+
+sub maketext_filter {
+    my($self, $text) = @_;
+
+    $text =~ s/^([^\s:=]+)(:+\s)/$1 $2/mg;
+    return $text;
+}
 
 =item prefixify (override)
 
--- Changes	(revision 41142)
+++ Changes	(revision 41143)
@@ -3,6 +3,10 @@
     - 6.33 moved PREREQ_FATAL to happen after CONFIGURE.  This meant if
       your CONFIGURE use a prereq it would fail and no PREREQ_FATAL
       message would be displayed.
+    - Put the "nicetext" functionality back, VMS needs it to deal with
+      other people's custom make.  But rename it to the more
+      accurate maketext_filter(), test it and fix a bug where it would
+      stop processing if it saw a macro declaration.
 
 6.40  Thu Dec  6 03:00:47 PST 2007
     Bug Fixes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.