blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_6 ディストリビューション

Perl ディストリビューション h2xs オプション -XAn, -b (d101)

Perl ディストリビューション h2xs オプション -XAn, -b (d101)

目次 - Perl Index


Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その d101 回。

Perl で、独自のディストリビューション ( distribution ) を作成する方法のひとつであるツール「 h2xs 」の利用して、ピュア Perl モジュールのディストリビューションのスケルトンを生成する方法を確認する。

今回は、ディストリビューションの作成に必要なオプションの確認を行います。


ディストリビューション, スケルトン
h2xs とオプション「 -XAn 」
オプション「 -X 」
  オプション「 -c 」
  オプション「 -f 」
オプション「 -A 」
オプション「 -n 」
h2xs -XAn My::Module と後方互換
オプション「 -b 」で互換性を指定する


ディストリビューション, スケルトン



英単語「 distribution 」は、「 分配 」や「 配布 」, それから「 流通 」などを意味します。

ここでいう、「 ディストリビューション 」も「 配布 」の意味をもっていますが、どちらかというと、「 配布 」に必要なものをひとそろえにして、そのまま利用できるようにした一連のファイル群という意味合いです。

Wikipedia では、こうしたファイル群を意味する「 distribution 」or 「 distro 」と、ソフトウェアの配布プロセスを意味する「 Software distribution 」を混同するべからずと書いてありますが、それはつまり ( 配布された ) そのままで使えるファイル群という意味で「 distribution 」や「 distro 」という用語が使われるということです。

Example
CPAN, a Perl extension repository, has over 200 mirrors, each with over 32 thousand distributions

-- Wikipedia


今回は、このすぐに利用できる一連のファイル群である Perl の「 ディストリビューション 」を、ツール「 h2xs 」(d100) を使って作成してみます。

h2xs はディストリビューションの「 骨格 」( スケルトン:skeleton ) となるファイル群を自動で生成します。


h2xs とオプション「 -XAn 」



ツール「 h2xs 」については「 Perl ツール h2xs [翻訳] (d100) 」でそのドキュメントを確認しました。

もともと h2xs は、C 言語のヘッダファイルから Perl の拡張 ( XS: perlxs ) を構築するためのツール ( i.e. header to XS ) ですが、オプション「 -X 」,「 -A 」それから「 -n 」を組み合わせることで、任意のディストリビューションを作成するためにも使うことができるようになります。


オプション「 -X 」



h2xs のオプション「 -X 」( --omit-XS ) は、XS 部分の省略を行います。

今回は、Perl のみで構成されるいわゆる「 ピュア Perl 」のディストリビューションを作成するので「 -X 」を指定します。

なお、「 XS 」を含むディストリビューションを作成する場合は指定する必要はないと理解しています。

また、このオプションは暗黙的にオプション「 -c 」と「 -f 」を有効にします。


オプション「 -c 」



オプション「 -c 」( --omit-constant ) は、C のヘッダファイルの「 #define 」で定義された値を Perl スクリプトでアクセスできるようにするファンクション「 constant() 」を「 .xs 」ファイルから省略します - perlXStut

加えて、これに対応する「 AUTOLOAD 」を 「 .pm 」ファイルから省略します。


オプション「 -f 」



オプション「 -f 」( --force ) は、C のヘッダファイルが見つからなかった場合でも強制的に拡張機能の作成を続行するためのものです。


オプション「 -A 」



オプション「 -A 」( --omit-autoload ) は、「 -c 」と同じですべての「 autoload 」を省略し、加えて「 .pm 」ファイルから「 use AutoLoader 」ステートメントを削除します。


オプション「 -n 」



オプション「 -n 」( --name=module_name ) は、拡張の名前 ( ディストリビューション:モジュール ) の名前を指定するために使います。

例えば、名前を「 My::Module 」にするなら次のように指定します。


-n My::Module

or

--name=My::Module




h2xs -XAn My::Module と後方互換



上記オプションを指定して h2xs を実行すると、次のような出力が得られます。


$ h2xs -XAn My::Module
Defaulting to backwards compatibility with perl 5.25.6
If you intend this module to be compatible with earlier perl versions, please
specify a minimum perl version with the -b option.

Writing My-Module/lib/My/Module.pm
Writing My-Module/Makefile.PL
Writing My-Module/README
Writing My-Module/t/My-Module.t
Writing My-Module/Changes
Writing My-Module/MANIFEST



ここでは、ディストリビューションに必要なファイルを自動的に生成する処理を実行しています。

ディストリビューションに必要とされているファイルは主に上記の「 lib/My/Module.pm 」, 「 Makefile.PL 」, 「 README 」, 「 t/My-Module.t 」, 「 Changes 」, 「 MANIFEST 」です。

それぞれがまた、必要な情報の雛形を含んだファイルですが、これらについて別途確認します。

ここでは、h2xs 実行直後に出力されているメッセージに注目します。

Defaulting to backwards compatibility with perl 5.25.6.

If you intend this module to be compatible with earlier perl versions, please specify a minimum perl version with the -b option.

---
デフォルトでの後方互換は perl 5.25.6 です

もしあなたが意図するなら このモジュールを 互換性があるようにすることを より前の perl バージョンと, 指定してください 最小の perl バージョンを -b オプションで.


このメッセージは、生成されるディストリビューションのモジュールが、perl 5.25.6 とそれ以降とのみ互換性を持っていることを意味しています。

これは、h2xs のデフォルトの動作で、オプション「 -b 」( --compat-version=version ) が指定されていない場合は、h2xs の実行に利用した perl のバージョンが互換性としてセットされます。

h2xs 実行後に互換性をチェックしたい場合は、生成された「 Makefile.PL 」や、「 .pm 」ファイルのコンテンツをチェックするとよいかもしれません。

ファイルの冒頭には次のような行があるはずです。


use 5.025006;



「 use VERSION 」については、use - perldocuse feature と use VERSION - Please Sleep などを参照します。


オプション「 -b 」で互換性を指定する



任意の後方互換を指定するためにはオプション「 -b 」を使います。

例えば、Perl 5.10.1 以上と互換性を持たせるなら次のように実行します。


$ h2xs -b 5.10.1 -XAn My::Module
Writing My-Module/lib/My/Module.pm
Writing My-Module/Makefile.PL
Writing My-Module/README
Writing My-Module/t/My-Module.t
Writing My-Module/Changes
Writing My-Module/MANIFEST



すると、use VERSION 行が次のように変化します。


$ cat My-Module/Makefile.PL My-Module/lib/My/Module.pm | grep use
use 5.010001;
use ExtUtils::MakeMaker;
use 5.010001;
use strict;
use warnings;
:
.



h2xs を実行した後で互換バージョンの ( または何らかの ) 変更が必要になった場合は、オプション「 -O 」( --overwrite-ok ) を追加して実行します。


$ h2xs -Ob 5.10.1 -XAn My::Module
Overwriting existing My-Module!!!
Writing My-Module/lib/My/Module.pm
Writing My-Module/Makefile.PL
Writing My-Module/README
Writing My-Module/t/My-Module.t
Writing My-Module/Changes
Writing My-Module/MANIFEST



オプション「 -O 」を指定しない場合は失敗します。


$ h2xs -b 5.10.1 -XAn My::Module
Won't overwrite existing My-Module




NEXT



次回は、h2xs によって生成された各ファイルをそれぞれ確認します。


参考情報は書籍「 続・初めての Perl 改訂版 」, 「 Effective Perl 第 2 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index





































同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