Perl Perl_6 ディストリビューション
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 - perldoc や use 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 mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)