X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=BuildStem.pm;h=a6aa8cb21b78a972d1e636400018c281ce2bf463;hb=9a1ca27b4e9283a89dbcc627641dafeb07ccacb8;hp=cceef075247bcbadd9ab556bc6930e3295a8403d;hpb=b3407611be59806761f1a4267ecb0a3a881329ad;p=urisagit%2FStem.git diff --git a/BuildStem.pm b/BuildStem.pm index cceef07..a6aa8cb 100644 --- a/BuildStem.pm +++ b/BuildStem.pm @@ -23,6 +23,7 @@ sub process_script_files { my $demo_dir = File::Spec->catdir($self->blib, 'demo'); File::Path::mkpath( $script_dir ); File::Path::mkpath( $demo_dir ); + $self->add_to_cleanup($demo_dir); foreach my $file (keys %$files) { my $dest_dir = $file =~ /_demo$/ ? $demo_dir : $script_dir ; @@ -62,4 +63,103 @@ sub find_binary { } +########################################################### +# Various convenience routines. +# +# To use ACTION_foo, call ./Build foo + + + +# ACTION: grep through MANIFEST +# command line args: +# files= +# +# 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= (default is all .pm files) +# re= + +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 if wantarray; + + read FH, my $buf, -s FH; + return $buf; +} + + 1;