\input texinfo   @c -*-texinfo-*-
@c %**start of header
@setfilename automake-ja.info
@settitle automake
@setchapternewpage off
@c %**end of header

@c @documentlanguage ja

@include automake-v.texi

@dircategory GNU programming tools
@direntry
* automake(ja): (automake-ja).		Making Makefile.in's
@end direntry

@dircategory Individual utilities
@direntry
* aclocal(ja): (automake-ja)Invoking aclocal.          Generating aclocal.m4
@end direntry

@ifinfo
このファイルはGNU automake @value{VERSION}のドキュメントです．

Copyright 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

@ignore
Permission is granted to process this file through TeX and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph


@end ignore
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation approved
by the Foundation.
@end ifinfo


@titlepage
@title GNU Automake
@subtitle For version @value{VERSION}, @value{UPDATED}
@author David MacKenzie and Tom Tromey
@c 翻訳 西尾 太

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1995, 1996, 2000, 2001 Free Software Foundation, Inc.
@sp 2
This is the first edition of the GNU Automake documentation,@*
and is consistent with GNU Automake @value{VERSION}.@*
@sp 2
Published by the Free Software Foundation @*
59 Temple Place - Suite 330, @*
Boston, MA 02111-1307 USA @*

Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
are preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the entire
resulting derived work is distributed under the terms of a permission
notice identical to this one.

Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that this permission notice may be stated in a translation
approved by the Free Software Foundation.
@end titlepage

@c Define an index of configure output variables.
@defcodeindex ov
@c Define an index of configure variables.
@defcodeindex cv
@c Define an index of options.
@defcodeindex op
@c Define an index of targets.
@defcodeindex tr
@c Define an index of commands.
@defcodeindex cm

@c Put the macros and variables into their own index.
@c @syncodeindex fn cp
@syncodeindex ov vr
@syncodeindex cv vr
@syncodeindex fn vr

@c Put everything else into one index (arbitrarily chosen to be the concept index).
@syncodeindex op cp
@syncodeindex tr cp
@syncodeindex cm cp

@ifnottex
@c @ifinfo
@node Top, Introduction, (dir), (dir)
@comment  node-name,  next,  previous,  up
@top GNU Automake

このファイルは，GNU Automakeパッケージのドキュメントです．Automakeはテン
プレートファイルからGNU標準準拠のMakefileを作成するプログラムです．この
エディションは，バージョン@value{VERSION}のドキュメントです．

@menu
* Introduction::                Automake's purpose
* Generalities::                General ideas
* Examples::                    Some example packages
* Invoking Automake::           Creating a Makefile.in
* configure::                   Scanning configure.ac or configure.in
* Top level::                   The top-level Makefile.am
* Alternative::                 An alternative approach to subdirectories
* Rebuilding::                  Automatic rebuilding of Makefile
* Programs::                    Building programs and libraries
* Other objects::               Other derived objects
* Other GNU Tools::             Other GNU Tools
* Documentation::               Building documentation
* Install::                     What gets installed
* Clean::                       What gets cleaned
* Dist::                        What goes in a distribution
* Tests::                       Support for test suites
* Options::                     Changing Automake's behavior
* Miscellaneous::               Miscellaneous rules
* Include::                     Including extra files in an Automake template.
* Conditionals::                Conditionals
* Gnits::                       The effect of @code{--gnu} and @code{--gnits}
* Cygnus::                      The effect of @code{--cygnus}
* Extending::                   Extending Automake
* Distributing::                Distributing the Makefile.in
* Macro and Variable Index::
* General Index::
@end menu

@end ifnottex


@node Introduction, Generalities, Top, Top
@chapter はじめに

Automakeは，@file{Makefile.am}と呼ばれるファイルから，@file{Makefile.in} 
を自動的に生成するツールです．それぞれの@file{Makefile.am}は，基本的に一
連の@code{make}(時折，規則が添えられている)マクロの定義です．生成された
@file{Makefile.in}はGNU Makefileの標準に従います．

@cindex GNU Makefile standards

GNU Makefile Standards Documentは(@pxref{Makefile Conventions, , ,
standards, The GNU Coding Standards})，長くて複雑で変更の原因にもなりま
す．Automakeの目的は，個別のGNU管理者の背中からMakefle管理の負担を取り除
く(そしてAutomake管理者に任せる)ことです．

一般的なAutomakeの入力ファイルは，単純な一連のマクロ定義です．それぞれの
ファイルは，@file{Makefile.in}を作成するために処理されます．通常，プロジェ
クト内のディレクトリ毎に，１つの@file{Makefile.am}を配置します．

@cindex Constraints of Automake
@cindex Automake constraints

Automakeは，ある方法でプロジェクトに制限を与えます．例えばプロジェクトが
Autoconf(@pxref{Top, , Introduction, autoconf, The Autoconf Manual})の使
用を想定すると，@file{configure.in}の内容には，ある制限が発生します
@footnote{Autoconf 2.50 は，@file{configure.in}ではなく
@file{configure.ac}を推奨しています．このドキュメントの残りの部分では，
@file{configure.ac}の使用が広まっていないので，@file{configure.in}につい
て説明していますが，Automakeは@file{configure.ac}もサポートしています．}．

@cindex Automake requirements
@cindex Requirements, Automake

Automakeは，@file{Makefile.in}を生成するために@code{perl}が必要です．し
かし，Automakeで作成された配布物は，完全にGNUの標準に従っていて，ビルド
するためには，@code{perl}は不要です．

@cindex BUGS, reporting
@cindex Reporting BUGS
@cindex E-mail, bug reports

@email{bug-automake@@gnu.org}宛にAutomakeの提案とバグレポートをメールし
てください．


@node Generalities, Examples, Introduction, Top
@chapter 一般的な考え

以下のセクションで，Automakeが動作する方法についての理解に役立つ，基本的
な考えをいくつか述べます．

@menu
* General Operation::           General operation of Automake
* Strictness::                  Standards conformance checking
* Uniform::                     The Uniform Naming Scheme
* Canonicalization::            How derived variables are named
* User Variables::		Variables reserved for the user
* Auxiliary Programs::          Programs automake might require
@end menu


@node General Operation, Strictness, Generalities, Generalities
@section 一般的な操作

Automakeは@file{Makefile.am}を読み込み，@file{Makefile.in}を生成する仕事
をします．@file{Makefile.am}で定義されているマクロとターゲットで，
Automakeは更に特殊なコードを生成します．例えば，@samp{bin_PROGRAMS}マク
ロ定義で，生成されるプログラムをコンパイルしてリンクするターゲットを生成
します．

@cindex Non-standard targets
@cindex cvs-dist, non-standard example
@trindex cvs-dist

@file{Makefile.am}のマクロ定義とターゲットは，そのまま生成されたファイル
にコピーされます．これにより生成された@file{Makefile.in}に任意のコードを
加えることが可能となります．例えばAutomakeの配布物には，Automake管理者が
ソースコントロールシステムから配布物を作成する時に使用する，非標準の
@code{cvs-dist}ターゲットを含んでいます．

@cindex GNU make extensions

GNU makeの拡張は，Automakeに認識されないことに注意してください．
@file{Makefile.am}でこのような拡張を使う場合，エラーが生じたり，紛らわし
い動作をしたりします．

Automakeは，賢い方法を用いて，隣接するターゲットとマクロ定義を，コメント
と分類します．

@cindex Make targets, overriding
@cindex Overriding make targets

一般に@file{Makefile.am}で定義されたターゲットは，@code{automake}によっ
て自動的に生成されるターゲットに似た名前を持つものに優先します．これは，
サポートされているものですが，一般的に，生成される規則は非常に特殊なこと
もあるので，それを利用することは避けたほうがよいでしょう．

@cindex Macros, overriding
@cindex Overriding make macros

@file{Makefile.am}で定義されたマクロも同様に，@code{automake}が通常作成
するあらゆるマクロ定義より優先されます．このことは，ターゲット定義の優先
より，さらに役立ちます．@code{automake}が生成したマクロの多くは，内部で
の使用のみを考慮に入れていて，それらマクロの名前は将来のリリースで変わる
可能性があることに注意してください．

@cindex Recursive operation of Automake
@cindex Automake, recursive operation
@cindex Example of recursive operation

マクロ定義を調べている時，Automakeは定義で参照されているマクロを再帰的に
調査します．例えば，以下の断片的な@code{foo_SOURCES}の内容を，Automakeが
調査している場合を考えます．

@example
xs = a.c b.c
foo_SOURCES = c.c $(xs)
@end example

それは，ファイル@file{a.c}，@file{b.c}，そして@file{c.c}を
@code{foo_SOURCES}の内容として使用します．

@cindex ## (special Automake comment)
@cindex Special Automake comment
@cindex Comment, special to Automake

