github.com/mackerelio/mackerel-agent-plugins@v0.89.3/tool/packagize.pl (about) 1 #!/usr/bin/env perl 2 use 5.014; 3 use warnings; 4 use utf8; 5 use autodie; 6 use File::Spec; 7 use File::Basename 'basename'; 8 use File::Copy 'move'; 9 10 my $plugin_dir = $ARGV[0]; 11 12 my $package_name = $plugin_dir =~ s/^mackerel-plugin-//r; 13 $package_name = "mp$package_name"; 14 $package_name =~ s/-//g; 15 16 my $libdir = File::Spec->catfile($plugin_dir, 'lib'); 17 if (-e $libdir) { 18 warn "$libdir already exists\n"; 19 exit; 20 } 21 mkdir $libdir; 22 23 for my $file (glob "$plugin_dir/*") { 24 if ($file =~ /\.md$/ || $file eq 'lib') { 25 next; 26 } 27 if ($file =~ /\.go$/) { 28 my $content = slurp_utf8($file); 29 $content =~ s/^package main$/package $package_name/ms; 30 $content =~ s!func main\(\) \{!// Do the plugin\nfunc Do() {!ms; 31 $content =~ s!^// main\n!!ms; 32 spew_utf8($file, $content); 33 } 34 my $base = basename $file; 35 my $dst = "$plugin_dir/lib/$base"; 36 move $file, $dst; 37 } 38 my $main = qq[package main 39 40 import "github.com/mackerelio/mackerel-agent-plugins/$plugin_dir/lib" 41 42 func main() { 43 \t$package_name.Do() 44 } 45 ]; 46 spew_utf8("$plugin_dir/main.go", $main); 47 48 sub slurp_utf8 { 49 my $file = shift; 50 return do { 51 local $/; 52 open my $fh, '<:encoding(UTF-8)', $file; 53 <$fh> 54 }; 55 } 56 57 sub spew_utf8 { 58 my ($file, $content) = @_; 59 open my $fh, '>:encoding(UTF-8)', $file; 60 print $fh $content; 61 }