Go to the first, previous, next, last section, table of contents.


配布物に含まれるもの

基本的な配布物

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

ほとんどの部分で,配布するファイルは自動的にAutomakeが見つけます.ソース ファイルはすべて自動的に配布物に含まれ,すべての`Makefile.am'`Makefile.in'も同様に扱われます.Automakeには,カレントディレクトリ で(物理的にまたは`Makefile.am'規則のターゲットとして)見つかる場合, 自動的に含まれる一般的に使用されるファイルの組み込みリストがあります.こ のリストは`automake --help'で出力されます.configureで読み込 まれるファイルも(すなわち,AC_CONFIG_FILESとその仲間のような様々 なAutoconfマクロで指定されているファイルに対応しているソースファイル), 自動的に配布されます.

配布する必要がありながら自動的な規則でカバーされていないファイルがあるこ とも,まだあります.これらのファイルは,EXTRA_DIST変数でリストアッ プします.EXTRA_DISTでは,サブディレクトリのファイルを記述するこ とが可能です.

EXTRA_DISTではディレクトリを記述することも可能です.この場合は, ディレクトリ全体が再帰的に配布物にコピーされます.これはディレクトリの すべてのものをコピーし,CVS/RCSのバージョンコントロールファイルも 含まれることに注意してください.我々は,この機能を使用しないことを推奨し ます.

きめ細かな配布物の制御

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

例えば,配布するデータがあり配布しないソースコードもあるようにする方法は, 以下のようになります.

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

distフック

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

EXTRA_DIST = doc

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

SUBDIRSを定義している場合,Automakeはサブディレクトリを再帰的に配 布物に含めます.SUBDIRSを条件つきで定義している場合 (see section 条件文),Automakeは通常,SUBDIRSにあるすべてのディ レクトリをできる限り配布物に含めます.条件つきでディレクトリの組を指定す る必要がある場合,配布物に含めるサブディレクトリの正確なリストを変数 DIST_SUBDIRSに設定することで可能となります.

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

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

配布物の調査

Automakeは,与えられた配布物が実際に動作することの保証に役立つ distcheckターゲットを生成します.distcheckは実際に配布物を 作成し,VPATHのビルドを試み,テストスイートを実行し,そして配布物 自身が含まれることを確認するため,最終的に別のtarファイルを作成します.

パッケージのビルドは./configureの実行も含まれます. configureに追加フラグを供給する必要がある場合は,トップレベルの `Makefile.am',またはmakeの呼出時のコマンドラインで DISTCHECK_CONFIGURE_FLAGS変数で定義する必要があります.

ターゲットdistcheck-hook`Makefile.am'で定義されている場合, 新しい配布物が展開された後,展開されたコピーがコンフィグレーションされて ビルドされる前に,distcheckで呼び出されます.いつも通りの注意とア ドバイスはありますが,distcheck-hookでほとんどすべてのことが可能 です.通常このフックは,配布物のエラーが標準的なメカニズムで発生する可能 性を調査するために使用されます.

配布物エラーの可能性について述べると,distcheckdistclean ターゲットが実際に全てのビルドファイルも確実に削除するということです.こ れは,VPATHのビルドの終りにmake distcleancheckを実行するこ とでなされます.デフォルトで,distcleancheckdistcleanを 実行し,$(distcleancheck_listfiles)を実行することでビルドツリーが 空になることを確かめます.通常この調査は,DISTCLEANFILES変数 (see section クリーンされるもの)に追加し忘れた,生成されるファイルを検出します.

distcleancheckの動作は,ほとんどのパッケージでOKにすべきで,そう でない場合は,distcleancheckターゲットや $(distcleancheck_listfiles)変数の定義を優先している可能性がありま す.distcleancheckが完全にできないものに対して,トップレベルの `Makefile.am'に以下の規則を追加してください.

distcleancheck:
        @:

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

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

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

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

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

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

distuninstallcheck:
        @:

配布物の形式

Automakeは,配布物を生成する要求があったとき,`.tar.gz'ファイルと, その他のアーカイブ形式を生成します,section Automakeの動作の変更.ターゲット dist-gzip`.tar.gz'ファイルのみを生成します.


Go to the first, previous, next, last section, table of contents.