Automakeでは，出力ファイルにコピー@emph{されない}コメントの形式も利用可
能です．Automakeは@samp{##}で始まる(前置されるスペースは可能です)すべて
の行を完全に無視します．

@file{Makefile.am}の最初の行を読み込むと，以下の行が習慣的に加えられます．

@cindex Makefile.am, first line
@cindex First line of Makefile.am

@example
## Process this file with automake to produce Makefile.in
@end example

@c FIXME discuss putting a copyright into Makefile.am here?  I would but
@c I don't know quite what to say.

@c FIXME document customary ordering of Makefile.am here!


@node Strictness, Uniform, General Operation, Generalities
@section 厳密さ

@cindex Non-GNU packages

Automakeは，GNUパッケージの管理者が使用することを目的としていますが，使
いたいけども，すべてのGNU規約を使いたいわけではない人たちをも受け入れる
努力をします．

@cindex Strictness, defined
@cindex Strictness, foreign
@cindex foreign strictness
@cindex Strictness, gnu
@cindex gnits strictness
@cindex Strictness, gnits
@cindex gnits strictness

このため，Automakeは３つの@dfn{厳密さ}のレベルをサポートします---厳密さ
とは，Automakeに調査させる標準への適合度を示すものです．

以下は有効な厳密さのレベルです．

@table @samp
@item foreign
Automakeは，適切な処理のため絶対に必要なものだけを調べます．例えば，GNU 
の標準は@file{NEWS}ファイルを必要としますが，このモードで必要ではありま
せん．この名前(foreign)は，本来はGNUプログラムのためにAutomakeを使用して
欲しいのでこのように名付けられています．これらの緩い規則は標準的な操作様
式ではありません．

@item gnu
Automakeは，パッケージがGNUの標準に対応しているかどうか--可能な限り--- 
調査します．これはデフォルトです．

@item gnits
Automakeは，まだ書かれていない@dfn{Gnits standards}に対応しているかどう
かを調査します．これらはGNUの標準に基づいていますが，より詳しく記述され
ています．Gnits standardsの貢献者でない場合，Gnits standardsが実際に発表
される時まで(発表されることはないかもしれませんが) ，このオプションの使
用は避けるように勧めます．
@end table

厳密さのレベルの正確な意味についての詳細は，@ref{Gnits}．

Automakeには，厳密さ似にていますが異なる扱いを受ける，特殊な``cygnus''モー
ドがあります．このモードは，パッケージを``Cygnus''形式のツリー(例えば，
GCCツリー)に配置する時，役に立ちます．このモードの詳細は，@ref{Cygnus}, 
を参照してください．


@node Uniform, Canonicalization, Strictness, Generalities
@section 一様な命名法

@cindex Uniform naming scheme

(これ以降@emph{変数}として述べられる)Automakeマクロは，一般に次の
@dfn{uniform naming scheme}に従い，それは，プログラム(とその他のオブジェ
クト)のビルド方法とそれらのインストール方法の決定を容易にします．この手
法は，@code{configure}時にビルドするものの決定もサポートします．

@cindex _PROGRAMS primary variable
@cindex PROGRAMS primary variable
@cindex Primary variable, PROGRAMS

@cindex Primary variable, defined

@code{make}時にビルドするオブジェクトを決定するため，特定の変数を使用し
ます．変数の名前は，いくつかのピースをお互いに連結したものからできていま
す．

ビルドするものをautomakeに伝えるピースは，一般に@dfn{primary}と呼ばれま
す．例えば，プライマリの@code{PROGRAMS}は，コンパイルされリンクされるプ
ログラムのリストになります．
@vindex PROGRAMS

@cindex pkglibdir, defined
@cindex pkgincludedir, defined
@cindex pkgdatadir, defined

@vindex pkglibdir
@vindex pkgincludedir
@vindex pkgdatadir

ビルドしたオブジェクトをインストールする場所を決定するため，異なる名前の
組が使用されます．これらの名前はプライマリに前置されていて，それはインス
トールディレクトリとして使用される標準ディレクトリを示します．標準的なディ
レクトリ名はGNUの標準で与えられています(@pxref{Directory Variables, , ,
standards, The GNU Coding Standards})．Automakeは，@code{pkglibdir}，
@code{pkgincludedir}と@code{pkgdatadir}を用いて，このリストを拡張します．
これらは非@samp{pkg}のバージョンと同じですが，@samp{@@PACKAGE@@}で付加さ
れます．例えば，@code{pkglibdir}は@code{$(libdir)/@@PACKAGE@@}と定義され
ます．
@cvindex PACKAGE

@cindex EXTRA_, prepending

それぞれのプライマリに対して，@samp{EXTRA_}をプライマリ名の接頭辞として
名付けられた追加の変数があります．この変数は，ビルドされたりされなかった
りするオブジェクトのリストで使用され，それは，@code{configure}の決定に依
存します．Automakeは，すべての状況で動作する@file{Makefile.in}を生成する
ために，ビルドされる可能性のあるオブジェクト全体のリストをあらかじめ知っ
ておく必要があるので，この変数が必要になります．

@cindex EXTRA_PROGRAMS, defined
@cindex Example, EXTRA_PROGRAMS
@cindex cpio example

例えば，@code{cpio}はconfigure時にビルドするプログラムを決定します．
@code{bindir}にインストールされるプログラムもあり，@code{sbindir}にイン
ストールされるものもあります．

@example
EXTRA_PROGRAMS = mt rmt
bin_PROGRAMS = cpio pax
sbin_PROGRAMS = @@MORE_PROGRAMS@@
@end example

接頭辞がないプライマリを変数として定義すること，例えば@code{PROGRAMS}は
エラーになります．

一般的に，@samp{dir}接尾辞は，変数名を作る時に無くなることに注意して下さ
い．このため，@samp{bindir_PROGRAMS}ではなく，@samp{bin_PROGRAMS}と書き
ます．

すべての種類のオブジェクトが，すべてのディレクトリにインストールされるわ
けではありません．Automakeはエラーを見つけたとき，フラグを付けようとしま
す．Automakeはディレクトリ名での明らかなスペルミスも診断します．

@cindex Extending list of installation directories
@cindex Installation directories, extending list

標準ディレクトリは---Automakeによって拡張されてはいますが---十分でない場
合もあります．特に，前もって定められたディレクトリのサブディレクトリにオ
ブジェクトをインストールすると便利なこともあります．このため，Automakeは
インストール可能なディレクトリのリストを拡張することを可能にします．与え
られている接頭辞(例えば@samp{zar})は，同じ名前の変数に@samp{dir}を付加し
た変数(例えば@code{zardir})が定義されている場合，有効です．

@cindex HTML support, example

例えば，Automakeの一部としてHTMLがサポートされるまで，以下のようにして生
のHTMLドキュメンテトをインストールできます．

@example
htmldir = $(prefix)/html
html_DATA = automake.html
@end example

@cindex noinst primary prefix, definition

特別な接頭辞@samp{noinst}は，該当のオブジェクトがインストールされてはな
らないことを示します．

@cindex check primary prefix, definition

特別な接頭辞@samp{check}は，該当のオブジェクトが@code{make check}コマン
ドが実行されるまでビルドされないことを示します．

現在のプライマリ名は，@samp{PROGRAMS}，@samp{LIBRARIES}，@samp{LISP}，
@samp{PYTHON}，@samp{JAVA}，@samp{SCRIPTS}，@samp{DATA}，@samp{HEADERS}，
@samp{MANS}，そして@samp{TEXINFOS}です．
@vindex PROGRAMS
@vindex LIBRARIES
@vindex LISP
@vindex PYTHON
@vindex JAVA
@vindex SCRIPTS
@vindex DATA
@vindex HEADERS
@vindex MANS
@vindex TEXINFOS

@code{automake}の動作の他の側面を制御する，追加の接頭辞が可能なプライマ
リもあります．現在定義されている接頭辞は，@samp{dist_}，@samp{nodist_}，
そして@samp{nobase_}です．これらの接頭辞は後で説明します．


@node Canonicalization, User Variables, Uniform, Generalities
@section 変数の命名法

@cindex canonicalizing Automake macros

Makefileの変数名は，管理者が提供するいくつかのテキストから得られることも
あります．例えば，@samp{_PROGRAMS}にリストアップされているプログラム名は，
@samp{_SOURCES}変数の名前にも再び書き込まれます．このような場合，プログ
ラム名とそれに類似したものがMakefileマクロ命名規則に従うように，Automake 
はテキストを基準にします．文字，数字，アットマーク(@@)，そしてアンダース
コア以外の，名前の中のすべての文字は，マクロで参照される時にアンダースコ
アに変換されます．

例えば，プログラムを@code{sniff-glue} と命名する場合，導き出される変数の
名前は，@code{sniff-glue_SOURCES}ではなく@code{sniff_glue_SOURCES}になり
ます．

マクロ名内部でAutoconfの置換式を使用する際にできるだけ明瞭にするため，アッ
トマークが追加されています，


@node User Variables, Auxiliary Programs, Canonicalization, Generalities
@section ユーザに対して予約されている変数

@cindex variables, reserved for the user
@cindex user variables

@code{Makefile}変数には，``user''が使用するためにGNU Coding Standardsで
予約されているものもあります---それはパッケージを構築する人のためです．
例えば，@code{CFLAGS}はそのような変数の一つです．

パッケージ開発者は，仕事を簡単にするために，@code{CFLAGS}のようなユーザ
変数の設定を試みる時もあります---彼らはすべてのターゲットに２番目の変数
を導入する必要はありません．

しかし，パッケージ自身でユーザ変数を設定してはならず，特に，パッケージの
コンパイルに要求される適切なスイッチを含めてはいけません．これらの変数は
パッケージの構築者に対して説明されているので，彼らは，構築時にこれらの変
数に優先させることが可能だと思っています．

このあたりの問題のため，automakeはそれぞれのユーザフラグ変数に対し，
automake特有の隠れた変数を導入しています．(隠れた変数は，@code{CC}のよう
な変数に対しては導入されておらず，それは意味が無いためです．)隠れた変数
は，ユーザ変数名に@samp{AM_}を前置して命名されています．例えば，
@code{YFLAGS}に対する隠れた変数は，@code{AM_YFLAGS}になります．


@node Auxiliary Programs, , User Variables, Generalities
@section automakeが必要とするプログラム

@cindex Programs, auxiliary
@cindex Auxiliary programs

生成された@file{Makefile}が適切に動作するように，automakeが補助的なプロ
グラムを必要とすることもあります．それらは数がかなり多いのですが，ここに
リストアップします．

@table @code
@item ansi2knr.c
@itemx ansi2knr.1
これらの二つのファイルは，自動的なde-ANSI-ficationのサポートで使用されま
す(@pxref{ANSI})．

@item compile
これは，@samp{-c}と@samp{-o}の両方を同時に受け入れることができないコンパ
イラに対するラッパーです．それは実際に要求された時のみ使用されます．その
ようなコンパイラは滅多にありません．

@item config.guess
@itemx config.sub
これらのプログラムは，与えられているビルド，ホスト，またはターゲットアー
キテクチャといった，３つの標準的なものを調べます．

@item depcomp
要求された出力を生成するだけでなく，自動的な依存追跡の機能で使用されてい
る依存情報も生成するために，このプログラムは，コンパイラの実行方法を理解
します．

@item elisp-comp
このプログラムは，Emacs Lispコードをバイトコンパイルするために使用されま
す．

@item install-sh
これは，@code{install}プログラムの代わりのもので，@code{install}の利用や
使用が不可能なプラットフォームで動作します．

@item mdate-sh
このスクリプトは，@file{version.texi}ファイルを生成します．それはファイ
ルを調査し，それに関する日付の情報を出力します．

@item missing
これは，通常管理者が必要とするいくつかのプログラムのラッパーです．該当の
プログラムが存在しない場合，@code{missing}は情報を伝える警告を出力し，ビ
ルドを継続することが可能になるように修正を試みます．

@item mkinstalldirs
これは，@code{mkdir -p}に移植性が無い問題を解決します．

@item py-compile
これは，Pythonスクリプトをバイトコンパイルするために使用されます．

@item texinfo.tex
プログラムではなく，このファイルは，パッケージにTexinfoソースファイルが
ある時，@code{make dvi}を動作させるために必要とされます．

@item ylwrap
このプログラムは，@code{lex}と@code{yacc}のラッパーで，例えば，複数の
@code{yacc}のインスタンスを単一のディレクトリで，並行して呼び出すことが
可能であることを確かめます．
@end table


@node Examples, Invoking Automake, Generalities, Top
@chapter いくつかのパッケージの例

@menu
* Complete::                    A simple example, start to finish
* Hello::                       A classic program
* etags::                       Building etags and ctags
@end menu


@node Complete, Hello, Examples, Examples
@section 簡単なサンプル例の最初から最後まで

@cindex Complete example

さて，渦から渦まで頭を浮かせる(?)プログラムの@code{zardoz}を，たった今書
き終えたとしましょう．移植性のフレームワークを提供するためにAutoconfを使
用していましたが，@file{Makefile.in}はアドホックで作成しました．それらを
堅牢にしたいのでAutomakeに切替えてみましょう．

@cindex AM_INIT_AUTOMAKE, example use

第一歩は@code{automake}が必要とするコマンドを含めるため，
@file{configure.in}の更新を開始しましょう．これを行なう方法として，
@code{AC_INIT}の直後に@code{AM_INIT_AUTOMAKE}の呼び出しを加えてみます．

@example
AM_INIT_AUTOMAKE(zardoz, 1.0)
@end example

プログラムには，(例えば，@code{gettext}を使っていないし，共有ライブラリ
もビルドしないし)複雑な要因を持たないので，この部分はおしまいです．なん
て簡単なんでしょう！

@cindex aclocal program, introduction
@cindex aclocal.m4, preexisting
@cindex acinclude.m4, defined

さて，@file{configure}を再生成する必要があります．しかしこうするためには，
使用している新しいマクロを見つける方法を@code{autoconf}に伝える必要があ
ります．最も簡単な方法は，@file{aclocal.m4}を生成する@code{aclocal}プロ
グラムを使うことです．しかしちょっと待って下さい・・・プログラムのために
ちょっとマクロを書く必要があり，すでに@file{aclocal.m4}があります．
@code{aclocal}プログラムでは，マクロを@file{acinclude.m4}に書いておく必
要があるので，単純に名前を変更して以下のように実行します．

@example
mv aclocal.m4 acinclude.m4
aclocal
autoconf
@end example

@cindex zardoz example

さて@code{zardoz}のための@file{Makefile.am}を書きましょう．@code{zardoz} 
はユーザープログラムなので，他のユーザープログラムがインストールされる場
所にインストールしたいと思います．さらに，@code{zardoz}にはTexinfoドキュ
メントがあります．@file{configure.in}スクリプトは，
@code{AC_REPLACE_FUNCS}を使用するので，@samp{@@LIBOBJS@@}をリンクする必
要があります．そのため以下のように書いたほうが良いでしょう．

@example
bin_PROGRAMS = zardoz
zardoz_SOURCES = main.c head.c float.c vortex9.c gun.c
zardoz_LDADD = @@LIBOBJS@@

info_TEXINFOS = zardoz.texi
@end example

さて，@file{Makefile.in}を生成するために@code{automake --add-missing}を
実行して，必要な補助ファイルを入手して，おしまいです！


@node Hello, etags, Complete, Examples
@section 古典的プログラム

@cindex Example, GNU Hello
@cindex Hello example
@cindex GNU Hello, example

@uref{ftp://prep.ai.mit.edu/pub/gnu/hello-1.3.tar.gz, GNU hello}は，古典
的単純さと万能さで有名です．このセクションで，AutomakeをGNU Helloパッケー
ジに使用する方法を示します．以下の例は，GNU Helloの最近のベータバージョ
ンからのものですが，管理者専用のすべてのコードがはずされ，著作権のコメン
ト全体と同じぐらいになりました．

もちろん，GNU Helloは，伝統的な２行より幾分長くなっています．GNU Helloは
国際化されていて，オプション処理をして，そしてマニュアルとテストスイート
もあります．

@cindex configure.in, from GNU Hello
@cindex GNU Hello, configure.in
@cindex Hello, configure.in

GNU Helloの@file{configure.in}は以下のようになっています．

@example
dnl Process this file with autoconf to produce a configure script.
AC_INIT(src/hello.c)
AM_INIT_AUTOMAKE(hello, 1.3.11)
AM_CONFIG_HEADER(config.h)

dnl Set of available languages.
ALL_LINGUAS="de fr es ko nl no pl pt sl sv"

dnl Checks for programs.
AC_PROG_CC
AC_ISC_POSIX

dnl Checks for libraries.

dnl Checks for header files.
AC_STDC_HEADERS
AC_HAVE_HEADERS(string.h fcntl.h sys/file.h sys/param.h)

dnl Checks for library functions.
AC_FUNC_ALLOCA

dnl Check for st_blksize in struct stat
AC_ST_BLKSIZE

dnl internationalization macros
AM_GNU_GETTEXT
AC_OUTPUT([Makefile doc/Makefile intl/Makefile po/Makefile.in \
           src/Makefile tests/Makefile tests/hello],
   [chmod +x tests/hello])
@end example

@samp{AM_}マクロは，Automake(あるいはGettextライブラリ)によって提供され
ています．残りは標準Autoconfマクロです．

トップレベルの@file{Makefile.am}は以下のようになっています．

@example
EXTRA_DIST = BUGS ChangeLog.O
SUBDIRS = doc intl po src tests
@end example

ごらんの通り，ここでの仕事はすべてサブディレクトリで実際に実行されます．

@file{po}と@file{intl}ディレクトリは@code{gettextize}を使用して自動的に
生成されます．それについてはここで述べません．

@cindex Texinfo file handling example
@cindex Example, handling Texinfo files

@file{doc/Makefile.am}は以下のようになっています．

@example
info_TEXINFOS = hello.texi
hello_TEXINFOS = gpl.texi
@end example

これで，GNU Helloマニュアルをビルドして，インストールし，配布することに
十分対応できます．

@cindex Regression test example
@cindex Example, regression test

@file{tests/Makefile.am}は以下のようになっています．

@example
TESTS = hello
EXTRA_DIST = hello.in testdata
@end example

@file{hello}スクリプトは，@code{configure}により生成され，それはテストケー
スのみになっています．@code{make check}でこのテストを実行します．

@cindex INCLUDES, example usage

最後は@file{src／Makefile.am}で，実際にすべての仕事が行なわれる場所です．

@example
bin_PROGRAMS = hello
hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h
hello_LDADD = @@INTLLIBS@@ @@ALLOCA@@
localedir = $(datadir)/locale
INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
@end example


@node etags,  , Hello, Examples
@section etagsとctagsのビルド

@cindex Example, ctags and etags
@cindex ctags Example
@cindex etags Example

ここにもう１つの，トリッキーな例があります．それは同じソースファイル
(@file{etags.c})から２つのプログラム(@code{ctags}と@code{etags})を生成す
る方法を示します．難しい部分は，それぞれの@file{etags.c}のコンパイルで，
異なる@code{cpp}フラグが必要になるということです．

@example
bin_PROGRAMS = etags ctags
ctags_SOURCES =
ctags_LDADD = ctags.o

etags.o: etags.c
        $(COMPILE) -DETAGS_REGEXPS -c etags.c

ctags.o: etags.c
        $(COMPILE) -DCTAGS -o ctags.o -c etags.c
@end example

@code{ctags_SOURCES}は空で定義されています---その方法では，暗黙の値で置
換されません．しかし，暗黙の値は，@file{etags.o}から@code{etags}を生成す
るために使用されます．

@code{ctags_LDADD}は，リンク行に@file{ctags.o}を書き出すために使用されま
す．@code{ctags_DEPENDENCIES}はAutomakeが生成します．

上記の規則は，コンパイラが@samp{-c}と@samp{-o}の両方を受け入れない場合，
動作しません．これを簡単に修正するため，(並行した@code{make}の問題を避け
るために)偽の依存性を導入します．

@example
etags.o: etags.c ctags.o
        $(COMPILE) -DETAGS_REGEXPS -c etags.c

ctags.o: etags.c
        $(COMPILE) -DCTAGS -c etags.c && mv etags.o ctags.o
@end example

また，これらの明示的な規則は，de-ANSI-ficationが使用される場合は動作しま
せん(@pxref{ANSI})．de-ANSI-ficationをサポートするには，もう少し多くの仕
事が必要です．

@example
etags._o: etags._c ctags.o
        $(COMPILE) -DETAGS_REGEXPS -c etags.c

ctags._o: etags._c
        $(COMPILE) -DCTAGS -c etags.c && mv etags._o ctags.o
@end example

分かってくるに従い，同じ作業を行なうため，よりいっそう簡単な方法もありま
す．上記のテクニックには，マニュアルの例として置いておくには十分役に立つ
ものもあります．しかし，@code{etags}と@code{ctags}を現実的に構築する場合
は，以下のように，おそらくプログラム毎にコンパイルフラグを使用するでしょ
う．

@example
bin_PROGRAMS = ctags etags

ctags_SOURCES = etags.c
ctags_CFLAGS = -DCTAGS

etags_SOURCES = etags.c
etags_CFLAGS = -DETAGS_REGEXPS
@end example

この場合，Automakeによって，@file{etags.c}は異なるフラグを用いて二度コン
パイルされることになります．De-ANSI-ficationは自動的に動作します．この例
では，オブジェクトファイルの名前は，automakeが選択します．それは
@file{ctags-etags.c}と@file{etags-etags.o}になるでしょう．(オブジェクト
ファイルの名前が問題となることは滅多にありません．)


@node Invoking Automake, configure, Examples, Top
@chapter @file{Makefile.in}の生成

@cindex Multiple configure.in files
@cindex Invoking Automake
@cindex Automake, invoking

パッケージのためのすべての@file{Makefile.in}を作成するため，
@code{automake}プログラムをトップレベルのディレクトリで，引数なしで実行
してください．@code{automake}は，(@file{configure.in}をスキャンし， 
@pxref{configure})，自動的にそれぞれ適切な@file{Makefile.am}を見つけ，対
応する@file{Makefile.in}を生成します．@code{automake}では，パッケージを
構成するものへの視野がかなり単純になっていることに注意してください．それ
は，１つのパッケージがトップディレクトリにただ１つ@file{configure.in}を
持っていると想定します．パッケージに多数の@file{configure.in}がある場合
は， @file{configure.in}があるそれぞれのディレクトリで，@code{automake}
を実行する必要があります．

オプションとして@code{automake}に引数を与えることができます．そのとき， 
@file{.am}が引数に添えられ，結果は入力ファイルの名前として使用されます．
この機能は，一般的に，時代遅れの@file{Makefile.in}を自動的にリビルドする
ためだけに使用します．サブディレクトリで@file{Makefile.in}を再生成するた
めに使用した場合でも，プロジェクトのトップディレクトリで@code{automake} 
を実行する必要があります．なぜなら，@code{automake}は@file{configure.in} 
をスキャンする必要があり，@code{automake}は，場合によってその動作を変え
る@file{Makefile.in}がサブディレクトリに存在するという知識を使用するため
です．

@cindex Automake options
@cindex Options, Automake

@code{automake}は以下のオプションを受け入れます．

@cindex Extra files distributed with Automake
@cindex Files distributed with Automake
@cindex config.guess

@table @samp
@item -a
@itemx --add-missing
@opindex -a
@opindex --add-missing
Automakeは，特定のファイルが存在することを必要とする場合があります．例え
ば，@file{configure.in}が@code{AC_CANONICAL_HOST}を実行する場合，
@file{config.guess}が必要です．Automakeはこれらのファイルのいくつかと一
緒に配布されます．このオプションは，可能であれば，足りないものを自動的に
パッケージに加えます．一般的に，Automakeが足りないファイルがあることを告
げる場合，このオプションを使用してみてください．デフォルトで，Automakeは，
足りないファイルを示す，シンボリックリンクの作成を試みます．これは
@code{--copy}で変更できます．

@item --libdir=@var{dir}
@opindex --libdir
Automakeのデータファイルを，インストールされたディレクトリではなく
@var{dir}で探します．これは通常，デバッグで使用されます．

@item -c
@opindex -c
@itemx --copy
@opindex --copy
@code{--add-missing}と一緒に使用すると，インストールされているファイルを
コピーします．デフォルトはシンボリックリンクを作成します．

@item --cygnus
@opindex --cygnus
GNUやGnitsの規則の代わりに，Cygnusの規則に従う@file{Makefile.in}を生成し
ます．詳細は，@ref{Cygnus}．

@item -f
@opindex -f
@itemx --force-missing
@opindex --force-missing
@code{--add-missing}とともに使用すると，ソースツリーに存在する場合でも標
準のファイルを再構築します．これで，以前のソースツリーからファイルを削除
し，新しいシンボリックリンクを作成します(または，@code{--copy}とともに使
用すると，新しいファイルをコピーします)．

@item --foreign
@opindex --foreign
グローバルな厳密さを@samp{foreign}にセットします．詳細は，
@ref{Strictness}．

@item --gnits
@opindex --gnits
グローバルな厳密さを@samp{gnits}にセットします．詳細は，@ref{Gnits}．

@item --gnu
@opindex --gnu
グローバルな厳密さを@samp{gnu}にセットします．詳細は，@ref{Gnits}．これ
は，デフォルトの厳密さです．

@item --help
@opindex --help
コマンドラインオプションの概要を出力して終了します．

@item -i
@itemx --ignore-deps
@opindex -i
これで依存性追跡の機能を使用不可能にします．@ref{Dependencies},を参照し
てください．

@item --include-deps
@opindex --include-deps
依存性追跡の機能を使用可能にします．この機能は，デフォルトで使用可能です．
このオプションは，歴史的な理由でのみ提供されていて，おそらく使用すべきで
はありません．

@item --no-force
@opindex --no-force
通常@code{automake}は，@file{configure.in}で記述されているすべての
@file{Makefile.in}を作成します．このオプションは，依存性の一つの側面を用
いて，時代遅れになっている@file{Makefile.in}だけを更新します．

@item -o @var{dir}
@itemx --output-dir=@var{dir}
@opindex -o
@opindex --output-dir
生成された@file{Makefile.in}を@var{dir}に配置します．通常，それぞれの
@file{Makefile.in}は，@file{Makefile.am}に対応するディレクトリに作られま
す．このオプションは，配布物を作成する時に使用します．

@item -v
@itemx --verbose
@opindex -v
@opindex --verbose
読み込まれたり作成されたりしているファイルの情報をAutomakeは出力します．

@item --version
@opindex --version
Automakeのバージョンを出力して終了します．

@item --Werror
@itemx --Wno-error
@opindex --Werror
@opindex --Wno-error
@samp{--Werror}で，@code{automake}でエラーが生じた時にすべての警告を発行
します．エラーは，@code{automake}の終了ステータスに影響しますが，警告は
影響しません．@samp{--Wno-error}はデフォルトで，警告をそのまま警告として
のみ扱います．
@end table


@node configure, Top level, Invoking Automake, Top
@chapter @file{configure.in}のスキャン

@cindex configure.in, scanning
@cindex Scanning configure.in

Automakeは，パッケージに関する特定の情報を決定するために，パッケージの
@file{configure.in}をスキャンします．必要な@code{autoconf}マクロもあれば，
@file{configure.in}で定義する必要がある変数もあります．Automakeは，出力
物を調整するためにも，@file{configure.in}からの情報を使用します．

Automakeは，メンテナンスをより容易にするためのAutoconfマクロも提供してい
ます．これらのマクロは，@code{aclocal}プログラムを使用して自動的に
@file{aclocal.m4}に書き込むことが可能です．

@menu
* Requirements::                Configuration requirements
* Optional::                    Other things Automake recognizes
* Invoking aclocal::            Auto-generating aclocal.m4
* Macros::                      Autoconf macros supplied with Automake
* Extending aclocal::           Writing your own aclocal macros
@end menu


@node Requirements, Optional, configure, configure
@section 必要なコンフィグレーション

@cindex Automake requirements
@cindex Requirements of Automake

Automakeが本当に必要としていることは，@file{configure.in}でマクロ
@code{AM_INIT_AUTOMAKE}を呼び出すことです．このマクロは，適切なAutomake 
の処理に必要なことをいくつか行ないます．

@cvindex AM_INIT_AUTOMAKE

Automakeは必要とするが，@code{AM_INIT_AUTOMAKE}で実行されないマクロには，
以下のものがあります．
@cindex AC_OUTPUT, scanning

@table @code
@item AC_OUTPUT
Automakeはこれを使用して，作成するファイルを決定します(@pxref{Output, ,
Creating Output Files, autoconf, The Autoconf Manual})．@code{Makefile} 
という名前でリストアップされているファイルは， @file{Makefile}として扱わ
れます．他の名前でリストアップされているファイルは，扱い方が異なります．
現在唯一の違いは，@code{make distclean}で@file{Makefile}は削除されますが，
他のファイルは@code{make clean}で削除されるということです．
@c FIXME: this is in violation of standards!
@cvindex AC_OUTPUT
@end table

本来は必要事項ではありませんが，条件によっては以下のマクロが必要になるか
もしれません．

@table @code
@item AC_CHECK_TOOL([STRIP],[strip])
@cindex STRIP, how to setup
@cindex install-strip and STRIP
@cvindex AC_CHECK_TOOL([STRIP],[strip])
インストールされるバイナリは，@code{make install-strip}を実行する時，通
常@code{strip}を使用してstripされます．しかし，クロスコンパイル環境では
@code{strip}が正しいツールではない可能性があり，stripを実行するために使
用するプログラムを変更するため，Automakeは@code{STRIP}環境変数を優先する
ようになっています．Automakeは@code{STRIP}自身を変更しません．パッケージ
がクロスコンパイルに対してセットアップされない場合はきにする必要はありま
せん(@code{strip}でOKです)が，それ以外では，@file{configure.in}で
@code{AC_CHECK_TOOL([STRIP],[strip])}を呼び出すことによって，自動的に
@code{STRIP}を設定可能です．
@end table


@node Optional, Invoking aclocal, Requirements, configure
@section その他のAutomakeが理解すること

@cindex Macros Automake recognizes
@cindex Recognized macros by Automake

Automakeは特定のマクロの使用方法も認識し，生成する@file{Makefile.in}を適
切に調整します．現在認識されるマクロとそれらの効果は以下のようになってい
ます．

@table @code
@item AC_CONFIG_HEADER
Automakeは@code{AM_CONFIG_HEADER}の使用を必要とし，それは
@code{AC_CONFIG_HEADER}に似ています(@pxref{Configuration Headers, ,
Configuration Header Files, autoconf, The Autoconf Manual})が，Automake
独自の有用な作業も行ないます．
@cvindex AC_CONFIG_HEADER

@item AC_CONFIG_AUX_DIR
Automakeは，@file{mkinstalldirs}のような様々なヘルパースクリプトを，この
マクロの呼び出しで指定されたディレクトリで探します．見つからない場合は，
@samp{standard}な位置(トップソースディレクトリか，現在の
@file{Makefile.am}に対応するソースディレクトリの適切な方)で探します． 
@xref{Input, , Finding `configure' Input, autoconf, The Autoconf
Manual}.

@cvindex AC_CONFIG_AUX_DIR
@c FIXME: give complete list of things looked for in this directory

@item AC_PATH_XTRA
Automakeは，@code{AC_PATH_XTRA}で定義された変数に対して，それぞれの
@file{Makefile.in}にCプログラムやライブラリをビルドする定義を挿入します．
@xref{System Services, , System Services, autoconf, The Autoconf
Autoconf Manual}.
@cvindex AC_PATH_XTRA

@item AC_CANONICAL_HOST
@itemx AC_CHECK_TOOL
Automakeは，@file{config.guess}と@file{config.sub}が存在することを保証し
ます．また，@file{Makefile}変数の@samp{host_alias}と@samp{host_triplet} 
も導入します．@ref{Canonicalizing, , Getting the Canonical System Type,
autoconf, The Autoconf Manual},と@ref{Generic Programs, , Generic
Program Checks, autoconf, The Autoconf Manual},を参照してください．
@c fixme xref autoconf docs.
@cvindex AC_CANONICAL_HOST
@cvindex AC_CHECK_TOOL
@vindex host_alias
@vindex host_triplet

@item AC_CANONICAL_SYSTEM
これは@code{AC_CANONICAL_HOST}に似ていますが，@file{Makefile}変数の
@samp{build_alias}と@samp{target_alias}も定義します．
@xref{Canonicalizing, , Getting the Canonical System Type, autoconf, The
Autoconf Manual}.
@cvindex AC_CANONICAL_SYSTEM
@vindex build_alias
@vindex target_alias

@item AC_FUNC_ALLOCA
@itemx AC_FUNC_GETLOADAVG
@itemx AC_FUNC_MEMCMP
@itemx AC_STRUCT_ST_BLOCKS
@itemx AC_FUNC_FNMATCH
@itemx AC_FUNC_MKTIME
@itemx AM_FUNC_STRTOD
@itemx AC_REPLACE_FUNCS
@itemx AC_REPLACE_GNU_GETOPT
@itemx AM_WITH_REGEX
Automakeは，これらのマクロに対応するオブジェクトに対して，適切な依存性を
確実に生成します．また，Automakeは適切なソースファイルが配布物の一部に存
在することも確かめます．Automakeは，これらのマクロを使用するために必要な
Cソースを持って来ていないので，@code{automake -a}ではソースがインストー
ルされません．詳細は@xref{A Library}.また，@ref{Particular Functions, ,
Particular Function Checks, autoconf, The Autoconf Manual},も参照してく
ださい．
@cvindex AC_FUNC_ALLOCA
@cvindex AC_FUNC_GETLOADAVG
@cvindex AC_FUNC_MEMCMP
@cvindex AC_STRUCT_ST_BLOCKS
@cvindex AC_FUNC_FNMATCH
@cvindex AC_FUNC_FNMATCH
@cvindex AC_REPLACE_FUNCS
@cvindex AC_REPLACE_GNU_GETOPT
@cvindex AM_FUNC_STRTOD
@cvindex AM_WITH_REGEX
@cvindex AC_FUNC_MKTIME

@item LIBOBJS
Automakeは，@code{LIBOBJS}内に@file{.o}ファイルを書き出す宣言を検出し，
@code{AC_REPLACE_FUNCS}でそれが見つかった場合，これらの追加のファイルを
処理します．@xref{Generic Functions, , Generic Function Checks,
autoconf, The Autoconf Manual}.
@cvindex LIBOBJS

@item AC_PROG_RANLIB
これは，ライブラリをビルドするパッケージの場合に必要です．
@xref{Particular Programs, , Particular Program Checks, autoconf, The
Autoconf Manual}.
@cvindex AC_PROG_RANLIB

@item AC_PROG_CXX
これは，C++ソースが含まれる場合に必要です．@xref{Particular Programs, ,
Particular Program Checks, autoconf, The Autoconf Manual}.
@cvindex AC_PROG_CXX

@item AC_PROG_F77
これは，Fortran77ソースが含まれる場合に必要です．このマクロはAutoconfの
バージョン2.13以降で配布されます．@xref{Particular Programs, ,
Particular Program Checks, autoconf, The Autoconf Manual}.
@cvindex AC_PROG_F77

@item AC_F77_LIBRARY_LDFLAGS
これはFortran77を含む言語が混在しているプログラムと共有ライブラリに対し
て必要になります(@pxref{Mixing Fortran 77 With C and C++})．
@xref{Macros, , Autoconf macros supplied with Automake}.
@cvindex AC_F77_LIBRARY_LDFLAGS

@item AC_PROG_LIBTOOL
Automakeは@code{libtool}のための処理を開始します(@pxref{Top, ,
Introduction, libtool, The Libtool Manual})．
@cvindex AC_PROG_LIBTOOL

@item AC_PROG_YACC
Yaccソースファイルがある場合，このマクロを使用するか，
@file{configure.in}で変数@samp{YACC}を定義する必要があります．前者が好ま
れます(@pxref{Particular Programs, , Particular Program Checks,
autoconf, The Autoconf Manual})．
@cvindex AC_PROG_YACC
@cvindex YACC

@item AC_DECL_YYTEXT
このマクロは，パッケージにLexソースがある場合に必要です．
@xref{Particular Programs, , Particular Program Checks, autoconf, The
Autoconf Manual}.
@cvindex AC_DECL_YYTEXT

@item AC_PROG_LEX
Lexソースファイルがある場合，このマクロを使用する必要があります．
@xref{Particular Programs, , Particular Program Checks, autoconf, The
Autoconf Manual}.
@cvindex AC_PROG_LEX

@item AM_C_PROTOTYPES
これは，de-ANSI-ficationを自動的に使う時に必要です．@ref{ANSI}．
@cvindex AM_C_PROTOTYPES

@item AM_GNU_GETTEXT
このマクロはGNU gettextを使うパッケージに必要です(@pxref{gettext})．これ
はgettextとともに配布されます．Automakeがこのマクロを見つけた場合，この
マクロはパッケージがgettextの必要条件のいくつかを満たすことを保証します．
@cvindex AM_GNU_GETTEXT

@item AM_MAINTAINER_MODE
@opindex --enable-maintainer-mode
このマクロは@code{configure}に@samp{--enable-maintainer-mode}オプション
を加えます．これが使用される場合，@code{automake}は生成される
@file{Makefile.in}内で，@samp{maintainer-only}規則をデフォルトで停止しま
す．このマクロは@samp{Gnits}モードで許可されません(@pxref{Gnits})．この
マクロは@samp{MAINTAINER_MODE}条件を定義し，自分の@file{Makefile.am}で使
用することが可能です．
@cvindex AM_MAINTAINER_MODE

@item AC_SUBST
@itemx AC_CHECK_TOOL
@itemx AC_CHECK_PROG
@itemx AC_CHECK_PROGS
@itemx AC_PATH_PROG
@itemx AC_PATH_PROGS
これらのそれぞれのマクロに対して，最初の引数が生成されるそれぞれの
@file{Makefile.in}の変数として自動的に定義されます．@xref{Setting Output
Variables, , Setting Output Variables, autoconf, The Autoconf Manual}, 
と@ref{Generic Programs, , Generic Program Checks, autoconf, The
Autoconf Manual}.
@cvindex AC_SUBST
@cvindex AC_CHECK_TOOL
@cvindex AC_CHECK_PROG
@cvindex AC_CHECK_PROGS
@cvindex AC_PATH_PROG
@cvindex AC_PATH_PROGS

@end table


@node Invoking aclocal, Macros, Optional, configure
@section aclocal.m4の自動生成

@cindex Invoking aclocal
@cindex aclocal, Invoking

Automakeには，パッケージで使用可能な多くのAutoconfマクロがあります．実際
に状況によってはAutomakeが必要とするものもあります．これらのマクロは
@file{aclocal.m4} で定義する必要があります．さもなければ，それらは
@code{autoconf}で見つからないでしょう．

@code{aclocal}プログラムは，@file{configure.in}の内容に基づいて自動的に
@file{aclocal.m4}ファイルを生成します．これは，Automakeが提供するマクロ
を入手する便利な方法を提供し，探し回る必要がないようになっています．また，
@code{aclocal}のメカニズムは他のパッケージで使用するための拡張が可能です．

はじめに，@code{aclocal}はマクロ定義を探しながら，見つかったすべての
@file{.m4}ファイルをスキャンします．それから@file{configure.in}をスキャ
ンします．最初のステップで見つかったマクロの記述によって，マクロと，マク
ロが要求するファイルを@file{aclocal.m4}に入れます．

@file{acinclude.m4}の内容も，存在する場合は自動的に@file{aclocal.m4}に含
まれます．これは@file{configure}にローカルなマクロを取り入れるときに役立
ちます．

@code{aclocal}は，スキャンしているファイルの新しい@code{AC_DEFUN}を探す
とき，小さくなるようにします．重複して見つかった場合は警告を出します．ま
た，スキャンしているファイルのすべての文章を@file{aclocal.m4}に含めよう
とし，それは@samp{#}と@samp{dnl}のコメントも含めます．@code{aclocal}がコ
メントを完全に無視するようにしたい場合は，コメントの最初に@samp{##}を使
用して下さい．

@code{aclocal}は，以下のオプションを受け入れます．

@table @code
@item --acdir=@var{dir}
@opindex --acdir
インストールされたディレクトリの代わりに，@var{dir}でマクロファイルを探
します．これは，通常デバッグで使用します．

@item --help
@opindex --help
コマンドラインオプションの概要を出力し，終了します．

@item -I @var{dir}
@opindex -I
@file{.m4}ファイルを探すディレクトリに@var{dir}ディレクトリを追加します．

@item --output=@var{file}
@opindex --output
@file{aclocal.m4}の代わりに，@var{file}に出力を書き込みます．

@item --print-ac-dir
@opindex --print-ac-dir
@file{.m4}ファイルを見つけるために@code{aclocal}が検索するディレクトリの
名前を出力します．このオプションが与えられている時，標準的な処理は行われ
ません．このオプションは，パッケージがマクロファイルをインストールする場
所を決定するために，使用することが可能です．

@item --verbose
@opindex --verbose
調査しているファイルの名前を出力します．

@item --version
@opindex --version
Automakeのバージョンナンバーを出力し，終了します．
@end table


@node Macros, Extending aclocal, Invoking aclocal, configure
@section Automakeが提供するAutoconfマクロ

@c consider generating this node automatically from m4 files.

@table @code
@item AM_CONFIG_HEADER
Automakeは，コンフィグヘッダを自動的に再生成する規則を生成します．このマ
クロを使用する場合，ソースディレクトリで@file{stamp-h.in}ファイルを作る
必要があります．それは空のはずです．
@cvindex AM_CONFIG_HEADER

@item AM_ENABLE_MULTILIB
これは，``multilib''ライブラリをビルドする時に使用します．最初のオプショ
ン引数は，生成されている@file{Makefile}の名前です．デフォルトは
@samp{Makefile}です．二番目のオプション引数は，ソースディレクトリのトッ
プを見つけるために使用します．デフォルトは空の文字列です(通常，内部を理
解していない場合，これは使用しないほうが良いでしょう．)
@xref{Multilibs}.

@item _AM_DEPENDENCIES
@itemx AM_SET_DEPDIR
@itemx AM_DEP_TRACK
@itemx AM_OUTPUT_DEPENDENCY_COMMANDS
これらのマクロは，automakeが自動的に依存性を追跡する手法を実装するために
使用されます．それらは必要な時に自動的に呼び出され，手動で呼び出す必要は
ないでしょう．

@item AM_FUNC_STRTOD
@code{strtod}関数が利用不可能，または(SunOS 5.4のように)正確に働かない場
合，@file{strtod.o}を出力変数@file{LIBOBJS}に加えます．
@cvindex AM_FUNC_STRTOD

@item AM_FUNC_ERROR_AT_LINE
@code{error_at_line}関数が見つからない場合，@code{LIBOBJS}に
@file{error.o}を加えます．
@cvindex AM_FUNC_ERROR_AT_LINE

@item AM_FUNC_OBSTACK
GNU obstacksコードを調べます．見つからない場合，@samp{LIBOBJS}に
@file{obstack.o}を加えます．
@cvindex AM_FUNC_OBSTACK

@item AM_C_PROTOTYPES
関数プロトタイプをコンパイラが理解するかどうかを調べます．その場合，
@samp{PROTOTYPES}を定義して，出力変数@samp{U}と@samp{ANSI2KNR}を空の文字
列に設定します．それ以外の場合，@samp{U}を@samp{_}に，@samp{ANSI2KNR}を
@samp{./ansi2knr}にします．Automakeはこれらの値を自動的な
de-ANSI-ficationを実装するために使用します．
@cvindex AM_C_PROTOTYPES

@item AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL
@code{TIOCGWINSZ}を使用するときに@file{<sys/ioctl.h>}が必要な場合，
@code{GWINSZ_IN_SYS_IOCTL}を定義します．それ以外の場合，
@code{TIOCGWINSZ}は@file{<termios.h>}で見つかります．
@cvindex AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL

@item AM_INIT_AUTOMAKE
ほとんどの@file{configure.in}が必要とする，多くのマクロを実行します．こ
のマクロは２つの引数が必要で，それはパッケージとバージョンナンバーです．
デフォルトでこのマクロは，@samp{PACKAGE}と@samp{VERSION}を
@code{AC_DEFINE}します．これは空でない３番目の引数を渡すことで避けること
が可能です．

@item AM_MAKE_INCLUDE
このマクロは，ユーザの@code{make}が@code{include}ステートメントを扱う方
法を調べるために使用します．このマクロは，必要な時に自動的に呼び出されま
す．手動で呼び出す必要はありません．

@item AM_PATH_LISPDIR
@code{emacs}プログラムを検索し，見つかった場合は，Emacsのsite-lispディレ
クトリへのフルパスを出力変数@code{lispdir}に設定します．
@cvindex AM_PATH_LISPDIR

@item AM_PROG_AS
プロジェクトにアセンブラコードがある時，このマクロを使用して下さい．これ
はアセンブラを選択し(デフォルトはCコンパイラ)，必要な場合は
@code{ASFLAGS}を設定します．

@item AM_PROG_CC_C_O
これは@code{AC_PROG_CC_C_O}に似ていますが，それはautomakeが必要とする方
法で結果を生成します．この特徴が必要な時は，@code{AC_PROG_CC_C_O}の代わ
りにこれを使用して下さい．

@item AM_PROG_CC_STDC
CコンパイラがデフォルトでANSI Cモードでない場合，それをANSI Cモードにす
るため，出力変数@code{CC}にオプションを加えようとします．このマクロはシ
ステム毎にANSI Cを選択するいろいろなオプションを試みます．関数プロトタイ
プを正しく処理する場合，コンパイラがANSI Cモードであると考えます．

このマクロを使用する場合，それを呼び出した後で，CコンパイラがANSI Cに適
合するセットがあるかどうかを調査する必要があります．そうでない場合，シェ
ル変数の@code{am_cv_prog_cc_stdc}は@samp{no}に設定されます．ANSI Cでソー
スコードを書いた場合は，@code{ansi2knr}オプションを使用して，非ANSIfied 
のコピーを作成することが可能です(@pxref{ANSI})．

@item AM_PROG_LEX
@cindex HP-UX 10, lex problems
@cindex lex problems with HP-UX 10
@code{AC_DECL_YYTEXT}とともに使用する@code{AC_PROG_LEX}に似ていますが
(@pxref{Particular Programs, , Particular Program Checks, autoconf, The
Autoconf Manual})，@code{lex}が無いシステムで@code{missing}スクリプトを
使用します．@samp{HP-UX 10}はそのようなシステムの一つです．

Autoconf 2.50とそれ以降のものは，インターフェースを簡単にするために，
@code{AC_PROG_LEX}の中に@code{AC_DECL_YYTEXT}の本体を含めています．下位
互換性を確実にするため，そうしておきながら@code{AC_DECL_YYTEXT}は
@code{AC_PROG_LEX}で呼び出されるよう定義されています．@code{AM_PROG_LEX} 
は両方呼び出すので，イライラするかもしれませんが親切な警告
(@code{AC_PROG_LEX} invoked multiple times)が生じます．それは無視して下
さい．将来，AutomakeがAutoconf 2.50を必要とし，この警告は修正されますが，
現在はAutoconf 2.13の互換性のため，こうすることは避けています．

@item AM_PROG_GCJ
このマクロは，@code{gcj}プログラムを見つけるか，そうでなければエラーを発
生します．それは，@samp{GCJ}と@samp{GCJFLAGS}を設定します．@code{gcj}は，
GNU Compiler CollectionのJavaフロントエンドです．
@cvindex AM_PROG_GCJ

@item AM_PROG_INSTALL_STRIP
これは，インストール時に@code{strip}プログラムが使用可能な@code{install} 
のバージョンを見つけるために使用します．このマクロは，必要な時に自動的に
含められます．

@item AM_SANITY_CHECK
これはビルドディレクトリで作成されたファイルが，ソースディレクトリのファ
イルより新しいことを確実にするための調査を行ないます．これは，時計が正し
く設定されていないシステムでは失敗するはずです．このマクロは
@code{AM_INIT_AUTOMAKE}から自動的に実行されます．

@item AM_SYS_POSIX_TERMIOS
@cvindex am_cv_sys_posix_termios
@cindex POSIX termios headers
@cindex termios POSIX headers
POSIX termiosヘッダーと関数がシステムで利用可能かどうか調べます．その場
合，シェル変数@code{am_cv_sys_posix_termios}を@samp{yes}に設定します．そ
うでない場合，変数を@samp{no}に設定します．

@item AM_TYPE_PTRDIFF_T
@cvindex HAVE_PTRDIFF_T
@vindex ptrdiff_t
@samp{ptrdiff_t}タイプが@file{<stddef.h>}で定義されている場合，
@samp{HAVE_PTRDIFF_T}を定義します．

@item AM_WITH_DMALLOC
@cvindex WITH_DMALLOC
@cindex dmalloc, support for
@opindex --with-dmalloc
@uref{ftp://ftp.letters.com/src/dmalloc/dmalloc.tar.gz, dmalloc}パッケー
ジに対するサポートを追加します．ユーザーが@samp{--with-demalloc}を用いて
コンフィグレーションする場合，@code{WITH_DMALLOC}を定義し，@code{LIBS}に
@samp{-ldmalloc}を加えます．

@item AM_WITH_REGEX
@cvindex WITH_REGEX
@opindex --with-regex
@cindex regex package
@cindex rx package
@code{configure}コマンドラインに@samp{--with-regex}を加えます．指定され
る(デフォルトの)場合，@samp{regex}の正規表現ライブラリが使用され，
@file{regex.o}が@samp{LIBOBJS}に書き込まれ，そして，@samp{WITH_REGEX}が
定義されます．@samp{--without-regex}が与えられる場合，@samp{rx}正規表現
ライブラリが使用され，@file{rx.o}が@samp{LIBOBJS}に書き込まれます．
@end table


@node Extending aclocal,  , Macros, configure
@section 独自のaclocalマクロを書く

@cindex aclocal, extending
@cindex Extending aclocal

@code{aclocal}プログラムは，マクロを組み込む知識が全く無いので，独自のマ
クロでそれを拡張することは容易です．

これは，他のプログラムで使用するために，独自のAutoconfマクロを供給するラ
イブラリで主に使用されます．例えば@code{gettext}ライブラリは，
@code{gettext}を使用するあらゆるパッケージで使用されるべき，
@code{AM_GNU_GETTEXT}マクロを供給しています．ライブラリがインストールさ
れる時，@code{aclocal}が見つけるように，このマクロをインストールします．

マクロのファイルは一連の@code{AC_DEFUN}で行います．@code{aclocal}プログ
ラムは，@code{AC_REQUIRE}も理解するので，別々のファイルにそれぞれのマク
ロを書き込むと安全です．@xref{Prerequisite Macros, , , autoconf, The
Autoconf Manual},と@ref{Macro Definitions, , , autoconf, The Autoconf
Manual}.

マクロファイルの名前は@file{.m4}で終わらせます．このようなファイルは
@file{$(datadir)/aclocal}にインストールされます．


@node Top level, Alternative, configure, Top
@chapter トップレベルの@file{Makefile.am}

@cindex SUBDIRS, explained

サブディレクトリがあるパッケージでは，トップレベルの@file{Makefile.am}で
Automakeにビルドするサブディレクトリの伝える必要があります．これは
@code{SUBDIRS}変数によってなされます．
@vindex SUBDIRS

@code{SUBDIRS}マクロは，さまざまな種類のビルドが行われる，サブディレクト
リのリストを保持しています．生成されている@file{Makefile}内の多くのター
ゲット(例えば@code{all})は，ローカルとすべての指定されたサブディレクトリ
の両方で実行されます．@code{SUBDIRS}でリストアップされているディレクトリ
には，@file{Makefile.am}を含んでいる必要はありません．(コンフィギュレー
ションの後の)@file{Makefile}だけが必要です．こうすることで，
(@code{gettext}のような)Automakeを使用しないパッケージからライブラリを含
めることが可能になります．@code{SUBDIRS}に書かれたディレクトリは，現在の
ディレクトリの直下にする必要があります．例えば，@code{SUBDIRS}に
@samp{src/subdir}を書き込むことはできません．

サブディレクトリを使用しているパッケージでは，トップレベルの
@file{Makefile.am}は非常に短いことが多くなっています．例えば，GNU Hello 
配布物の@file{Makefile.am}は以下のようになっています．

@example
EXTRA_DIST = BUGS ChangeLog.O README-alpha
SUBDIRS = doc intl po src tests
@end example

@cindex SUBDIRS, overriding
@cindex Overriding SUBDIRS

GNU @code{Inetutils}の場合のように，パッケージ全体のサブセットをビルドし
たいだけの場合，@code{SUBDIRS}変数を無効にすることは可能です．
@file{Makefile.am}に含めるものは，以下のようになります．

@example
SUBDIRS = @@MY_SUBDIRS@@
@end example

@file{configure.in}で，以下ように指定します．

@example
MY_SUBDIRS="src doc lib po"
AC_SUBST(MY_SUBDIRS)
@end example

(我々が，@file{configure.in}で変数名@code{SUBDIRS}を使用していないことに
注意して下さい．そうした場合，Automakeはすべての@file{Makefile.in}がリス
トアップされているサブディレクトリに再帰的なっていると信じてしまいます．)

この結果，サブディレクトリまでパッケージをビルドするようにAutomakeをだま
しますが，実際には，@code{configure}が実行されるまで，そのリストは結び付
けられません．

@code{SUBDIRS}マクロは，コンフィグレーション時の置換式(例えば
@samp{@@DIRS@@})を含めることが可能です．Automake自身は，実際にこの変数の
中身を調べません．

@code{SUBDIRS}が定義されている場合，@file{configure.in}に
@code{AC_PROG_MAKE_SET}を含める必要があります．Automakeがサブディレクト
リで@code{make}を呼び出す時，@code{MAKE}変数の値を使用します．それは，変
数@code{AM_MAKEFLAGS}の値を@code{make}の呼び出しに渡します．これで，常に
@code{make}に渡す必要があるフラグがある場合，@file{Makefile.am}で設定す
ることが可能になります．
@vindex MAKE
@vindex MAKEFLAGS

@code{SUBDIRS}の使用は，トップレベルの@file{Makefile.am}だけに制限されて
いません．Automakeは任意の深さのパッケージを構築するために使用することが
可能です．

デフォルトで，Automakeはdepth-first(@samp{postfix})で動作する
@file{Makefile}を生成します．しかし，この順番を変えることは可能です．
@code{SUBDIRS}に@samp{.}を置くことでこうすることができます．例えば，
@samp{.}を最初に書き込むことで，@samp{prefix}をディレクトリの順序にしま
す．

@code{make dist}を実行する時のように，可能な限りすべてのサブディレクトリ
を調査したい時もあります．この場合，戻る場所を決定するため，Automakeは
@code{SUBDIRS}の代わりに@code{DIST_SUBDIRS}を使用します．この変数は，ユー
ザが@code{distclean}や@code{maintainer-clean}を実行する時にも使用されま
す．プロジェクトのサブディレクトリの完全なリストを設定したほうが良いでしょ
う．Automakeは設定するように伝えるでしょう．


@node Alternative, Rebuilding, Top level, Top
@chapter サブディレクトリに代わるアプローチ

Peter Millerの優れた論文をすでに読んでいる場合
@uref{http://www.pcug.org.au/~millerp/rmch/recu-make-cons-harm.html,
Recursive Make Considered Harmful}，サブディレクトリを使用するセクション
の前のものは，おそらくありがたくない助言になるでしょう．論文を読んでいな
い人のために，Millerのメインテーマは，再帰的な@code{make}の呼び出しは，
遅くてエラーを発生しやすいということです．

Automakeは，複雑な多数のディレクトリがあるパッケージに対して，単一の
@file{Makefile.am}だけを書くことを可能にする，ディレクトリを跨るための優
れたサポート@footnote{我々は信じています．この動作は新しく，問題がある可
能性があります．バグレポートの情報は，@xref{Introduction}.}を提供してい
ます．

デフォルトで，サブディレクトリで指定されているインストール可能なファイル
は，インストールする前にそのディレクトリ名が切り取られています．例えば，
以下の例では，ヘッダファイルが@file{$(includedir)/stdio.h}にインストール
されるでしょう．

@example
include_HEADERS = inc/stdio.h
@end example

@cindex nobase_
@cindex Path stripping, avoiding
@cindex Avoiding path stripping

しかし，@samp{nobase_}を前置することで，このパスを切り取りを回避すること
が可能になります．以下の例では，ヘッダファイルが
@file{$(includedir)/sys/types.h}にインストールされるでしょう．

@example
nobase_include_HEADERS = sys/types.h
@end example


@node Rebuilding, Programs, Alternative, Top
@chapter Makefileのビルド

Automakeは，@file{Makefile}，@file{configure}，そして@file{Makefile.in} 
のような派生物のファイルを，自動的にリビルドする規則を生成します．

@file{configure.in}で@code{AM_MAINTAINER_MODE}を使用している場合，これら
の自動的なリビルドの規則は，管理者モードでのみ利用可能になります．

@file{.m4}ファイルを探す場所を伝えるために，@code{-I}のような引数を用い
て@code{aclocal}実行する必要があることもあります．@code{make}で自動的に
@code{aclocal}を実行する時もあるので，これらの引数を指定する方法が必要に
なります．@code{ACLOCAL_AMFLAGS}を定義することで，こうすることが可能にな
ります．これは，@code{aclocal}に渡す引数を，そのまま保持しています．この
マクロは，トップレベルの@file{Makefile.am}でのみ役に立ちます．
@cindex ACLOCAL_AMFLAGS


@node Programs, Other objects, Rebuilding, Top
@chapter プログラムとライブラリのビルド

Automakeの機能の大半は，プログラムとライブラリのビルドを容易にすることに
費やされています．

@menu
* A Program::                   Building a program
* A Library::                   Building a library
* A Shared Library::            Building a Libtool library
* Program and Library Variables::
				Variables controlling program and
                                library builds
* LIBOBJS::                     Special handling for LIBOBJS and ALLOCA
* Program variables::           Variables used when building a program
* Yacc and Lex::                Yacc and Lex support
* C++ Support::
* Assembly Support::
* Fortran 77 Support::
* Java Support::
* Support for Other Languages::
* ANSI::                        Automatic de-ANSI-fication
* Dependencies::                Automatic dependency tracking
* EXEEXT::			Support for executable extensions
@end menu


@node A Program, A Library, Programs, Programs
@section プログラムのビルド

@subsection 無駄話ではじめます

@cindex PROGRAMS, bindir
@vindex bin_PROGRAMS
@vindex sbin_PROGRAMS
@vindex libexec_PROGRAMS
@vindex pkglib_PROGRAMS
@vindex noinst_PROGRAMS

(ライブラリと比較した場合)プログラムにビルドされるソースを含むディレクト
リには，@samp{PROGRAMS}プライマリを使用します．プログラムは，
@code{bindir}，@code{sbindir}，@code{libexecdir}，@code{pkglibdir}にイン
ストールされる，または全くインストールされません(@code{noinst})．
@code{make check}に対してのみビルドさせることも可能で，その場合の接頭辞
は@samp{check}になります．

例えば以下のようにします．

@example
bin_PROGRAMS = hello
@end example

このように単純な場合は，結果として生成される@file{Makefile.in}には，
@code{hello}という名前のプログラムを生成するコードが含まれます．

それぞれのプログラムに関連して，プログラムの後に命名される補助変数もあり
ます．これらの変数はすべてオプションで，妥当なデフォルト値を持ちます．そ
れぞれの変数，その使用，そしてデフォルトは，以下で書き出します．我々は，
``hello''の例を終始使用します．

変数@code{hello_SOURCES}は，実行形式にビルドされるソースファイルを指定す
るために使用されます．

@example
hello_SOURCES = hello.c version.c getopt.c getopt1.c getopt.h system.h
@end example

これにより，上記のそれぞれの@samp{.c}ファイルを，対応する@samp{.o}にコン
パイルします．そしてすべては@file{hello}を生成するためにリンクされます．

@cindex _SOURCES primary, defined
@cindex SOURCES primary, defined
@cindex Primary variable, SOURCES

@samp{hello_SOURCES}が指定されていない場合，そのデフォルトは一つのファイ
ル@file{hello.c}になります．すなわちデフォルトは，ベースとなる名前がプロ
グラム自身の名前をになっている，単一のCファイルをコンパイルすることです．
(これは危険なデフォルトですが，我々は歴史的な理由で行き詰まっています．)
@vindex _SOURCES
@vindex SOURCES

複数のプログラムをひとつのディレクトリでビルドすることが可能です．複数の
プログラムは，単一のソースファイルを共有することが可能で，それらはそれぞ
れの@samp{_SOURCES}定義でリストアップする必要があります．

@cindex Header files in _SOURCES
@cindex _SOURCES and header files

@samp{_SOURCES}定義にリストアップされているヘッダーファイルは配布物に含
まれますが，それ以外のものは無視されます．明らかではない場合は，
@file{configure}で生成されるヘッダファイルを@samp{_SOURCES}変数に含める
べきではありません．このファイルは配布すべきではありません．
Lex(@samp{.l})とYacc(@samp{.y})のファイルもリストアップすることが可能で
す．@ref{Yacc and Lex},を参照して下さい．


@subsection 条件コンパイル

コンフィグレーション時の置換式(例えば，@samp{@@FOO@@})を@samp{_SOURCES} 
変数に書き込むことはできません．この理由を説明するのは少し難しいのですが，
単純に動作しないということで十分でしょう．Automakeは，これを試みた場合は
エラーを発します．

@cindex EXTRA_prog_SOURCES, defined

Automakeは，すべてのファイルがあらゆる状況でビルドされない場合でも，プロ
グラムに組み込まれる可能性があるソースファイルをすべて知っている必要があ
ります．条件によってのみビルドされるファイルは，適切な@samp{EXTRA_}変数
でリストアップすべきです．例えば，条件によっては@file{hello-linux.c}を
@code{hello}に組み込む場合，@file{Makefile.am}に含めます．

@example
EXTRA_hello_SOURCES = hello-linux.c
@end example

この場合は，@file{configure}置換式によって，ビルドしリンクするために，
@file{hello-linux.o}が@code{hello_LDADD}に追加されます．

条件によってソースファイルをコンパイルする，より簡単な方法としては，
Automakeの条件式を使用することが多くなっています．例えば，プログラム
@file{hello}のベースとして，@file{hello-linux.c}または
@file{hello-generic.c}を使用する条件に，以下のような定数を使用することが
可能です．

@example
if LINUX
hello_SOURCES = hello-linux.c
else
hello_SOURCES = hello-generic.c
endif
@end example

Automakeは，ソースファイルの完全なリストを構成するために，それぞれの変数
の内容を調査するので，このような条件を使用する時は，@samp{EXTRA_}変数を
使用する必要はありません．

ビルドされるプログラムをconfigure時に決定することが役に立つ時もあります．
例えば，GNU @code{cpio}は特別な状況のときだけ@code{mt}と@code{rmt}をビル
ドします．

@cindex EXTRA_PROGRAMS, defined

この場合は，ビルドされる可能性のあるすべてのプログラムを，Automakeに知ら
せる必要がありますが，同時に，@code{configure}で指定されるプログラムを使
用するように@file{Makefile.in}を生成させる必要もあります．このことは，そ
れぞれの@samp{_PROGRAMS}定義が@code{configure}での置換式の値を持つことで
行なわれ，それらは@code{EXTRA_PROGRAMS}でオプションとしてビルドされるプ
ログラムはすべてリストアップされています．
@vindex EXTRA_PROGRAMS

もちろん，ビルドするプログラムを定義するために，Automakeの条件式を使用す
ることも可能です．


@subsection プログラムのリンク

@code{configure}で見つからないライブラリをリンクする必要がある場合，そう
するために@code{LDADD}を使用することが可能です．この変数は，リンカのコマ
ンドラインにいろいろなオプションを加えるとき，実際に使用することが可能で
す．
@vindex LDADD

@cindex prog_LDADD, defined

複数のプログラムが１つのディレクトリで構築されて，リンク時に同じ条件を共
有しないときもあります．この場合，グローバルな@code{LDADD}に優先させるた
め，@samp{@var{prog}_LDADD}変数(@var{prog}はプログラムの名前で，それは
@samp{_PROGRAMS}変数にあって，通常は小文字で書かれています)を使用するこ
とが可能です．この変数が所定のプログラムのために存在する場合，そのプログ
ラムは@code{LDADD}を使用してリンクされません．
@vindex _LDADD

例えば，GNU cpioでは，@code{pax}，@code{cpio}と@code{mt}は，
@file{libcpio.a}ライブラリにリンクされます．しかし，@code{rmt}は同じディ
レクトリで作成されますが，このようなリンク条件はありません．同様に，
@code{mt}と@code{rmt}は特定のアーキテクチャでのみビルドされます．以下は，
cpioの@file{src/Makefile.am}に似たものです(省略されています)．

@example
bin_PROGRAMS = cpio pax @@MT@@
libexec_PROGRAMS = @@RMT@@
EXTRA_PROGRAMS = mt rmt

LDADD = ../lib/libcpio.a @@INTLLIBS@@
rmt_LDADD =

cpio_SOURCES = @dots{}
pax_SOURCES = @dots{}
mt_SOURCES = @dots{}
rmt_SOURCES = @dots{}
@end example

@cindex _LDFLAGS, defined

@samp{@var{prog}_LDADD}でプログラム独自のリンカフラグ(@samp{-l}と
@samp{-L}を除く)を渡すことは不適当です．そのため，この目的に対しては
@samp{@var{prog}_LDFLAGS}変数を使ってください．
@vindex _LDFLAGS

@cindex _DEPENDENCIES, defined

実際にはプログラムの一部でない他のターゲットに依存するプログラムを持つこ
とが役に立つこともあります．これは@samp{@var{prog}_DEPENDENCIES}変数を使
用することで可能になります．それぞれのプログラムはこの変数の内容に依存し
ますが，それ以上解釈されません．

@samp{@var{prog}_DEPENDENCIES}が提供されていない場合，Automakeが考慮しま
す．自動的に割り当てられる値は，@samp{@var{prog}_LDADD}の内容で，
@code{configure}の置換式，@samp{-l}，@samp{-L}，@samp{-dlopen}，そして
@samp{-dlpreopen}オプションはほとんどが削除されます．残っている
@code{configure}の置換式は，@samp{@@LIBOBJS@@}と@samp{@@ALLOCA@@}だけで
す．これらは，生成される@samp{@var{prog}_DEPENDENCIES}に無効な値を与えな
いことが知られているので残されます．


@node A Library, A Shared Library, A Program, Programs
@section ライブラリのビルド

@cindex _LIBRARIES primary, defined
@cindex LIBRARIES primary, defined
@cindex Primary variable, LIBRARIES

@vindex lib_LIBRARIES
@vindex pkglib_LIBRARIES
@vindex noinst_LIBRARIES

ライブラリをビルドすることは，プログラムをビルドすることによく似ています．
この場合，プライマリの名前は@samp{LIBRARIES}です．ライブラリは
@code{libdir}や@code{pkglibdir}にインストールされます．

Libtoolと@samp{LTLIBRARIES}プライマリを使用して共有ライブラリをビルドす
る方法についての詳細は，@xref{A Shared Library}.

それぞれの@samp{_LIBRARIES}変数は，ビルドされるライブラリのリストです．
例えば，@file{libcpio.a}という名前のライブラリを作成し，それをインストー
ルしないため，以下のように書きます．

@example
noinst_LIBRARIES = libcpio.a
@end example

ライブラリに組み込まれるソースは，プログラムの時と同様に，
@samp{_SOURCES}変数によって，正しく定義されます．ライブラリ名は標準的な
ので(@pxref{Canonicalization})，@samp{liblob.a}に対応する@samp{_SOURCES} 
変数は@samp{liblob.a_SOURCES}ではなく@samp{liblob_a_SOURCES}になることに
注意してください．

@cindex _LIBADD primary, defined
@cindex LIBADD primary, defined
@cindex Primary variable, LIBADD

追加のオブジェクトは，@samp{@var{library}_LIBADD}変数を使ってライブラリ
に加えることができます．これは@code{configure}で定義されるオブジェクトの
ために使われます．再び@code{cpio}からの引用です．
@vindex _LIBADD
@vindex LIBADD

@example
libcpio_a_LIBADD = @@LIBOBJS@@ @@ALLOCA@@
@end example

さらに，configure時まで存在しない追加のオブジェクトに対するソースは，
@code{BUILT_SOURCES}変数に追加する必要があります(@pxref{Sources})．


@node A Shared Library, Program and Library Variables, A Library, Programs
@section 共有ライブラリのビルド

@cindex Shared libraries, support for

共有ライブラリをビルドすることは比較的複雑な問題です．このために，GNU
Libtoolは(@pxref{Top, , Introduction, libtool, The Libtool Manual})プラッ
トホームに依存しない方法で，共有ライブラリをビルドする補助を行なうために
作成されました．

@cindex _LTLIBRARIES primary, defined
@cindex LTLIBRARIES primary, defined
@cindex Primary variable, LTLIBRARIES
@cindex Example of shared libraries

@cindex suffix .la, defined

Automakeは，@samp{LTLIBRARIES}プライマリで宣言されたライブラリをビルドす
るためにLibtoolを使用します．それぞれの@samp{_LTLIBRARIES}変数はビルドす
る共有ライブラリのリストです．例えば，@file{libgettext.a}という名前のラ
イブラリと，それに対応する共有ライブラリを作成し，@samp{libdir}にインス
トールするために，以下のように書いてください．

@example
lib_LTLIBRARIES = libgettext.la
@end example

@vindex lib_LTLIBRARIES
@vindex pkglib_LTLIBRARIES
@vindex noinst_LTLIBRARIES
@vindex check_LTLIBRARIES

@cindex check_LTLIBRARIES, not allowed

共有ライブラリをインストールする@emph{必要がある}ので，
@code{check_LTLIBRARIES}が使用できないことに注意してください．しかし，
@code{noinst_LTLIBRARIES}は使用可能です．この特徴はlibtoolの
``convinience library''で使用されます．

@cindex suffix .lo, defined

それぞれのライブラリに対して，@samp{@var{library}_LIBADD}変数は，共有ラ
イブラリに加える，追加のlibtoolオブジェクト(@file{.lo}ファイル)の名前を
含んでいます．@samp{@var{library}_LDFLAGS}変数は，@samp{-version-info}や
@samp{-static}といった，付加的なlibtoolフラグも含んでいます．

@cindex @@LTLIBOBJS@@, special handling

普通のライブラリが@code{@@LIBOBJS@@}を使用するで，libtoolライブラリは
@code{@@LTLIBOBJS@@}を使用する必要があります．libtoolが処理するオブジェ
クトファイルは必ずしも@file{.o}で終わらないので，これが必要になります．
libtoolマニュアルは，このトピックに関する詳細が書かれています．

いくつかのディレクトリにインストールされるライブラリに対して，Automakeは
自動的に適切な@samp{-rpath}オプションを供給します．しかし，
@code{configure}時(と@code{EXTRA_LTLIBRARIES}に書いた時)に決定されるライ
ブラリに対して，Automakeは最終的なインストールディレクトリを知りません．
このようなライブラリに対しては，適切な@samp{_LDFLAGX}変数に@samp{-rpath} 
オプションを手動で加える必要があります．

通常，Automakeは共有ライブラリの名前が@samp{lib}で始まることを要求します．
しかし，動的にロードされるモジュールを構築している場合，"標準的でない"名
前を使用したい可能性もあります．この場合は，@code{-module}を
@samp{_LDFLAGS}変数に書き込んでください．

詳細は@xref{Using Automake, Using Automake with Libtool, The Libtool
Manual, libtool, The Libtool Manual}.


@node Program and Library Variables, LIBOBJS, A Shared Library, Programs
@section プログラムとライブラリの変数

それぞれのプログラムに関連して，プログラムのビルドの方法を修正するために
使用することが可能な，変数の集合があります．それぞれのライブラリに対して
も，それに似たような変数のリストがあります．プログラム(やライブラリ)の標
準的な名前が，これらの変数の命名に対する基本として使用されます．

以下のリストでは，名前``maude''をプログラムやライブラリを示すものとして
使用しています．@file{Makefile.am}で，これを標準的なプログラムの名前に置
換してください．このリストは，``maude''をプログラムを示すものとしていま
すが，一般的に同じ規則を，スタティックライブラリやダイナミックライブラリ
に適用します．以下の文章では，プログラムとライブラリで異なる状況をコメン
トしています．

@table @samp
@item maude_SOURCES
存在する場合，この変数は，プログラムをビルドするためにコンパイルされる，
すべてのソースファイルをリストアップします．プログラムをビルドしている時，
Automakeはそれぞれのソースファイルを単一の@file{.o}ファイル(やlibtoolを
使用している時は@file{.lo})にコンパイルさせます．通常これらのオブジェク
トファイルはソースファイルの後に指名されますが，他の要因で変更することが
可能です．Automakeは二つのうちの一つを実行します．認識できない拡張子を持
つファイルを@file{.o}に変換するための接尾子の規則が存在する場合，
automakeはこのファイルを，あらゆるその他の(言語の)ソースファイルとして扱
います(@pxref{Support for Other Languages})．それ以外の場合は，ファイル
はヘッダファイルと考えて無視されます．

接頭辞の@samp{dist_}と@samp{nodist_}で，@samp{_SOURCES}にリストアップさ
れているファイルを配布するかどうか制御可能です．ソースはデフォルトで配布
されるので，@samp{dist_}は冗長ですが，必要なら明確にするために指定可能で
す．

@samp{_SOURCES}変数に与えるものとして@samp{dist_}と@samp{nodist_}の両方
を一度に用いることが可能です．これによって，配布するファイルとそれ以外の
ものに簡単に分類することができ，例えば以下のようにします．

@example
nodist_maude_SOURCES = nodist.c
dist_maude_SOURCES = dist-me.c
@end example

デフォルトで，出力ファイル(Unixシステム上では@file{.o}ファイル)は，現在
のビルドディレクトリに書き込まれます．しかし，現在のディレクトリに対して
オプションの@code{subdir-objects}の影響がある場合，@file{.o}ファイルはソー
スファイルの後で指名されるサブディレクトリに書き込まれます．例えば，
@code{subdir-objects}が利用可能な場合，@file{sub/dir/file.c}は
@file{sub/dir/file.o}にコンパイルされます．この処理モードを好む人もいま
す．@code{subdir-objects}を@code{AUTOMAKE_OPTIONS}で指定することが可能で
す(@pxref{Options})．
@cindex Subdirectory, objects in
@cindex Objects in subdirectory

@item EXTRA_maude_SOURCES
Automakeは，@emph{静的に}コンパイルしたいファイルのリストを知っている必
要があります．一つには，与えられた@file{Makefile.in}が要求する言語のサポー
トの種類を，Automakeが知るための唯一の方法だということがあげられます．
@footnote{それ以外にも，この制限に対するあまり知られていない理由が同じよ
うに存在します．} 例えばこれには，@samp{@@my_sources@@}のような
@code{configure}の置換式を@samp{_SOURCES}に書き込むことができないという
意味を持ちます．ソースファイルの条件コンパイルを行ない，例えば
@samp{_LDADD}(以下を参照してください)のオブジェクト名を適切に置換するた
めに@file{configure}を使用したい場合，対応するソースファイルを
@samp{EXTRA_}にリストアップした方が良いでしょう．

この変数は，例えば@samp{nodist_EXTRA_maude_SOURCES}のように，
@samp{dist_}と@samp{nodist_}もサポートします．

@item maude_AR
スタティックライブラリは，デフォルトで，@code{$(AR) cru}にライブラリ名と
ライブラリに書き込むオブジェクトを続けた呼び出しで作成されます．
@samp{_AR}変数でこれに優先可能です．これは，通常C++で使用されます．C++コ
ンパイラには，ライブラリに組み込むすべてのテンプレートをinstantiateする
ために，特殊な呼び出しが必要なものもあります．例えば，SGI C++コンパイラ
は，このマクロを以下のように設定します．

@example
libmaude_a_AR = $(CXX) -ar -o
@end example

@item maude_LIBADD
@samp{_LIBADD}変数を使用することで，特別なオブジェクトをスタティックライ
ブラリに加えることが可能です．これは，@code{configure}で決定されるオブジェ
クトに対し使用すべきです．@samp{_LIBADD}は，共有ライブラリに対して使用し
ないことに注意してください．その場合は，@samp{_LDADD}を使用する必要があ
ります．

@item maude_LDADD
@samp{_LDADD}変数に特別なオブジェクトをリストアップすることで，共有ライ
ブラリやプログラムに加えることが可能です．これは，@code{configure}で決定
されるオブジェクトに対し使用すべきです．

(@samp{-l}，@samp{-L}，@samp{-dlopen}，そして@samp{-dlpreopen}以外の)プ
ログラム特有のリンカフラグを渡すための@samp{_LDADD}の使用は不適切です．
この目的に対しては，@samp{_LDFLAGS}変数を使用してください．

例えば，@file{configure.in}で@code{AC_PATH_XTRA}を使用している場合，以下
のように，Xのライブラリとリンクするため，以下のようにすることが可能です．

@example
maude_LDADD = $(X_PRE_LIBS) $(X_LIBS) $(X_EXTRA_LIBS)
@end example

@item maude_LDFLAGS
これは，プログラムや共有ライブラリのリンク段階に特別なフラグを渡すために
使用する変数です．

@item maude_LINK
プログラム毎に基本となるリンカに優先することが可能です．デフォルトで，リ
ンカはプログラムで使用されている言語によって選択されます．例えば，C++の
ソースコードを含むプログラムでは，C++コンパイラがリンクに使用されます．
@samp{_LINK}変数は，すべての@file{.o}ファイル名を引数として渡すことが可
能なコマンド名を含んでいる必要があります．基礎となるプログラム名は，
@samp{_LINK}に渡され@emph{ない}ことに注意してください．通常は@samp{$@@}
を使用します．

@example
maude_LINK = $(CCLD) -magic -o $@@
@end example

@item maude_CFLAGS
Automakeでは，プログラム毎(またはライブラリ毎)の基本となるコンパイルフラ
グを設定することが可能です．単一のソースファイルを複数のプログラムに含め
ることが可能で，それぞれのプログラムに対して異なるフラグでコンパイルされ
る可能性があります．これは，あらゆるプログラムに対し，直接Automakeがサポー
トすることで動作します．フラグは，@samp{_CFLAGS}，@samp{_CXXFLAGS}，
@samp{_OBJCFLAGS}，@samp{_YFLAGS}，@samp{_ASFLAGS}，@samp{_FFLAGS}，
@samp{_RFLAGS}，そして@samp{_GCJFLAGS}です．

プログラム毎にコンパイルフラグを使用する時，Automakeは，中間的なオブジェ
クトファイルに対し，異なる名前を選択します．通常，@file{sample.c}のよう
なファイルは，コンパイルされて@file{sample.o}が生成されます．しかし，プ
ログラムの@samp{_CFLAGS}変数を設定した場合，オブジェクトファイルは，例え
ば@file{maude-sample.o}のように命名されます．

プログラム毎にフラグを用いてコンパイルする際は，通常の@samp{AM_}形式のフ
ラグ変数は，自動的にコンパイルに組み込まれ@emph{ません}(しかし，ユーザ形
式の変数は組み込まれ@emph{ます})．そのため，例えば，@samp{AM_CFLAGS}の変
数も使用して@file{maude}のコンパイルを行なうと仮定すると，以下のように書
き込む必要があります．

@example
maude_CFLAGS = ... your flags ... $(AM_CFLAGS)
@end example

@item maude_DEPENDENCIES
実際にはプログラムの一部にはならない他のターゲットにも依存するプログラム
があることが，役に立つ場合もあります．これは，@samp{_DEPENDENCIES}変数を
用いることで可能となります．それぞれのプログラムは，その変数の内容に依存
しますが，それ以上の解釈はなされません．

@samp{_DEPENDENCIES}が提供されていない場合，それはAutomakeが考察します．
自動的に割り当てられる値は@samp{_LDADD}の内容で，@samp{-l}，@samp{-L}，
@samp{-dlopen}，そして@samp{-dlpreopen}オプション以外の@code{configure} 
の置換式のほとんどを用いています．残っている@code{configure}の置換式は，
@samp{@@LIBOBJS@@}と@samp{@@ALLOCA@@}です．これらは，生成される
@samp{_DEPENDENCIES}に対して無効な値を生成しないことが分かっているので残
されます．

@item maude_SHORTNAME
利用可能なファイル名が非常に短いプラットフォームもあります．これらのシス
テムと，プログラム毎のコンパイルフラグを同時にサポートするために，
Automakeでは，中間的なオブジェクトファイルの命名に影響する``短い名前''を
設定することが可能です．例えば，@samp{maude_SHORTNAME}を@samp{m}に設定す
る場合，上記のプログラム毎のコンパイルフラグの例では，オブジェクトファイ
ルは@file{maude-sample.o}ではなく@file{m-sample.o}と命名されます．この機
能は，実行上滅多に必要になりませんし，要求されていると分かるまで使用を避
けることを推奨します．
@end table


@node LIBOBJS, Program variables, Program and Library Variables, Programs
@section LIBOBJSとALLOCAに対する特別扱い

@cindex @@LIBOBJS@@, special handling
@cindex @@ALLOCA@@, special handling

Automakeは，@code{@@LIBOBJS@@}と@code{@@ALLOCA@@}を使用していることを明
示的に認識し，そしてこの情報を使用し，配布物に適切なソースファイルを自動
的に含めるため，@file{configure.in}から導き出される@code{LIBOBJS}ファイ
ルのリストに追加します(@pxref{Dist})．これらのソースファイルは，依存性追
跡でも自動的に扱われます．@xref{Dependencies}.

@code{@@LIBOBJS@@}と@code{@@ALLOCA@@}は，あらゆる@samp{_LDADD}や
@samp{_LIBADD}で特別に認識されます．


@node Program variables, Yacc and Lex, LIBOBJS, Programs
@section プログラムビルド時に使用される変数

Automakeがコンパイルに使用する@file{Makefile}変数を知ることが役に立ちつ
こともあります．例えば，特別な場合には，自分でコンパイルをする必要がある
かもしれません．

Autoconfから継承される変数もあります．これらは@code{CC}，@code{CFLAGS}，
@code{CPPFLAGS}，@code{DEFS}，@code{LDFLAGS}，そして@code{LIBS}です．
@vindex LDFLAGS

Automake自身が定義する追加の変数もあります．

@vtable @code
@item AM_CPPFLAGS
このマクロの内容は，Cプリプロセッサを呼び出すコンパイルで毎回渡されます．
それはプリプロセッサへの引数リストです．例えば，@samp{-I}と@samp{-D}オプ
ションは，ここにリストアップすべきです．

Automakeは，すでに@samp{-I}オプションを自動的に提供しています．特に，そ
れは@samp{-I$(srcdir)}，@samp{-I.}，そして(@code{AC_CONFIG_HEADER}や
@code{AM_CONFIG_HEADER}を使用している場合は)@file{config.h}があるディレ
クトリを示す@samp{-I}を生成します．@samp{nostdinc}オプションを使用するこ
とで，デフォルトの@samp{-I}オプションを利用不可能にすることが可能です．

@item INCLUDES
これは，@samp{AM_CPPFLAGS}と同じ仕事を行ないます．それは同じ機能に対する
古い名前です．このマクロは止めた方が良いでしょう．代わりに
@samp{AM_CPPFLAGS}の使用を勧めます．


@item AM_CFLAGS
これは，@file{Makefile.am}の著者が，追加のCコンパイラフラグを渡すために
使用することが可能な変数です．その完全な説明はどこかにあるでしょう．状況
によっては，実行形式毎(またはライブラリ毎)の@code{CFLAGS}が優先されるの
で，これは使用されません．

@item COMPILE
これはCソースファイルをコンパイルするために実際に使用されるコマンドです．
完全なコマンドラインを構成するために，ファイル名が付加されます．

@item LINK
これはCプログラムをリンクするために実際に使用されるコマンドです．それに
は，すでに，@samp{-o $@@}と通常参照される変数(例えば，@code{CFLAGS})が含
まれています．それは，リンクされるオブジェクトファイルとライブラリの名前
の``引数''として受けとられます．
@end vtable


@node Yacc and Lex, C++ Support, Program variables, Programs
@section YaccとLexのサポート

AutomakeはYaccとLexに対する幾分特異なサポートを行ないます．

Automakeは，@code{yacc}(あるいは@code{lex})によって生成された@file{.c}ファ
イルが，入力ファイルのベース名を使用して命名されていると想定します．すな
わち，yaccソースファイル@file{foo.y}に対して，Automakeは中間ファイルを
(より伝統的な@file{y.tab.c}ではなく)@file{foo.c}と命名します．

yaccソースファイルの拡張子は，結果として生じる@samp{C}あるいは@samp{C++} 
ファイルの拡張子を決定するために使用されます．ファイルの拡張子が
@samp{.y}の場合は@samp{.c}になります．同様に@samp{.yy}は@samp{.cc}に，
@samp{.y++}は@samp{c++}に，@samp{.yxx}は@samp{.cxx}になります．

同様に，lexソースファイルは，@samp{C}や@samp{C++}を生成するために使用す
ることが可能です．拡張子の@samp{.l}，@samp{.ll}，@samp{.l++}と
@samp{.lxx}は認識されます．

あらゆる@samp{SOURCES}変数に，(@samp{C}や@samp{C++}の)中間的なファイルを
明示的に書いてはいけません．ソースファイルだけをリストアップします．

@code{yacc}(あるいは@code{lex})によって生成さる中間的なファイルは，作成
されるあらゆる配布物にも含められます．そのためユーザーは@code{yacc}や
@code{lex}を持っている必要がありません．

@code{yacc}ソースファイルが見つかる場合，@file{configure.in}で変数
@samp{YACC}を定義する必要があります．これは，マクロ@samp{AC_PROG_YACC}を
呼び出すことで最も容易に行なえます(@pxref{Particular Programs, ,
Particular Program Checks, autoconf, The Autoconf Manual})．

@code{yacc}が呼び出された時，@samp{YFLAGS}と@samp{AM_YFLAGS}フラグが渡さ
れます．前者はユーザ変数で，後者は@file{Makefile.am}の著者のためのもので
す．

同様に，@code{lex}ソースファイルがある場合，@file{configure.in}で変数
@samp{LEX}を定義する必要があります．こうするために@samp{AC_PROG_LEX}を使
用することが可能です(@pxref{Particular Programs, , Particular Program
Checks, autoconf, The Autoconf Manual})．Automakeの@code{lex}サポートは，
@samp{AC_DECL_YYTEXT}マクロを使用するも要求します---automakeが
@samp{LEX_OUTPUT_ROOT}の値を知る必要があるためです．@code{AM_PROG_LEX} 
マクロを使用する場合，これですべて処理されます(@pxref{Macros})．

@code{lex}が呼び出された時，@samp{LFLAGS}と@samp{AM_LFLAGS}フラグが渡さ
れます．前者はユーザ変数で，後者は@file{Makefile.am}の著者のためのもので
す．

@cindex ylwrap
@cindex yacc, multiple parsers
@cindex Multiple yacc parsers
@cindex Multiple lex lexers
@cindex lex, multiple lexers

Automakeは，一つのプログラムに複数の@code{yacc}(や@code{lex})ソースファ
イルを含めることを可能にします．Automakeは，サブディレクトリで
@code{yacc}(や@code{lex})を実行するために，@code{ylwrap}と呼ばれる小さい
プログラムを使用します．これが必要になるのは，yaccの出力ファイル名が固定
されていて，並列的なmakeで@code{yacc}の１以上のインスタンスを同時に呼び
出す可能性があるためです．@code{ylwrap}プログラムは，Automakeと一緒に配
布されます．それは@samp{AC_CONFIG_AUX_DIR}が指定するディレクトリ 
(@pxref{Input, , Finding `configure' Input, autoconf, The Autoconf
Manual})，または，そのマクロが@file{configure.in}で使用されていない場合
はカレントディレクトリにあります．

@code{yacc}に対しては，簡単なロックでの管理は不十分です．@code{yacc}の出
力は，内部で常に同じシンボル名を使うので，同じ実行形式の中に２つの
@code{yacc}パーサーをリンクするは不可能です．

@code{gdb}では，使用する名前を以下のように変更してください．
@example
#define	yymaxdepth c_maxdepth
#define	yyparse	c_parse
#define	yylex	c_lex
#define	yyerror	c_error
#define	yylval	c_lval
#define	yychar	c_char
#define	yydebug	c_debug
#define	yypact	c_pact
#define	yyr1	c_r1
#define	yyr2	c_r2
#define	yydef	c_def
#define	yychk	c_chk
#define	yypgo	c_pgo
#define	yyact	c_act
#define	yyexca	c_exca
#define yyerrflag c_errflag
#define yynerrs	c_nerrs
#define	yyps	c_ps
#define	yypv	c_pv
#define	yys	c_s
#define	yy_yys	c_yys
#define	yystate	c_state
#define	yytmp	c_tmp
#define	yyv	c_v
#define	yy_yyv	c_yyv
#define	yyval	c_val
#define	yylloc	c_lloc
#define yyreds	c_reds
#define yytoks	c_toks
#define yylhs	c_yylhs
#define yylen	c_yylen
#define yydefred c_yydefred
#define yydgoto	c_yydgoto
#define yysindex c_yysindex
#define yyrindex c_yyrindex
#define yygindex c_yygindex
#define yytable	 c_yytable
#define yycheck	 c_yycheck
#define yyname   c_yyname
#define yyrule   c_yyrule
@end example

それぞれの定義に対して，@samp{c_}接頭辞は好みのものに置き換えて下さい．
これらは，@code{bison}，@code{byacc}，そして伝統的な@code{yacc}に対する
動作を定義します．パーサジェネレータが，ここでカバーされていないシンボル
を使用していることが分かった場合，リストに加えることができるように，新し
い名前を報告してください．


@node C++ Support, Assembly Support, Yacc and Lex, Programs
@section C++のサポート

@cindex C++ support
@cindex Support for C++

Automakeには，C++に対する完全なサポートが含まれています．

C++コードを含んでいるすべてのパッケージでは，@file{configure.in}で出力変
数@samp{CXX}を定義する必要があります．これを行う最も単純な方法は，
@code{AC_PROG_CXX}マクロを使用することです(@pxref{Particular Programs, ,
Particular Program Checks, autoconf, The Autoconf Manual})．

C++ソースファイルがあるとき，わずかな追加変数が定義されます．

@vtable @code
@item CXX
C++コンパイラの名前です．

@item CXXFLAGS
C++コンパイラに渡すすべてのフラグです．

@item AM_CXXFLAGS
管理者のための@code{CXXFLAGS}です．

@item CXXCOMPILE
C++ソースファイルを実際にコンパイルするために使用されるコマンドです．完
全なコマンドラインを構成するために，ファイル名が付加されます．

@item CXXLINK
実際にC++プログラムをリンクするコマンドです．
@end vtable


@node Assembly Support, Fortran 77 Support, C++ Support, Programs
@section アセンブラのサポート

Automakeは，アセンブラコードに対するサポートも含んでいます．

変数@code{AS}は，アセンブラコードをビルドするために使用するコンパイラ名
が保持されています．このコンパイラは，Cコンパイラにちょっと似ている動作
をする必要があります．特に，それは@samp{-c}と@samp{-o}を受け入れる必要が
あります．@code{ASFLAGS}の値はコンパイラに渡されます．
@vindex AS
@vindex ASFLAGS

@file{configure.in}で@code{AS}と@code{ASFLAGS}を設定する必要があります．
autoconfマクロの@code{AM_PROG_AS}でこれを行ないます．前もって設定されて
いない場合は，@code{AS}をCコンパイラに， @code{ASFLAGS}をCコンパイラフラ
グに，単純に設定します．


@node Fortran 77 Support, Java Support, Assembly Support, Programs
@comment  node-name,  next,  previous,  up
@section Fortran 77のサポート

@cindex Fortran 77 support
@cindex Support for Fortran 77

Automakeには，Fortran 77に対する完全なサポートが含まれています．

Fortran 77コードを含むあらゆるパッケージでは，@file{configure.in}で出力
変数@samp{F77}を定義する必要があります．こうするための最も簡単な方法は
@code{AC_PROG_F77}マクロを使用することです(@pxref{Particular Programs, ,
Particular Program Checks, autoconf, The Autoconf Manual})．
@xref{Fortran 77 and Autoconf}.

Fortran 77ソースファイルがあるときは，追加変数がいくつか定義されます．

@vtable @code

@item F77
Fortran 77コンパイラの名前です．

@item FFLAGS
Fortran 77コンパイラに渡すすべてのフラグです．

@item AM_FFLAGS
管理者のための@code{FFLAGS}です．

@item RFLAGS
Ratforコンパイラに渡すすべてのフラグです．

@item AM_RFLAGS
管理者のための@code{RFLAGS}です．

@item F77COMPILE
実際にFortran 77ソースファイルをコンパイルするコマンドです．完全なコマン
ドラインを構成するために，ファイル名が付加されます．

@item FLINK
実際に純粋なFortran 77プログラムあるいは共有ライブラリをリンクするコマン
ドです．
@end vtable

Automakeは，さらに，コンパイル時にFortran 77とRatforソースファイルの前処
理をすることが可能です@footnote{以下のセクションにあるFortran 77プログラ
ムのプリプロセスに関する情報については，大部分でないが，多くのものを
@ref{Catalogue of Rules, , Catalogue of Rules, make, The GNU Make
Manual},からほとんどそのまま持ってきています．}．Automakeには，Fortran
77と他の言葉が混合しているプログラムと共有ライブラリを作成するためのサポー
トも含まれています(@pxref{Mixing Fortran 77 With C and C++})．

これらの問題は次のセクションで述べます．

@menu
* Preprocessing Fortran 77::
* Compiling Fortran 77 Files::
* Mixing Fortran 77 With C and C++::
* Fortran 77 and Autoconf::
@end menu


@node Preprocessing Fortran 77, Compiling Fortran 77 Files, Fortran 77 Support, Fortran 77 Support
@comment  node-name,  next,  previous,  up
@subsection Fortran 77のプリプロセス

@cindex Preprocessing Fortran 77
@cindex Fortran 77, Preprocessing
@cindex Ratfor programs

@file{N.f}は自動的に@file{N.F}あるいは@file{N.r}から作成されます．この規
則は，前処理可能なFortran 77やRatforソースファイルを，厳密なFortran 77 
ソースファイルに変換するためだけにプリプロセッサを走らせます．使用される
正確なコマンドは以下のようになります．

@table @file

@item .F
@code{$(F77) -F $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)}

