Hatena::Groupangelos

Angelos in Action RSSフィード

Fork me on GitHub
|

2010-02-23

Module::Dependsのpatch

22:57 | Module::Dependsのpatch - Angelos in Action を含むブックマーク はてなブックマーク - Module::Dependsのpatch - Angelos in Action Module::Dependsのpatch - Angelos in Action のブックマークコメント

cpanminusをみていたら、Parse::CPAN::Metaというモジュールがあるのを知ったので、Module::Depends用のpatchを作ってみた。Module::DependsはMETA.ymlのparseをYAMLモジュールでやってるんですが、これだと色々とparseできないものがあるので、cpan-packagerでは、Module::Dependsでparse失敗した時に、Module::Depends::Intrusiveでparseしなおすなんていう力技の実装してたんですが、これをしなくて済むケースが増えそうです。

--- Module/Depends.pm.orig>.....2010-02-20 07:39:37.000000000 +0900
+++ Module/Depends.pm>..2010-02-20 07:46:35.000000000 +0900
@@ -1,9 +1,9 @@
 use strict;
 package Module::Depends;
-use YAML qw( LoadFile );
+use Parse::CPAN::Meta ();
 use Cwd qw( getcwd );
 use base qw( Class::Accessor::Chained );
-__PACKAGE__->mk_accessors(qw( dist_dir debug libs requires build_requires error ));
+__PACKAGE__->mk_accessors(qw( dist_dir debug libs requires build_requires error test_requires ));
 our $VERSION = '0.14';

 =head1 NAME
@@ -73,19 +73,22 @@

 sub _find_modules {
     my $self = shift;
-
-    my $file = 'META.yml';
-    if (-e $file) {
-        my $meta = LoadFile( $file );
+    my ($metayml) = grep -e $_, qw( MYMETA.yml META.yml );
+    if ($metayml) {
+        my $meta = $self->_parse_meta($metayml);
         $self->requires( $meta->{requires} );
         $self->build_requires( $meta->{build_requires} );
-    }
-    else {
+        $self->test_requires( $meta->{test_requires} );
+    } else {
         $self->error( "No META.yml found in ". $self->dist_dir );
     }
     return $self;
 }

+sub _parse_meta {
+    my ( $self, $file ) = @_;
+    return ( Parse::CPAN::Meta::LoadFile($file) )[0];
+}

 1;

# Module::Dependsの作者の方がとりこんでくれることになりました。返事はやす。

2010-02-22

CPAN::Packagerの依存モジュール減らし

23:06 | CPAN::Packagerの依存モジュール減らし - Angelos in Action を含むブックマーク はてなブックマーク - CPAN::Packagerの依存モジュール減らし - Angelos in Action CPAN::Packagerの依存モジュール減らし - Angelos in Action のブックマークコメント

機能的にも落ち着いてきたので、依存をすこしずつ減らそうかなぁと。ひとまず、CPANPLUS, Path::Class,Class::Inspector,Pod::POM,List::MoreUtils,UNIVERSAL::requireの依存を無くしてみた。

後は、機能的に互換性があるように依存性を減らしていく作業をすこしずつするかなぁ。

2010-02-04

CPAN::Packager 0.2 release

22:04 | CPAN::Packager 0.2 release - Angelos in Action を含むブックマーク はてなブックマーク - CPAN::Packager 0.2 release - Angelos in Action CPAN::Packager 0.2 release - Angelos in Action のブックマークコメント

着々と。fhoxhさんがdocumentもそれなりに更新してくれました!fhoxh++

# 0.22でdual-lived moduleのcheckにbugがあったのを修正。あとはModule::CoreListっぽいModule::DualLivedListを実装すれば、dual-lived対応は完了。

2010-02-03

dual lived module対応

00:42 | dual lived module対応 - Angelos in Action を含むブックマーク はてなブックマーク - dual lived module対応 - Angelos in Action dual lived module対応 - Angelos in Action のブックマークコメント

「dual lived moduleは、デフォルトでRPMが生成されるべき」というのを基本ポリシーにして、その際にインストール先が衝突する場合には、PERL_MM_OPT と PERL_MB_OPTをちゃんと設定してねというwarningを出す方針にすることにした。これは割とまっとうな解な気はしている。とりあえず、仮実装をgithubに突っ込んでみた。

dual-lived moduleっていうのは、perl coreのモジュールなんだけれど、CPANにもuploadされてるもので、CPANにアップロードされてるものもRPMで更新したいよね!という要望をfhoxhさんから受けたので、どうしようかなぁと思ってました。ただ、RPMに入ってるとデフォルトの設定だとRPMインストール時にvendor設定でいれようと思ってもconflictしちゃうので、オプショナルにするか悩んでました。

ただ、本来的にはCPANにあげられているバグがfixされたものを使うのが筋だろういうことで、作るほうをデフォルトにしました。その代わり、conflictしたときの対策として、perl '-V:install.*' あたりの関連の設定をみて、被りそうだったらwarningを出すということにしたのでした。

一応、経緯を書いておくと、パッケージマニアの人に役立つかも知れないので、書き残しておきます。

2010-01-30

CPAN::Packager 0.12

18:38 | CPAN::Packager 0.12 - Angelos in Action を含むブックマーク はてなブックマーク - CPAN::Packager 0.12 - Angelos in Action CPAN::Packager 0.12 - Angelos in Action のブックマークコメント

大分良くなってきた。あとは、dual lived module問題だけなんとかすれば、RPM版はかなりいけそう。

dual-lived modulesのRPMを作ってインストールしようとすると、現状デフォルトだとperlRPM中のパスとバッティングしてしまう。

これをインストールできるようにするには、次の環境変数を設定して、インストール先を変えればいいんだけど、これだとデフォルトの動きとしてはいかにもユーザーには優しくない。これをどうしようかなというので調整をしようと思ってるんだけど、どうするかなぁ。dual-lived modulesはオプションでビルド出来るようにするのでいいんじゃないかと思ってるんだけど、afoxsonさんがそれでいいというかといったところかなぁ。


   PERL_MM_OPT="INSTALLVENDORMAN1DIR=/usr/local/share/man/man1
   INSTALLVENDORMAN3DIR=/usr/local/share/man/man3
   INSTALLVENDORBIN=/usr/local/bin INSTALLVENDORSCRIPT=/usr/local/bin"

   PERL_MB_OPT="--config installvendorman1dir=/usr/local/share/man/man1
   --config installvendorman3dir=/usr/local/share/man/man3 --config
   installvendorbin=/usr/local/bin --config
   installvendorscript=/usr/local/bin"
|