その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

common::sense 3.71 が正常にインストールされない問題に関しまして

(2013/08/01 3:44 + 0900 追記)
https://metacpan.org/release/MLEHMANN/common-sense-3.72
common::sense は3.72 にバージョンが上がって、
以下に書かれている様な問題は消え失せました。

戦いは終わったのです!!!*1

普通に

$cpanm common::sense

みたいな感じで正常にインストール出来ますので、以下の情報は現在では無意味な感じです。
さあ回れ右。
(追記ここまで)


!!!不正確な情報が含まれている恐れがあります!!!
!!!多分バッドノウハウ!!!

common::sense (3.71) が正常にインストールされない問題とは

以下をご覧頂くと詳しくて良いです。
common::senseがなんかおかしい - Masteries

ざっくり言うと、

  • common::sense のアップデート時は、正常にアップデートされているように見せかけておいて、実はアップデートされていない
  • 新規インストール時はテストがずっこけてインストールされない

という問題です。

実際の所

common::senseがなんかおかしい - Masteries
JSON::XS とそれにまつわる歴史的な過去の話、まとめ。 - blog.64p.org でも書かれていますが、
とりあえず現状は、

cpanm http://search.cpan.org/CPAN/authors/id/M/ML/MLEHMANN/common-sense-3.6.tar.gz

で、バージョン3.6をインストールしてやれば何とかなります。
「どうしてもバージョン3.71を入れなければ死んでしまう!」という人以外は、
以下は読まなくても大丈夫です。さあ回れ右!

common::sense 3.71 を make してみるとわかりますが

$perl Makefile.PL && make
Checking if your kit is complete...
Looks good
Writing Makefile for common::sense
Writing MYMETA.yml and MYMETA.json
/Users/user/.plenv/versions/5.16.3/bin/perl5.16.3 sense.pm.PL sense.pm
cp sense.pm blib/arch/common/common/sense.pm
cp sense.pod blib/lib/common/common/sense.pod
Manifying blib/man3/common::sense.3
Manifying blib/man3/common::sense.3

`cp sense.pm blib/arch/common/common/sense.pm` のように “common” が2重になってしまいます。これでは正常にインストールされません。

Makefile.PL の中身

common::sense 3.71 の Makefile.PL の中身は

use ExtUtils::MakeMaker;

WriteMakefile(
    ...
    PM          => {
       "sense.pm"  => '$(INST_ARCHLIBDIR)/common/sense.pm',
       "sense.pod" => '$(INST_LIBDIR)/common/sense.pod',
    },
    ...
);

となっていますが、この `$(INST_ARCHLIBDIR)` と `$(INST_LIBDIR)` が問題でして、
これをそれぞれ `$(INST_ARCHLIB)` そして `$(INST_LIB)` に書き換えてやるとうまく動作します。
つまり以下のように書き換えてから...

use ExtUtils::MakeMaker;

WriteMakefile(
    ...
    PM          => {
       "sense.pm"  => '$(INST_ARCHLIB)/common/sense.pm',
       "sense.pod" => '$(INST_LIB)/common/sense.pod',
    },
    ...
);

再度 make してみると...

$perl Makefile.PL && make
Checking if your kit is complete...
Looks good
Writing Makefile for common::sense
Writing MYMETA.yml and MYMETA.json
/Users/user/.plenv/versions/5.16.3/bin/perl5.16.3 sense.pm.PL sense.pm
cp sense.pm blib/arch/common/sense.pm
cp sense.pod blib/lib/common/sense.pod
Manifying blib/man3/common::sense.3

という風になり、2重の common 問題が解決されます。
そして、

$cpanm .

とかでインストールを試みると、正常にインストールされてハピネス! って感じですね!

というわけで

common::sense が早く直ると良いですね!

*1:戦いとは?