@item .r
@code{$(F77) -F $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)}

@end table


@node Compiling Fortran 77 Files, Mixing Fortran 77 With C and C++, Preprocessing Fortran 77, Fortran 77 Support
@comment  node-name,  next,  previous,  up
@subsection Fortran 77ファイルのコンパイル

@file{N.o}は，実際にはFortran 77を実行することによって@file{N.f}，
@file{N.F}や@file{N.r}から作成されます．使用される正確なコマンドは以下の
ようになります．

@table @file

@item .f
@code{$(F77) -c $(AM_FFLAGS) $(FFLAGS)}

@item .F
@code{$(F77) -c $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FFLAGS) $(FFLAGS)}

@item .r
@code{$(F77) -c $(AM_FFLAGS) $(FFLAGS) $(AM_RFLAGS) $(RFLAGS)}

@end table


@node Mixing Fortran 77 With C and C++, Fortran 77 and Autoconf, Compiling Fortran 77 Files, Fortran 77 Support
@comment  node-name,  next,  previous,  up
@subsection CとC++と，Fortran 77の混在

@cindex Fortran 77, mixing with C and C++
@cindex Mixing Fortran 77 with C and C++
@cindex Linking Fortran 77 with C and C++
@cindex cfortran
@cindex Mixing Fortran 77 with C and/or C++

