2cd8efcc78ce9334903299019e4e62ffc45b9423
[matthijs/upstream/blosxom-plugins.git] / scripts / activate-blosxom-include
1 #!/usr/bin/perl
2
3 # Script to activate Blosxom::Include in blosxom plugins, if available
4 #
5 # Usage: perl -MBlosxom::Include -e '1' 2>/dev/null && activate-blosxom-include <dir>
6 #
7
8 use strict;
9 use Getopt::Std;
10 use IO::File;
11 use File::Copy;
12 use Blosxom::Include 0.002;
13
14 my %opts = ();
15 getopts('Dnq', \%opts);
16 my $deactivate = $opts{D};
17 my $noop = $opts{n};
18 my $quiet = $opts{q};
19
20 my $dir = shift @ARGV || '*';
21 for my $pname ( glob $dir ) {
22   next unless -f $pname;
23   my $ph = IO::File->new( $pname, 'r' )
24     or warn "Cannot open plugin '$pname' for read: $!" and next;
25   my $plugin = '';
26   {
27     local $/ = undef;
28     $plugin = <$ph>;
29     close $ph;
30   }
31   next unless $plugin;
32   next unless $plugin =~ m/__END_CONFIG__/;
33   if ($deactivate) {
34     next unless $plugin =~ m/^use\s+Blosxom::Include/m;
35   }
36   else {
37     next if $plugin =~ m/use\s+Blosxom::Include/;
38   }
39   print "Updating $pname ...\n" unless $quiet;
40   unless ($noop) {
41     my $modified = $plugin;
42     if ($deactivate) {
43       $modified =~ s/^use Blosxom::Include[^\n]*\n\s*//mg;
44     }
45     else {
46       $modified =~ s/^([^#])/\nuse Blosxom::Include qw($pname);\n$1/m;
47     }
48     next if $plugin eq $modified;
49     $ph = IO::File->new( "$pname.tmp", 'w' )
50       or die "Cannot open plugin '$pname.tmp' for write: $!";
51     print $ph $modified 
52       or die "Cannot write to plugin '$pname.tmp': $!";
53     close $ph
54       or die "Cannot close plugin '$pname.tmp': $!";
55     move "$pname.tmp", $pname 
56       or die "Cannot move plugin '$pname.tmp' to '$pname': $!";
57   }
58 }
59 print "Done.\n" unless $quiet;
60