Next: , Previous: Clean, Up: Top


13 配布物に含まれるもの

13.1 基本的な配布物

Makefile.inで生成されたdistルールは,配布物に対してgzip されたtarファイルやそれ以外の特色を持ったものを生成するために使 用することが可能です.ファイルは,AM_INIT_AUTOMAKE (see Macros)で定義される‘PACKAGE’と‘VERSION’変数に基づい て命名されます.より正確には,gzipされたtarファイルは ‘package-version.tar.gz’と命名されます. gzipを実行する方法を制御するために,makeの‘GZIP_ENV’変数を 使用することが可能です.デフォルト設定は‘--best’です.

ほとんどの部分で,配布するファイルは自動的にAutomakeが見つけます.ソー スファイルはすべて自動的に配布物に含まれ,すべてのMakefile.amMakefile.inも同様に扱われます.Automakeには,カレントディレクト リで(物理的にまたはMakefile.amルールのターゲットとして)見つかる 場合に自動的にインクルードされる,一般的に使用されるファイルの組み込み リストがあります.このリストは‘automake --help’で出力されます. configureで読み込まれるファイルも(すなわち, AC_CONFIG_FILESとその仲間のような様々なAutoconfマクロで指定され ているファイルに対応しているソースファイル),自動的に配布されます. (includeを使用して)Makefile.amや,(m4_includeを使 用して)configure.acでインクルードされているファイルと, ‘automake --add-missing’でインストールされるヘルパースクリプトも 配布されます. 配布する必要がありながら自動的なルールでカバーされていないファイルがあ ることも,まだあります.これらのファイルは,EXTRA_DIST変数でリ ストアップします.EXTRA_DISTでは,サブディレクトリのファイルを 記述することが可能です.

EXTRA_DISTではディレクトリを記述することも可能です.この場合は, ディレクトリ全体が再帰的に配布物にコピーされます.これはディレクトリの すべてのものをコピーし,CVS/RCSのバージョンコントロールファイル も含まれることに注意してください.我々は,この機能を使用しないことを推 奨します. SUBDIRSを定義している場合,Automakeはサブディレクトリを再帰的に 配布物に含めます.SUBDIRSを条件付きで定義している場合 (see Conditionals),Automakeは通常,SUBDIRSにあるすべてのディ レクトリをできる限り配布物に含めます.条件付きでディレクトリの組を指定 する必要がある場合,配布物に含めるサブディレクトリの正確なリストを変数 DIST_SUBDIRSに設定することで可能となります(see Conditional Subdirectories).

13.2 きめ細かな配布物の制御

配布物に含めないものを細かく制御する必要があるときもあります. 例えば,生成されたソースファイルと配布したくないソースファイルがあると 仮定します.この場合は,Automakeは‘dist’と‘nodist’接頭辞を使 用したきめ細かな制御を提供します.すべてのプライマリや‘_SOURCES’ 変数は,リストアップされているファイルを配布物に追加するため, ‘dist_’を前置することが可能です.同様に,ファイルを配布物から除去 するために,‘nodist_’を使用することが可能です. 例えば,配布するデータがあり配布しないソースコードもあるようにする方法 は,以下のようになります.

     dist_data_DATA = distribute-this
     bin_PROGRAMS = foo
     nodist_foo_SOURCES = do-not-distribute.c

13.3 distフック

パッケージ化する前に,配布物の変更を可能にすことが有効な時もあります. dist-hookルールが存在する場合,配布ディレクトリが満たされた後で, 実際のtar(あるいはshar)ファイルが作成される前に,それが実行されます. これを利用する方法の一つには,新しいMakefile.amを作るまでもない サブディレクトリのファイルを配布するためにあります.

     dist-hook:
             mkdir $(distdir)/random
             cp -p $(srcdir)/random/a1 $(srcdir)/random/a2 $(distdir)/random

これを使用するもう一つの方法は,EXTRA_DISTでディレクトリを指定すること で,再帰的にインクルードされる不必要なファイルを削除するために存在しま す.

     EXTRA_DIST = doc
     
     dist-hook:
     	rm -rf `find $(distdir)/doc -name CVS`

dist-hookルールを書くとき便利な二つの変数は,$(distdir)$(top_distdir)です.

$(distdir)は,distルールがtarballを作成する前に,ファイ ルを現在のディレクトリからコピーする場所を示します.最上位のディレクト リにいる場合,distdir = $(PACKAGE)-$(VERSION)になります. foo/と言う名前のサブディレクトリで使用するときはdistdir = ../$(PACKAGE)-$(VERSION)/fooになります.$(distdir)は絶対パスや 相対パスが可能で,形式の仮定は行なっていません.

$(top_distdir)は,常に配布されるツリーのルートディレクトリを示 します.最上位では,それは$(distdir)と同じです.foo/サブ ディレクトリでは,top_distdir = ../$(PACKAGE)-$(VERSION)になり ます.$(top_distdir)も絶対パスや相対パスが可能です.