Automakeは現在，Fortran 77とCそして/またはC++が混在しているプログラムと
共有ライブラリを作成するため，@emph{限定された}サポートを提供しています．
しかし，(現在は)Automakeによって処理され@emph{ません}が，他のパッケージ
@footnote{例えば，@uref{http://www-zeus.desy.de/~burow/cfortran/, the
cfortran package}は，これらすべての言語間の問題を扱い，ほとんどすべての
プラットホームの，ほとんどすべてのFortran 77，C，そしてC++コンパイラで動
作します．しかしながら，@code{cfortran}はまだフリーソフトウェアではあり
ませんが，次のメジャーリリースでそうなるでしょう．}で処理される，Fortran
77と他の言葉との混在に関連して，多くの問題が発生しています．

@page
Automakeは２つの方法で助けることが可能です．

@enumerate
@item
ソースコードの組み合わせに依存したリンカの自動的な選択．

@item
適切なFortran 77のイントリンシックとランタイムライブラリにリンクするため
に，自動的に選択されたリンカに渡す，適切なリンカフラグ(例えば@samp{-L}と
@samp{-l})の自動的な選択．

@cindex FLIBS, defined
これらの追加されたFortran 77リンカフラグは，Autoconf(Autoconfバージョン
2.13やそれ以降)の新しいバージョンで供給された，
@code{AC_F77_LIBRARY_LDFLAGS}というAutoconfマクロでの出力変数
@code{FLIBS}で提供されます．@xref{Fortran 77 Compiler Characteristics, ,
, autoconf, The Autoconf}.
@end enumerate

