MANIFEST.SKIPを、最新のもの+自前のものにする
色々書きたいもの溜まってるけど、さっきやったExtUtilsに関する修正を書いてみる。
自前のMANIFEST.SKIPが無い場合、ExtUtils-Manifestに同梱されているものが使われる。で、自前のMANIFEST.SKIPを普通に作ってしまうと、ExtUtils-Manifestの方で更新されても追従できなくなってしまう。
そこで、MYの仕組みを使ってこういうの↓をMakefile.PLに書いた。
use File::Basename qw(dirname); sub MY::dist_basics { my ( $self, @args ) = @_; my $dist_basics = $self->MM::dist_basics(@args); $dist_basics =~ s{^(manifest\s*:.*?)$}{$1 MANIFEST.SKIP}msx; ( my $format = <<'END_OF_DIST_BASICS') =~ s/^[ ]{4}/\t/gmsx; MANIFEST.SKIP: %s/MANIFEST.SKIP cat $< > $@ echo '# Avoid archives of this distribution' >> $@ echo '^%s-' >> $@ END_OF_DIST_BASICS $dist_basics .= sprintf $format, dirname( $self->{MAKEMAKER} ), $self->{FULLEXT}; return $dist_basics; }
(ちなみに (my $str = '...') =~ s/^[ ]{4}/\t/gmsx は結構使う。タブ文字と空白文字は混乱の元なので、タブ文字は使わないことにしている)
これでMakefileが
manifest : MANIFEST.SKIP $(PERLRUN) "-MExtUtils::Manifest=mkmanifest" -e mkmanifest MANIFEST.SKIP: /usr/local/lib/perl5/5.10.0/ExtUtils/MANIFEST.SKIP cat $< > $@ echo '# Avoid archives of this distribution' >> $@ echo '^MyApp-' >> $@
となるので、make manifestする度に最新のMANIFEST.SKIPに追従できる。