パッケージが入れ子状のAC_CONFIG_SUBDIRSを使用しているとき (see Subpackages),$(distdir)$(top_distdir)が,サ ブパッケージの呼び出しではなく,make distが実行されているパッケー ジの場所から相対的なものになることに注意して下さい.

13.4 配布物の調査

Automakeは,与えられた配布物が実際に動作することの保証に役立つ distcheckルールを生成します.distcheckは実際に配布物を作 成し,VPATHのビルドを試み,テストスイートを実行し,そして配布物 自身が含まれることを確認するため,最終的に別のtarファイルを作成します. パッケージのビルドには,./configureの実行も含まれます. configureに追加フラグを供給する必要がある場合は,最上位の Makefile.am,またはmakeの呼出時のコマンドラインで DISTCHECK_CONFIGURE_FLAGS変数で定義する必要があります. distcheck-hookルールがトップレベルのMakefile.amで定義さ れている場合,新しい配布物が展開された後,展開されたコピーがconfigure されてビルドされる前に,distcheckで呼び出されます.いつも通りの 注意とアドバイスはありますが,distcheck-hookでほとんどすべての ことが可能です.通常このフックは,配布物のエラーが標準的なメカニズムで 発生する可能性を調査するために使用されます.distcheck-hookDISTCHECK_CONFIGURE_FLAGSと同じように,サブパッケージの Makefile.amでは利用されませんが, DISTCHECK_CONFIGURE_FLAGSはサブパッケージのconfigureスク リプトには渡されることに注意して下さい.

配布物エラーの可能性について述べると,distcheckでは, distcleanルールが実際に全てのビルドファイルも確実に削除するとい うことです.これは,VPATHのビルドの終りにmake distcleancheckを実行することでなされます.デフォルトで, distcleancheckdistcleanを実行し, $(distcleancheck_listfiles)を実行することでビルドツリーが空にな ることを確かめます.通常この調査は,DISTCLEANFILES変数 (see Clean)に追加し忘れた,生成されるファイルを検出します. distcleancheckの動作は,ほとんどのパッケージでOKにすべきで,そ うでない場合は,distcleancheckルールや $(distcleancheck_listfiles)変数の定義を優先している可能性があり ます.distcleancheckが完全にできないものに対して,最上位の Makefile.amに以下のルールを追加してください.

     distcleancheck:
             @:

配布物の一部にもなるためクリーンしたくないビルドされたファイルを distcleancheckで無視したい場合,代わりに以下の定義を追加してく ださい.

     distcleancheck_listfiles = \
       find -type f -exec sh -c 'test -f $(srcdir)/{} || echo {}' ';'

ユーザがパッケージをビルドするとき,Makefileが配布されたファイルをリビ ルドするものがある場合,それは通常エラーとなるので,上記の定義はデフォ ルトではありません.(ファイルをビルドするために必要なユーザに足りない ツールを考えてみてください.または,要求されたツールがパッケージでビル ドされる場合,実行不可能なクロスコンパイルの状況を考慮してください.) これに関するFAQがあり(see distcleancheck), distcleancheck_listfilesを実行する前にそれをよく読んで下さい.

distcheckは,uninstallルールが,通常の場合と ‘DESTDIR’でのビルドの両方で適切に動作するかどうかも調査します.そ れはmake uninstallの呼び出しで行ない,ファイルが残っていないか どうかをインストールツリーを見て調査します.この調査で, uninstallに関連するルールを正しくコーディングしていることを確認 します.

デフォルトで,その調査はdistuninstallcheckルールで行なわれ,イ ンストールツリーのファイルリストは, $(distuninstallcheck_listfiles)で生成されます(これは,ファイル リストを標準出力に出力するために実行するシェルコマンドを値に持つ変数で す).

これらのいずれかで,distcheckの動作を変更するために優先させるこ とが可能です.例えば,この調査を完全に無効にするため,以下のように書く でしょう.

     distuninstallcheck:
             @:

13.5 配布物の形式

Automakeは,様々なフォーマットでプロジェクトを配布するアーカイブを提供 するためのルールを生成します.ターゲットは以下のとおりです.

dist-bzip2
配布物のbzip2されたtarアーカイブを生成します.bzip2アーカイブは,gzip されたアーカイブより小さくなることが多くなっています.
dist-gzip
gzipされたtarアーカイブを生成します.
dist-shar
配布物のsharアーカイブを生成します.
dist-zip
配布物のzipアーカイブを生成します.
dist-tarZ
配布物の圧縮されたtarアーカイブを生成します.

ルールdist(とその歴史的な同義語のdist-all)は,利用可能な すべてのフォーマットでアーカイブを作成します.Optionsを参照して 下さい.デフォルトでは,dist-gzipターゲットだけがdistで フックされます.