(@code{_PROGRAMS}や@code{_LTLIBRARIES}プライマリで記述されているような) 
プログラムや共有ライブラリが，Fortran 77と，Cそして/またはC++の混合のソー
スコードを含んでいることををAutomakeが検出した場合，
@code{AC_F77_LIBRARY_LDFLAGS}マクロを@file{configure.in}で呼び出し，
@code{$(FLIBS)}または@code{@@FLIBS@@}のどちらかで，適切な(プログラムに対
する)@code{_LDADD}や，(共有ライブラリに対する)@code{_LIBADD}変数が書かれ
ていることを要求します．@code{$(FLIBS)}や@code{@@FLIBS@@}が，適切な
@code{_LDADD}や@code{_LIBADD}変数に書かれていることを確かめるのは，
@file{Makefile.am}を書いている人の責任です．

@cindex Mixed language example
@cindex Example, mixed language

例えば，次の@file{Makefile.am}を考えます．

@example
bin_PROGRAMS = foo
foo_SOURCES  = main.cc foo.f
foo_LDADD    = libfoo.la @@FLIBS@@

pkglib_LTLIBRARIES = libfoo.la
libfoo_la_SOURCES  = bar.f baz.c zardoz.cc
libfoo_la_LIBADD   = $(FLIBS)
@end example

この場合，Automakeは，@code{AC_F77_LIBRARY_LDFLAGS}が@file{configure.in} 
で記述されることを強く要求します．また，@code{@@FLIBS@@}が
@code{foo_LDADD}と@code{libfoo_la_LIBADD}で記述されていない場合も，
Automakeは警告を出します．


@page
@menu
* How the Linker is Chosen::
@end menu

@node How the Linker is Chosen,  , Mixing Fortran 77 With C and C++, Mixing Fortran 77 With C and C++
@comment  node-name,  next,  previous,  up
@subsubsection リンカの選択方法

@cindex Automatic linker selection
@cindex Selecting the linker automatically

Automakeによって特定のリンカが選択される条件を，次の図で明示します．

例えば，Fortran 77，C，そしてC++ソースコードがプログラムにコンパイルされ
る場合，C++リンカが使用されます．この場合，CあるいはFortran 77リンカが，
C++リンカに含まれていない特別なライブラリを必要とした場合，
@file{Makefile.am}を書いているユーザーが，@code{_LDADD}や@code{_LIBADD}
変数を手作業で付け加える必要があります．

@example
                     \              Linker
          source      \
           code        \     C        C++     Fortran
     -----------------  +---------+---------+---------+
                        |         |         |         |
     C                  |    x    |         |         |
                        |         |         |         |
                        +---------+---------+---------+
                        |         |         |         |
         C++            |         |    x    |         |
                        |         |         |         |
                        +---------+---------+---------+
                        |         |         |         |
               Fortran  |         |         |    x    |
                        |         |         |         |
                        +---------+---------+---------+
                        |         |         |         |
     C + C++            |         |    x    |         |
                        |         |         |         |
                        +---------+---------+---------+
                        |         |         |         |
     C +       Fortran  |         |         |    x    |
                        |         |         |         |
                        +---------+---------+---------+
                        |         |         |         |
         C++ + Fortran  |         |    x    |         |
                        |         |         |         |
                        +---------+---------+---------+
                        |         |         |         |
     C + C++ + Fortran  |         |    x    |         |
                        |         |         |         |
                        +---------+---------+---------+
@end example


@node Fortran 77 and Autoconf,  , Mixing Fortran 77 With C and C++, Fortran 77 Support
@comment  node-name,  next,  previous,  up
@subsection Fortran 77とAutoconf

Fortran 77に対する現在のAutomakeサポートは，Fortran 77に対するサポートが
含まれている，最近のバージョンのAutoconfも必要になります．Fortran 77の完
全なサポートがAutoconf2.13で加えられたので，それかそれ以降のバージョンの
Autoconfを使用したいと思うことでしょう．


@node Java Support, Support for Other Languages, Fortran 77 Support, Programs
@comment  node-name,  next,  previous,  up
@section Javaのサポート

@cindex Java support
@cindex Support for Java

Automakeには，GNU Compiler CollectionのJavaフロントエンドである
@code{gcj}を使用してコンパイルされたJavaに対するサポートも含まれています．

Javaコードを含んでいるあらゆるパッケージのコンパイルには，
@file{configure.in}で出力変数@samp{GCJ}の定義が必要です．変数
@samp{GCJFLAGS}も，(@file{configure.in}や@file{Makefile.am}で)なんとかし
て定義する必要があります．こうするための最も簡単な方法は，
@code{AM_PROG_GCJ}マクロを使用することです．

