added some of uri's utility actions for build script
Steve Scaffidi [Fri, 11 Sep 2009 20:45:34 +0000 (16:45 -0400)]
BuildStem.pm

index 581e12f..4617d19 100644 (file)
@@ -64,4 +64,103 @@ sub find_binary {
 }
 
 
+###########################################################
+# Various convenience routines.
+#
+# To use ACTION_foo, call ./Build foo
+
+
+
+# ACTION: grep through MANIFEST
+# command line args:
+#   files=<regex>
+#
+# do we need this action?
+# 
+
+sub ACTION_grep_manifest {
+
+    my( $self ) = @_ ;
+
+    my @manifest_sublist = $self->grep_manifest() ;
+
+    print join( "\n", @manifest_sublist ), "\n" ;
+    return;
+}
+
+
+
+# grep through all matched files
+# command line args:
+#   files=<regex> (default is all .pm files)
+#   re=<regex>
+
+sub ACTION_grep {
+
+    my( $self ) = @_ ;
+
+    my $args = $self->{'args'} ;
+
+    my $file_regex = $args->{ files } || qr/\.pm$/ ;
+    my $grep_regex = $args->{ re } or die "need grep regex" ;
+
+    my @manifest_sublist = $self->grep_manifest( $file_regex ) ;
+
+    local( @ARGV ) = @manifest_sublist ;
+
+    while( <> ) {
+
+        next unless /$grep_regex/ ;
+
+        print "$ARGV:$. $_"
+    }
+    continue {
+
+        close ARGV if eof ;
+    }
+
+    return;
+}
+
+my ( @manifest_lines ) ;
+
+# MANIFEST helper subs
+
+sub grep_manifest {
+
+    my( $self, $file_regex ) = @_ ;
+
+    $file_regex ||= $self->{ args }{ files } || qr/.*/ ;
+
+    manifest_load() ;
+
+    return grep( /$file_regex/, @manifest_lines ) ;
+}
+
+sub manifest_load {
+
+    return if @manifest_lines ;
+
+    @manifest_lines = grep ! /^\s*$|^\s*#/, read_file( 'MANIFEST' ) ;
+
+    chomp @manifest_lines ;
+
+    return ;
+}
+
+sub read_file {
+
+    my ( $file_name ) = @_ ;
+
+    local( *FH );
+
+    open( FH, $file_name ) || die "Can't open $file_name $!";
+
+    return <FH> if wantarray;
+
+    read FH, my $buf, -s FH;
+    return $buf;
+}
+
+
 1;