@vindex GCJFLAGS

デフォルトで，Javaソースファイルを含んでいるプログラムは，@code{gcj}でリ
ンクされます．

通常通り，@samp{AM_GCJFLAGS}の内容は，@code{gcj}が呼び出されるコンパイル
毎に渡されます(コンパイル前でのその役割を果たすもの---@file{.class}ファ
イルを作成するためにそれを呼び出す時，@samp{AM_JAVACFLAGS}が代わりに使用
されます)．@file{Makefile.am}から@code{gcj}にオプションを渡す必要がある
場合，このマクロとユーザマクロでない@samp{GCJFLAGS}を使用すべきでしょう．

@vindex AM_GCJFLAGS

@code{gcj}は，@file{.java}，@file{.class}，@file{.zip}，または
@file{.jar}ファイルをコンパイルするために使用することが可能です．


@node Support for Other Languages, ANSI, Java Support, Programs
@comment  node-name,  next,  previous,  up
@section 他の言語のサポート

Automakeには，現在，C，C++(@pxref{C++ Support})，Fortran
77(@pxref{Fortran 77 Support})そして(@pxref{Java Support})のみの完全なサ
ポートが含まれています．他の言葉に対しては，基本的なサポートと，ユーザー
の需要に基づいて改善されるサポートしかありません．

独自の言語を加えるため幾分制限されているサポートは，サフィックスルールの
処理によって利用可能になっています．@ref{Suffixes},を参照してください．


@node ANSI, Dependencies, Support for Other Languages, Programs
@section 自動的なde-ANSI-fication

@cindex de-ANSI-fication, defined

GNU standardsはANSI Cの使用を許可していますが，これはもっと古いコンパイ
ラ(特にSunOS C コンパイラ)へのパッケージの移植性を制限することになるはず
です．

Automakeは，実際にコンパイルされる前に，@dfn{de-ANSI-fyng}したそれぞれの
ファイルによって，そのようなマシン上でのこの問題を解決することができます．

@vindex AUTOMAKE_OPTIONS
@opindex ansi2knr

@file{Makefile.am}の変数@code{AUTOMAKE_OPTIONS}(@pxref{Options})が，オプ
ション@code{ansi2knr}を含んでいる場合，de-ANSI-ficationを処理するための
コードが，生成された@file{Makefile.in}に挿入されます．

これによって，ディレクトリの中のそれぞれのCソースファイルをANSI Cとして
取り扱います．ANSI Cコンパイラが利用可能な場合，それが使用されます．ANSI
Cコンパイラが利用可能でない場合，@code{ansi2knr}プログラムはソースファイ
ルをK&R Cに変換するために使用され，そしてコンパイルされます．

@code{ansi2knr}プログラムは単純です．それはソースコードが特定の方法で書
式化されると仮定します．詳細は@code{ansi2knr}のmanページを参照してくださ
い．

de-ANSI-ficationに対するサポートでは，ソースファイル@file{ansi2knr.c}と
@file{ansi2knr.1}がANSI Cソースと同じパッケージにある必要があります．こ
れらのファイルはAutomakeと一緒に配布されます．また，パッケージ
@file{configure.in}は，@code{AM_C_PROTOTYPES}マクロを呼び出す必要もあり
ます(@pxref{Macros}) ．
@cvindex AM_C_PROTOTYPES

Automakeは，現在のパッケージの他のディレクトリで@code{ansi2knr}サポート
ファイルを見つけることもできます．これは，@code{ansi2knr}オプションへ適
切なディレクトリへの相対的なパスを前置することで行なわれます．例えば，パッ
ケージの@file{src}と@file{lib}サブディレクトリにANSI Cコードがあると仮定
します．ファイル@file{ansi2knr.c}と@file{ansi2knr.1}は@file{lib}にありま
す．この場合，@file{src/Makefile.am}は以下のように書かれます．

@example
AUTOMAKE_OPTIONS = ../lib/ansi2knr
@end example

ディレクトリの接頭辞が与えられてない場合，ファイルはカレントディレクトリ
にあると仮定されます．

de-ANSI-ficationを必要とする@code{LIBOBJS}で書かれたファイルは，自動的に
処理されません．その理由は，@code{configure}は，@file{regex.o}の様なオブ
ジェクト名を生成しますが，@code{make}は(de-ANSI-fyingの時)，
@file{regex_.o}を探すためです．最終的に，この問題は@code{autoconf}によっ
て修正されますが，しばらくは，@code{AC_OUTPUT}を呼び出す直前に，
@file{configure.in}に以下のコードを書き込む必要があります．

@example
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIBOBJS=`echo $LIBOBJS|sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
@end example

自動的なde-ANSI-ficationは，パッケージが異なるホストアーキテクチャに対す
るビルドでは動作しないことに注意してください．それは，ビルドマシンに対し
て@code{ansi2knr}をビルドする方法が，現在のautomakeには無いためです．


@node Dependencies, EXEEXT, ANSI, Programs
@section 自動的な依存性追跡

プロジェクトで，インクルードファイルの依存性が変化する時はいつでも，絶え
ず@file{Makefile.in}を更新することは，デベロッパーとしてしばしば辛いもの
です．Automakeは自動的に依存性の変更を追跡する方法を提供します．

@cindex Dependency tracking
@cindex Automatic dependency tracking

Automakeは常に，システムヘッダを含むコンパイルに対する完全な依存性を使用
します．Automakeのモデルは，依存性を求めることがビルドの副作用になるとい
うものです．つまり依存性は，@code{depcomp}と呼ばれる特別なラッパプログラ
ムを通じてすべてのコンパイルを実行することで求められます．@code{depcomp} 
は，多くの異なるCとC++コンパイラで，それが要求する書式で依存情報の生成さ
せるように上手に扱う方法を理解してます．@code{automake -a}で，
@code{depcomp}をソースツリーにインストールします．@code{depcomp}がコンパ
イラの正しい呼び出し方が分からない場合，依存性の追跡はビルドで利用不可能
になるだけです．

@cindex depcomp

これまでのバージョンのAutomakeの経験上@footnote{Automakeでの自動的な依存
性の追跡に関する歴史と経験についての情報は，
@uref{http://sources.redhat.com/automake/dependencies.html}を参照してく
ださい．}，コンフィグレーションが多くなり過ぎるので，管理者のシステムで
のみ生成される依存性が信頼できないことを，我々に教えてくれました．そのた
め，Automakeはビルド時に依存性を追跡することを代わりに実装しました．

自動的な依存性の追跡で，変数@code{AUTOMAKE_OPTIONS}に
@code{no-dependencies}を書くことが無くなるはずです．そうでない場合は，
@code{automake}を@code{-i}オプションを用いて呼び出してください．依存性の
追跡は，デフォルトで利用可能です．

@vindex AUTOMAKE_OPTIONS
@opindex no-dependencies

パッケージを構築している人々も，@code{--disable-dependency-tracking}を用
いてコンフィグレーションすることで，依存性の追跡を利用不可能にすることを
選択できます．

@cindex Disabling dependency tracking
@cindex Dependency tracking, disabling


@node EXEEXT, , Dependencies, Programs
@section 実行形式の拡張子のサポート

@cindex Executable extension
@cindex Extension, executable
@cindex Windows

プラットフォームによっては，Windowsのように，実行形式が@samp{.exe}のよう
な拡張子を持つことを期待するものもあります．これらのプラットフォームでは，
(GCCを含む)コンパイラは，@file{foo}を生成するように依頼される時，自動的
に@file{foo.exe}を生成します．

Automakeは，これに対するほとんどの変換でサポートを提供します．残念ながら
そのサポートでは完全に変換されません．パッケージをこれらのプラットフォー
ムでサポートされるようにしたい場合，補助する必要があります．

気付いていると思われることの一つは，Automakeが以下のような内容を内部で書
き直すことです．

@example
bin_PROGRAMS = liver
@end example

これを以下のように書き直します．

@example
bin_PROGRAMS = liver$(EXEEXT)
@end example

Automakeが生成するターゲットは，@samp{$(EXEEXT)}拡張子が与えられたものに
なります．@code{EXEEXT}

しかし，Automakeがこの書き換えを@code{configure}の置換式に適用することは
不可能です．そのような置換式を使用しているプログラムを条件付きでビルドし
ている場合，出力変数を構築している時に@file{configure.in}に
@samp{$(EXEEXT)}を加えるように注意する必要があるということを，これは意味
します．

Autoconf 2.13と，それ以前のものを用いた場合は，このサポートを得るために，
明示的に@code{AC_EXEEXT}を使用する必要があります．Autoconf 2.50を用いた
場合は，コンパイラをコンフィグレーションする際に(すなわち
@code{AC_PROG_CC}を通じて)，@code{AC_EXEEXT}が自動的に実行されます．

それらのプログラムに対し，管理者が明示的にリンク規則を書きたい時もありま
す．実行形式の拡張子サポートが無い場合は，これは簡単です---ターゲットを
プログラムと同じ名前にするだけです．しかし，実行形式の拡張子のサポートが
利用可能な時は，代わりに@samp{$(EXEEXT)}接尾辞を加える必要があります．

残念ながら，Autoconf 2.50の変更のため，常にこの拡張子を加える必要がある
ことを，これは意味しています．しかし，パッケージが実行形式の拡張子を持つ
プラットフォームで実行されるはずがないことを知っている管理者にとって，こ
のことは問題になります．これらの管理者に対しては，@code{no-exeext}オプショ
ン(@pxref{Options})でこの機能が利用不可能になります．これは，かなり醜い
方法で動作します．@code{no-exeext}が見つかった場合，@code{foo}という名前
のターゲットが存在すると，automekeが生成する@code{foo$(EXEEXT)}形式のター
ゲットで上書きされます．@code{no-exeext}オプションが用いられていない場合
は，これを使用することでエラーが生じます．


@node Other objects, Other GNU Tools, Programs, Top
@chapter その他の派生されるオブジェクト

AutomakeはCプログラムではない派生されるオブジェクトを扱うことが可能です．
このようなオブジェクトを実際にビルドするサポートを，明示的に供給する必要
があることもありますが，Automakeは自動的にインストールと配布物を扱います．

@menu
* Scripts::                     Executable scripts
* Headers::                     Header files
* Data::                        Architecture-independent data files
* Sources::                     Derived sources
@end menu


@node Scripts, Headers, Other objects, Other objects
@section 実行可能なスクリプト

@cindex _SCRIPTS primary, defined
@cindex SCRIPTS primary, defined
@cindex Primary variable, SCRIPTS

スクリプトのプログラムを定義しインストールすることが可能です．そのような
プログラムは，@samp{SCRIPTS}プライマリを使用してリストアップします．
Automakeはスクリプトに対する依存性の定義を全く行ないません．
@file{Makefile.am}に適切な規則を含ませるべきでしょう．
@vindex SCRIPTS

Automakeはスクリプトがオブジェクトからの派生物であると想定しません．その
ようなオブジェクトは手動で削除する必要があります(@pxref{Clean})．

@code{automake}プログラム自身は，@file{automake.in}からconfigure時に生成
されるPerlスクリプトです．これを処理する方法は以下のようになります．

@example
bin_SCRIPTS = automake
@end example

@code{automake}が@code{AC_OUTPUT}マクロにあるので，それに対するターゲッ
トは自動的に生成されます．

@cindex SCRIPTS, installation directories
@cindex Installing scripts

@vindex bin_SCRIPTS
@vindex sbin_SCRIPTS
@vindex libexec_SCRIPTS
@vindex pkgdata_SCRIPTS
@vindex noinst_SCRIPTS

スクリプトオブジェクトは@code{bindir}，@code{sbindir}，@code{libexecdir} 
，または@code{pkgdatadir}にインストールすることが可能です．


@node Headers, Data, Scripts, Other objects
@section ヘッダファイル

@cindex _HEADERS primary, defined
@cindex HEADERS primary, defined
@cindex Primary variable, HEADERS

@vindex noinst_HEADERS

ヘッダファイルは，@samp{HEADERS}等の変数で指定されます．通常，ヘッダファ
イルはインストールされないので，@code{noinst_HEADERS}変数は最も多く使わ
れます．@footnote{しかし，実際に特定のプログラムで使用されるインストール
されないヘッダファイルに対しては，@code{noinst_HEADERS}の代わりに，プロ
グラムの@samp{_SOURCES}変数でリストアップすることを推奨します．これがよ
り分かり易くなると信じています．}
@vindex HEADERS

すべてのヘッダファイルは，どこかにリストアップする必要があります．行方不
明のものは配布物に含まれません．プログラムに対するソースの後にアンインス
トールするヘッダをリストアップすることで，最も分かり易いものです．
@xref{A Program}.  @samp{_SOURCES}変数でリストアップされているヘッダを，
@samp{_HEADERS}変数でリストアップする必要はありません．

@cindex HEADERS, installation directories
@cindex Installing headers

@vindex include_HEADERS
@vindex oldinclude_HEADERS
@vindex pkginclude_HEADERS

ヘッダは@code{includedir}，@code{oldincludedir}，または
@code{pkgincludedir}にインストールすることが可能です．


@node Data, Sources, Headers, Other objects
@section アーキテクチャ非依存のデータファイル

@cindex _DATA primary, defined
@cindex DATA primary, defined
@cindex Primary variable, DATA

Automakeは，@samp{DATA}等の変数を使用して，様々なデータファイルをインス
トールすることをサポートします．
@vindex DATA

@vindex data_DATA
@vindex sysconf_DATA
@vindex sharedstate_DATA
@vindex localstate_DATA
@vindex pkgdata_DATA

そのようなデータは，ディレクトリ@code{datadir}，@code{sysconfdir}，
@code{sharedstatedir}，@code{localstatedir}，または@code{pkgdatadir}にイ
ンストールすること可能です．

デフォルトで，データファイルは配布物に含まれ@emph{ません}．もちろん，
@samp{dist_}接頭辞を使用することで，変数毎にこの(デフォルト動作)を変更す
ることが可能です．

Automakeにその補助のデータファイルをインストールさせる方法は，以下のとお
りです．

@example
pkgdata_DATA = clean-kr.am clean.am @dots{}
@end example


@node Sources,  , Data, Other objects
@section ソースのビルド

@cindex BUILT_SOURCES, defined

@samp{source}と呼ばれるファイル(例えばCの@samp{.h}ファイル)は，実際に何
か他のファイルから派生する場合もあります．そのようなファイルは
@code{BUILT_SOURCES}変数でリストアップすべきです．
@vindex BUILT_SOURCES

@code{BUILT_SOURCES}は，ビルドプロセスの初期に作成する必要があるファイル
は，この変数でリストアップすることが可能なので，これは実際にはちょっと誤っ
た名称です．

@code{BUILT_SOURCES}にリストアップされているソースファイルは，他の
@code{all}ターゲットが作成される前に作成されます．しかし，そのようなソー
スファイルは，他の@samp{_SOURCES}変数に記述されることで，明示的に要求さ
れていない限りコンパイルされません．

そのため，例えば，ビルド時に実行されるスクリプトで作成されるヘッダファイ
ルがある場合，他のすべての(おそらくこれらのヘッダを使用するものがある)コ
ンパイルの前にそれらのビルドを開始することを確実にするため，これらのヘッ
ダを@code{BUILT_SOURCES}に記述すべきでしょう．


@node Other GNU Tools, Documentation, Other objects, Top
@chapter 他のGNUツール

Automakeは，GNUプログラムで使用する@file{Makefile.in}を生成することを主
目的にしているので，他のGNUツールとの相互作用を試みます．

@menu
* Emacs Lisp::                  Emacs Lisp
* gettext::                     Gettext
* Libtool::                     Libtool
* Java::                        Java
* Python::                      Python
@end menu


@node Emacs Lisp, gettext, Other GNU Tools, Other GNU Tools
@section Emacs Lisp

@cindex _LISP primary, defined
@cindex LISP primary, defined
@cindex Primary variable, LISP

@vindex LISP
@vindex lisp_LISP
@vindex noinst_LISP

Automakeは，Emacs Lispに対するサポートも供給します．@samp{LISP}プライマ
リは@file{.el}ファイルのリストを保持するため使用されます．このプライマリ
に対して利用可能な接頭辞は，@samp{lisp_}と@samp{noinst_}です．
@code{lisp_LISP}が定義されている場合，@file{configure.in}で
@code{AM_PATH_LISPDIR}を実行する必要があります(@pxref{Macros})．

@vindex ELCFILES

デフォルトで，Automakeは，@code{AM_PATH_LISPDIR}で見つかったEmacsを使用
しながら，すべてのEmacs Lispソースファイルをバイトコンパイルします．バイ
トコンパイルしたくない場合，変数@code{ELCFILES}を空のまま定義してくださ
い．バイトコンパイルされたEmacs Lispファイルは，すべてのEmacsのバージョ
ンの間で移植性があるわけではないので，１種類以上のEmacsバージョンをイン
ストールしているサイトを管理する可能性がある場合，これを止めることに意味
があります．さらに，実際にはバイトコンパイルの利点がないパッケージも多く
あります．しかし，我々はデフォルトでバイトコンパイルを使用可能なままにし
ておくことを勧めます．恐らく，他の皆がインストールしなくてすむことより，
それぞれに対して対処するためにそれぞれ設定した方が良いでしょう．


@node gettext, Libtool, Emacs Lisp, Other GNU Tools
@section Gettext

@cindex GNU Gettext support
@cindex Gettext support
@cindex Support for GNU Gettext

@code{AM_GNU_GETTEXT}が@file{configure.in}にある場合，Automakeは，国際化
のメッセージカタログシステムの，GNU gettextに対するサポートを開始します
(@pxref{GNU Gettext, , , gettext, GNU gettext utilities})．

Automakeでの@code{gettext}サポートには，パッケージに@file{intl}と
@file{po}の２つのサブディレクトリの追加が必要です．Automakeはこれらのディ
レクトリが存在して，@code{SUBDIRS}に書かれることを保証します．


@node Libtool, Java, gettext, Other GNU Tools
@section Libtool

Automakeは，@samp{LTLIBRARIES}プライマリの追加でGNU Libtool(@pxref{Top,
, Introduction, libtool, The Libtool Manual})に対するサポートを提供しま
す．@xref{A Shared Library}.


@node Java, Python, Libtool, Other GNU Tools
@section Java

@cindex _JAVA primary, defined
@cindex JAVA primary, defined
@cindex Primary variable, JAVA

Automakeは@samp{JAVA}プライマリで，Javaコンパイルに対するいくつかの最低
限のサポートを提供します．

@samp{_JAVA}変数でリストアップされているすべての@file{.java}ファイルは，
ビルド時に@code{JAVAC}でコンパイルされます．デフォルトで，@file{.class}
ファイルは配布物に含められません．

@cindex JAVA restrictions
@cindex Restrictions for JAVA

現在のAutomakeには，@samp{_JAVA}プライマリを@file{Makefile.am}で一つだけ
しか使用不可能という制限があります．この制限の理由は，どの@file{.java}ファ
イルからどの@file{.class}ファイルが生成されるのかが通常は分からないため
です--そのため，どこにどのファイルをインストールするのか分かりません．例
えば，@file{.java}ファイルで複数のクラスを定義することが可能です．結果と
して得られる@file{.class}ファイル名は，@file{.java}ファイルをパースしな
い限り特定不可能です．

Javaソースをコンパイルする時に使用される変数がいくつかあります．

@vtable @code
@item JAVAC
Javaコンパイラの名前です．デフォルトは，@samp{javac}です．

@item JAVACFLAGS
コンパイラに渡すフラグです．これは，ユーザ変数として考慮されます
(@pxref{User Variables})．

@item AM_JAVACFLAGS
Javaコンパイラに渡す追加フラグです．@code{JAVACFLAGS}とは異なり，
@file{Makefile.am}にJavaコンパイラフラグを書く必要がある時に，これを使用
すべきではありません．

@item JAVAROOT
この変数の値は，@code{javac}に渡す@samp{-d}オプションです．デフォルトは，
@samp{$(top_builddir)}です．

@item CLASSPATH_ENV
この変数は，@code{javac}コマンドラインで@code{CLASSPATH}環境変数に設定す
るために使用される@code{sh}式です．(将来，クラスパスの設定を異なる方法で
扱うようにする予定です．)
@end vtable


@node Python,  , Java, Other GNU Tools
@section Python

@cindex _PYTHON primary, defined
@cindex PYTHON primary, defined
@cindex Primary variable, PYTHON

Automakeは，Pythonモジュールに対するサポートを提供します．Automakeは，
@file{configure.in}で@code{AM_PATH_PYTHON}マクロが使用されている場合，
Pythonのサポートを開始します．@samp{PYTHON}プライマリは，@file{.py}ファ
イルのリストを保持するために使用します．このプライマリに対して利用可能な
接頭辞は@samp{python_}と@samp{noinst_}です．@code{python_PYTHON}が定義さ
れている場合，@file{configure.in}で@code{AM_PATH_PYTHON}を実行する必要が
あることに注意してください．Pythonソースファイルは，デフォルトで配布物に
含まれます．

@code{AM_PATH_PYTHON}は，コンフィグレーションで分かったPythonのインストー
ル状況を基に，いくつかの出力変数を生成します．

@vtable @code
@item PYTHON
Pythonの実行形式の名前です．

@item PYTHON_VERSION
@var{major}.@var{minor}形式(例えば，@samp{1.5})の，Pythonのバージョンナ
ンバーです．これは，現在@code{sys.version[:3]}の値です．

@item PYTHON_PREFIX
文字列@code{$prefix}です．この単語は，Pythonの@code{sys.prefix}の内容が
必要となる将来の動作で使用されるかもしれませんが，一般的な同意事項として
@code{configure}からの値が常に使用されます．

@item PYTHON_EXEC_PREFIX
文字列@code{$exec_prefix}です．この単語は，Pythonの
@code{sys.exec_prefix}の内容が必要となる将来の動作で使用されるかもしれま
せんが，一般的な同意事項として@code{configure}からの値が常に使用されます．

@item PYTHON_PLATFORM
Pythonがオペレーティングシステムを記述するために使用する標準的な名前で，
@code{sys.platform}で与えられます．この値は，Pythonの拡張をビルドする時，
必要となる時もあります．

@item pythondir
標準的にPythonがインストールされるツリーの，@file{site-packages}サブディ
レクトリのディレクトリの名前です．

@item pkgpythondir
これは，パッケージの後で命名される@code{pythondir}以下のディレクトリです．
すなわち，それは@samp{$(pythondir)/$(PACKAGE)}です．それは便宜上提供され
ます．

@item pyexecdir
これは，Pythonの拡張モジュール(共有ライブラリ)がインストールされるディレ
クトリです．

@item pkgpyexecdir
これは，@samp{$(pyexecdir)/$(PACKAGE)}として定義されている，便宜上の変数
です．
@end vtable

@vindex PYCFILES
@vindex PYOFILES

デフォルトで，Pythonソースファイルは，@file{.pyc}と@file{.pyo}の両方の形
式にバイトコンパイルされます．最適化されたバイトコードファイルを生成した
くない場合，単純に変数@code{PYOFILES}を空で定義してください．同様に，標
準的なバイトコードファイルを生成したくない場合，変数@code{PYCFILES}を空
で定義してください．


@node Documentation, Install, Other GNU Tools, Top
@chapter ドキュメントのビルド

現在Automakeは，Texinfoとman pageに対するサポートを提供します．

@menu
* Texinfo::                     Texinfo
* Man pages::                   Man pages
@end menu


@node Texinfo, Man pages, Documentation, Documentation
@section Texinfo

@cindex _TEXINFOS primary, defined
@cindex TEXINFOS primary, defined
@cindex Primary variable, TEXINFOS

カレントディレクトリにTexinfoソースを含んでいる場合，@samp{TEXINFOS}プラ
イマリでそれを宣言する必要があります．通常，Texinfoファイルはinfoに変換
されるので，@code{info_TEXINFOS}マクロが最も一般的に使用されます．すべて
のTexinfoソースファイルは，@file{.texi}，@file{.txi}，または
@file{.texinfo} の拡張子で終える必要があります．新しいマニュアルには，
@file{.texi}を推奨します．

@vindex TEXINFOS
@vindex info_TEXINFOS

@cindex Texinfo macro, VERSION
@cindex Texinfo macro, UPDATED
@cindex Texinfo macro, EDITION
@cindex Texinfo macro, UPDATED-MONTH

@cindex VERSION Texinfo macro
@cindex UPDATED Texinfo macro
@cindex EDITION Texinfo macro
@cindex UPDATED-MONTH Texinfo macro

@cindex mdate-sh

@file{.texi}ファイルが@file{version.texi}を@code{@@include}する場合，そ
のファイルが自動的に生成されます．ファイル@file{version.texi}は，参照可
能な４つのTexinfoマクロを定義します．

@table @code
@item EDITION
@itemx VERSION
これらのマクロは両方とも，プログラムのバージョンナンバーです．それらは明
確さのために別にしています．

@item UPDATED
これは，主要な@file{.texi}が最後に修正された日付を保持します．

@item UPDATED-MONTH
これは，主要な@file{.texi}が最後に修正された月名を保持します．
@end table

@file{version.texi}サポートには，@code{mdate-sh}プログラムが必要です．こ
のプログラムはAutomakeと一緒に供給されていて，@code{automake}が
@code{--add-missing}オプションで呼び出される時，自動的に含まれます．

複数のTexinfoファイルがあり，@file{version.texi}の機能を使用したい場合，
それぞれのTexinfoファイルに対し個別のバージョンファイルを持たせる必要が
あります．Automakeは@samp{vers*.texi}に一致する，Texinfoファイル内含まれ
るものを，単純に自動的に生成されたバージョンファイルとして扱います．

infoファイルが再びビルドされる時，@code{MAKEINFO}変数で指名されたプログ
ラムが，それを呼び出すために使用されます．システムで@code{makeinfo}が見
つかる場合，それがデフォルトで使用されます．それ以外の場合，
@code{missing}が代わりに使用されます．変数@code{MAKEINFOFLAGS}と
@code{AM_MAKEINFOFLAGS}にあるフラグは，@code{makeinfo}の呼び出しで渡され
ます．前者は，ユーザが使用する(@pxref{User Variables})目的で，後者は
@file{Makefile.am}の著者が使用する目的です．
@vindex MAKEINFO
@vindex MAKEINFOFLAGS
@vindex AM_MAKEINFOFLAGS

infoファイルが，実際には１つ以上の@file{.texi}ファイルに依存する場合もあ
ります．例えば，GNU Helloでは，@file{hello.texi}は@file{gpl.texi}ファイ
ルを含みます．@code{@var{texi}_TEXINFOS}変数を使用することでこれらの依存
性をAutomakeに伝えることが可能です．GNU Helloで用いた方法は，以下のよう
になっています．
@vindex TEXINFOS
@vindex _TEXINFOS

@example
info_TEXINFOS = hello.texi
hello_TEXINFOS = gpl.texi
@end example

@cindex texinfo.tex

デフォルトでAutomakeは，ファイル@file{texinfo.tex}がTexinfoソースと同じ
ディレクトリに存在することを要求します．しかし，@file{configure.in}で
@code{AC_CONFIG_AUX_DIR}を使用した場合(@pxref{Input, , Finding
`configure' Input, autoconf, The Autoconf Manual})，@file{texinfo.tex}は
そこで探されます．Automakeは，@samp{--add-missing}が与えられている場合，
@file{texinfo.tex}を供給します．

@vindex TEXINFO_TEX

多くのディレクトリにTexinfoファイルがあるパッケージの場合，パッケージに
対する標準的な@file{texinfo.tex}がある場所をAutomakeに伝えるため，変数
@code{TEXINFO_TEX}を使用することが可能です．この変数の値は現在の
@file{Makefile.am}から@file{texinfo.tex}への相対的なパスにすべきです．

@example
TEXINFO_TEX = ../doc/texinfo.tex
@end example

@opindex no-texinfo.tex

オプション@samp{no-texinfo.tex}を，@file{texinfo.tex}を要求することを止
めるために使用することが可能です．しかし，変数@code{TEXINFO_TEX}の使用は
望ましく，それで@code{dvi}ターゲットを動作することが可能になるためです．

@cindex Target, install-info
@cindex Target, noinstall-info
@cindex install-info target
@cindex noinstall-info target

@opindex no-installinfo
@trindex install-info

Automake generates an @code{install-info} target; some people apparently
use this.  By default, info pages are installed by @samp{make install}.
This can be prevented via the @code{no-installinfo} option.

Automakeは@code{install-info}ターゲットを生成します．これを明示的に使用
する人もいます．デフォルトで，infoページは@samp{make install}でインストー
ルされます．これは@code{no-installinfo}オプションによって止めることが可
能です．


@node Man pages,  , Texinfo, Documentation
@section manページ

@cindex _MANS primary, defined
@cindex MANS primary, defined
@cindex Primary variable, MANS

パッケージにmanページを含めることも可能です(しかし，この件に関しては，
@ref{Man Pages, , , standards, The GNU Coding Standards},を参照してくだ
さい)．manページは，@samp{MANS}プライマリを使用して宣言します．一般に 
@code{man_MANS}マクロを使用します．manページは，@code{mandir}の正しいサ
ブディレクトリに，ファイル拡張子に基づいて自動的にインストールされます．
@vindex MANS
@vindex man_MANS

@samp{.1c}のようなファイルの拡張子は，有効な拡張子を探すために処理され，
@code{mandir}の正しいサブディレクトリを決定するために使用されます．有効
なセクション名は，10進数の@samp{0}から@samp{9}と，文字の@samp{l}と
@samp{n}です．

開発者によっては，ソースファイルで@file{foo.man}のようなファイル名でman 
ページを命名し，ファイルをインストールする時に，例えば@file{foo.1}のよう
な正しい接尾子を持つものに名前を変更したい時もあります．Automakeはこのモー
ドもサポートします．有効なセクションに命名された@var{SECTION}に対して，
@samp{man@var{SECTION}dir}と命名されている対応するディレクトリと，対応す
る@samp{_MANS}変数があります．そのような変数でリストアップされているファ
イルは，示されているセクションにインストールされます．ファイルに有効な接
尾子が既についている場合，それはそのままインストールされます．それ以外の
場合，ファイルの接尾子はセクションに一致するように変更されます．

例えば，以下のような例を考えます．
@example
man1_MANS = rename.man thesame.1 alsothesame.1c
@end example

この場合，@file{rename.man}はインストールする時に@file{rename.1}に名前を
変更され，他のファイルはその名前のままになります．

@cindex Target, install-man
@cindex Target, noinstall-man
@cindex install-man target
@cindex noinstall-man target

@c Use @samp{make install} per documentation: (texi)code.

デフォルトで，man pageは@samp{make install}でインストールされます．しか
し，GNUプロジェクトはmanページを必要としないので，多くの管理者はmanペー
ジを最新にしておきません．この場合，@code{no-installman}オプションでman
ページをデフォルトでインストールしないようにします．ユーザーは 
@samp{make install-man}によって，明示的にそれらをインストールすることが
できます．
@opindex no-installman
@trindex install-man

(Texinfoドキュメントとmanページの両方を含んでいる)GNU@code{cpio}では，ド
キュメントを以下のようにして処理しています．

@example
man_MANS = cpio.1 mt.1
EXTRA_DIST = $(man_MANS)
@end example

manページは，現在ソースであると考慮されておらず，そのわけはmanページが自
動的に生成されることが珍しくないからです．このため，それらは自動的に配布
物に含められません．しかし，これは@samp{dist_}接頭辞を使用することで変更
可能です．

@samp{nobase_}接頭辞はmanページに対しては意味が無く利用できません．


@node Install, Clean, Documentation, Top
@chapter インストールされるもの

@cindex Installation support
@cindex make install support

@section 基本的なインストール

当然Automakeは，一旦ビルドされたプログラムを実際のインストールの細部にわ
たって処理を行ないます．様々なプライマリで指名されているすべてのファイル
は，ユーザが@code{make install}を実行する時に，適切な場所に自動的にイン
ストールされます．

プライマリで指名されているファイルは，ビルドされたファイルを適切なディレ
クトリにコピーすることでインストールされます．ファイルのベース名はインス
トール時に使用されます．

@example
bin_PROGRAMS = hello subdir/goodbye
@end example

この例では，@samp{hello}と@samp{goodbye}の両方が@code{$(bindir)}にインス
トールされます．

インストール時にベース名の段階を避けた方が役に立つこともあるでしょう．例
えば，ソースツリーのサブディレクトリに，インストール時に正確に配置したい
ヘッダファイルがいくつかあるかもしれません．この場合，ベース名の段階を停
止するために，@samp{nobase_}接頭辞を使用することが可能です．例えば以下の
ようにします．

@example
nobase_include_HEADERS = stdio.h sys/types.h
@end example

これで，@file{stdio.h}は@code{$(includedir)}に，そして@file{types.h}は
@code{$(includedir)/sys}にインストールされます．


@section インストールの2つの部分

インストーラーが共有ディレクトリ構造を持っている複数のマシンにインストー
ルする場合，Automakeは@code{install-data}と@code{install-exec}ターゲット
を分けて生成します---これらのターゲットで，マシンに依存しない部分を一度
にインストールすることができます．@code{install-exec}はプラットフォーム
に依存するファイルをインストールし，@code{install-data}はプラットフォー
ムに依存しないファイルをインストールします．@code{install}ターゲットはこ
れらのターゲットの両方に依存します．Automakeは，オブジェクトを正しいカテ
ゴリに自動的に区別するよう試みますが，@file{Makefile.am}の作者は，これが
正しく行なわれていることを確かめる責任があります．
@trindex install-data
@trindex install-exec
@trindex install
@cindex Install, two parts of

@samp{data}，@samp{info}，@samp{man}，@samp{include}，@samp{oldinclude}，
@samp{pkgdata}，または@samp{pkginclude}(例えば @samp{data_DATA})といった
標準ディレクトリの接頭辞を使用している変数は，@samp{install-data}でイン
ストールされます．

@samp{bin}，@samp{sbin}，@samp{libexec}，@samp{sysconf}，
@samp{localstate}，@samp{lib}，または@samp{pkglib}(例えば 
@samp{bin_PROGRAMS})といった標準ディレクトリの接頭辞を使用している変数は， 
@samp{install-exec}でインストールされます．

ユーザーが定義した名前で，名前に@samp{exec}を含むディレクトリ接頭辞を使
用している変数は(例えば@samp{myexecbin_PROGRAMS})，@samp{install-exec}で
インストールされます．ユーザーによって定義されたそれ以外のすべての接頭辞
は，@samp{install-data}でインストールされます．


@section インストールの拡張

@code{install-exec-local}や@code{install-data-local}ターゲットを定義する
ことで，このメカニズムを拡張することが可能です．これらのターゲットが存在
する場合，それらは@samp{make install}時に実行されます．これらの規則でほ
とんどすべてのことが可能になります．注意が必要です．
@trindex install-exec-local
@trindex install-data-local

Automakeは， @code{install-exec-hook}と@code{install-data-hook}の，2つの
インストールのフックもサポートします．これらのフックは，適切な形式，exec 
やdataといった，他のすべてのインストール規則が完了した後で実行されます．
そのため，例えば，インストールのフックを使用して，インストール後の変更を
実施することが可能です．
@cindex Install hook


@section インストールの実行

@vindex DESTDIR
Automakeは，すべてのインストール規則で，@samp{DESTDIR}変数に対するサポー
トを生成します．@samp{DESTDIR}は，インストールオブジェクトを実施領域に再
配置する@samp{make install}の段階で使用されます．それぞれのオブジェクト
とパスは，インストール領域にコピーされる前に，@samp{DESTDIR}の値が前置さ
れます．典型的なDESTDIR使用法の例は，以下のようになります．

@example
make DESTDIR=/tmp/staging install
@end example

こうすると，インストールオブジェクトを，@file{/tmp/staging}の下に構築さ
れているディレクトリツリーに配置します．@file{/gnu/bin/foo}と
@file{/gnu/share/aclocal/foo.m4}がインストールされる場合，上のコマンドで
は，@file{/tmp/staging/gnu/bin/foo}と
@file{/tmp/staging/gnu/share/aclocal/foo.m4}にインストールされます．

この機能は，インストールイメージとパッケージをビルドするために，通常使用
されます．詳細は，@ref{Makefile Conventions, , , standards, The GNU
Coding Standards},を参照してください．

@samp{DESTDIR}に対するサポートは，インストール規則に直接コーディングする
ことで実装されています．@file{Makefile.am}でローカルインストール規則(例
えば，@code{install-exec-local})やインストールフックを使用している場合，
@samp{DESTDIR}に対応するコードを書く必要があります．


@section ユーザのための規則

Automakeは，@code{uninstall}ターゲット，@code{installdirs}ターゲット，そ
して@code{install-strip}ターゲットも生成します．
@trindex uninstall
@trindex installdirs
@trindex install-strip

Automakeは，@code{uninstall-local}と@code{uninstall-hook}をサポートしま
す．``exec''と``data''に対してアンインストールを分けることは意味が無いの
で必要ありません．

@code{uninstall}には，実際のパッケージツールを置換する意味が無いことに注
意してください．


@node Clean, Dist, Install, Top
@chapter クリーンされるもの

@cindex make clean support

GNU Makefile Standardsは多くの異なったクリーンの規則を指定します．
@c FIXME xref

一般に，クリーンされるファイルはAutomakeが自動的に決定します．もちろん，
Automakeはクリーンするファイルを追加で指定するために定義することが可能な
変数も認識します．これらの変数は@code{MOSTLYCLEANFILES}，
@code{CLEANFILES}，@code{DISTCLEANFILES}，そして
@code{MAINTAINERCLEANFILES}です．
@vindex MOSTLYCLEANFILES
@vindex CLEANFILES
@vindex DISTCLEANFILES
@vindex MAINTAINERCLEANFILES

ターゲットによって削除されるファイルは，GNU Standardsで常に明示されてい
るというわけではないので，我々は，Fran@,{c}ois Pinardが最初に公式化した
ものを信じて，発見的手法で適用してきました．

@itemize @bullet 
@item
@code{make}がビルドするもので，通常，それをリビルドしたい時があるもの(例
えば，@file{.o}ファイル)は，@code{mostlyclean}でそれを削除します．

@item
それ以外で，@code{make}がビルドするものは，@code{clean}で削除します．

@item
@code{configure}でビルドするものは，@code{distclean}で削除します．

@item
管理者がビルドするものは，@code{maintainer-clean}で削除します．
@end itemize

我々は，皆さんの@file{Makefile.am}で発見的に同じように設定するよう，この
ことに従って欲しいと思っています．


@node Dist, Tests, Clean, Top
@chapter 配布物に含まれるもの

@section 基本的な配布物

@cindex make dist
@cindex make distcheck

@file{Makefile.in}で生成された@code{dist}ターゲットは，配布物に対して
gzipされた@code{tar}ファイルを生成するときに使用することが可能です．tar 
ファイルは@samp{PACKAGE}と@samp{VERSION}変数に基づいて命名されます．より
正確には@samp{@var{package}-@var{version}.tar.gz}と命名されます．
@cvindex PACKAGE
@cvindex VERSION
@trindex dist
gzipを実行する方法を制御するために，@code{make}の@samp{GZIP_ENV}変数を使
用することが可能です．デフォルト設定は@samp{--best}です．

配布するファイルは，ほとんどのものを自動的にAutomakeが見つけます．ソース
ファイルはすべて自動的に配布物に含まれ，すべての@file{Makefile.am}と
@file{Makefile.in}も同様に扱われます．Automakeには，カレントディレクトリ
にある場合は自動的に含まれる，一般的に使用されるファイルの組み込みリスト
があります．このリストは@samp{automake --help}で出力されます．
@code{configure}で読まれるファイルも(すなわち@code{AC_OUTPUT}の呼び出し
で指定されているファイルに対応しているソースファイル)，自動的に配布され
ます．

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

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

@vindex EXTRA_DIST


@section きめ細かな配布物の制御

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

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

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


@section distフック

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

@example
EXTRA_DIST = doc

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

@code{SUBDIRS}を定義している場合，Automakeはサブディレクトリを再帰的に配
布物に含めます．@code{SUBDIRS}を条件つきで定義している場合
(@pxref{Conditionals})，Automakeは，通常，@code{SUBDIRS}にあるすべてのディ
レクトリをできる限り配布物に含めます．条件つきでディレクトリの組を指定す
る必要がある場合，配布物に含めるサブディレクトリの正確なリストを変数
@code{DIST_SUBDIRS}にセットすることで可能となります．
@vindex DIST_SUBDIRS

@trindex dist-hook

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

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


@section 配布物の調査

Automakeは，与えられた配布物が実際に動作すること保証に役立つ
@code{distcheck}を生成します．@code{distcheck}は実際に配布物を作成し，
@code{VPATH}のビルドを試みます．
@trindex distcheck

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


@section 配布物の形式

デフォルトでAutomakeは，配布物を生成する要求があった時，@samp{.tar.gz}ファ
イルを生成します．しかし，プロジェクトによっては，異なるパッケージフォー
マットが好ましい場合もあります．Automakeはこれらの使用されているオプショ
ンのほとんどに順応します．@ref{Options}.

Automakeは，要求されるすべてのパッケージされた配布物を一度に作成するため
に使用可能な，@code{dist-all}ターゲットも生成します．


@node Tests, Options, Dist, Top
@chapter テストスイートのサポート

@cindex Test suites
@cindex make check

Automakeは２つの形式のテストスイートをサポートします．

@section 単純なテスト

変数@code{TESTS}が定義されている場合，その値はテストを行なうために実行す
るプログラムのリストになります．プログラムは，得られるオブジェクトあるい
はソースオブジェクトです．生成される規則は@code{srcdir}と@file{.}の両方
を見ます．データファイルを必要としているプログラムは，(環境変数とmake変
数の両方となる)@code{srcdir}でそれらを探し，それらは，別々のディレクトリ
でビルドするとき(@pxref{Build Directories, , Build Directories ,
autoconf, The Autoconf Manual})，特に@code{distcheck}ターゲットに対して
動作します(@pxref{Dist})．

@cindex Exit status 77, special interpretation

失敗の数は実行後に出力されます．所定のテストプログラムが77のステータスで
終了する場合，その結果は最終的なカウントで無視されます．この機能で，非移
植性のテストが意味をなさない環境で無視することができます．

変数@code{TESTS_ENVIRONMENT}は，テストの実行に対して環境変数を設定するた
めに使用することが可能です．環境変数@code{srcdir}は，規則内に設定されま
す．すべてのテストプログラムがスクリプトの場合，@code{TESTS_ENVIRONMENT} 
をシェルの呼び出しに設定することが可能です(例えば@samp{$(SHELL) -x})．こ
れはテストをデバッグするときに役立つはずです．
@vindex TESTS
@vindex TESTS_ENVIRONMENT

@cindex Tests, expected failure
@cindex Expected test failure

変数@code{XFAIL_TESTS}を，失敗を期待するテストのリスト(通常は
@code{TESTS}のサブセット)に定義することが可能です．これは，それらのテス
トの結果を反転します．
@vindex XFAIL_TESTS

Automakeは，@code{TESTS}でリストアップされているそれぞれのプログラムが，
テストを実行する前にビルドされることを確実にします．ソースと派生するプロ
グラムを@code{TESTS}にリストアップすることが可能です．例えば，テストとし
てCプログラムを実行したいかもしれません．こうするためには，その名前を
@code{TESTS}と@code{check_PROGRAMS}にリストアップし，それを他のプログラ
ムとして指定します．


@section DejaGNUのテスト

@uref{ftp://prep.ai.mit.edu/pub/gnu/dejagnu-1.3.tar.gz,@samp{dejagnu}}が
@code{AUTOMAKE_OPTIONS}にある場合，@code{dejagnu}ベースのテストスイート
が想定されます．変数@code{DEJATOOL}は，@code{runtest}の呼び出しに
@code{--tool}引数として，一度に渡される名前のリストです．それはパッケー
ジの名前をデフォルトとします．

変数@code{RUNTESTDEFAULTFLAGS}は，デフォルトでdejagnuに渡される
@code{--tool}と@code{--srcdir}フラグを保持します．必要な場合は，これで優
先可能です．
@vindex RUNTESTDEFAULTFLAGS

変数@code{EXPECT}と@code{RUNTEST}で，プロジェクト特定の値を提供するため
に優先可能です．例えば，コンパイラツールチェインをテストする場合，デフォ
ルト値はホストとターゲットの名前を考慮しないので，こうする必要があります．
@opindex dejagnu
@vindex DEJATOOL
@vindex EXPECT
@vindex RUNTEST

変数@code{RUNTESTFLAGS}の内容は，@code{runtest}の呼び出しに渡されます．
これは，``ユーザ変数''(@pxref{User Variables})として扱われます．
@file{Makefile.am}に@code{runtest}フラグを設定する必要がある場合，代わり
に@code{AM_RUNTESTFLAGS}を使用することが可能です．

@vindex RUNTESTFLAGS
@vindex AM_RUNTESTFLAGS
@c FIXME xref dejagnu

いずれの場合でも，テストは@samp{make check}で実行されます．


@node Options, Miscellaneous, Tests, Top
@chapter Automakeの動作の変更

Automakeの様々な機能は，@file{Makefile.am}のオプションで制御可能です．こ
のようなオプションは，@code{AUTOMAKE_OPTIONS}という名前の特別な変数にリ
ストアップします．現在理解されるオプションは以下のとおりです．
@vindex AUTOMAKE_OPTIONS

@table @asis
@item @code{gnits}
@itemx @code{gnu}
@itemx @code{foreign}
@itemx @code{cygnus}
@cindex Option, gnits
@cindex Option, gnu
@cindex Option, foreign
@cindex Option, cygnus

適切に厳密さを設定します．@code{gnits}オプションは，@code{readme-alpha} 
と@code{check-news}も暗黙に指定します．

@item @code{ansi2knr}
@itemx @code{@var{path}/ansi2knr}
@cindex Option, ansi2knr
自動的なde-ANSI-ficationを開始します．@xref{ANSI}. パスが前置されている
場合，生成される@file{Makefile.in}は，@file{ansi2knr}プログラムを見つけ
るために指定されたディレクトリを探します．パスは(Automakeは現在これを調
査しませんが)，同じ配布物内の他のディレクトリへの相対的なパスにすべきで
す．

@item @code{check-news}
@cindex Option, check-news
現在のバージョンナンバーが@file{NEWS}ファイルの最初の数行に無い場合，
@code{make dist}は失敗します．

@item @code{dejagnu}
@cindex Option, dejagnu
@code{dejagnu}特有の規則を生成します．@xref{Tests}.

@item @code{dist-bzip2}
@cindex Option, dist-bzip2
通常の@code{dist}ターゲット同様，@code{dist-bzip2}を生成します．この新し
いターゲットで，配布物のbzip2のtarアーカイブを作成します．bzip2アーカイ
ブは，gzipされたアーカイブより小さくなることが多くなっています．
@trindex dist-bzip2

@item @code{dist-shar}
@cindex Option, dist-shar
通常の@code{dist}ターゲットと同様，@code{dist-shar}ターゲットを生成しま
す．この新しいターゲットで，配布物のsharアーカイブを作成します．
@trindex dist-shar

@item @code{dist-zip}
@cindex Option, dist-zip
通常の@code{dist}ターゲットと同様，@code{dist-zip}ターゲットを生成します．
この新しいターゲットで，配布物のzipアーカイブを作成します．
@trindex dist-zip

@item @code{dist-tarZ}
@cindex Option, dist-tarZ
通常の@code{dist}ターゲットと同様，@code{dist-tarZ}ターゲットを生成しま
す．この新しいターゲットで，配布物のの圧縮されたtarアーカイブを作成します．
@trindex dist-tarZ

@item @code{no-dependencies}
@cindex Option, no-dependencies
これは，コマンドラインで@samp{--include-deps}を使用することに似ています
が，自動的な依存追跡の仕事をするために必要なビットを持っていない状態で役
立ちます．@xref{Dependencies}. この場合，効率的な自動的な依存追跡に障害
を与えます．

@item @code{no-exeext}
@cindex Option, no-exeext
@file{Makefile.am}でターゲット@samp{foo}を定義している場合，
@samp{foo$(EXEEXT)}と指名されているターゲットに優先します．@code{EXEEXT} 
が空のとき，これが必要です．しかし，デフォルトで，automakeはこれを使用す
ることに対してエラーを発生します．@code{no-exeext}オプションで，このエラー
が発生しないようにします．これは，Windowsや実行形式の拡張子を使用してい
るそれ以外のすべてのオペレーティングシステムに移植する予定の無いパッケー
ジだと分かっている場合のみ使用するものです．

@item @code{no-installinfo}
@cindex Option, no-installinfo
生成された@file{Makefile.in}はデフォルトで，infoページをビルドしたりイン
ストールしたりしません．しかし，@code{info}と@code{install-info}ターゲッ
トは利用可能です．このオプションは@samp{GNU}の厳密さでは拒絶されます．
@trindex info
@trindex install-info

@item @code{no-installman}
@cindex Option, no-installman
生成された@file{Makefile.in}はデフォルトでman pageをインストールしません．
しかし，@code{install-man}ターゲットはオプショナルインストールで利用可能
です．このオプションは@samp{GNU}の厳密さで使用不可能です．
@trindex install-man

@item @code{nostdinc}
@cindex Option, nostdinc
このオプションは，通常Automakeが自動的に供給する，標準的な@samp{-I}オプ
ションを利用不可能にするために使用可能です．

@item @code{no-texinfo.tex}
@cindex Option, no-texinfo
このディレクトリにtexinfoファイルがあっても，@file{texinfo.tex}を必要と
しません．

@item @code{readme-alpha}
@cindex Option, readme-alpha
このリリースがアルファリリースで，ファイル@file{README-alpha}が存在する
場合，それは配布物に加えられます．このオプションが与えられている場合，バー
ジョンナンバーは次の２つの形式のうちの１つだと期待されます．最初の形式は
@samp{@var{MAJOR}.@var{MINOR}.@var{ALPHA}}で，それぞれの要素が数字です．
最後のピリオドと数字は非アルファのリリースのときに残されます．２番目の形
式は@samp{@var{MAJOR}.@var{MINOR}@var{ALPHA}}で，@var{ALPHA}は文字列です．
それは非アルファのリリースのときに除かれます．

@item @code{subdir-objects}
このオプションが指定されている場合，オブジェクトはソースファイルのサブディ
レクトリに対応する，ビルドディレクトリのサブディレクトリに配置されます．
例えば，ソースファイルが@file{subdir/file.cxx}の場合，出力ファイルは
@file{subdir/file.o}になります．

@item @var{version}
@cindex Option, version
バージョンナンバー(例えば@samp{0.30})が指定可能です．Automakeが，指定さ
れているバージョンより新しくない場合，@file{Makefile.in}の作成は行なわれ
ません．
@end table

認識できないオプションは@code{automake}が判断します．


@node Miscellaneous, Include, Options, Top
@chapter 雑多な規則

他のどこにも適さない少数の規則と変数があります．

@menu
* Tags::                        Interfacing to etags and mkid
* Suffixes::                    Handling new file extensions
* Multilibs::                   Support for multilibbing.
@end menu


@node Tags, Suffixes, Miscellaneous, Miscellaneous
@section @code{etags}のインターフェース

@cindex TAGS support

Automakeは，GNU Emacsで使用する@file{TAGS}ファイルを生成するための規則を
生成する場合もあります．

C，C++，またはFortran 77のソースコードやヘッダーが存在している場合，
@code{tags}と@code{TAGS}ターゲットがディレクトリに対して生成されます．
@trindex tags

複数のディレクトリがあるパッケージのトップディレクトリで，@code{tags}ター
ゲットファイルは実行時に生成され，それは，サブディレクトリにあるすべての
@file{TAGS}の参照によって含有している@file{TAGS}ファイルを生成します．

変数@code{ETAGS_ARGS}が定義される場合，@code{tags}ターゲットも生成されま
す．この変数は，@code{etags}が理解しないタグを使ったソースを含んでいるディ
レクトリでの使用を考慮しています．
@vindex ETAGS_ARGS

ソースとTexinfoファイルのノードに対するタグをAutomakeで生成する方法は以
下のようになります．

@example
ETAGS_ARGS = automake.in --lang=none \
 --regex='/^@@node[ \t]+\([^,]+\)/\1/' automake.texi
@end example

@samp{ETAGS_ARGS}にファイル名を加える場合，おそらく
@samp{TAGS_DEPENDENCIES}も設定したいでしょう．この変数の中身は
@code{tags}ターゲット対する依存性を直接加ます．
@vindex TAGS_DEPENDENCIES

Automakeは，@code{mkid}をソース上で実行する@code{ID}ターゲットも生成しま
す．これはディレクトリ単位に基づくサポートだけです．
@trindex id

Automakeは@uref{http://www.gnu.org/software/global/, GNU Global Tags
program}もサポートします．@code{GTAGS}ターゲットは，自動的にGlobal Tagを
実行し，結果をビルドディレクトリに書き込みます．変数@code{GTAGS_ARGS}は，
@code{gtags}に渡す引数を保持しています．
@vindex GTAGS_ARGS


@node Suffixes, Multilibs, Tags, Miscellaneous
@section 新しいファイル拡張子の取扱

@cindex Adding new SUFFIXES
@cindex SUFFIXES, adding

Automakeが知らないファイル形式を処理するために，新しい暗黙の規則を導入す
ることが役に立つこともあります．こうする場合，新しい接尾子をGNU Makeに伝
える必要があります．これは，@code{SUFFIXES}変数に新しい接尾子のリストを
書き込むことで可能となります．
@vindex SUFFIXES

例えば，@samp{.foo}ファイルを@samp{.o}ファイルにコンパイルするコンパイラ
があると仮定します．その時，@samp{.foo}を接尾子リストに加えます．

@example
SUFFIXES = .foo
@end example

そして，@samp{_SOURCES}変数に@samp{.foo}ファイルを直接使用することが可能
で，正しい結果が期待できます．

@example
bin_PROGRAMS = doit
doit_SOURCES = doit.foo
@end example

与えられたすべての@code{SUFFIXES}は，生成される接尾子リストの最初に書か
れ，automakeが生成するリストにはまだない接尾子がそれに続きます．


@node Multilibs, , Suffixes, Miscellaneous
@section Multilibのサポート

Automakeには，multilibと呼ばれているあまり知られていない機能のサポートが
あります．@dfn{multilib}は，一度に複数の異なるABIのためにビルドされるラ
イブラリです．毎回，ライブラリが異なるターゲットフラグの組み合わせでビル
ドされます．これは，ライブラリがクロスコンパイルを目的としていて，コンパ
イラがサポートしているライブラリに対して，ほとんど排他的に使用される時の
み役に立ちます．

multilibのサポートはまだ実験中です．multilibを理解していて，遭遇した問題
をデバッグすることが可能な場合のみ，それを使用してください．


@node Include, Conditionals, Miscellaneous, Top
@chapter インクルード

@cmindex include
@cindex Including Makefile fragment
@cindex Makefile fragment, including

Automakは，@code{automake}が実行される時に，他の断片的な@file{Makefile} 
をインクルードするために使用可能な，@code{include}指示語をサポートします．
これらの断片は，@code{make}ではなく@code{automake}で読み込まれ解釈される
ことに注意してください．条件文同様，@code{make}には@code{include}を使用
する能力はありません．

@code{include}には，2つの書式があります．

@table @code
@item include $(srcdir)/file
現在のソースディレクトリに相対的なところで見つかった断片をインクルードし
ます．

@item include $(top_srcdir)/file
トップソースディレクトリに相対的なところで見つかった断片をインクルードし
ます．
@end table

断片が条件文を含む場合，条件文は断片の内容全体に適用されることに注意して
ください．


@node Conditionals, Gnits, Include, Top
@chapter 条件文

@cindex Conditionals

Automakeは単純な形式の条件文をサポートします．

@cvindex AM_CONDITIONAL
条件文を使用する前に，@code{configure.in}ファイルで@code{AM_CONDITIONAL} 
を使用してそれを定義する必要があります(@pxref{Macros})．

@defmac AM_CONDITIONAL (@var{conditional}, @var{condition})
条件名@var{conditional}は，文字で始まり，文字，数字，そしてアンダースコ
アのみを含む単純な文字列です．Automakeが@samp{TRUE}と@samp{FALSE}のどち
らを保持しているかで異なる必要があります．

シェルの@var{condition}(シェルの@code{if}文で使用されるのに適切なもの)は，
@code{configure}が実行される時に評価されます．@emph{すべての}
@code{AM_CONDITIONAL}が毎回@code{configure}の実行で呼び出されるように調
整する必要があります---@code{AM_CONDITIONAL}が条件つき(例えば，シェルの
@code{if}文)で実行される場合，結果としてautomakeが混乱します．
@end defmac

@cindex --enable-debug, example
@cindex Example conditional --enable-debug
@cindex Conditional example,  --enable-debug

条件文は一般的に，@code{configure}スクリプトでユーザーが供給するオプショ
ンに依存します．ユーザが@samp{--enable-debug}オプションを使用する場合，
真の条件を書く方法の例は，以下のようになります．

@example
AC_ARG_ENABLE(debug,
[  --enable-debug    Turn on debugging],
[case "$@{enableval@}" in
  yes) debug=true ;;
  no)  debug=false ;;
  *) AC_MSG_ERROR(bad value $@{enableval@} for --enable-debug) ;;
esac],[debug=false])
AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
@end example

@file{Makefile.am}でその条件文を使用する方法の例は，以下のようになります．

@cmindex if
@cmindex endif
@cmindex else

@example
if DEBUG
DBG = debug
else
DBG =
endif
noinst_PROGRAMS = $(DBG)
@end example

この簡単な例は，EXTRA_PROGRAMSを使用しているものを扱うこともできます
(@pxref{A Program})．

@code{if}文で，@samp{!}を使用した否定も可能な，単一の変数のみを調査した
いかもしれません．@code{else}文は省略可能です．条件文は任意の深さにネス
ト可能です．@code{else}に引数を指定することも可能ですが，いずれの場合で
も，現在の@code{if}に対して使用される条件の否定となっている必要がありま
す．同様に，@code{end}で閉じられた条件を指定することが可能です．

@example
if DEBUG
DBG = debug
else !DEBUG
DBG =
endif !DEBUG
@end example

@noindent
非対称の条件文はエラーとなります．

Automakeの条件文はGNU Makeの条件文とは同じでないことに注意してください．
Automakeの条件文は，configure時に@file{configure}スクリプトでチェックさ
れ，@file{Makefile.in}から@file{Makefile}への変換に影響を与えます．それ
らは，@file{configure}に渡すオプションと，@file{configure}がホストシステ
ムについて発見した結果に基づきます．GNU Makeの条件文は，@code{make}時に
調査され，makeプログラムに渡された，あるいは@file{Makefile}で定義された
変数に基づいています．

Automakeの条件文は，どんなmakeプログラムでも動作します．


@node Gnits, Cygnus, Conditionals, Top
@chapter @code{--gnu}と@code{--gnits}の効果

@cindex --gnu, required files
@cindex --gnu, complete description

@samp{--gnu}オプション(あるいは@samp{AUTOMAKE_OPTIONS}変数での
@samp{gnu})で，@code{automake}は以下のことを調査します．

@itemize @bullet
@item
@file{INSTALL}，@file{NEWS}，@file{README}，@file{COPYING}，
@file{AUTHORS}，そして@file{ChangeLog}というファイルがパッケージのトップ
ディレクトリにあることが必要です．

@item
@samp{no-installman}と@samp{no-installinfo}オプションは使用できません．
@end itemize

このオプションは，それ以上に調査するため，将来拡張されることでしょう．
GNU標準の正確な必要条件に精通することを勧めます．同様に，@samp{--gnu}は，
様々な管理者専用のターゲットで使用するために存在する，特定のGNU非標準の
プログラムを要求するはずです．例えば将来は，@code{pathchk}が@samp{make
dist}に対して要求されるかもしれません．

@cindex --gnits, complete description

@samp{--gnits}オプションは，@samp{--gnu}すべてと，以下のことも同様に調査
します．

@itemize @bullet
@item
@samp{make dist}は，@file{NEWS}ファイルが現在のバージョンに更新されたこ
とを確認するために調査します．

@item
@samp{VERSION}は，その書式ががGnits standardに従うことを確認するために調
査します．
@c FIXME xref when standards are finished

@item
@cindex README-alpha
@samp{VERSION}が，これがアルファリリースだということを示していて，ファイ
ル@file{README-alpha}がパッケージのトップディレクトリにある場合，それは
配布物に含められます．これは他ではなく，@samp{--gnits}モードでなされ，そ
の理由は，このモードがバージョンナンバーの書式に制限がある唯一のもので，
そのため，Automakeが自動的に@file{README-alpha}が含まれることを決定する
ことができる唯一のモードだからです．

@item
ファイル@file{THANKS}が必要です．
@end itemize


@node Cygnus, Extending, Gnits, Top
@chapter @code{--cygnus}の効果

@cindex Cygnus strictness

特にGNU GCCとGNU gdbのようなパッケージには，Cygnus Support(その後，
Cygnus Solutionsに名前が変更され，その後で Red Hat に買収されました)で通
常書かれているビルド環境変数があります．この系統のパッケージは，
``Cygnus''ツリーとして述べられる時もあります．

Cygnusツリーには，@file{Makefile.in}を構築する方法に対して，わずかに異なっ
た規則があります．@code{automake}へ@samp{--cygnus}を渡すことで，生成され
るすべての@file{Makefile.in}はCygnus規則に従います．

@samp{--cygnus}の正確な効果は，以下のようになっています．

@itemize @bullet
@item
infoファイルは，ソースディレクトリでではなく，常にビルドディレクトリで作
成されます．

@item
@file{texinfo.tex}は，Texinfoソースファイルが指定されている場合，要求さ
れません．ファイルは提供されるます，Automakeが見つけられない場所にあると
仮定します．この仮定は，Cygnusパッケージをまとめられる方法のartifact(欠
点)です．

@item
@samp{make dist}はサポートされておらず，その規則は生成されません．Cygnus 
形式のツリーは，独自の配布メカニズムを使用します．

@item
特定のツールを，ユーザーの@samp{PATH}同様にビルドツリーでも捜します．こ
れらのツールは，@code{runtest}，@code{expect}，@code{makeinfo}，そして
@code{texi2dvi}です．

@item
@code{--foreign}を暗黙に指定します．

@item
オプションの@samp{no-installinfo}と@samp{no-dependencies}を暗黙に指定し
ます．

@item
マクロ@samp{AM_MAINTAINER_MODE}と@samp{AM_CYGWIN32}が要求されます．

@item
@code{check}ターゲットは@code{all}に依存しません．
@end itemize

GNU管理者は，特別なCygnusモードではなく@samp{gnu}の厳密さを使用してくだ
さい．いつかはおそらく，CygnusツリーとGNUツリーの間の差が(例えば，GCCが
より標準に対応するように)なくなることでしょう．その時は，特殊なCygnusモー
ドは削除されるでしょう．


@node Extending, Distributing, Cygnus, Top
@chapter Automakeが不十分な時

Automakeの暗黙のコピーの意味は，単純にいくつかの@code{make}ターゲットと
@file{Makefile.in}の規則を加えることで，多くの問題が解決可能だということ
を意味します．Automakeはこれらの追加を無視します．

@cindex -local targets
@cindex local targets

これを行なうときにはいくつか注意することがあります．すでにAutomakeで使用
されているターゲットをオーバーロードすることが可能ですが，特にサブディレ
クトリのあるパッケージのトップディレクトリでは，あまり勧められません．し
かし，様々な有用なターゲットには，@file{Makefile.in}で指定可能な，
@samp{-local}バージョンがあります．Automakeはこれらのユーザが提供するター
ゲットを用いて標準ターゲットを補足します．

@trindex  all-local
@trindex  info-local
@trindex  dvi-local
@trindex  check-local
@trindex  install-data-local
@trindex  install-exec-local
@trindex  uninstall-local
@trindex  mostlyclean-local
@trindex  clean-local
@trindex  distclean-local

ローカルバージョンをサポートするターゲットは，@code{all}，@code{info}，
@code{dvi}，@code{check}，@code{install-data}， @code{install-exec}，
@code{uninstall}，そして様々な@code{clean}ターゲット(@code{mostlyclean}，
@code{clean}，@code{distclean}，そして@code{maintainer-clean})です．
@code{uninstall-exec-local}や@code{uninstall-data-local}ターゲットが無い
ことに注意してください．@code{uninstall-local}のみを使用してください．デー
タだけ，あるいは実行可能プログラムだけをアンインストールすることには意味
がありません．
@trindex all
@trindex info
@trindex dvi
@trindex check
@trindex install-data
@trindex install-exec
@trindex uninstall

例えば，ファイルを@file{/etc}にインストールする一つの方法は，以下のよう
になります．

@example
install-data-local:
        $(INSTALL_DATA) $(srcdir)/afile /etc/afile
@end example

@cindex -hook targets
@cindex hook targets

ターゲットには，@dfn{hook}と呼ばれる，その仕事が終った後にもう１つのター
ゲットを実行する方法もあります．フックは，主要なターゲットに@samp{-hook} 
を追加して命名します．フックが可能なターゲットは，@code{install-data}，
@code{install-exec}，@code{dist}，そして@code{distcheck}です．
@trindex install-data-hook
@trindex install-exec-hook
@trindex dist-hook

例えば，インストールしたプログラムにハードリンクを作成する方法は，以下の
ようになります．

@example
install-exec-hook:
        ln $(bindir)/program $(bindir)/proglink
@end example

@c FIXME should include discussion of variables you can use in these
@c rules


@node Distributing, Macro and Variable Index, Extending, Top
@chapter @file{Makefile.in}の配布

Automakeは，結果として生じる@file{Makefile.in}の配布に制限を置きません．
我々は，ソフトウェアの著者にGPLのような用語の下でその仕事を流通するよう
奨励しますが，そうすることはAutomakeを使うことによって要求されません．

@code{--add-missing}スイッチによって自動的にインストール可能なファイルに
はGPLに従うものもあります．しかし，選択したライセンスを気にせず，パッケー
ジとともに配布することができるよう，これらにも特別な例外があります．


@page
@node Macro and Variable Index, General Index, Distributing, Top
@unnumbered マクロと変数の索引

@printindex vr


@page
@node General Index,  , Macro and Variable Index, Top
@unnumbered 一般的な索引

@printindex cp


@page
@contents
@bye
