\input texinfo @c -*-texinfo-*-
@c %**start of header
@setfilename autoconf-ja.info
@settitle Autoconf

@c @documentlanguage ja

@finalout
@setchapternewpage odd
@setcontentsaftertitlepage

@include autoconf-v.texi

@c A simple macro for optional variables.
@ignore
マクロ定義の削除

@macro ovar{varname}
@r{[}@var{\varname\}@r{]}
@end macro

@c I don't like the way URL are displayed in TeX with @uref.
@ifhtml
@macro href{url, title}
@uref{\url\, \title\}
@end macro
@end ifhtml
@ifnothtml
@macro href{url, title}
\title\@footnote{\title\, @url{\url\}.}
@end macro
@end ifnothtml

@end ignore

@dircategory GNU admin
@direntry
* Autoconf(ja): (autoconf-ja).         Create source code configuration scripts
@end direntry

@dircategory Individual utilities
@direntry
* autoscan(ja): (autoconf-ja)autoscan Invocation.
                                Semi-automatic @file{configure.ac} writing
* ifnames(ja): (autoconf-ja)ifnames Invocation.
                                Listing the conditionals in source code
* autoconf(ja): (autoconf-ja)autoconf Invocation.
                                How to create configuration scripts
* autoreconf(ja): (autoconf-ja)autoreconf Invocation.
                                Remaking multiple @code{configure} scripts
* configure(ja): (autoconf-ja)configure Invocation.
                                Configuring a package
* config.status(ja): (autoconf-ja)config.status Invocation.
                                Recreating a configuration
@end direntry

@ifinfo
@c Autoconf: Creating Automatic Configuration Scripts, by David MacKenzie.
@c 
Autoconf: 自動的にコンフィグレーションスクリプトを作成する．David
MacKenzie作．

@c This file documents the GNU Autoconf package for creating scripts to
@c configure source code packages using templates and an @code{m4} macro
@c package.
@c 
このファイルは，テンプレートと@code{m4}マクロパッケージを使用しながら，
ソースコードパッケージをコンフィグレーションするためのスクリプトを生成す
る，GNU Autoconfパッケージを説明します．

Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 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 (this
paragraph not being relevant to the printed manual).

@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 Autoconf
@subtitle Creating Automatic Configuration Scripts
@subtitle Edition @value{EDITION}, for Autoconf version @value{VERSION}
@subtitle @value{UPDATED}
@author David MacKenzie and Ben Elliston
@c I think I've rewritten all of Noah and Roland's contributions by now.
@c 翻訳 西尾 太


@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
2001 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.

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 titlepage

@c Define an environment variable index.
@defcodeindex ev
@c Define an output variable index.
@defcodeindex ov
@c Define a CPP variable index.
@defcodeindex cv
@c Define an Autoconf macro index that @defmac doesn't write to.
@defcodeindex ma
@c Define an M4sugar macro index that @defmac doesn't write to.
@defcodeindex ms

@node Top, Introduction, (dir), (dir)
@comment  node-name,  next,  previous,  up

@ifinfo
@c This file documents the GNU Autoconf package for creating scripts to
@c configure source code packages using templates and the GNU M4 macro
@c package.  This is edition @value{EDITION}, for Autoconf version
@c @value{VERSION}.
@c 
このファイルは，テンプレートとGNU M4マクロパッケージを使用しながら，ソー
スコードパッケージをコンフィグレーションするためのスクリプトを生成する，
GNU Autoconfパッケージを説明します．これは，エディション@value{EDITION}
で，Autoconfのバージョン@value{VERSION}に対応するものです．
@end ifinfo

@c The master menu, created with texinfo-master-menu, goes here.

@menu
* Introduction::                Autoconf's purpose, strengths, and weaknesses
* The GNU build system::        A set of tools for portable software packages
* Making configure Scripts::    How to organize and produce Autoconf scripts
* Setup::                       Initialization and output
* Existing Tests::              Macros that check for particular features
* Writing Tests::               How to write new feature checks
* Results::                     What to do with results from feature checks
* Programming in M4::           Layers on top of which Autoconf is written
* Writing Autoconf Macros::     Adding new macros to Autoconf
* Portable Shell::              Shell script portability pitfalls
* Manual Configuration::        Selecting features that can't be guessed
* Site Configuration::          Local defaults for @code{configure}
* Running configure scripts::   How to use the Autoconf output
* config.status Invocation::    Recreating a configuration
* Obsolete Constructs::         Kept for backward compatibility
* Questions::                   Questions about Autoconf, with answers
* History::                     History of Autoconf
* Environment Variable Index::  Index of environment variables used
* Output Variable Index::       Index of variables set in output files
* Preprocessor Symbol Index::   Index of C preprocessor symbols defined
* Autoconf Macro Index::        Index of Autoconf macros
* M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
* Concept Index::               General index

@c @detailmenu --- The Detailed Node Listing ---
@c 
@detailmenu
 --- 詳細なノードリスト ---

@c The GNU build system
@c 
GNUビルドシステム

* Automake::                    Escaping Makefile hell
* Libtool::                     Building libraries portably
* Pointers::                    More info on the GNU build system

@c Making @code{configure} Scripts
@c 
@code{configure}スクリプトの作成

* Writing configure.ac::        What to put in an Autoconf input file
* autoscan Invocation::         Semi-automatic @file{configure.ac} writing
* ifnames Invocation::          Listing the conditionals in source code
* autoconf Invocation::         How to create configuration scripts
* autoreconf Invocation::       Remaking multiple @code{configure} scripts

@c Writing @file{configure.ac}
@c 
@file{configure.ac}を書く

* Shell Script Compiler::       Autoconf as solution of a problem
* Autoconf Language::           Programming in Autoconf
* configure.ac Layout::         Standard organization of configure.ac

@c Initialization and Output Files
@c 
初期化と出力ファイル

* Notices::                     Copyright, version numbers in @code{configure}
* Input::                       Where Autoconf should find files
* Output::                      Outputting results from the configuration
* Configuration Actions::       Preparing the output based on results
* Configuration Files::         Creating output files
* Makefile Substitutions::      Using output variables in @file{Makefile}s
* Configuration Headers::       Creating a configuration header file
* Configuration Commands::      Running arbitrary instantiation commands
* Configuration Links::         Links depending from the configuration
* Subdirectories::              Configuring independent packages together
* Default Prefix::              Changing the default installation prefix

@c Substitutions in Makefiles
@c 
Makefileの代入

* Preset Output Variables::     Output variables that are always set
* Installation Directory Variables::  Other preset output variables
* Build Directories::           Supporting multiple concurrent compiles
* Automatic Remaking::          Makefile rules for configuring

@c Configuration Header Files
@c 
ヘッダファイルのコンフィグレーション

* Header Templates::            Input for the configuration headers
* autoheader Invocation::       How to create configuration templates
* Autoheader Macros::           How to specify CPP templates

@c Existing Tests
@c 
存在のテスト

* Common Behavior::             Macros' standard schemes
* Alternative Programs::        Selecting between alternative programs
* Files::                       Checking for the existence of files
* Libraries::                   Library archives that might be missing
* Library Functions::           C library functions that might be missing
* Header Files::                Header files that might be missing
* Declarations::                Declarations that may be missing
* Structures::                  Structures or members that might be missing
* Types::                       Types that might be missing
* Compilers and Preprocessors::  Checking for compiling programs
* System Services::             Operating system services
* UNIX Variants::               Special kludges for specific UNIX variants

@c Common Behavior
@c 
共通の動作

* Standard Symbols::            Symbols defined by the macros
* Default Includes::            Includes used by the generic macros

@c Alternative Programs
@c 
代替プログラム

* Particular Programs::         Special handling to find certain programs
* Generic Programs::            How to find other programs

@c Library Functions
@c 
ライブラリ関数

* Function Portability::        Pitfalls with usual functions
* Particular Functions::        Special handling to find certain functions
* Generic Functions::           How to find other functions

@c Header Files
@c 
ヘッダファイル

* Particular Headers::          Special handling to find certain headers
* Generic Headers::             How to find other headers

@c Declarations
@c 
宣言

* Particular Declarations::     Macros to check for certain declarations
* Generic Declarations::        How to find other declarations

@c Structures
@c 
構造体

* Particular Structures::       Macros to check for certain structure members
* Generic Structures::          How to find other structure members

@c Types
@c 
型

* Particular Types::            Special handling to find certain types
* Generic Types::               How to find other types

@c Compilers and Preprocessors
@c 
コンパイラとプリプロセッサ

* Generic Compiler Characteristics::  Language independent tests
* C Compiler::                  Checking its characteristics
* C++ Compiler::                Likewise
* Fortran 77 Compiler::         Likewise

@c Writing Tests
@c 
テストを書く

* Examining Declarations::      Detecting header files and declarations
* Examining Syntax::            Detecting language syntax features
* Examining Libraries::         Detecting functions and global variables
* Run Time::                    Testing for run-time features
* Systemology::                 A zoology of operating systems
* Multiple Cases::              Tests for several possible values
* Language Choice::             Selecting which language to use for testing

@c Checking Run Time Behavior
@c 
実行時の動作の調査

* Test Programs::               Running test programs
* Guidelines::                  General rules for writing test programs
* Test Functions::              Avoiding pitfalls in test programs

@c Results of Tests
@c 
テストの結果

* Defining Symbols::            Defining C preprocessor symbols
* Setting Output Variables::    Replacing variables in output files
* Caching Results::             Speeding up subsequent @code{configure} runs
* Printing Messages::           Notifying @code{configure} users

@c Caching Results
@c 
結果のキャッシュ

* Cache Variable Names::        Shell variables used in caches
* Cache Files::                 Files @code{configure} uses for caching
* Cache Checkpointing::         Loading and saving the cache file

@c Programming in M4
@c 
M4でのプログラム

* M4 Quotation::                Protecting macros from unwanted expansion
* Programming in M4sugar::      Convenient pure M4 macros

@c M4 Quotation
@c 
M4の引用符

* Active Characters::           Characters that change the behavior of m4
* One Macro Call::              Quotation and one macro call
* Quotation and Nested Macros::  Macros calling macros
* Quadrigraphs::                Another way to escape special characters
* Quotation Rule Of Thumb::     One parenthesis, one quote

@c Programming in M4sugar
@c 
M4sugarでのプログラム

* Redefined M4 Macros::         M4 builtins changed in M4sugar
* Forbidden Patterns::          Catching unexpanded macros

@c Writing Autoconf Macros
@c 
Autoconfマクロを書く

* Macro Definitions::           Basic format of an Autoconf macro
* Macro Names::                 What to call your new macros
* Reporting Messages::          Notifying @code{autoconf} users
* Dependencies Between Macros::  What to do when macros depend on other macros
* Obsoleting Macros::           Warning about old ways of doing things
* Coding Style::                Writing Autoconf macros @`a la Autoconf

@c Dependencies Between Macros
@c 
マクロ間の依存性

* Prerequisite Macros::         Ensuring required information
* Suggested Ordering::          Warning about possible ordering problems

@c Portable Shell Programming
@c 
移植性のあるシェルプログラム

* Shellology::                  A zoology of shells
* Here-Documents::              Quirks and tricks
* File Descriptors::            FDs and redirections
* File System Conventions::     File- and pathnames
* Shell Substitutions::         Variable and command expansions
* Assignments::                 Varying side effects of assignments
* Special Shell Variables::     Variables you should not change
* Limitations of Builtins::     Portable use of not so portable /bin/sh
* Limitations of Usual Tools::  Portable use of portable tools
* Limitations of Make::         Portable Makefiles

@c Manual Configuration
@c 
手動のコンフィグレーション

* Specifying Names::            Specifying the system type
* Canonicalizing::              Getting the canonical system type
* Using System Type::           What to do with the system type

@c Site Configuration
@c 
サイトコンフィグレーション

* External Software::           Working with other optional software
* Package Options::             Selecting optional features
* Pretty Help Strings::         Formating help string
* Site Details::                Configuring site details
* Transforming Names::          Changing program names when installing
* Site Defaults::               Giving @code{configure} local defaults

@c Transforming Program Names When Installing
@c 
インストール時のプログラム名の変換

* Transformation Options::      @code{configure} options to transform names
* Transformation Examples::     Sample uses of transforming names
* Transformation Rules::        @file{Makefile} uses of transforming names

@c Running @code{configure} Scripts
@c 
@code{configure}スクリプトの実行

* Basic Installation::          Instructions for typical cases
* Compilers and Options::       Selecting compilers and optimization
* Multiple Architectures::      Compiling for multiple architectures at once
* Installation Names::          Installing in different directories
* Optional Features::           Selecting optional features
* System Type::                 Specifying the system type
* Sharing Defaults::            Setting site-wide defaults for @code{configure}
* Environment Variables::       Defining environment variables.
* configure Invocation::        Changing how @code{configure} runs

@c Obsolete Constructs
@c 
時代遅れの構成物

* Obsolete config.status Use::  Different calling convention
* acconfig.h::                  Additional entries in @file{config.h.in}
* autoupdate Invocation::       Automatic update of @file{configure.ac}
* Obsolete Macros::             Backward compatibility macros
* Autoconf 1::                  Tips for upgrading your files
* Autoconf 2.13::               Some fresher tips

@c Upgrading From Version 1
@c 
バージョン1からのアップグレード

* Changed File Names::          Files you might rename
* Changed Makefiles::           New things to put in @file{Makefile.in}
* Changed Macros::              Macro calls you might replace
* Changed Results::             Changes in how to check test results
* Changed Macro Writing::       Better ways to write your own macros

@c Upgrading From Version 2.13
@c 
Version 2.13からのアップグレード

* Changed Quotation::           Broken code which used to work
* New Macros::                  Interaction with foreign macros

@c Questions About Autoconf
@c 
Autoconfに関する質問

* Distributing::                Distributing @code{configure} scripts
* Why GNU m4::                  Why not use the standard M4?
* Bootstrapping::               Autoconf and GNU M4 require each other?
* Why Not Imake::               Why GNU uses @code{configure} instead of Imake

@c History of Autoconf
@c 
Autoconfの歴史

* Genesis::                     Prehistory and naming of @code{configure}
* Exodus::                      The plagues of M4 and Perl
* Leviticus::                   The priestly code of portability arrives
* Numbers::                     Growth and contributors
* Deuteronomy::                 Approaching the promises of easy configuration

@end detailmenu
@end menu

@c ============================================================= Introduction.

@node Introduction, The GNU build system, Top, Top
@chapter はじめに

@c @flushright
@display
@c A physicist, an engineer, and a computer scientist were discussing the
@c nature of God.  ``Surely a Physicist,'' said the physicist, ``because
@c early in the Creation, God made Light; and you know, Maxwell's
@c equations, the dual nature of electromagnetic waves, the relativistic
@c consequences@dots{}'' ``An Engineer!,'' said the engineer, ``because
@c before making Light, God split the Chaos into Land and Water; it takes a
@c hell of an engineer to handle that big amount of mud, and orderly
@c separation of solids from liquids@dots{}'' The computer scientist
@c shouted: ``And the Chaos, where do you think it was coming from, hmm?''
@c 
物理学者，エンジニア，そしてコンピュータ科学者が神の性質を論じていました．
``確かに物理学者だ''と物理学者が言いました．``なぜなら，創造の早いうちに，
神が光を作ったからだ．ご存じのように，マックスウェル方程式，電磁波の二重
の性質，相対論者の結果@dots{}．'' ``エンジニアだ！''とエンジニアは言いま
した．``なぜなら，光を作る前に神はカオスを土地と水に分けたからだ．それに
は大量のエンジニアが必要で，大量の泥を処理し，液体から固体を正しく分離し
@dots{}．''コンピュータ科学者は叫びました．``そしてカオス，それはいった
いどこからきたと思いますか，う〜ん？''

@c ---Anonymous
@c 
---詠み人知らず
@c @end flushright
@end display
@c (via Franc,ois Pinard)

@c Autoconf is a tool for producing shell scripts that automatically
@c configure software source code packages to adapt to many kinds of
@c @sc{unix}-like systems.  The configuration scripts produced by Autoconf
@c are independent of Autoconf when they are run, so their users do not
@c need to have Autoconf.
@c 
Autoconfは，何種類もの@sc{unix}ライクのシステムに適合するために，ソフト
ウェアソースコードパッケージを自動的にコンフィグレーションするシェルスク
リプトを生成するツールです．Autoconfで生成されたコンフィギュレーションス
クリプトは，実行時にAutoconfに依存しないので，ユーザはAutoconfを持つ必要
がありません．

@c The configuration scripts produced by Autoconf require no manual user
@c intervention when run; they do not normally even need an argument
@c specifying the system type.  Instead, they individually test for the
@c presence of each feature that the software package they are for might need.
@c (Before each check, they print a one-line message stating what they are
@c checking for, so the user doesn't get too bored while waiting for the
@c script to finish.)  As a result, they deal well with systems that are
@c hybrids or customized from the more common @sc{unix} variants.  There is
@c no need to maintain files that list the features supported by each
@c release of each variant of @sc{unix}.
@c 
Autoconfで生成されたコンフィギュレーションスクリプトは，実行時にユーザの
手動の介入を必要としません．通常，システムタイプを指定する引数さえも必要
としません．その代わりに，ソフトウェアパッケージが必要とするそれぞれの機
能が存在するかどうか，個別に調査します．(それぞれの調査の前に，調査して
いることに関する一行のメッセージを出力し，そのため，ユーザはスクリプトの
終わりを待っている間，そんなに退屈しません．) 結果として，それら(スクリ
プト) は一般的な@sc{unix}の変形から混成されたりカスタマイズされたりして
いるシステムを上手に扱います．それぞれの@sc{unix}の変形の，それぞれのリ
リースによってサポートされている特徴を，リストアップするファイルを保守す
る必要はありません．

@c For each software package that Autoconf is used with, it creates a
@c configuration script from a template file that lists the system features
@c that the package needs or can use.  After the shell code to recognize
@c and respond to a system feature has been written, Autoconf allows it to
@c be shared by many software packages that can use (or need) that feature.
@c If it later turns out that the shell code needs adjustment for some
@c reason, it needs to be changed in only one place; all of the
@c configuration scripts can be regenerated automatically to take advantage
@c of the updated code.
@c 
Autoconfが使用されているそれぞれのソフトウェアパッケージに対し，パッケー
ジが必要とする，または使用可能なシステムの特徴をリストアップしているテン
プレートファイルから，コンフィギュレーションスクリプトを作ります．システ
ムの特徴を認識して応答するシェルコードが書かれた後，使用可能な(または必
要な)特徴を多くのパッケージで共有することがAutoconfで可能になります．理
由があって，シェルコードの調整の必要性が後になって発覚した場合，ただ１ヵ
所のみ変更する必要があります．すべてのコンフィギュレーションスクリプトは，
更新されたコードを利用するため自動的に再生することが可能です．

@c The Metaconfig package is similar in purpose to Autoconf, but the
@c scripts it produces require manual user intervention, which is quite
@c inconvenient when configuring large source trees.  Unlike Metaconfig
@c scripts, Autoconf scripts can support cross-compiling, if some care is
@c taken in writing them.
@c 
MetaconfigパッケージはAutoconfの目的に似ていますが，それが生成するスクリ
プトは手動でユーザが介入する必要があり，大きなソースツリーをコンフィグレー
ションする時は全く不便です．Metaconfigスクリプトと異なり，注意して書いて
いる場合，Autoconfスクリプトはクロスコンパイルもサポート可能です．

@c Autoconf does not solve all problems related to making portable software
@c packages---for a more complete solution, it should be used in concert
@c with other GNU build tools like Automake and Libtool.  These other tools
@c take on jobs like the creation of a portable, recursive @file{Makefile}
@c with all of the standard targets, linking of shared libraries, and so
@c on.  @xref{The GNU build system}, for more information.
@c 
Autoconfは，移植性のあるソフトウェアパッケージに関連するすべての問題を解
決しているわけではありません --- より完全に解決するために，Automakeと
Libtoolのような，その他のGNUビルドツールと連係して使用すべきです．これら
の他のツールは，すべての標準ターゲットを含む，移植性のある再帰的な
@file{Makefile}の作成，共有ライブラリのリンクなどの作業を請け負います．
詳細は@xref{The GNU build system}.

@c Autoconf imposes some restrictions on the names of macros used with
@c @code{#if} in C programs (@pxref{Preprocessor Symbol Index}).
@c 
Autoconfは，Cプログラムの@code{#if}で使用するマクロ名に，多少制限を与え
ます(@pxref{Preprocessor Symbol Index})．

@c Autoconf requires @sc{gnu} M4 in order to generate the scripts.  It uses
@c features that some @sc{unix} versions of M4, including @sc{gnu} M4 1.3,
@c do not have.  You must use version 1.4 or later of @sc{gnu} M4.
@c 
Autoconfは，スクリプトを生成するために@sc{gnu} M4が必要です．@sc{unix}バー
ジョンのM4が持っていない特徴を使用し，それには@sc{gnu} M4 1.3も含
まれます．バージョン1.4以降の@sc{gnu} M4を使用する必要があります．

@c @xref{Autoconf 1}, for information about upgrading from version 1.
@c @xref{History}, for the story of Autoconf's development.
@c @xref{Questions}, for answers to some common questions about Autoconf.
@c 
バージョン1からのアップグレードについての情報は，@xref{Autoconf 1}.
Autoconfの開発の物語については，@xref{History}. Autoconfについての一般的
な質問へ回答は，@xref{Questions}.

@c See the @href{http://www.gnu.org/software/autoconf/autoconf.html,
@c Autoconf web page} for up-to-date information, details on the mailing
@c lists, pointers to a list of known bugs, etc.
@c 
更新情報，メーリングリストの詳細，既知のバグリストへのポインタなどは，
Autoconf web page@footnote{Autoconf web page,
@url{http://www.gnu.org/software/autoconf/autoconf.html}}を参照してくださ
い．

@c Mail suggestions to @email{autoconf@@gnu.org, the Autoconf mailing
@c list}.
@c 
Autoconfに関する提案は @email{autoconf@@gnu.org, the Autoconf mailing
list}にメールして下さい．

@c Bug reports should be preferably submitted to the
@c @href{http://sources.redhat.com/cgi-bin/gnatsweb.pl?database=autoconf,
@c Autoconf Gnats database}, or sent to @email{bug-autoconf@@gnu.org, the
@c Autoconf Bugs mailing list}.  If possible, first check that your bug is
@c not already solved in current development versions, and that it has not
@c been reported yet.  Be sure to include all the needed information and a
@c short @file{configure.ac} that demonstrates the problem.
@c 
バグの報告は，できればAutoconf Gnats database@footnote{Autoconf Gnats
database,@url{http://sources.redhat.com/cgi-bin/gnatsweb.pl?database=autoconf}} 
へ提出するか，@email{bug-autoconf@@gnu.org, the Autoconf Bugs mailing
list}へ送付してください．できれば最初に，現在の開発バージョンでバグが既
に解決されていないことと，まだ報告されていないことを調査してください．す
べての必要な情報と，問題を立証する短い@file{configure.ac}を確実に同封し
てください．

@c Autoconf's development tree is accessible via @sc{cvs}; see the Autoconf
@c web page for details.  There is also a
@c @href{http://subversions.gnu.org/cgi-bin/cvsweb/autoconf/, @sc{cvs}web
@c interface to the Autoconf development tree}.  Patches relative to the
@c current @sc{cvs} version can be sent for review to the
@c @email{autoconf-patches@@gnu.org, Autoconf Patches mailing list}.
@c 
Autoconfの開発ツリーは，@sc{cvs}でアクセス可能です．詳細は，Autoconfのウェ
ブページを参照してください．@sc{cvs}web interface to the Autoconf
development tree@footnote{@sc{cvs}web interface to the Autoconf
development
tree,@url{http://subversions.gnu.org/cgi-bin/cvsweb/autoconf/}}もありま
す．現在の@sc{cvs}バージョンに関連するパッチは，レビューするために
@email{autoconf-patches@@gnu.org, Autoconf Patches mailing list}に送付す
ることが可能です．

@c Because of its mission, Autoconf includes only a set of often-used
@c macros that have already demonstrated their usefulness.  Nevertheless,
@c if you wish to share your macros, or find existing ones, see the
@c @href{http://www.gnu.org/software/ac-archive/, Autoconf Macro
@c Archive}, which is kindly run by @email{simons@@computer.org,
@c Peter Simons}.
@c 
その作業のため，Autoconfは既に有用性が立証されている，よく使用されるマク
ロのみ含めています．それでも，マクロを共有したい，または既存のものを探し
たい場合，@email{simons@@computer.org, Peter Simons}の好意で作成されてい
るAutoconf Macro Archive@footnote{Autoconf Macro
Archive,@url{http://www.gnu.org/software/ac-archive/}}を参照してください．


@c ================================================= The GNU build system

@node The GNU build system, Making configure Scripts, Introduction, Top
@chapter GNUビルドシステム

@c Autoconf solves an important problem---reliable discovery of
@c system-specific build and runtime information---but this is only one
@c piece of the puzzle for the development of portable software.  To this
@c end, the GNU project has developed a suite of integrated utilities to
@c finish the job Autoconf started: the GNU build system, whose most
@c important components are Autoconf, Automake, and Libtool.  In this
@c chapter, we introduce you to those tools, point you to sources of more
@c information, and try to convince you to use the entire GNU build system
@c for your software.
@c 
Autoconfは重要な問題を解決します --- それは信頼できるシステムで指定した
ビルドと実行時の情報の発見です --- しかし，これは移植性のあるソフトウエ
アを開発するためのパズルの一ピースに過ぎません．このために，GNUプロジェ
クトは，Autoconfが開始した仕事を完了するためのユーティリティの，統合され
た組み合わせを開発してきました．GNUビルドシステムの最も重要な構成要素は，
Autoconf，Automake，そしてLibtoolです．この章で，我々はこれらのツールを
紹介し，より多くの情報源を提示し，そして，ソフトウェアに対してGNUビルド
システム全体を便利に使用するように説得してみたいと思います．

@menu
* Automake::                    Escaping Makefile hell
* Libtool::                     Building libraries portably
* Pointers::                    More info on the GNU build system
@end menu

@node Automake, Libtool, The GNU build system, The GNU build system
@section Automake

@c The ubiquity of @code{make} means that a @code{Makefile} is almost the
@c only viable way to distribute automatic build rules for software, but
@c one quickly runs into @code{make}'s numerous limitations.  Its lack of
@c support for automatic dependency tracking, recursive builds in
@c subdirectories, reliable timestamps (e.g. for network filesystems), and
@c so on, mean that developers must painfully (and often incorrectly)
@c reinvent the wheel for each project.  Portability is non-trivial, thanks
@c to the quirks of @code{make} on many systems.  On top of all this is the
@c manual labor required to implement the many standard targets that users
@c have come to expect (@code{make install}, @code{make distclean},
@c @code{make uninstall}, etc.).  Since you are, of course, using Autoconf,
@c you also have to insert repetitive code in your @code{Makefile.in} to
@c recognize @code{@@CC@@}, @code{@@CFLAGS@@}, and other substitutions
@c provided by @code{configure}.  Into this mess steps @dfn{Automake}.
@c 
@code{make}には神がいないということは，@code{Makefile}はソフトウェアの自
動的なビルド規則を配布するための，ほとんど唯一の現実的な方法なのですが，
すぐに@code{make}の多くの限界にぶつかることを示しています．それには，自
動的な依存性の追跡に対するサポート，サブディレクトリでの再帰的なビルド，
(例えば，ネットワークファイルシステムに対する)信頼できるタイムスタンプな
どが足りないので，開発者はそれぞれのプロジェクトに対し，辛い(そして間違
うことが多い)車輪の再開発が必要になっています．多くのシステムの
@code{make}の癖のために，移植性は些細な問題ではなくなっています．なによ
りも，ユーザが期待する多くの標準的なターゲット(@code{make install}，
@code{make distclean}，@code{make uninstall}など)を手作業で実装する必要
があることがあげられます．もちろん，Autoconfを使用しているので，
@code{@@CC@@}，@code{@@CFLAGS@@}，そして@code{configure}で提供されるその
他の置換式を認識するように，@code{Makefile.in}に対応するコードを挿入して
いるでしょう．この乱雑な状況は@dfn{Automake}で処理しましょう．
@cindex Automake

@c Automake allows you to specify your build needs in a @code{Makefile.am}
@c file with a vastly simpler and more powerful syntax than that of a plain
@c @code{Makefile}, and then generates a portable @code{Makefile.in} for
@c use with Autoconf.  For example, the @code{Makefile.am} to build and
@c install a simple ``Hello world'' program might look like:
@c 
Automakeは，プレーンの@code{Makefile}の方法と比べ，非常に簡単により強力
な構文で，ビルドが必要とするものを@code{Makefile.am}ファイルで指定するこ
とを可能とし，Autoconfでの使用するための移植性の高い@code{Makefile.in}を
生成します．例えば，単純な``Hello world''プログラムをビルドしインストー
ルするための@code{Makefile.am}は以下のようになります．

@example
bin_PROGRAMS = hello
hello_SOURCES = hello.c
@end example

@noindent
@c The resulting @code{Makefile.in} (~400 lines) automatically supports all
@c the standard targets, the substitutions provided by Autoconf, automatic
@c dependency tracking, @code{VPATH} building, and so on.  @code{make} will
@c build the @code{hello} program, and @code{make install} will install it
@c in @file{/usr/local/bin} (or whatever prefix was given to
@c @code{configure}, if not @file{/usr/local}).
@c 
結果として得られる@code{Makefile.in}(約400行)は，自動的に，すべての標準
的なターゲット，Autoconfが提供する置換式，自動的な依存性追跡，
@code{VPATH}のビルドなどをサポートします．@code{make}で@code{hello}プロ
グラムをビルドし，@code{make install}で，それを@file{/usr/local/bin}(ま
たは，@file{/usr/local}でなければ，@code{configure}で与えた接頭辞)にイン
ストールします．

@c Automake may require that additional tools be present on the
@c @emph{developer's} machine.  For example, the @code{Makefile.in} that
@c the developer works with may not be portable (e.g. it might use special
@c features of your compiler to automatically generate dependency
@c information).  Running @code{make dist}, however, produces a
@c @file{hello-1.0.tar.gz} package (or whatever the program/version is)
@c with a @code{Makefile.in} that will work on any system.
@c 
Automakeは，さらなるツールが@emph{開発者の}マシンにあることを要求するか
もしれません．例えば，開発者が作業している@code{Makefile.in}は移植性がな
いかもしれません(例えば，自動的に依存情報を生成するために，コンパイラの
特殊な機能を使用しているかもしれません)．しかし，@code{make dist}を実行
することで，あらゆるシステムで動作する@code{Makefile.in}を用いている，
@file{hello-1.0.tar.gz}(やあらゆるプログラムをバージョンを持つ)パッケー
ジを生成します．

@c The benefits of Automake increase for larger packages (especially ones
@c with subdirectories), but even for small programs the added convenience
@c and portability can be substantial.  And that's not all@dots{}
@c 
Automakeの利点は，パッケージが大きければ大きい(特にサブディレクトリがあ
るもの)ほど有利になりますが，小さなプログラムに対しても重要な利便性と移
植性を加えます．そして，それだけがすべてではありません@dots{}


@node Libtool, Pointers, Automake, The GNU build system
@section Libtool

@c Very often, one wants to build not only programs, but libraries, so that
@c other programs can benefit from the fruits of your labor.  Ideally, one
@c would like to produce @emph{shared} (dynamically-linked) libraries,
@c which can be used by multiple programs without duplication on disk or in
@c memory and can be updated independently of the linked programs.
@c Producing shared libraries portably, however, is the stuff of
@c nightmares---each system has its own incompatible tools, compiler flags,
@c and magic incantations.  Fortunately, GNU provides a solution:
@c @dfn{Libtool}.
@c 
他のプログラムで，これまでの作業の成果から利益を得ることを可能にするため，
プログラムだけでなくライブラリをビルドしたいことも頻繁にあるでしょう．理
想的には，@emph{共有}(動的にリンクされる)ライブラリを生成したいと考え，
それは，複数のプログラムからディスクやメモリに同じものを複製せずに使用可
能で，リンクされているプログラムに依存せずに更新可能だからです．しかし，
移植性の高い共有ライブラリは悪夢の元です --- それぞれのシステムは，独自
の互換性のないツール，コンパイラフラグ，そして魔法の呪文があります．幸い
にも，GNUは解決方法を提供しています．それは，@dfn{Libtool}です．
@cindex Libtool

@c Libtool handles all the requirements of building shared libraries for
@c you, and at this time seems to be the @emph{only} way to do so with any
@c portability.  It also handles many other headaches, such as: the
@c interaction of @code{Makefile} rules with the variable suffixes of
@c shared libraries, linking reliably to shared libraries before they are
@c installed by the superuser, and supplying a consistent versioning system
@c (so that different versions of a library can be installed or upgraded
@c without breaking binary compatibility).  Although Libtool, like
@c Autoconf, can be used on its own, it is most simply utilized in
@c conjunction with Automake---there, Libtool is used automatically
@c whenever shared libraries are needed, and you need not know its syntax.
@c 
Libtoolは，共有ライブラリのビルドに関するすべての要求を処理し，この時，
あらゆる移植性を扱うための@emph{唯一の}方法だと思われます．また，以下の
ような頭痛の種も扱います．それは，共有ライブラリの様々な接尾子を扱う
@code{Makefile}規則の相互作用，以前にスーパーユーザによってインストール
された共有ライブラリとの信頼できるリンク，そして，整合性の高いバージョン
管理システムの提供です(それは，ライブラリのことなるバージョンを，バイナ
リ互換性を壊さないようにインストールし更新することを可能にするためのもの
です)．しかしLibtoolは，Autoconf同様に，単独で使用することは不可能で，そ
れは単純にAutomakeと組み合わせて利用されます --- そこで，Libtoolは共有ラ
イブラリが必要な時に自動的に使用され，そして使用者はその構文を知っている
必要はありません．


@node Pointers,  , Libtool, The GNU build system
@section 参考文献

@c Developers who are used to the simplicity of @code{make} for small
@c projects on a single system might be daunted at the prospect of learning
@c to use Automake and Autoconf.  As your software is distributed to more
@c and more users, however, you will otherwise quickly find yourself
@c putting lots of effort into reinventing the services that the GNU build
@c tools provide, and making the same mistakes that they once made and
@c overcame.  (Besides, since you're already learning Autoconf, Automake
@c will be a piece of cake.)
@c 
単一のシステムで小さなプロジェクトのために，簡単な@code{make}を使用して
いる開発者は，AutomakeとAutoconfを使用するために学習する見通しを立てると
圧倒されるかもしれません．しかし，ソフトウェアはより多くのユーザに配布さ
れるので，GNUビルドツールが提供するサービスを再発明するために多くの努力
を費やしていることと，一度犯して解決した過ちを繰り返していることがすぐに
分かるでしょう．(また，既にAutoconfを学んでいるので，Automakeは朝飯前で
しょう．)

@c There are a number of places that you can go to for more information on
@c the GNU build tools.
@c 
GNUビルドツールの詳細な情報を得るために，訪問する場所はたくさんあります．

@itemize @minus

@item Web

@c The home pages for
@c @href{http://www.gnu.org/software/autoconf/,Autoconf},
@c @href{http://www.gnu.org/software/automake/,Automake}, and
@c @href{http://www.gnu.org/software/libtool/,Libtool}.
@c 
Autoconf@footnote{Autoconf,@url{http://www.gnu.org/software/autoconf/}}，
Automake@footnote{Automake,@url{http://www.gnu.org/software/automake/}}，
そして
Libtool@footnote{Libtool,@url{http://www.gnu.org/software/libtool/}}のホー
ムページ．

@item Automakeのマニュアル

@c @xref{Top,,Automake,automake,GNU Automake}, for more
@c information on Automake.
@c
Automakeの詳細は，@xref{Top,,Automake,automake,GNU Automake}.

@item 書籍

@c The book @cite{GNU Autoconf, Automake and Libtool}@footnote{@cite{GNU
@c Autoconf, Automake and Libtool}, by G. V. Vaughan, B. Elliston,
@c T. Tromey, and I. L. Taylor. New Riders, 2000, ISBN 1578701902.}
@c describes the complete GNU build environment.  You can also find the
@c entire book on-line at @href{http://sources.redhat.com/autobook/,``The
@c Goat Book'' home page}.
@c 
書籍@cite{GNU Autoconf, Automake and Libtool}@footnote{@cite{GNU
Autoconf, Automake and Libtool}, by G. V. Vaughan, B. Elliston,
T. Tromey, and I. L. Taylor. New Riders, 2000, ISBN 1578701902.}では，完
全なGNUビルド環境が記述されています．``The Goat Book'' home
page@footnote{``The Goat Book'' home
page,@url{http://sources.redhat.com/autobook/}}では，オンラインで本全体
を見ることも可能です．

@item チュートリアルと例

@c The @href{http://sources.redhat.com/autoconf/,Autoconf Developer Page}
@c maintains links to a number of Autoconf/Automake tutorials online, and
@c also links to the @href{http://www.gnu.org/software/ac-archive/,
@c Autoconf Macro Archive}.
@c 
Autoconf Developer Page@footnote{Autoconf Developer
Page,@url{http://sources.redhat.com/autoconf/}}では，Autoconf/Automakeの
オンラインのチュートリアルと，Autoconf Macro Archive@footnote{Autoconf
Macro Archive,@url{http://www.gnu.org/software/ac-archive/}}のリンクも
管理しています．

@end itemize

@c ================================================= Making configure Scripts.

@node Making configure Scripts, Setup, The GNU build system, Top
@chapter @code{configure}スクリプトの作成
@cindex @file{aclocal.m4}
@cindex @code{configure}

@c The configuration scripts that Autoconf produces are by convention
@c called @code{configure}.  When run, @code{configure} creates several
@c files, replacing configuration parameters in them with appropriate
@c values.  The files that @code{configure} creates are:
@c 
Autoconfが生成するコンフィギュレーションスクリプトは，慣習的に 
@code{configure}と呼ばれます．実行時に，@code{configure}はいくつかのファ
イルを作成し，そこで，コンフィギュレーションパラメータを適切な値に置換し
ます．@code{configure}が作成するファイルは以下の通りです．

@itemize @minus
@item
@c one or more @file{Makefile} files, one in each subdirectory of the
@c package (@pxref{Makefile Substitutions});
@c 
1つ以上の@file{Makefile}で，それはパッケージのそれぞれのサブディレクトリ
に1つずつあります(@pxref{Makefile Substitutions})．

@item
@c optionally, a C header file, the name of which is configurable,
@c containing @code{#define} directives (@pxref{Configuration Headers});
@c 
オプションのCヘッダファイルで，それはコンフィグレーション可能な名前で， 
@code{#define}ディレクティブを含んでいます(@pxref{Configuration
Headers})．

@item
@c a shell script called @file{config.status} that, when run, will recreate
@c the files listed above (@pxref{config.status Invocation});
@c 
@file{config.status}という名のシェルスクリプトで，それは実行時に上記でリ
ストアップされているファイルを再生成します(@pxref{config.status
Invocation})．

@item
@c an optional shell script normally called @file{config.cache}
@c (created when using @samp{configure --config-cache}) that
@c saves the results of running many of the tests (@pxref{Cache Files});
@c 
@file{config.cache}という名の(@samp{configure --config-cache}が使用され
る時に作成される)オプションのシェルスクリプトで，それは多くのテストの実
行結果を保存しています(@pxref{Cache Files})．

@item
@c a file called @file{config.log} containing any messages produced by
@c compilers, to help debugging if @code{configure} makes a mistake.
@c 
@file{config.log}という名のコンパイラが生成する全てのメッセージを含んで
いるファイルで，@code{configure}が失敗した場合はデバッグの助けとなります．
@end itemize

@cindex @file{configure.in}
@cindex @file{configure.ac}
@c To create a @code{configure} script with Autoconf, you need to write an
@c Autoconf input file @file{configure.ac} (or @file{configure.in}) and run
@c @code{autoconf} on it.  If you write your own feature tests to
@c supplement those that come with Autoconf, you might also write files
@c called @file{aclocal.m4} and @file{acsite.m4}.  If you use a C header
@c file to contain @code{#define} directives, you might also run
@c @code{autoheader}, and you will distribute the generated file
@c @file{config.h.in} with the package.
@c 
Autoconfを用いて@code{configure}スクリプトを作成するために，Autoconfの入
力ファイル@file{configure.ac}(または@file{configure.in})を書き，
@code{autoconf}をそこで実行する必要があります．Autoconfとともにもたらさ
れたものを補うために独自の特徴テストを書く場合，@file{aclocal.m4}と
@file{acsite.m4}という名のファイルも書くことになるでしょう．
@code{#define}ディレクティブを含むCヘッダファイルを使用する場合，
@code{autoheader}も実行し，パッケージで生成されるファイル
@file{config.h.in}を配布することになるでしょう．

@c Here is a diagram showing how the files that can be used in
@c configuration are produced.  Programs that are executed are suffixed by
@c @samp{*}.  Optional files are enclosed in square brackets (@samp{[]}).
@c @code{autoconf} and @code{autoheader} also read the installed Autoconf
@c macro files (by reading @file{autoconf.m4}).
@c 
コンフィギュレーションで使用可能なファイルを生成する方法は，以下で示す図
の用になります．実行するプログラムには，@samp{*}が付いています．オプショ
ンのファイルは角カッコ(@samp{[]})で囲っています．@code{autoconf}と 
@code{autoheader}は，Autoconfでインストールされる(@file{autoconf.m4}が読
む)マクロファイルも読み込みます．

@noindent
@c Files used in preparing a software package for distribution:
@c 
ソフトウェアパッケージを配布する準備で使用されるファイルは，以下のように
なっています．

@example
your source files --> [autoscan*] --> [configure.scan] --> configure.ac

@group
configure.ac --.
               |   .------> autoconf* -----> configure
[aclocal.m4] --+---+
               |   `-----> [autoheader*] --> [config.h.in]
[acsite.m4] ---'
@end group

Makefile.in -------------------------------> Makefile.in
@end example

@noindent
@c Files used in configuring a software package:
@c 
ソフトウェアパッケージのコンフィグレーションで使用されるファイルは，以下
のようになっています．

@example
@group
                       .-------------> [config.cache]
configure* ------------+-------------> config.log
                       |
[config.h.in] -.       v            .-> [config.h] -.
               +--> config.status* -+               +--> make*
Makefile.in ---'                    `-> Makefile ---'
@end group
@end example

@menu
* Writing configure.ac::        What to put in an Autoconf input file
* autoscan Invocation::         Semi-automatic @file{configure.ac} writing
* ifnames Invocation::          Listing the conditionals in source code
* autoconf Invocation::         How to create configuration scripts
* autoreconf Invocation::       Remaking multiple @code{configure} scripts
@end menu


@node Writing configure.ac, autoscan Invocation, Making configure Scripts, Making configure Scripts
@section @file{configure.ac}を書く

@c To produce a @code{configure} script for a software package, create a
@c file called @file{configure.ac} that contains invocations of the
@c Autoconf macros that test the system features your package needs or can
@c use.  Autoconf macros already exist to check for many features; see
@c @ref{Existing Tests}, for their descriptions.  For most other features,
@c you can use Autoconf template macros to produce custom checks; see
@c @ref{Writing Tests}, for information about them.  For especially tricky
@c or specialized features, @file{configure.ac} might need to contain some
@c hand-crafted shell commands; see @ref{Portable Shell}.  The
@c @code{autoscan} program can give you a good start in writing
@c @file{configure.ac} (@pxref{autoscan Invocation}, for more information).
@c 
ソフトウェアパッケージの@code{configure}スクリプトを生成するため，パッケー
ジが必要な，または利用可能なシステムの特徴をテストするAutoconfマクロの呼
び出しを含んでいる，@file{configure.ac}と呼ばれるファイルを作成してくだ
さい．Autoconfマクロには，多くの特徴を調査するものはすでに多く存在してい
ます．それら関する記述は，@ref{Existing Tests}．ほとんどのその他の特徴に
対しては，カスタムチェックを生成するAutoconfのテンプレートマクロを使用す
ることが可能です．それらに関する詳細は，@ref{Writing Tests}．特にトリッ
キーな，または専門的な特徴に対して，@file{configure.ac}に，若干の手作り
のシェルコマンドを含める必要もあるでしょう．@code{autoscan}プログラムは
@file{configure.ac}を書くための良いきっかけ与えてくれます．(詳細は，
@pxref{autoscan Invocation})．

@c Previous versions of Autoconf promoted the name @file{configure.in},
@c which is somewhat ambiguous (the tool needed to produce this file is not
@c described by its extension), and introduces a slight confusion with
@c @file{config.h.in} and so on (for which @samp{.in} means ``to be
@c processed by @code{configure}'').  Using @file{configure.ac} is now
@c preferred.
@c 
Autoconfのこれまでのバージョンでは，名前@file{configure.in}を勧めていま
したが，それは曖昧で(このファイルを生成するために必要なツールは，拡張子
では分かりません)，@file{config.h.in}などで(@samp{.in}は
``@code{configure}で生成される''という意味では)ちょっと混乱していました．
現在では，@file{configure.ac}の使用が好まれます．

@menu
* Shell Script Compiler::       Autoconf as solution of a problem
* Autoconf Language::           Programming in Autoconf
* configure.ac Layout::         Standard organization of configure.ac
@end menu

@node Shell Script Compiler, Autoconf Language, Writing configure.ac, Writing configure.ac
@subsection シェルスクリプトコンパイラ

@c Just as for any other computer language, in order to properly program
@c @file{configure.ac} in Autoconf you must understand @emph{what} problem
@c the language tries to address and @emph{how} it does so.
@c 
他のあらゆるコンピュータ言語のために，Autoconfで@file{configure.ac}を正
しくプログラムするために，言語が解決しようとする問題が@emph{何}で，そう
するために@emph{どうする}のかを理解する必要があります．

@c The problem Autoconf addresses is that the world is a mess.  After all,
@c you are using Autoconf in order to have your package compile easily on
@c all sorts of different systems, some of them being extremely hostile.
@c Autoconf itself bears the price for these differences: @code{configure}
@c must run on all those systems, and thus @code{configure} must limit itself
@c to their lowest common denominator of features.
@c 
Autoconfが解決する問題は，世界が混乱しているということです．結局，全ての
異なる種類のシステムでパッケージのコンパイルを簡単にするためにAutoconfを
使用し，それを極端に嫌う人も中にはいます．Autoconf自身は，これらの差を価
値あるものとして扱います．@code{configure}これらの全てのシステムで実行す
る必要があり，そのため，@code{configure}には，機能的にそれらの最小公倍数
に制限する必要があります．

@c Naturally, you might then think of shell scripts; who needs
@c @code{autoconf}?  A set of properly written shell functions is enough to
@c make it easy to write @code{configure} scripts by hand.  Sigh!
@c Unfortunately, shell functions do not belong to the least common
@c denominator; therefore, where you would like to define a function and
@c use it ten times, you would instead need to copy its body ten times.
@c 
通常，シェルスクリプトを考えるでしょう．@code{autoconf}が必要でしょうか？
正しく書かれたシェル関数の組み合わせで，手で@code{configure}スクリプトを
書くことを十分に簡単にします．ああ！残念ながら，シェル関数は最小公倍数で
はありません．そのため，関数を定義しそれを10回使用したいところで，その本
体を10回コピーする必要があるでしょう．

@c So, what is really needed is some kind of compiler, @code{autoconf},
@c that takes an Autoconf program, @file{configure.ac}, and transforms it
@c into a portable shell script, @code{configure}.
@c 
そのため，本当に必要なものは，コンパイラのようなもの，すなわち
@code{autoconf}，Autoconfプログラムが受け入れるもの，すなわち
@file{configure.ac}，そして，それを移植性の高いシェルスクリプト
@code{configure}に変換するものです．

@c How does @code{autoconf} perform this task?
@c 
どのようにして，@code{autoconf}がこの作業を実行するのでしょう？

@c There are two obvious possibilities: creating a brand new language or
@c extending an existing one.  The former option is very attractive: all
@c sorts of optimizations could easily be implemented in the compiler and
@c many rigorous checks could be performed on the Autoconf program
@c (e.g. rejecting any non-portable construct).  Alternatively, you can
@c extend an existing language, such as the @code{sh} (Bourne shell)
@c language.
@c 
可能性としては明らかに2つあります．新しい言語を作成すること，または既存
のものを拡張することです．前者は非常に魅力的です．あらゆる最適化が簡単に
実装可能で，厳密なチェックがAutoconfプログラムで実行可能です(例えば，移
植性のないあらゆる構成物は除外します)．あるいは，@code{sh} (Bourne
shell)言語のように，既存の言語を拡張することが可能です．

@c Autoconf does the latter: it is a layer on top of @code{sh}.  It was
@c therefore most convenient to implement @code{autoconf} as a macro
@c expander: a program that repeatedly performs @dfn{macro expansions} on
@c text input, replacing macro calls with macro bodies and producing a pure
@c @code{sh} script in the end.  Instead of implementing a dedicated
@c Autoconf macro expander, it is natural to use an existing
@c general-purpose macro language, such as M4, and implement the extensions
@c as a set of M4 macros.
@c 
Autoconfは，後者で行なっています．それは@code{sh}の最上位層です．そのた
め，マクロで拡張するものとして@code{autoconf}を実装することが最も便利に
なっています．マクロ呼び出しをマクロの本体で置換し，最終的にピュアな
@code{sh}スクリプトを生成しながら，テキスト入力で@dfn{マクロ拡張}を繰り
返し実行するプログラムです．Autoconfマクロの拡張に専念して実装する代わり
に，M4のような既存の一般的な目的を持つマクロ言語を使用し，M4マクロの組み
合わせとして拡張部分を実装する方が自然です．


@node Autoconf Language, configure.ac Layout, Shell Script Compiler, Writing configure.ac
@subsection Autoconf言語
@cindex quotation

@c The Autoconf language is very different from many other computer
@c languages because it treats actual code the same as plain text.  Whereas
@c in C, for instance, data and instructions have very different syntactic
@c status, in Autoconf their status is rigorously the same.  Therefore, we
@c need a means to distinguish literal strings from text to be expanded:
@c quotation.
@c 
Autoconf言語は，プレーンテキスト同様に実際のコードを扱うので，多くの他の
コンピュータ言語と全く異なります．例えばCでは，データと命令は全く異なる
構文上のステータスとなりますが，Autoconfでは，それらのステータスは厳密に
同じです．このため，我々はリテラル文字列を展開されたテキストと区別する手
段が必要です．それは引用符です．

@c When calling macros that take arguments, there must not be any blank
@c space between the macro name and the open parenthesis.  Arguments should
@c be enclosed within the M4 quote characters @samp{[} and @samp{]}, and be
@c separated by commas.  Any leading spaces in arguments are ignored,
@c unless they are quoted.  You may safely leave out the quotes when the
@c argument is simple text, but @emph{always} quote complex arguments such
@c as other macro calls.  This rule applies recursively for every macro
@c call, including macros called from other macros.
@c 
引数をとるマクロを呼び出す時，マクロ名と開いているカッコの間に空白があっ
てはなりません．引数は，M4の引用符文字@samp{[}と@samp{]}で囲み，カンマで
分けるべきです．引数が単純なテキストのときは，引用符がなくても大丈夫かも
しれませんが，他のマクロの呼び出しのような複雑な引数は，@emph{常に}引用
符で囲んでください．この規則は，他のマクロからの呼び出しを含め，全てのマ
クロ呼び出しで再帰的に適用されます．

@c For instance:
@c 
例えば，以下のようにします．

@example
AC_CHECK_HEADER([stdio.h],
                [AC_DEFINE([HAVE_STDIO_H])],
                [AC_MSG_ERROR([Sorry, can't do anything for you])])
@end example

@noindent
@c is quoted properly.  You may safely simplify its quotation to:
@c 
これは，正しく引用符で囲まれます．その引用を以下のように単純にしても大丈
夫かもしれません．

@example
AC_CHECK_HEADER(stdio.h,
                [AC_DEFINE(HAVE_STDIO_H)],
                [AC_MSG_ERROR([Sorry, can't do anything for you])])
@end example

@noindent
@c Notice that the argument of @code{AC_MSG_ERROR} is still quoted;
@c otherwise, its comma would have been interpreted as an argument separator.
@c 
@code{AC_MSG_ERROR}の引数は，引用符で囲まれたままだということに注意して
ください．そうしない場合は，カンマは引数を分離するものとして解釈されるで
しょう．

@c The following example is wrong and dangerous, as it is underquoted:
@c 
以下の例は，引用符で囲まれていないので，間違っていて危険です．

@example
AC_CHECK_HEADER(stdio.h,
                AC_DEFINE(HAVE_STDIO_H),
                AC_MSG_ERROR([Sorry, can't do anything for you]))
@end example

@c In other cases, you may have to use text that also resembles a macro
@c call.  You must quote that text even when it is not passed as a macro
@c argument:
@c 
他の場合では，マクロ呼び出しのようなテキストを使用する必要があるかもしれ
ません．マクロ引数として渡されない時でもテキストは引用符で囲む必要があり
ます．

@example
echo "Hard rock was here!  --[AC_DC]"
@end example

@noindent
@c which will result in
@c 
結果として以下のようになります．

@example
echo "Hard rock was here!  --AC_DC"
@end example

@noindent
@c When you use the same text in a macro argument, you must therefore have
@c an extra quotation level (since one is stripped away by the macro
@c substitution).  In general, then, it is a good idea to @emph{use double
@c quoting for all literal string arguments}:
@c 
同じテキストをマクロ引数で使用する時は，そのために余分な引用符レベルを加
える必要があります(一つはマクロ置換で削除されるためです)．従って一般的に，
@emph{全てのリテラル文字列の引数に対して2重で引用符を使用すること}は良い
考えです．

@example
AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])
@end example

@c You are now able to understand one of the constructs of Autoconf that
@c has been continually misunderstood@dots{}  The rule of thumb is that
@c @emph{whenever you expect macro expansion, expect quote expansion};
@c i.e., expect one level of quotes to be lost.  For instance:
@c 
絶えず誤解されていたAutoconfの構成物の一つを，今では理解できるでしょう
@dots{} 第一の規則は，@emph{マクロ展開が予測されるところでは，引用符の展
開を予測してください}ということです．すなわち，引用符のレベルの一つが失
われるということです．例えば，以下のようにします．

@example
AC_COMPILE_IFELSE([char b[10];],, [AC_MSG_ERROR([you lose])])
@end example

@noindent
@c is incorrect: here, the first argument of @code{AC_COMPILE_IFELSE} is
@c @samp{char b[10];} and will be expanded once, which results in
@c @samp{char b10;}.  (There was an idiom common in Autoconf's past to
@c address this issue via the M4 @code{changequote} primitive, but do not
@c use it!)  Let's take a closer look: the author meant the first argument
@c to be understood as a literal, and therefore it must be quoted twice:
@c 
これは正しいものです．ここで，@code{AC_COMPILE_IFELSE}最初の引数は，
@samp{char b[10];}で，一度展開されて，結果として@samp{char b10;}になりま
す．(M4の@code{changequote}プリミティブを用いてこの問題を解決することが，
一般的な慣習として以前のAutoconfにありましたが，それを使用しないでくださ
い！)さて，より詳しく見てみましょう．もう一方では，第一引数はリテラルと
して理解され，そのためそれは引用符で2重に囲む必要があります．

@example
AC_COMPILE_IFELSE([[char b[10];]],, [AC_MSG_ERROR([you lose])])
@end example

@noindent
@c Voil@`a, you actually produce @samp{char b[10];} this time!
@c 
Voil@`a，今回は実際に@samp{char b[10];}を生成しているのです！

@c The careful reader will notice that, according to these guidelines, the
@c ``properly'' quoted @code{AC_CHECK_HEADER} example above is actually
@c lacking three pairs of quotes!  Nevertheless, for the sake of readability,
@c double quotation of literals is used only where needed in this manual.
@c 
注意深く読んでいると，これらのガイドラインによれば，上記の例の
@code{AC_CHECK_HEADER}で引用符で``正しく''囲まれているものは，実際には3 
組の引用符が足りないことに気付くでしょう！それにもかかわらず，可読性のた
め，リテラルを2重に引用符で囲むことは，このマニュアルでは必要なところで
のみ使用されます．

@c Some macros take optional arguments, which this documentation represents
@c as @ovar{arg} (not to be confused with the quote characters).  You may
@c just leave them empty, or use @samp{[]} to make the emptiness of the
@c argument explicit, or you may simply omit the trailing commas.  The
@c three lines below are equivalent:
@c 
オプションの引数を受け入れるマクロもあり，それはこのドキュメントでは(引
用符の文字を使用して混乱しないように)，@r{[}@var{arg}@r{]}として表現しま
す．空のままにしたり，明示的に引数を空にするために@samp{[]}を使用したり，
単純に後置されるカンマを省略したりすることが可能です．以下の3 行は等価と
なります．

@example
AC_CHECK_HEADERS(stdio.h, [], [], [])
AC_CHECK_HEADERS(stdio.h,,,)
AC_CHECK_HEADERS(stdio.h)
@end example

@c It is best to put each macro call on its own line in
@c @file{configure.ac}.  Most of the macros don't add extra newlines; they
@c rely on the newline after the macro call to terminate the commands.
@c This approach makes the generated @code{configure} script a little
@c easier to read by not inserting lots of blank lines.  It is generally
@c safe to set shell variables on the same line as a macro call, because
@c the shell allows assignments without intervening newlines.
@c 
@file{configure.ac}では，単独行にそれぞれのマクロ呼び出しを書くことが最
善です．ほとんどのマクロは，余分な改行を加えません．それらはコマンドを終
端するための，マクロ呼び出しの後の改行に依存しています．このアプローチで
は，生成された@code{configure}スクリプトを，多くの空白行を挿入することな
く，若干読みやすくします．シェルは，改行に干渉されることなく割当が可能な
ので，シェル変数をマクロ呼び出しと同じ行で設定すると，通常は安全です．

@c You can include comments in @file{configure.ac} files by starting them
@c with the @samp{#}.  For example, it is helpful to begin
@c @file{configure.ac} files with a line like this:
@c 
@file{configure.ac}ファイルに@samp{#}で始まるコメントを含めることも可能
です．例えば，以下のような行を@file{configure.ac}ファイルの最初に書くと
役に立つでしょう．

@example
# Process this file with autoconf to produce a configure script.
@end example


@node configure.ac Layout,  , Autoconf Language, Writing configure.ac
@subsection 標準的な@file{configure.ac}のレイアウト

@c The order in which @file{configure.ac} calls the Autoconf macros is not
@c important, with a few exceptions.  Every @file{configure.ac} must
@c contain a call to @code{AC_INIT} before the checks, and a call to
@c @code{AC_OUTPUT} at the end (@pxref{Output}).  Additionally, some macros
@c rely on other macros having been called first, because they check
@c previously set values of some variables to decide what to do.  These
@c macros are noted in the individual descriptions (@pxref{Existing
@c Tests}), and they also warn you when @code{configure} is created if they
@c are called out of order.
@c 
@file{configure.ac}でAutoconfマクロを呼び出す順番は，いくつか例外があり
ますが重要ではありません．すべての@file{configure.ac}には，調査の前の 
@code{AC_INIT}の呼び出しと，最後の@code{AC_OUTPUT}の呼び出しを含める必要
があります(@pxref{Output})．さらに，行なうことを決定するために，いくつか
の変数については前もって設定されている値を調査するために，他のマクロが最
初に呼ばれることに依存するマクロもあります．これらのマクロはそれぞれの説
明で書かれ(@pxref{Existing Tests})ていて，@code{configure}が作成されてい
る時，間違った順番で呼び出されている場合は警告されます．

@c To encourage consistency, here is a suggested order for calling the
@c Autoconf macros.  Generally speaking, the things near the end of this
@c list are those that could depend on things earlier in it.  For example,
@c library functions could be affected by types and libraries.
@c 
整合性を促進するため，Autoconfマクロを呼び出す順番をここで提案します．一
般的に言って，このリストの終わり近くのものは，その前のものに依存します．
例えば，ライブラリ関数は型とライブラリの影響があります．

@display
@group
Autoconf requirements
@code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
information on the package
checks for programs
checks for libraries
checks for header files
checks for types
checks for structures
checks for compiler characteristics
checks for library functions
checks for system services
@code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
@code{AC_OUTPUT}
@end group
@end display


@node autoscan Invocation, ifnames Invocation, Writing configure.ac, Making configure Scripts
@section @file{configure.ac}を作成するために@code{autoscan}を使用する
@cindex @code{autoscan}

@c The @code{autoscan} program can help you create and/or maintain a
@c @file{configure.ac} file for a software package.  @code{autoscan}
@c examines source files in the directory tree rooted at a directory given
@c as a command line argument, or the current directory if none is given.
@c It searches the source files for common portability problems and creates
@c a file @file{configure.scan} which is a preliminary @file{configure.ac}
@c for that package, and checks a possibly existing @file{configure.ac} for
@c completeness.
@c 
@code{autoscan}プログラムは，ソフトウェアパッケージに対する 
@file{configure.ac}ファイルの作成と/や管理に役に立ちます．
@code{autoscan}は，コマンドライン引数で与えられたディレクトリをルートと
するディレクトリツリー，または，与えられない場合はカレントディレクトリで
ソースファイルを調査します．それは，ソースファイルの一般的な移植性の問題
を検索して，パッケージのための@file{configure.ac}の準備となるファイル
@file{configure.scan}を作成し，おそらく存在している@file{configure.ac}の
完全性を調査します．

@c When using @command{autoscan} to create a @file{configure.ac}, you
@c should manually examine @file{configure.scan} before renaming it to
@c @file{configure.ac}; it will probably need some adjustments.
@c Occasionally, @code{autoscan} outputs a macro in the wrong order
@c relative to another macro, so that @code{autoconf} produces a warning;
@c you need to move such macros manually.  Also, if you want the package to
@c use a configuration header file, you must add a call to
@c @code{AC_CONFIG_HEADERS} (@pxref{Configuration Headers}).  You might
@c also have to change or add some @code{#if} directives to your program in
@c order to make it work with Autoconf (@pxref{ifnames Invocation}, for
@c information about a program that can help with that job).
@c 
@file{configure.ac}を作成するために@command{autoscan}を使用する時，
@file{configure.scan}を@file{configure.ac}に改名する前に，手作業でそれを
調査する必要があります．恐らくなんらかの調整が必要です．時折
@code{autoscan}は，@code{autoconf}が警告を出すような，関連するマクロに対
して間違った順序でマクロを出力する場合もあります．手作業でそのようなマク
ロを移動する必要があります．また，パッケージでコンフィギュレーションヘッ
ダーファイルを使用する場合も，@code{AC_CONFIG_HEADER}の呼び出しを加える
必要があります(@pxref{Configuration Headers})．また，Autoconfで動作する
ように，プログラムの@code{#if}ディレクティブを変更したり加えたりする必要
があります(そのような仕事に役に立つプログラムの情報は，@pxref{ifnames
Invocation})．

@c When using @command{autoscan} to maintain a @file{configure.ac}, simply
@c consider adding its suggestions.  The file @file{autoscan.log} will
@c contain detailed information on why a macro is requested.
@c 
@file{configure.ac}を管理するために@command{autoscan}を使用している時，
単純にそれが追加した提案を考えてください．ファイル@file{autoscan.log}に
は，マクロが要求される理由に関する詳細な情報が含まれています．

@c @code{autoscan} uses several data files (installed along with Autoconf)
@c to determine which macros to output when it finds particular symbols in
@c a package's source files.  These data files all have the same format:
@c each line consists of a symbol, whitespace, and the Autoconf macro to
@c output if that symbol is encountered.  Lines starting with @samp{#} are
@c comments.
@c 
@code{autoscan}は，パッケージのソースファイルで特定のシンボルを見つけた
とき，出力するマクロを決定するために，(Autoconfと一緒にインストールされ
ている)データファイルも使用します．これらのデータファイルはすべて同じ書
式です．それぞれの行は，シンボル，空白スペース，そしてそのシンボルがある
場合に出力するAutoconfマクロから成り立っています．@samp{#}で始まる行はコ
メントです．

@c @code{autoscan} is only installed if you already have Perl installed.
@c @code{autoscan} accepts the following options:
@c 
@code{autoscan}は，既にPerlがインストールされている場合のみインストール
されます．@code{autoscan}は以下のオプションを受け入れます．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力して終了します．

@item --verbose
@itemx -v
@c Print the names of the files it examines and the potentially interesting
@c symbols it finds in them.  This output can be voluminous.
@c 
調査しているファイルと，その中で見つかった可能性のある興味深いシンボル名
を出力します．この出力は大量になるはずです．

@item --autoconf-dir=@var{dir}
@itemx -A @var{dir}
@evindex AC_MACRODIR
@c Override the location where the installed Autoconf data files are looked
@c for.  You can also set the @code{AC_MACRODIR} environment variable to a
@c directory; this option overrides the environment variable.
@c 
デフォルトのインストールディレクトリの代わりに，ディレクトリ@var{dir}で
データファイルを探します．また，@code{AC_MACRODIR}環境変数でもディレクト
リを設定可能です．このオプションは環境変数に優先します．

@c This option is rarely needed and dangerous; it is only used when one
@c plays with different versions of Autoconf simultaneously.
@c 
このオプションが必要なことは滅多になく危険なものです．一人の人が，異なる
バージョンのAutoconfを同時に使用している時のみ使用されます．
@end table

@node ifnames Invocation, autoconf Invocation, autoscan Invocation, Making configure Scripts
@section 条件をリストアップするため@code{ifnames}を使用する
@cindex @code{ifnames}

@c @code{ifnames} can help you write @file{configure.ac} for a software
@c package.  It prints the identifiers that the package already uses in C
@c preprocessor conditionals.  If a package has already been set up to have
@c some portability, @code{ifnames} can thus help you figure out what its
@c @code{configure} needs to check for.  It may help fill in some gaps in a
@c @file{configure.ac} generated by @code{autoscan} (@pxref{autoscan
@c Invocation}).
@c 
@code{ifnames}は，ソフトウェアパッケージに対する@file{configure.ac}を書
くとき役に立つはずです．それは，Cプリプロセッサの条件式でパッケージが既
に使用している識別子を出力します．パッケージが既に移植性のためにセットアッ
プされている場合，@code{ifnames}は@code{configure}で調査することが必要な
ものを理解することに役く立つはずです．それは@code{autoscan}が生成した
@file{configure.ac}とのギャップを埋める役にも立つかもしれません
(@pxref{autoscan Invocation})．

@c @code{ifnames} scans all of the C source files named on the command line
@c (or the standard input, if none are given) and writes to the standard
@c output a sorted list of all the identifiers that appear in those files
@c in @code{#if}, @code{#elif}, @code{#ifdef}, or @code{#ifndef}
@c directives.  It prints each identifier on a line, followed by a
@c space-separated list of the files in which that identifier occurs.
@c 
@code{ifnames}は，コマンドラインで指名されたすべてのCソースファイルを(無
い場合は標準入力から)走査し，これらのファイルに現れる@code{#if}， 
@code{#elif}，@code{#ifdef}，または@code{#ifndef}ディレクティブの，すべ
ての識別子をソートしたリストを，標準出力に書き出します．それは識別子があ
るファイルの空白で分離されたリストに続いて，一行にぞれぞれの識別子を出力
します．

@noindent
@c @code{ifnames} accepts the following options:
@c 
@code{ifnames}は以下のオプションを受け入れます．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力して終了します．
@end table


@node autoconf Invocation, autoreconf Invocation, ifnames Invocation, Making configure Scripts
@section @code{configure}を作成するため@code{autoconf}を使用する
@cindex @code{autoconf}

@c To create @code{configure} from @file{configure.ac}, run the
@c @code{autoconf} program with no arguments.  @code{autoconf} processes
@c @file{configure.ac} with the @code{m4} macro processor, using the
@c Autoconf macros.  If you give @code{autoconf} an argument, it reads that
@c file instead of @file{configure.ac} and writes the configuration script
@c to the standard output instead of to @code{configure}.  If you give
@c @code{autoconf} the argument @option{-}, it reads from the standard
@c input instead of @file{configure.ac} and writes the configuration script
@c to the standard output.
@c 
@file{configure.ac}から@code{configure}を作成するために，@code{autoconf} 
プログラムを引数なしで実行してください．@code{autoconf}は，Autoconfマク
ロを使用しながら，@code{m4}マクロプロセッサを用いて@file{configure.ac}を
処理します．@code{autoconf}に引数を与える場合，@file{configure.ac}の代わ
りにそのファイルを読み，@code{configure}の代わりに，標準出力にコンフィグ
レーションスクリプトを書き出します．@code{autoconf}に引数@option{-}を与
えた場合，@file{configure.ac}の代わりに標準入力から読み込み，標準出力に
コンフィグレーションスクリプトを書き出します．

@c The Autoconf macros are defined in several files.  Some of the files are
@c distributed with Autoconf; @code{autoconf} reads them first.  Then it
@c looks for the optional file @file{acsite.m4} in the directory that
@c contains the distributed Autoconf macro files, and for the optional file
@c @file{aclocal.m4} in the current directory.  Those files can contain
@c your site's or the package's own Autoconf macro definitions
@c (@pxref{Writing Autoconf Macros}, for more information).  If a macro is defined
@c in more than one of the files that @code{autoconf} reads, the last
@c definition it reads overrides the earlier ones.
@c 
Autoconfマクロは，複数のファイルで定義されています．ファイルは，Autoconf 
と一緒に配布される物もあります．@code{autoconf}は最初にそれを読み込みま
す．オプションのファイル@file{acsite.m4}を，配布されたAutoconfマクロファ
イルを含むディレクトリで探し，オプションのファイル@file{aclocal.m4}はカ
レントディレクトリで探します．これらのファイルは，サイトやパッケージの
Autoconfマクロ定義を含めることが可能です(詳細は，@pxref{Writing Autoconf
Macros})．一つ以上のファイルで定義されているマクロを@code{autoconf}が読
み込む場合，最後の定義がそれ以前の定義に優先します．

@c @code{autoconf} accepts the following options:
@c 
@code{autoconf}は以下のオプションを受け入れます．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力して終了します．

@item --verbose
@itemx -v
@c Report processing steps.
@c 
処理しているステップを報告します．

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時的なファイルを削除しません．

@item --autoconf-dir=@var{dir}
@itemx -A @var{dir}
@evindex AC_MACRODIR
@c Override the location where the installed Autoconf data files are looked
@c for.  You can also set the @code{AC_MACRODIR} environment variable to a
@c directory; this option overrides the environment variable.
@c 
インストールされているAutoconfのデータファイルを探す場所に優先させます．
また，@code{AC_MACRODIR}環境変数でディレクトリを設定することも可能です．
このオプションは，環境変数に優先します．

@c This option is rarely needed and dangerous; it is only used when one
@c plays with different versions of Autoconf simultaneously.
@c 
このオプションが必要なことは滅多になく危険なものです．一人の人が，異なる
バージョンのAutoconfを同時に使用している時のみ使用されます．

@item --localdir=@var{dir}
@itemx -l @var{dir}
@c Look for the package file @file{aclocal.m4} in directory @var{dir}
@c instead of in the current directory.
@c 
パッケージファイル@file{aclocal.m4}をカレントディレクトリの代わりにディ
レクトリ@var{dir}で探します．

@item --output=@var{file}
@itemx -o @var{file}
@c Save output (script or trace) to @var{file}.  The file @option{-} stands
@c for the standard output.
@c 
(出力や追跡の)出力を@var{file}に保存します．ファイル@option{-}は標準出力
に対するものです．

@item --warnings=@var{category}
@itemx -W @var{category}
@evindex WARNINGS
@c Report the warnings related to @var{category} (which can actually be a
@c comma separated list).  @xref{Reporting Messages}, macro
@c @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
@c values include:
@c 
(実際にはカンマで分けたリストが可能な) @var{category}に関連する警告を報
告します．カテゴリの総合リストは，マクロ@code{AC_DIAGNOSE}と
@xref{Reporting Messages}. 特別な値には，以下のものが含まれています．

@table @samp
@item all
@c report all the warnings
@c 
全ての警告を報告します．

@item none
@c report none
@c 
何も報告しません．

@item error
@c treats warnings as errors
@c 
警告をエラーとして扱います．

@item no-@var{category}
@c disable warnings falling into @var{category}
@c 
警告を@var{category}に分類不可能にします．
@end table

@c Warnings about @samp{syntax} are enabled by default, and the environment
@c variable @code{WARNINGS}, a comma separated list of categories, is
@c honored. @command{autoconf -W @var{category}} will actually
@c behave as if you had run:
@c 
@samp{syntax}に関する警告は，デフォルトで利用可能で，カンマで分けられた
カテゴリリストの環境変数@code{WARNINGS}は尊重されます．@command{autoconf
-W @var{category}}は，実際には以下のように実行した場合のように動作します．

@example
autoconf --warnings=syntax,$WARNINGS,@var{category}
@end example

@noindent
@c If you want to disable @command{autoconf}'s defaults and @code{WARNINGS},
@c but (for example) enable the warnings about obsolete constructs, you
@c would use @option{-W none,obsolete}.
@c 
@command{autoconf}のデフォルトと@code{WARNINGS}を利用不可能にしたいが，
(例えば)時代遅れの構成物についての警告は利用可能にしたい場合，@option{-W
none,obsolete}を使用すべきです．

@cindex Back trace
@cindex Macro invocation stack
@c @command{autoconf} displays a back trace for errors, but not for
@c warnings; if you want them, just pass @option{-W error}.  For instance,
@c on this @file{configure.ac}:
@c 
@command{autoconf}はエラーのバックトレースを表示しますが，警告については
行ないません．そうしたい場合，@option{-W error}のみを渡してください．例
えば，以下のような@file{configure.ac}を考えます．

@example
AC_DEFUN([INNER],
[AC_TRY_RUN([true])])

AC_DEFUN([OUTER],
[INNER])

AC_INIT
OUTER
@end example

@noindent
@c you get:
@c 
以下を得ます．

@example
$ autoconf -Wcross
configure.ac:8: warning: AC_TRY_RUN called without default \
to allow cross compiling
$ autoconf -Wcross,error
configure.ac:8: error: AC_TRY_RUN called without default \
to allow cross compiling
acgeneral.m4:3044: AC_TRY_RUN is expanded from...
configure.ac:2: INNER is expanded from...
configure.ac:5: OUTER is expanded from...
configure.ac:8: the top level
@end example

@item --trace=@var{macro}[:@var{format}]
@itemx -t @var{macro}[:@var{format}]
@c Do not create the @code{configure} script, but list the calls to
@c @var{macro} according to the @var{format}.  Multiple @option{--trace}
@c arguments can be used to list several macros.  Multiple @option{--trace}
@c arguments for a single macro are not cumulative; instead, you should
@c just make @var{format} as long as needed.
@c 
@code{configure}スクリプトを作成しませんが，@var{format}でマクロの呼び出
しをリストアップします．複数の@option{--trace}の引数は，複数のマクロをリ
ストアップ煤ために使用可能です．単一のマクロに対する複数の
@option{--trace}の引数は，累積的ではありません．代わりに，@var{format}を
必要なものにすべきです．

@c The @var{format} is a regular string, with newlines if desired, and
@c several special escape codes.  It defaults to @samp{$f:$l:$n:$%}; see
@c below for details on the @var{format}.
@c 
@var{format}は，必要な場合は改行をともなう通常の文字列と，いくつかの特殊
なエスケープコードです．デフォルトは@samp{$f:$l:$n:$%}です．@var{format}
の詳細は，以下を参照してください．

@item --initialization
@itemx -i
@c By default, @option{--trace} does not trace the initialization of the
@c Autoconf macros (typically the @code{AC_DEFUN} definitions).  This
@c results in a noticeable speedup, but can be disabled by this option.
@c 
デフォルトで，@option{--trace}はAutoconfマクロ(特に@code{AC_DEFUN}の定義) 
の初期化を追跡しません．これで顕著に高速化されますが，このオプションで利
用不可能にすることができます．
@end table

@c It is often necessary to check the content of a @file{configure.ac}
@c file, but parsing it yourself is extremely fragile and error-prone.  It
@c is suggested that you rely upon @option{--trace} to scan
@c @file{configure.ac}.
@c 
@file{configure.ac}ファイルの内容をチェックする必要があることもよくあり
ますが，自分で解析することは，非常に脆くエラーを起こしやすいものです．
@file{configure.ac}をスキャンするために，@option{--trace}を信頼してみて
ください．

@c The @var{format} of @option{--trace} can use the following special
@c escapes:
@c 
@option{--trace}の@var{format}は，以下の特別なエスケープが使用可能です．

@table @samp
@item $$
@c The character @samp{$}.
@c 
文字@samp{$}です．

@item $f
@c The filename from which @var{macro} is called.
@c 
@var{macro}が呼び出されるファイル名です．

@item $l
@c The line number from which @var{macro} is called.
@c 
@var{macro}が呼び出される行番号です．

@item $d
@c The depth of the @var{macro} call.  This is an M4 technical detail that
@c you probably don't want to know about.
@c 
@var{macro}呼び出しの深さです．これは，おそらく知らなくてもよい，M4テク
ニックの詳細です．

@item $n
@c The name of the @var{macro}.
@c 
@var{macro}名です．

@item $@var{num}
@c The @var{num}th argument of the call to @var{macro}.
@c 
呼び出された@var{macro}の@var{num}番目の引数です．

@item $@@
@itemx $@var{sep}@@
@itemx $@{@var{separator}@}@@
@c All the arguments passed to @var{macro}, separated by the character
@c @var{sep} or the string @var{separator} (@samp{,} by default).  Each
@c argument is quoted, i.e. enclosed in a pair of square brackets.
@c 
文字@var{sep}または文字列@var{separator}(デフォルトは@samp{,})で分けられ
た，@var{macro}に渡される全ての引数です．それぞれの引数は引用符で囲まれ
ていて，すなわち角カッコで囲まれることになります．

@item $*
@itemx $@var{sep}*
@itemx $@{@var{separator}@}*
@c As above, but the arguments are not quoted.
@c 
上と同じですが，引用符で囲まれていません．

@item $%
@itemx $@var{sep}%
@itemx $@{@var{separator}@}%
@c As above, but the arguments are not quoted, all new line characters in
@c the arguments are smashed, and the default separator is @samp{:}.
@c 
上と同じですが，引数を引用符で囲まず，引数の改行文字は取り除かれ，デフォ
ルトの分離文字は@samp{:}になっています．

@c The escape @samp{$%} produces single-line trace outputs (unless you put
@c newlines in the @samp{separator}), while @samp{$@@} and @samp{$*} do
@c not.
@c 
エスケープの@samp{$%}は，(@samp{separator}を改行にしない限り)単一行に追
跡出力を生成しますが，@samp{$@@}と@samp{$*}はそうではありません．
@end table

@c For instance, to find the list of variables that are substituted, use:
@c 
例えば，置換される変数のリストを探すために，以下のようにしてください．

@example
@group
$ autoconf -t AC_SUBST
configure.ac:2:AC_SUBST:ECHO_C
configure.ac:2:AC_SUBST:ECHO_N
configure.ac:2:AC_SUBST:ECHO_T
@i{More traces deleted}
@end group
@end example

@noindent
@c The example below highlights the difference between @samp{$@@},
@c @samp{$*}, and @strong{$%}.
@c 
以下の例では，@samp{$@@}，@samp{$*}と@strong{$%}の違いを強調しています．

@example
@group
$ cat configure.ac
AC_DEFINE(This, is, [an
[example]])
$ autoconf -t 'AC_DEFINE:@@: $@@
*: $*
$: $%'
@@: [This],[is],[an
[example]]
*: This,is,an
[example]
$: This:is:an [example]
@end group
@end example

@noindent
@c The @var{format} gives you a lot of freedom:
@c 
@var{format}は，柔軟にできます．

@example
@group
$ autoconf -t 'AC_SUBST:$$ac_subst@{"$1"@} = "$f:$l";'
$ac_subst@{"ECHO_C"@} = "configure.ac:2";
$ac_subst@{"ECHO_N"@} = "configure.ac:2";
$ac_subst@{"ECHO_T"@} = "configure.ac:2";
@i{More traces deleted}
@end group
@end example

@noindent
@c A long @var{separator} can be used to improve the readability of complex
@c structures, and to ease its parsing (for instance when no single
@c character is suitable as a separator)):
@c 
長い@var{separator}は，複雑な構想の可読性を改善したり，解析を簡単にする
ために使用可能です(例えば，分離文字に適した単一文字が無いときです)．

@example
@group
$ autoconf -t 'AM_MISSING_PROG:$@{|:::::|@}*'
ACLOCAL|:::::|aclocal|:::::|$missing_dir
AUTOCONF|:::::|autoconf|:::::|$missing_dir
AUTOMAKE|:::::|automake|:::::|$missing_dir
@i{More traces deleted}
@end group
@end example


@node autoreconf Invocation,  , autoconf Invocation, Making configure Scripts
@section @code{configure}スクリプトを更新するため@code{autoreconf}を使用する
@cindex @code{autoreconf}

@c If you have a lot of Autoconf-generated @code{configure} scripts, the
@c @code{autoreconf} program can save you some work.  It runs
@c @code{autoconf} (and @code{autoheader}, where appropriate) repeatedly to
@c remake the Autoconf @code{configure} scripts and configuration header
@c templates in the directory tree rooted at the current directory.  By
@c default, it only remakes those files that are older than their
@c @file{configure.ac} or (if present) @file{aclocal.m4}.  Since
@c @code{autoheader} does not change the timestamp of its output file if
@c the file wouldn't be changing, this is not necessarily the minimum
@c amount of work.  If you install a new version of Autoconf, you can make
@c @code{autoreconf} remake @emph{all} of the files by giving it the
@c @option{--force} option.
@c 
Autoconfが生成した@code{configure}スクリプトがたくさんある場合， 
@code{autoreconf}プログラムは仕事の手助けとなるはずです．それは，
Autoconfの@code{configure}スクリプトとコンフィグレーションヘッダテンプレー
トを再生成するため， @code{autoconf}(と適切なところでは
@code{autoheader}) を，ディレクトリツリーのカレントディレクトリのルート
で実行します．デフォルトで，@file{configure.ac}や(存在する場合)
@file{aclocal.m4}の古い物だけを更新します．変更されない出力ファイルは
@code{autoheader}でタイムスタンプが変更されないので，わずかに不必要な仕
事が減ります．新しいバージョンのAutoconfをインストールした場合，
@option{--force}オプションを与えることで，@code{autoreconf}で@emph{すべ
て}のファイルを再生成することが可能です．

@c If you give @code{autoreconf} the @option{--autoconf-dir=@var{dir}} or
@c @option{--localdir=@var{dir}} options, it passes them down to
@c @code{autoconf} and @code{autoheader} (with relative paths adjusted
@c properly).
@c 
@code{autoreconf}に@option{--autoconf-dir=@var{dir}}や
@option{--localdir=@var{dir}}オプションを@code{autoconf}と 
@code{autoheader}に(正確に調整された相対的なパスと共に)そのまま渡されま
す．

@c @code{autoreconf} does not support having, in the same directory tree,
@c both directories that are parts of a larger package (sharing
@c @file{aclocal.m4} and @file{acconfig.h}) and directories that are
@c independent packages (each with their own @file{aclocal.m4} and
@c @file{acconfig.h}).  It assumes that they are all part of the same
@c package if you use @option{--localdir}, or that each directory is a
@c separate package if you don't use it.  This restriction may be removed
@c in the future.
@c 
@code{autoreconf}は，同じディレクトリツリーに，(@file{aclocal.m4}と
@file{acconfig.h}を共有している)より大きなパッケージの一部となっているディ
レクトリと，(独自の@file{aclocal.m4}と@file{acconfig.h}をそれぞれ持って
いる)他に依存しないパッケージのディレクトリの，両方ともサポートしていま
せん．@option{--localdir}を使用する場合は，それらすべてが同じパッケージ
の一部であり，使用しない場合は，それぞれのディレクトリが別のパッケージだ
と想定します．この制限は将来取り除かれるでしょう．

@c @xref{Automatic Remaking}, for @file{Makefile} rules to automatically
@c remake @code{configure} scripts when their source files change.  That
@c method handles the timestamps of configuration header templates
@c properly, but does not pass @option{--autoconf-dir=@var{dir}} or
@c @option{--localdir=@var{dir}}.
@c 
ソースファイルが変更したとき，@code{configure}スクリプトを自動的に再生成
する@file{Makefile}規則については，@xref{Automatic Remaking}. その方法は，
コンフィギュレーションヘッダテンプレートのタイムスタンプを正確に処理しま
すが，@option{--autoconf-dir=@var{dir}}や@option{--localdir=@var{dir}}を
渡しません．

@noindent
@c @code{autoreconf} accepts the following options:
@c 
@code{autoreconf}は以下のオプションを受け入れます．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力して終了します．

@item --verbose
@c Print the name of each directory where @code{autoreconf} runs
@c @code{autoconf} (and @code{autoheader}, if appropriate).
@c 
@code{autoreconf}が@code{autoconf}(と適切な場合@code{autoheader})を実行
している，それぞれのディレクトリ名を出力します．

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時ファイルを削除しません．

@item --force
@itemx -f
@c Remake even @file{configure} scripts and configuration headers that are
@c newer than their input files (@file{configure.ac} and, if present,
@c @file{aclocal.m4}).
@c 
@file{configure}スクリプトとコンフィグレーションヘッダが入力ファイル
(@file{configure.ac}と，存在する場合は@file{aclocal.m4})より新しくても更
新します．

@item --install
@itemx -i
@c Copy missing auxiliary files.  This option is similar to the option
@c @code{--add-missing} in @code{automake}.
@c 
足りない補助ファイルをコピーします．このオプションは，@code{automake}の
オプション@code{--add-missing}に似ています．

@item --symlink
@itemx -s
@c Instead of copying missing auxiliary files, install symbolic links.
@c 
足りない補助ファイルをコピーする代わりに，シンボリックリンクを導入します．

@item --localdir=@var{dir}
@itemx -l @var{dir}
@c Have @code{autoconf} and @code{autoheader} look for the package files
@c @file{aclocal.m4} and (@code{autoheader} only) @file{acconfig.h} (but
@c not @file{@var{file}.top} and @file{@var{file}.bot}) in directory
@c @var{dir} instead of in the directory containing each @file{configure.ac}.
@c 
@code{autoconf}と@code{autoheader}は，パッケージファイル
@file{aclocal.m4}と(@code{autoheader}のみ)
@file{acconfig.h}(@file{@var{file}.top}と @file{@var{file}.bot}以外)を，
それぞれの@file{configure.ac}が含まれるディレクトリの代わりに，ディレク
トリ@var{dir}で探します．

@item --autoconf-dir=@var{dir}
@itemx -A @var{dir}
@evindex AC_MACRODIR
@c Override the location where the installed Autoconf data files are looked
@c for.  You can also set the @code{AC_MACRODIR} environment variable to a
@c directory; this option overrides the environment variable.
@c 
Autoconfデータファイルがインストールディレクトリの場所に優先させます．ま
た，@code{AC_MACRODIR}環境変数でディレクトリを設定することも可能です．こ
のオプションは環境変数に優先します．

@c This option is rarely needed and dangerous; it is only used when one
@c plays with different versions of Autoconf simultaneously.
@c 
このオプションが必要なことは滅多になく危険なものです．一人の人が，異なる
バージョンのAutoconfを同時に使用している時のみ使用されます．

@item --m4dir=@var{dir}
@itemx -M @var{dir}
@c Specify location of additional macro files (@file{m4} by default).
@c 
追加のマクロファイルの一を指定します(デフォルトは@file{m4}です)．
@end table

@c Additionally, the following options are recognized and passed to
@c @code{automake}:
@c 
さらに，以下のオプションが認識され，@code{automake}に渡されます．

@table @option
@item --cygnus
@c Assume program is part of Cygnus-style tree.
@c 
プログラムがCygnusスタイルのツリーの一部だと仮定します．

@item --foreign
@c Set strictness to foreign.
@c 
厳密さをforeignに設定します．

@item --gnits
@c Set strictness to gnits.
@c 
厳密さをgnitsに設定します．

@item --gnu
@c Set strictness to gnu.
@c 
厳密さをgnuに設定します

@item --include-deps
@c Include generated dependencies in @file{Makefile.in}.
@c 
生成される依存性を@file{Makefile.in}に含めます．
@end table


@c ========================================= Initialization and Output Files.

@node Setup, Existing Tests, Making configure Scripts, Top
@chapter 出力ファイルの初期化

@c Autoconf-generated @code{configure} scripts need some information about
@c how to initialize, such as how to find the package's source files; and
@c about the output files to produce.  The following sections describe
@c initialization and the creation of output files.
@c 
Autoconfが生成した@code{configure}スクリプトは，パッケージのソースファイ
ルの見つけ方のような，初期化の方法の情報を必要とします．そして，生成する
出力ファイルの情報も必要です．次のセクションで，初期化と出力ファイルの作
成について述べます．

@menu
* Notices::                     Copyright, version numbers in @code{configure}
* Input::                       Where Autoconf should find files
* Output::                      Outputting results from the configuration
* Configuration Actions::       Preparing the output based on results
* Configuration Files::         Creating output files
* Makefile Substitutions::      Using output variables in @file{Makefile}s
* Configuration Headers::       Creating a configuration header file
* Configuration Commands::      Running arbitrary instantiation commands
* Configuration Links::         Links depending from the configuration
* Subdirectories::              Configuring independent packages together
* Default Prefix::              Changing the default installation prefix
@end menu

@node Notices, Input, Setup, Setup
@section @code{configure}の注意事項

@c The following macros manage version numbers for @code{configure}
@c scripts.  Using them is optional.
@c 
以下のマクロは，@code{configure}スクリプトのバージョンナンバーを管理しま
す．それはオプションです．

@c FIXME: AC_PREREQ should not be here, but where should it go?
@defmac AC_PREREQ (@var{version})
@maindex PREREQ
@cindex Version
@c Ensure that a recent enough version of Autoconf is being used.  If the
@c version of Autoconf being used to create @code{configure} is earlier
@c than @var{version}, print an error message to the standard error output
@c and do not create @code{configure}.  For example:
@c 
使用しているAutoconfのバージョンが十分新しいことを保証します． 
@code{configure}の作成に使用されるAutoconfのバージョンが，@var{version} 
以前の場合，標準エラー出力にエラーメッセージを出力し，@code{configure} 
を作成しません．例えば以下のようにします．

@example
AC_PREREQ(@value{VERSION})
@end example

@c This macro is the only macro that may be used before @code{AC_INIT}, but
@c for consistency, you are invited not to do so.
@c 
このマクロは，@code{AC_INIT}以前に使用可能な唯一のマクロですが，整合性の
ためにはそうすべきではありません．
@end defmac

@defmac AC_COPYRIGHT (@var{copyright-notice})
@maindex COPYRIGHT
@cindex Copyright Notice
@c State that, in addition to the Free Software Foundation's copyright on
@c the Autoconf macros, parts of your @code{configure} are covered by the
@c @var{copyright-notice}.
@c 
AutoconfマクロへのFree Software Foundationの著作権に加えて，
@code{configure}について@var{copyright-notice}でカバーしたい部分を宣言し
てください．

@c The @var{copyright-notice} will show up in both the head of
@c @code{configure} and in @samp{configure --version}.
@c 
@var{copyright-notice}は，@code{configure}の先頭と，@samp{configure
--version}の両方で表示されます．
@end defmac


@defmac AC_REVISION (@var{revision-info})
@maindex REVISION
@cindex Revision
@c Copy revision stamp @var{revision-info} into the @code{configure}
@c script, with any dollar signs or double-quotes removed.  This macro lets
@c you put a revision stamp from @file{configure.ac} into @code{configure}
@c without @sc{rcs} or @code{cvs} changing it when you check in
@c @code{configure}.  That way, you can determine easily which revision of
@c @file{configure.ac} a particular @code{configure} corresponds to.
@c 
リビジョンスタンプ@var{revision-info}を@code{configure}スクリプトに，ド
ル記号やダブルクォートを削除してコピーします．このマクロは，
@code{configure}をチェックインしたときに@sc{rcs}や@code{cvs}がリビジョン
スタンプを変えなくても，@file{configure.ac}から@code{configure}にそれを
書き込みます．そうすることで，特定の @code{configure}に対応する
@file{configure.ac}のリビジョンが簡単に決定可能になります．

@c For example, this line in @file{configure.ac}:
@c 
例えば，以下の行を@file{configure.ac}に書いたとします．

@c The asis prevents RCS from changing the example in the manual.
@example
AC_REVISION($@asis{Revision: 1.30 }$)
@end example

@noindent
@c produces this in @code{configure}:
@c 
これで，@code{configure}を以下のようになります．

@example
#! /bin/sh
# From configure.ac Revision: 1.30
@end example
@end defmac


@node Input, Output, Notices, Setup
@section @code{configure}の入力を見つける

@c Every @code{configure} script must call @code{AC_INIT} before doing
@c anything else.  The only other required macro is @code{AC_OUTPUT}
@c (@pxref{Output}).
@c 
すべての@code{configure}スクリプトファイルは，他の何よりも前に，
@code{AC_INIT}を呼び出す必要があります．そのほかに必要なマクロは 
@code{AC_OUTPUT}だけです(@pxref{Output})．

@defmac AC_INIT (@var{package}, @var{version}, @r{[}@var{bug-report-address}@r{]})
@maindex INIT
@c Process any command-line arguments and perform various initializations
@c and verifications.  Set the name of the @var{package} and its
@c @var{version}.  The optional argument @var{bug-report-address} should be
@c the email to which users should send bug reports.
@c 
あらゆるコマンドライン引数を処理し，様々な初期化と照合を実行します．
@var{package}の名前とその@var{version}を設定します．オプションの引数
@var{bug-report-address}は ，ユーザがバグレポートを送る電子メールアドレ
スにすべきです．
@end defmac

@defmac AC_CONFIG_SRCDIR (@var{unique-file-in-source-dir})
@maindex CONFIG_SRCDIR
@c @var{unique-file-in-source-dir} is some file that is in the package's
@c source directory; @code{configure} checks for this file's existence to
@c make sure that the directory that it is told contains the source code in
@c fact does.  Occasionally people accidentally specify the wrong directory
@c with @option{--srcdir}; this is a safety check.  @xref{configure
@c Invocation}, for more information.
@c 
@var{unique-file-in-source-dir}は，パッケージのソースディレクトリにある
ファイルです．@code{configure}は，伝えられたディレクトリに実際にソースコー
ドが含まれていることを確認するために，このファイルの存在を調査します．
@option{--srcdir}で間違ったディレクトリを指定してしまう人もいます．これ
は安全性の調査です．詳細は，@xref{configure Invocation}.
@end defmac


@c FIXME: Remove definitively once --install explained.
@c
@c Small packages may store all their macros in @code{aclocal.m4}.  As the
@c set of macros grows, or for maintenance reasons, a maintainer may prefer
@c to split the macros in several files.  In this case, Autoconf must be
@c told which files to load, and in which order.
@c
@c @defmac AC_INCLUDE (@var{file}@dots{})
@c @maindex INCLUDE
@c @c FIXME: There is no longer shell globbing.
@c Read the macro definitions that appear in the listed files.  A list of
@c space-separated filenames or shell globbing patterns is expected.  The
@c files will be read in the order they're listed.
@c
@c Because the order of definition of macros is important (only the last
@c definition of a macro is used), beware that it is @code{AC_INIT} that
@c loads @file{acsite.m4} and @file{aclocal.m4}.  Note that
@c @code{AC_INCLUDE}ing a file before @code{AC_INIT} or within
@c @file{aclocal.m4} is different from doing so after @code{AC_INIT}: in
@c the latter case, non-macro lines from included files may end up in the
@c @file{configure} script, whereas in the former case, they'd be discarded
@c just like any text that appear before @code{AC_INIT}.
@c @end defmac

@c Packages that do manual configuration or use the @code{install} program
@c might need to tell @code{configure} where to find some other shell
@c scripts by calling @code{AC_CONFIG_AUX_DIR}, though the default places
@c it looks are correct for most cases.
@c 
手動でのコンフィグレーションや，@code{install}プログラムを使用するパッケー
ジは，デフォルトの位置でほとんど正しいのですが，@code{AC_CONFIG_AUX_DIR} 
を呼び出して，他のシェルスクリプトを探す場所を@code{configure}に教える必
要があるかもしれません．

@defmac AC_CONFIG_AUX_DIR (@var{dir})
@maindex CONFIG_AUX_DIR
@c Use the auxiliary build tools (e.g., @file{install-sh},
@c @file{config.sub}, @file{config.guess}, Cygnus @code{configure},
@c Automake and Libtool scripts etc.) that are in directory @var{dir}.
@c These are auxiliary files used in configuration.  @var{dir} can be
@c either absolute or relative to @file{@var{srcdir}}.  The default is
@c @file{@var{srcdir}} or @file{@var{srcdir}/..} or
@c @file{@var{srcdir}/../..}, whichever is the first that contains
@c @file{install-sh}.  The other files are not checked for, so that using
@c @code{AC_PROG_INSTALL} does not automatically require distributing the
@c other auxiliary files.  It checks for @file{install.sh} also, but that
@c name is obsolete because some @command{make} have a rule that creates
@c @file{install} from it if there is no @file{Makefile}.
@c 
ディレクトリ@var{dir}にある補助的なビルドツール(例えば，
@file{install-sh}，@file{config.sub}， @file{config.guess}，そしてCygnus
@code{configure}スクリプト)を使用します．@var{dir}は，絶対パスまたは
@file{@var{srcdir}}の相対パスが可能です．デフォルトは 
@file{@var{srcdir}}または@file{@var{srcdir}/..}または
@file{@var{srcdir}/../..}で，@file{install-sh}を含んでいる最初にところで
す．他のファイルは調査しないので，@code{AC_PROG_INSTALL}を使用することで，
他の補助ファイルを配布する必要は自動的になくなります．また，それは 
@file{install.sh}も照査しますが，@code{make}プログラムには， 
@file{Makefile}が無い場合，それから@file{install}を作る規則を持っている
ものあるので，その名前は時代遅れです．
@end defmac


@node Output, Configuration Actions, Input, Setup
@section 出力ファイルを生成する

@c Every Autoconf-generated @code{configure} script must finish by calling
@c @code{AC_OUTPUT}.  It is the macro that generates @file{config.status},
@c which will create the @file{Makefile}s and any other files resulting
@c from configuration.  The only other required macro is @code{AC_INIT}
@c (@pxref{Input}).
@c 
Autoconfが生成したすべての@code{configure}スクリプトは，@code{AC_OUTPUT} 
の呼び出しで終える必要があります．それは，コンフィグレーションの結果生成
される@file{Makefile}とその他のファイルを生成する，@file{config.status}
を生成するマクロです．その他のもので，唯一必要なマクロは@code{AC_INIT}で
す(@pxref{Input})．

@defmac AC_OUTPUT
@maindex OUTPUT
@cindex Instantiation
@c Generate @file{config.status} and launch it.  Call this macro once, at
@c the end of @file{configure.ac}.
@c 
@file{config.status}を生成し，それを実行開始します．@file{configure.ac}
の最後にこのマクロを一度呼び出してください．

@c @file{config.status} will take all the configuration actions: all the
@c output files (see @ref{Configuration Files}, macro
@c @code{AC_CONFIG_FILES}), header files (see @ref{Configuration Headers},
@c macro @code{AC_CONFIG_HEADERS}), commands (see @ref{Configuration
@c Commands}, macro @code{AC_CONFIG_COMMANDS}), links (see
@c @ref{Configuration Links}, macro @code{AC_CONFIG_LINKS}), subdirectories
@c to configure (see @ref{Subdirectories}, macro @code{AC_CONFIG_SUBDIRS})
@c are honored.
@c 
@file{config.status}は，全てのコンフィグレーションの実行を受け入れます．
全ての出力ファイル(@ref{Configuration Files},そしてマクロ
@code{AC_CONFIG_FILES}を参照してください)，ヘッダファイル
(@ref{Configuration Commands},そしてマクロ@code{AC_CONFIG_COMMANDS}を参
照してください)，コマンド(@ref{Configuration Commands},そしてマクロ
@code{AC_CONFIG_COMMANDS}を参照してください)，リンク(@ref{Configuration
Links},そしてマクロ@code{AC_CONFIG_LINKS}を参照してください)，サブディレ
クトリ(@ref{Configuration Links}, そしてマクロ@code{AC_CONFIG_LINKS}を参
照してください)が尊重されます．
@end defmac

@c Historically, the usage of @code{AC_OUTPUT} was somewhat different.
@c @xref{Obsolete Macros}, for a description of the arguments that
@c @code{AC_OUTPUT} used to support.
@c 
歴史的には，@code{AC_OUTPUT}の使用はいくぶん異なっています．
@code{AC_OUTPUT}がサポートする引数の記述は，@xref{Obsolete Macros}.

@c If you run @code{make} on subdirectories, you should run it using the
@c @code{make} variable @code{MAKE}.  Most versions of @code{make} set
@c @code{MAKE} to the name of the @code{make} program plus any options it
@c was given.  (But many do not include in it the values of any variables
@c set on the command line, so those are not passed on automatically.)
@c Some old versions of @code{make} do not set this variable.  The
@c following macro allows you to use it even with those versions.
@c 
サブディレクトリで@code{make}を実行する場合，@code{make}を変数 
@code{MAKE}を使用して実行すべきです．たいていの@code{make}のバージョンは，
@code{MAKE}を@code{make}プログラムと，それに与えるあらゆるオプションを追
加して設定します．(しかし，その中にコマンドラインで設定された値を含まな
いものも多いので，それらは自動的に渡されません．) 古いバージョンの
@code{make}には，変数を設定しないものもあります．以下のマクロでそれらの
バージョンでも使用可能になります．

@defmac AC_PROG_MAKE_SET
@maindex PROG_MAKE_SET
@ovindex SET_MAKE
@c If @code{make} predefines the variable @code{MAKE}, define output
@c variable @code{SET_MAKE} to be empty.  Otherwise, define @code{SET_MAKE}
@c to contain @samp{MAKE=make}.  Calls @code{AC_SUBST} for @code{SET_MAKE}.
@c 
@code{make}が変数@code{MAKE}を前もって定義する場合，出力変数 
@code{SET_MAKE}は空で定義されます．それ以外では，@code{SET_MAKE}は 
@samp{MAKE=make}を含みます．@code{SET_MAKE}に対して@code{AC_SUBST}を呼び
出して下さい．
@end defmac

@c To use this macro, place a line like this in each @file{Makefile.in}
@c that runs @code{MAKE} on other directories:
@c 
このマクロを使用するために，@code{MAKE}を実行する他のディレクトリのそれ
ぞれの@file{Makefile.in}に以下の行を書き込んで下さい．

@example
@@SET_MAKE@@
@end example


@node Configuration Actions, Configuration Files, Output, Setup
@section コンフィグレーションの動作の取得

@c @file{configure} is designed so that it appears to do everything itself,
@c but there is actually a hidden slave: @file{config.status}.
@c @file{configure} is in charge of examining your system, but it is
@c @file{config.status} that actually takes the proper actions based on the
@c results of @file{configure}.  The most typical task of
@c @file{config.status} is to @emph{instantiate} files.
@c 
@file{configure}は，自分が行なっていることが全部分かるように設計されてい
ますが，隠されている従属物も実際にはあります．それは，
@file{config.status}です．@file{configure}はシステムの調査を担当していま
すが，@file{configure}の結果を基に適切な動作を実際に引き受けるのは，
@file{config.status}です．@file{config.status}のほとんどの典型的な作業は，
ファイルを@emph{実際に作成する}ことです．

@c This section describes the common behavior of the four standard
@c instantiating macros: @code{AC_CONFIG_FILES}, @code{AC_CONFIG_HEADERS},
@c @code{AC_CONFIG_COMMANDS} and @code{AC_CONFIG_LINKS}.  They all
@c have this prototype:
@c 
このセクションでは，4つの基本的な実際に何かを作成するマクロの一般的な動
作を説明します．それらは，@code{AC_CONFIG_FILES}，
@code{AC_CONFIG_HEADERS}，@code{AC_CONFIG_COMMANDS}，そして
@code{AC_CONFIG_LINKS}です．それらは全て以下のものが原型となっています．

@c Can't use @ovar{} here, Texinfo 4.0 goes lunatic and emits something
@c awful.
@example
AC_CONFIG_FOOS(@var{tag}@dots{}, [@var{commands}], [@var{init-cmds}])
@end example

@noindent
@c where the arguments are:
@c 
ここでの引数は，以下のとおりです．

@table @var
@item @var{tag}@dots{}
@c A whitespace-separated list of tags, which are typically the names of
@c the files to instantiate.
@c 
空白で分けられたタグのリストで，それらは通常，実際に作成されるファイル名
です．

@item commands
@c Shell commands output literally into @file{config.status}, and
@c associated with a tag that the user can use to tell @file{config.status}
@c which the commands to run.  The commands are run each time a @var{tag}
@c request is given to @file{config.status}; typically, each time the file
@c @file{@var{tag}} is created.
@c 
@file{config.status}に，そのまま出力されるシェルコマンドで，
@file{config.status}に実行するコマンドを伝えるためにユーザが使用すること
が可能な@var{tag}に関連付けされています．@var{tag}の要求が
@file{config.status}に与えられるたびに，コマンドが実行されます．通常は，
ファイル@file{@var{tag}}が作成されるたびになります．

@item init-cmds
@c Shell commands output @emph{unquoted} near the beginning of
@c @file{config.status}, and executed each time @file{config.status} runs
@c (regardless of the tag).  Because they are unquoted, for example,
@c @samp{$var} will be output as the value of @code{var}.  @var{init-cmds}
@c is typically used by @file{configure} to give @file{config.status} some
@c variables it needs to run the @var{commands}.
@c 
@file{config.status}の先頭付近に，引用符で囲まれることなく出力されるシェ
ルコマンドで，@file{config.status}が実行されるたびに(@var{tag}に関係なく) 
実行されます．引用符で囲まれていないので，例えば，@samp{$var}は
@code{var}の値として出力されます．@var{init-cmds}は通常，@var{commands}
を実行するために必要な同じ変数を@file{config.status}に与えるために，
@file{configure}で使用されます．
@end table

@c All these macros can be called multiple times, with different
@c @var{tag}s, of course!
@c 
すべてのこれらのマクロは，もちろん異なる@var{tag}を用いると，何回でも呼
び出せます！

@c You are encouraged to use literals as @var{tags}.  In particular, you
@c should avoid
@c 
@var{tags}として，リテラルを使用することを勧めます．特に，以下は避けた方
が良いでしょう．

@example
@dots{} && my_foos="$my_foos fooo"
@dots{} && my_foos="$my_foos foooo"
AC_CONFIG_FOOS($my_foos)
@end example

@noindent
@c and use this instead:
@c 
この代わりに以下のようにしてください．

@example
@dots{} && AC_CONFIG_FOOS(fooo)
@dots{} && AC_CONFIG_FOOS(foooo)
@end example

@c The macro @code{AC_CONFIG_FILES} and @code{AC_CONFIG_HEADERS} use
@c specials @var{tag}s: they may have the form @samp{@var{output}} or
@c @samp{@var{output}:@var{inputs}}. The file @var{output} is instantiated
@c from its templates, @var{inputs} if specified, defaulting to
@c @samp{@var{output}.in}.
@c 
マクロ@code{AC_CONFIG_FILES}と@code{AC_CONFIG_HEADERS}は，特別な
@var{tag}を使用します．それらは，@samp{@var{output}}や
@samp{@var{output}:@var{inputs}}にすることが可能です．ファイル
@var{output}は，指定されている場合は@var{inputs}をテンプレートとして，デ
フォルトは@samp{@var{output}.in}から実際に作成されます．

@c For instance
@c @samp{AC_CONFIG_FILES(Makefile:boiler/top.mk:boiler/bot.mk)} asks for
@c the creation of @file{Makefile} that will be the expansion of the
@c output variables in the concatenation of @file{boiler/top.mk} and
@c @file{boiler/bot.mk}.
@c 
例えば，@samp{AC_CONFIG_FILES(Makefile:boiler/top.mk:boiler/bot.mk)}は，
@file{boiler/top.mk}と@file{boiler/bot.mk}を繋げたものに，出力変数を展開
した@file{Makefile}を作成するよう要求します．

@c The special value @samp{-} might be used to denote the standard output
@c when used in @var{output}, or the standard input when used in the
@c @var{inputs}.  You most probably don't need to use this in
@c @file{configure.ac}, but it is convenient when using the command line
@c interface of @file{./config.status}, see @ref{config.status Invocation},
@c for more details.
@c 
特殊な値@samp{-}は，@var{output}で使用されているときは標準出力を，
@var{inputs}で使用されているときは標準入力を示すために使用されます．おそ
らく@file{configure.ac}でこれを使用する必要はほとんど無いと思いますが，
@file{./config.status}のコマンドラインインターフェースを使用している時は
便利でしょう．詳細は，@ref{config.status Invocation},を参照してください．

@c The @var{inputs} may be absolute or relative filenames.  In the latter
@c case they are first looked for in the build tree, and then in the source
@c tree.
@c 
@var{inputs}は，絶対パスまたは相対パスを用いたファイル名が可能です．後者
の場合，それは最初にビルドツリーで探され，その後でソースツリーで探されま
す．


@node Configuration Files, Makefile Substitutions, Configuration Actions, Setup
@section コンフィグレーションファイルの作成

@c Be sure to read the previous section, @ref{Configuration Actions}.
@c 
きちんとこの前の章を読んでくださいね，@ref{Configuration Actions}．

@defmac AC_CONFIG_FILES (@var{file}@dots{}, @r{[}@var{cmds}@r{]}, @r{[}@var{init-cmds}@r{]})
@maindex CONFIG_FILES
@c Make @code{AC_OUTPUT} create each @file{@var{file}} by copying an input
@c file (by default @file{@var{file}.in}), substituting the output variable
@c values.
@c 
出力変数の値を置換しながら入力ファイル(デフォルトは@file{@var{file}.in}) 
をコピーすることで，@code{AC_OUTPUT}でそれぞれの@file{@var{file}}を作成
するようにします．
@c Before we used to have this feature, which was later rejected
@c because it complicates the write of Makefiles:
@c If the file would be unchanged, it is left untouched, to preserve
@c timestamp.

@c This macro is one of the instantiating macros, see @ref{Configuration
@c Actions}.  @xref{Makefile Substitutions}, for more information on using
@c output variables.  @xref{Setting Output Variables}, for more information
@c on creating them.  This macro creates the directory that the file is in
@c if it doesn't exist.  Usually, @file{Makefile}s are created this way,
@c but other files, such as @file{.gdbinit}, can be specified as well.
@c 
このマクロは，実際に何かを作成するマクロの一つで，@ref{Configuration
Actions} を参照してください．出力変数を使用することへのより多くの情報は，
@xref{Makefile Substitutions}.それらを作成するためのより多くの情報は，
@xref{Setting Output Variables}.これらのマクロは，存在しない場合はファイ
ルを配置するディレクトリを作成します．通常，@file{Makefile}はこの方法で
作成されますが，@file{.gdbinit}のようなそれ以外のファイルは，指定されて
いることもあります．

@c Typical calls to @code{AC_CONFIG_FILES} look like this:
@c 
典型的な@code{AC_CONFIG_FILES}の呼び出しは，以下のようになります．

@example
AC_CONFIG_FILES(Makefile src/Makefile man/Makefile X/Imakefile)
AC_CONFIG_FILES(autoconf, chmod +x autoconf)
@end example

@c You can override an input file name by appending to @var{file} a
@c colon-separated list of input files.  Examples:
@c 
コロンで分けられた入力ファイル@var{file}のリストを入力ファイルに追加する
ことで，優先可能です．例えば以下のようにします．

@example
AC_CONFIG_FILES(Makefile:boiler/top.mk:boiler/bot.mk
                lib/Makefile:boiler/lib.mk)
@end example

@noindent
@c Doing this allows you to keep your file names acceptable to MS-DOS, or
@c to prepend and/or append boilerplate to the file.
@c 
こうすることで，ファイル名をMS-DOSが受け入れ可能なままにしたり，ファイル
に常套句を前置したり後置したりすることが可能となります．
@end defmac


@node Makefile Substitutions, Configuration Headers, Configuration Files, Setup
@section Makefileへの代入

@c Each subdirectory in a distribution that contains something to be
@c compiled or installed should come with a file @file{Makefile.in}, from
@c which @code{configure} will create a @file{Makefile} in that directory.
@c To create a @file{Makefile}, @code{configure} performs a simple variable
@c substitution, replacing occurrences of @samp{@@@var{variable}@@} in
@c @file{Makefile.in} with the value that @code{configure} has determined
@c for that variable.  Variables that are substituted into output files in
@c this way are called @dfn{output variables}.  They are ordinary shell
@c variables that are set in @code{configure}.  To make @code{configure}
@c substitute a particular variable into the output files, the macro
@c @code{AC_SUBST} must be called with that variable name as an argument.
@c Any occurrences of @samp{@@@var{variable}@@} for other variables are
@c left unchanged.  @xref{Setting Output Variables}, for more information
@c on creating output variables with @code{AC_SUBST}.
@c 
コンパイルされたりインストールされたりするものを含んでいる，配布物のそれ
ぞれのサブディレクトリには，@code{configure}がそのディレクトリに
@file{Makefile}を作成するためのファイル@file{Makefile.in}を配置すべきで
す．@file{Makefile}を作成するために，@file{Makefile.in}の
@samp{@@@var{variable}@@}を@code{configure}が決定したその変数の値に置換
しながら，@code{configure}は単純な変数の代入を行います．このようにして出
力ファイルに代入される変数は，@dfn{output variables}と呼ばれます．それら
は@code{configure}で設定される普通のシェル変数です．@code{configure}が特
定の変数を出力ファイルに代入するように，変数名を引数として
@code{AC_SUBST}マクロを呼び出す必要があります．他の変数に対する
@samp{@@@var{variable}@@}が変化することはありません．@code{AC_SUBST}を用
いた出力変数の作成方法の詳細は，@xref{Setting Output Variables}.

@c A software package that uses a @code{configure} script should be
@c distributed with a file @file{Makefile.in}, but no @file{Makefile}; that
@c way, the user has to properly configure the package for the local system
@c before compiling it.
@c 
@code{configure}スクリプトを使用するソフトウェアパッケージは，ファイル 
@file{Makefile.in}と一緒に配布すべきですが，@file{Makefile}は配布すべき
ではありません．つまり，ユーザはコンパイルする前にローカルシステムに対し
て，正しくパッケージをコンフィグレーションする必要があります．

@c @xref{Makefile Conventions,, Makefile Conventions, standards, The
@c GNU Coding Standards}, for more information on what to put in
@c @file{Makefile}s.
@c 
@file{Makefile}に書くものの詳細は@xref{Makefile Conventions,, Makefile
Conventions, standards, The GNU Coding Standards}.

@menu
* Preset Output Variables::     Output variables that are always set
* Installation Directory Variables::  Other preset output variables
* Build Directories::           Supporting multiple concurrent compiles
* Automatic Remaking::          Makefile rules for configuring
@end menu

@node Preset Output Variables, Installation Directory Variables, Makefile Substitutions, Makefile Substitutions
@subsection 出力変数のプリセット

@c Some output variables are preset by the Autoconf macros.  Some of the
@c Autoconf macros set additional output variables, which are mentioned in
@c the descriptions for those macros.  @xref{Output Variable Index}, for a
@c complete list of output variables.  @xref{Installation Directory
@c Variables}, for the list of the preset ones related to installation
@c directories.  Below are listed the other preset ones.  They all are
@c precious variables (@pxref{Setting Output Variables},
@c @code{AC_ARG_VAR}).
@c 
Autoconfマクロがプリセットする出力変数もあります．追加の出力変数を設定す
るAutoconfマクロもあり，それは，それらのマクロの記述で述べています．出力
変数の完全なリストは，@xref{Output Variable Index}. 以下は，それぞれそれ
以外のプリセットされたもののリストです．それらは全て大切な値です
(@pxref{Setting Output Variables}, @code{AC_ARG_VAR})．

@c Just say no to ASCII sorting!  We're humans, not computers.
@c These variables are listed as they would be in a dictionary:
@c actor
@c Actress
@c actress

@defvar CFLAGS
@ovindex CFLAGS
@c Debugging and optimization options for the C compiler.  If it is not set
@c in the environment when @code{configure} runs, the default value is set
@c when you call @code{AC_PROG_CC} (or empty if you don't).  @code{configure}
@c uses this variable when compiling programs to test for C features.
@c 
Cコンパイラに対する，デバッグと最適化のオプションです．@code{configure} 
を実行する時に環境(変数)で設定されていない場合，@code{AC_PROG_CC}を呼び
出す時にデフォルト値が設定されます(そうでない場合は空になります)．Cの特
徴をテストするためのプログラムをコンパイルする時，@code{configure}はこの
変数を使用します．
@end defvar

@defvar configure_input
@ovindex configure_input
@c A comment saying that the file was generated automatically by
@c @code{configure} and giving the name of the input file.
@c @code{AC_OUTPUT} adds a comment line containing this variable to the top
@c of every @file{Makefile} it creates.  For other files, you should
@c reference this variable in a comment at the top of each input file.  For
@c example, an input shell script should begin like this:
@c 
@code{configure}によって自動的に生成されるファイルを告げ，入力ファイル名
を与えるコメントです．@code{AC_OUTPUT}は，それが作成するすべての
@file{Makefile}の最初に，この変数を含むコメント行を加えます．それ以外の
ファイルは，それぞれの入力ファイルの最初のコメントで，この変数を参照すべ
きです．例えば，入力シェルスクリプトの最初は以下のようにすべきです．

@example
#! /bin/sh
# @@configure_input@@
@end example

@noindent
@c The presence of that line also reminds people editing the file that it
@c needs to be processed by @code{configure} in order to be used.
@c 
またその行の存在で，ファイルを編集している人は，@code{configure}を使用し
て処理する必要があることを思い出します．
@end defvar

@defvar CPPFLAGS
@ovindex CPPFLAGS
@c Header file search directory (@option{-I@var{dir}}) and any other
@c miscellaneous options for the C and C++ preprocessors and compilers.  If
@c it is not set in the environment when @code{configure} runs, the default
@c value is empty.  @code{configure} uses this variable when compiling or
@c preprocessing programs to test for C and C++ features.
@c 
ヘッダファイルを探すディレクトリ(@samp{-I@var{dir}})と，Cプリプロセッサ
とCコンパイラに対する，その他の雑多なオプションです．@code{configure}を
実行する時に環境(変数)に設定されていない場合，デフォルト値は空になります． 
@code{configure}は，Cの特徴をテストするプログラムのコンパイルやプリプロ
セス時にこの変数を使用します．
@end defvar

@defvar CXXFLAGS
@ovindex CXXFLAGS
@c Debugging and optimization options for the C++ compiler.  If it is not
@c set in the environment when @code{configure} runs, the default value is
@c set when you call @code{AC_PROG_CXX} (or empty if you don't).
@c @code{configure} uses this variable when compiling programs to test for
@c C++ features.
@c 
C++コンパイラの，デバッグと最適化オプションです．@code{configure}を実行
する時に環境(変数)に設定されていない場合，@code{AC_PROG_CXX}を呼び出した
時にデフォルト値に設定されます(そうでない場合は空になります)．
@code{configure}は，C++の特徴をテストするプログラムのコンパイル時に，こ
の変数を使用します．
@end defvar

@defvar DEFS
@ovindex DEFS
@c @option{-D} options to pass to the C compiler.  If @code{AC_CONFIG_HEADERS}
@c is called, @code{configure} replaces @samp{@@DEFS@@} with
@c @option{-DHAVE_CONFIG_H} instead (@pxref{Configuration Headers}).  This
@c variable is not defined while @code{configure} is performing its tests,
@c only when creating the output files.  @xref{Setting Output Variables}, for
@c how to check the results of previous tests.
@c 
Cコンパイラに渡す@samp{-D}オプションです．@code{AC_CONFIG_HEADER}が呼び
出された場合，@code{configure}は@samp{@@DEFS@@}の代わりに 
@samp{-DHAVE_CONFIG_H}に置換します(@pxref{Configuration Headers})．この
変数は，@code{configure}がテストを実行している間は定義されず，出力ファイ
ルを作成するときのみ定義されます．前のテストの結果を調査する方法は，
@xref{Setting Output Variables}.
@end defvar

@defvar ECHO_C
@defvarx ECHO_N
@defvarx ECHO_T
@ovindex ECHO_C
@ovindex ECHO_N
@ovindex ECHO_T
@c How does one suppress the trailing newline from @code{echo} for
@c question-answer message pairs?  These variables provide a way:
@c 
質問と回答のメッセージの組に対して，@code{echo}に後置される改行を抑制す
る方法は？これらの変数は，その方法を提供します．

@example
echo $ECHO_N "And the winner is... $ECHO_C"
sleep 100000000000
echo "$@{ECHO_T@}dead."
@end example

@noindent
@c Some old and uncommon @code{echo} implementations offer no means to
@c achieve this, in which case @code{ECHO_T} is set to tab.  You might not
@c want to use it.
@c 
古く一般的でない@code{echo}の実装では，これを達成する意味が無いものもあ
り，その場合，@code{ECHO_T}はタブをに設定されます．そうしたくないかもし
れませんね．
@end defvar

@defvar FFLAGS
@ovindex FFLAGS
@c Debugging and optimization options for the Fortran 77 compiler.  If it
@c is not set in the environment when @code{configure} runs, the default
@c value is set when you call @code{AC_PROG_F77} (or empty if you don't).
@c @code{configure} uses this variable when compiling programs to test for
@c Fortran 77 features.
@c 
Fortran 77コンパイラの，デバッグと最適化オプションです． 
@code{configure}を実行する時に環境(変数)に設定されていない場合， 
@code{AC_PROG_F77}を呼び出したときデフォルト値に設定されます(そうでない
場合は空になります)．@code{configure}は，Fortran 77の特徴をテストするプ
ログラムのコンパイル時に，この変数を使用します．
@end defvar

@defvar LDFLAGS
@ovindex LDFLAGS
@c Stripping (@option{-s}), path (@option{-L}), and any other miscellaneous
@c options for the linker.  Don't use this variable to pass library names
@c (@option{-l}) to the linker, use @code{LIBS} instead.  If it is not set
@c in the environment when @code{configure} runs, the default value is empty.
@c @code{configure} uses this variable when linking programs to test for
@c C, C++ and Fortran 77 features.
@c 
strip(@samp{-s})，パス(@option{-L})，その他のあらゆる雑多なリンカに対す
るオプションです．@code{configure}を実行する時に環境(変数)に設定されてい
ない場合，デフォルト値は空になります．@code{configure}は，C，C++，そして
Fortran 77の特徴をテストするプログラムのリンク時に，この変数を使用します．
@end defvar

@defvar LIBS
@ovindex LIBS
@c @option{-l} options to pass to the linker.  The default value is empty,
@c but some Autoconf macros may prepend extra libraries to this variable if
@c those libraries are found and provide necessary functions, see
@c @ref{Libraries}.  @code{configure} uses this variable when linking
@c programs to test for C, C++ and Fortran 77 features.
@c 
リンカに渡す@samp{-l}オプションです．デフォルト値は空ですが，ライブラリ
が見つかり，必要な関数を提供する場合，Autoconfマクロはこの変数に追加のラ
イブラリを前置するかもしれません．@ref{Libraries}を参照してください．
@code{configure}は，C，C++，そしてFortran 77の特徴をテストするプログラム
のリンク時に，この変数を使用します．
@end defvar

@defvar srcdir
@ovindex srcdir
@c The directory that contains the source code for that @file{Makefile}.
@c 
@file{Makefile}に対するソースコードを含んでいるディレクトリです．
@end defvar

@defvar top_srcdir
@ovindex top_srcdir
@c The top-level source code directory for the package.  In the top-level
@c directory, this is the same as @code{srcdir}.
@c 
パッケージのソースコードのトップレベルのディレクトリです．トップレベルの
ディレクトリでは，これは@code{srcdir}と同じになります．
@end defvar


@node Installation Directory Variables, Build Directories, Preset Output Variables, Makefile Substitutions
@subsection インストールディレクトリの変数

@c The following variables specify the directories where the package will
@c be installed, see @ref{Directory Variables,, Variables for Installation
@c Directories, standards, The GNU Coding Standards}, for more information.
@c See the end of this section for details on when and how to use these
@c variables.
@c 
以下の変数は，パッケージがインストールされる場所を指定します．詳細は，
@ref{Directory Variables,, Variables for Installation Directories,
standards, The GNU Coding Standards},を参照してください．これらの変数を
使用する時とその方法の詳細は，このセクションの終りを参照してください．

@defvar bindir
@ovindex bindir
@c The directory for installing executables that users run.
@c 
ユーザが実行する実行可能なプログラムをインストールするディレクトリです．
@end defvar

@defvar datadir
@ovindex datadir
@c The directory for installing read-only architecture-independent data.
@c 
読み込み専用のアーキテクチャに依存しないデータをインストールするディレク
トリです．
@end defvar

@defvar exec_prefix
@ovindex exec_prefix
@c The installation prefix for architecture-dependent files.  By default
@c it's the same as @var{prefix}.  You should avoid installing anything
@c directly to @var{exec_prefix}.  However, the default value for
@c directories containing architecture-dependent files should be relative
@c to @var{exec_prefix}.
@c 
アーキテクチャに依存するファイルをインストールするプレフィックスです．デ
フォルトは，@var{prefix}と同じです．@var{exec_prefix}にいろんなものを直
接インストールすることは避けた方が良いでしょう．しかし，アーキテクチャに
依存するファイルを含むディレクトリに対するデフォルト値は，
@var{exec_prefix}から相対的なものにすべきです．
@end defvar

@defvar includedir
@ovindex includedir
@c The directory for installing C header files.
@c 
Cヘッダファイルをインストールするディレクトリです．
@end defvar

@defvar infodir
@ovindex infodir
@c The directory for installing documentation in Info format.
@c 
Info形式のドキュメントをインストールするディレクトリです．
@end defvar

@defvar libdir
@ovindex libdir
@c The directory for installing object code libraries.
@c 
オブジェクトコードライブラリをインストールするディレクトリです．
@end defvar

@defvar libexecdir
@ovindex libexecdir
@c The directory for installing executables that other programs run.
@c 
他のプログラムが実行する，実行可能なプログラムをインストールするディレク
トリです．
@end defvar

@defvar localstatedir
@ovindex localstatedir
@c The directory for installing modifiable single-machine data.
@c 
修正可能なシングルマシンのデータをインストールするディレクトリです．
@end defvar

@defvar mandir
@ovindex mandir
@c The top-level directory for installing documentation in man format.
@c 
man形式のドキュメントをインストールするトップレベルのディレクトリです．
@end defvar

@defvar oldincludedir
@ovindex oldincludedir
@c The directory for installing C header files for non-gcc compilers.
@c 
gccコンパイラ以外のためのCヘッダファイルをインストールするディレクトリで
す．
@end defvar

@defvar prefix
@ovindex prefix
@c The common installation prefix for all files. If @var{exec_prefix}
@c is defined to a different value, @var{prefix} is used only for
@c architecture-independent files.
@c
全てのファイルに対する共通のインストールプレフィクスです．
@var{exec_prefix}がことなる値で定義されている場合，@var{prefix}はアーキ
テクチャ非依存ファイルに対してのみ使用されます．
@end defvar

@defvar sbindir
@ovindex sbindir
@c The directory for installing executables that system
@c administrators run.
@c 
システム管理者が実行する実行可能なプログラムをインストールするディレクト
リです．
@end defvar

@defvar sharedstatedir
@ovindex sharedstatedir
@c The directory for installing modifiable architecture-independent data.
@c 
修正可能な，アーキテクチャに依存しないデータをインストールするディレクト
リです．
@end defvar

@defvar sysconfdir
@ovindex sysconfdir
@c The directory for installing read-only single-machine data.
@c 
読み込み専用の，シングルマシンのデータをインストールするディレクトリです．
@end defvar


@c Most of these variables have values that rely on @code{prefix} or
@c @code{exec_prefix}.  It is on purpose that the directory output
@c variables keep them unexpanded: typically @samp{@@datadir@@} will be
@c replaced by @samp{$@{prefix@}/share}, not @samp{/usr/local/share}.
@c 
これらの変数のほとんどは，@code{prefix}や@code{exec_prefix}に依存する値
を持ちます．ディレクトリ変数の出力値が展開されないように故意に行なってい
ます．典型的な例として，@samp{@@datadir@@}は，@samp{/usr/local/share}で
はなく@samp{$@{prefix@}/share}に置換されます．

@c This behavior is mandated by the @sc{gnu} coding standards, so that when
@c the user runs:
@c 
以下の動作は，@sc{gnu} coding standardsで示されれていて，ユーザが実行時
にそうなるようになっています．

@table @samp
@item make
@c she can still specify a different prefix from the one specified to
@c @command{configure}, in which case, if needed, the package shall hard
@c code dependencies to her late desires.
@c 
@command{configure}に指定されるものとは異なるプレフィクスを指定すること
がまだ可能で，その場合，必要があれば，遅れてなされた要求に依存するようパッ
ケージをハードコード化します。

@item make install
@c she can specify a different installation location, in which case the
@c package @emph{must} still depend on the location which was compiled in
@c (i.e., never recompile when @samp{make install} is run).  This is an
@c extremely important feature, as many people may decide to install all
@c the files of a package grouped together, and then install links from
@c the final locations to there.
@c 
異なるインストール位置を指定することが可能で，その場合，パッケージはコン
パイルで指定した場所に，まだ依存している@emph{はず}です(すなわち，
@samp{make install}を実行する時は再コンパイルされません)．お互いにグルー
プ化された全てのファイルを，インストール時に決定する人も多いので，これは
非常に重要な特徴で，そこからインストール後に最終的な場所にリンクが張られ
ます．
@end table

@c In order to support these features, it is essential that @code{datadir}
@c remains being defined as @samp{$@{prefix@}/share} to depend upon the
@c current value of @code{prefix}.
@c 
これらの特徴をサポートするために，@code{datadir}が@code{prefix}の現在の
値に依存する@samp{$@{prefix@}/share}として定義されたままになっていること
が重要です．

@c A corollary is that you should not use these variables but in Makefiles.
@c For instance, instead of trying to evaluate @code{datadir} in
@c @file{configure} and hardcoding it in Makefiles using
@c e.g. @samp{AC_DEFINE_UNQUOTED(DATADIR, "$datadir")}, you should add
@c @samp{-DDATADIR="$(datadir)"} to your @code{CPPFLAGS}.
@c 
当然のことですが，これらの変数をMakefileで使用すべきではありません．例え
ば，@file{configure}で@code{datadir}を評価する代わりに，Makefileで，例え
ば@samp{AC_DEFINE_UNQUOTED(DATADIR, "$datadir")}としてハードコードする場
合は，@samp{-DDATADIR="$(datadir)"}を@code{CPPFLAGS}に加えるべきです．

@c Similarly you should not rely on @code{AC_OUTPUT_FILES} to replace
@c @code{datadir} and friends in your shell scripts and other files, rather
@c let @command{make} manage their replacement.  For instance Autoconf
@c ships templates of its shell scripts ending with @samp{.sh}, and uses
@c this Makefile snippet:
@c 
同様に，@code{datadir}とその仲間を，シェルスクリプトやその他のファイルで
置換するために，@code{AC_OUTPUT_FILES}に頼るべきではなく，その代わりに
@command{make}にその置換を行なわせてください．@samp{.sh}で終るシェルスク
リプトのAutoconf的なテンプレートの例として，以下のようなMakefileの一部を
使用してください．

@example
.sh:
        rm -f $@@ $@@.tmp
        sed 's,@@datadir\@@,$(pkgdatadir),g' $< >$@@.tmp
        chmod +x $@@.tmp
        mv $@@.tmp $@@
@end example

@c Three things are noteworthy:
@c 
注目すべきことは3つあります．

@table @samp
@item @@datadir\@@
@c The backslash prevents @command{configure} from replacing
@c @samp{@@datadir@@} in the sed expression itself.
@c 
バックスラッシュで@command{configure}が@samp{@@datadir@@}をsedの式自身に
置換することを妨げます．

@item $(pkgdatadir)
@c Don't use @samp{@@pkgdatadir@@}!  Use the matching makefile variable
@c instead.
@c 
@samp{@@pkgdatadir@@}を使用しないでください！代わりに，makefile変数の一
致を使用してください．

@item ,
@c Don't use @samp{/} in the sed expression(s) since most probably the
@c variables you use, such as @samp{$(pkgdatadir)}, will contain
@c some.
@c 
@samp{$(pkgdatadir)}のように@samp{/}を含んでいる変数を使用する可能性があ
るので，sedの式で@samp{/}を使用しないでください．
@end table


@node Build Directories, Automatic Remaking, Installation Directory Variables, Makefile Substitutions
@subsection ビルドディレクトリ

@c You can support compiling a software package for several architectures
@c simultaneously from the same copy of the source code.  The object files
@c for each architecture are kept in their own directory.
@c 
同じソースコードのコピーから，同時に複数のアーキテクチャに対するソフトウェ
アパッケージのコンパイルをサポートすることが可能です．それぞれのアーキテ
クチャに対するオブジェクトファイルは，それ自身のディレクトリに保存されま
す．

@c To support doing this, @code{make} uses the @code{VPATH} variable to
@c find the files that are in the source directory.  @sc{gnu} @code{make}
@c and most other recent @code{make} programs can do this.  Older
@c @code{make} programs do not support @code{VPATH}; when using them, the
@c source code must be in the same directory as the object files.
@c 
これをサポートするために，@code{make}は，ソースディレクトリにあるファイ
ルを見つけるため@code{VPATH}変数を使用します．@sc{gnu} @code{make}とその
他のほとんどの最近の@code{make}プログラムはこうすることが可能です．もっ
と古い@code{make}プログラムは，@code{VPATH}をサポートしていません．それ
を使用する時は，ソースコードをオブジェクトファイルと同じディレクトリ置く
必要があります．

@c To support @code{VPATH}, each @file{Makefile.in} should contain two
@c lines that look like:
@c 
@code{VPATH}をサポートするため，それぞれの@file{Makefile.in}には，以下の
ような2行が必要です．

@example
srcdir = @@srcdir@@
VPATH = @@srcdir@@
@end example

@c Do not set @code{VPATH} to the value of another variable, for example
@c @samp{VPATH = $(srcdir)}, because some versions of @code{make} do not do
@c variable substitutions on the value of @code{VPATH}.
@c 
@code{VPATH}の値に変数を代入しない@code{make}のバージョンもあるので， 
@code{VPATH}に他の値，例えば@samp{VPATH = $(srcdir)}を設定しないでくださ
い．

@c @code{configure} substitutes in the correct value for @code{srcdir} when
@c it produces @file{Makefile}.
@c 
@code{configure}は@file{Makefile}を作成するとき，@code{srcdir}に正しい値
を代入します．

@c Do not use the @code{make} variable @code{$<}, which expands to the
@c file name of the file in the source directory (found with @code{VPATH}),
@c except in implicit rules.  (An implicit rule is one such as @samp{.c.o},
@c which tells how to create a @file{.o} file from a @file{.c} file.)  Some
@c versions of @code{make} do not set @code{$<} in explicit rules; they
@c expand it to an empty value.
@c 
暗黙の規則を期待して，(@code{VPATH}で見つかる)ソースディレクトリのファイ
ルのパス名を展開する@code{make}変数の@code{$<}を使用しないでください．
(暗黙の規則とは，@file{.c}ファイルから@file{.o}ファイルを作成する方法を
教える@samp{.c.o}の様なものです．)暗黙の規則で@code{$<}を設定しないバー
ジョンの@code{make}もあり，それは，空の値で展開します．

@c Instead, @file{Makefile} command lines should always refer to source
@c files by prefixing them with @samp{$(srcdir)/}.  For example:
@c 
その代わり，@file{Makefile}コマンドラインは，ソースファイルを 
@samp{$(srcdir)/}を前置して参照します．例えば以下のようにします．

@example
time.info: time.texinfo
        $(MAKEINFO) $(srcdir)/time.texinfo
@end example


@node Automatic Remaking,  , Build Directories, Makefile Substitutions
@subsection 自動的なリメイク

@c You can put rules like the following in the top-level @file{Makefile.in}
@c for a package to automatically update the configuration information when
@c you change the configuration files.  This example includes all of the
@c optional files, such as @file{aclocal.m4} and those related to
@c configuration header files.  Omit from the @file{Makefile.in} rules for
@c any of these files that your package does not use.
@c 
コンフィグレーションファイルを変更したとき自動的にコンフィグレーション情
報を更新するため，パッケージに対するトップレベルの@file{Makefile.in}に以
下のような規則を書くことが可能でます．以下の例には，@file{aclocal.m4}や
それらが関連するるコンフィグレーションヘッダファイルのような，全てのオプ
ションのファイルを含まれています．パッケージで使用しないこれらのファイル
に対する@file{Makefile.in}規則は削除してください．

@c The @samp{$(srcdir)/} prefix is included because of limitations in the
@c @code{VPATH} mechanism.
@c 
@samp{$@{srcdir@}/}プレフィクスは@code{VPATH}メカニズムの制限のため含ん
でいます．

@c The @file{stamp-} files are necessary because the timestamps of
@c @file{config.h.in} and @file{config.h} will not be changed if remaking
@c them does not change their contents.  This feature avoids unnecessary
@c recompilation.  You should include the file @file{stamp-h.in} your
@c package's distribution, so @command{make} will consider
@c @file{config.h.in} up to date.  Don't use @command{touch}
@c (@pxref{Limitations of Usual Tools}), rather use @command{echo} (using
@c @command{date} would cause needless differences, hence @sc{cvs}
@c conflicts etc.).
@c 
@file{config.h.in}と@file{config.h}のタイムスタンプは，内容が変化しない
場合には変化しないので，@file{stamp-}ファイルが必要です．この機能は不必
要な再コンパイルを避けます．パッケージの配布物に@file{stamp-h.in}を含め
るべきで，そうすることで@code{make}は@file{config.h.in}が最新だというこ
とを考慮します．@command{touch} (@pxref{Limitations of Usual Tools})を使
用せず，代わりに@command{echo}を使用してください(@command{date}を使用す
ると不必要な差異を生じ，@sc{cvs}で矛盾したりするでしょう)．

@example
@group
$(srcdir)/configure: configure.ac aclocal.m4
        cd $(srcdir) && autoconf

# autoheader might not change config.h.in, so touch a stamp file.
$(srcdir)/config.h.in: stamp-h.in
$(srcdir)/stamp-h.in: configure.ac aclocal.m4
        cd $(srcdir) && autoheader
        echo timestamp > $(srcdir)/stamp-h.in

config.h: stamp-h
stamp-h: config.h.in config.status
        ./config.status

Makefile: Makefile.in config.status
        ./config.status

config.status: configure
        ./config.status --recheck
@end group
@end example

@noindent
@c (Be careful if you copy these lines directly into your Makefile, as you
@c will need to convert the indented lines to start with the tab character.)
@c 
この行を直接Makefileにコピーする時は，インデントされた行がタブ文字で始ま
るように置換する必要があるので注意してください．)

@c In addition, you should use @samp{AC_CONFIG_FILES(stamp-h, echo
@c timestamp > stamp-h)} so @file{config.status} will ensure that
@c @file{config.h} is considered up to date.  @xref{Output}, for more
@c information about @code{AC_OUTPUT}.
@c 
更に，@samp{AC_CONFIG_FILES(stamp-h, echo timestamp > stamp-h)}を使用す
べきで，そうすることで@file{config.status}は@file{config.h}が最新である
ことを確かめます．@code{AC_OUTPUT}の詳細は，@xref{Output}.

@c @xref{config.status Invocation}, for more examples of handling
@c configuration-related dependencies.
@c 
依存性に関係するコンフィグレーションの例は，@xref{config.status
Invocation}.


@node Configuration Headers, Configuration Commands, Makefile Substitutions, Setup
@section コンフィグレーションヘッダファイル
@cindex Configuration Header
@cindex @file{config.h}

@c When a package tests more than a few C preprocessor symbols, the command
@c lines to pass @option{-D} options to the compiler can get quite long.
@c This causes two problems.  One is that the @code{make} output is hard to
@c visually scan for errors.  More seriously, the command lines can exceed
@c the length limits of some operating systems.  As an alternative to
@c passing @option{-D} options to the compiler, @code{configure} scripts can
@c create a C header file containing @samp{#define} directives.  The
@c @code{AC_CONFIG_HEADERS} macro selects this kind of output.  It should
@c be called right after @code{AC_INIT}.
@c 
2，3個以上のCプリプロセッサのシンボルをパッケージでテストするとき，コマ
ンドラインでコンパイラに渡す@samp{-D}オプションはかなり長くなります．こ
れは2つの問題があります．一つは，@code{make}の出力のエラーを探すとき，見
て分からなくなることですす．更に深刻な問題は，コマンドラインがいくつかの
オペレーティングシステムの長さの制限を越えることです．コンパイラに
@samp{-D}オプションを渡す代わりに， @code{configure}スクリプトは
@samp{#define}ディレクティブを含んでいるCヘッダファイルを作成することが
可能です．@code{AC_CONFIG_HEADER}マクロで，この出力を選択します．それは，
@code{AC_INIT}の直後に呼び出します．

@c The package should @samp{#include} the configuration header file before
@c any other header files, to prevent inconsistencies in declarations (for
@c example, if it redefines @code{const}).  Use @samp{#include <config.h>}
@c instead of @samp{#include "config.h"}, and pass the C compiler a
@c @option{-I.} option (or @option{-I..}; whichever directory contains
@c @file{config.h}).  That way, even if the source directory is configured
@c itself (perhaps to make a distribution), other build directories can
@c also be configured without finding the @file{config.h} from the source
@c directory.
@c 
(例えば，@code{const}を再定義する場合)宣言の不一致を防ぐために，パッケー
ジでは，あらゆる他のヘッダの前で，コンフィグレーションヘッダファイルを 
@samp{#include}すべきです．@samp{#include "config.h"}の代わりに 
@samp{#include <config.h>}を使用し，Cコンパイラに@samp{-I.}オプション(ま
たは@samp{-I..}．@file{config.h}がある方)を渡してください．そうすること
で，(おそらく配布物を作成するときに)ソースディレクトリがコンフィグレーショ
ンされても，他のビルドディレクトリは，ソースディレクトリから 
@file{config.h}を探すことなく，コンフィグレーション可能になります．

@defmac AC_CONFIG_HEADERS (@var{header} @dots{}, @r{[}@var{cmds}@r{]}, @r{[}@var{init-cmds}@r{]})
@maindex CONFIG_HEADERS
@cvindex HAVE_CONFIG_H
@c This macro is one of the instantiating macros, see @ref{Configuration
@c Actions}.  Make @code{AC_OUTPUT} create the file(s) in the
@c whitespace-separated list @var{header} containing C preprocessor
@c @code{#define} statements, and replace @samp{@@DEFS@@} in generated
@c files with @option{-DHAVE_CONFIG_H} instead of the value of @code{DEFS}.
@c The usual name for @var{header} is @file{config.h}.
@c 
このマクロは，実際にファイルを作成するマクロの一つです．
@ref{Configuration Actions}を参照してください．@code{AC_OUTPUT}が，
@code{#define}宣言のCプリプロセッサを含んでいる@var{header}の空白で区切
られたリストを作成し，生成されたファイルの@samp{@@DEFS@@}を，@code{DEFS} 
の値の代わりに，@option{-DHAVE_CONFIG_H}で置換します．通常，@var{header} 
の名前は @file{config.h}です．

@c If @var{header} already exists and its contents are identical to what
@c @code{AC_OUTPUT} would put in it, it is left alone.  Doing this allows
@c some changes in configuration without needlessly causing object files
@c that depend on the header file to be recompiled.
@c 
@var{header}がすでに存在し，内容が@code{AC_OUTPUT}が書き込むものと同じ場
合は，そのまま残ります．こうすることで，ヘッダファイルに依存するオブジェ
クトファイルを不必要に再コンパイルする必要がなく，コンフィグレーション時
に変更が可能になります．

@c Usually the input file is named @file{@var{header}.in}; however, you can
@c override the input file name by appending to @var{header}, a
@c colon-separated list of input files.  Examples:
@c 
通常，入力ファイルは@file{@var{header}.in}と命名されます．しかし，入力ファ
イルをコロンで分けた入力ファイルのリストを@var{header}を加えることで優先可能です．例えば，以下のようにします．

@example
AC_CONFIG_HEADERS(config.h:config.hin)
AC_CONFIG_HEADERS(defines.h:defs.pre:defines.h.in:defs.post)
@end example

@noindent
@c Doing this allows you to keep your file names acceptable to MS-DOS, or
@c to prepend and/or append boilerplate to the file.
@c 
こうすることで，MS-DOSでアクセスできるままにしたり，常套句をファイルに前
置すること，そして/または，後置することが可能になります．
@end defmac

@c @xref{Configuration Actions}, for more details on @var{header}.
@c 
@var{header}の詳細は，@xref{Configuration Actions}.

@menu
* Header Templates::            Input for the configuration headers
* autoheader Invocation::       How to create configuration templates
* Autoheader Macros::           How to specify CPP templates
@end menu

@node Header Templates, autoheader Invocation, Configuration Headers, Configuration Headers
@subsection ヘッダテンプレートのコンフィグレーション
@cindex Configuration Header Template
@cindex @file{config.h.in}

@c Your distribution should contain a template file that looks as you want
@c the final header file to look, including comments, with @code{#undef}
@c statements which are used as hooks.  For example, suppose your
@c @file{configure.ac} makes these calls:
@c 
最終的なヘッダファイルが見つかるように，コメントとフックとして使用される
@code{#undef}宣言を含んでいるテンプレートファイルを，配布物に含めるべき
です．例えば，@file{configure.ac}で以下のように呼び出します．

@example
AC_CONFIG_HEADERS(conf.h)
AC_CHECK_HEADERS(unistd.h)
@end example

@noindent
@c Then you could have code like the following in @file{conf.h.in}.  On
@c systems that have @file{unistd.h}, @code{configure} will @samp{#define}
@c @samp{HAVE_UNISTD_H} to 1.  On other systems, the whole line will be
@c commented out (in case the system predefines that symbol).
@c 
@file{conf.h.in}で次のようなコードを書きます．@file{unistd.h}があるシス
テムでは，@code{configure}は@samp{#define} @samp{HAVE_UNISTD_H}を1にしま
す．それ以外のシステムでは，行全体がコメントアウトされます(このシステム
の場合，シンボルは前もって定義されません)．

@example
@group
/* Define as 1 if you have unistd.h.  */
#undef HAVE_UNISTD_H
@end group
@end example

@c You can then decode the configuration header using the preprocessor
@c directives:
@c 
その後で，プリプロセッサ命令を使用しているコンフィグレーションヘッダをデ
コードすることが可能です．

@example
@group
#include <conf.h>

#if HAVE_UNISTD_H
# include <unistd.h>
#else
/* We are in trouble. */
#endif
@end group
@end example

@c The use of old form templates, with @samp{#define} instead of
@c @samp{#undef} is strongly discouraged.
@c 
@samp{#undef}の代わりに@samp{#define}を用いている，古い形式のテンプレー
トの使用は，強く反対します．

@c Since it is a tedious task to keep a template header up to date, you may
@c use @code{autoheader} to generate it, see @ref{autoheader Invocation}.
@c 
テンプレートヘッダを更新し続けることは退屈な作業なので，それを生成するた
めに@code{autoheader}してもかまいません．@ref{autoheader Invocation}を参
照してください．


@node autoheader Invocation, Autoheader Macros, Header Templates, Configuration Headers
@subsection @file{config.h.in}を生成するため@code{autoheader}を使用する
@cindex @code{autoheader}

@c The @command{autoheader} program can create a template file of C
@c @samp{#define} statements for @code{configure} to use.  If
@c @file{configure.ac} invokes @code{AC_CONFIG_HEADERS(@var{file})},
@c @command{autoheader} creates @file{@var{file}.in}; if multiple file
@c arguments are given, the first one is used.  Otherwise,
@c @command{autoheader} creates @file{config.h.in}.
@c 
@code{autoheader}プログラムは，@code{configure}が使用するためのCの
@samp{#define}宣言のテンプレートファイルを作成可能です．
@file{configure.ac}で@code{AC_CONFIG_HEADERS(@var{file})}を呼び出す場合，
@code{autoheader}は@file{@var{file}.in}を作成します．複数のファイルが引
数で与えられている場合，最初のファイルを使用します．それ以外の場合，
@code{autoheader}は@file{config.h.in}を作成します．

@c In order to do its job, @command{autoheader} needs you to document all
@c of the symbols that you might use; i.e., there must be at least one
@c @code{AC_DEFINE} or one @code{AC_DEFINE_UNQUOTED} using its third
@c argument for each symbol (@pxref{Defining Symbols}).  An additional
@c constraint is that the first argument of @code{AC_DEFINE} must be a
@c literal.  Note that all symbols defined by Autoconf's built-in tests are
@c already documented properly; you only need to document those that you
@c define yourself.
@c 
この作業を行なうために，使用する可能性がある全てのシンボルを記述すること
を@command{autoheader}は必要とします．すなわち，少なくとも，一つの
@code{AC_DEFINE}か@code{AC_DEFINE_UNQUOTED}が，3番目の引数を使用している
必要があります(@pxref{Defining Symbols})．更に，@code{AC_DEFINE}の最初に
引数をリテラルにする必要があるという制約があります．Autoconfの組み込みテ
ストで定義されている全てのシンボルは，既に適切に記述されているということ
に注意してください．独自に定義したものだけ記述する必要があります．

@c You might wonder why @command{autoheader} is needed: after all, why
@c would @command{configure} need to ``patch'' a @file{config.h.in} to
@c produce a @file{config.h} instead of just creating @file{config.h} from
@c scratch?  Well, when everything rocks, the answer is just that we are
@c wasting our time maintaining @command{autoheader}: generating
@c @file{config.h} directly is all that is needed.  When things go wrong,
@c however, you'll be thankful for the existence of @command{autoheader}.
@c 
@command{autoheader}がなぜ必要か不思議に思うかもしれません．結局，なぜ
@command{configure}は，スクラッチから@file{config.h}を作成する代わりに，
@file{config.h}を生成するために@file{config.h.in}への``patch''を必要とす
るのでしょうか？さて，全てが淘汰された時，@command{autoheader}を管理して
いる時間を無駄にしているというのが答えです．直接@file{config.h}を生成す
ることが，必要なことの全てです．しかし，うまくいかない時，
@command{autoheader}の存在に感謝することになるでしょう．

@c The fact that the symbols are documented is important in order to
@c @emph{check} that @file{config.h} makes sense.  The fact that there is a
@c well defined list of symbols that should be @code{#define}'d (or not) is
@c also important for people who are porting packages to environments where
@c @command{configure} cannot be run: they just have to @emph{fill in the
@c blanks}.
@c 
シンボルが記述されているという事実は，@file{config.h}に意味があることを
@emph{調査する}ために重要です．@code{#define}される(またはされない)シン
ボルがうまく定義されているリストがあるという事実もまた，
@command{configure}が実行不可能な環境にパッケージを移植している人には重
要です．彼らは，@emph{空白で埋め尽くす}必要がしかありません．

@c But let's come back to the point: @command{autoheader}'s invocation@dots{}
@c 
では，要点に戻りましょう．@command{autoheader}の呼び出し@dots{}

@c If you give @command{autoheader} an argument, it uses that file instead
@c of @file{configure.ac} and writes the header file to the standard output
@c instead of to @file{config.h.in}.  If you give @command{autoheader} an
@c argument of @option{-}, it reads the standard input instead of
@c @file{configure.ac} and writes the header file to the standard output.
@c 
引数を@code{autoheader}に与えた場合，@file{configure.ac}の代わりにそのファ
イルを使用し，@file{config.h.in}の代わりに標準出力にヘッダファイルを書き
出します．@samp{-}引数を@code{autoheader}に与えた場合，
@file{configure.ac}の代わりに標準入力から読み込み，標準出力にヘッダファ
イルを書き出します．

@c @code{autoheader} accepts the following options:
@c 
@code{autoheader}は以下のオプションを受け入れます．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力して終了します．

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時的なファイルを削除しません．

@item --verbose
@itemx -v
@c Report processing steps.
@c 
処理しているステップを報告します．

@item --autoconf-dir=@var{dir}
@itemx -A @var{dir}
@evindex AC_MACRODIR
@c Override the location where the installed Autoconf data files are looked
@c for.  You can also set the @code{AC_MACRODIR} environment variable to a
@c directory; this option overrides the environment variable.
@c 
インストールされているマクロと@file{acconfig.h}を，ディレクトリ 
@var{dir}で探します．@code{AC_MACRODIR}環境変数でディレクトリを設定する
こともできます．これは環境変数に優先します．

@c This option is rarely needed and dangerous; it is only used when one
@c plays with different versions of Autoconf simultaneously.
@c 
このオプションが必要なことは滅多になく危険なものです．一人の人が，異なる
バージョンのAutoconfを同時に使用している時のみ使用されます．

@item --localdir=@var{dir}
@itemx -l @var{dir}
@c Look for the package files @file{aclocal.m4} and @file{acconfig.h} (but
@c not @file{@var{file}.top} and @file{@var{file}.bot}) in directory
@c @var{dir} instead of in the current directory.
@c 
(@file{@var{file}.top}と@file{@var{file}.bot}以外の)パッケージファイル
@file{aclocal.m4}と@file{acconfig.h}を，カレントディレクトリの代わりにディ
レクトリ@var{dir}で探します．

@item --warnings=@var{category}
@itemx -W @var{category}
@evindex WARNINGS
@c Report the warnings related to @var{category} (which can actually be a
@c comma separated list). Current categories include:
@c 
@var{category}(実際にはカンマで分けられたリスト)に関連する警告を報告しま
す．現在のカテゴリには，以下のものが含まれています．

@table @samp
@item obsolete
@c report the uses of obsolete constructs
@c 
時代遅れの構成物の使用を報告します．

@item all
@c report all the warnings
@c 
全ての警告を報告します．

@item none
@c report none
@c 
何も報告しません．

@item error
@c treats warnings as errors
@c 
警告をエラーとして扱います．

@item no-@var{category}
@c disable warnings falling into @var{category}
@c 
@var{category}に分類されている警告を利用不可能にします．
@end table

@end table


@node Autoheader Macros,  , autoheader Invocation, Configuration Headers
@subsection autoheaderのマクロ

@c @code{autoheader} scans @file{configure.ac} and figures out which C
@c preprocessor symbols it might define.  It knows how to generate
@c templates for symbols defined by @code{AC_CHECK_HEADERS},
@c @code{AC_CHECK_FUNCS} etc., but if you @code{AC_DEFINE} any additional
@c symbol, you must define a template for it.  If there are missing
@c templates, @code{autoheader} fails with an error message.
@c 
@code{autoheader}は@file{configure.ac}を調査し，定義されているCプリプロ
セッサシンボルを判定します．それは，@code{AC_CHECK_HEADERS}や
@code{AC_CHECK_FUNCS}等が定義しているシンボルに対するテンプレートを生成
する方法は知っていますが，あらゆる追加のシンボルを@code{AC_DEFINE}してい
る場合，それに対するテンプレートを定義する必要があります．テンプレートが
無い場合，@code{autoheader}はエラーメッセージとともに失敗します．

@c The simplest way to create a template for a @var{symbol} is to supply
@c the @var{description} argument to an @samp{AC_DEFINE(@var{symbol})}; see
@c @ref{Defining Symbols}.  You may also use one of the following macros.
@c 
@var{symbol}に対するテンプレートを作成する最も簡単な方法は，
@samp{AC_DEFINE(@var{symbol})}の引数に@var{description}を与えることです．
@ref{Defining Symbols}を参照してください．以下のマクロの一つを使用するこ
とも可能です．

@defmac AH_VERBATIM (@var{key}, @var{template})
@maindex AH_VERBATIM
@maindex VERBATIM
@c Tell @code{autoheader} to include the @var{template} as-is in the header
@c template file.  This @var{template} is associated with the @var{key},
@c which is used to sort all the different templates and guarantee their
@c uniqueness.  It should be the symbol that can be @code{AC_DEFINE}'d.
@c 
@code{autoheader}に，@var{template}をそのままヘッダテンプレートファイル
に含めるよう伝えます．この@var{template}は@var{key}に関連付けされていて，
それは全てのことなるテンプレートを並べ替えし，それらのユニーク性を保証す
るために使用されます．それは，@code{AC_DEFINE}されることが可能なシンボル
です．

@c For example:
@c 
例えば以下のようにします．

@example
AH_VERBATIM([_GNU_SOURCE],
[/* Enable GNU extensions on systems that have them.  */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE
#endif])
@end example
@end defmac

@defmac AH_TEMPLATE (@var{key}, @var{description})
@maindex AH_TEMPLATE
@maindex TEMPLATE
@c Tell @code{autoheader} to generate a template for @var{key}.  This macro
@c generates standard templates just like @code{AC_DEFINE} when a
@c @var{description} is given.
@c 
@code{autoheader}に，@var{key}に対するテンプレートを生成するように伝えま
す．このマクロは，@var{description}が与えられた時の@code{AC_DEFINE}のよ
うな，標準的なテンプレートを生成します．

@c For example:
@c 
例えば，以下のようにします．

@example
AH_TEMPLATE([CRAY_STACKSEG_END],
            [Define to one of _getb67, GETB67, getb67
             for Cray-2 and Cray-YMP systems.  This
             function is required for alloca.c support
             on those systems.])
@end example

@noindent
@c will generate the following template, with the description properly
@c justified.
@c 
これは，適切に正当化された記述を用いて，以下のテンプレートを生成します．

@example
/* Define to one of _getb67, GETB67, getb67 for Cray-2 and
   Cray-YMP systems. This function is required for alloca.c
   support on those systems. */
#undef CRAY_STACKSEG_END
@end example
@end defmac

@defmac AH_TOP (@var{text})
@maindex AH_TOP
@maindex TOP
@c Include @var{text} at the top of the header template file.
@c 
@var{text}をヘッダテンプレートファイルの最初に含めます．
@end defmac

@defmac AH_BOTTOM (@var{text})
@maindex AH_BOTTOM
@maindex BOTTOM
@c Include @var{text} at the bottom of the header template file.
@c 
@var{text}をヘッダテンプレートファイルの最後に含めます．
@end defmac


@node Configuration Commands, Configuration Links, Configuration Headers, Setup
@section 任意のコンフィグレーションコマンドの実行

@c You execute arbitrary commands either before, during and after
@c @file{config.status} is run.  The three following macros accumulate the
@c commands to run when they are called multiple times.
@c @code{AC_CONFIG_COMMANDS} replaces the obsolete macro
@c @code{AC_OUTPUT_COMMANDS}, see @ref{Obsolete Macros}, for details.
@c 
@file{config.status}の実行前，実行中，そして実行後のいずれかに任意のコマ
ンドを実行可能です．以下の３つのマクロは，複数かい呼び出された時，実行す
るコマンドを累積していきます．@code{AC_CONFIG_COMMANDS}は時代遅れのマク
ロ@code{AC_OUTPUT_COMMANDS}の置換物です．詳細は，@ref{Obsolete Macros}を
参照してください．

@defmac AC_CONFIG_COMMANDS (@var{tag}@dots{}, @r{[}@var{cmds}@r{]}, @r{[}@var{init-cmds}@r{]})
@maindex CONFIG_COMMANDS
@c Specify additional shell commands to run at the end of
@c @file{config.status}, and shell commands to initialize any variables
@c from @code{configure}.  Associate the commands to the @var{tag}.  Since
@c typically the @var{cmds} create a file, @var{tag} should naturally be
@c the name of that file.  This macro is one of the instantiating macros,
@c see @ref{Configuration Actions}.
@c 
@file{config.status}の終りに実行するシェルコマンドと，@code{configure}か
らのあらゆる変数を初期化するためのシェルコマンドをを追加します．通常，
@var{cmds}はファイルを作成するので，@var{tag}は自ずからファイル名にすべ
きでしょう．このマクロは，実際にファイルを作成するマクロです．
@ref{Configuration Actions}を参照してください．

@c Here is an unrealistic example:
@c 
非現実的な例ですが，以下のようにします．
@example
fubar=42
AC_CONFIG_COMMANDS(fubar,
                   [echo this is extra $fubar, and so on.],
                   [fubar=$fubar])
@end example

@c Here is a better one:
@c 
以下はましなものです．
@example
AC_CONFIG_COMMANDS(time-stamp, [date >time-stamp])
@end example
@end defmac

@defmac AC_CONFIG_COMMANDS_PRE (@var{cmds})
@maindex OUTPUT_COMMANDS_PRE
@c Execute the @var{cmds} right before creating @file{config.status}.  A
@c typical use is computing values derived from variables built during the
@c execution of @code{configure}:
@c 
@file{config.status}を作成する直前に@var{cmds}を実行します．典型的な使用
方法は，@code{configure}の実行時にビルドされる変数から，導き出される値を
計算することです．

@example
AC_CONFIG_COMMANDS_PRE(
[LTLIBOBJS=`echo $LIBOBJS | sed 's/\.o/\.lo/g'`
AC_SUBST(LTLIBOBJS)])
@end example
@end defmac

@defmac AC_CONFIG_COMMANDS_POST (@var{cmds})
@maindex OUTPUT_COMMANDS_POST
@c Execute the @var{cmds} right after creating @file{config.status}.
@c 
@file{config.status}の作成直後に@var{cmds}を実行します．
@end defmac


@node Configuration Links, Subdirectories, Configuration Commands, Setup
@section コンフィグレーションのリンクを作成する

@c You may find it convenient to create links whose destinations depend upon
@c results of tests.  One can use @code{AC_CONFIG_COMMANDS} but the
@c creation of relative symbolic links can be delicate when the package is
@c built in another directory than its sources.
@c 
テストの結果によって，対象物へのリンクを作成することが便利だと分かるでしょ
う．@code{AC_CONFIG_COMMANDS}を使用することも可能ですが，相対的なシンボ
リックリンクを作成することは，パッケージがソース以外の他のディレクトリで
ビルドされる時に決定可能です．

@defmac AC_CONFIG_LINKS (@var{dest}:@var{source}@dots{}, @r{[}@var{cmds}@r{]}, @r{[}@var{init-cmds}@r{]})
@maindex CONFIG_LINKS
@cindex Links
@c Make @code{AC_OUTPUT} link each of the existing files @var{source} to
@c the corresponding link name @var{dest}.  Makes a symbolic link if
@c possible, otherwise a hard link.  The @var{dest} and @var{source} names
@c should be relative to the top level source or build directory.  This
@c macro is one of the instantiating macros, see @ref{Configuration
@c Actions}.
@c 
@code{AC_OUTPUT}で，それぞれの既存のファイル@var{source}から対応するリン
ク名@var{dest}にリンクを作成します．可能な場合はシンボリックリンクを作成
し，それ以外ではハードリンクを作成します．@var{dest}と@var{source}の名前
は，ソースやビルドディレクトリのトップレベルからの相対的なものにすべきで
す．このマクロは，実際にファイルを作成するマクロの一つです．
@ref{Configuration Actions}を参照してください．

@c For example, this call:
@c 
例えば，以下のように呼び出します．

@example
AC_CONFIG_LINKS(host.h:config/$machine.h
                object.h:config/$obj_format.h)
@end example

@noindent
@c creates in the current directory @file{host.h} as a link to
@c @file{@var{srcdir}/config/$machine.h}, and @file{object.h} as a
@c link to @file{@var{srcdir}/config/$obj_format.h}.
@c 
これで，現在のディレクトリに@file{@var{srcdir}/config/$machine.h}へのリ
ンク@file{host.h}と，@file{@var{srcdir}/config/$obj_format.h}へのリンク
@file{object.h}を作成します．

@c The tempting value @samp{.} for @var{dest} is invalid: it makes it
@c impossible for @samp{config.status} to guess the links to establish.
@c 
@var{dest}に対して使用したい値@samp{.}は有効ではありません．そうすると，
@samp{config.status}で作成するリンクを推定することが不可能になります．

@c One can then run:
@c 
以下のように実行可能です．
@example
./config.status host.h object.h
@end example
@noindent
@c to create the links.
@c 
これでリンクを作成します．
@end defmac


@node Subdirectories, Default Prefix, Configuration Links, Setup
@section サブディレクトリで他のパッケージをコンフィグレーションする

@c In most situations, calling @code{AC_OUTPUT} is sufficient to produce
@c @file{Makefile}s in subdirectories.  However, @code{configure} scripts
@c that control more than one independent package can use
@c @code{AC_CONFIG_SUBDIRS} to run @code{configure} scripts for other
@c packages in subdirectories.
@c 
ほとんどの場合，@code{AC_OUTPUT}を呼び出しで，サブディレクトリの 
@file{Makefile}を十分作成可能です．しかし，一つ以上の独立したパッケージ
を制御する@code{configure}スクリプトで，サブディレクトリの他のパッケージ
の@code{configure}スクリプトを実行するために@code{AC_CONFIG_SUBDIRS}を使
用することが可能です．

@defmac AC_CONFIG_SUBDIRS (@var{dir} @dots{})
@maindex CONFIG_SUBDIRS
@ovindex subdirs
@c Make @code{AC_OUTPUT} run @code{configure} in each subdirectory
@c @var{dir} in the given whitespace-separated list.  Each @var{dir} should
@c be a literal, i.e., please do not use:
@c 
空白で区切られたリストで与えられるそれぞれのサブディレクトリ@var{dir}で，
@code{AC_OUTPUT}に@code{configure}を実行させます．それぞれの@var{dir}は，
リテラルにすべきです．すなわち，以下のように使用しないでください．

@example
if test "$package_foo_enabled" = yes; then
  $my_subdirs="$my_subdirs foo"
fi
AC_CONFIG_SUBDIRS($my_subdirs)
@end example

@noindent
@c because this prevents @samp{./configure --help=recursive} from
@c displaying the options of the package @code{foo}.  Rather, you should
@c write:
@c 
これは@samp{./configure --help=recursive}でのパッケージ@code{foo}のオプ
ション表示を妨げるためです．その代わりに以下のように書くべきです．

@example
if test "$package_foo_enabled" = yes then;
  AC_CONFIG_SUBDIRS(foo)
fi
@end example

@c If a given @var{dir} is not found, no error is reported, so a
@c @code{configure} script can configure whichever parts of a large source
@c tree are present.  If a given @var{dir} contains @code{configure.gnu},
@c it is run instead of @code{configure}. This is for packages that might
@c use a non-autoconf script @code{Configure}, which can't be called
@c through a wrapper @code{configure} since it would be the same file on
@c case-insensitive filesystems. Likewise, if a @var{dir} contains
@c @file{configure.ac} but no @code{configure}, the Cygnus @code{configure}
@c script found by @code{AC_CONFIG_AUX_DIR} is used.
@c 
与えられた@var{dir}が見つからない場合でもエラーを報告しないので，
@code{configure}スクリプトは，大きなソースツリーの一部が存在すればコンフィ
グレーション可能です．与えられた@var{dir}に@file{configure.gnu}がある場
合，@code{configure}の代わりにそれを実行します．これは，Autoconfスクリプ
トではない@code{Configure}を使用しているパッケージのためのもので，大文字
小文字を識別しないファイルシステムでは同じファイルになるので，それを
@code{configure}のラッパーとして呼び出すことは不可能です．同様に，
@var{dir}が@file{configure.ac}を含んでいて@code{configure}が無い場合，
@code{AC_CONFIG_AUXDIR}で見つかるCygnus @code{configure}スクリプトが使用
されます．

@c The subdirectory @code{configure} scripts are given the same command
@c line options that were given to this @code{configure} script, with minor
@c changes if needed (e.g., to adjust a relative path for the cache file or
@c source directory).  This macro also sets the output variable
@c @code{subdirs} to the list of directories @samp{@var{dir} @dots{}}.
@c @file{Makefile} rules can use this variable to determine which
@c subdirectories to recurse into.  This macro may be called multiple
@c times.
@c 
サブディレクトリの@code{configure}スクリプトには，この@code{configure}ス
クリプトに与えられたものと同じ，コマンドラインオプションが渡され，必要な
ら(例えば，キャッシュファイルやソースディレクトリへの相対的なパスを調整
するために)少し変更されます．このマクロは，出力変数@code{subdirs}も，ディ
レクトリのリスト@samp{@var{dir}@dots{}}に設定します．@file{Makefile}の規
則は，この値をサブディレクトリの定義に再帰的に使用することが可能です．こ
のマクロは何度でも呼び出し可能です．
@end defmac


@node Default Prefix,  , Subdirectories, Setup
@section デフォルトプレフィクス

@c By default, @code{configure} sets the prefix for files it installs to
@c @file{/usr/local}.  The user of @code{configure} can select a different
@c prefix using the @option{--prefix} and @option{--exec-prefix} options.
@c There are two ways to change the default: when creating
@c @code{configure}, and when running it.
@c 
@code{configure}はデフォルトで，ファイルをインストールするプレフィクスを，
@file{/usr/local}に設定します．@code{configure}のユーザは，異なるディレ
クトリを，@samp{--prefix}と@samp{--exec-prefix}オプションで，選択するこ
とが可能です．デフォルトを変更する方法は2つあります．@code{configure} を
作成するときと，実行するときです．

@c Some software packages might want to install in a directory besides
@c @file{/usr/local} by default.  To accomplish that, use the
@c @code{AC_PREFIX_DEFAULT} macro.
@c 
デフォルトで，@file{/usr/local}以外のディレクトリにインストールしたい，
ソフトウェアパッケージもあります．そうするために， 
@code{AC_PREFIX_DEFAULT}マクロを使用してください．

@defmac AC_PREFIX_DEFAULT (@var{prefix})
@maindex PREFIX_DEFAULT
@c Set the default installation prefix to @var{prefix} instead of
@c @file{/usr/local}.
@c 
デフォルトのインストールプレフィクスを，@file{/usr/local}の代わりに 
@var{prefix}に設定します．
@end defmac

@c It may be convenient for users to have @code{configure} guess the
@c installation prefix from the location of a related program that they
@c have already installed.  If you wish to do that, you can call
@c @code{AC_PREFIX_PROGRAM}.
@c 
ユーザが既にインストールしている関連するプログラムの場所から， 
@code{configure}がインストールプレフィクスを推測すると便利かもしれません．
そうしたい場合，@code{AC_PREFIX_PROGRAM}を呼び出します．

@defmac AC_PREFIX_PROGRAM (@var{program})
@maindex PREFIX_PROGRAM
@c If the user did not specify an installation prefix (using the
@c @option{--prefix} option), guess a value for it by looking for
@c @var{program} in @code{PATH}, the way the shell does.  If @var{program}
@c is found, set the prefix to the parent of the directory containing
@c @var{program}; otherwise leave the prefix specified in
@c @file{Makefile.in} unchanged.  For example, if @var{program} is
@c @code{gcc} and the @code{PATH} contains @file{/usr/local/gnu/bin/gcc},
@c set the prefix to @file{/usr/local/gnu}.
@c 
ユーザが(@samp{--prefix}オプションを使用して)インストールプレフィクスを
指定しない場合，シェルが行うように，@code{PATH}で@var{program}を探し，そ
の値を推測します．@var{program}が見つかった場合，プレフィクスを
@var{program}を含むディレクトリの親に設定します．そうでない場合，
@file{Makefile.in}でのプレフィクスの指定はそのままです．例えば，
@var{program}が@code{gcc}で，@code{PATH}が@file{/usr/local/gnu/bin/gcc} 
を含んでいる場合，プレフィクスを @file{/usr/local/gnu}に設定します．
@end defmac


@c ======================================================== Existing tests

@node Existing Tests, Writing Tests, Setup, Top
@chapter 存在の調査

@c These macros test for particular system features that packages might
@c need or want to use.  If you need to test for a kind of feature that
@c none of these macros check for, you can probably do it by calling
@c primitive test macros with appropriate arguments (@pxref{Writing
@c Tests}).
@c 
以下のマクロは，パッケージが必要とする，あるいは使用する，特定のシステム
の特徴をテストします．これらのマクロが調査しない特徴のテストが必要な場合，
適切な引数で基本のテストマクロを呼び出すことで，おそらく可能です
(@pxref{Writing Tests})．

@c These tests print messages telling the user which feature they're
@c checking for, and what they find.  They cache their results for future
@c @code{configure} runs (@pxref{Caching Results}).
@c 
これらのテストは，調査している特徴と，見つかったものをユーザに伝えるメッ
セージを出力します．将来，@code{configure}を実行するため，結果をキャッシュ
します(@pxref{Caching Results})．

@c Some of these macros set output variables.  @xref{Makefile
@c Substitutions}, for how to get their values.  The phrase ``define
@c @var{name}'' is used below as a shorthand to mean ``define C
@c preprocessor symbol @var{name} to the value 1''.  @xref{Defining
@c Symbols}, for how to get those symbol definitions into your program.
@c 
これらのマクロには，出力変数を設定するものもあります．変数の取得方法は， 
@xref{Makefile Substitutions}. ``@var{name}の定義'' という文章は，``Cプ
リプロセッサのシンボル@var{name}の値を1に定義する'' という意味を短縮した
のもとして，以下で使用します．プログラムでシンボル定義を得る方法は， 
@xref{Defining Symbols}.

@menu
* Common Behavior::             Macros' standard schemes
* Alternative Programs::        Selecting between alternative programs
* Files::                       Checking for the existence of files
* Libraries::                   Library archives that might be missing
* Library Functions::           C library functions that might be missing
* Header Files::                Header files that might be missing
* Declarations::                Declarations that may be missing
* Structures::                  Structures or members that might be missing
* Types::                       Types that might be missing
* Compilers and Preprocessors::  Checking for compiling programs
* System Services::             Operating system services
* UNIX Variants::               Special kludges for specific UNIX variants
@end menu

@node Common Behavior, Alternative Programs, Existing Tests, Existing Tests
@section 一般的な動作

@c Much effort has been expended to make Autoconf easy to learn.  The most
@c obvious way to reach this goal is simply to enforce standard interfaces
@c and behaviors, avoiding exceptions as much as possible.  Because of
@c history and inertia, unfortunately, there are still too many exceptions
@c in Autoconf; nevertheless, this section describes some of the common
@c rules.
@c 
Autoconfの学習が簡単になるように努力してきました．このゴールに到達するた
めの最も明白な方法は，できるだけ例外を避けながら，単純に標準的なインタ
フェースと動作を実施することです．残念ながら，歴史と慣性のため，多くの例
外がAutoconfにはまだ存在しています．それにもかかわらず，このセクションで
は，一般的な規則を記述します．

@menu
* Standard Symbols::            Symbols defined by the macros
* Default Includes::            Includes used by the generic macros
@end menu

@node Standard Symbols, Default Includes, Common Behavior, Common Behavior
@subsection 標準的なシンボル

@c All the generic macros that @code{AC_DEFINE} a symbol as a result of
@c their test transform their @var{argument}s to a standard alphabet.
@c First, @var{argument} is converted to upper case and any asterisks
@c (@samp{*}) are each converted to @samp{P}.  Any remaining characters
@c that are not alphanumeric are converted to underscores.
@c 
テストの結果，シンボルを@code{AC_DEFINE}する全ての一般的なマクロは，その
引数を標準的なアルファベットに変換します．最初に，@var{argument}は大文字
に変換され，あらゆるアスタリスク(@samp{*})は，それぞれ@samp{P}に変換され
ます．アルファベットではない残りの全ての文字は，アンダースコアに変換され
ます．

@c For instance,
@c 
例えば以下のものを考えます．

@example
AC_CHECK_TYPES(struct $Expensive*)
@end example

@noindent
@c will define the symbol @samp{HAVE_STRUCT__EXPENSIVEP} if the check succeeds.
@c 
これは，調査が成功した場合，シンボル@samp{HAVE_STRUCT__EXPENSIVEP}を定義
します．


@node Default Includes,  , Standard Symbols, Common Behavior
@subsection デフォルトのインクルード
@cindex Includes, default

@c Several tests depend upon a set of header files.  Since these headers
@c are not universally available, tests actually have to provide a set of
@c protected includes, such as:
@c 
ヘッダファイルの設定に依存するテストもあります．これらのヘッダは例外無く
利用可能ではないので，テストは，以下のようなインクルードを保護する(コー
ドの)組を，実際に提供する必要があります．

@example
@group
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif
@end group
@end example

@noindent
@c Unless you know exactly what you are doing, you should avoid using
@c unconditional includes, and check the existence of the headers you
@c include beforehand (@pxref{Header Files}).
@c 
どうすれば良いか正確に知らない場合，無条件のインクルードの使用は避け，イ
ンクルードする前にヘッダの存在を調査すべきです(@pxref{Header Files})．

@c Most generic macros provide the following default set of includes:
@c 
最も一般的なマクロは，以下のようなデフォルトの(コードの)組をインクルード
します．

@example
@group
#include <stdio.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# if HAVE_STDLIB_H
#  include <stdlib.h>
# endif
#endif
#if HAVE_STRING_H
# if !STDC_HEADERS && HAVE_MEMORY_H
#  include <memory.h>
# endif
# include <string.h>
#endif
#if HAVE_STRINGS_H
# include <strings.h>
#endif
#if HAVE_INTTYPES_H
# include <inttypes.h>
#else
# if HAVE_STDINT_H
#  include <stdint.h>
# endif
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
@end group
@end example

@c If the default includes are used, then Autoconf will automatically check
@c for the presence of these headers and their compatibility, i.e., you
@c don't need to run @code{AC_HEADERS_STDC}, nor check for @file{stdlib.h}
@c etc.
@c 
デフォルトのインクルードが使用される場合，Autoconfはこれらのヘッダの存在
とその互換性を自動的に調査します．すなわち，@code{AC_HEADERS_STDC}を実行
する必要も，@file{stdlib.h}などを調査する必要もありません．

@c These headers are checked for in the same order as they are included.
@c For instance, on some systems @file{string.h} and @file{strings.h} both
@c exist, but conflict.  Then @code{HAVE_STRING_H} will be defined, but
@c @code{HAVE_STRINGS_H} won't.
@c 
これらのヘッダは，インクルードされる順番と同じ順番で調査されます．例えば，
@file{string.h}と@file{strings.h}の両方があるシステムもありますが，競合
しません．そこでは，@code{HAVE_STRING_H}は定義されますが，
@code{HAVE_STRINGS_H}は定義されません．


@node Alternative Programs, Files, Common Behavior, Existing Tests
@section プログラムの選択
@cindex Programs, checking

@c These macros check for the presence or behavior of particular programs.
@c They are used to choose between several alternative programs and to
@c decide what to do once one has been chosen.  If there is no macro
@c specifically defined to check for a program you need, and you don't need
@c to check for any special properties of it, then you can use one of the
@c general program-check macros.
@c 
これらのマクロは，特定のプログラムとその動作を調査します．それらは，いく
つかのプログラムからどれかを選択し，一旦選ばれると何をするのかを決定する
ために使用されます．必要なプログラムを調査するために特別に定義されている
マクロが無い場合，一般的なプログラム調査のマクロの一つを使用することが可
能です．

@menu
* Particular Programs::         Special handling to find certain programs
* Generic Programs::            How to find other programs
@end menu

@node Particular Programs, Generic Programs, Alternative Programs, Alternative Programs
@subsection 特定のプログラムの調査

@c These macros check for particular programs---whether they exist, and
@c in some cases whether they support certain features.
@c 
これらのマクロは，特定のプログラムを調査します --- それは存在するかどう
か，そして場合によっては特定の機能をサポートするかどうかです．

@defmac AC_PROG_AWK
@maindex PROG_AWK
@ovindex AWK
@c Check for @code{mawk}, @code{gawk}, @code{nawk}, and @code{awk}, in that
@c order, and set output variable @code{AWK} to the first one that is found.
@c It tries @code{mawk} first because that is reported to be the
@c fastest implementation.
@c 
@code{mawk}，@code{gawk}，@code{nawk}，そして@code{awk}を，この順番で調
査し，最初に見つかったものに出力変数@code{AWK}を設定します．最速の実装と
報告されているので，最初に@code{mawk}を調査します．
@end defmac

@defmac AC_PROG_INSTALL
@maindex PROG_INSTALL
@ovindex INSTALL
@ovindex INSTALL_PROGRAM
@ovindex INSTALL_DATA
@ovindex INSTALL_SCRIPT
@c Set output variable @code{INSTALL} to the path of a @sc{bsd} compatible
@c @code{install} program, if one is found in the current @code{PATH}.
@c Otherwise, set @code{INSTALL} to @samp{@var{dir}/install-sh -c},
@c checking the directories specified to @code{AC_CONFIG_AUX_DIR} (or its
@c default directories) to determine @var{dir} (@pxref{Output}).  Also set
@c the variables @code{INSTALL_PROGRAM} and @code{INSTALL_SCRIPT} to
@c @samp{$@{INSTALL@}} and @code{INSTALL_DATA} to @samp{$@{INSTALL@} -m 644}.
@c 
現在の@code{PATH}で@sc{bsd}互換の@code{install}プログラムが見つかった場
合，出力変数@code{INSTALL}をそのパスに設定します．それ以外では， 
@code{INSTALL}を@samp{@var{dir}/install-sh -c}に設定し， 
@code{AC_CONFIG_AUX_DIR}で指定されたディレクトリ(またはデフォルトディレ
クトリ)を，@var{dir}を決定するために調査します(@pxref{Output})．また，変
数@code{INSTALL_PROGRAM}と@code{INSTALL_SCRIPT}を@samp{$@{INSTALL@}}に，
@samp{$@{INSTALL@}}と@code{INSTALL_DATA}を@samp{$@{INSTALL@}-m 644}に設
定します．

@c This macro screens out various instances of @code{install} known not to
@c work.  It prefers to find a C program rather than a shell script, for
@c speed.  Instead of @file{install-sh}, it can also use @file{install.sh},
@c but that name is obsolete because some @code{make} programs have a rule
@c that creates @file{install} from it if there is no @file{Makefile}.
@c 
このマクロは，動作しないことが知られている@code{install}の様々な実例をふ
るい落とします．それは速度のため，シェルスクリプトよりCプログラムを見付
けようとします．@file{install-sh}の代わりに，@file{install.sh}を使用する
ことも可能ですが，@code{make}プログラムには， @file{Makefile}が無い場合，
それから@file{install}を作成する規則を持っているものもあるので，その名前
は時代遅れです．

@c Autoconf comes with a copy of @file{install-sh} that you can use.  If
@c you use @code{AC_PROG_INSTALL}, you must include either
@c @file{install-sh} or @file{install.sh} in your distribution, or
@c @code{configure} will produce an error message saying it can't find
@c them---even if the system you're on has a good @code{install} program.
@c This check is a safety measure to prevent you from accidentally leaving
@c that file out, which would prevent your package from installing on
@c systems that don't have a @sc{bsd}-compatible @code{install} program.
@c 
使用可能な@file{install-sh}のコピーは，Autoconfでインストールされます． 
@code{AC_PROG_INSTALL}を使用する場合，配布物に@file{install-sh}か 
@file{install.sh}を含める必要があり，そうしない場合，@code{configure}は
見つからない旨，エラーメッセージを出力します --- たとえシステムに良い 
@code{install}があってもそうなります．この調査は，そのファイルをたまたま
入れ忘れることを阻止する安全対策で，それは@sc{bsd}互換の@code{install}プ
ログラムが無いシステムでパッケージをインストールすることを妨げます．

@c If you need to use your own installation program because it has features
@c not found in standard @code{install} programs, there is no reason to use
@c @code{AC_PROG_INSTALL}; just put the file name of your program into your
@c @file{Makefile.in} files.
@c 
標準的な@code{install}プログラムには見当たらない特徴があるために，独自の
インストールプログラムを使用する必要がある場合，@code{AC_PROG_INSTALL}を
使用する理由はありません．@file{Makefile.in}ファイルにプログラムのファイ
ル名を書き込んでください．
@end defmac

@defmac AC_PROG_LEX
@maindex PROG_LEX
@ovindex LEX
@ovindex LEXLIB
@cvindex YYTEXT_POINTER
@ovindex LEX_OUTPUT_ROOT
@c If @code{flex} is found, set output variable @code{LEX} to @samp{flex}
@c and @code{LEXLIB} to @option{-lfl}, if that library is in a standard
@c place.  Otherwise set @code{LEX} to @samp{lex} and @code{LEXLIB} to
@c @option{-ll}.
@c 
@code{flex}が見つかった場合，ライブラリが標準的な場所にあれば，出力変数 
@code{LEX}を@samp{flex}に，@code{LEXLIB}を@samp{-lfl}に設定します．それ
以外の場合，@code{LEX}を@samp{lex}に，@code{LEXLIB}を@samp{-ll}に設定し
ます．

@c Define @code{YYTEXT_POINTER} if @code{yytext} is a @samp{char *} instead
@c of a @samp{char []}.  Also set output variable @code{LEX_OUTPUT_ROOT} to
@c the base of the file name that the lexer generates; usually
@c @file{lex.yy}, but sometimes something else.  These results vary
@c according to whether @code{lex} or @code{flex} is being used.
@c 
@code{yytext}が@samp{char []}ではなく@samp{char *}の場合，
@code{YYTEXT_POINTER}を定義します．また，出力変数@code{LEX_OUTPUT_ROOT} 
をlexerが生成するファイル名のベースに設定します．通常は@file{lex.yy}です
が異なることもあります．これらは，結果として@code{lex}と@code{flex}のど
ちらが使用されているかに依存して変化します．

@c You are encouraged to use Flex in your sources, since it is both more
@c pleasant to use than plain Lex and the C source it produces is portable.
@c In order to ensure portability, however, you must either provide a
@c function @code{yywrap} or, if you don't use it (e.g., your scanner has
@c no @samp{#include}-like feature), simply include a @samp{%noyywrap}
@c statement in the scanner's source.  Once this done, the scanner is
@c portable (unless @emph{you} felt free to use nonportable constructs) and
@c does not depend on any library.  In this case, and in this case only, it
@c is suggested that you use this Autoconf snippet:
@c 
普通のLexとそれが生成するCソースを使用するより，移植性の面でより好ましい
ので，ソースでFlexを使用することを推奨します．しかし，移植性を確実にする
ために，関数@code{yywrap}を提供する，または，それを使用しない場合(例えば，
スキャナに@samp{#include}のような機能が無い場合)，単純にスキャナソースで
@samp{%noyywrap}文を含める必要があります．一旦このようにすることで，スキャ
ナは(@emph{あなたが}移植性の無い構成物を使用しない限り)移植性があり，ラ
イブラリに依存しません．この場合，そしてこの場合のみ，以下のような
Autoconfの断片を使用することを提案します．

@example
AC_PROG_LEX
if test "$LEX" != flex; then
  LEX="$SHELL $missing_dir/missing flex"
  AC_SUBST(LEX_OUTPUT_ROOT, lex.yy)
  AC_SUBST(LEXLIB, '')
fi
@end example

@c The shell script @command{missing} can be found in the Automake
@c distribution.
@c 
シェルスクリプト@command{missing}は，Automakeの配布物で見つかるはずです．

@c To ensure backward compatibility, Automake's @code{AM_PROG_LEX} invokes
@c (indirectly) this macro twice, which will cause an annoying but benign
@c ``@code{AC_PROG_LEX} invoked multiple times'' warning.  Future versions
@c of Automake will fix this issue, meanwhile, just ignore this message.
@c 
下位互換を確実にするため，Automakeの@code{AM_PROG_LEX}は，(間接的に)この
マクロを2度呼び出し，不快な``@code{AC_PROG_LEX} invoked multiple times'' 
で始まる警告を生じます．将来のバージョンのAutomakeではこの症状は修正され
ますので，その間はこのメッセージを無視してください．
@end defmac

@defmac AC_PROG_LN_S
@maindex PROG_LN_S
@ovindex LN_S
@c If @samp{ln -s} works on the current file system (the operating system
@c and file system support symbolic links), set the output variable
@c @code{LN_S} to @samp{ln -s}; otherwise, if @samp{ln} works, set
@c @code{LN_S} to @samp{ln} and otherwise set it to @samp{cp -p}.
@c 
現在のファイルシステムで，@samp{ln -s}が動作する(オペレーティングシステ
ムとファイルシステムがシンボリックリンクをサポートしている)場合，出力変
数@code{LN_S}を@samp{ln -s}に設定します．それ以外の場合は，@samp{ln}が動
作する場合は，@code{LN_S}を@samp{ln}に設定し，そうでもなければ@samp{cp
-p}に設定します．

@c If you make a link a directory other than the current directory, its
@c meaning depends on whether @samp{ln} or @samp{ln -s} is used.  To safely
@c create links using @samp{$(LN_S)}, either find out which form is used
@c and adjust the arguments, or always invoke @code{ln} in the directory
@c where the link is to be created.
@c 
リンクをカレントディレクトリ以外のディレクトリに作成する場合，その方法は，
@samp{ln}と@samp{ln -s}のどちらが使用されるかに依存します． 
@samp{$(LN_S)}を使用して安全にリンクを作成するため，使用する書式と正しい
引数を理解するか，リンクが作成されるディレクトリで@code{ln}を常に呼び出
すか，どちらかにしてください．

@c In other words, it does not work to do:
@c 
言い替えると，以下のものは動作しません．
@example
$(LN_S) foo /x/bar
@end example

@c Instead, do:
@c 
その代わりに，以下のようにします．
@example
(cd /x && $(LN_S) foo bar)
@end example
@end defmac

@defmac AC_PROG_RANLIB
@maindex PROG_RANLIB
@ovindex RANLIB
@c Set output variable @code{RANLIB} to @samp{ranlib} if @code{ranlib}
@c is found, and otherwise to @samp{:} (do nothing).
@c 
@code{ranlib}が見つかって場合，出力変数@code{RANLIB}を@samp{ranlib}に設
定し，それ以外では，@samp{:}(何もしません)に設定します．
@end defmac

@defmac AC_PROG_YACC
@maindex PROG_YACC
@ovindex YACC
@c If @code{bison} is found, set output variable @code{YACC} to @samp{bison
@c -y}.  Otherwise, if @code{byacc} is found, set @code{YACC} to
@c @samp{byacc}.  Otherwise set @code{YACC} to @samp{yacc}.
@c 
@code{bison}が見つかった場合，出力変数@code{YACC}を@samp{bison -y}に設定
します．それ以外で，@code{byacc}が見つかる場合，@code{YACC}を
@samp{byacc}に設定します．それ以外では，@code{YACC}を@samp{yacc}に設定し
ます．
@end defmac


@node Generic Programs,  , Particular Programs, Alternative Programs
@subsection 一般的なプログラムとファイルの調査

@c These macros are used to find programs not covered by the ``particular''
@c test macros.  If you need to check the behavior of a program as well as
@c find out whether it is present, you have to write your own test for it
@c (@pxref{Writing Tests}).  By default, these macros use the environment
@c variable @code{PATH}.  If you need to check for a program that might not
@c be in the user's @code{PATH}, you can pass a modified path to use
@c instead, like this:
@c 
これらのマクロは，``特定の''テストマクロによってカバーされていないプログ
ラムを見つけるに使用します．プログラムの存在を確認するだけでなく，その動
作を調査する必要がある場合，そうするために独自のテストを書く必要がありま
す(@pxref{Writing Tests})．デフォルトで，これらのマクロは環境変数
@code{PATH}を使用します．ユーザの@code{PATH}にない可能性があるプログラム
を調査する必要がある場合，以下のようにして，パスを編集して渡すことが可能
です．

@example
AC_PATH_PROG(INETD, inetd, /usr/libexec/inetd,
  $PATH:/usr/libexec:/usr/sbin:/usr/etc:etc)
@end example

@c You are strongly encouraged to declare the @var{variable} passed to
@c @code{AC_CHECK_PROG} etc. as precious, @xref{Setting Output Variables},
@c @code{AC_ARG_VAR}, for more details.
@c 
@code{AC_CHECK_PROG}等に渡す@var{variable}を，正確に宣言することを強く推
奨します．詳細は，@code{AC_ARG_VAR}と@xref{Setting Output Variables}.

@defmac AC_CHECK_PROG (@var{variable}, @var{prog-to-check-for}, @var{value-if-found}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]},  @r{[}@var{reject}@r{]})
@maindex CHECK_PROG
@c Check whether program @var{prog-to-check-for} exists in @code{PATH}.  If
@c it is found, set @var{variable} to @var{value-if-found}, otherwise to
@c @var{value-if-not-found}, if given.  Always pass over @var{reject} (an
@c absolute file name) even if it is the first found in the search path; in
@c that case, set @var{variable} using the absolute file name of the
@c @var{prog-to-check-for} found that is not @var{reject}.  If
@c @var{variable} was already set, do nothing.  Calls @code{AC_SUBST} for
@c @var{variable}.

@code{PATH}に，プログラム@var{prog-to-check-for}が存在するかどうか調査し
ます．見つかった場合，@var{variable}を@var{value-if-found}に設定し，それ
以外で，@var{value-if-not-found}が与えられている場合は，それに設定します．
たとえ@var{reject}(絶対パスのファイル名)が最初のサーチパスで見つかった場
合でも，それは候補から外します．この場合，@var{prog-to-check-for}が見つ
かった@var{reject}ではない絶対パスのファイル名を使用し，@var{variable}を
設定します．@var{variable}が既に設定されている場合，何もしません．
@var{variable}に対して@code{AC_SUBST}を呼び出してください．
@end defmac

@defmac AC_CHECK_PROGS (@var{variable}, @var{progs-to-check-for}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]})
@maindex CHECK_PROGS
@c Check for each program in the whitespace-separated list
@c @var{progs-to-check-for} exists on the @code{PATH}.  If it is found, set
@c @var{variable} to the name of that program.  Otherwise, continue
@c checking the next program in the list.  If none of the programs in the
@c list are found, set @var{variable} to @var{value-if-not-found}; if
@c @var{value-if-not-found} is not specified, the value of @var{variable}
@c is not changed.  Calls @code{AC_SUBST} for @var{variable}.
@c 
@code{PATH}に，空白で区切られたリスト@var{progs-to-check-for}にあるそれ
ぞれのプログラムの存在を調査します．見つかった場合，@var{variable}をプロ
グラムの名前に設定します．それ以外の場合は引続き，リストの次にあるプログ
ラムを調査します．リスト内のプログラムが全く見つからない場合， 
@var{variable}を@var{value-if-not-found}に設定します． 
@var{value-if-not-found}が指定されていない場合，@var{variable}は変更され
ません．@var{variable}に対して@code{AC_SUBST}を呼び出してください．
@end defmac

@defmac AC_CHECK_TOOL (@var{variable}, @var{prog-to-check-for}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]})
@maindex CHECK_TOOL
@c Like @code{AC_CHECK_PROG}, but first looks for @var{prog-to-check-for}
@c with a prefix of the host type as determined by
@c @code{AC_CANONICAL_HOST}, followed by a dash (@pxref{Canonicalizing}).
@c For example, if the user runs @samp{configure --host=i386-gnu}, then
@c this call:
@c 
@code{AC_CHECK_PROG}に似ていますが，@code{AC_CANONICAL_HOST}で定義されて
いるホストタイプにダッシュが続いているプレフィクスを持つ 
@var{prog-to-check-for}を，最初に探します(@pxref{Canonicalizing})．例え
ば，ユーザが@samp{configure --host=i386-gnu}を実行している場合，以下のよ
うに呼び出します．
@example
AC_CHECK_TOOL(RANLIB, ranlib, :)
@end example
@noindent
@c sets @code{RANLIB} to @file{i386-gnu-ranlib} if that program exists in
@c @code{PATH}, or otherwise to @samp{ranlib} if that program exists in
@c @code{PATH}, or to @samp{:} if neither program exists.
@c 
これで，@code{PATH}に@file{i386-gnu-ranlib}というプログラムが存在する場
合，@code{RANLIB}を@file{i386-gnu-ranlib}に設定し，それ以外で，
@code{PATH}に@samp{ranlib}というプログラムがある場合，@code{RANLIB}を
@samp{ranlib}に設定し，どちらも無い場合は @samp{:}に設定します．
@end defmac

@defmac AC_CHECK_TOOLS (@var{variable}, @var{progs-to-check-for}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]})
@maindex CHECK_TOOLS
@c Like @code{AC_CHECK_TOOL}, each of the tools in the list @var{progs-to-check-for} are
@c checked with a prefix of the host type as determined by @code{AC_CANONICAL_HOST},
@c followed by a dash (@pxref{Canonicalizing}). If none of the tools can be found with a
@c prefix, then the first one without a prefix is used. If a tool is found, set
@c @var{variable} to the name of that program. If none of the tools in the
@c list are found, set @var{variable} to @var{value-if-not-found}; if
@c @var{value-if-not-found} is not specified, the value of @var{variable}
@c is not changed.  Calls @code{AC_SUBST} for @var{variable}.
@c 
@code{AC_CHECK_TOOL}に似ていて，@var{progs-to-check-for}でリストアップさ
れているそれぞれのツールは，@code{AC_CANONICAL_HOST}で決定されたホストタ
イプを前置し，それにダッシュを続けたものを用いて調査されます
(@pxref{Canonicalizing})．プレフィクスを用いているツールが見つからない場
合，最初にプレフィクス無しのものが使用されます．ツールが見つかった場合，
@var{variable}をそのプログラム名贋停止マス．リストのツールが全く見つから
ない場合，@var{variable}を@var{value-if-not-found}に設定します．
@var{value-if-not-found}が指定されていない場合，@var{variable}の値は変更
されません．@var{variable}に対して@code{AC_SUBST}を呼び出してください．
@end defmac

@defmac AC_PATH_PROG (@var{variable}, @var{prog-to-check-for}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]})
@maindex PATH_PROG
@c Like @code{AC_CHECK_PROG}, but set @var{variable} to the entire
@c path of @var{prog-to-check-for} if found.
@c 
@code{AC_CHECK_PROG}に似ていますが，見つかった場合，@var{variable}を 
@var{prog-to-check-for}の完全なパスに設定します．
@end defmac

@defmac AC_PATH_PROGS (@var{variable}, @var{progs-to-check-for}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]})
@maindex PATH_PROGS
@c Like @code{AC_CHECK_PROGS}, but if any of @var{progs-to-check-for}
@c are found, set @var{variable} to the entire path of the program
@c found.
@c 
@code{AC_CHECK_PROGS}に似ていますが，@var{progs-to-check-for}のどれかが
見つかった場合，@var{variable}をプログラムが見つかった完全なパスに設定し
ます．
@end defmac

@defmac AC_PATH_TOOL (@var{variable}, @var{prog-to-check-for}, @r{[}@var{value-if-not-found}@r{]}, @r{[}@var{path}@r{]})
@maindex PATH_TOOL
@c Like @code{AC_CHECK_TOOL}, but set @var{variable} to the entire
@c path of the program if it is found.
@c 
@code{AC_CHECK_TOOL}に似ていますが，見つかった場合，@var{variable}をプロ
グラムが見つかった完全なパスに設定します．
@end defmac

@node Files, Libraries, Alternative Programs, Existing Tests
@section ファイル
@cindex File, checking

@c You might also need to check for the existence of files.  Before using
@c these macros, ask yourself whether a run time test might not be a better
@c solution.  Be aware that, like most Autoconf macros, they test a feature
@c of the host machine, and therefore, they die when cross-compiling.
@c 
ファイルの存在を調査する必要もあるでしょう．以下のマクロを使用する前に，
実行時の調査がより良い解決ではないかどうか自問してください．ほとんどの
Autoconfマクロのように，それらはホストマシンの機能を調査するため，クロス
コンパイルでは意味が無いことを知っておいてください．

@defmac AC_CHECK_FILE (@var{file}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex CHECK_FILE
@c Check whether file @var{file} exists on the native system.  If it is
@c found, execute @var{action-if-found}, otherwise do
@c @var{action-if-not-found}, if given.
@c 
ネイティブシステムで@var{file}が存在するかどうか調査します．見つかった場
合，@var{action-if-found}を実行し，それ以外では，与えられていれば
@var{action-if-not-found}を実行します．
@end defmac

@defmac AC_CHECK_FILES (@var{files}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex CHECK_FILES
@c Executes @code{AC_CHECK_FILE} once for each file listed in @var{files}.
@c Additionally, defines @samp{HAVE_@var{file}} (@pxref{Standard Symbols})
@c for each file found.
@c 
@var{files}でリストアップされた，それぞれのファイルに対し 
@code{AC_CHECK_FILE}を一度実行します．さらに，見つかったそれぞれのファイ
ルに対して@samp{HAVE@var{file}}を定義します(@pxref{Standard Symbols})．
@end defmac


@node Libraries, Library Functions, Files, Existing Tests
@section ライブラリファイル
@cindex Library, checking

@c The following macros check for the presence of certain C, C++ or Fortran
@c 77 library archive files.
@c 
以下のマクロは，C，C++やFortran 77のライブラリアーカイブファイルの存在を
調査します．

@defmac AC_CHECK_LIB (@var{library}, @var{function}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{other-libraries}@r{]})
@maindex CHECK_LIB
@c Depending on the current language(@pxref{Language Choice}), try to
@c ensure that the C, C++, or Fortran 77 function @var{function} is
@c available by checking whether a test program can be linked with the
@c library @var{library} to get the function.  @var{library} is the base
@c name of the library; e.g., to check for @option{-lmp}, use @samp{mp} as
@c the @var{library} argument.
@c 
現在の言語に依存して(@pxref{Language Choice})，テストプログラムが関数利
用に必要なライブラリ@var{library}とリンク可能かどうかを調査することで，C，
C++やFortran 77の関数@var{function}が利用可能であることを確認します．
@var{library}は，ライブラリのベース名です．例えば，@samp{-lmp}を調査する
ために，@var{library}の引数として@samp{mp}を使用します．

@c @var{action-if-found} is a list of shell commands to run if the link
@c with the library succeeds; @var{action-if-not-found} is a list of shell
@c commands to run if the link fails.  If @var{action-if-found} is not
@c specified, the default action will prepend @option{-l@var{library}} to
@c @code{LIBS} and define @samp{HAVE_LIB@var{library}} (in all
@c capitals). This macro is intended to support building of @code{LIBS} in
@c a right-to-left (least-dependent to most-dependent) fashion such that
@c library dependencies are satisfied as a natural side-effect of
@c consecutive tests. Some linkers are very sensitive to library ordering
@c so the order in which @code{LIBS} is generated is important to reliable
@c detection of libraries.
@c 
@var{action-if-found}は，ライブラリとのリンクが成功した場合に実行するシェ
ルコマンドのリストです．@var{action-if-not-found}は，リンクが失敗した場
合に実行するシェルコマンドのリストです．@var{action-if-found}が指定され
ていない場合，デフォルトで@samp{-l@var{library}}を@code{LIBS}に加え， 
@samp{HAVE_LIB@var{library}}を(全て大文字で)定義します．このマクロは，ラ
イブラリの依存が連続的なテストの自然な副作用として満たされているように，
右から左(最小依存から最大依存)の方法で@code{LIBS}のビルドサポートを試み
ます．ライブラリの順序に注意が必要なリンカもあるので，@code{LIBS}が生成
される順序は，ライブラリの信頼できる検出にとって重要です．

@c If linking with @var{library} results in unresolved symbols that would
@c be resolved by linking with additional libraries, give those libraries
@c as the @var{other-libraries} argument, separated by spaces:
@c e.g. @option{-lXt -lX11}.  Otherwise, this macro will fail to detect
@c that @var{library} is present, because linking the test program will
@c always fail with unresolved symbols. The @var{other-libraries} argument
@c should be limited to cases where it is desirable to test for one library
@c in the presence of another that is not already in @code{LIBS}.
@c 
@var{library}とのリンクの結果が，追加のライブラリとのリンクで解決される
未解決のシンボルとなる場合，これらのライブラリを，@samp{-lXt -lX11}のよ
うに，スペースで区切られた@var{other-libraries}引数で与えてください．そ
うしない場合，テストプログラムとのリンクが未解決のシンボルで常に失敗する
ので，このマクロは@var{library}の存在の検出に失敗します．
@var{other-libraries}引数は，まだ@code{LIBS}に無い，その他のライブラリの
一つを調査することが望ましい場合は制限があります．
@end defmac

@defmac AC_SEARCH_LIBS (@var{function}, @var{search-libs}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{other-libraries}@r{]})
@maindex SEARCH_LIBS
@c Search for a library defining @var{function} if it's not already
@c available.  This equates to calling @code{AC_TRY_LINK_FUNC} first
@c with no libraries, then for each library listed in @var{search-libs}.
@c 
まだ利用可能ではない，@var{function}を定義しているライブラリを探します．
これは，@var{search-libs}でリストアップされているそれぞれのライブラリに
対し，@code{AC_TRY_LINK_FUNC}の最初の引数をライブラリ無しで呼び出しこと
と同じです．

@c Add @option{-l@var{library}} to @code{LIBS} for the first library found
@c to contain @var{function}, and run @var{action-if-found}.  If the
@c function is not found, run @var{action-if-not-found}.
@c 
@var{function}が含まれている最初のライブラリに対して，
@option{-l@var{library}}を@code{LIBS}に追加し，@var{action-if-found}を実
行します．関数が見つからない場合，@var{action-if-not-found}を実行します．

@c If linking with @var{library} results in unresolved symbols that would
@c be resolved by linking with additional libraries, give those libraries
@c as the @var{other-libraries} argument, separated by spaces:
@c e.g. @option{-lXt -lX11}.  Otherwise, this macro will fail to detect
@c that @var{function} is present, because linking the test program will
@c always fail with unresolved symbols.
@c 
@var{library}とのリンクの結果が，未解決のシンボルで，追加のライブラリと
のリンクで解決できる場合，これらのライブラリを，@samp{-lXt -lX11}の様に，
スペースで区切られた@var{other-libraries}引数で与えてください．そうしな
ければ，テストプログラムとのリンクが，常に未解決のシンボルで失敗するので，
このマクロは@var{library}の存在の調査に失敗します．
@end defmac


@node Library Functions, Header Files, Libraries, Existing Tests
@section ライブラリ関数

@c The following macros check for particular C library functions.
@c If there is no macro specifically defined to check for a function you need,
@c and you don't need to check for any special properties of
@c it, then you can use one of the general function-check macros.
@c 
以下のマクロは，特定のCライブラリ関数を調査します．必要な関数を調査する
ための特別に定義されたマクロがなく，その特別な特性を調査する必要がない場
合，一般的な関数調査のマクロを使用することが可能です．

@menu
* Function Portability::        Pitfalls with usual functions
* Particular Functions::        Special handling to find certain functions
* Generic Functions::           How to find other functions
@end menu

@node Function Portability, Particular Functions, Library Functions, Library Functions
@subsection 古い関数の移植性

@c Most usual functions can either be missing, or be buggy, or be limited
@c on some architectures.  This section tries to make an inventory of these
@c portability issues.  By definition, this list will always require
@c additions, please help us keeping it as complete as possible
@c 
ほとんどの通常の関数は，無くなっている，またはバグがある，またはアーキテ
クチャによって制限があるはずです．このセクションでは，これらの移植性の問
題を目録にしようと思います．定義では，このリストは常に追加が要求されます．
できるだけ完全なものを保つために，我々への手助けをお願いします．

@table @code

@item unlink
@c The @sc{posix} spec says that @code{unlink} causes the given files to be
@c removed only after there are no more open file handles for it.  Not all
@c OS's support this behaviour though.  So even on systems that provide
@c @code{unlink}, you cannot portably assume it is OK to call it on files
@c that are open.  For example, on Windows 9x and ME, such a call would fail;
@c on DOS it could even lead to file system corruption, as the file might end
@c up being written to after the OS has removed it.
@c 
@sc{posix}の仕様では，@code{unlink}は開かれているファイルへのハンドルが
なくなった後でファイルを削除するように述べられています．全てのOSがこの動
作をサポートしているわけではありません．そのため，システムが
@code{unlink}を提供している場合でも，開いているファイルに対して呼び出し
ても大丈夫だと仮定した移植は不可能です．例えば，Windows 9xとMEでは，その
ような呼び出しは失敗します．DOSは可能ですが，OSが削除した後にファイルへ
の書き込みが終了するので，ファイルシステムが駄目になります．

@end table


@node Particular Functions, Generic Functions, Function Portability, Library Functions
@subsection 特定の関数の調査
@cindex Function, checking

@c These macros check for particular C functions---whether they exist, and
@c in some cases how they respond when given certain arguments.
@c 
これらのマクロは --- その存在にかかわらず --- 特定のC関数を調査し，場合
によっては，特定の引数が与えられた時の反応を調査します．

@defmac AC_FUNC_ALLOCA
@maindex FUNC_ALLOCA
@cvindex C_ALLOCA
@cvindex HAVE_ALLOCA_H
@ovindex ALLOCA
@c Check how to get @code{alloca}.  Tries to get a builtin version by
@c checking for @file{alloca.h} or the predefined C preprocessor macros
@c @code{__GNUC__} and @code{_AIX}.  If this macro finds @file{alloca.h},
@c it defines @code{HAVE_ALLOCA_H}.
@c 
@code{alloca}を使用する方法を調査します．@file{alloca.h}や，前もって定義
されているCプリプロセッサマクロの@code{__GNUC__}と@code{_AIX}を調査する
ことで，組み込みバージョンを取得しようとします．このマクロが 
@file{alloca.h}を見つけた場合，@code{HAVE_ALLOCA_H}を定義します．

@c If those attempts fail, it looks for the function in the standard C
@c library.  If any of those methods succeed, it defines
@c @code{HAVE_ALLOCA}.  Otherwise, it sets the output variable
@c @code{ALLOCA} to @samp{alloca.o} and defines @code{C_ALLOCA} (so
@c programs can periodically call @samp{alloca(0)} to garbage collect).
@c This variable is separate from @code{LIBOBJS} so multiple programs can
@c share the value of @code{ALLOCA} without needing to create an actual
@c library, in case only some of them use the code in @code{LIBOBJS}.
@c 
その試みが失敗する場合，標準Cライブラリで関数を探します．それらの手法の
いずれかが成功した場合，それは@code{HAVE_ALLOCA}を定義します．それ以外の
場合は，出力変数の@code{ALLOCA}を@samp{alloca.o}に設定し， 
@code{C_ALLOCA}を定義します(それで，プログラムがガーベージコレクションの
ため定期的に@samp{alloca(0)}を呼び出すことが可能になります．この変数は， 
@code{LIBOBJS}とは別物なので，実際にライブラリを作成しなくても複数のプロ
グラムで@code{ALLOCA}の値を共有することが可能ですが，@code{LIBOBJS}で使
用する場合もわずかにあります．

@c This macro does not try to get @code{alloca} from the System V R3
@c @file{libPW} or the System V R4 @file{libucb} because those libraries
@c contain some incompatible functions that cause trouble.  Some versions
@c do not even contain @code{alloca} or contain a buggy version.  If you
@c still want to use their @code{alloca}, use @code{ar} to extract
@c @file{alloca.o} from them instead of compiling @file{alloca.c}.
@c 
このマクロは，System V R3 の@file{libPW}やSystem V R4の@file{libucb}の
@code{alloca}の使用を試みません．なぜなら，それらのライブラリには互換性
がない関数があり問題が生じるためです．@code{alloca}を含まないものやバグ
だらけのバージョンもあります．それでも，その@code{alloca}を使用したい場
合，@file{alloca.c}をコンパイルする代わりに，ライブラリから
@file{alloca.o}を抽出するため，@code{ar}を使用してください．

@c Source files that use @code{alloca} should start with a piece of code
@c like the following, to declare it properly.  In some versions of AIX,
@c the declaration of @code{alloca} must precede everything else except for
@c comments and preprocessor directives.  The @code{#pragma} directive is
@c indented so that pre-@sc{ansi} C compilers will ignore it, rather than
@c choke on it.
@c 
@code{alloca}を使用するソースファイルでは，正確に宣言するために，以下の
ようなコードで始めるべきです．AIXのバージョンによっては，@code{alloca}の
宣言を，コメントとプリプロセッサディレクティブ以外の，全ての行の前に書く
必要があります．@code{#pragma}ディレクティブは，ANSI C以前のコンパイラが
停止するのではなく無視するように，字下げを行います．

@example
@group
/* AIX requires this to be the first thing in the file.  */
#ifndef __GNUC__
# if HAVE_ALLOCA_H
#  include <alloca.h>
# else
#  ifdef _AIX
 #pragma alloca
#  else
#   ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca ();
#   endif
#  endif
# endif
#endif
@end group
@end example
@end defmac

@defmac AC_FUNC_CHOWN
@maindex FUNC_CHOWN
@c If the @code{chown} function is available and works (in particular, it
@c should accept @option{-1} for @code{uid} and @code{gid}), define
@c @code{HAVE_CHOWN}.
@c 
@code{chown}関数が利用可能で動作する場合(特に，@code{uid}と@code{gid}に
対する@option{-1}を受け入れるべきです)，@code{HAVE_CHOWN}を定義します．
@end defmac

@defmac AC_FUNC_CLOSEDIR_VOID
@maindex FUNC_CLOSEDIR_VOID
@cvindex CLOSEDIR_VOID
@c If the @code{closedir} function does not return a meaningful value,
@c define @code{CLOSEDIR_VOID}.  Otherwise, callers ought to check its
@c return value for an error indicator.
@c 
@code{closedir}関数が意味のある値を返さない場合，@code{CLOSEDIR_VOID}を
定義します．それ以外では，呼び出し側で，エラーを示す戻り値を調査する必要
があります．
@end defmac

@defmac AC_FUNC_ERROR_AT_LINE
@maindex FUNC_ERROR_AT_LINE
@c If the @code{error_at_line} function is not found, require an
@c @code{AC_LIBOBJ} replacement of @samp{error}.
@c 
@code{error_at_line}関数が見つからない場合，@code{AC_LIBOBJ}が
@samp{error}で置換されることを要求します．
@end defmac

@defmac AC_FUNC_FNMATCH
@maindex FUNC_FNMATCH
@c If the @code{fnmatch} function is available and works (unlike the one on
@c Solaris 2.4), define @code{HAVE_FNMATCH}.
@c 
@code{fnmatch}関数が利用可能で，(SunOS 5.4と異なり)動作する場合， 
@code{HAVE_FNMATCH}を定義します．
@end defmac

@defmac AC_FUNC_FORK
@maindex FUNC_FORK
@cvindex HAVE_VFORK_H
@cvindex HAVE_WORKING_FORK
@cvindex HAVE_WORKING_VFORK
@cvindex vfork
@c This macro checks for the @code{fork} and @code{vfork} functions. If a
@c working @code{fork} is found, define @code{HAVE_WORKING_FORK}. This macro
@c checks whether @code{fork} is just a stub by trying to run it.
@c 
このマクロは，@code{fork}と@code{vfork}関数を調査します．動作する
@code{fork}が見つかった場合，@code{HAVE_WORKING_FORK}を定義します．この
マクロは，@code{fork}がスタブかどうかを実行してみることで調査します．

@c If @file{vfork.h} is found, define @code{HAVE_VFORK_H}. If a working
@c @code{vfork} is found, define @code{HAVE_WORKING_VFORK}. Otherwise,
@c define @code{vfork} to be @code{fork} for backward compatibility with
@c previous versions of @command{autoconf}. This macro checks for several known
@c errors in implementations of @code{vfork} and considers the system to not
@c have a working @code{vfork} if it detects any of them. It is not considered
@c to be an implementation error if a child's invocation of @code{signal}
@c modifies the parent's signal handler, since child processes rarely change
@c their signal handlers.
@c 
@file{vfork.h}が見つかった場合，@code{HAVE_VFORK_H}を定義します．動作す
る@code{vfork}が見つかった場合，@code{HAVE_WORKING_VFORK}を定義します．
それ以外の場合，以前のバージョンの@command{autoconf}に対する下位互換のた
め，@code{vfork}を@code{fork}と定義します．このマクロは，@code{vfork}の
実装のいくつかの既知のエラーを調査し，そのエラーのいずれかを検出した場合，
システムには動作する@code{vfork}が無いと考えます．子プロセスは，シグナル
ハンドラを変えることがめったにないので，子プロセスの@code{signal}の呼び
出しが，親プロセスのシグナルハンドラを変更する場合，実装エラーだとは考え
られません．

@c Since this macro defines @code{vfork} only for backward compatibility with
@c previous versions of @command{autoconf} you're encouraged to define it
@c yourself in new code:
@c 
このマクロは，以前のバージョンの@command{autoconf}への下位互換性のためだ
けに@code{vfork}を定義するので，コード内で独自に定義することを推奨します．
@example
@group
#if !HAVE_WORKING_VFORK
# define vfork fork
#endif
@end group
@end example
@end defmac

@defmac AC_FUNC_FSEEKO
@maindex FUNC_FSEEKO
@cvindex _LARGEFILE_SOURCE
@c If the @code{fseeko} function is available, define @code{HAVE_FSEEKO}.
@c Define @code{_LARGEFILE_SOURCE} if necessary.
@c 
@code{fseeko}関数が利用可能な場合，@code{HAVE_FSEEKO}を定義します．必要
があれば@code{_LARGEFILE_SOURCE}を定義します．
@end defmac

@defmac AC_FUNC_GETGROUPS
@maindex FUNC_GETGROUPS
@ovindex GETGROUPS_LIBS
@c If the @code{getgroups} function is available and works (unlike on
@c Ultrix 4.3, where @samp{getgroups (0, 0)} always fails), define
@c @code{HAVE_GETGROUPS}.  Set @code{GETGROUPS_LIBS} to any libraries
@c needed to get that function.  This macro runs @code{AC_TYPE_GETGROUPS}.
@c 
@code{getgroups}関数が利用可能で，(@samp{getgroups (0, 0)}が常に失敗する
Ultrix 4.3とことなり)動作する場合，@code{HAVE_GETGROUPS}を定義します．
@code{GETGROUPS_LIBS}をその関数の使用に必要な全てのライブラリに定義しま
す．このマクロは，@code{AC_TYPE_GETGROUPS}を実行します．
@end defmac

@defmac AC_FUNC_GETLOADAVG
@maindex FUNC_GETLOADAVG
@cvindex SVR4
@cvindex DGUX
@cvindex UMAX
@cvindex UMAX4_3
@cvindex NLIST_STRUCT
@cvindex NLIST_NAME_UNION
@cvindex GETLODAVG_PRIVILEGED
@cvindex NEED_SETGID
@cvindex C_GETLOADAVG
@ovindex LIBOBJS
@ovindex NEED_SETGID
@ovindex KMEM_GROUP
@ovindex GETLOADAVG_LIBS
@c Check how to get the system load averages.  If the system has the
@c @code{getloadavg} function, define @code{HAVE_GETLOADAVG}, and set
@c @code{GETLOADAVG_LIBS} to any libraries needed to get that function.
@c Also add @code{GETLOADAVG_LIBS} to @code{LIBS}.
@c 
システムのロードアベレージを取得する方法を調査します．システムに
@code{getloadavg}関数がある場合，@code{HAVE_GETLOADAVG}を定義し，その関
数の使用に必要な全てのライブラリを@code{GETLOADAVG_LIBS}に設定します．ま
た，@code{GETLOADAVG_LIBS}を@code{LIBS}に加えます．

@c Otherwise, require an @code{AC_LIBOBJ} replacement (@file{getloadavg.c})
@c of @samp{getloadavg}, and possibly define several other C preprocessor
@c macros and output variables:
@c 
それ以外の場合，@code{AC_LIBOBJ}を@samp{getloadavg}(@file{getloadavg.c}) 
で置換することを要求し，可能な限り以下のようないくつかのCプリプロセッサ
のマクロと出力変数を定義します．

@enumerate
@item
@c Define @code{C_GETLOADAVG}.
@c 
@code{C_GETLOADAVG}を定義します．

@item
@c Define @code{SVR4}, @code{DGUX}, @code{UMAX}, or @code{UMAX4_3} if on
@c those systems.
@c 
システムが，@code{SVR4}，@code{DGUX}，@code{UMAX}，または@code{UMAX4_3} 
の場合，それを定義します．

@item
@c If @file{nlist.h} is found, define @code{NLIST_STRUCT}.
@c 
@file{nlist.h}が見つかる場合，@code{NLIST_STRUCT}を定義します．

@item
@c If @samp{struct nlist} has an @samp{n_un.n_name} member, define
@c @code{HAVE_STRUCT_NLIST_N_UN_N_NAME}.  The obsolete symbol
@c @code{NLIST_NAME_UNION} is still defined, but do not depend upon it.
@c 
@samp{struct nlist}が@samp{n_un}メンバーを持つ場合，
@code{HAVE_STRUCT_NLIST_N_UN_N_NAME}を定義します．時代遅れのシンボル
@code{NLIST_NAME_UNION}も定義しますが，それに依存しないようにしてくださ
い．

@item
@c Programs may need to be installed setgid (or setuid) for
@c @code{getloadavg} to work.  In this case, define
@c @code{GETLOADAVG_PRIVILEGED}, set the output variable @code{NEED_SETGID}
@c to @samp{true} (and otherwise to @samp{false}), and set
@c @code{KMEM_GROUP} to the name of the group that should own the installed
@c program.
@c 
プログラムによっては，@code{getloadavg}が動作するために，setgid(または
setuid)がインストールされていることを必要とするかもしれません．この場合，
@code{GETLOADAVG_PRIVILEGED}を定義し，出力変数@code{NEED_SETGID}を
@samp{true}に(それ以外では@samp{false}に)設定し，そして@code{KMEM_GROUP} 
をインストールされているプログラムを所有するグループの名前に設定します．
@end enumerate
@end defmac

@defmac AC_FUNC_GETMNTENT
@maindex FUNC_GETMNTENT
@cvindex HAVE_GETMNTENT
@c Check for @code{getmntent} in the @file{sun}, @file{seq}, and @file{gen}
@c libraries, for Irix 4, PTX, and Unixware, respectively.  Then, if
@c @code{getmntent} is available, define @code{HAVE_GETMNTENT}.
@c 
Irix 4，PTXと，Unixwareに対し，@file{sun}，@file{seq}，そして@file{gen} 
のライブラリ内の@code{getmntent}をそれぞれ調査します．@code{getmntent}が
利用可能な場合，@code{HAVE_GETMNTENT}を定義します．
@end defmac

@defmac AC_FUNC_GETPGRP
@maindex FUNC_GETPGRP
@cvindex GETPGRP_VOID
@c If @code{getpgrp} takes no argument (the @sc{posix.1} version), define
@c @code{GETPGRP_VOID}.  Otherwise, it is the @sc{bsd} version, which takes
@c a process ID as an argument.  This macro does not check whether
@c @code{getpgrp} exists at all; if you need to work in that situation,
@c first call @code{AC_CHECK_FUNC} for @code{getpgrp}.
@c 
@code{getpgrp}が引数を取らない場合(POSIX.1 バージョン)，
@code{GETPGRP_VOID}を定義します．それ以外では，@sc{bsd}バージョンで，プ
ロセスIDを引数とします．このマクロは@code{getpgrp}が存在するかどうかを全
く調査しません．動作する必要がある場合，@code{getpgrp}に対して最初に
@code{AC_CHECK_FUNC}を呼び出してください．
@end defmac

@defmac AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
@maindex FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
@cvindex LSTAT_FOLLOWS_SLASHED_SYMLINK
@c If @file{link} is a symbolic link, then @code{lstat} should treat
@c @file{link/} the same as @file{link/.}.  However, many older
@c @code{lstat} implementations incorrectly ignore trailing slashes.
@c 
@file{link}がシンボリックリンクの場合，@code{lstat}は@file{link/}を
@file{link/.}と同じものとして扱います．しかし，多くの古い@code{lstat}の
実装では，後置されているスラッシュを間違って無視します．

@c It is safe to assume that if @code{lstat} incorrectly ignores
@c trailing slashes, then other symbolic-link-aware functions like
@c @code{unlink} and @code{unlink} also incorrectly ignore trailing slashes.
@c 
@code{lstat}が後置されているスラッシュを間違って無視する場合，それ以外の
@code{unlink}のようなsymbolic-link-aware関数と，@code{unlink}も後置され
ているスラッシュを間違って無視すると仮定した方が確実です．

@c If @code{lstat} behaves properly, define
@c @code{LSTAT_FOLLOWS_SLASHED_SYMLINK}, otherwise require an
@c @code{AC_LIBOBJ} replacement of @code{lstat}.
@c 
@code{lstat}が正しく動作する場合，@code{LSTAT_FOLLOWS_SLASHED_SYMLINK}を
定義し，それ以外の場合は，@code{AC_LIBOBJ}を@code{lstat}で置換するよう要
求します．
@end defmac

@defmac AC_FUNC_MALLOC
@maindex FUNC_MALLOC
@c If the @code{malloc} works correctly (@samp{malloc (0)} returns a valid
@c pointer), define @code{HAVE_MALLOC}.
@c 
@code{malloc}が正しく動作する(@samp{malloc (0)}が有効なポインタを返す)場
合，@code{HAVE_MALLOC}を定義します．
@end defmac

@defmac AC_FUNC_MEMCMP
@maindex FUNC_MEMCMP
@ovindex LIBOBJS
@c If the @code{memcmp} function is not available, or does not work on
@c 8-bit data (like the one on SunOS 4.1.3), or fails when comparing 16
@c bytes or more and with at least one buffer not starting on a 4-byte
@c boundary (such as the one on NeXT x86 OpenStep), require an
@c @code{AC_LIBOBJ} replacement for @samp{memcmp}.
@c 
@code{memcmp}関数が利用不可能，または(SunOS 4.1.3のように)8ビットデータ
で動作しない，または(NeXT x86 OpenStepのように)16バイトかそれ以上で少な
くとも一つのバッファが4バイト境界で始まらないものの比較時に失敗する場合，
@code{AC_LIBOBJ}で@samp{memcmp}を置換することを要求します．
@end defmac

@defmac AC_FUNC_MKTIME
@maindex FUNC_MKTIME
@ovindex LIBOBJS
@c If the @code{mktime} function is not available, or does not work
@c correctly, require an @code{AC_LIBOBJ} replacement for @samp{mktime}.
@c 
@code{mktime}関数が利用不可能，または正しく動作しない場合，
@code{AC_LIBOBJ}で@samp{mktime}を置換することを要求します．
@end defmac

@defmac AC_FUNC_MMAP
@maindex FUNC_MMAP
@cvindex HAVE_MMAP
@c If the @code{mmap} function exists and works correctly, define
@c @code{HAVE_MMAP}.  Only checks private fixed mapping of already-mapped
@c memory.
@c 
@code{mmap}関数が存在して正しく動作する場合，@code{HAVE_MMAP}を定義しま
す．すでにマップされたメモリの，プライベートな固定したマッピングのみ調査
します．
@end defmac

@defmac AC_FUNC_OBSTACK
@maindex FUNC_OBSTACK
@cvindex HAVE_OBSTACK
@cindex obstack
@c If the obstacks are found, define @code{HAVE_OBSTACK}, else require an
@c @code{AC_LIBOBJ} replacement for @samp{obstack}.
@c 
obstackが見つかった場合，@code{HAVE_OBSTACK}を定義し，そうでない場合は
@code{AC_LIBOBJ}で@samp{obstack}を置換することを要求します．
@end defmac

@defmac AC_FUNC_SELECT_ARGTYPES
@maindex FUNC_SELECT_ARGTYPES
@cvindex SELECT_TYPE_ARG1
@cvindex SELECT_TYPE_ARG234
@cvindex SELECT_TYPE_ARG5
@c Determines the correct type to be passed for each of the
@c @code{select} function's arguments, and defines those types
@c in @code{SELECT_TYPE_ARG1}, @code{SELECT_TYPE_ARG234}, and
@c @code{SELECT_TYPE_ARG5} respectively.  @code{SELECT_TYPE_ARG1} defaults
@c to @samp{int}, @code{SELECT_TYPE_ARG234} defaults to @samp{int *},
@c and @code{SELECT_TYPE_ARG5} defaults to @samp{struct timeval *}.
@c 
@code{select}関数の引数それぞれに渡される正しい型を決定し，それらの型を
@code{SELECT_TYPE_ARG1}，@code{SELECT_TYPE_ARG234}，そして 
@code{SELECT_TYPE_ARG5}にそれぞれ定義します．@code{SELECT_TYPE_ARG1}のデ
フォルトは@samp{int}で，@code{SELECT_TYPE_ARG234}のデフォルトは@samp{int
*}で，そして@code{SELECT_TYPE_ARG5}のデフォルトは@samp{struct timeval *}
です．
@end defmac

@defmac AC_FUNC_SETPGRP
@maindex FUNC_SETPGRP
@cvindex SETPGRP_VOID
@c If @code{setpgrp} takes no argument (the @sc{posix.1} version), define
@c @code{SETPGRP_VOID}.  Otherwise, it is the @sc{bsd} version, which takes
@c two process IDs as arguments.  This macro does not check whether
@c @code{setpgrp} exists at all; if you need to work in that situation,
@c first call @code{AC_CHECK_FUNC} for @code{setpgrp}.
@c 
@code{setpgrp}が引数を持たない(@sc{posix.1}バージョンの)場合，
@code{SETPGRP_VOID}を定義します．それ以外では，@sc{bsd}バージョンで，２
つのプロセスIDを引数とします．このマクロは@code{setpgrp}の存在を全く調査
しません．その状況で動作する必要がある場合，@code{setpgrp}に対して最初に
@code{AC_CHECK_FUNC}を呼び出してください．
@end defmac

@defmac AC_FUNC_STAT
@defmacx AC_FUNC_LSTAT
@maindex FUNC_STAT
@maindex FUNC_LSTAT
@cvindex HAVE_STAT_EMPTY_STRING_BUG
@cvindex HAVE_LSTAT_EMPTY_STRING_BUG
@c Determine whether @code{stat} or @code{lstat} have the bug that it
@c succeeds when given the zero-length file name argument.  The @code{stat}
@c and @code{lstat} from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do
@c this.
@c 
@code{stat}や@code{lstat}に，長さが0のファイル名を引数で与えた時に成功す
るというバグがあるかどうかを決定します．SunOS 4.1.4とHurd(1998-11-01)の
@code{stat}と@code{lstat}ではこうなります．

@c If it does, then define @code{HAVE_STAT_EMPTY_STRING_BUG} (or
@c @code{HAVE_LSTAT_EMPTY_STRING_BUG}) and ask for an @code{AC_LIBOBJ}
@c replacement of it.
@c 
その場合，@code{HAVE_STAT_EMPTY_STRING_BUG}(または
@code{HAVE_LSTAT_EMPTY_STRING_BUG})を定義し，@code{AC_LIBOBJ}でそれを置
換することを要求します．
@end defmac

@defmac AC_FUNC_SETVBUF_REVERSED
@maindex FUNC_SETVBUF_REVERSED
@cvindex SETVBUF_REVERSED
@c If @code{setvbuf} takes the buffering type as its second argument and
@c the buffer pointer as the third, instead of the other way around, define
@c @code{SETVBUF_REVERSED}.
@c 
@code{setvbuf}が他とは異なり，第2引数でバッファの型，第3引数でバッファポ
インタをとる場合，@code{SETVBUF_REVERSED}を定義します．
@end defmac

@defmac AC_FUNC_STRCOLL
@maindex FUNC_STRCOLL
@cvindex HAVE_STRCOLL
@c If the @code{strcoll} function exists and works correctly, define
@c @code{HAVE_STRCOLL}.  This does a bit more than
@c @samp{AC_CHECK_FUNCS(strcoll)}, because some systems have incorrect
@c definitions of @code{strcoll} that should not be used.
@c 
@code{strcoll}関数が存在して，正しく動作する場合，@code{HAVE_STRCOLL}を
定義します．使用すべきではない@code{strcoll}の間違った定義を持つシステム
もあるので，@samp{AC_CHECK_FUNCS(strcoll)}より多少ましです．
@end defmac

@defmac AC_FUNC_STRTOD
@maindex FUNC_STRTOD
@ovindex POW_LIB
@c If the @code{strtod} function does not exist or doesn't work correctly,
@c ask for an @code{AC_LIBOBJ} replacement of @samp{strtod}.  In this case,
@c because @file{strtod.c} is likely to need @samp{pow}, set the output
@c variable @code{POW_LIB} to the extra library needed.
@c 
@code{strtod}関数が存在していない，または正しく動作しない場合，
@code{AC_LIBOBJ}で@samp{strtod}を置換するよう要求します．この場合，
@file{strtod.c}は@samp{pow}を必要とすることもあり得るので，出力変数
@code{POW_LIB}を必要な外部ライブラリに設定します．
@end defmac

@defmac AC_FUNC_STRERROR_R
@maindex FUNC_STRERROR_R
@cvindex HAVE_STRERROR_R
@cvindex HAVE_WORKING_STRERROR_R
@c If @code{strerror_r} is available, define @code{HAVE_STRERROR_R}.  If
@c its implementation correctly returns a @code{char *}, define
@c @code{HAVE_WORKING_STRERROR_R}.  On at least DEC UNIX 4.0[A-D] and HP-UX
@c B.10.20, @code{strerror_r} returns @code{int}.  Actually, this tests
@c only whether it returns a scalar or an array, but that should be enough.
@c This is used by the common @file{error.c}.
@c 
@code{strerror_r}が利用可能な場合は，@code{HAVE_STRERROR_R}を定義します．
その実装が正しく@code{char *}を返す場合，@code{HAVE_WORKING_STRERROR_R} 
を定義します．少なくともDEC UNIX 4.0[A-D]とHP-UX B.10.20では，
@code{strerror_r}は@code{int}を返します．実際には，これはスカラーと配列
のどちらを返すかの調査のみで，十分ではないでしょう．これは一般的な
@file{error.c}で使用されます．
@end defmac

@defmac AC_FUNC_STRFTIME
@maindex FUNC_STRFTIME
@cvindex HAVE_STRFTIME
@c Check for @code{strftime} in the @file{intl} library, for SCO @sc{unix}.
@c Then, if @code{strftime} is available, define @code{HAVE_STRFTIME}.
@c 
@file{intl}ライブラリ内で，SCO @sc{unix}に対する@code{strftime}を調査し
ます． @code{strftime}が利用可能な場合，@code{HAVE_STRFTIME}を定義します．
@end defmac

@defmac AC_FUNC_UTIME_NULL
@maindex FUNC_UTIME_NULL
@cvindex HAVE_UTIME_NULL
@c If @samp{utime(@var{file}, NULL)} sets @var{file}'s timestamp to
@c the present, define @code{HAVE_UTIME_NULL}.
@c 
@samp{utime(@var{file}, NULL)}が@var{file}のタイムスタンプを現在のものに
設定する場合，@code{HAVE_UTIME_NULL}を定義します．
@end defmac

@defmac AC_FUNC_VPRINTF
@maindex FUNC_VPRINTF
@cvindex HAVE_VPRINTF
@cvindex HAVE_DOPRNT
@c If @code{vprintf} is found, define @code{HAVE_VPRINTF}.  Otherwise, if
@c @code{_doprnt} is found, define @code{HAVE_DOPRNT}.  (If @code{vprintf}
@c is available, you may assume that @code{vfprintf} and @code{vsprintf}
@c are also available.)
@c 
@code{vprintf}が見つかった場合，@code{HAVE_VPRINTF}を定義します．それ以
外で，@code{_doprnt}が見つかった場合，@code{HAVE_DOPRNT}を定義します．
(@code{vprintf}が利用可能な場合，@code{vfprintf}と@code{vsprintf}も利用
可能だと仮定できるでしょう．)
@end defmac


@node Generic Functions,  , Particular Functions, Library Functions
@subsection 一般の関数の調査

@c These macros are used to find functions not covered by the ``particular''
@c test macros.  If the functions might be in libraries other than the
@c default C library, first call @code{AC_CHECK_LIB} for those libraries.
@c If you need to check the behavior of a function as well as find out
@c whether it is present, you have to write your own test for
@c it (@pxref{Writing Tests}).
@c 
これらのマクロは，``特定の''テストマクロによってカバーていない関数を見つ
けるために使用されます．関数が，デフォルトのCライブラリ以外のライブラリ
にある場合，最初にそれらのライブラリに対して@code{AC_CHECK_LIB}を呼び出
してください．存在の確認だけでなく動作も調査したい場合，独自のテストを書
く必要があります(@pxref{Writing Tests})．

@defmac AC_CHECK_FUNC (@var{function}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex CHECK_FUNC
@c If C function @var{function} is available, run shell commands
@c @var{action-if-found}, otherwise @var{action-if-not-found}.  If you just
@c want to define a symbol if the function is available, consider using
@c @code{AC_CHECK_FUNCS} instead.  This macro checks for functions with C
@c linkage even when @code{AC_LANG(C++)} has been called, since C is more
@c standardized than C++.  (@pxref{Language Choice}, for more information
@c about selecting the language for checks.)
@c 
Cの関数@var{function}が利用可能な場合，シェルコマンド 
@var{action-if-found}を，それ以外では@var{action-if-not-found}を実行しま
す．関数が利用可能な場合にシンボルを定義したいだけならば，代わりに 
@code{AC_CHECK_FUNCS}を使用してください．このマクロは， CのほうがC++より
標準化されているので，@code{AC_LANG_CPLUSPLUS}が呼び出された場合でも，C 
にリンクされる関数を調査します．(言語の選択の調査ついての詳細は， 
@pxref{Language Choice}．)
@end defmac

@defmac AC_CHECK_FUNCS (@var{function}@dots{}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex CHECK_FUNCS
@cvindex HAVE_@var{function}
@c For each @var{function} in the whitespace-separated argument list,
@c define @code{HAVE_@var{function}} (in all capitals) if it is available.
@c If @var{action-if-found} is given, it is additional shell code to
@c execute when one of the functions is found.  You can give it a value of
@c @samp{break} to break out of the loop on the first match.  If
@c @var{action-if-not-found} is given, it is executed when one of the
@c functions is not found.
@c 
空白で区切られた引数のリストで与えられているそれぞれの@var{function}に対
し，利用可能な場合は@code{HAVE_@var{function}}を(全て大文字で)定義します．
@var{action-if-found}が与えられている場合，関数の１つが見つかったとき実
行する，追加のシェルコードになります．最初に一致したループでブレイクする
ためには，@samp{break}を与えることで可能になります．
@var{action-if-not-found}が与えられている場合，それは関数が１つでも見つ
からないときに実行されます．
@end defmac

@c Autoconf follows a philosophy that was formed over the years by those
@c who have struggled for portability: isolate the portability issues in
@c specific files, and then program as if you were in a @sc{posix}
@c environment.  Some functions may be missing or unfixable, and your
@c package must be ready to replace them.
@c 
Autoconfは，移植性のため苦心してきた人々によって，何年もかけて形作られて
きた哲学に従います．特定のファイルの移植性の問題と，@sc{posix}環境にいる
かのような問題とは別物です．関数によっては，無いものがあったり修正不可能
だったりするものもあり，パッケージではそれらを置き換える準備が必要になり
ます．

@c Use the first three of the following macros to specify a function to be
@c replaced, and the last one (@code{AC_REPLACE_FUNCS}) to check for and
@c replace the function if needed.
@c 
置換される関数を指定するための以下のマクロの最初の3つを使用し，最後のも
の(@code{AC_REPLACE_FUNCS})は関数を調査するためと，必要な場合はそれを置
換するために使用してください．

@defmac AC_LIBOBJ (@var{function})
@maindex LIBOBJ
@ovindex LIBOBJS
@c Specify that @samp{@var{function}.c} must be included in the executables
@c to replace a missing or broken implementation of @var{function}.
@c 
無かったり壊れたりしている@var{function}の実装を置換するために，実行形式
に含める必要がある@samp{@var{function}.c}を指定します．

@c Technically, it adds @samp{@var{function}.$ac_objext} to the output
@c variable @code{LIBOBJS} and calls @code{AC_LIBSOURCE} for
@c @samp{@var{function}.c}.  You should not directly change @code{LIBOBJS},
@c since this is not traceable.
@c 
技術的には，それは@samp{@var{function}.$ac_objext}を出力変数
@code{LIBOBJS}に追加し，@samp{@var{function}.c}に対し@code{AC_LIBSOURCE} 
を呼び出します．これは追跡不可能なので，直接@code{LIBOBJS}を変更すべきで
はありません．
@end defmac

@defmac AC_LIBSOURCE (@var{file})
@maindex LIBSOURCE
@c Specify that @var{file} might be needed to compile the project.  If you
@c need to know what files might be needed by a @file{configure.ac}, you
@c should trace @code{AC_LIBSOURCE}.  @var{file} must be a literal.
@c 
プロジェクトをコンパイルするために必要になる@var{file}を指定します．
@file{configure.ac}で必要になるファイルを知る必要がある場合，
@code{AC_LIBSOURCE}を追跡調査してください．@var{file}はリテラルにする必
要があります．

@c This macro is called automatically from @code{AC_LIBOBJ}, but you must
@c call it explicitly if you pass a shell variable to @code{AC_LIBOBJ}.  In
@c that case, since shell variables cannot be traced statically, you must
@c pass to @code{AC_LIBSOURCE} any possible files that the shell variable
@c might cause @code{AC_LIBOBJ} to need.  For example, if you want to pass
@c a variable @code{$foo_or_bar} to @code{AC_LIBOBJ} that holds either
@c @code{"foo"} or @code{"bar"}, you should do:
@c 
このマクロは，自動的に@code{AC_LIBOBJ}から呼び出されますが，シェル変数に
@code{AC_LIBOBJ}を渡す場合，明示的に指定する必要があります．この場合，シェ
ル変数は静的な追跡調査ができないので，@code{AC_LIBOBJ}を生成するために必
要となりそうなあらゆるシェル変数を，@code{AC_LIBSOURCE}に渡す必要があり
ます．例えば，@code{"foo"}または@code{"bar"}を保持している
@code{AC_LIBOBJ}に変数@code{$foo_or_bar}を渡したい場合は，以下のようにす
べきでしょう．

@example
AC_LIBSOURCE(foo.c)
AC_LIBSOURCE(bar.c)
AC_LIBOBJ($foo_or_bar)
@end example

@noindent
@c There is usually a way to avoid this, however, and you are encouraged to
@c simply call @code{AC_LIBOBJ} with literal arguments.
@c 
しかし，これを避ける一般的な方法もあり，それには単純にリテラルの引数で
@code{AC_LIBOBJ}を呼び出すことを推奨します．

@c Note that this macro replaces the obsolete @code{AC_LIBOBJ_DECL}, with
@c slightly different semantics: the old macro took the function name,
@c e.g. @code{foo}, as its argument rather than the file name.
@c 
このマクロは，時代遅れの@code{AC_LIBOBJ_DECL}を若干異なる意味で置換する
ことに注意してください．古いマクロは，ファイル名ではなく関数名，例えば
@code{foo}を引数としてとります．
@end defmac

@defmac AC_LIBSOURCES (@var{files})
@maindex LIBSOURCES
@c Like @code{AC_LIBSOURCE}, but accepts one or more @var{files} in a
@c comma-separated M4 list.  Thus, the above example might be rewritten:
@c 
@code{AC_LIBSOURCE}に似ていますが，カンマで分けられているM4リストに，一
つ以上の@var{files}を受け入れます．このため，上記の例は以下のように書き
換えられるでしょう．

@example
AC_LIBSOURCES([foo.c, bar.c])
AC_LIBOBJ($foo_or_bar)
@end example
@end defmac

@defmac AC_REPLACE_FUNCS (@var{function}@dots{})
@maindex REPLACE_FUNCS
@ovindex LIBOBJS
@c Like @code{AC_CHECK_FUNCS}, but uses @samp{AC_LIBOBJ(@var{function})} as
@c @var{action-if-not-found}.  You can declare your replacement function by
@c enclosing the prototype in @samp{#if !HAVE_@var{function}}.  If the
@c system has the function, it probably declares it in a header file you
@c should be including, so you shouldn't redeclare it lest your declaration
@c conflict.
@c 
@code{AC_CHECK_FUNCS}に似ていますが，@var{action-if-not-found} として
@samp{AC_LIBOBJ(@var{function})}を使用します．@samp{#if
!HAVE_@var{function}}にプロトタイプを含めることで，置換する関数を宣言す
ることが可能です．システムに関数が存在する場合，おそらくインクルードして
いるヘッダファイルで宣言されているので，宣言が衝突しないように，それを再
定義すべきではありません．
@end defmac


@node Header Files, Declarations, Library Functions, Existing Tests
@section ヘッダファイル
@cindex Header, checking

@c The following macros check for the presence of certain C header files.
@c If there is no macro specifically defined to check for a header file you need,
@c and you don't need to check for any special properties of
@c it, then you can use one of the general header-file check macros.
@c 
以下のマクロは，ある特定のCヘッダファイルの存在を調査します．必要とする
ヘッダファイルを調査するために特に定義されたマクロがなく，その特別な特性
を調査する必要がない場合，一般的なヘッダファイルチェックマクロの1つを使
用することが可能です．

@menu
* Particular Headers::          Special handling to find certain headers
* Generic Headers::             How to find other headers
@end menu

@node Particular Headers, Generic Headers, Header Files, Header Files
@subsection 特定のヘッダの調査

@c These macros check for particular system header files---whether they
@c exist, and in some cases whether they declare certain symbols.
@c 
これらのマクロは，特定のシステムヘッダファイルを調査します --- それらの
存在しているか，そして場合によっては，特定のシンボルを宣言しているかを調
査します．

@defmac AC_HEADER_DIRENT
@maindex HEADER_DIRENT
@cvindex HAVE_DIRENT_H
@cvindex HAVE_NDIR_H
@cvindex HAVE_SYS_DIR_H
@cvindex HAVE_SYS_NDIR_H
@c Check for the following header files.  For the first one that is
@c found and defines @samp{DIR}, define the listed C preprocessor macro:
@c 
以下のヘッダファイルを調査します．最初に見つかった@samp{DIR}を定義してい
るものに対して，リストアップされているCプリプロセッサマクロを定義します．

@multitable {@file{sys/ndir.h}} {@code{HAVE_SYS_NDIR_H}}
@item @file{dirent.h}   @tab @code{HAVE_DIRENT_H}
@item @file{sys/ndir.h} @tab @code{HAVE_SYS_NDIR_H}
@item @file{sys/dir.h}  @tab @code{HAVE_SYS_DIR_H}
@item @file{ndir.h}     @tab @code{HAVE_NDIR_H}
@end multitable

@c The directory-library declarations in your source code should look
@c something like the following:
@c 
ソースコード内のディレクトリライブラリの宣言は，以下のようにすべきでしょ
う．

@example
@group
#if HAVE_DIRENT_H
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
#else
# define dirent direct
# define NAMLEN(dirent) (dirent)->d_namlen
# if HAVE_SYS_NDIR_H
#  include <sys/ndir.h>
# endif
# if HAVE_SYS_DIR_H
#  include <sys/dir.h>
# endif
# if HAVE_NDIR_H
#  include <ndir.h>
# endif
#endif
@end group
@end example

@c Using the above declarations, the program would declare variables to be
@c of type @code{struct dirent}, not @code{struct direct}, and would access
@c the length of a directory entry name by passing a pointer to a
@c @code{struct dirent} to the @code{NAMLEN} macro.
@c 
上記の宣言を使用している場合，プログラムは型を@code{struct direct}ではな
く@code{struct dirent}として変数を宣言し，@code{struct dirent}へのポイン
タを渡すことによって，@code{NAMLEN}マクロまでのディレクトリエントリ名の
長さにアクセスします．

@c This macro also checks for the SCO Xenix @file{dir} and @file{x} libraries.
@c 
このマクロは，SCO Xenix @file{dir}と@file{x}ライブラリも調査します．
@end defmac

@defmac AC_HEADER_MAJOR
@maindex HEADER_MAJOR
@cvindex MAJOR_IN_MKDEV
@cvindex MAJOR_IN_SYSMACROS
@c If @file{sys/types.h} does not define @code{major}, @code{minor}, and
@c @code{makedev}, but @file{sys/mkdev.h} does, define
@c @code{MAJOR_IN_MKDEV}; otherwise, if @file{sys/sysmacros.h} does, define
@c @code{MAJOR_IN_SYSMACROS}.
@c 
@file{sys/types.h}が@code{major}，@code{minor}，そして@code{makedev}を定
義していないが，@file{sys/mkdev.h}が定義している場合，
@code{MAJOR_IN_MKDEV}を定義します．それ以外の場合で，
@file{sys/sysmacros.h}が定義している場合は，@code{MAJOR_IN_SYSMACROS}を
定義します．
@end defmac

@defmac AC_HEADER_STAT
@maindex HEADER_STAT
@maindex STAT_MACROS_BROKEN
@c If the macros @code{S_ISDIR}, @code{S_ISREG} et al. defined in
@c @file{sys/stat.h} do not work properly (returning false positives),
@c define @code{STAT_MACROS_BROKEN}.  This is the case on Tektronix UTekV,
@c Amdahl UTS and Motorola System V/88.
@c 
@file{sys/stat.h}で定義されている@code{S_ISDIR}，@code{S_ISREG}等のマク
ロが正確に働かない(間違った正の値を返す)場合，@code{STAT_MACROS_BROKEN} 
を定義します．Tektronix UTekV，Amdahl UTS，そしてMotorola System V/88の
場合がそうです．
@end defmac

@defmac AC_HEADER_STDC
@maindex HEADER_STDC
@cvindex STDC_HEADERS
@c Define @code{STDC_HEADERS} if the system has @sc{ansi} C header files.
@c Specifically, this macro checks for @file{stdlib.h}, @file{stdarg.h},
@c @file{string.h}, and @file{float.h}; if the system has those, it
@c probably has the rest of the @sc{ansi} C header files.  This macro also
@c checks whether @file{string.h} declares @code{memchr} (and thus
@c presumably the other @code{mem} functions), whether @file{stdlib.h}
@c declare @code{free} (and thus presumably @code{malloc} and other related
@c functions), and whether the @file{ctype.h} macros work on characters
@c with the high bit set, as @sc{ansi} C requires.
@c 
システムに@sc{ansi} Cヘッダファイルが存在する場合，@code{STDC_HEADERS}を
定義します．特にこのマクロは，@file{stdlib.h}，@file{stdarg.h}，
@file{string.h}，そして@file{float.h}を調査し，システムにそれらが存在し
ている場合は，たいてい@sc{ansi} Cヘッダーファイルの残りも存在します．同
様に，このマクロは@file{string.h}が@code{memchr}を宣言(他の@code{mem}関
数もおそらく存在)しているかどうか，@file{stdlib.h}が@code{free}を宣言
(@code{malloc}や他の関連する関数もおそらく存在)しているかどうか，そして，
@file{ctype.h}マクロが，@sc{ansi} Cが要求するハイビットセット文字でも動
作するかどうかを調査します．

@c Use @code{STDC_HEADERS} instead of @code{__STDC__} to determine whether
@c the system has @sc{ansi}-compliant header files (and probably C library
@c functions) because many systems that have GCC do not have @sc{ansi} C
@c header files.
@c 
GCCがあるシステムの多くは@sc{ansi} Cヘッダファイルが存在していないので，
システムに@sc{ansi}対応のヘッダファイル(そして，おそらくCライブラリ関数) 
が存在していることを決定するために，@code{__STDC__}の代わりに
@code{STDC_HEADERS}を使用してください．

@c On systems without @sc{ansi} C headers, there is so much variation that
@c it is probably easier to declare the functions you use than to figure
@c out exactly what the system header files declare.  Some systems contain
@c a mix of functions @sc{ansi} and @sc{bsd}; some are mostly @sc{ansi} but
@c vlack @samp{memmove}; some define the @sc{bsd} functions as macros in
@c @file{string.h} or @file{strings.h}; some have only the @sc{bsd}
@c functions but @file{string.h}; some declare the memory functions in
@c @file{memory.h}, some in @file{string.h}; etc.  It is probably
@c sufficient to check for one string function and one memory function; if
@c the library has the @sc{ansi} versions of those then it probably has
@c most of the others.  If you put the following in @file{configure.ac}:
@c 
@sc{ansi} Cヘッダが無いシステムには多くの変種が存在していて，そこでは，
システムヘッダファイルが宣言しているものを正確に理解するより，使用する関
数を宣言する方がより容易でしょう．@sc{ansi}と@sc{bsd} の関数が混在してい
るシステムもあります．ほとんど@sc{ansi}だが@samp{memmove}が無いものもあ
ります．@sc{bsd}関数が@file{string.h}や @file{strings.h}でマクロで定義さ
れているものもあります．@sc{bsd}関数しか持っていないが @file{string.h}が
存在するものもあります．メモリ関数が@file{memory.h}で定義されていて，
@file{string.h}でも定義されているものもあります．等々いろいろなシステム
があります．一つの文字列関数と一つのメモリ関数を調査すれば恐らく十分です．
ライブラリに@sc{ansi}バージョンのものが存在する場合，他のものもほとんど
存在します．以下を@file{configure.ac}に書き込む場合を考えます．

@example
AC_HEADER_STDC
AC_CHECK_FUNCS(strchr memcpy)
@end example

@noindent
@c then, in your code, you can put declarations like this:
@c 
コード内に，以下のような宣言を書き込むことが可能です．

@example
@group
#if STDC_HEADERS
# include <string.h>
#else
# if !HAVE_STRCHR
#  define strchr index
#  define strrchr rindex
# endif
char *strchr (), *strrchr ();
# if !HAVE_MEMCPY
#  define memcpy(d, s, n) bcopy ((s), (d), (n))
#  define memmove(d, s, n) bcopy ((s), (d), (n))
# endif
#endif
@end group
@end example

@noindent
@c If you use a function like @code{memchr}, @code{memset}, @code{strtok},
@c or @code{strspn}, which have no @sc{bsd} equivalent, then macros won't
@c suffice; you must provide an implementation of each function.  An easy
@c way to incorporate your implementations only when needed (since the ones
@c in system C libraries may be hand optimized) is to, taking @code{memchr}
@c for example, put it in @file{memchr.c} and use
@c @samp{AC_REPLACE_FUNCS(memchr)}.
@c 
@sc{bsd}とは異なる@code{memchr}，@code{memset}，@code{strtok}，または 
@code{strspn}の様な関数を使用する場合，マクロは不十分でしょう．それぞれ
の関数を実装する必要があります．(システムのCライブラリのものが，手動で最
適化されているかもしれないので)，必要な時だけ実装を組み込む簡単な方法は，
例えば@code{memchr}を使用する場合は，それを@file{memchr.c}に書き込み，
@samp{AC_REPLACE_FUNCS(memchr)}を使用することです．
@end defmac

@defmac AC_HEADER_SYS_WAIT
@maindex HEADER_SYS_WAIT
@cvindex HAVE_SYS_WAIT_H
@c If @file{sys/wait.h} exists and is compatible with @sc{posix.1}, define
@c @code{HAVE_SYS_WAIT_H}.  Incompatibility can occur if @file{sys/wait.h}
@c does not exist, or if it uses the old @sc{bsd} @code{union wait} instead
@c of @code{int} to store a status value.  If @file{sys/wait.h} is not
@c @sc{posix.1} compatible, then instead of including it, define the
@c @sc{posix.1} macros with their usual interpretations.  Here is an
@c example:
@c 
@file{sys/wait.h}が存在して，@sc{posix.1}と互換性がある場合， 
@code{HAVE_SYS_WAIT_H}を定義します．非互換性は，@file{sys/wait.h}が存在
しない場合や，ステータスの値を保存するため，@code{int}の代わりに古い
@sc{bsd}の@code{union wait}使用する場合に生じます．@file{sys/wait.h}が
@sc{posix.1}と互換性がない場合，それをインクルードする代わりに，それらの
通常の解釈を用いて@sc{posix.1}のマクロを定義してください．例えば以下のよ
うにします．

@example
@group
#include <sys/types.h>
#if HAVE_SYS_WAIT_H
# include <sys/wait.h>
#endif
#ifndef WEXITSTATUS
# define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8)
#endif
#ifndef WIFEXITED
# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
#endif
@end group
@end example
@end defmac

@cvindex _POSIX_VERSION
@c @code{_POSIX_VERSION} is defined when @file{unistd.h} is included on
@c @sc{posix.1} systems.  If there is no @file{unistd.h}, it is definitely
@c not a @sc{posix.1} system.  However, some non-@sc{posix.1} systems do
@c have @file{unistd.h}.
@c 
@file{unistd.h}が@sc{posix.1}システムに含まれている場合，
@code{_POSIX_VERSION}が定義されます．@file{unistd.h}が無い場合，明らかに
@sc{posix.1}システムではありません．しかし，@file{unistd.h}を持つ
@sc{posix.1}ではないシステムもあります．

@c The way to check if the system supports @sc{posix.1} is:
@c 
システムが@sc{posix.1}をサポートしているかどうか調査する方法は以下のよう
にします．

@example
@group
#if HAVE_UNISTD_H
# include <sys/types.h>
# include <unistd.h>
#endif

#ifdef _POSIX_VERSION
/* Code for POSIX.1 systems.  */
#endif
@end group
@end example

@defmac AC_HEADER_TIME
@maindex HEADER_TIME
@cvindex TIME_WITH_SYS_TIME
@c If a program may include both @file{time.h} and @file{sys/time.h},
@c define @code{TIME_WITH_SYS_TIME}.  On some older systems,
@c @file{sys/time.h} includes @file{time.h}, but @file{time.h} is not
@c protected against multiple inclusion, so programs should not explicitly
@c include both files.  This macro is useful in programs that use, for
@c example, @code{struct timeval} or @code{struct timezone} as well as
@c @code{struct tm}.  It is best used in conjunction with
@c @code{HAVE_SYS_TIME_H}, which can be checked for using
@c @code{AC_CHECK_HEADERS(sys/time.h)}.
@c 
プログラムが，@file{time.h}と@file{sys/time.h}の両方をインクルードする可
能性がある場合，@code{TIME_WITH_SYS_TIME}を定義します．古いシステムでは，
@file{sys/time.h}が@file{time.h}をインクルードするものもありますが，
@file{time.h}は複数回のインクルードに対して保護されていないので，プログ
ラムで明示的に両方のファイルをインクルードすべきではありません．このマク
ロは，例えば，@code{struct tm}と同様，@code{struct timeval}や 
@code{struct timezone}を使用するプログラムで役に立ちます． 
@code{AC_CHECK_HEADERS(sys/time.h)}を使用していることを調査可能にする
@code{HAVE_SYS_TIME_H}と一緒に使用するのが最善の方法です．

@example
@group
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif
@end group
@end example
@end defmac

@defmac AC_HEADER_TIOCGWINSZ
@maindex HEADER_TIOCGWINSZ
@cvindex GWINSZ_IN_SYS_IOCTL
@c FIXME: I need clarifications from Jim.
@c If the use of @code{TIOCGWINSZ} requires @file{<sys/ioctl.h>}, then
@c define @code{GWINSZ_IN_SYS_IOCTL}.  Otherwise @code{TIOCGWINSZ} can be
@c found in @file{<termios.h>}.
@c 
@code{TIOCGWINSZ}の使用が@file{<sys/ioctl.h>}を要求する場合，
@code{GWINSZ_IN_SYS_IOCTL}を定義します．それ以外では，@code{TIOCGWINSZ}
は@file{<termios.h>}で見つかるはずです．

@c Use:
@c 
以下のようにして使用します．

@example
@group
#if HAVE_TERMIOS_H
# include <termios.h>
#endif

#if GWINSZ_IN_SYS_IOCTL
# include <sys/ioctl.h>
#endif
@end group
@end example
@end defmac


@node Generic Headers,  , Particular Headers, Header Files
@subsection 一般的なヘッダの調査

@c These macros are used to find system header files not covered by the
@c ``particular'' test macros.  If you need to check the contents of a
@c header as well as find out whether it is present, you have to write your
@c own test for it (@pxref{Writing Tests}).
@c 
これらのマクロは，特定のテストマクロでカバーされていない，システムヘッダ
ファイルを見つけるために使用されます．その存在を見つけるだけでなく，ヘッ
ダの内容を調査する必要がある場合，そのために独自のテストを書く必要があり
ます (@pxref{Writing Tests})．

@defmac AC_CHECK_HEADER (@var{header-file}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_HEADER
@c If the system header file @var{header-file} is usable, execute shell
@c commands @var{action-if-found}, otherwise execute
@c @var{action-if-not-found}.  If you just want to define a symbol if the
@c header file is available, consider using @code{AC_CHECK_HEADERS}
@c instead.
@c 
システムヘッダファイル@var{header-file}が存在する場合，シェルコマンド
@var{action-if-found}を，それ以外では@var{action-if-not-found}を実行しま
す．ヘッダファイルが利用可能な場合で，シンボルを定義したいだけの場合は，
代わりに，@code{AC_CHECK_HEADERS}を使用を考えてみてください．

@c The meaning of ``usable'' depends upon the content of @var{includes}:
@c 
``利用可能''の意味は，@var{includes}の内容に依存します．

@table @asis
@item @var{includes}が空の場合(if @var{includes} is empty)
@c check whether
@c 
以下の内容を調査します．

@example
@var{header-file}
@end example

@noindent
@c can be @emph{preprocessed} without error.
@c 
これがエラー無く処理可能かどうかを調査します．

@item @var{include}が設定されている場合(if @var{include} is set)
@c Check whether
@c 
以下の内容を調査します．

@example
@var{includes}
#include <@var{header-file}>
@end example

@noindent
@c can be @emph{compiled} without error.  You may use
@c @code{AC_CHECK_HEADER} (and @code{AC_CHECK_HEADERS}) to check whether
@c two headers are compatible.
@c 
これがエラー無くコンパイル可能かどうかを調査します．２つのヘッダに互換性
があるかどうかを調査するために@code{AC_CHECK_HEADER}(と
@code{AC_CHECK_HEADERS})を使用することが可能です．
@end table

@c You may pass any kind of dummy content for @var{includes}, such as a
@c single space, a comment, to check whether @var{header-file} compiles
@c with success.
@c 
@var{header-file}のコンパイルが成功するかどうか調査するために，
@var{includes}に対して単一のスペース，カンマのようなダミーの内容を渡すこ
とも可能です．
@end defmac

@defmac AC_CHECK_HEADERS (@var{header-file}@dots{}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_HEADERS
@cvindex HAVE_@var{header}
@c For each given system header file @var{header-file} in the
@c whitespace-separated argument list that exists, define
@c @code{HAVE_@var{header-file}} (in all capitals).  If @var{action-if-found}
@c is given, it is additional shell code to execute when one of the header
@c files is found.  You can give it a value of @samp{break} to break out of
@c the loop on the first match.  If @var{action-if-not-found} is given, it
@c is executed when one of the header files is not found.
@c 
空白で区切られた引数のリストで与えられているシステムヘッダファイル
@var{header-file}が存在しているものに対し，@code{HAVE_@var{header-file}} 
を(全て大文字で)定義します．@var{action-if-found}が与えられている場合，
それはヘッダファイルの一つが見つかったときに実行する追加のシェルコードに
なります．最初に一致したループでブレイクするために@samp{break}を与えるこ
とが可能です． @var{action-if-not-found}が与えられている場合，ヘッダファ
イルが一つでも見つからないとき実行されます．

@c Be sure to read the documentation of @code{AC_CHECK_HEADER} to
@c understand the influence of @var{includes}.
@c 
@var{includes}の影響を理解するために，@code{AC_CHECK_HEADER}のドキュメン
トをしっかり読んでください．
@end defmac


@node Declarations, Structures, Header Files, Existing Tests
@section 宣言
@cindex Declaration, checking

@c The following macros check for the declaration of variables and
@c functions.  If there is no macro specifically defined to check for a
@c symbol you need, then you can use the general macros (@pxref{Generic
@c Declarations}) or, for more complex tests, you may use
@c @code{AC_TRY_COMPILE} (@pxref{Examining Syntax}).
@c 
以下のマクロは，変数と関数の宣言を調査します．必要なシンボルを調査するた
めに特別なマクロが定義されていない場合，一般的なマクロ(@pxref{Generic
Declarations}を使用することが可能で，より複雑なテストに対しては，
@code{AC_TRY_COMPILE}を使用することが可能です(@pxref{Examining Syntax})．

@menu
* Particular Declarations::     Macros to check for certain declarations
* Generic Declarations::        How to find other declarations
@end menu

@node Particular Declarations, Generic Declarations, Declarations, Declarations
@subsection 特定の宣言の調査

@c The following macros check for certain declarations.
@c 
以下のマクロは特定の宣言を調査します．

@defmac AC_DECL_SYS_SIGLIST
@maindex DECL_SYS_SIGLIST
@cvindex SYS_SIGLIST_DECLARED
@c Define @code{SYS_SIGLIST_DECLARED} if the variable @code{sys_siglist}
@c is declared in a system header file, either @file{signal.h} or
@c @file{unistd.h}.
@c 
変数@code{sys_siglist}が，システムヘッダファイルの@file{signal.h}と
@file{unistd.h}のいずれかでで宣言されている場合， 
@code{SYS_SIGLIST_DECLARED}を定義します．
@end defmac


@node Generic Declarations,  , Particular Declarations, Declarations
@subsection 一般的な宣言の調査

@c These macros are used to find declarations not covered by the ``particular''
@c test macros.
@c 
これらのマクロは，``特定の''テストマクロでカバーされていない宣言を調査す
るために使用します．

@defmac AC_CHECK_DECL (@var{symbol}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_DECL
@c If @var{symbol} (a function or a variable) is not declared in
@c @var{includes} and a declaration is needed, run the shell commands
@c @var{action-if-not-found}, otherwise @var{action-if-found}.  If no
@c @var{includes} are specified, the default includes are used
@c (@pxref{Default Includes}).
@c 
@var{symbol}(関数や変数)が@var{includes}で定義されていなくて宣言が必要な
場合，シェルコマンド@var{action-if-not-found}を実行し，それ以外では
@var{action-if-found}を実行します．@var{includes}が宣言されていない場合，
デフォルトのインクルードが使用されます(@pxref{Default Includes})．

@c This macro actually tests whether it is valid to use @var{symbol} as an
@c r-value, not if it is really declared, because it is much safer to avoid
@c introducing extra declarations when they are not needed.
@c 
このマクロは，必要でない時に余分な宣言を導入することを避けた方が安全なの
で，@var{symbol}がr-valueとして有効かどうかを実際にテストし，実際に宣言
されているかどうかはテストしません．
@end defmac

@defmac AC_CHECK_DECLS (@var{symbols}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_DECLS
@cvindex HAVE_DECL_@var{symbol}
@c For each of the @var{symbols} (@emph{comma}-separated list), define
@c @code{HAVE_DECL_@var{symbol}} (in all capitals) to @samp{1} if
@c @var{symbol} is declared, otherwise to @samp{0}.  If
@c @var{action-if-not-found} is given, it is additional shell code to
@c execute when one of the function declarations is needed, otherwise
@c @var{action-if-found} is executed.
@c 
それぞれの(@emph{カンマ}で分けられているリスト)@var{symbols}に対し，
@var{symbol}が宣言されれいる場合は@code{HAVE_DECL_@var{symbol}}を(全て大
文字で)@samp{1}に定義し，それ以外では@samp{0}に定義します．
@var{action-if-not-found}が与えられている場合，関数宣言の一つが必要なと
き実行するシェルコードを追加し，それ以外では@var{action-if-found}が実行
されます．

@c This macro uses an m4 list as first argument:
@c 
このマクロは，最初の引数としてm4のリストを使用します．
@example
AC_CHECK_DECLS(strdup)
AC_CHECK_DECLS([strlen])
AC_CHECK_DECLS([malloc, realloc, calloc, free])
@end example

@c Unlike the other @samp{AC_CHECK_*S} macros, when a @var{symbol} is not
@c declared, @code{HAVE_DECL_@var{symbol}} is defined to @samp{0} instead
@c of leaving @code{HAVE_DECL_@var{symbol}} undeclared.  When you are
@c @emph{sure} that the check was performed, use
@c @code{HAVE_DECL_@var{symbol}} just like any other result of Autoconf:
@c 
他の@samp{AC_CHECK_*S}マクロと異なり，@var{symbol}が宣言されていない時，
@code{HAVE_DECL_@var{symbol}}を宣言しないままにする代わりに，
@code{HAVE_DECL_@var{symbol}}は@samp{0}で定義されます．調査の実行を
@emph{確かめている}時，@code{HAVE_DECL_@var{symbol}}をAutoconfの他の結果
と同様に使用してください．

@example
#if !HAVE_DECL_SYMBOL
extern char *symbol;
#endif
@end example

@noindent
@c If the test may have not been performed, however, because it is safer
@c @emph{not} to declare a symbol than to use a declaration that conflicts
@c with the system's one, you should use:
@c 
しかし，テストが実行されていない場合，システムのものと衝突するような宣言
を使用するより，シンボルを宣言@emph{しない}方が安全なので，以下のように
使用すべきでしょう．

@example
#if defined HAVE_DECL_MALLOC && !HAVE_DECL_MALLOC
char *malloc (size_t *s);
#endif
@end example

@noindent
@c You fall into the second category only in extreme situations: either
@c your files may be used without being configured, or they are used during
@c the configuration.  In most cases the traditional approach is enough.
@c 
究極の状態でのみ2番目のカテゴリに分類されます．ファイルがコンフィグレー
ションされずに使用されている場合か，コンフィグレーション時に使用されてい
る場合のいずれかです．ほとんどの場合はこれまでの方法で十分です．
@end defmac


@node Structures, Types, Declarations, Existing Tests
@section 構造体
@cindex Structure, checking

@c The following macros check for the presence of certain members in C
@c structures.  If there is no macro specifically defined to check for a
@c member you need, then you can use the general structure-member macro
@c (@pxref{Generic Structures}) or, for more complex tests, you may use
@c @code{AC_TRY_COMPILE} (@pxref{Examining Syntax}).
@c 
以下のマクロは，特定のCの構造体の存在を調査します．必要なメンバーの調査
するために定義されている特定のマクロが無い場合，一般的な構造体メンバーの
マクロを使用したり(@pxref{Generic Structures})，より複雑なテストに対して
は，@code{AC_TRY_COMPILE}を使用することが可能です(@pxref{Examining
Syntax})．

@menu
* Particular Structures::       Macros to check for certain structure members
* Generic Structures::          How to find other structure members
@end menu

@node Particular Structures, Generic Structures, Structures, Structures
@subsection 特定の構造体の調査

@c The following macros check for certain structures or structure members.
@c 
以下のマクロは，特定の構造体と構造体のメンバーを調査します．

@defmac AC_STRUCT_ST_BLKSIZE
@maindex STRUCT_ST_BLKSIZE
@cvindex HAVE_STRUCT_STAT_ST_BLKSIZE
@cvindex HAVE_ST_BLKSIZE
@c If @code{struct stat} contains an @code{st_blksize} member, define
@c @code{HAVE_STRUCT_STAT_ST_BLKSIZE}.  The former name,
@c @code{HAVE_ST_BLKSIZE} is to be avoided, as its support will cease in
@c the future.  This macro is obsoleted, and should be replaced by
@c 
@code{struct stat}が@code{st_blksize}メンバーを含んでいる場合， 
@code{HAVE_STRUCT_STAT_ST_BLKSIZE}を定義します．これまでの名前
@code{HAVE_ST_BLKSIZE}は，将来サポートを中止するので避けてください．この
マクロは時代遅れで，以下のもので置換すべきです．

@example
AC_CHECK_MEMBERS([struct stat.st_blksize])
@end example
@end defmac

@defmac AC_STRUCT_ST_BLOCKS
@maindex STRUCT_ST_BLOCKS
@cvindex HAVE_STRUCT_STAT_ST_BLOCKS
@cvindex HAVE_ST_BLOCKS
@ovindex LIBOBJS
@c If @code{struct stat} contains an @code{st_blocks} member, define
@c @code{HAVE_STRUCT STAT_ST_BLOCKS}.  Otherwise, require an
@c @code{AC_LIBOBJ} replacement of @samp{fileblocks}.  The former name,
@c @code{HAVE_ST_BLOCKS} is to be avoided, as its support will cease in the
@c future.
@c 
@code{struct stat}が@code{st_blocks}メンバーを含んでいる場合， 
@code{HAVE_STRUCT STAT_ST_BLOCKS}を定義します．それ以外では，出力変数 
@code{AC_LIBOBJS}で@samp{fileblocks}の置換を要求します．これまでの名前
@code{HAVE_ST_BLOCKS}は，将来サポートを中止するので避けてください．
@end defmac

@defmac AC_STRUCT_ST_RDEV
@maindex STRUCT_ST_RDEV
@cvindex HAVE_ST_RDEV
@cvindex HAVE_STRUCT_STAT_ST_RDEV
@c If @code{struct stat} contains an @code{st_rdev} member, define
@c @code{HAVE_STRUCT_STAT_ST_RDEV}.  The former name for this macro,
@c @code{HAVE_ST_RDEV}, is to be avoided as it will cease to be supported
@c in the future.  Actually, even the new macro is obsolete, and should be
@c replaced by:
@c 
@code{struct stat}が@code{st_rdev}メンバーを含んでいる場合， 
@code{HAVE_STRUCT_STAT_ST_RDEV}を定義します．これまでの名前
@code{HAVE_ST_RDEV}は，将来サポートを中止するので避けてください．実際に
は新しいマクロでさえ時代遅れで，以下のもので置換すべきです．

@example
AC_CHECK_MEMBERS([struct stat.st_rdev])
@end example
@end defmac

@defmac AC_STRUCT_TM
@maindex STRUCT_TM
@cvindex TM_IN_SYS_TIME
@c If @file{time.h} does not define @code{struct tm}, define
@c @code{TM_IN_SYS_TIME}, which means that including @file{sys/time.h}
@c had better define @code{struct tm}.
@c 
@file{time.h}が@code{struct tm}を定義しない場合，@code{TM_IN_SYS_TIME}を
定義し，それは，@file{sys/time.h}をインクルードすることで@code{struct
tm}を定義した方が良いことを意味します．
@end defmac

@defmac AC_STRUCT_TIMEZONE
@maindex STRUCT_TIMEZONE
@cvindex HAVE_TM_ZONE
@cvindex HAVE_TZNAME
@c Figure out how to get the current timezone.  If @code{struct tm} has a
@c @code{tm_zone} member, define @code{HAVE_STRUCT_TM_TM_ZONE} (and the
@c obsoleted @code{HAVE_TM_ZONE}).  Otherwise, if the external array
@c @code{tzname} is found, define @code{HAVE_TZNAME}.
@c 
現在のタイムゾーンの取得法を判別します．@code{struct tm}に@code{tm_zone} 
メンバーが存在する場合，@code{HAVE_STRUCT_TM_TM_ZONE}(と時代遅れの
@code{HAVE_TM_ZONE})を定義します．それ以外では，外部配列の@code{tzname}
が見つかる場合，@code{HAVE_TZNAME}を定義します．
@end defmac


@node Generic Structures,  , Particular Structures, Structures
@subsection 一般的な構造体の調査

@c These macros are used to find structure members not covered by the
@c ``particular'' test macros.
@c 
これらのマクロは，``特定の''テストマクロでカバーされていない構造体のメン
バーを検索するために使用します．

@defmac AC_CHECK_MEMBER (@var{aggregate}.@var{member}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_MEMBER
@c Check whether @var{member} is a member of the aggregate @var{aggregate}.
@c If no @var{includes} are specified, the default includes are used
@c (@pxref{Default Includes}).
@c 
@var{member}が集合体@var{aggregate}のメンバーかどうかを調査します．
@var{includes}が指定されていない場合，デフォルトのインクルードが使用され
ます(@pxref{Default Includes})．

@example
AC_CHECK_MEMBER(struct passwd.pw_gecos,,
                [AC_MSG_ERROR([We need `passwd.pw_gecos'!])],
                [#include <pwd.h>])
@end example

@c You can use this macro for sub-members:
@c 
このマクロはサブメンバーに対して使用可能です．

@example
AC_CHECK_MEMBER(struct top.middle.bot)
@end example
@end defmac

@defmac AC_CHECK_MEMBERS (@var{members}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_MEMBERS
@c Check for the existence of each @samp{@var{aggregate}.@var{member}} of
@c @var{members} using the previous macro.  When @var{member} belongs to
@c @var{aggregate}, define @code{HAVE_@var{aggregate}_@var{member}} (in all
@c capitals, with spaces and dots replaced by underscores).
@c 
直前のマクロで使用されている@var{members}のそれぞれの
@samp{@var{aggregate}.@var{member}}の存在を調査します．@var{member}が
@var{aggregate}に属している時，@code{HAVE_@var{aggregate}_@var{member}} 
を(全て大文字で，スペースとドットをアンダースコアで置換しながら)定義しま
す．

@c This macro uses m4 lists:
@c 
このマクロはm4のリストを使用します．
@example
AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize])
@end example
@end defmac


@node Types, Compilers and Preprocessors, Structures, Existing Tests
@section 型

@c The following macros check for C types, either builtin or typedefs.  If
@c there is no macro specifically defined to check for a type you need, and
@c you don't need to check for any special properties of it, then you can
@c use a general type-check macro.
@c 
以下のマクロは，組み込みまたはtypedefになっている，Cの型を調査します．必
要な型を調査するための特別に定義されたマクロがなく，その特別な特性を調査
する必要がない場合，一般的な型調査マクロを使用することが可能です．

@menu
* Particular Types::            Special handling to find certain types
* Generic Types::               How to find other types
@end menu

@node Particular Types, Generic Types, Types, Types
@subsection 特定の型の調査

@c These macros check for particular C types in @file{sys/types.h},
@c @file{stdlib.h} and others, if they exist.
@c 
これらのマクロは，@file{sys/types.h}，@file{stdlib.h}，そして存在する場
合はその他の，特定のCの型を調査します．

@defmac AC_TYPE_GETGROUPS
@maindex TYPE_GETGROUPS
@cvindex GETGROUPS_T
@c Define @code{GETGROUPS_T} to be whichever of @code{gid_t} or @code{int}
@c is the base type of the array argument to @code{getgroups}.
@c 
@code{gid_t}と@code{int}のどちらかを，@code{getgroups}への配列引数の基本
の型にするため，@code{GETGROUPS_T}を定義します．
@end defmac

@defmac AC_TYPE_MODE_T
@maindex TYPE_MODE_T
@cvindex mode_t
@c Equivalent to @samp{AC_CHECK_TYPE(mode_t, int)}.
@c 
@samp{AC_CHECK_TYPE(mode_t, int)}と同じです．
@end defmac

@defmac AC_TYPE_OFF_T
@maindex TYPE_OFF_T
@cvindex off_t
@c Equivalent to @samp{AC_CHECK_TYPE(off_t, long)}.
@c 
@samp{AC_CHECK_TYPE(off_t, long)}と同じです．
@end defmac

@defmac AC_TYPE_PID_T
@maindex TYPE_PID_T
@cvindex pid_t
@c Equivalent to @samp{AC_CHECK_TYPE(pid_t, int)}.
@c 
@samp{AC_CHECK_TYPE(pid_t, int)}と同じです．
@end defmac

@defmac AC_TYPE_SIGNAL
@maindex TYPE_SIGNAL
@cvindex RETSIGTYPE
@c If @file{signal.h} declares @code{signal} as returning a pointer to a
@c function returning @code{void}, define @code{RETSIGTYPE} to be
@c @code{void}; otherwise, define it to be @code{int}.
@c 
@file{signal.h}が，@code{signal}を@code{void}返す関数へのポインタを返す
ものと宣言されている場合，@code{RETSIGTYPE}を@code{void}と定義します．そ
れ以外では@code{int}と定義します．

@c Define signal handlers as returning type @code{RETSIGTYPE}:
@c 
シグナルハンドラが返す型を@code{RETSIGTYPE}と定義してください．

@example
@group
RETSIGTYPE
hup_handler ()
@{
@dots{}
@}
@end group
@end example
@end defmac

@defmac AC_TYPE_SIZE_T
@maindex TYPE_SIZE_T
@cvindex size_t
@c Equivalent to @samp{AC_CHECK_TYPE(size_t, unsigned)}.
@c 
@samp{AC_CHECK_TYPE(size_t, unsigned)}と同じです．
@end defmac

@defmac AC_TYPE_UID_T
@maindex TYPE_UID_T
@cvindex uid_t
@cvindex gid_t
@c If @code{uid_t} is not defined, define @code{uid_t} to be @code{int} and
@c @code{gid_t} to be @code{int}.
@c 
@code{uid_t}が定義されていない場合，@code{uid_t}を@code{int}に，そして
@code{gid_t}を@code{int}に定義します．
@end defmac


@node Generic Types,  , Particular Types, Types
@subsection 一般的な型の調査

@c These macros are used to check for types not covered by the ``particular''
@c test macros.
@c 
これらのマクロは，``特定の''テストマクロがカバーしない型を調査するために
使用されます．

@defmac AC_CHECK_TYPE (@var{type}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_TYPE
@c Check whether @var{type} is defined.  It may be a compiler builtin type
@c or defined by the @ovar{includes} (@pxref{Default Includes}).
@c 
@var{type}が定義されているかどうかを調査します．コンパイラ組み込みの型や，
@r{[}@var{includes}@r{]}(@pxref{Default Includes})で定義されてい
る可能性があります．
@end defmac


@defmac AC_CHECK_TYPES (@var{types}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_TYPES
@c For each @var{type} of the @var{types} that is defined, define
@c @code{HAVE_@var{type}} (in all capitals).  If no @var{includes} are
@c specified, the default includes are used (@pxref{Default Includes}).  If
@c @var{action-if-found} is given, it is additional shell code to execute
@c when one of the types is found.  If @var{action-if-not-found} is given,
@c it is executed when one of the types is not found.
@c 
定義されている@var{types}のそれぞれの@var{type}に対し，
@code{HAVE_@var{type}}を(全て大文字で)定義します．@var{includes}が定義さ
れていない場合，デフォルトのインクルードが使用されます(@pxref{Default
Includes})．@var{action-if-found}が与えられている場合，型の一つが見つかっ
た時に実行する追加のシェルコードとなります．@var{action-if-not-found}が
与えられている場合，型の一つでも見つからない時に実行されます．

@c This macro uses m4 lists:
@c 
このマクロはm4のリストを使用します．
@example
AC_CHECK_TYPES(ptrdiff_t)
AC_CHECK_TYPES([unsigned long long, uintmax_t])
@end example

@end defmac

@c Autoconf, up to 2.13, used to provide to another version of
@c @code{AC_CHECK_TYPE}, broken by design.  In order to keep backward
@c compatibility, a simple heuristics, quite safe but not totally, is
@c implemented.  In case of doubt, read the documentation of the former
@c @code{AC_CHECK_TYPE}, see @ref{Obsolete Macros}.
@c 
2.13までのAutoconfは，設計に問題がある他のバージョンの
@code{AC_CHECK_TYPE}を提供するために使用されていました．単純な経験則とし
て，全体的ではないが全く安全なので，下位互換性のため，実装されました．疑
うのなら，以前の@code{AC_CHECK_TYPE}のドキュメントを読んでください．
@ref{Obsolete Macros}を参照してください．


@node Compilers and Preprocessors, System Services, Types, Existing Tests
@section コンパイラとプリプロセッサ

@ovindex EXEEXT
@c All the tests for compilers (@code{AC_PROG_CC}, @code{AC_PROG_CXX},
@c @code{AC_PROG_F77}) define the output variable @code{EXEEXT} based on
@c the output of the compiler, typically to the empty string if Unix and
@c @samp{.exe} if Win32 or OS/2.
@c 
コンパイラ(@code{AC_PROG_CC}，@code{AC_PROG_CXX}，@code{AC_PROG_F77})に
対する全てのテストは，コンパイラの出力のベースとなる出力変数
@code{EXEEXT}を定義し，通常，Unixでは空の文字列でWin32やOS/2では
@samp{.exe}に定義されます．

@ovindex OBJEXT
@c They also define the output variable @code{OBJEXT} based on the
@c output of the compiler, after .c files have been excluded, typically
@c to @samp{o} if Unix, @samp{obj} if Win32.
@c 
それらは，.cファイルが除外された後で，コンパイラ出力のベースとなる出力変
数@code{OBJEXT}も定義し，通常，Unixでは@samp{o}でWin32では@samp{obj}に定
義されますます．

@c If the compiler being used does not produce executables, they fail.  If
@c the executables can't be run, and cross-compilation is not enabled, they
@c fail too.  @xref{Manual Configuration}, for more on support for cross
@c compiling.
@c 
使用しているコンパイラが実行形式を生成しない場合，それは失敗します．実行
形式が実行不可能な場合で，クロスコンパイルが利用できない場合も失敗します．
クロスコンパイルのサポートの詳細は，@xref{Manual Configuration}.

@menu
* Generic Compiler Characteristics::  Language independent tests
* C Compiler::                  Checking its characteristics
* C++ Compiler::                Likewise
* Fortran 77 Compiler::         Likewise
@end menu

@node Generic Compiler Characteristics, C Compiler, Compilers and Preprocessors, Compilers and Preprocessors
@subsection 一般的なコンパイラの特徴

@defmac AC_CHECK_SIZEOF (@var{type}, @r{[}@var{unused}@r{]}, @r{[}@var{includes}@r{]})
@maindex CHECK_SIZEOF
@c Define @code{SIZEOF_@var{type}} (@pxref{Standard Symbols}) to be the
@c size in bytes of @var{type}.  If @samp{type} is unknown, it gets a size
@c of 0.  If no @var{includes} are specified, the default includes are used
@c (@pxref{Default Includes}).  If you provide @var{include}, make sure to
@c include @file{stdio.h} which is required for this macro to run.
@c 
@code{SIZEOF_@var{type}}(@pxref{Standard Symbols})を@var{type}のバイトサ
イズに定義します．@samp{type}が分からない場合，そのサイズは0になります．
@var{includes}が指定されていない場合，デフォルトのインクルードが使用され
ます(@pxref{Default Includes})．@var{include}を与える場合，このマクロを
実行するために必要な@file{stdio.h}を含めてください．

@c This macro now works even when cross-compiling.  The @var{unused}
@c argument was used when cross-compiling.
@c 
このマクロは，現在クロスコンパイル時にも動作します．@var{unused}引数は，
クロスコンパイル時に使用します．

@c For example, the call
@c 
例えば，以下のように呼び出します．

@example
AC_CHECK_SIZEOF(int *)
@end example

@noindent
@c defines @code{SIZEOF_INT_P} to be 8 on DEC Alpha AXP systems.
@c 
これは，DEC Alpha AXPシステムでは@code{SIZEOF_INT_P}を8に定義します．
@end defmac


@node C Compiler, C++ Compiler, Generic Compiler Characteristics, Compilers and Preprocessors
@subsection Cコンパイラの特徴

@defmac AC_PROG_CC (@r{[}@var{compiler-search-list}@r{]})
@maindex PROG_CC
@ovindex CC
@ovindex CFLAGS
@c Determine a C compiler to use.  If @code{CC} is not already set in the
@c environment, check for @code{gcc} and @code{cc}, then for other C
@c compilers.  Set output variable @code{CC} to the name of the compiler
@c found.
@c 
使用するCコンパイラを決定します．@code{CC}が環境変数で設定されていない場
合，@code{gcc}と@code{cc}を調査し，その後で他のCコンパイラを調査します．
出力変数@code{CC}を，見つかったコンパイラの名前に設定します．

@c This macro may, however, be invoked with an optional first argument
@c which, if specified, must be a space separated list of C compilers to
@c search for.  This just gives the user an opportunity to specify an
@c alternative search list for the C compiler.  For example, if you didn't
@c like the default order, then you could invoke @code{AC_PROG_CC} like
@c this:
@c 
しかし，このマクロは追加の最初の引数を用いて呼び出すことも可能で，それが
指定されている場合，検索するCコンパイラのスペースで区切られているリスト
にする必要があります．これは，別のCコンパイラの検索リストを指定する機会
をユーザに与えるだけです．例えば，デフォルトの順序が好きではない場合，以
下のような@code{AC_PROG_CC}を呼び出すことが可能です．

@example
AC_PROG_CC(cl egcs gcc cc)
@end example

@c If using the @sc{gnu} C compiler, set shell variable @code{GCC} to
@c @samp{yes}.  If output variable @code{CFLAGS} was not already set, set
@c it to @option{-g -O2} for the @sc{gnu} C compiler (@option{-O2} on systems
@c where GCC does not accept @option{-g}), or @option{-g} for other compilers.
@c 
@sc{gnu} Cコンパイラを使用する場合，シェル変数の@code{GCC}を@samp{yes}に
設定します．出力変数@code{CFLAGS}がいまだ設定されていない場合，@sc{gnu}
Cコンパイラに対しては@option{-g -O2}に設定し(GCCが @samp{-g}を受け入れな
いシステムは@samp{-O2})，それ以外のコンパイラに対しては@option{-g}に設定
します．
@end defmac

@defmac AC_PROG_CC_C_O
@maindex PROG_CC_C_O
@cvindex NO_MINUS_C_MINUS_O
@c If the C compiler does not accept the @option{-c} and @option{-o} options
@c simultaneously, define @code{NO_MINUS_C_MINUS_O}.  This macro actually
@c tests both the compiler found by @code{AC_PROG_CC}, and, if different,
@c the first @code{cc} in the path.  The test fails if one fails.  This
@c macro was created for @sc{gnu} Make to choose the default C compilation
@c rule.
@c 
Cコンパイラが@samp{-c}と@samp{-o}オプションを同時に受け入れない場合，
@code{NO_MINUS_C_MINUS_O}を定義します．このマクロは，@code{AC_PROG_CC}で
見つかったコンパイラと，パスの最初の@code{cc}がそれと異なっている場合は
その両方を，実際にテストします．
@end defmac

@defmac AC_PROG_CC_STDC
@maindex PROG_CC_STDC
@ovindex CC
@c If the C compiler is not in @sc{ansi} C mode by default, try to add an
@c option to output variable @code{CC} to make it so.  This macro tries
@c various options that select @sc{ansi} C on some system or another.  It
@c considers the compiler to be in @sc{ansi} C mode if it handles function
@c prototypes correctly.
@c 
Cコンパイラがデフォルトで@sc{ansi} Cモードでない場合，そうするためのオプ
ションを出力変数@code{CC}に追加します．このマクロは，システムによって
@sc{ansi} Cを選択するために様々なオプションを試します．関数のプロトタイ
プを正しく扱う場合，@sc{ansi} Cモードだと判断します．

@c If you use this macro, you should check after calling it whether the C
@c compiler has been set to accept @sc{ansi} C; if not, the shell variable
@c @code{ac_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
@c code in @sc{ansi} C, you can make an un-@sc{ansi}fied copy of it by
@c using the program @code{ansi2knr}, which comes with Automake.
@c 
このマクロを使用する場合，それを呼び出した後に，Cコンパイラが@sc{ansi} C 
を受け入れるための設定があるかどうかを調査すべきです．存在しない場合，シェ
ル変数@code{ac_cv_prog_cc_stdc}は@samp{no}に設定されます．ソースコードを
@sc{ansi} Cで書いている場合，Automakeでインストールされるプログラム
@code{ansi2knr}を使用することで，それを非@sc{ansi}にしてコピーすることが
可能です．
@end defmac

@defmac AC_PROG_CPP
@maindex PROG_CPP
@ovindex CPP
@c Set output variable @code{CPP} to a command that runs the
@c C preprocessor.  If @samp{$CC -E} doesn't work, @file{/lib/cpp} is used.
@c It is only portable to run @code{CPP} on files with a @file{.c}
@c extension.
@c 
出力変数@code{CPP}を，Cプリプロセッサを実行するコマンドに設定ます．
@samp{$CC -E}が動作しない場合，@file{/lib/cpp}を使用します．拡張子が
@file{.c}のファイルで@code{CPP}を実行することは移植性のためだけです．

@c If the current language is C (@pxref{Language Choice}), many of the
@c specific test macros use the value of @code{CPP} indirectly by calling
@c @code{AC_TRY_CPP}, @code{AC_CHECK_HEADER}, @code{AC_EGREP_HEADER}, or
@c @code{AC_EGREP_CPP}.
@c 
現在の言語がCの場合(@pxref{Language Choice})，特定のテストマクロには，
@code{AC_TRY_CPP}，@code{AC_CHECK_HEADER}，@code{AC_EGREP_HEADER}，また
は，@code{AC_EGREP_CPP}の呼び出しで，間接的に@code{CPP}の値を使用するも
のもたくさんあります．

@c Some preprocessors don't indicate missing include files by the error
@c status.  For such preprocessors an internal variable is set that causes
@c other macros to check the standard error from the preprocessor and
@c consider the test failed if any warnings have been reported.
@c 
プロセッサによっては，足りないインクルードファイルをエラーステータスで示
さないものもあります．そのようなプロセッサに対する内部変数は，プリプロセッ
サからの標準エラーを調査するための他のマクロを設定し，警告が報告された場
合はテストに失敗したと判断します．
@end defmac

@c The following macros check for C compiler or machine architecture
@c features.  To check for characteristics not listed here, use
@c @code{AC_TRY_COMPILE} (@pxref{Examining Syntax}) or @code{AC_TRY_RUN}
@c (@pxref{Run Time})
@c 
以下のマクロは，Cコンパイラやマシンアーキテクチャの特徴を調査します．こ
こでリストアップされない特徴を調査するために，@code{AC_TRY_COMPILE}
(@pxref{Examining Syntax})や@code{AC_TRY_RUN}(@pxref{Run Time})を使用し
てください．

@defmac AC_C_BIGENDIAN
@maindex C_BIGENDIAN
@cvindex WORDS_BIGENDIAN
@cindex Endianness
@c If words are stored with the most significant byte first (like Motorola
@c and SPARC, but not Intel and VAX, CPUs), define @code{WORDS_BIGENDIAN}.
@c 
(IntelとVAXとは異なり，MotorolaとSPARCのCPUのように)wordが最上位バイトに
最初に保存される場合，@code{WORDS_BIGENDIAN}を定義します．
@end defmac

@defmac AC_C_CONST
@maindex C_CONST
@cvindex const
@c If the C compiler does not fully support the @sc{ansi} C qualifier
@c @code{const}, define @code{const} to be empty.  Some C compilers that do
@c not define @code{__STDC__} do support @code{const}; some compilers that
@c define @code{__STDC__} do not completely support @code{const}.  Programs
@c can simply use @code{const} as if every C compiler supported it; for
@c those that don't, the @file{Makefile} or configuration header file will
@c define it as empty.
@c 
Cコンパイラが@sc{ansi} Cの修飾子@code{const}を完全にサポートしない場合， 
@code{const}を空で定義します．@code{__STDC__}を定義しないCコンパイラには，
@code{const}をサポートするものもあります．@code{__STDC__}を定義するCコン
パイラには，@code{const}を完全にサポートしないものもあります．全てのCコ
ンパイラが@code{const}をサポートするかのように，プログラムはそれを使用す
ることができます．サポートしないもののために@file{Makefile}やコンフィグ
レーションヘッダファイルは，それを空で定義します．

@c Occasionally installers use a C++ compiler to compile C code, typically
@c because they lack a C compiler.  This causes problems with @code{const},
@c because C and C++ treat @code{const} differently.  For example:
@c 
Cコンパイラが無いことために，インストールしている人がCコードをコンパイル
するためにC++コンパイラを使用することもあります．CとC++は@code{const}を
ことなる方法で扱うので，これは@code{const}の問題が生じます．例えば，以下
のようにします．

@example
const int foo;
@end example

@noindent
@c is valid in C but not in C++.  These differences unfortunately cannot be
@c papered over by defining @code{const} to be empty.
@c 
Cでは有効ですがC++ではそうではありません．残念ながら，これらの違いを
@code{const}を空で定義することで誤魔化すことは不可能です．

@c If @code{autoconf} detects this situation, it leaves @code{const} alone,
@c as this generally yields better results in practice.  However, using a
@c C++ compiler to compile C code is not recommended or supported, and
@c installers who run into trouble in this area should get a C compiler
@c like GCC to compile their C code.
@c 
@code{autoconf}がこの状況を検出した場合，一般的に実際問題としてより良い
結果になるので，それは@code{const}のままにしておきます．しかし，Cコード
コンパイルするためにC++コンパイラを使用することは推奨されていませんし，
さっポートもしていません．そして，この状況で問題となっているインストール
している人は，CコードをコンパイルするためにGCCのようなCコンパイラを入手
すべきです．
@end defmac

@defmac AC_C_VOLATILE
@maindex C_VOLATILE
@cvindex volatile
@c If the C compiler does not understand the keyword @code{volatile},
@c define @code{volatile} to be empty.  Programs can simply use
@c @code{volatile} as if every C compiler supported it; for those that do
@c not, the @file{Makefile} or configuration header will define it as
@c empty.
@c 
Cコンパイラがキーワード@code{volatile}を理解しない場合，@code{volatile} 
を空で定義します．プログラムでは@code{volatile}をサポートしているコンパ
イラのように単純に使用することが可能です．サポートしないものに対しては，
@file{Makefile}やコンフィグレーションヘッダで，それを空として定義されま
す．

@c If the correctness of your program depends on the semantics of
@c @code{volatile}, simply defining it to be empty does, in a sense, break
@c your code.  However, given that the compiler does not support
@c @code{volatile}, you are at its mercy anyway.  At least your
@c program will compile, when it wouldn't before.
@c 
プログラムの正当性が@code{volatile}の意味に依存している場合，単純に空で
定義するとある意味ではコードが壊れます．しかし，@code{volatile}をサポー
トしていないコンパイラでは，自分で何とかしてください．少なくともプログラ
ムはコンパイルされますが，多分駄目でしょう．

@c In general, the @code{volatile} keyword is a feature of @sc{ansi} C, so
@c you might expect that @code{volatile} is available only when
@c @code{__STDC__} is defined.  However, Ultrix 4.3's native compiler does
@c support volatile, but does not defined @code{__STDC__}.
@c 
一般的に，@code{volatile}キーワードは@sc{ansi} Cの機能なので，
@code{__STDC__}が定義されている時のみ，@code{volatile}が利用可能だと期待
するかもしれません．しかし，Ultrix 4.3のネイティブコンパイラは
@code{volatile}をサポートとしていますが，@code{__STDC__}を定義しません．
@end defmac

@defmac AC_C_INLINE
@maindex C_INLINE
@cvindex inline
@c If the C compiler supports the keyword @code{inline}, do nothing.
@c Otherwise define @code{inline} to @code{__inline__} or @code{__inline}
@c if it accepts one of those, otherwise define @code{inline} to be empty.
@c 
Cコンパイラがキーワード@code{inline}をサポートする場合，何もしません．そ
れ以外では，受け入れられるものによって，@code{inline}を@code{__inline__} 
や@code{__inline}に定義し，それ以外では@code{inline}を空で定義します．
@end defmac

@defmac AC_C_CHAR_UNSIGNED
@maindex C_CHAR_UNSIGNED
@cvindex __CHAR_UNSIGNED__
@c If the C type @code{char} is unsigned, define @code{__CHAR_UNSIGNED__},
@c unless the C compiler predefines it.
@c 
Cの型@code{char}がunsignedの場合，Cコンパイラが前もって定義していない限
り，@code{__CHAR_UNSIGNED__}を定義します．
@end defmac

@defmac AC_C_LONG_DOUBLE
@maindex C_LONG_DOUBLE
@cvindex HAVE_LONG_DOUBLE
@c If the C compiler supports the @code{long double} type, define
@c @code{HAVE_LONG_DOUBLE}.  Some C compilers that do not define
@c @code{__STDC__} do support the @code{long double} type; some compilers
@c that define @code{__STDC__} do not support @code{long double}.
@c 
Cコンパイラが@code{long double}の型をサポートする場合，
@code{HAVE_LONG_DOUBLE}を定義します．@code{__STDC__}を定義しないCコンパ
イラで，@code{long double}の型をサポートするものもあります．
@code{__STDC__}を定義するCコンパイラで，@code{long double}をサポートしな
いものもあります．
@end defmac

@defmac AC_C_STRINGIZE
@maindex C_STRINGIZE
@cvindex HAVE_STRINGIZE
@c If the C preprocessor supports the stringizing operator, define
@c @code{HAVE_STRINGIZE}.  The stringizing operator is @samp{#} and is
@c found in macros such as this:
@c 
Cプリプロセッサがstringizingオペレーターをサポートする場合，
@code{HAVE_STRINGIZE}を定義します．stringizingオペレーターは@samp{#}と，
以下のようなマクロで見つかります．

@example
#define x(y) #y
@end example
@end defmac

@defmac AC_C_PROTOTYPES
@maindex C_PROTOTYPES
@cvindex PROTOTYPES
@cvindex PARAMS
@c Check to see if function prototypes are understood by the compiler.  If
@c so, define @samp{PROTOTYPES}.  In the case the compiler does not handle
@c prototypes, you should use @code{ansi2knr}, which comes with the
@c Automake distribution, to unprotoize function definitions.  For
@c function prototypes, you should first define @code{PARAMS}:
@c 
関数のプロトタイプをコンパイラが理解するかどうかを知るために調査します．
その場合は@samp{PROTOTYPES}を定義します．コンパイラがプロトタイプを処理
しない場合，関数定義のプロトタイプを止めるために，Automake配布物でインス
トールされる@code{ansi2knr}を使用すべきです．関数のプロトタイプに対して，
最初に@code{PARAMS}を定義すべきです．

@example
#ifndef PARAMS
# if PROTOTYPES
#  define PARAMS(protos) protos
# else /* no PROTOTYPES */
#  define PARAMS(protos) ()
# endif /* no PROTOTYPES */
#endif
@end example

@noindent
@c then use it this way:
@c 
そして，以下のように使用してください．

@example
size_t my_strlen PARAMS ((const char *));
@end example
@end defmac

@defmac AC_PROG_GCC_TRADITIONAL
@maindex PROG_GCC_TRADITIONAL
@ovindex CC
@c Add @option{-traditional} to output variable @code{CC} if using the
@c @sc{gnu} C compiler and @code{ioctl} does not work properly without
@c @option{-traditional}.  That usually happens when the fixed header files
@c have not been installed on an old system.  Since recent versions of the
@c @sc{gnu} C compiler fix the header files automatically when installed,
@c this is becoming a less prevalent problem.
@c 
使用している@sc{gnu} Cコンパイラと@code{ioctl}が，@samp{-traditional}無
しでは正確に動作しない場合，出力変数@code{CC}に@samp{-traditional}を加え
ます．それは，通常，修正されたヘッダファイルが古いシステムにインストール
されていないときに発生します．@sc{gnu} Cコンパイラの最近のバージョンは，
インストール時に，自動的にヘッダーファイルを修正するので，これはほとんど
問題になりません．
@end defmac


@node C++ Compiler, Fortran 77 Compiler, C Compiler, Compilers and Preprocessors
@subsection C++の特徴

@defmac AC_PROG_CXX (@r{[}@var{compiler-search-list}@r{]})
@maindex PROG_CXX
@ovindex CXX
@ovindex CXXFLAGS
@c Determine a C++ compiler to use.  Check if the environment variable
@c @code{CXX} or @code{CCC} (in that order) is set; if so, then set output
@c variable @code{CXX} to its value.
@c 
使用するC++コンパイラを定義します．環境変数@code{CXX}や@code{CCC}が設定
されているかどうか(この順番で)調査します．その場合，出力変数をその値に設
定します．

@c Otherwise, if the macro is invoked without an argument, then search for
@c a C++ compiler under the likely names (first @code{g++} and @code{c++}
@c then other names).  If none of those checks succeed, then as a last
@c resort set @code{CXX} to @code{g++}.
@c 
それ以外でマクロが引数無しで呼び出されている場合，以下のような名前のC++ 
コンパイラを探します(最初が@code{g++}と@code{c++}その後でそれ以外の名前
です．@footnote{訳注：それ以外の名前は，@code{gcc}， @code{CC}，
@code{cxx}，そして@code{cc++}だと思います．}．これらの調査がすべて失敗し
た場合，最後の手段で@code{CXX}を@code{g++}に設定します．

@c This macro may, however, be invoked with an optional first argument
@c which, if specified, must be a space separated list of C++ compilers to
@c search for.  This just gives the user an opportunity to specify an
@c alternative search list for the C++ compiler.  For example, if you
@c didn't like the default order, then you could invoke @code{AC_PROG_CXX}
@c like this:
@c 
しかし，このマクロはオプション引数を用いて呼び出すことが可能で，指定する
場合は，検索するC++コンパイラをスペースで区切ったリストにする必要があり
ます．これで，ユーザがC++コンパイラに対する代わりの検索リストを指定する
機会が与えられます．例えば，デフォルトの順序がいやな場合は，以下のように
して@code{AC_PROG_CXX}を呼び出すことが可能です．

@example
AC_PROG_CXX(cl KCC CC cxx cc++ xlC aCC c++ g++ egcs gcc)
@end example

@c If using the @sc{gnu} C++ compiler, set shell variable @code{GXX} to
@c @samp{yes}.  If output variable @code{CXXFLAGS} was not already set, set
@c it to @option{-g -O2} for the @sc{gnu} C++ compiler (@option{-O2} on
@c systems where G++ does not accept @option{-g}), or @option{-g} for other
@c compilers.
@c 
@sc{gnu} C++コンパイラを使用している場合，シェル変数@code{GXX}を
@samp{yes}に設定します．出力変数@code{CXXFLAGS}がまだ設定されていない場
合，@sc{gnu}C++コンパイラに対しては@option{-g -O2}(@samp{-g}を受け入れな
いG++のシステムでは@samp{-O2})を設定し，他のコンパイラでは@samp{-g}を設
定します．
@end defmac

@defmac AC_PROG_CXXCPP
@maindex PROG_CXXCPP
@ovindex CXXCPP
@c Set output variable @code{CXXCPP} to a command that runs the C++
@c preprocessor.  If @samp{$CXX -E} doesn't work, @file{/lib/cpp} is used.
@c It is only portable to run @code{CXXCPP} on files with a @file{.c},
@c @file{.C}, or @file{.cc} extension.
@c 
出力変数@code{CXXCPP}を，C++プリプロセッサを実行するコマンドに設定します．
@samp{$CXX -E}が動作しない場合，@file{/lib/cpp}を使用します．@file{.c}，
@file{.C}，または@file{.cc}の拡張子を持つファイルで@code{CXXCPP}を実行す
るのは移植性のためだけです．

@c If the current language is C++ (@pxref{Language Choice}), many of the
@c specific test macros use the value of @code{CXXCPP} indirectly by
@c calling @code{AC_TRY_CPP}, @code{AC_CHECK_HEADER},
@c @code{AC_EGREP_HEADER}, or @code{AC_EGREP_CPP}.
@c 
現在の言語がC++の場合(@pxref{Language Choice})，特定のテストマクロの多く
は，@code{AC_TRY_CPP}，@code{AC_CHECK_HEADER}，@code{AC_EGREP_HEADER}，
または@code{AC_EGREP_CPP}の呼び出しで，間接的に@code{CXXCPP}の値を使用し
ます．

@c Some preprocessors don't indicate missing include files by the error
@c status.  For such preprocessors an internal variable is set that causes
@c other macros to check the standard error from the preprocessor and
@c consider the test failed if any warnings have been reported.  However,
@c it is not known whether such broken preprocessors exist for C++.
@c 
プリプロセッサによっては，足りないインクルードファイルをエラーステータス
で示さないものもあります．そのようなプリプロセッサに対して，内部変数は，
プリプロセッサからの標準エラー出力を調査し，する他のマクロに設定され，警
告が報告されない場合はテストに失敗したと考えます．しかし，C++に対してそ
のような壊れ方をしているプリプロセッサがあるかどうかは知りません．
@end defmac


@node Fortran 77 Compiler,  , C++ Compiler, Compilers and Preprocessors
@subsection Fortran 77の特徴

@defmac AC_PROG_F77 (@r{[}@var{compiler-search-list}@r{]})
@maindex PROG_FORTRAN
@ovindex F77
@ovindex FFLAGS
@c Determine a Fortran 77 compiler to use.  If @code{F77} is not already
@c set in the environment, then check for @code{g77} and @code{f77}, and
@c then some other names.  Set the output variable @code{F77} to the name
@c of the compiler found.
@c 
使用するFortran 77コンパイラを決定します．@code{F77}が環境変数でまだ設定
されていない場合，@code{g77}，@code{f77}，そしてその他の名前を調査します．
見つかったコンパイラ名を，出力変数@code{F77}に設定します．

@c This macro may, however, be invoked with an optional first argument
@c which, if specified, must be a space separated list of Fortran 77
@c compilers to search for.  This just gives the user an opportunity to
@c specify an alternative search list for the Fortran 77 compiler.  For
@c example, if you didn't like the default order, then you could invoke
@c @code{AC_PROG_F77} like this:
@c 
しかし，このマクロはオプション引数を用いて呼び出すことが可能で，指定する
場合は，検索するFortran 77コンパイラをスペースで区切ったリストにする必要
があります．これで，ユーザがFortran 77コンパイラに対する代わりの検索リス
トを指定する機会が与えられます．例えば，デフォルトの順序がいやな場合は，
以下のようにして@code{AC_PROG_F77}を呼び出すことが可能です．

@example
AC_PROG_F77(fl32 f77 fort77 xlf cf77 g77 f90 xlf90)
@end example

@c If using @code{g77} (the @sc{gnu} Fortran 77 compiler), then
@c @code{AC_PROG_F77} will set the shell variable @code{G77} to @samp{yes}.
@c If the output variable @code{FFLAGS} was not already set in the
@c environment, then set it to @option{-g -02} for @code{g77} (or @option{-O2}
@c where @code{g77} does not accept @option{-g}).  Otherwise, set
@c @code{FFLAGS} to @option{-g} for all other Fortran 77 compilers.
@c 
@code{g77}(@sc{gnu} Fortran 77コンパイラ)を使用している場合，
@code{AC_PROG_F77}はシェル変数@code{G77}を@samp{yes}に設定します．出力変
数@code{FFLAGS}が環境変数で設定されていない場合，@code{g77}に対して
@samp{-g -O2}(@samp{-g}を受け入れない@code{g77} では@samp{-O2})を設定し，
他のFortran 77コンパイラでは@samp{-g}を設定します．
@end defmac

@defmac AC_PROG_F77_C_O
@maindex PROG_F77_C_O
@cvindex F77_NO_MINUS_C_MINUS_O
@c Test if the Fortran 77 compiler accepts the options @option{-c} and
@c @option{-o} simultaneously, and define @code{F77_NO_MINUS_C_MINUS_O} if it
@c does not.
@c 
Fortran 77コンパイラが，オプション@samp{-c}と@samp{-o}を同時にを受け入れ
るかどうかテストし，そうでない場合は@code{F77_NO_MINUS_C_MINUS_O}を定義
します．
@end defmac

@c The following macros check for Fortran 77 compiler characteristics.  To
@c check for characteristics not listed here, use @code{AC_TRY_COMPILE}
@c (@pxref{Examining Syntax}) or @code{AC_TRY_RUN} (@pxref{Run Time}),
@c making sure to first set the current language to Fortran 77
@c @code{AC_LANG(Fortran 77)} (@pxref{Language Choice}).
@c 
以下のマクロは，Fortran 77コンパイラの特徴を調査します．ここでリストアッ
プされていない特徴を調査するために，現在の言語がFortran
77@code{AC_LANG_FORTRAN77}(@pxref{Language Choice}) に設定されていること
を最初に確認し，@code{AC_TRY_COMPILE}(@pxref{Examining Syntax})や
@code{AC_TRY_RUN}(@pxref{Run Time})を使用してください．

@defmac AC_F77_LIBRARY_LDFLAGS
@maindex F77_LIBRARY_LDFLAGS
@ovindex FLIBS
@c Determine the linker flags (e.g. @option{-L} and @option{-l}) for the
@c @dfn{Fortran 77 intrinsic and run-time libraries} that are required to
@c successfully link a Fortran 77 program or shared library.  The output
@c variable @code{FLIBS} is set to these flags.
@c 
Fortran 77プログラムや共有ライブラリをうまくリンクするために必要な
@dfn{Fortran 77イントリンシックとランタイムライブラリ}に対して，リンカフ
ラグ(例えば@samp{-L}と@samp{-l})を決定します．出力変数 @code{FLIBS}には，
これらのフラグが設定されます．

@c This macro is intended to be used in those situations when it is
@c necessary to mix, e.g. C++ and Fortran 77 source code into a single
@c program or shared library (@pxref{Mixing Fortran 77 With C and C++,,,
@c automake, GNU Automake}).
@c 
このマクロは，単一のプログラムや共有ライブラリに，例えば，C++とFortran
77のソースコードを混在させる必要があるとき利用されます(@pxref{Mixing
Fortran 77 With C and C++, , , automake, GNU Automake})．

@c For example, if object files from a C++ and Fortran 77 compiler must be
@c linked together, then the C++ compiler/linker must be used for linking
@c (since special C++-ish things need to happen at link time like calling
@c global constructors, instantiating templates, enabling exception
@c support, etc.).
@c 
例えば，C++とFortran 77コンパイラで生成されるオブジェクトファイルを，お
互いにリンクする必要があるとき，リンクにはC++コンパイラ/リンカが使用され
るはずです(C++特有のものは，リンク時にグローバルコンストラクタ，インスタ
ンステンプレート，例外処理等を呼び出す必要が生じるためです)．

@c However, the Fortran 77 intrinsic and run-time libraries must be linked
@c in as well, but the C++ compiler/linker doesn't know by default how to
@c add these Fortran 77 libraries.  Hence, the macro
@c @code{AC_F77_LIBRARY_LDFLAGS} was created to determine these Fortran 77
@c libraries.
@c 
しかし，Fortran 77イントリンシックとランタイムライブラリもリンクする必要
がありますが，C++コンパイラ/リンカは，Fortran 77ライブラリを追加する方法
をデフォルトでは知っていません．そのため，マクロ 
@code{AC_F77_LIBRARY_LDFLAGS}は，これらのFortran 77ライブラリを決定する
ために作成されました．

@c The macro @code{AC_F77_DUMMY_MAIN} or @code{AC_F77_MAIN} will probably
@c also be necessary to link C/C++ with Fortran; see below.
@c 
このマクロ@code{AC_F77_DUMMY_MAIN}や@code{AC_F77_MAIN}は，FortranでC/C++ 
にリンクする必要がある時もおそらく必要です．以下を参照してください．
@end defmac

@defmac AC_F77_DUMMY_MAIN (@r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex F77_DUMMY_MAIN
@cvindex F77_DUMMY_MAIN
@c With many compilers, the Fortran libraries detected by
@c @code{AC_F77_LIBRARY_LDFLAGS} provide their own @code{main} entry
@c function that initializes things like Fortran I/O, and which then calls
@c a user-provided entry function named e.g. @code{MAIN__} to run the
@c user's program.  The @code{AC_F77_DUMMY_MAIN} or @code{AC_F77_MAIN}
@c macro figures out how to deal with this interaction.
@c 
多くのコンパイラでは，@code{AC_F77_LIBRARY_LDFLAGS}で見つかるFortranライ
ブラリは，Fortran I/Oのようなものを初期化したり，ユーザプログラムを実行
するために，例えば@code{MAIN__}のような名前を持つユーザ提供のエントリー
関数を呼び出す，独自の@code{main}エントリー関数を提供しています．
@code{AC_F77_DUMMY_MAIN}や@code{AC_F77_MAIN}マクロは，この相互作用を扱う
方法を理解します．

@c When using Fortran for purely numerical functions (no I/O, etcetera),
@c users often prefer to provide their own @code{main} and skip the Fortran
@c library initializations.  In this case, however, one may still need to
@c provide a dummy @code{MAIN__} routine in order to prevent linking errors
@c on some systems.  @code{AC_F77_DUMMY_MAIN} detects whether any such
@c routine is @emph{required} for linking, and what its name is; the shell
@c variable @code{F77_DUMMY_MAIN} holds this name, @code{unknown} when no
@c solution was found, and @code{none} when no such dummy main is needed.
@c 
(I/Oなどではない)純粋な数値関数に対してFortranを使用している時，ユーザは
独自の@code{main}を提供し，Fortranライブラリの初期化を停止したいこともよ
くあります．しかしこの場合は，いくつかのシステムでのリンクエラーを避ける
ため，ダミーの@code{MAIN__}ルーチンを提供する必要があるかもしれません．
シェル変数@code{F77_DUMMY_MAIN}は，解決方法が見つからない時は
@code{unknown}，そのようなダミーの@code{main}が不要な時は@code{none}とい
う値を保持します．

@c By default, @var{action-if-found} defines @code{F77_DUMMY_MAIN} to the
@c name of this routine (e.g. @code{MAIN__}) @emph{if} it is required.
@c @ovar{action-if-not-found} defaults to exiting with an error.
@c 
デフォルトで，必要な@emph{場合}は，@var{action-if-found}は
@code{F77_DUMMY_MAIN}をこのルーチン名(例えば@code{MAIN__})に定義します．
@r{[}@var{action-if-not-found}@r{]}はデフォルトでエラーで終了しま
す．

@c In order to link with Fortran routines, the user's C/C++ program should
@c then include the following code to define the dummy main if it is
@c needed:
@c 
Fortranとリンクするために，必要な場合はダミーの@code{main}を定義するため
に，userのC/C++プログラムで以下のようなコードをインクルードすべきです．

@example
#ifdef F77_DUMMY_MAIN
#  ifdef __cplusplus
     extern "C"
#  endif
   int F77_DUMMY_MAIN() @{ return 1; @}
#endif
@end example

@c Note that @code{AC_F77_DUMMY_MAIN} is called automatically from
@c @code{AC_F77_WRAPPERS}; there is generally no need to call it explicitly
@c unless one wants to change the default actions.
@c 
@code{AC_F77_DUMMY_MAIN}は@code{AC_F77_WRAPPERS}から自動的に呼び出される
ことに注意してください．一般的にデフォルトの動作を変更したくない限り，明
示的にに呼び出す必要はありません．
@end defmac

@defmac AC_F77_MAIN
@maindex F77_MAIN
@cvindex F77_MAIN
@c As discussed above for @code{AC_F77_DUMMY_MAIN}, many Fortran libraries
@c allow you to provide an entry point called e.g. @code{MAIN__} instead of
@c the usual @code{main}, which is then called by a @code{main} function in
@c the Fortran libraries that initializes things like Fortran I/O.  The
@c @code{AC_F77_MAIN} macro detects whether it is @emph{possible} to
@c utilize such an alternate main function, and defines @code{F77_MAIN} to
@c the name of the function.  (If no alternate main function name is found,
@c @code{F77_MAIN} is simply defined to @code{main}.)
@c 
上記の@code{AC_F77_DUMMY_MAIN}で議論したように，Fortranライブラリには，
通常の@code{main}の代わりに，例えば@code{MAIN__}と言ったエントリーポイン
トを提供することが可能なものも多く，それは，Fortran I/Oのようなものを初
期化するために，Fortranライブラリの@code{main}関数で呼び出されます．
@code{AC_F77_MAIN}は，そのような代理の@code{main}関数の利用が@emph{可能
か}どうかを検出し，@code{F77_MAIN}を関数の名前に定義します．(代理の
@code{main}関数の名前が見つからない場合，@code{F77_MAIN}は単純に
@code{main}に定義します．)

@c Thus, when calling Fortran routines from C that perform things like I/O,
@c one should use this macro and name the "main" function @code{F77_MAIN}
@c instead of @code{main}.
@c 
このため，Fortranルーチンが，I/Oのようなものを実行するためにCから呼び出
されるとき，このマクロを使用し，"main"関数を@code{main}ではなく
@code{F77_MAIN}の名前にすべきです．
@end defmac

@defmac AC_F77_WRAPPERS
@maindex F77_WRAPPERS
@cvindex F77_FUNC
@cvindex F77_FUNC_
@c Defines C macros @code{F77_FUNC(name,NAME)} and
@c @code{F77_FUNC_(name,NAME)} to properly mangle the names of C/C++
@c identifiers, and identifiers with underscores, respectively, so that
@c they match the name-mangling scheme used by the Fortran 77 compiler.
@c 
名前がmangleされる方法をFortran 77コンパイラで使用されているものに一致す
るため，mangleされているC/C++の識別子とアンダースコアが付いた識別子の名
前を正しくするために，Cマクロの@code{F77_FUNC(name,NAME)}と
@code{F77_FUNC_(name,NAME)}をそれぞれ定義します

@c Fortran 77 is case-insensitive, and in order to achieve this the Fortran
@c 77 compiler converts all identifiers into a canonical case and format.
@c To call a Fortran 77 subroutine from C or to write a C function that is
@c callable from Fortran 77, the C program must explicitly use identifiers
@c in the format expected by the Fortran 77 compiler.  In order to do this,
@c one simply wraps all C identifiers in one of the macros provided by
@c @code{AC_F77_WRAPPERS}.  For example, suppose you have the following
@c Fortran 77 subroutine:
@c 
Fortran 77は大文字小文字の区別が無く，こうするために，Fortran 77コンパイ
ラは全ての識別子を標準的な文字と書式に変換します．CからFortran 77のサブ
ルーチンを呼び出したり，Fortran 77から呼び出し可能なC関数を書いたりする
ために，CプログラムではFortran 77コンパイラが期待する書式で，識別子を明
示的に使用する必要があります．こうするために，全てのC識別子を
@code{AC_F77_WRAPPERS}で提供されるマクロの一つで，単純にラッパー関数にし
ます．例えば，以下のようなFortran 77のサブルーチンがあるとします．

@example
      subroutine foobar(x,y)
      double precision x, y
      y = 3.14159 * x
      return
      end
@end example

@c You would then declare its prototype in C or C++ as:
@c 
CやC++のプロトタイプで，以下のように宣言します．

@example
#define FOOBAR_F77 F77_FUNC(foobar,FOOBAR)
#ifdef __cplusplus
extern "C"  /* prevent C++ name mangling */
#endif
void FOOBAR_F77(double *x, double *y);
@end example

@c Note that we pass both the lowercase and uppercase versions of the
@c function name to @code{F77_FUNC} so that it can select the right one.
@c Note also that all parameters to Fortran 77 routines are passed as
@c pointers (@pxref{Mixing Fortran 77 With C and C++,,, automake, GNU
@c Automake}).
@c 
正しいものが選択できるように，関数名の大文字と小文字の両方のバージョンを
@code{F77_FUNC}に渡していることに注意してください．また，Fortran 77のルー
チンへの全てのパラメータを，ポインタとして渡していることにも注意してくだ
さい(@pxref{Mixing Fortran 77 With C and C++,,, automake, GNU Automake})．

@c Although Autoconf tries to be intelligent about detecting the
@c name-mangling scheme of the Fortran 77 compiler, there may be Fortran 77
@c compilers that it doesn't support yet.  In this case, the above code
@c will generate a compile-time error, but some other behavior
@c (e.g. disabling Fortran-related features) can be induced by checking
@c whether the @code{F77_FUNC} macro is defined.
@c 
AutoconfはFortran 77が名前をmangleする手法を検出するために知的な手法で試
みていますが，Fortran 77コンパイラはそれをまだサポートしていないかもしれ
ません．この場合，上記のコードはコンパイル時にエラーとなりますが，それ以
外の動作(例えば，Fortranに関連する機能の停止)は，@code{F77_FUNC}マクロが
定義されているかどうかを調査することで引き起こされます．

@c Now, to call that routine from a C program, we would do something like:
@c 
さて，そのようなルーチンをCプログラムから呼び出すために，以下のようにし
てみます．

@example
@{
    double x = 2.7183, y;
    FOOBAR_F77(&x, &y);
@}
@end example

@c If the Fortran 77 identifier contains an underscore
@c (e.g. @code{foo_bar}), you should use @code{F77_FUNC_} instead of
@c @code{F77_FUNC} (with the same arguments).  This is because some Fortran
@c 77 compilers mangle names differently if they contain an underscore.
@c 
Fortran 77の識別子がアンダースコアを含んでいる(例えば@code{foo_bar}の)場
合，@code{F77_FUNC}の代わりに@code{F77_FUNC_}を(同じ引数で)使用すべきで
す．これは，アンダースコアを含んでいる場合，Fortran 77コンパイラによって
は異なる名前にmangleするものもあるからです．
@end defmac

@defmac AC_F77_FUNC (@var{name}, @r{[}@var{shellvar}@r{]})
@maindex F77_FUNC
@c Given an identifier @var{name}, set the shell variable @var{shellvar} to
@c hold the mangled version @var{name} according to the rules of the
@c Fortran 77 linker (see also @code{AC_F77_WRAPPERS}).  @var{shellvar} is
@c optional; if it is not supplied, the shell variable will be simply
@c @var{name}.  The purpose of this macro is to give the caller a way to
@c access the name-mangling information other than through the C
@c preprocessor as above; for example, to call Fortran routines from some
@c language other than C/C++.
@c 
識別子@var{name}が与えられている場合，シェル変数@var{shellvar}をFortran
77リンカの規則(@code{AC_F77_WRAPPERS}も参照してください)によって，mangle 
されるバージョンの@var{name}を保持するように設定します．@var{shellvar}は
オプションです．提供されていない場合シェル変数は単純に@var{name}になりま
す．このマクロの目的は，上記のようにCプリプロセッサを通じてではなく，呼
び出し側に名前のmangleに関する情報にアクセスする方法を与えることです．例
えば，C/C++以外の言語からFortranルーチンを呼び出すためです．
@end defmac


@node System Services, UNIX Variants, Compilers and Preprocessors, Existing Tests
@section システムサービス

@c The following macros check for operating system services or
@c capabilities.
@c 
以下のマクロはオペレーティングシステムのサービスや機能を調査します．

@defmac AC_PATH_X
@maindex PATH_X
@c Try to locate the X Window System include files and libraries.  If the
@c user gave the command line options @option{--x-includes=@var{dir}} and
@c @option{--x-libraries=@var{dir}}, use those directories.  If either or
@c both were not given, get the missing values by running @code{xmkmf} on a
@c trivial @file{Imakefile} and examining the @file{Makefile} that it
@c produces.  If that fails (such as if @code{xmkmf} is not present), look
@c for them in several directories where they often reside.  If either
@c method is successful, set the shell variables @code{x_includes} and
@c @code{x_libraries} to their locations, unless they are in directories
@c the compiler searches by default.
@c 
X Window Systemのインクルードファイルとライブラリの場所を調査します．ユー
ザがコマンドラインオプションで，@samp{--x-includes=@var{dir}}と
@samp{--x-libraries=@var{dir}}を与えたている場合，そのディレクトリを使用
します．どちらか一つまたは両方とも与えられない場合，@code{xmkmf}を平凡な
@file{Imakefile}で実行し，生成された@file{Makefile}を調査し，足りない値
を取得します．(@code{xmkmf}が存在しない等のように)失敗した場合，配置され
ることが多いディレクトリ等で検索します．いずれかの手法で成功した場合，コ
ンパイラがデフォルトで検索するディレクトリに無い限り，シェル変数
@code{x_includes}と@code{x_libraries}をその場所に設定します．

@c If both methods fail, or the user gave the command line option
@c @option{--without-x}, set the shell variable @code{no_x} to @samp{yes};
@c otherwise set it to the empty string.
@c 
両方の方法が失敗する，またはユーザがコマンドラインオプションの
@samp{--without-x}を与えている場合，シェル変数の@code{no_x}を@samp{yes} 
に設定し，それ以外では空の文字列に設定します．
@end defmac

@defmac AC_PATH_XTRA
@maindex PATH_XTRA
@ovindex X_CFLAGS
@ovindex X_LIBS
@ovindex X_EXTRA_LIBS
@ovindex X_PRE_LIBS
@cvindex X_DISPLAY_MISSING
@c An enhanced version of @code{AC_PATH_X}.  It adds the C compiler flags
@c that X needs to output variable @code{X_CFLAGS}, and the X linker flags
@c to @code{X_LIBS}.  Define @code{X_DISPLAY_MISSING} if X is not
@c available.
@c 
@code{AC_PATH_X}の拡張バージョンです．Xが必要とするCコンパイラフラグを出
力変数@code{X_CFLAGS}に，Xリンカフラグを@code{X_LIBS}に追加します．Xが利
用可能でない場合，@code{X_DISPLAY_MISSING}を定義します．

@c This macro also checks for special libraries that some systems need in
@c order to compile X programs.  It adds any that the system needs to
@c output variable @code{X_EXTRA_LIBS}.  And it checks for special X11R6
@c libraries that need to be linked with before @option{-lX11}, and adds
@c any found to the output variable @code{X_PRE_LIBS}.
@c 
また，このマクロは，Xプログラムをコンパイルするためにシステムが必要とす
る特別なライブラリも調査します．それは，システムが必要とするあらゆるもの
を出力変数@code{X_EXTRA_LIBS}に追加します．そして，@samp{-lX11}の前にリ
ンクする必要がある特別なX11R6ライブラリを調査し，見つかったものは全て出
力変数@code{X_PRE_LIBS}に追加します．

@c This is an incomplete kludge.  Make a real way to do it.
@c If you need to check for other X functions or libraries yourself, then
@c after calling this macro, add the contents of @code{X_EXTRA_LIBS} to
@c @code{LIBS} temporarily, like this: (FIXME - add example)
@end defmac

@defmac AC_SYS_INTERPRETER
@maindex SYS_INTERPRETER
@c Check whether the system supports starting scripts with a line of the
@c form @samp{#! /bin/csh} to select the interpreter to use for the script.
@c After running this macro, shell code in @code{configure.ac} can check
@c the shell variable @code{interpval}; it will be set to @samp{yes}
@c if the system supports @samp{#!}, @samp{no} if not.
@c 
スクリプトを使用するためのインタプリタを選択するため，@samp{#! /bin/csh} 
の形式の行を用いたスクリプトをサポートするかどうかを調査します．このマク
ロを実行した後で，@code{configure.ac}のシェルコードは，シェル変数の 
@code{interpval}を調査することが可能になります．システムで@samp{#!}をサ
ポートされている場合は@samp{yes}，そうでなければ@samp{no}を設定します．
@end defmac

@defmac AC_SYS_LARGEFILE
@maindex SYS_LARGEFILE
@cvindex _FILE_OFFSET_BITS
@cvindex _LARGE_FILES
@ovindex CC
@c Arrange for
@c @href{http://www.sas.com/standards/large.file/x_open.20Mar96.html,
@c large-file support}.  On some hosts, one must use special compiler
@c options to build programs that can access large files.  Append any such
@c options to the output variable @code{CC}.  Define
@c @code{_FILE_OFFSET_BITS} and @code{_LARGE_FILES} if necessary.
@c 
large-file support@footnote{large-file
support,@url{http://www.sas.com/standards/large.file/x_open.20Mar96.html}}
のためにアレンジします．ホストによっては，大きなファイルにアクセスできる
プログラムをビルドするため，特別なコンパイラオプションが必要になります．
そのようなオプションを出力変数@code{CC}に，全て追加します．必要な場合は，
@code{_FILE_OFFSET_BITS}と@code{_LARGE_FILES}を定義します．

@c Large-file support can be disabled by configuring with the
@c @option{--disable-largefile} option.
@c 
大きなファイルのサポートは，@option{--disable-largefile}オプションを用い
てコンフィグレーションすることで利用不可能にすることが可能です．

@c If you use this macro, check that your program works even when
@c @code{off_t} is longer than @code{long}, since this is common when
@c large-file support is enabled.  For example, it is not correct to print
@c an arbitrary @code{off_t} value @code{X} with @code{printf ("%ld",
@c (long) X)}.
@c 
このマクロを使用する場合，大きなファイルのサポートが利用可能なときは，
@code{off_t}が@code{long}より長いときが一般的なので，それでもプログラム
が動作するかどうかを調査してください．例えば，@code{printf ("%ld",
(long) X)}で任意の@code{off_t}の値@code{X}を出力しても正しくなくなります．
@end defmac

@defmac AC_SYS_LONG_FILE_NAMES
@maindex SYS_LONG_FILE_NAMES
@cvindex HAVE_LONG_FILE_NAMES
@c If the system supports file names longer than 14 characters, define
@c @code{HAVE_LONG_FILE_NAMES}.
@c 
システムが14文字より長いファイル名をサポートする場合，
@code{HAVE_LONG_FILE_NAMES}を定義します．
@end defmac

@defmac AC_SYS_POSIX_TERMIOS
@maindex SYS_POSIX_TERMIOS
@cindex POSIX termios headers
@cindex termios POSIX headers
@c Check to see if POSIX termios headers and functions are available on the
@c system.  If so, set the shell variable @code{am_cv_sys_posix_termios} to
@c @samp{yes}.  If not, set the variable to @samp{no}.
@c 
POSIX termiosヘッダと関数がシステムで利用可能かどうかを調査します．その
場合は，シェル変数@code{am_cv_sys_posix_termios}を@samp{yes}に設定します．
それ以外ではその変数を@samp{no}に設定します．
@end defmac


@node UNIX Variants,  , System Services, Existing Tests
@section 様々なUNIX

@c The following macros check for certain operating systems that need
@c special treatment for some programs, due to exceptional oddities in
@c their header files or libraries.  These macros are warts; they will be
@c replaced by a more systematic approach, based on the functions they make
@c available or the environments they provide.
@c 
以下のマクロは，ヘッダファイルやライブラリが例外的に特異なため，プログラ
ムに対して特別な処理が必要なオペレーティングシステムを調査します．これら
のマクロは不要なものです．利用可能にする関数や，供給する環境に基づき，よ
り規則正しい手法で置換されるでしょう．

@defmac AC_AIX
@maindex AIX
@cvindex _ALL_SOURCE
@c If on AIX, define @code{_ALL_SOURCE}.  Allows the use of some @sc{bsd}
@c functions.  Should be called before any macros that run the C compiler.
@c 
AIXの場合，@code{_ALL_SOURCE}を定義します．いくつかの@sc{bsd}関数の使用
を許可します．Cコンパイラを実行するあらゆるマクロの前に呼び出すべきです．
@end defmac

@defmac AC_ISC_POSIX
@maindex ISC_POSIX
@cvindex _POSIX_SOURCE
@ovindex CC
@c If on a POSIXized ISC @sc{unix}, define @code{_POSIX_SOURCE} and add
@c @option{-posix} (for the @sc{gnu} C compiler) or @option{-Xp} (for other C
@c compilers) to output variable @code{CC}.  This allows the use of
@c @sc{posix} facilities.  Must be called after @code{AC_PROG_CC} and
@c before any other macros that run the C compiler.
@c 
POSIX準拠のISC @sc{unix}の場合，@code{_POSIX_SOURCE}を定義し，出力変数 
@code{CC}に，@samp{-posix}(@sc{gnu} Cコンパイラのため)や，@samp{-Xp}(他
のCコンパイラのため)を加えます．これでPOSIXの機能が使用可能になります．
@code{AC_PROG_CC}の後で，そして，Cコンパイラを実行する他のあらゆるマクロ
の前で呼び出す必要があります．
@end defmac

@defmac AC_MINIX
@maindex MINIX
@cvindex _MINIX
@cvindex _POSIX_SOURCE
@cvindex _POSIX_1_SOURCE
@c If on Minix, define @code{_MINIX} and @code{_POSIX_SOURCE} and define
@c @code{_POSIX_1_SOURCE} to be 2.  This allows the use of @sc{posix}
@c facilities.  Should be called before any macros that run the C compiler.
@c 
Minixの場合，@code{_MINIX}と@code{_POSIX_SOURCE}を定義し， 
@code{_POSIX_1_SOURCE}を2と定義します．これでPOSIXの機能が使用可能になり
ます．Cコンパイラを実行するあらゆるマクロの前で呼び出すべきです．
@end defmac


@c ========================================================= Writing Tests

@node Writing Tests, Results, Existing Tests, Top
@chapter テストを書く

@c If the existing feature tests don't do something you need, you have to
@c write new ones.  These macros are the building blocks.  They provide
@c ways for other macros to check whether various kinds of features are
@c available and report the results.
@c 
既存の特徴テストでは必要なことができない場合，新しいものを書く必要があり
ます．これらのマクロはブロックの組み立てです．他のマクロで様々な特徴が利
用可能かどうか調査し結果を報告するための方法を提供します．

@c This chapter contains some suggestions and some of the reasons why the
@c existing tests are written the way they are.  You can also learn a lot
@c about how to write Autoconf tests by looking at the existing ones.  If
@c something goes wrong in one or more of the Autoconf tests, this
@c information can help you understand the assumptions behind them, which
@c might help you figure out how to best solve the problem.
@c 
この章には，提案と，既存のテストが書かれている方法の理由も含まれています．
また，既存のものを見ることで，Autoconfテストの書き方について知ることがで
きます．Autoconfのテストの一つ以上がうまくいかない場合，この情報は背後で
行われていることの理解を助けるので，最善の問題解決法が分かるでしょう．

@c These macros check the output of the C compiler system.  They do
@c not cache the results of their tests for future use (@pxref{Caching
@c Results}), because they don't know enough about the information they are
@c checking for to generate a cache variable name.  They also do not print
@c any messages, for the same reason.  The checks for particular kinds of C
@c features call these macros and do cache their results and print messages
@c about what they're checking for.
@c 
これらのマクロは，Cコンパイラシステムの出力を調査します．それらは，キャッ
シュ変数名を生成するために調査している情報を十分には知らないので，将来使
用するためにテスト結果をキャッシュしません(@pxref{Caching Results})．同
じ理由でメッセージも出力しません．特定のCの特徴の調査では，これらのマク
ロを呼び出し，結果をキャッシュし，そして調査していることに関するメッセー
ジを出力します．

@c When you write a feature test that could be applicable to more than one
@c software package, the best thing to do is encapsulate it in a new macro.
@c @xref{Writing Autoconf Macros}, for how to do that.
@c 
１つ以上のソフトウェアパッケージに適用可能な特徴テストを書く時，新しいマ
クロに要約することがベストです．その方法は，@xref{Writing Autoconf
Macros}.

@menu
* Examining Declarations::      Detecting header files and declarations
* Examining Syntax::            Detecting language syntax features
* Examining Libraries::         Detecting functions and global variables
* Run Time::                    Testing for run-time features
* Systemology::                 A zoology of operating systems
* Multiple Cases::              Tests for several possible values
* Language Choice::             Selecting which language to use for testing
@end menu

@node Examining Declarations, Examining Syntax, Writing Tests, Writing Tests
@section 宣言の調査

@c The macro @code{AC_TRY_CPP} is used to check whether particular header
@c files exist.  You can check for one at a time, or more than one if you
@c need several header files to all exist for some purpose.
@c 
マクロ@code{AC_TRY_CPP}は，特定のヘッダファイルが存在するかどうか調査す
るために使用します．目的があって，複数のヘッダファイルが全て必要な場合で
も，一度に，一つまたはそれ以上調査することが可能です．

@defmac AC_TRY_CPP (@var{includes}, @r{[}@var{action-if-true}r{]}, @r{[}@var{action-if-false}@r{]})
@maindex TRY_CPP
@c @var{includes} is C or C++ @code{#include} statements and declarations,
@c on which shell variable, back quote, and backslash substitutions are
@c performed.  (Actually, it can be any C program, but other statements are
@c probably not useful.)  If the preprocessor produces no error messages
@c while processing it, run shell commands @var{action-if-true}.  Otherwise
@c run shell commands @var{action-if-false}.
@c 
@var{includes}はCやC++の@code{#include}宣言で，そこでは，シェル変数，バッ
ククオート，そしてバックスラッシュの代入が行われます．(実際にCプログラム
の場合もありますが，他の宣言は余り役に立ちません．)プリプロセッサが，処
理中にエラーメッセージを生成しない場合，シェルコマンド
@var{action-if-true}を実行します．それ以外では，シェルコマンド
@var{action-if-false}を実行します．

@c This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
@c @option{-g}, @option{-O}, etc. are not valid options to many C
@c preprocessors.
@c 
@samp{-g}，@samp{-O}等は，多くのCプリプロセッサで正当なオプションではな
いため，このマクロは@code{CPPFLAGS}を使用しますが，@code{CFLAGS}は使用し
ません．
@end defmac

@c Here is how to find out whether a header file contains a particular
@c declaration, such as a typedef, a structure, a structure member, or a
@c function.  Use @code{AC_EGREP_HEADER} instead of running @code{grep}
@c directly on the header file; on some systems the symbol might be defined
@c in another header file that the file you are checking @samp{#include}s.
@c 
ヘッダファイルが，typedef，構造体，構造体メンバー，あるいは関数のような
特定の宣言を含んでいるかどうかを調査する方法は以下のようになります．ヘッ
ダファイルで直接@code{grep}を実行する代わりに，@code{AC_EGREP_HEADER}を
使用します．調査した@samp{#include}ファイル以外のヘッダファイルに，シン
ボルを定義しているシステムもあります．

@defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @var{action-if-found}, @r{[}@var{action-if-not-found}@r{]})
@maindex EGREP_HEADER
@c If the output of running the preprocessor on the system header file
@c @var{header-file} matches the @code{egrep} regular expression
@c @var{pattern}, execute shell commands @var{action-if-found}, otherwise
@c execute @var{action-if-not-found}.
@c 
システム上のヘッダファイル@var{header-file}で，プリプロセッサの実行の出
力が@code{egrep}の正規表現@var{pattern}に一致する場合，シェルコマンドの
@var{action-if-found}を実行し，それ以外では @var{action-if-not-found} を
実行します．
@end defmac

@c To check for C preprocessor symbols, either defined by header files or
@c predefined by the C preprocessor, use @code{AC_EGREP_CPP}.  Here is an
@c example of the latter:
@c 
ヘッダファイルの定義や，Cプリプロセッサの前定義といった，Cプリプロセッサ
シンボルを調査するために，@code{AC_EGREP_CPP}を使用してください．その例
は以下のようになります．

@example
AC_EGREP_CPP(yes,
[#ifdef _AIX
  yes
#endif
], is_aix=yes, is_aix=no)
@end example

@defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex EGREP_CPP
@c @var{program} is the text of a C or C++ program, on which shell
@c variable, back quote, and backslash substitutions are performed.  If the
@c output of running the preprocessor on @var{program} matches the
@c @code{egrep} regular expression @var{pattern}, execute shell commands
@c @var{action-if-found}, otherwise execute @var{action-if-not-found}.
@c 
@var{program}はCやC++プログラムのテキストで，そこでは，シェル変数，バッ
ククオートと，バックスラッシュの代入が行われます．@var{program}上でのプ
リプロセッサの実行の出力が，@code{egrep}の正規表現@var{pattern}と一致す
る場合，シェルコマンドの@var{action-if-found}を実行し，それ以外では 
@var{action-if-not-found}を実行します．

@c This macro calls @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP} (depending
@c on which language is current, @pxref{Language Choice}), if it hasn't
@c been called already.
@c 
このマクロは，それまでに呼ばれていなければ，@code{AC_PROG_CPP}や 
@code{AC_PROG_CXXCPP}を(現在の言語に依存して@pxref{Language Choice})呼び
出します．
@end defmac


@node Examining Syntax, Examining Libraries, Examining Declarations, Writing Tests
@section 構文の調査

@c To check for a syntax feature of the C, C++ or Fortran 77 compiler, such
@c as whether it recognizes a certain keyword, use @code{AC_TRY_COMPILE} to
@c try to compile a small program that uses that feature.  You can also use
@c it to check for structures and structure members that are not present on
@c all systems.
@c 
C，C++，またはFortran 77コンパイラが，あるキーワードを理解するかどうかと
いった構文の特徴を調査するため，@code{AC_TRY_COMPILE}をそれらの特徴を使
用している小さなプログラムをコンパイルを試みるために使用してください．全
てのシステムで，構造体や構造体メンバの存在を調査するために使用することも
可能です．

@defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex TRY_COMPILE
@c Create a C, C++ or Fortran 77 test program (depending on which language
@c is current, @pxref{Language Choice}), to see whether a function whose
@c body consists of @var{function-body} can be compiled.
@c 
(現在の言語に依存して@pxref{Language Choice})，@var{function-body}を含ん
でいる関数をコンパイル可能かどうか判定するために，C，C++やFortran 77の小
さなプログラムを作成します．

@c For C and C++, @var{includes} is any @code{#include} statements needed
@c by the code in @var{function-body} (@var{includes} will be ignored if
@c the currently selected language is Fortran 77).  This macro also uses
@c @code{CFLAGS} or @code{CXXFLAGS} if either C or C++ is the currently
@c selected language, as well as @code{CPPFLAGS}, when compiling.  If
@c Fortran 77 is the currently selected language then @code{FFLAGS} will be
@c used when compiling.
@c 
CとC++に対しては，@var{includes}は@var{function-body}のコードが必要とす
る，あらゆる@code{#include}文になります(現在選択されている言語がFortran
77の場合は無視されます)．このマクロは，現在選択されている言語がCやC++の
場合，@code{CFLAGS}や@code{CXXFLAGS}も使用し，コンパイル時には 
@code{CPPFLAGS}も使用します．Fortran 77が現在選択されている言語の場合，
コンパイル時に@code{FFLAGS}を使用します．

@c If the file compiles successfully, run shell commands
@c @var{action-if-found}, otherwise run @var{action-if-not-found}.
@c 
ファイルのコンパイルが成功した場合，シェルコマンドの
@var{action-if-found}を実行し，それ以外では@var{action-if-not-found}を実
行します．

@c This macro does not try to link; use @code{AC_TRY_LINK} if you need to
@c do that (@pxref{Examining Libraries}).
@c 
このマクロはリンクを試みません． 必要な場合は@code{AC_TRY_LINK}を使用し
てください(@pxref{Examining Libraries})．
@end defmac


@node Examining Libraries, Run Time, Examining Syntax, Writing Tests
@section ライブラリの調査

@c To check for a library, a function, or a global variable, Autoconf
@c @code{configure} scripts try to compile and link a small program that
@c uses it.  This is unlike Metaconfig, which by default uses @code{nm}
@c or @code{ar} on the C library to try to figure out which functions are
@c available.  Trying to link with the function is usually a more reliable
@c approach because it avoids dealing with the variations in the options
@c and output formats of @code{nm} and @code{ar} and in the location of the
@c standard libraries.  It also allows configuring for cross-compilation or
@c checking a function's runtime behavior if needed.  On the other hand, it
@c can be slower than scanning the libraries once.
@c 
ライブラリ，関数，またはグローバル変数を調査するため，Autoconfの
@code{configure}スクリプトは，それを使用している小さなプログラムのコンパ
イルとリンクを試みます．これはMetaconfigとは異なり，デフォルトで，Cライ
ブラリで関数が利用可能かどうか判定するために@code{nm}や@code{ar}を使用し
ます．オプションと@code{nm}と@code{ar}の出力の違いと，標準ライブラリの位
置の違いを処理することを避けるので，通常，関数のリンクの試みは信頼性が高
い方法です．クロスコンパイルや，必要な場合は関数の実行時の動作を調査につ
いても，コンフィグレーション時に可能です．一方，1度のライブラリスキャン
より遅くなります．

@c A few systems have linkers that do not return a failure exit status when
@c there are unresolved functions in the link.  This bug makes the
@c configuration scripts produced by Autoconf unusable on those systems.
@c However, some of them can be given options that make the exit status
@c correct.  This is a problem that Autoconf does not currently handle
@c automatically.  If users encounter this problem, they might be able to
@c solve it by setting @code{LDFLAGS} in the environment to pass whatever
@c options the linker needs (for example, @option{-Wl,-dn} on @sc{mips
@c risc/os}).
@c 
リンクで未解決のシンボルがあるとき，失敗という終了ステータスを戻さないリ
ンカを持つシステムが無いわけではありません．このバグのため，Autoconfが生
成したコンフィグレーションスクリプトは，これらのシステムでは使用不可能で
す．しかし，終了ステータスを正しくするオプションが与えられているものもあ
ります．この問題は現在，Autoconfが自動的に正しく処理できません．ユーザが
この問題に遭遇した場合，リンカが必要なオプション(例えば，MIPS RISC/OSで
の@samp{-Wl,-dn})を環境変数の@code{LDFLAGS}に渡して設定することで解決可
能かもしれません．

@c @code{AC_TRY_LINK} is used to compile test programs to test for
@c functions and global variables.  It is also used by @code{AC_CHECK_LIB}
@c to check for libraries (@pxref{Libraries}), by adding the library being
@c checked for to @code{LIBS} temporarily and trying to link a small
@c program.
@c 
@code{AC_TRY_LINK}は，関数とグローバル変数に対するテストのため，テストプ
ログラムをコンパイルするために使用されます．ライブラリを調査する 
@code{AC_CHECK_LIB}でも，調査しているライブラリを一時的に@code{LIBS}に追
加したり，小さなプログラムのリンクを試みたりすることで，使用されています
(@pxref{Libraries})．

@defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex TRY_LINK
@c Depending on the current language (@pxref{Language Choice}), create a
@c test program to see whether a function whose body consists of
@c @var{function-body} can be compiled and linked.
@c 
現在の言語に依存して(@pxref{Language Choice})，@var{function-body}を含ん
でいる関数をコンパイルとリンクが可能かどうか判定するために，テストプログ
ラムを作成します．

@c For C and C++, @var{includes} is any @code{#include} statements needed
@c by the code in @var{function-body} (@var{includes} will be ignored if
@c the currently selected language is Fortran 77).  This macro also uses
@c @code{CFLAGS} or @code{CXXFLAGS} if either C or C++ is the currently
@c selected language, as well as @code{CPPFLAGS}, when compiling.  If
@c Fortran 77 is the currently selected language then @code{FFLAGS} will be
@c used when compiling.  However, both @code{LDFLAGS} and @code{LIBS} will
@c be used during linking in all cases.
@c 
CとC++に対しては，@var{includes}は，@var{function-body}のコードが必要と
する全ての@code{#include}文です(現在選択されている言語がFortran 77の場合
は無視されます)．このマクロは，現在選択されている言語がCやC++の場合，
@code{CFLAGS}や@code{CXXFLAGS}も使用し，コンパイル時には， 
@code{CPPFLAGS}も使用します．Fortran 77が現在選択されている言語の場合，
コンパイル時に@code{FFLAGS}を使用します．しかし，@code{LDFLAGS}と 
@code{LIBS}は，全ての場合でリンク時に使用します．

@c If the file compiles and links successfully, run shell commands
@c @var{action-if-found}, otherwise run @var{action-if-not-found}.
@c 
ファイルのコンパイルとリンクが成功した場合，シェルコマンドの 
@var{action-if-found}を実行し，それ以外では@var{action-if-not-found}を実
行します．
@end defmac

@defmac AC_TRY_LINK_FUNC (@var{function}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]})
@maindex TRY_LINK_FUNC
@c Depending on the current language (@pxref{Language Choice}), create a
@c test program to see whether a program whose body consists of
@c a prototype of and a call to @var{function} can be compiled and linked.
@c 
現在の言語に依存して(@pxref{Language Choice})，プロトタイプと
@var{function}の呼び出しを含むプログラムの，コンパイルとリンクが可能かど
うか判定するために，テストプログラムを作成します．

@c If the file compiles and links successfully, run shell commands
@c @var{action-if-found}, otherwise run @var{action-if-not-found}.
@c 
ファイルのコンパイルとリンクが成功した場合，シェルコマンドの
@var{action-if-found}を実行し，それ以外では@var{action-if-not-found}を実
行します．
@end defmac


@node Run Time, Systemology, Examining Libraries, Writing Tests
@section 実行時の動作の調査

@c Sometimes you need to find out how a system performs at run time, such
@c as whether a given function has a certain capability or bug.  If you
@c can, make such checks when your program runs instead of when it is
@c configured.  You can check for things like the machine's endianness when
@c your program initializes itself.
@c 
関数の能力やバグといった，実行時のシステムの動作を知る必要があるかもしれ
ません．できれば，コンフィグレーション時ではなくプログラムの実行時に調査
してください．プログラム自身の初期化時に，マシンのエンディアンの様なもの
は調査することが可能です．

@c If you really need to test for a run-time behavior while configuring,
@c you can write a test program to determine the result, and compile and
@c run it using @code{AC_TRY_RUN}.  Avoid running test programs if
@c possible, because this prevents people from configuring your package for
@c cross-compiling.
@c 
コンフィグレーション時に，実行時の動作をテストする必要が本当にある場合，
結果を決定し，@code{AC_TRY_RUN}を使用してコンパイルと実行を行なうために，
テストプログラムを書くことが可能です．クロスコンパイルでパッケージをコン
フィグレーションする邪魔になるなるので，できれば，テストプログラムの実行
は避けてください．

@menu
* Test Programs::               Running test programs
* Guidelines::                  General rules for writing test programs
* Test Functions::              Avoiding pitfalls in test programs
@end menu

@node Test Programs, Guidelines, Run Time, Run Time
@subsection テストプログラムの実行

@c Use the following macro if you need to test run-time behavior of the
@c system while configuring.
@c 
コンフィグレーション時に実行時の動作をテストする必要がある場合，以下のマ
クロを使用してください．

@defmac AC_TRY_RUN (@var{program}, @r{[}@var{action-if-true}@r{]}, @r{[}@var{action-if-false}@r{]}, @r{[}@var{action-if-cross-compiling}@r{]})
@maindex TRY_RUN
@c @var{program} is the text of a C program, on which shell variable and
@c back quote substitutions are performed.  If it compiles and links
@c successfully and returns an exit status of 0 when executed, run shell
@c commands @var{action-if-true}.  Otherwise, run shell commands
@c @var{action-if-false}; the exit status of the program is available in
@c the shell variable @samp{$?}.  This macro uses @code{CFLAGS} or
@c @code{CXXFLAGS}, @code{CPPFLAGS}, @code{LDFLAGS}, and @code{LIBS} when
@c compiling.
@c 
@var{program}はCプログラムのテキストで，シェル変数とバッククオートの代入
が行われます．コンパイルとリンクが成功し，実行時に0の終了ステータスを戻
す場合，シェルコマンドの@var{action-if-true}を実行します．それ以外では，
シェルコマンドの@var{action-if-false}を実行します．プログラムの終了ステー
タスは，シェル変数@samp{$?}で利用可能です．このマクロはコンパイル時に，
@code{CFLAGS}や，@code{CXXFLAGS}，@code{CPPFLAGS}，@code{LDFLAGS}，そし
て@code{LIBS}を使用します．

@c If the C compiler being used does not produce executables that run on
@c the system where @code{configure} is being run, then the test program is
@c not run.  If the optional shell commands @var{action-if-cross-compiling}
@c are given, they are run instead.  Otherwise, @code{configure} prints
@c an error message and exits.
@c 
使用されるCコンパイラが，@code{configure}を実行しているシステムで実行す
る実行形式を生成しない場合，テストプログラムは実行されません．オプション
のシェルコマンド@var{action-if-cross-compiling}が与えられる場合，代わり
に実行されます．それ以外では，@code{configure}はエラーメッセージを出力し
て終了します．
@end defmac

@c Try to provide a pessimistic default value to use when cross-compiling
@c makes run-time tests impossible.  You do this by passing the optional
@c last argument to @code{AC_TRY_RUN}.  @code{autoconf} prints a warning
@c message when creating @code{configure} each time it encounters a call to
@c @code{AC_TRY_RUN} with no @var{action-if-cross-compiling} argument
@c given.  You may ignore the warning, though users will not be able to
@c configure your package for cross-compiling.  A few of the macros
@c distributed with Autoconf produce this warning message.
@c 
クロスコンパイルで実行時テストが不可能なとき，使用する悲観的なデフォルト
値を与えてみてください．@code{AC_TRY_RUN}のオプションの最後の引数で渡し
ます．@code{configure}を作成するたび毎に，@code{AC_TRY_RUN}の呼び出しで
@var{action-if-cross-compiling}引数が与えられないときは，@code{autoconf} 
は警告メッセージを出力します．警告を無視することもできますが，ユーザは，
パッケージのクロスコンパイルのコンフィグレーションができません．Autoconf
が配布するマクロには，この警告メッセージを生成するものもあります．

@c To configure for cross-compiling you can also choose a value for those
@c parameters based on the canonical system name (@pxref{Manual
@c Configuration}).  Alternatively, set up a test results cache file with
@c the correct values for the host system (@pxref{Caching Results}).
@c 
クロスコンパイルのコンフィグレーションのため，標準的なシステム名 
(@pxref{Manual Configuration})に基づくパラメータに対する値を選択すること
も可能です．代わりに，ホストシステムに対する正しい値で，テスト結果のキャッ
シュファイルを設定してください(@pxref{Caching Results})．

@c To provide a default for calls of @code{AC_TRY_RUN} that are embedded in
@c other macros, including a few of the ones that come with Autoconf, you
@c can call @code{AC_PROG_CC} before running them.  Then, if the shell
@c variable @code{cross_compiling} is set to @samp{yes}, use an alternate
@c method to get the results instead of calling the macros.
@c 
Autoconfで提供される２，３のものを含め，@code{AC_TRY_RUN}が埋め込まれて
いる他のマクロの呼び出しに対してデフォルトを与えるため，実行する前に 
@code{AC_PROG_CC}を呼び出すことが可能です．シェル変数 
@code{cross_compiling}が@samp{yes}に設定されている場合，マクロを呼び出す
代わりに，結果を得るための代わりの手法を使用します．


@node Guidelines, Test Functions, Test Programs, Run Time
@subsection テストプログラムのガイドライン

@c Test programs should not write anything to the standard output.  They
@c should return 0 if the test succeeds, nonzero otherwise, so that success
@c can be distinguished easily from a core dump or other failure;
@c segmentation violations and other failures produce a nonzero exit
@c status.  Test programs should @code{exit}, not @code{return}, from
@c @code{main}, because on some systems (old Suns, at least) the argument
@c to @code{return} in @code{main} is ignored.
@c 
テストプログラムは，標準出力に何かを書き出すべきではありません．コアダン
プや他の失敗と簡単に区別できるように，成功した場合は0，それ以外ではゼロ
以外を返すべきです．セグメンテーション違反やその他の失敗は，終了ステータ
スでゼロ以外を生成します．@code{main}内の@code{return}の引数を無視するシ
ステム(古いSun では少なくとも)もあるので，テストプログラムの@code{main} 
では@code{return}ではなく@code{exit}を使用するべきです．

@c Test programs can use @code{#if} or @code{#ifdef} to check the values of
@c preprocessor macros defined by tests that have already run.  For
@c example, if you call @code{AC_HEADER_STDC}, then later on in
@c @file{configure.ac} you can have a test program that includes an
@c @sc{ansi} C header file conditionally:
@c 
既に実行されたテストで定義されたプリプロセッサの値を調査するため，テスト
プログラムで@code{#if}や@code{#ifdef}を使用することが可能です．例えば， 
@code{AC_HEADER_STDC}を呼び出す場合，@file{configure.ac}の後の方で，暫定
的にANSI Cヘッダファイルをインクルードするテストプログラムを使用すること
が可能です．

@example
@group
#if STDC_HEADERS
# include <stdlib.h>
#endif
@end group
@end example

@c If a test program needs to use or create a data file, give it a name
@c that starts with @file{conftest}, such as @file{conftest.data}.  The
@c @code{configure} script cleans up by running @samp{rm -rf conftest*}
@c after running test programs and if the script is interrupted.
@c 
テストプログラムでデータファイルを使用したり，作成したりする必要がある場
合， @file{conftest.data}のような，@file{conftest}で始まる名前を与えてく
ださい．@code{configure}スクリプトは，テストプログラム終了後やスクリプト
が中断された場合，@samp{rm -rf conftest*}を実行しクリーンアップします．


@node Test Functions,  , Guidelines, Run Time
@subsection 関数のテスト

@c Function declarations in test programs should have a prototype
@c conditionalized for C++.  In practice, though, test programs rarely need
@c functions that take arguments.
@c 
テストプログラムでの関数宣言には，C++に対する条件付のプロトタイプを持た
せるべきです．しかし，テストプログラムで引数をとる関数が必要になることは，
実際には滅多にありません．

@example
#ifdef __cplusplus
foo (int i)
#else
foo (i) int i;
#endif
@end example

@c Functions that test programs declare should also be conditionalized for
@c C++, which requires @samp{extern "C"} prototypes.  Make sure to not
@c include any header files containing clashing prototypes.
@c 
テストプログラムが宣言する関数には，@samp{extern "C"}プロトタイプを要求
するC++に対する条件付けも行なうべきです．壊れたプロトタイプを含んでいる
ヘッダファイルをインクルードしていないことを確かめてください．

@example
#ifdef __cplusplus
extern "C" void *malloc (size_t);
#else
char *malloc ();
#endif
@end example

@c If a test program calls a function with invalid parameters (just to see
@c whether it exists), organize the program to ensure that it never invokes
@c that function.  You can do this by calling it in another function that is
@c never invoked.  You can't do it by putting it after a call to
@c @code{exit}, because GCC version 2 knows that @code{exit} never returns
@c and optimizes out any code that follows it in the same block.
@c 
テストプログラムが(その存在の確認のためにだけ)無効なパラメータで関数を呼
び出す場合，その関数を決して呼び出さないことを保証するようにプログラムを
構成してください．決して呼び出されないそれ以外の他の関数から関数を呼び出
すことで，こうすることが可能です．GCCバージョン2は，@code{exit}は値を返
さず，同じブロックにあるそれ以降のコードを最適化で外してしまうことが知ら
れているので，@code{exit}の呼び出し以降にそれを書き込まないでください．

@c If you include any header files, make sure to call the functions
@c relevant to them with the correct number of arguments, even if they are
@c just 0, to avoid compilation errors due to prototypes.  GCC version 2
@c has internal prototypes for several functions that it automatically
@c inlines; for example, @code{memcpy}.  To avoid errors when checking for
@c them, either pass them the correct number of arguments or redeclare them
@c with a different return type (such as @code{char}).
@c 
ヘッダファイルをインクルードする場合は，たとえ引数が0だけであっても，プ
ロトタイプで生じるコンパイルエラーを避けるため，正しい数の引数を適切にし
て関数を呼び出していることを確認してください．GCCのバージョン2は，自動的
にインライン化される関数プロトタイプ，例えば@code{memcpy}もあります．そ
れらを調査しているときのエラーを避けるため，正しい数の引数を与えるか，
(@code{char}のような)異なる戻り値で再定義してください．


@node Systemology, Multiple Cases, Run Time, Writing Tests
@section システム

@c This section aims at presenting some systems and pointers to
@c documentation.  It may help you addressing particular problems reported
@c by users.
@c 
このセクションは，ドキュメントへのシステムとポインタを紹介することを目的
としています．ユーザが報告する特定の問題を解決するとき役に立つでしょう．

@table @asis
@item @sc{qnx 4.25}
@cindex @sc{qnx 4.25}
@c FIXME: Please, if you feel like writing something more precise,
@c it'd be great.  In particular, I can't understand the difference with
@c QNX Neutrino.

@c @sc{qnx} is a realtime operating system running on Intel architecture
@c meant to be scalable from the small embedded systems to hundred
@c processor super-computer.  It claims to be @sc{posix} certified. More
@c information is available on the @href{www.qnx.com, @sc{qnx} home page},
@c including the @href{http://support.qnx.com/support/docs/qnx4/, @sc{qnx}
@c man pages}.
@c 
@sc{qnx}は，小さな組み込みシステムから百個のプロセッサを持つスーパーコン
ピュータまで幅広く利用できる，Intelアーキテクチャまで動作するリアルタイ
ムオペレーティングシステムです．それは@sc{posix}だと申請されています．
@sc{qnx} home page@footnote{@sc{qnx} home page,@url{www.qnx.com}}で，よ
り多くの情報が利用可能で，そこには，@sc{qnx} man pages@footnote{@sc{qnx}
man pages,@url{http://support.qnx.com/support/docs/qnx4/}}もあります．
@end table


@node Multiple Cases, Language Choice, Systemology, Writing Tests
@section 複数のケース文

@c Some operations are accomplished in several possible ways, depending on
@c the @sc{unix} variant.  Checking for them essentially requires a ``case
@c statement''.  Autoconf does not directly provide one; however, it is
@c easy to simulate by using a shell variable to keep track of whether a
@c way to perform the operation has been found yet.
@c 
処理によってはいくつかの考えられる方法で達成されるものもあり，それはそれ
ぞれ異なる@sc{unix}に依存しています．それを本質的に調査するためには，
``case文''が必要です．Autoconfは直接それを提供していません．しかし，実行
する処理が見つかったかどうかの追跡を続けるため，シェル変数を使用すること
で簡単にシミュレート可能です．

@c Here is an example that uses the shell variable @code{fstype} to keep
@c track of whether the remaining cases need to be checked.
@c 
残っているcaseを調査する必要があるかどうかに関係なく追跡を続けるために，
シェル変数@code{fstype}を使用する例は，以下のようになります．

@example
@group
AC_MSG_CHECKING([how to get file system type])
fstype=no
# The order of these tests is important.
AC_TRY_CPP([#include <sys/statvfs.h>
#include <sys/fstyp.h>],
           [AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4])
if test $fstype = no; then
  AC_TRY_CPP([#include <sys/statfs.h>
#include <sys/fstyp.h>],
             [AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3])
fi
if test $fstype = no; then
  AC_TRY_CPP([#include <sys/statfs.h>
#include <sys/vmount.h>],
             [AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX])
fi
# (more cases omitted here)
AC_MSG_RESULT([$fstype])
@end group
@end example


@node Language Choice,  , Multiple Cases, Writing Tests
@section 言語の選択
@cindex Language

@c Autoconf-generated @code{configure} scripts check for the C compiler and
@c its features by default.  Packages that use other programming languages
@c (maybe more than one, e.g. C and C++) need to test features of the
@c compilers for the respective languages.  The following macros determine
@c which programming language is used in the subsequent tests in
@c @file{configure.ac}.
@c 
Autoconfが生成した@code{configure}スクリプトは，Cコンパイラとその特徴を
デフォルトで調査します．他のプログラム言語を使用するパッケージ(一つ以上
で，例えば，CとC++)は，それぞれの言語のコンパイラの特徴をテストする必要
があります．以下のマクロは@file{configure.ac}内のそれ以降のテストで使用
されるプログラミング言語のコンパイラを決定します．

@defmac AC_LANG (@var{language})
@c Do compilation tests using the compiler, preprocessor and file
@c extensions for the specified @var{language}.
@c 
@var{language}で指定されている，コンパイラ，プリプロセッサ，そしてファイ
ル拡張子をコンパイルテストで使用します．

@c Supported languages are:
@c 
サポートされている言語は以下のとおりです．

@table @samp
@item C
@c Do compilation tests using @code{CC} and @code{CPP} and use extension
@c @file{.c} for test programs.
@c 
@code{CC}と@code{CPP}を使用しコンパイルテストを行ない，テストプログラム
では@file{.c}の拡張子を使用します．

@item C++
@c Do compilation tests using @code{CXX} and @code{CXXCPP} and use
@c extension @file{.C} for test programs.
@c 
@code{CXX}と@code{CXXCPP}を使用しコンパイルテストを行ない，テストプログ
ラムでは@file{.C}の拡張子を使用します．

@item Fortran 77
@c Do compilation tests using @code{F77} and use extension @file{.f} for
@c test programs.
@c 
@code{F77}を使用しコンパイルテストを行ない，テストプログラムでは
@file{.f}の拡張子を使用します．
@end table
@end defmac

@defmac AC_LANG_PUSH (@var{language})
@maindex LANG_PUSH
@c Remember the current language (as set by @code{AC_LANG}) on a stack, and
@c then select the @var{language}.  Use this macro and @code{AC_LANG_POP}
@c in macros that need to temporarily switch to a particular language.
@c 
現在の言語を(@code{AC_LANG}に設定するように)スタックに記録し，
@var{language}を選択します．このマクロと@code{AC_LANG_POP}を，一時的に特
定の言語に切替える必要があるマクロで使用してください．
@end defmac

@defmac AC_LANG_POP (@r{[}@var{language}@r{]})
@maindex LANG_POP
@c Select the language that is saved on the top of the stack, as set by
@c @code{AC_LANG_PUSH}, and remove it from the stack.
@c 
@code{AC_LANG_PUSH}で設定するように，スタックのトップに保存されている言
語に選択し，スタックからそれを削除します．

@c If given, @var{language} specifies the language we just @emph{quit}.  It
@c is a good idea to specify it when it's known (which should be the
@c case@dots{}), since Autoconf will detect inconsistencies.
@c 
@var{language}与えられている場合，それは言語を@emph{そのまま}指定します．
分かっているときは，Autoconfが間違いを検出するので(case@dots{}にすべきで
すが)，それを指定することは良い考えです．

@example
AC_LANG_PUSH(Fortran 77)
# Perform some tests on Fortran 77.
# ...
AC_LANG_POP(Fortran 77)
@end example
@end defmac

@defmac AC_REQUIRE_CPP
@maindex REQUIRE_CPP
@c Ensure that whichever preprocessor would currently be used for tests has
@c been found.  Calls @code{AC_REQUIRE} (@pxref{Prerequisite Macros}) with an
@c argument of either @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP},
@c depending on which language is current.
@c 
現在のテストに使用されるプリプロセッサが見つかることを保証します．現在の
言語に依存して，@code{AC_PROG_CPP}や@code{AC_PROG_CXXCPP}のいずれかの引
数を用いて，@code{AC_REQUIRE} (@pxref{Prerequisite Macros})を呼び出して
ください．
@end defmac


@c ====================================================== Results of Tests.

@node Results, Programming in M4, Writing Tests, Top
@chapter テストの結果

@c Once @code{configure} has determined whether a feature exists, what can
@c it do to record that information?  There are four sorts of things it can
@c do: define a C preprocessor symbol, set a variable in the output files,
@c save the result in a cache file for future @code{configure} runs, and
@c print a message letting the user know the result of the test.
@c 
一度@code{configure}で特徴の存在を定義すると，その情報を記録するために何
ができるのでしょうか？ そうする方法は4種類あります．Cプリプロセッサシン
ボルの定義，出力ファイルで変数を設定，@code{configure}実行時のキャッシュ
ファイルに結果を保存，そして，テスト結果をユーザに知らせるメッセージの出
力です．

@menu
* Defining Symbols::            Defining C preprocessor symbols
* Setting Output Variables::    Replacing variables in output files
* Caching Results::             Speeding up subsequent @code{configure} runs
* Printing Messages::           Notifying @code{configure} users
@end menu

@node Defining Symbols, Setting Output Variables, Results, Results
@section Cプリプロセッサシンボルの定義

@c A common action to take in response to a feature test is to define a C
@c preprocessor symbol indicating the results of the test.  That is done by
@c calling @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}.
@c 
特徴テストからの応答を受けとる通常の動作は，テストの結果を示すCプリプロ
セッサシンボルを定義することです．それは@code{AC_DEFINE}や
@code{AC_DEFINE_UNQUOTED}と呼ばれるもので行います．

@c By default, @code{AC_OUTPUT} places the symbols defined by these macros
@c into the output variable @code{DEFS}, which contains an option
@c @option{-D@var{symbol}=@var{value}} for each symbol defined.  Unlike in
@c Autoconf version 1, there is no variable @code{DEFS} defined while
@c @code{configure} is running.  To check whether Autoconf macros have
@c already defined a certain C preprocessor symbol, test the value of the
@c appropriate cache variable, as in this example:
@c 
デフォルトで，@code{AC_OUTPUT}はマクロが定義したシンボルを，出力変数 
@code{DEFS}に配置し，それはそれぞれのシンボルに対する
@option{-D@var{symbol}=@var{value}}を含んでいます．Autoconfバージョン1と
異なり，@code{configure}が実行中に定義する変数@code{DEFS}はありません．
Autoconfマクロが，あるCプリプロセッサシンボルを既に定義しているかどうか
調査するため，以下の例のように，適切なキャッシュ変数の値をテストしてくだ
さい．

@example
AC_CHECK_FUNC(vprintf, [AC_DEFINE(HAVE_VPRINTF)])
if test "$ac_cv_func_vprintf" != yes; then
  AC_CHECK_FUNC(_doprnt, [AC_DEFINE(HAVE_DOPRNT)])
fi
@end example

@c If @code{AC_CONFIG_HEADERS} has been called, then instead of creating
@c @code{DEFS}, @code{AC_OUTPUT} creates a header file by substituting the
@c correct values into @code{#define} statements in a template file.
@c @xref{Configuration Headers}, for more information about this kind of
@c output.
@c 
@code{AC_CONFIG_HEADERS}が呼び出された場合，@code{DEFS}を作成する代わり
に，@code{AC_OUTPUT}でテンプレートファイルに@code{#define}文で正しい値を
代入したヘッダファイルを作成します．この種類の出力の詳細は，
@xref{Configuration Headers}.

@defmac AC_DEFINE (@var{variable}, @r{[}@var{value}@r{]}, @r{[}@var{description}@r{]})
@maindex DEFINE
@c Define C preprocessor variable @var{variable}.  If @var{value} is given,
@c set @var{variable} to that value (verbatim), otherwise set it to 1.
@c @var{value} should not contain literal newlines, and if you are not
@c using @code{AC_CONFIG_HEADERS} it should not contain any @samp{#}
@c characters, as @code{make} tends to eat them.  To use a shell variable
@c (which you need to do in order to define a value containing the M4 quote
@c characters @samp{[} or @samp{]}), use @code{AC_DEFINE_UNQUOTED} instead.
@c @var{description} is only useful if you are using
@c @code{AC_CONFIG_HEADERS}.  In this case, @var{description} is put into
@c the generated @file{config.h.in} as the comment before the macro define.
@c The following example defines the C preprocessor variable
@c @code{EQUATION} to be the string constant @samp{"$a > $b"}:
@c 
Cプリプロセッサ変数@var{variable}を定義します．@var{value}が与えられる場
合は，@var{variable}にその値を(そのまま)設定し，それ以外では1に設定しま
す．@var{value}は改行リテラルを含むべきではなく， 
@code{AC_CONFIG_HEADERS}を使用しない場合，@code{make}が処理してしまうの
で，@samp{#}文字を含めるべきではありません．シェル変数(M4の引用符文字
@samp{[}や@samp{]}を含む定義値が必要なもの)を使用するために，代わりに
@code{AC_DEFINE_UNQUOTED}を使用してください．@var{description}は， 
@code{AC_CONFIG_HEADER}を使用する場合のみ役に立ちます．この場合， 
@var{description}は，生成された@file{config.h.in}に，マクロ定義前のコメ
ントとして書き込まれます．以下の例は，Cプリプロセッサ変数@code{EQUATION} 
を文字定数@samp{"$a > $b"}と定義します．

@example
AC_DEFINE(EQUATION, "$a > $b")
@end example
@end defmac

@defmac AC_DEFINE_UNQUOTED (@var{variable}, @r{[}@var{value}@r{]}, @r{[}@var{description}@r{]})
@maindex DEFINE_UNQUOTED
@c Like @code{AC_DEFINE}, but three shell expansions are
@c performed---once---on @var{variable} and @var{value}: variable expansion
@c (@samp{$}), command substitution (@samp{`}), and backslash escaping
@c (@samp{\}).  Single and double quote characters in the value have no
@c special meaning.  Use this macro instead of @code{AC_DEFINE} when
@c @var{variable} or @var{value} is a shell variable.  Examples:
@c 
@code{AC_DEFINE}に似ていますが，@var{variable}と@var{value}で，3つのシェ
ル展開が---一度に---実行されます．変数の展開(@samp{$})，コマンドの置換
(@samp{`})，そしてバックスラッシュエスケープ(@samp{\})です．値の中のシン
グルクオートとダブルクオートの文字列，特別な意味を持ちません．
@var{variable}や @var{value}がシェル変数の時は，@code{AC_DEFINE}の代わり
にこのマクロを使用してください．以下がその例です．

@example
AC_DEFINE_UNQUOTED(config_machfile, "$machfile")
AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)
AC_DEFINE_UNQUOTED($ac_tr_hdr)
@end example
@end defmac

@c Due to the syntactical bizarreness of the Bourne shell, do not use
@c semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
@c calls from other macro calls or shell code; that can cause syntax errors
@c in the resulting @code{configure} script.  Use either spaces or
@c newlines.  That is, do this:
@c 
Bourneシェルの構文の特異性のため，他のマクロから呼び出しやシェルコードと
@code{AC_DEFINE}や@code{AC_DEFINE_UNQUOTED}を分けるため，セミコロンを使
用しないでください．そうすると，@code{configure}スクリプトの結果として構
文エラーの原因となります．以下のようにします．

@example
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4) LIBS="$LIBS -lelf"])
@end example

@noindent
@c or this:
@c 
あるいは以下のようにします．

@example
AC_CHECK_HEADER(elf.h,
 [AC_DEFINE(SVR4)
  LIBS="$LIBS -lelf"])
@end example

@noindent
@c instead of this:
@c 
それらは以下の代わりのものです．

@example
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4); LIBS="$LIBS -lelf"])
@end example


@node Setting Output Variables, Caching Results, Defining Symbols, Results
@section 出力変数の設定

@c Another way to record the results of tests is to set @dfn{output
@c variables}, which are shell variables whose values are substituted into
@c files that @code{configure} outputs.  The two macros below create new
@c output variables.  @xref{Preset Output Variables}, for a list of output
@c variables that are always available.
@c 
テストの結果を記録するもう一つの方法は，@dfn{出力変数}を設定することで，
それは，@code{configure}が出力したファイルの中に，シェル変数の値を代入す
ることです．以下の2つのマクロで新しい出力変数を作ります．利用可能な出力
変数のリストは，@xref{Preset Output Variables}.

@defmac AC_SUBST (@var{variable}, @r{[}@var{value}@r{]})
@maindex SUBST
@c Create an output variable from a shell variable.  Make @code{AC_OUTPUT}
@c substitute the variable @var{variable} into output files (typically one
@c or more @file{Makefile}s).  This means that @code{AC_OUTPUT} will
@c replace instances of @samp{@@@var{variable}@@} in input files with the
@c value that the shell variable @var{variable} has when @code{AC_OUTPUT}
@c is called.  This value of @var{variable} should not contain literal
@c newlines.
@c 
シェル変数から出力変数を作成します．@code{AC_OUTPUT}は，出力ファイルの変
数@var{variable}に代入します(通常，一つ以上の@file{Makefile}です)．これ
は，@code{AC_OUTPUT}が呼び出されたとき，入力ファイルの
@samp{@@@var{variable}@@}のインスタンスをシェル変数@var{variable}が持つ
値で@code{AC_OUTPUT}が置換することを意味します．@var{variable}のこの値は
改行リテラルを含むべきではありません．

@c If @var{value} is given, in addition assign it to @samp{variable}.
@c 
@var{value}が与えられている場合，さらにそれも@samp{variable}に渡されます．
@end defmac

@defmac AC_SUBST_FILE (@var{variable})
@maindex SUBST_FILE
@c Another way to create an output variable from a shell variable.  Make
@c @code{AC_OUTPUT} insert (without substitutions) the contents of the file
@c named by shell variable @var{variable} into output files.  This means
@c that @code{AC_OUTPUT} will replace instances of
@c @samp{@@@var{variable}@@} in output files (such as @file{Makefile.in})
@c with the contents of the file that the shell variable @var{variable}
@c names when @code{AC_OUTPUT} is called.  Set the variable to
@c @file{/dev/null} for cases that do not have a file to insert.
@c 
シェル変数から出力ファイルを作成するもう一つの方法です．@code{AC_OUTPUT} 
で，シェル変数@var{variable}で名付けられたファイルの内容を出力ファイルに
挿入します(代入ではありません)．これは，@code{AC_OUTPUT}が呼び出されたと
き，シェル変数@var{variable}の名前のファイルの内容で，
(@file{Makefile.in})のような出力ファイルの@samp{@@@var{variable}@@}のイ
ンスタンスを，@code{AC_OUTPUT}が置換することを意味します．挿入するファイ
ルがない場合には，変数@file{/dev/null}に設定します．

@c This macro is useful for inserting @file{Makefile} fragments containing
@c special dependencies or other @code{make} directives for particular host
@c or target types into @file{Makefile}s.  For example, @file{configure.ac}
@c could contain:
@c 
このマクロは，@file{Makefile}に特別な依存を含むフラグを挿入したり，特定
のホストやターゲットのための@code{make}ディレクティブを@file{Makefile} 
に挿入するとき役に立ちます．例えば，@file{configure.ac}に以下を含ませま
す．

@example
AC_SUBST_FILE(host_frag)
host_frag=$srcdir/conf/sun4.mh
@end example

@noindent
@c and then a @file{Makefile.in} could contain:
@c 
そして@file{Makefile.in}に以下を含ませます．

@example
@@host_frag@@
@end example
@end defmac

@cindex Previous Variable
@cindex Variable, Precious
@c Running @command{configure} in different environments can be extremely
@c dangerous.  If for instance the user runs @samp{CC=bizarre-cc
@c ./configure}, then the cache, @file{config.h} and many other output
@c files will depend upon @command{bizarre-cc} being the C compiler.  If
@c for some reason the user runs @command{/configure} again, or if it is
@c run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
@c and @pxref{config.status Invocation}), then the configuration can be
@c inconsistent, composed of results depending upon two different
@c compilers.
@c 
異なる環境変数で@command{configure}を実行することは非常に危険です．例え
ば，ユーザが@samp{CC=bizarre-cc ./configure}を実行した場合，キャッシュ，
@file{config.h}，そして多くの出力ファイルは，Cコンパイラが
@command{bizarre-cc}だということに依存します．理由があって，ユーザが再び
@command{./configure}を実行した場合や，@samp{./config.status --recheck} 
でそれが実行される場合(@xref{Automatic Remaking}. @pxref{config.status
Invocation})，コンフィグレーションは矛盾し，二つの異なるコンパイラに依存
した結果で構成されます．

@c Such variables are named @dfn{precious variables}, and can be declared
@c as such by @code{AC_ARG_VAR}.
@c 
そのような変数は@dfn{貴重な変数(precious variables)}と命名されていて，
@code{AC_ARG_VAR}のようなもので宣言可能です．

@defmac AC_ARG_VAR (@var{variable}, @var{description})
@maindex ARG_VAR
@c Declare @var{variable} is a precious variable, and include its
@c @var{description} in the variable section of @samp{./configure --help}.
@c 
@var{variable}を貴重な変数として宣言し，@samp{./configure --help}の可変
部分にその@var{description}を含めます．

@c Being precious means that
@c 
貴重とは，以下のことを意味します．
@itemize @minus
@item
@c @var{variable} is @code{AC_SUBST}'d.
@c 
@code{AC_SUBST}される@var{variable}．

@item
@c @var{variable} is kept in the cache including if it was not specified on
@c the @samp{./configure} command line.  Indeed, while @command{configure}
@c can notice the definition of @code{CC} in @samp{./configure
@c CC=bizarre-cc}, it is impossible to notice it in @samp{CC=bizarre-cc
@c ./configure}, which, unfortunately, is what most users do.
@c 
@samp{./configure}のコマンドラインで指定されていない場合でもキャッシュに
保存される変数．実際，@command{configure}は@samp{./configure
CC=bizarre-cc}の@code{CC}の定義に注目できますが，@samp{CC=bizarre-cc
./configure}のものには注意できません．そして，残念ながらほとんどのユーザ
がそうしています．

@item
@c @var{variable} is checked for consistency between two
@c @command{configure} runs.  For instance:
@c 
@var{variable}は2回の@command{configure}の実行の間の整合性を調査されます．
例えば，以下のようにします．

@example
$ ./configure --silent --config-cache
$ CC=cc ./configure --silent --config-cache
configure: error: `CC' was not set in the previous run
configure: error: changes in the environment can compromise \
the build
configure: error: run `make distclean' and/or \
`rm config.cache' and start over
@end example

@noindent
@c and similarly if the variable is unset, or if its content is changed.
@c 
そして，それは変数を未設定にする場合や，その内容が変更される場合も似たよ
うなものです．

@item
@c @var{variable} is kept during automatic reconfiguration
@c (@pxref{config.status Invocation}) as if it had been passed as a command
@c line argument, including when no cache is used:
@c 
@var{variable}は，自動的な再コンフィグレーションの間，コマンド引数として
渡されているかのように保存され，キャッシュを使用していないときもです．

@example
$ CC=/usr/bin/cc ./configure undeclared_var=raboof --silent
$ ./config.status --recheck
running /bin/sh ./configure undeclared_var=raboof --silent \
  CC=/usr/bin/cc  --no-create --no-recursion
@end example
@end itemize
@end defmac


@node Caching Results, Printing Messages, Setting Output Variables, Results
@section 結果のキャッシュ
@cindex Cache

@c To avoid checking for the same features repeatedly in various
@c @code{configure} scripts (or in repeated runs of one script),
@c @code{configure} can optionally save the results of many checks in a
@c @dfn{cache file} (@pxref{Cache Files}).  If a @code{configure} script
@c runs with caching enabled and finds a cache file, it reads the results
@c of previous runs from the cache and avoids rerunning those checks.  As a
@c result, @code{configure} can then run much faster than if it had to
@c perform all of the checks every time.
@c 
様々な@code{configure}スクリプトで，同じ特徴を繰り返し調査する(あるいは
何度も一つのスクリプトを実行する)ことを避けるため，@code{configure}は，
多くの調査結果を@dfn{キャッシュファイル(cache file)}に保存します
(@pxref{Cache Files})．キャッシュ可能な状態で@code{configure}スクリプト
を実行していてキャッシュファイルが見つかる場合，前回の実行結果をキャッシュ
から読み込み，これらの調査の再実行を避けます．結果として，
@code{configure}は，毎回全ての調査を実行するより早くなります．

@defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
@maindex CACHE_VAL
@c Ensure that the results of the check identified by @var{cache-id} are
@c available.  If the results of the check were in the cache file that was
@c read, and @code{configure} was not given the @option{--quiet} or
@c @option{--silent} option, print a message saying that the result was
@c cached; otherwise, run the shell commands @var{commands-to-set-it}.  If
@c the shell commands are run to determine the value, the value will be
@c saved in the cache file just before @code{configure} creates its output
@c files.  @xref{Cache Variable Names}, for how to choose the name of the
@c @var{cache-id} variable.
@c 
@var{cache-id}で識別した調査結果が，利用可能だということを保証します．調
査結果が読み込まれたキャッシュファイルにあり，@code{configure}に， 
@samp{--quiet}や@samp{--silent}オプションが与えられていない場合，結果が
キャッシュされていることを示すメッセージを出力します．それ以外では，シェ
ルコマンド@var{commands-to-set-it}を実行します．シェルコマンドを値を決定
するために実行する場合，@code{configure}が出力ファイルを作成する直前に，
値をキャッシュファイルに保存します．@var{cache-id}変数の名前を選択する方
法は，@xref{Cache Variable Names}.

@c The @var{commands-to-set-it} @emph{must have no side effects} except for
@c setting the variable @var{cache-id}, see below.
@c 
@var{commands-to-set-it}は，設定された変数 @var{cache-id}以外に@emph{副
作用がないはずです}．以下を参照してください．
@end defmac

@defmac AC_CACHE_CHECK (@var{message}, @var{cache-id}, @var{commands-to-set-it})
@maindex CACHE_CHECK
@c A wrapper for @code{AC_CACHE_VAL} that takes care of printing the
@c messages.  This macro provides a convenient shorthand for the most
@c common way to use these macros.  It calls @code{AC_MSG_CHECKING} for
@c @var{message}, then @code{AC_CACHE_VAL} with the @var{cache-id} and
@c @var{commands} arguments, and @code{AC_MSG_RESULT} with @var{cache-id}.
@c 
メッセージ出力に注意が必要な@code{AC_CACHE_VAL}のラッパーです．このマク
ロは，これらのマクロを使用する最も一般的な方法に対して，便利な略記法を提
供します．それは，@var{message}に対して@code{AC_MSG_CHECKING}を呼び出し，
その後で，@var{cache-id}と@var{commands}引数を伴う@code{AC_CACHE_VAL}と，
@var{cache-id}を伴う@code{AC_MSG_RESULT}を呼び出します．

@c The @var{commands-to-set-it} @emph{must have no side effects} except for
@c setting the variable @var{cache-id}, see below.
@c 
@var{commands-to-set-it}は，設定された変数 @var{cache-id}以外に@emph{副
作用がないはずです}．以下を参照してください．
@end defmac

@c It is very common to find buggy macros using @code{AC_CACHE_VAL} or
@c @code{AC_CACHE_CHECK}, because people are tempted to call
@c @code{AC_DEFINE} in the @var{commands-to-set-it}. Instead, the code that
@c @emph{follows} the call to @code{AC_CACHE_VAL} should call
@c @code{AC_DEFINE}, by examining the value of the cache variable.  For
@c instance, the following macro is broken:
@c 
@var{commands-to-set-it}で@code{AC_DEFINE}の呼び出しを試みるため，
@code{AC_CACHE_VAL}や@code{AC_CACHE_CHECK}を使用しているバグの多いマクロ
を発見することはよくあります．その代わりに，@code{AC_CACHE_VAL}を呼び出
している@emph{以下の}ようなコードでは，キャッシュ変数の値を調べることで，
@code{AC_DEFINE}を呼び出すべきです．例えば，以下のマクロは駄目です．

@example
@group
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
                [ac_cv_shell_true_works=no
                 true && ac_cv_shell_true_works=yes
                 if test $ac_cv_shell_true_works = yes; then
                   AC_DEFINE([TRUE_WORKS], 1
                             [Define if `true(1)' works properly.])
                 fi])
])
@end group
@end example

@noindent
@c This fails if the cache is enabled: the second time this macro is run,
@c @code{TRUE_WORKS} @emph{will not be defined}.  The proper implementation
@c is:
@c 
これは，キャッシュが利用可能な場合，失敗します．このマクロの2回目の実行
で，@code{TRUE_WORKS}は@emph{定義されていないでしょう}．適切な実装は以下
のようになります．

@example
@group
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
                [ac_cv_shell_true_works=no
                 true && ac_cv_shell_true_works=yes])
 if test $ac_cv_shell_true_works = yes; then
   AC_DEFINE([TRUE_WORKS], 1
             [Define if `true(1)' works properly.])
 fi
])
@end group
@end example

@c Also, @var{commands-to-set-it} should not print any messages, for
@c example with @code{AC_MSG_CHECKING}; do that before calling
@c @code{AC_CACHE_VAL}, so the messages are printed regardless of whether
@c the results of the check are retrieved from the cache or determined by
@c running the shell commands.
@c 
また，@var{commands-to-set-it}では，例えば@code{AC_MSG_CHECKING}を用いて
メッセージを出力すべきではありません．調査の結果がキャッシュから取り出さ
れるか，シェルコマンドの実行で決定されるかに依存せずメッセージが出力され
るので，@code{AC_CACHE_VAL}の呼び出しの前にしてください．

@menu
* Cache Variable Names::        Shell variables used in caches
* Cache Files::                 Files @code{configure} uses for caching
* Cache Checkpointing::         Loading and saving the cache file
@end menu

@node Cache Variable Names, Cache Files, Caching Results, Caching Results
@subsection キャッシュ変数名
@cindex Cache variable

@c The names of cache variables should have the following format:
@c 
キャッシュ変数の名前は以下の書式にすべきです．

@example
@var{package-prefix}_cv_@var{value-type}_@var{specific-value}_@r{[}@var{additional-options}@r{]}
@end example

@noindent
@c for example, @samp{ac_cv_header_stat_broken} or
@c @samp{ac_cv_prog_gcc_traditional}.  The parts of the variable name are:
@c 
例えば，@samp{ac_cv_header_stat_broken}や
@samp{ac_cv_prog_gcc_traditional}です．変数名の一部は以下のようにします．

@table @asis
@item @var{package-prefix}
@c An abbreviation for your package or organization; the same prefix you
@c begin local Autoconf macros with, except lowercase by convention.
@c For cache values used by the distributed Autoconf macros, this value is
@c @samp{ac}.
@c 
パッケージや組織の省略です．小文字の慣習以外は，ローカルなAutoconfマクロ
と同じプレフィクスで開始します．配布されているAutoconfマクロで使用される
キャッシュ値に対して，この値は@samp{ac}になっています．

@item @code{_cv_}
@c Indicates that this shell variable is a cache value. This string
@c @emph{must} be present in the variable name, including the leading
@c underscore.
@c 
シェル変数がキャッシュ値であることを示します．この文字列は，前置されるア
ンダースコアを含め，変数名に存在する@emph{必要があります}．

@item @var{value-type}
@c A convention for classifying cache values, to produce a rational naming
@c system.  The values used in Autoconf are listed in @ref{Macro Names}.
@c 
合理的な命名システムを生成するため，キャッシュ値の分類のための慣習です．
Autoconfで使用する値は，@ref{Macro Names}にリストがあります．

@item @var{specific-value}
@c Which member of the class of cache values this test applies to.
@c For example, which function (@samp{alloca}), program (@samp{gcc}), or
@c output variable (@samp{INSTALL}).
@c 
このテストが適応しているキャッシュ値のクラスのメンバーです．例えば，関数
(@samp{alloca})，プログラム(@samp{gcc})，または，出力変数
(@samp{INSTALL})です．

@item @var{additional-options}
@c Any particular behavior of the specific member that this test applies to.
@c For example, @samp{broken} or @samp{set}.  This part of the name may
@c be omitted if it does not apply.
@c 
このテストが適応している特定のメンバーの特定の動作です．例えば，
@samp{broken}や@samp{set}です．適応されない場合，名前のこの部分は省略さ
れます．
@end table

@c The values assigned to cache variables may not contain newlines.
@c Usually, their values will be boolean (@samp{yes} or @samp{no}) or the
@c names of files or functions; so this is not an important restriction.
@c 
キャッシュ変数に割り当てられた値には，改行を含めてはなりません．通常，そ
れらの値は真偽値(@samp{yes}や@samp{no})，あるいはファイルや関数の名前で
す．そのため，これは重要な制限ではありません．


@node Cache Files, Cache Checkpointing, Cache Variable Names, Caching Results
@subsection キャッシュファイル

@c A cache file is a shell script that caches the results of configure
@c tests run on one system so they can be shared between configure scripts
@c and configure runs.  It is not useful on other systems.  If its contents
@c are invalid for some reason, the user may delete or edit it.
@c 
キャッシュファイルは，コンフィグレーションスクリプトとコンフィグレーショ
ンの実行の間で結果を共有できるように，一つのシステムでコンフィグレーショ
ンテストの結果をキャッシュするしているシェルスクリプトです．他のシステム
では役に立ちません．その内容が，理由があって無効になる場合，ユーザは削除
したり編集したりできます．

@c By default, @code{configure} uses no cache file (technically, it uses
@c @option{--cache-file=/dev/null}), to avoid problems caused by accidental
@c use of stale cache files.
@c 
デフォルトで，古いキャッシュファイルの使用で偶然生じる問題を避けるため，
@code{configure}はキャッシュファイルを使用しません(技術的には，
@option{--cache-file=/dev/null}を使用します)．

@c To enable caching, @code{configure} accepts @option{--config-cache} (or
@c @option{-C}) to cache results in the file @file{config.cache}.
@c Alternatively, @option{--cache-file=@var{file}} specifies that
@c @var{file} be the cache file.  The cache file is created if it does not
@c exist already.  When @code{configure} calls @code{configure} scripts in
@c subdirectories, it uses the @option{--cache-file} argument so that they
@c share the same cache.  @xref{Subdirectories}, for information on
@c configuring subdirectories with the @code{AC_CONFIG_SUBDIRS} macro.
@c 
キャッシュを利用可能にするために，@code{configure}は結果をファイル
@file{config.cache}にキャッシュする@option{--config-cache}(または，
@option{-C})を受け入れます．代わり方法として，
@option{--cache-file=@var{file}}でキャッシュファイルにする@var{file}を指
定します．@code{configure}がサブディレクトリの@code{configure}スクリプト
を呼び出すとき，同じキャッシュファイルを共有するように，
@option{--cache-file}引数を使用します．@code{AC_CONFIG_SUBDIRS}マクロを
用いてサブディレクトリでコンフィグレーションすることの情報は，
@xref{Subdirectories}.

@c @file{config.status} only pays attention to the cache file if it is
@c given the @option{--recheck} option, which makes it rerun
@c @code{configure}.
@c 
@file{config.status}は，@code{configure}を再実行する@option{--recheck}オ
プションが与えられている場合のみ，キャッシュファイルに注意を払います．

@c It is wrong to try to distribute cache files for particular system types.
@c There is too much room for error in doing that, and too much
@c administrative overhead in maintaining them.  For any features that
@c can't be guessed automatically, use the standard method of the canonical
@c system type and linking files (@pxref{Manual Configuration}).
@c 
特定のシステム形式に対してキャッシュファイルを配布しようとすることは間違
いです．そうすることによるエラーに対する場所が非常に多くなり，メンテナン
ス時の管理上のオーバーヘッドが非常に多くなります．自動的に推測できない特
徴に対して，標準的なシステムの形式とリンクファイルの標準的な方法を使用し
てください (@pxref{Manual Configuration})．

@c The site initialization script can specify a site-wide cache file to
@c use, instead of the usual per-program cache.  In this case, the cache
@c file will gradually accumulate information whenever someone runs a new
@c @code{configure} script.  (Running @code{configure} merges the new cache
@c results with the existing cache file.)  This may cause problems,
@c however, if the system configuration (e.g. the installed libraries or
@c compilers) changes and the stale cache file is not deleted.
@c 
サイト初期化スクリプトは，通常のプログラム毎のキャッシュの代わりに，使用
するサイト全体のキャッシュファイルを指定することが可能です．この場合，
キャッシュファイルは，新しい@code{configure}スクリプトを実行する度に，情
報がどんどん蓄積されていきます．(@code{configure}を実行すると，既存のキャッ
シュファイルを用いて新しい結果をマージします．) しかし，システムのコンフィ
グレーションが(例えば，ライブラリやコンパイラをインストールされて)変化し，
古いキャッシュファイルが削除されない場合，これは問題になるかもしれません．


@node Cache Checkpointing,  , Cache Files, Caching Results
@subsection キャッシュのチェックポイント方法

@c If your configure script, or a macro called from configure.ac, happens
@c to abort the configure process, it may be useful to checkpoint the cache
@c a few times at key points using @code{AC_CACHE_SAVE}.  Doing so will
@c reduce the amount of time it takes to re-run the configure script with
@c (hopefully) the error that caused the previous abort corrected.
@c 
@code{configure}スクリプトや@file{configure.ac}から呼び出されるマクロが
コンフィグレーション処理を中断する場合，２，３回@code{AC_CACHE_SAVE}を使
用して，キーポイントでキャッシュのチェックポイントにすることが役に立ちま
す．そうすると，(おそらく)前に異常終了を引き起こしたエラーを修正すること
で，@code{configure}スクリプトを再実行する時間が大幅に削減されます．

@c FIXME: Do we really want to document this guy?
@defmac AC_CACHE_LOAD
@maindex CACHE_LOAD
@c Loads values from existing cache file, or creates a new cache file if a
@c cache file is not found.  Called automatically from @code{AC_INIT}.
@c 
既存のキャッシュファイルから値をロードする，あるいは，キャッシュファイル
がない場合，新しいキャッシュファイルを作成します．自動的に@code{AC_INIT} 
から呼び出されます．
@end defmac

@defmac AC_CACHE_SAVE
@maindex CACHE_SAVE
@c Flushes all cached values to the cache file.  Called automatically from
@c @code{AC_OUTPUT}, but it can be quite useful to call
@c @code{AC_CACHE_SAVE} at key points in configure.ac.
@c 
キャッシュファイルに全てのキャッシュ値を書き込みます．自動的に 
@code{AC_OUTPUT}から呼び出されますが，@file{configure.ac}のキーポイント
で@code{AC_CACHE_SAVE}を呼び出すことは，大変役に立つはずです．
@end defmac

@c For instance:
@c 
例えば，以下のようにします．

@example
@r{ @dots{} AC_INIT, etc. @dots{}}
@group
# Checks for programs.
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
@r{ @dots{} more program checks @dots{}}
AC_CACHE_SAVE
@end group

@group
# Checks for libraries.
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, connect)
@r{ @dots{} more lib checks @dots{}}
AC_CACHE_SAVE
@end group

@group
# Might abort...
AM_PATH_GTK(1.0.2,, (exit 1); exit)
AM_PATH_GTKMM(0.9.5,, (exit 1); exit)
@end group
@r{ @dots{} AC_OUTPUT, etc. @dots{}}
@end example


@node Printing Messages,  , Caching Results, Results
@section メッセージの出力
@cindex Messages, from @code{configure}

@c @code{configure} scripts need to give users running them several kinds
@c of information.  The following macros print messages in ways appropriate
@c for each kind.  The arguments to all of them get enclosed in shell
@c double quotes, so the shell performs variable and back-quote
@c substitution on them.
@c 
@code{configure}スクリプトは，それらを実行しているユーザに，何種類かの情
報を与える必要があります．以下のマクロは，それぞれの種類に対して適切な方
法でメッセージを出力します．全ての引数は，シェルのダブルクオートで囲まれ
ているので，シェルは変数とバッククオートの代入を実行します．

@c These macros are all wrappers around the @code{echo} shell command.
@c @code{configure} scripts should rarely need to run @code{echo} directly
@c to print messages for the user.  Using these macros makes it easy to
@c change how and when each kind of message is printed; such changes need
@c only be made to the macro definitions and all of the callers will change
@c automatically.
@c 
これらのマクロは，@code{echo}シェルコマンドを全てラップします．
@code{configure}スクリプトは，ユーザに対してメッセージを出力するため，直
接@code{echo}を実行する必要は滅多にありません．これらのマクロを使用する
と，出力されるそれぞれのメッセージの種類を，いつでもどのようにでも簡単に
変更できます．そのような変更は，マクロ定義の変更のみで必要で，呼び出し側
は自動的に変更されます．

@c To diagnose static issues, i.e., when @code{autoconf} is run, see
@c @ref{Reporting Messages}.
@c 
静的な問題を診断するため，例えば@code{autoconf}が実行されるときは，
@ref{Reporting Messages}を参照してください．

@defmac AC_MSG_CHECKING (@var{feature-description})
@maindex MSG_CHECKING
@c Notify the user that @code{configure} is checking for a particular
@c feature.  This macro prints a message that starts with @samp{checking }
@c and ends with @samp{...} and no newline.  It must be followed by a call
@c to @code{AC_MSG_RESULT} to print the result of the check and the
@c newline.  The @var{feature-description} should be something like
@c @samp{whether the Fortran compiler accepts C++ comments} or @samp{for
@c c89}.
@c 
@code{configure}が調査している特徴を，ユーザに通知します．このマクロは 
@samp{checking }で始まり@samp{...}で終る，改行無しのメッセージを出力しま
す．調査の結果と改行のため，@code{AC_MSG_RESULT}を続けて呼び出す必要があ
ります．@var{feature-description}は@samp{FortranコンパイラがC++のコメン
トを受け入れるかどうか(whether the Fortran compiler accepts C++
comments)}や@samp{c89の調査(for c89)}のようなものです．

@c This macro prints nothing if @code{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@code{configure}が@samp{--quiet}や@samp{--silent}オプションを用いて実行
されている場合，このマクロは何も出力しません．
@end defmac

@defmac AC_MSG_RESULT (@var{result-description})
@maindex MSG_RESULT
@c Notify the user of the results of a check.  @var{result-description} is
@c almost always the value of the cache variable for the check, typically
@c @samp{yes}, @samp{no}, or a file name.  This macro should follow a call
@c to @code{AC_MSG_CHECKING}, and the @var{result-description} should be
@c the completion of the message printed by the call to
@c @code{AC_MSG_CHECKING}.
@c 
調査結果をユーザに通知します．@var{result-description}は，ほとんどいつも
調査に対するキャッシュ変数の値で，普通は@samp{yes}，@samp{no}，またはファ
イル名になります．このマクロは@code{AC_MSG_CHECKING}の呼び出しに続けるべ
きで，@var{result-description}は，@code{AC_MSG_CHECKING}の呼び出しで出力
されるメッセージを完成するものにするべきです．

@c This macro prints nothing if @code{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@code{configure}が@samp{--quiet}や@samp{--silent}オプションで実行される
場合，このマクロは何も出力しません．
@end defmac

@defmac AC_MSG_NOTICE (@var{message})
@maindex MSG_NOTICE
@c Deliver the @var{message} to the user. It is useful mainly to print a
@c general description of the overall purpose of a group of feature checks,
@c e.g.,
@c 
@var{message}をユーザに伝えます．特徴を調査しているグループ全体の特徴に
ついて，例えば以下のような，一般的な記述を出力するときに主に役に立ちます．

@example
AC_MSG_NOTICE([checking if stack overflow is detectable])
@end example

@c This macro prints nothing if @code{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@code{configure}が@samp{--quiet}や@samp{--silent}オプションで実行される
場合，このマクロは何も出力しません．
@end defmac

@defmac AC_MSG_ERROR (@var{error-description}, @r{[}@var{exit-status}@r{]})
@maindex MSG_ERROR
@c Notify the user of an error that prevents @code{configure} from
@c completing.  This macro prints an error message to the standard error
@c output and exits @code{configure} with @var{exit-status} (1 by default).
@c @var{error-description} should be something like @samp{invalid value
@c $HOME for \$HOME}.
@c 
@code{configure}の完了を妨げるエラーをユーザに通知します．このマクロは，
エラーメッセージを標準エラー出力に出力し，@code{configure}は
@var{exit-status}(デフォルトは1)で終了します．@var{error-description}は
@samp{\$HOMEに対し$HOMEは無効な値です(invalid value $HOME for \$HOME)}の
ようにすべきです．

@c The @var{error-description} should start with a lower-case letter, and
@c ``cannot'' is preferred to ``can't''.
@c 
@var{error-description}は小文字で開始すべきで，``can't''より``cannot''の
ほうが好ましいでしょう．
@end defmac

@defmac AC_MSG_WARN (@var{problem-description})
@maindex MSG_WARN
@c Notify the @code{configure} user of a possible problem.  This macro
@c prints the message to the standard error output; @code{configure}
@c continues running afterward, so macros that call @code{AC_MSG_WARN} should
@c provide a default (back-up) behavior for the situations they warn about.
@c @var{problem-description} should be something like @samp{ln -s seems to
@c make hard links}.
@c 
可能性のある問題を@code{configure}しているユーザに通知します．このマクロ
は，標準エラー出力にメッセージを出力します．@code{configure}はその後も実
行を続けるので，@code{AC_MSG_WARN}を呼び出すマクロでは，警告するような状
態に対して，デフォルト(バックアップ)の動作を供給すべきです． 
@var{problem-description}は@samp{ln -s はハードリンクされます(ln -s
seems to make hard links)}のようなものにすべきです．
@end defmac



@c ====================================================== Programming in M4.

@node Programming in M4, Writing Autoconf Macros, Results, Top
@chapter M4でのプログラミング

@c Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
@c convenient macros for pure M4 programming, and @dfn{M4sh}, which
@c provides macros dedicated to shell script generation.
@c 
Autoconfは，2つのレイヤーのトップに書かれています．それは，純粋なM4プロ
グラムで便利なマクロを提供している@dfn{M4sugar}と，シェルスクリプトの生
成に専念するマクロを提供する@dfn{M4sh}です．

@c As of this version of Autoconf, these two layers are still experimental,
@c and their interface might change in the future.  As a matter of fact,
@c @emph{anything that is not documented must not be used}.
@c 
このバージョンのAutoconfでは，2つのレイヤーはまだ実験段階で，そのインター
フェースは将来変更される可能性があります．実際問題，@emph{文章化されてい
ないものは使用しないでください}．

@menu
* M4 Quotation::                Protecting macros from unwanted expansion
* Programming in M4sugar::      Convenient pure M4 macros
@end menu

@node M4 Quotation, Programming in M4sugar, Programming in M4, Programming in M4
@section M4の引用符
@cindex quotation

@c FIXME: Grmph, yet another quoting myth: quotation has *never*
@c prevented `expansion' of $1.  Unless it refers to the expansion
@c of the value of $1?  Anyway, we need a rewrite here@dots{}

@c The most common brokenness of existing macros is an improper quotation.
@c This section, which users of Autoconf can skip, but which macro writers
@c @emph{must} read, first justifies the quotation scheme that was chosen
@c for Autoconf and then ends with a rule of thumb.  Understanding the
@c former helps one to follow the latter.
@c 
既存のマクロの最も一般的な問題は，不適当な引用符です．このセクションでは，
Autoconfのユーザは飛ばすことができますが，マクロを書く人は読む@emph{必要
があり}，最初にAutoconfで採択された引用符を利用する方法を正当化し，最後
に経験則を述べます．前者を理解すると後者で役立ちます．

@menu
* Active Characters::           Characters that change the behavior of m4
* One Macro Call::              Quotation and one macro call
* Quotation and Nested Macros::  Macros calling macros
* Quadrigraphs::                Another way to escape special characters
* Quotation Rule Of Thumb::     One parenthesis, one quote
@end menu

@node Active Characters, One Macro Call, M4 Quotation, M4 Quotation
@subsection アクティブな文字

@c To fully understand where proper quotation is important, you first need
@c to know what are the special characters in Autoconf: @samp{#} introduces
@c a comment inside which no macro expansion is performed, @samp{,}
@c separates arguments, @samp{[} and @samp{]} are the quotes themselves,
@c and finally @samp{(} and @samp{)} (which @code{m4} tries to match by
@c pairs).
@c 
適切な引用符の重要性を完全に理解するため，最初にAutoconfでの特殊な文字を
しる必要があります．@samp{#}は内部コメントの導入で，幕との拡張は実行され
ず，@samp{,}は引数のセパレータ，@samp{[}と@samp{]}はそれらの引用符，そし
て最後は，(@code{m4}が対の一致を試みる)@samp{(}と@samp{)}です．

@c In order to understand the delicate case of macro calls, we first have
@c to present some obvious failures.  Below they are ``obvious-ified'',
@c although you find them in real life, they are usually in disguise.
@c 
マクロ呼び出しの微妙な状況を理解するために，最初に明らかな失敗を紹介しな
ければならないでしょう．以下は``明らかなified''で，実生活でも見つかるで
しょうが，それらは通常ごまかしです．

@c Comments, introduced by a hash and running up to the newline, are opaque
@c tokens to the top level: active characters are turned off, and there is
@c no macro expansion:
@c 
ハッシュと改行まで実行することで導入されるコメントは，トップレベルへの不
明瞭なトークンです．アクティブな文字はそうではなくなり，マクロの展開もあ
りません．

@example
# define([def], ine)
@result{}# define([def], ine)
@end example

@c Each time there can be a macro expansion, there is a quotation
@c expansion; i.e., one level of quotes is stripped:
@c 
マクロの展開がある毎に，引用符も展開されます．すなわち，第1レベルの引用
符は削除されます．

@example
int tab[10];
@result{}int tab10;
[int tab[10];]
@result{}int tab[10];
@end example

@c Without this in mind, the reader will try hopelessly to use her macro
@c @code{array}:
@c 
これを覚えていなければ，読者は絶望しながらもマクロの@code{array}を使用し
てみるでしょう．

@example
define([array], [int tab[10];])
array
@result{}int tab10;
[array]
@result{}array
@end example

@noindent
@c How can you correctly output the intended results@footnote{Using
@c @code{defn}.}?
@c 
期待する結果を正しく出力するにはどうすれば良いでしょうか
@footnote{@code{defn}を使用します．}？


@node One Macro Call, Quotation and Nested Macros, Active Characters, M4 Quotation
@subsection 一つのマクロの呼び出し

@c Let's proceed on the interaction between active characters and macros
@c with this small macro, which just returns its first argument:
@c 
さて，アクティブな文字と以下の単に最初の引数を返す小さなマクロを用いたマ
クロで，対話的に進めていきましょう．

@example
define([car], [$1])
@end example

@noindent
@c The two pairs of quotes above are not part of the arguments of
@c @code{define}; rather, they are understood by the top level when it
@c tries to find the arguments of @code{define}.  Therefore, it is
@c equivalent to write:
@c 
上記の二組の引用符は@code{define}の引数の一部ではありません．そうではな
く，@code{define}の引数の検索が試みられるときに，それらはトップレベルで
理解されます．そのため，それは以下のように書くことと等価です．

@example
define(car, $1)
@end example

@noindent
@c But, while it is acceptable for a @file{configure.ac} to avoid unneeded
@c quotes, it is bad practice for Autoconf macros which must both be more
@c robust and also advocate perfect style.
@c 
しかし，@file{configure.ac}が不必要な引用符を受け入れることはできますが，
より強固で，完全な形式を提案する必要もあるAutoconfマクロにとっては悪い慣
習です．

@c At the top level, there are only two possible quotings: either you
@c quote or you don't:
@c 
トップレベルでは，引用符では2つの可能性があります．引用符で囲む，または
囲まないでの二つです．

@example
car(foo, bar, baz)
@result{}foo
[car(foo, bar, baz)]
@result{}car(foo, bar, baz)
@end example

@c Let's pay attention to the special characters:
@c 
特殊文字に注目してみましょう．

@example
car(#)
@error{}EOF in argument list
@end example

@c The closing parenthesis is hidden in the comment; with a hypothetical
@c quoting, the top level understood it this way:
@c 
閉じカッコはコメント内に隠れてしまいます．引用符を推測することで，トップ
レベルでは以下のように理解します．

@example
car([#)]
@end example

@noindent
@c Proper quotation, of course, fixes the problem:
@c 
適切な引用符は，もちろんこの問題を修正します．

@example
car([#])
@result{}#
@end example

@c The reader will easily understand the following examples:
@c 
読者は，以下の例の方が理解しやすいかもしれません．

@example
car(foo, bar)
@result{}foo
car([foo, bar])
@result{}foo, bar
car((foo, bar))
@result{}(foo, bar)
car([(foo], [bar)])
@result{}(foo
car([], [])
@result{}
car([[]], [[]])
@result{}[]
@end example

@c With this in mind, we can explore the cases where macros invoke
@c macros@dots{}
@c 
これを覚えていると，次ののような状況も調査することが可能です．
マクロがマクロを呼び出し，マクロがマクロを呼び出し@dots{}


@node Quotation and Nested Macros, Quadrigraphs, One Macro Call, M4 Quotation
@subsection 引用符と入れ子状のマクロ

@c The examples below use the following macros:
@c 
これ以降の例では，以下のマクロを使用しています．

@example
define([car], [$1])
define([active], [ACT, IVE])
define([array], [int tab[10]])
@end example

@c Each additional embedded macro call introduces other possible
@c interesting quotations:
@c 
追加の埋め込まれたマクロ呼び出しは，それぞれ興味深い引用符について，その
他の可能性を導き出します．

@example
car(active)
@result{}ACT
car([active])
@result{}ACT, IVE
car([[active]])
@result{}active
@end example

@c In the first case, the top level looks for the arguments of @code{car},
@c and finds @samp{active}.  Because @code{m4} evaluates its arguments
@c before applying the macro, @samp{active} is expanded, which results in:
@c 
最初の状況では，トップレベルでは@code{car}の引数を探し，@samp{active}が
見つかります．@code{m4}はマクロを適用する前のその引数と等価なので，
@samp{active}は展開され，結果として以下のようになります．

@example
car(ACT, IVE)
@result{}ACT
@end example

@noindent
@c In the second case, the top level gives @samp{active} as first and only
@c argument of @code{car}, which results in:
@c 
2番目の状況では，トップレベルは@code{car}の最初で唯一の引数として
@samp{active}を与えるので，結果として以下のようになります．

@example
active
@result{}ACT, IVE
@end example

@noindent
@c i.e., the argument is evaluated @emph{after} the macro that invokes it.
@c In the third case, @code{car} receives @samp{[active]}, which results in:
@c 
すなわち，マクロが呼び出された@emph{後で}，引数が評価されます．3番目の状
況では，@code{car}は@samp{[active]}を受けとり，結果として以下のようにな
ります．

@example
[active]
@result{}active
@end example

@noindent
@c exactly as we already saw above.
@c 
上記で見たものと同じですね．

@c The example above, applied to a more realistic example, gives:
@c 
より現実的な例を適用して，上記の例に与えてみましょう．

@example
car(int tab[10];)
@result{}int tab10;
car([int tab[10];])
@result{}int tab10;
car([[int tab[10];]])
@result{}int tab[10];
@end example

@noindent
@c Huh?  The first case is easily understood, but why is the second wrong,
@c and the third right?  To understand that, you must know that after
@c @code{m4} expands a macro, the resulting text is immediately subjected
@c to macro expansion and quote removal.  This means that the quote removal
@c occurs twice---first before the argument is passed to the @code{car}
@c macro, and second after the @code{car} macro expands to the first
@c argument.
@c 
う〜ん？ 最初の状況は簡単に理解できますが，なぜ2番目が間違っていて，3番
得は正しいのでしょうか？それを理解するために，@code{m4}がマクロを展開し
た後，結果として生じるテキストがすぐにマクロを展開に従って引用符が取り除
かれることを知っておく必要があります．これは，引用符の削除が2回行なわれ
ることを意味します---最初に引数として@code{car}マクロに渡されるとき，2回
目は@code{car}マクロが最初の引数を展開するときです．

@c As the author of the Autoconf macro @code{car}, you then consider it to
@c be incorrect that your users have to double-quote the arguments of
@c @code{car}, so you ``fix'' your macro.  Let's call it @code{qar} for
@c quoted car:
@c 
Autoconfマクロ@code{car}の作者として，ユーザが@code{car}の引数を二重の引
用符にする必要があることは間違っていると考えるようにし，マクロを@emph{修
正}してください．引用符で囲まれている@code{car}に対して，それを
@code{qar}と呼ぶことにしましょう．

@example
define([qar], [[$1]])
@end example

@noindent
@c and check that @code{qar} is properly fixed:
@c 
そして，@code{qar}が適切に修正されていることを調査してみます．

@example
qar([int tab[10];])
@result{}int tab[10];
@end example

@noindent
@c Ahhh!  That's much better.
@c 
ああ！そうした方が良さそうですね．

@c But note what you've done: now that the arguments are literal strings,
@c if the user wants to use the results of expansions as arguments, she has
@c to use an @emph{unquoted} macro call:
@c 
しかし，自分が行なったことに注意してください．現在その引数はリテラル文字
列ですが，引数を展開した結果をユーザが使用したい場合，@emph{引用符で囲ま
れていない}マクロを使用する必要があります．

@example
qar(active)
@result{}ACT
@end example

@noindent
@c where she wanted to reproduce what she used to do with @code{car}:
@c 
@code{car}を用いて行なっていたことを再生成したい状況を考えます．

@example
car([active])
@result{}ACT, IVE
@end example

@noindent
@c Worse yet: she wants to use a macro that produces a set of @code{cpp}
@c macros:
@c 
まだ駄目ですね．@code{cpp}マクロの組を生成するマクロを使用したい状況を考
えてみましょう．

@example
define([my_includes], [#include <stdio.h>])
car([my_includes])
@result{}#include <stdio.h>
qar(my_includes)
@error{}EOF in argument list
@end example

@c This macro, @code{qar}, because it double quotes its arguments, forces
@c its users to leave their macro calls unquoted, which is dangerous.
@c Commas and other active symbols are interpreted by @code{m4} before
@c they are given to the macro, often not in the way the users expect.
@c Also, because @code{qar} behaves differently from the other macros,
@c it's an exception that should be avoided in Autoconf.
@c 
このマクロ@code{qar}は，引数を二重に引用符で囲むので，ユーザはマクロの呼
び出しを引用符で囲まないままにしておくよう強制され，それは危険です．カン
マとその他のアクティブなシンボルは，マクロに渡される前に@code{m4}で解釈
され，それはユーザが期待している手法ではないことが多いものです．また，
@code{qar}は，他のマクロとは異なる動作をするので，Autoconfでは避けるべき
だということが期待されます．


@node Quadrigraphs, Quotation Rule Of Thumb, Quotation and Nested Macros, M4 Quotation
@subsection 4文字表記
@cindex quadrigraphs
@cindex @samp{@@<:@@}
@cindex @samp{@@:>@@}
@cindex @samp{@@S|@@}
@cindex @samp{@@%:@@}

@c When writing an autoconf macro you may occasionally need to generate
@c special characters that are difficult to express with the standard
@c autoconf quoting rules.  For example, you may need to output the regular
@c expression @samp{[^[]}, which matches any character other than @samp{[}.
@c This expression contains unbalanced brackets so it cannot be put easily
@c into an M4 macro.
@c 
autoconfマクロを書いているとき，標準的なautoconfの引用符の規則で表現する
ことが難しい，特殊な文字を生成する必要が生じるかもしれません．例えば，
@samp{[}以外の全ての文字に一致する正規表現@samp{[^[]}を出力する必要があ
るかもしれません．この表現は，対称ではないカッコを含んでいるので，M4マク
ロの中に簡単に書き込むことはできません．

@c You can work around this problem by using one of the following
@c @dfn{quadrigraphs}:
@c 
以下の@dfn{4文字表記}の一つを使用することで，この問題を解決することが
できます．

@table @samp
@item @@<:@@
@samp{[}
@item @@:>@@
@samp{]}
@item @@S|@@
@samp{$}
@item @@%:@@
@samp{#}
@end table

@c Quadrigraphs are replaced at a late stage of the translation process,
@c after @command{m4} is run, so they do not get in the way of M4 quoting.
@c For example, the string @samp{[^@@<:@@]}, if properly quoted, will
@c appear as @samp{[^[]} in the @code{configure} script.
@c 
4文字表記は，@command{m4}が実行された後，変換処理の終りの段階で置換され
るので，M4の引用符の邪魔になりません．例えば，文字列@samp{[^@@<:@@]}は，
適切に引用符で囲まれている場合，@code{configure}スクリプトでは
@samp{[^[]}として現れます．


@node Quotation Rule Of Thumb,  , Quadrigraphs, M4 Quotation
@subsection 引用の経験則

@c To conclude, the quotation rule of thumb is:
@c 
終りに引用の経験則を述べます．

@center カッコの組毎に引用符の組(@emph{One pair of quotes per pair of parentheses.})

@c Never over-quote, never under-quote, in particular in the definition of
@c macros.  In the few places where the macros need to use brackets
@c (usually in C program text or regular expressions), properly quote
@c @emph{the arguments}!
@c 
特にマクロ定義では，多過ぎる引用符もだめ，少な過ぎる引用符も駄目です．カッ
コを使用する必要があるマクロ(通常Cのプログラム文や正規表現の中)では，適
切に@emph{引数を}引用符で囲んでください！

@c It is common to read Autoconf programs with snippets like:
@c 
以下のような断片を用いたAutoconfプログラムを読むことはよくあります．

@example
AC_TRY_LINK(
changequote(<<, >>)dnl
<<#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif>>,
changequote([, ])dnl
[atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
@end example

@noindent
@c which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
@c double quoting, so you just need:
@c 
それは，@code{AC_TRY_LINK}は@emph{すでに}二重に引用符で囲まれているので， 
全く無駄になり，実際は以下のようにするだけで十分です．

@example
AC_TRY_LINK(
[#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif],
            [atoi (*tzname);],
            [ac_cv_var_tzname=yes],
            [ac_cv_var_tzname=no])
@end example

@noindent
@c The M4-fluent reader will note that these two examples are rigorously
@c equivalent, since @code{m4} swallows both the @samp{changequote(<<, >>)}
@c and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
@c quotes are not part of the arguments!
@c 
M4に親しんでいる読者は，@code{m4}が引数を@dfn{まとめる}ときに
@samp{changequote(<<, >>)}と@samp{<<} @samp{>>}の両方を飲み込むので，こ
れら二つの例が厳密に等価であることに注意してください．これらの引用符は引
数の一部ではありません！

@c Simplified, the example above is just doing this:
@c 
単純にしてみると，上記の例は以下のようになります．

@example
changequote(<<, >>)dnl
<<[]>>
changequote([, ])dnl
@end example

@noindent
@c instead of simply:
@c 
その代わりに単純に以下のようにします．

@example
[[]]
@end example


@c With macros that do not double quote their arguments (which is the
@c rule), double-quote the (risky) literals:
@c 
引数を(規則で)二重に引用符で囲まないマクロを用いると，二重の引用は(危険
な)文字列になります．

@example
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif]],
                                [atoi (*tzname);])],
               [ac_cv_var_tzname=yes],
               [ac_cv_var_tzname=no])
@end example

@c See @xref{Quadrigraphs}, for what to do if you run into a hopeless case
@c where quoting does not suffice.
@c 
引用符が十分でない状況で望みがなくなった場合どうすればいいかということに
ついては，@xref{Quadrigraphs}.

@c When you create a @code{configure} script using newly written macros,
@c examine it carefully to check whether you need to add more quotes in
@c your macros.  If one or more words have disappeared in the @code{m4}
@c output, you need more quotes.  When in doubt, quote.
@c 
新たに書かれたマクロを用いて@code{configure}スクリプトを作成するとき，マ
クロにより多くの引用符を加える必要があるかどうかの調査は，気を付けて吟味
してください．一つ以上の単語が@code{m4}の出力に現れない場合，より多くの
引用符が必要になります．迷ったときは引用符です．

@c However, it's also possible to put on too many layers of quotes.  If
@c this happens, the resulting @code{configure} script will contain
@c unexpanded macros.  The @code{autoconf} program checks for this problem
@c by doing @samp{grep AC_ configure}.
@c 
しかし，引用符のレイヤーが多過ぎる可能性もあります．この場合は，結果とし
て得られる@code{configure}スクリプトは，展開されていないマクロが含まれて
いるでしょう．@code{autoconf}プログラムは，@samp{grep AC_ configure}を行
なうことでこの問題を調査します．


@node Programming in M4sugar,  , M4 Quotation, Programming in M4
@section M4sugarでのプログラミング

@cindex M4sugar
@c M4 by itself provides only a small, but sufficient, set of all-purpose
@c macros.  M4sugar introduces additional generic macros.  Its name was
@c coined by Lars J. Aas: ``Readability And Greater Understanding Stands 4
@c M4sugar''.
@c 
M4自身は非常に小さいけれど十分な，汎用マクロの組を提供しています．
M4sugarは，追加の一般的なマクロを導入しています．その名前は，Lars J. Aas 
によってつくり出されました：``Readability And Greater Understanding
Stands 4 M4sugar''．

@menu
* Redefined M4 Macros::         M4 builtins changed in M4sugar
* Forbidden Patterns::          Catching unexpanded macros
@end menu

@node Redefined M4 Macros, Forbidden Patterns, Programming in M4sugar, Programming in M4sugar
@subsection M4マクロの再定義

@c All the M4 native macros are moved in the @samp{m4_} pseudo-namespace,
@c e.g., M4sugar renames @code{define} as @code{m4_define} etc.  There is
@c one exception: @code{dnl} kept its original name, and no @code{m4_dnl}
@c is defined.
@c 
全てのM4ネイティブなマクロは，@samp{m4_}疑似名前空間に移動されていて，例
えば，M4sugarでは@code{define}を@code{m4_define}に名前を変えるなどのよう
になっています．一つだけ例外があります．@code{dnl}は元の名前のままで，
@code{m4_dnl}は定義されていません．

@c M4sugar redefines some M4 macros, and made them slightly incompatible
@c with their native equivalent.
@c 
M4sugarは，いくつかのM4マクロを再定義していて，ネイティブな同義語とわず
かに互換性がなくなっています．

@defmac m4_defn (@var{macro})
@msindex defn
@c Contrary to the M4 builtin, this macro fails if @var{macro} is not
@c defined.  See @code{m4_undefine}.
@c 
M4組み込みのものと比較して，このマクロは，@var{macro}が定義されていない
場合は失敗します．@code{m4_undefine}を参照してください．
@end defmac

@defmac m4_undefine (@var{macro})
@msindex undefine
@c Contrary to the M4 builtin, this macro fails if @var{macro} is not
@c defined.  Use
@c 
M4組み込みのものと比較して，このマクロは，@var{macro}が定義されていない
場合は失敗します．以下のように使用してください．

@example
m4_ifdef([@var{macro}], [m4_undefine([@var{macro}])])
@end example

@noindent
@c to recover the behavior of the builtin.
@c 
それは，組み込みの動作に復旧します．
@end defmac

@defmac m4_popdef (@var{macro})
@msindex defn
@c Contrary to the M4 builtin, this macro fails if @var{macro} is not
@c defined.  See @code{m4_undefine}.
@c 
M4組み込みのものと比較して，このマクロは，@var{macro}が定義されていない
場合は失敗します．@code{m4_undefine}を参照してください．
@end defmac


@node Forbidden Patterns,  , Redefined M4 Macros, Programming in M4sugar
@subsection 禁止されているパターン

@c M4sugar provides a means to define suspicious patterns, patterns
@c describing tokens which should not be found in the output.  For
@c instance, if an Autoconf @file{configure} script includes tokens such as
@c @samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
@c wrong (typically a macro was not evaluated because of over quotation).
@c 
M4sugar提供の目的は，怪しげはパターン，つまり出力に現れるべきではないトー
クンを記述しているパターンを定義するためです．例えば，Autoconf
@file{configure}スクリプトに@samp{AC_DEFINE}や@samp{dnl}のようなトークン
が含められている場合，おそらく何か問題が発生するでしょう(通常は，余分な
引用符のためにマクロが評価されていないためです) ．

@c M4sugar forbids all the tokens matching @samp{^m4_} and @samp{^dnl$}.
@c 
M4sugarは，@samp{^m4_}と@samp{^dnl$}に一致する全てのトークンを禁止します．

@defmac m4_pattern_forbid (@var{pattern})
@msindex pattern_forbid
@c Declare no token matching @var{pattern} must be found in the output.
@c Comments are not checked; this can be a problem if, for instance, you
@c have some macro left unexpanded after an @samp{#include}.  No consensus
@c is currently found in the Autoconf community, as some people consider it
@c should be valid to name macros in comments (which doesn't makes sense to
@c the author of this documentation, as @samp{#}-comments should document
@c the output, not the input, documented vy @samp{dnl}-comments).
@c 
出力にある必要のある@var{pattern}に一致するトークンを宣言しません．コメ
ントは調査されません．これは，例えば，@samp{#include}より後に展開されな
いまま残っているマクロがある場合，問題になるはずです．現在，Autoconf コ
ミュニティでは合意がとおらず，コメント内で指名されているマクロを有効にす
べきだと考えている人もいるからです(それは，このドキュメントの著者には意
味がなく，@samp{#}のコメントは，@samp{dnl}コメントで説明される入力ではな
く，出力を説明するべきだからです．)
@end defmac

@c Of course, you might encounter exceptions to these generic rules, for
@c instance you might have to refer to @samp{$m4_flags}.
@c 
もちろん，これらの一般的な規則の例外に遭遇する可能性もあり，例えば，
@samp{$m4_flags}を参照する必要があるかもしれません．

@defmac m4_pattern_allow (@var{pattern})
@msindex pattern_allow
@c Any token matching @var{pattern} is allowed, including if it matches an
@c @code{m4_pattern_forbid} pattern.
@c 
@var{pattern}に一致している全てのトークンが可能で，それには
@code{m4_pattern_forbid}パターンに一致しているものも含まれます．
@end defmac


@c=================================================== Writing Autoconf Macros.

@node Writing Autoconf Macros, Portable Shell, Programming in M4, Top
@chapter Autoconfマクロを書く

@c When you write a feature test that could be applicable to more than one
@c software package, the best thing to do is encapsulate it in a new macro.
@c Here are some instructions and guidelines for writing Autoconf macros.
@c 
一つ以上のソフトウェアパッケージに適用する特徴テストを書くとき，新しいマ
クロの中にそれをカプセル化することが最も良い方法です．Autoconfマクロを書
くための説明とガイドラインは以下のようになります．

@menu
* Macro Definitions::           Basic format of an Autoconf macro
* Macro Names::                 What to call your new macros
* Reporting Messages::          Notifying @code{autoconf} users
* Dependencies Between Macros::  What to do when macros depend on other macros
* Obsoleting Macros::           Warning about old ways of doing things
* Coding Style::                Writing Autoconf macros @`a la Autoconf
@end menu

@node Macro Definitions, Macro Names, Writing Autoconf Macros, Writing Autoconf Macros
@section マクロの定義

@maindex DEFUN
@c Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
@c similar to the M4 builtin @code{define} macro.  In addition to defining
@c a macro, @code{AC_DEFUN} adds to it some code that is used to constrain
@c the order in which macros are called (@pxref{Prerequisite Macros}).
@c 
Autoconfマクロは，M4組み込みの@code{define}マクロに似ている，
@code{AC_DEFUN}マクロを使用して定義されています．マクロ定義に加える際，
@code{AC_DEFUN}は，マクロを呼び出す順番を制限するために使用されるコード
を加えます(@pxref{Prerequisite Macros})．

@c An Autoconf macro definition looks like this:
@c 
Autoconfマクロ定義は以下のようになります．

@example
AC_DEFUN(@var{macro-name}, @var{macro-body})
@end example

@c You can refer to any arguments passed to the macro as @samp{$1},
@c @samp{$2}, etc.  @xref{Definitions,, How to define new macros, m4.info,
@c GNU m4}, for more complete information on writing M4 macros.
@c 
マクロに渡す引数は，@samp{$1}，@samp{$2}等のように参照することが可能です．
M4マクロを書く際の完全な情報は，@xref{Definitions, , How to
define new macros, m4.info, GNU m4}.

@c Be sure to properly quote both the @var{macro-body} @emph{and} the
@c @var{macro-name} to avoid any problems if the macro happens to have
@c been previously defined.
@c 
マクロが偶然前に定義されている場合の問題を避けるために，
@var{macro-body}@emph{と}@var{macro-name}の両方を，適切に引用符で囲んで
いることを確かめてください．

@c Each macro should have a header comment that gives its prototype, and a
@c brief description.  When arguments have default values, display them in
@c the prototype.  For example:
@c 
それぞれのマクロには，そのプロトタイプと短い説明を付与するため，ヘッダの
コメントを書くべきです．引数がデフォルト値の場合，そのプロトタイプを表示
してください．例えば以下のようにします．

@example
# AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
# --------------------------------------
define([AC_MSG_ERROR],
[@{ _AC_ECHO([configure: error: $1], 2); exit m4_default([$2], 1); @}])
@end example

@c Comments about the macro should be left in the header comment.  Most
@c other comments will make their way into @file{configure}, so just keep
@c using @samp{#} to introduce comments.
@c 
マクロに関するコメントは，ヘッダコメントに残すべきです．その他のほとんど
のコメントは，勝手に@file{configure}に入るので，コメントを導入するために
@samp{#}を使用し続けるだけで結構です．

@cindex @code{dnl}
@c If you have some very special comments about pure M4 code, comments
@c that make no sense in @file{configure} and in the header comment, then
@c use the builtin @code{dnl}: it causes @code{m4} to discard the text
@c through the next newline.
@c 
ピュアなM4コードに関して，非常に特殊なコメントがある場合は，コメントを
@file{configure}とヘッダコメントに入れる意味がないので，組み込みの
@code{dnl}を使用してください．それで@code{m4}は，次の改行までのテキスト
を廃棄します．

@c Keep in mind that @code{dnl} is rarely needed to introduce comments;
@c @code{dnl} is more useful to get rid of the newlines following macros
@c that produce no output, such as @code{AC_REQUIRE}.
@c 
@code{dnl}がコメントの導入に必要になることは滅多にないということを覚えて
おいてください．@code{dnl}は，@code{AC_REQUIRE}のような，出力を生成しな
いマクロに続く改行を除去するときに，より役に立ちます．


@node Macro Names, Reporting Messages, Macro Definitions, Writing Autoconf Macros
@section マクロ名

@c All of the Autoconf macros have all-uppercase names starting with
@c @samp{AC_} to prevent them from accidentally conflicting with other
@c text.  All shell variables that they use for internal purposes have
@c mostly-lowercase names starting with @samp{ac_}.  To ensure that your
@c macros don't conflict with present or future Autoconf macros, you should
@c prefix your own macro names and any shell variables they use with some
@c other sequence.  Possibilities include your initials, or an abbreviation
@c for the name of your organization or software package.
@c 
全てのAutoconfマクロは，他のテキストと偶然衝突することを避けるため 
@samp{AC_}で始まる全て大文字の名前になっています．内部目的で使用する全て
のシェル変数は，@samp{ac_}で始まるほとんど小文字の名前になっています．マ
クロが，現在または将来のAutoconfマクロと衝突しないことを保証するため，マ
クロ名と他の手続きで使用するシェル変数に，独自のプレフィクスを付けてくだ
さい．可能性としては，イニシャルや組織やソフトウェアパッケージの名前の省
略を含めることになるでしょう．

@c Most of the Autoconf macros' names follow a structured naming convention
@c that indicates the kind of feature check by the name.  The macro names
@c consist of several words, separated by underscores, going from most
@c general to most specific.  The names of their cache variables use the
@c same convention (@pxref{Cache Variable Names}, for more information on
@c them).
@c 
ほとんどのAutoconfマクロ名は，名前によって調査している特徴の種類を示す，
構造化された命名則に続きます．複数の単語から成り立つマクロ名は，アンダー
スコアで分けられ，最も一般的なものから最も特殊なものへとなっています．
キャッシュ変数の名前は，同じ規則をしようしています(詳細は@pxref{Cache
Variable Names})．

@c The first word of the name after @samp{AC_} usually tells the category
@c of feature being tested.  Here are the categories used in Autoconf for
@c specific test macros, the kind of macro that you are more likely to
@c write.  They are also used for cache variables, in all-lowercase.  Use
@c them where applicable; where they're not, invent your own categories.
@c 
@samp{AC_}の後の名前の最初の単語は，通常テストしている特徴のカテゴリを伝
えるものです．よく書くマクロの種類の，テストマクロを指定するため，
Autoconfが使用するカテゴリは以下のようになっています．それらはキャッシュ
変数でも全て小文字で使用されます．適用可能なものを使用してください．無け
れば独自のカテゴリを考え出してください．

@table @code
@item C
@c C language builtin features.
@c 
C言語組み込み特徴．
@item DECL
@c Declarations of C variables in header files.
@c 
ヘッダファイルでのC変数の宣言．
@item FUNC
@c Functions in libraries.
@c 
ライブラリの関数．
@item GROUP
@c @sc{unix} group owners of files.
@c 
ファイルの@sc{unix}グループオーナー．
@item HEADER
@c Header files.
@c 
ヘッダファイル．
@item LIB
@c C libraries.
@c 
Cライブラリ．
@item PATH
@c The full path names to files, including programs.
@c 
プログラムを含むファイルのフルパス名．
@item PROG
@c The base names of programs.
@c 
プログラムのベース名．
@item MEMBER
@c Members of aggregates.
@c 
集合体のメンバ．
@item SYS
@c Operating system features.
@c 
OSの特徴．
@item TYPE
@c C builtin or declared types.
@c 
C組み込みや宣言タイプ．
@item VAR
@c C variables in libraries.
@c 
ライブラリのC変数．
@end table


@c After the category comes the name of the particular feature being
@c tested.  Any further words in the macro name indicate particular aspects
@c of the feature.  For example, @code{AC_FUNC_UTIME_NULL} checks the
@c behavior of the @code{utime} function when called with a @code{NULL}
@c pointer.
@c 
カテゴリーの後には，特定の特徴をテストしている名前が来ます．マクロ名のそ
れ以外の単語は，特徴の特定の側面を示します．例えば，
@code{AC_FUNC_UTIME_NULL}は，@code{NULL}ポインタで呼び出されたときの 
@code{utime}関数の動作を調査します．

@c An internal macro should have a name that starts with an underscore;
@c Autoconf internals should therefore start with @samp{_AC_}.
@c Additionally, a macro that is an internal subroutine of another macro
@c should have a name that starts with an underscore and the name of that
@c other macro, followed by one or more words saying what the internal
@c macro does.  For example, @code{AC_PATH_X} has internal macros
@c @code{_AC_PATH_X_XMKMF} and @code{_AC_PATH_X_DIRECT}.
@c 
内部マクロは，アンダースコアで始まる名前にすべきです．そのため，Autoconf 
内部のものは@samp{_AC_}で始まります．さらに，他のマクロ内部のサブルーチ
ンとなるマクロは，アンダースコアと他のマクロ名ではじまり，内部マクロが行
うことを伝える一つ以上の単語が続きます．例えば， @code{AC_PATH_X}は，内
部マクロに@code{_AC_PATH_X_XMKMF}と@code{_AC_PATH_X_DIRECT}があります．


@node Reporting Messages, Dependencies Between Macros, Macro Names, Writing Autoconf Macros
@section メッセージの報告
@cindex Messages, from @code{autoconf}

@c When macros statically diagnose abnormal situations, benign or fatal,
@c they should report them using these macros.  For dynamic issues, i.e.,
@c when @code{configure} is run, see @ref{Printing Messages}.
@c 
マクロが異常な状況，良性または致命的を静的に診断しているとき，以下のマク
ロを使用してそれを報告すべきです．動的な発行，すなわち@code{configure}が
実行されているときは，@ref{Printing Messages}を参照してください．

@defmac AC_DIAGNOSE (@var{category}, @var{message})
@maindex DIAGNOSE
@c Report @var{message} as a warning (or as an error if requested by the
@c user) if it falls into the @var{category}.  You are encouraged to use
@c standard categories, which currently include:
@c 
それが@var{category}に分類される場合，@var{message}を警告として(またはユー
ザが要求する場合はエラーとして)報告します．以下の現在含められている標準
的なカテゴリを使用することを勧めます．

@table @samp
@item all
@c messages that don't fall into one of the following category.  Use of an
@c empty @var{category} is equivalent.
@c 
以下のカテゴリの一つに分類されないメッセージです．空の@var{category}を使
用することと等価です．

@item cross
@c related to cross compilation issues.
@c 
クロスコンパイルに関連する問題です．

@item obsolete
@c use of an obsolete construct.
@c 
時代遅れの構成の使用です．

@item syntax
@c dubious syntactic constructs, incorrectly ordered macro calls.
@c 
曖昧な構文構成，間違った順序のマクロ呼び出しです．
@end table
@end defmac

@defmac AC_WARNING (@var{message})
@maindex WARNING
@c Equivalent to @samp{AC_DIAGNOSE([syntax], @var{message})}, but you are
@c strongly encouraged to use a finer grained category.
@c 
@samp{AC_DIAGNOSE([syntax], @var{message})}と等価ですが，より良く粒子化
されたカテゴリを使用することを推奨します．
@end defmac

@defmac AC_FATAL (@var{message})
@maindex FATAL
@c Report a severe error @var{message}, and have @code{autoconf} die.
@c 
サーバーエラー@var{message}を報告し，@code{autoconf}は終了します．
@end defmac

@c When the user runs @samp{autoconf -W error}, warnings from
@c @code{AC_DIAGNOSE} and @code{AC_WARNING} are reported as error, see
@c @ref{autoconf Invocation}.
@c 
ユーザが@samp{autoconf -W error}を実行しているとき，@code{AC_DIAGNOSE}と
@code{AC_WARNING}からの警告はエラーとして報告されます．@ref{autoconf
Invocation}を参照してください．


@node Dependencies Between Macros, Obsoleting Macros, Reporting Messages, Writing Autoconf Macros
@section マクロ間の依存性

@c Some Autoconf macros depend on other macros having been called first in
@c order to work correctly.  Autoconf provides a way to ensure that certain
@c macros are called if needed and a way to warn the user if macros are
@c called in an order that might cause incorrect operation.
@c 
他のマクロが正確に動作するように，最初に呼び出されている他のマクロに依存
するAutoconfマクロもあります．Autoconfは，必要な場合はある特定のマクロが
呼び出されていることを保証する方法と，マクロが間違った処理を引き起こす順
序で呼び出された場合に警告する方法を供給します．

@menu
* Prerequisite Macros::         Ensuring required information
* Suggested Ordering::          Warning about possible ordering problems
@end menu

@node Prerequisite Macros, Suggested Ordering, Dependencies Between Macros, Dependencies Between Macros
@subsection マクロの前提条件

@c A macro that you write might need to use values that have previously
@c been computed by other macros.  For example, @code{AC_DECL_YYTEXT}
@c examines the output of @code{flex} or @code{lex}, so it depends on
@c @code{AC_PROG_LEX} having been called first to set the shell variable
@c @code{LEX}.
@c 
書いているマクロが，以前に他のマクロが計算した値を使用する必要があるかも
しれません．例えば，@code{AC_DECL_YYTEXT}は，@code{flex}や@code{lex}の出
力を調査するので，シェル変数 @code{LEX}を設定するために，
@code{AC_PROG_LEX}が最初に呼び出されていることに依存します．

@c Rather than forcing the user of the macros to keep track of the
@c dependencies between them, you can use the @code{AC_REQUIRE} macro to do
@c it automatically.  @code{AC_REQUIRE} can ensure that a macro is only
@c called if it is needed, and only called once.
@c 
マクロのユーザにそれら間の依存性を追跡させるより，自動的にするために 
@code{AC_REQUIRE}を使用することができます．@code{AC_REQUIRE}は，必要な場
合のみマクロが呼び出され，そして一度だけ呼び出されることを保証します．

@defmac AC_REQUIRE (@var{macro-name})
@maindex REQUIRE
@c If the M4 macro @var{macro-name} has not already been called, call it
@c (without any arguments).  Make sure to quote @var{macro-name} with
@c square brackets.  @var{macro-name} must have been defined using
@c @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
@c that it has been called.
@c 
M4マクロ@var{macro-name}がまだ呼び出されていない場合，それを(引数無しで) 
呼び出します．角カッコで@var{macro-name}を囲んでいることを確認してくださ
い．@var{macro-name}は，@code{AC_DEFUN}を使用して定義されている，または
呼び出されていることを示す@code{AC_PROVIDE}の呼び出しを含んでいる必要が
あります．

@c @code{AC_REQUIRE} must be used inside an @code{AC_DEFUN}'d macro; it
@c must not be called from the top level.
@c 
@code{AC_REQUIRE}は@code{AC_DEFUN}マクロの内部で使用する必要があります．
それはトップレベルから呼び出してはなりません．
@end defmac

@c @code{AC_REQUIRE} is often misunderstood.  It really implements
@c dependencies between macros in the sense that if one macro depends upon
@c another, the latter will be expanded @emph{before} the body of the
@c former.  In particular, @samp{AC_REQUIRE(FOO)} is not replaced with the
@c body of @code{FOO}.  For instance, this definition of macros:
@c 
@code{AC_REQUIRE}はよく誤解されます．一つのマクロが他のものに依存してい
る場合，後者は前者の本体の@emph{前に}展開されるように，それはマクロ間の
依存性を実装しています．特に，@samp{AC_REQUIRE(FOO)}は，@code{FOO}の本体
では置換されません．例えば，マクロを以下のように定義したとします．

@example
@group
AC_DEFUN([TRAVOLTA],
[test "$body_temparature_in_celsius" -gt "38" &&
  dance_floor=occupied])
AC_DEFUN([NEWTON_JOHN],
[test "$hair_style" = "curly" &&
  dance_floor=occupied])
@end group

@group
AC_DEFUN([RESERVE_DANCE_FLOOR],
[if date | grep '^Sat.*pm' >/dev/null 2>&1; then
  AC_REQUIRE([TRAVOLTA])
  AC_REQUIRE([NEWTON_JOHN])
fi])
@end group
@end example

@noindent
@c with this @file{configure.ac}
@c 
これを@file{configure.ac}で使用します．

@example
AC_INIT
RESERVE_DANCE_FLOOR
if test "$dance_floor" = occupied; then
  AC_MSG_ERROR([cannot pick up here, let's move])
fi
@end example

@noindent
@c will not leave you with a better chance to meet a kindred soul at
@c other times than Saturday night since it expands into:
@c 
それは以下のように展開されるので，土曜日の夜以外に仲間に会う機会が残って
いません．

@example
@group
test "$body_temperature_in_Celsius" -gt "38" &&
  dance_floor=occupied
test "$hair_style" = "curly" &&
  dance_floor=occupied
fi
if date | grep '^Sat.*pm' >/dev/null 2>&1; then


fi
@end group
@end example

@c This behavior was chosen on purpose: (i) it prevents messages in
@c required macros from interrupting the messages in the requiring macros;
@c (ii) it avoids bad surprises when shell conditionals are used, as in:
@c 
この動作は意図的に選択されました．(i) それは要求されるマクロのメッセージ
が，要求しているマクロのメッセージとして解釈されることを妨げます．(ii) 
それは，シェルの条件文が使用されるとき悪い驚きを妨げ，以下のようになりま
す．

@example
@group
if @dots{}; then
  AC_REQUIRE([SOME_CHECK])
fi
@dots{}
SOME_CHECK
@end group
@end example

@c You are encouraged to put all @code{AC_REQUIRE}s at the beginning of a
@c macro.  You can use @code{dnl} to avoid the empty lines they leave.
@c 
マクロの最初に全ての@code{AC_REQUIRE}を書き込むことを推奨します．空の行
が残ることを避けるため，@code{dnl}を使用することが可能です．


@node Suggested Ordering,  , Prerequisite Macros, Dependencies Between Macros
@subsection 順序の提案

@c Some macros should be run before another macro if both are called, but
@c neither @emph{requires} that the other be called.  For example, a macro
@c that changes the behavior of the C compiler should be called before any
@c macros that run the C compiler.  Many of these dependencies are noted in
@c the documentation.
@c 
両方が呼び出されても，片方がもう一方が呼び出されることを@emph{要求}しな
い場合，もう一方のマクロの前に実行するすべきマクロもあります．例えば，C
コンパイラの動作を変更するマクロは，Cコンパイラを実行するあらゆるマクロ
の前に呼び出されるべきです．これらの依存性の多くはドキュメントに記されて
います．

@c Autoconf provides the @code{AC_BEFORE} macro to warn users when macros
@c with this kind of dependency appear out of order in a
@c @file{configure.ac} file.  The warning occurs when creating
@c @code{configure} from @file{configure.ac}, not when running
@c @code{configure}.
@c 
Autoconfは，これらの依存性を持つマクロが@file{configure.ac}ファイルで順
序が間違って現れるとき，ユーザに警告する@code{AC_BEFORE}を提供しています．
警告は，@file{configure.ac}から@code{configure}を作成するときに発生しま
すが，@code{configure}実行時には発生しません．

@c For example, @code{AC_PROG_CPP} checks whether the C compiler
@c can run the C preprocessor when given the @option{-E} option.  It should
@c therefore be called after any macros that change which C compiler is
@c being used, such as @code{AC_PROG_CC}.  So @code{AC_PROG_CC} contains:
@c 
例えば@code{AC_PROG_CPP}は，Cコンパイラに@samp{-E}オプションが与えられて
いるとき，Cプリプロセッサが実行可能かどうか調査します．従って，使用され
るCコンパイラが変更される@code{AC_PROG_CC}のようなマクロの後で，それは呼
び出すべきです．そのため，@code{AC_PROG_CC}は以下を含んでいます．

@example
AC_BEFORE([$0], [AC_PROG_CPP])dnl
@end example

@noindent
@c This warns the user if a call to @code{AC_PROG_CPP} has already occurred
@c when @code{AC_PROG_CC} is called.
@c 
これで，@code{AC_PROG_CC}が呼び出されたとき，@code{AC_PROG_CPP}が既に呼
び出されている場合，ユーザに警告します．

@defmac AC_BEFORE (@var{this-macro-name}, @var{called-macro-name})
@maindex BEFORE
@c Make @code{m4} print a warning message to the standard error output if
@c @var{called-macro-name} has already been called.  @var{this-macro-name}
@c should be the name of the macro that is calling @code{AC_BEFORE}.  The
@c macro @var{called-macro-name} must have been defined using
@c @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
@c that it has been called.
@c 
@var{called-macro-name}が既に呼び出されている場合，@code{m4}は標準エラー
出力に警告メッセージを出力します．@var{this-macro-name}は，
@code{AC_BEFORE}を呼び出すマクロの名前にすべきです．マクロ
@var{called-macro-name}は，@code{AC_DEFUN}を使用して定義されている，また
は呼び出されていることを示す@code{AC_PROVIDE}の呼び出しを含んでいる必要
があります．
@end defmac


@node Obsoleting Macros, Coding Style, Dependencies Between Macros, Writing Autoconf Macros
@section 時代遅れのマクロ

@c Configuration and portability technology has evolved over the years.
@c Often better ways of solving a particular problem are developed, or
@c ad-hoc approaches are systematized.  This process has occurred in many
@c parts of Autoconf.  One result is that some of the macros are now
@c considered @dfn{obsolete}; they still work, but are no longer considered
@c the best thing to do, hence they should be replaced with more modern
@c macros.  Ideally, @code{autoupdate} should substitute the old macro calls
@c with their modern implementation.
@c 
コンフィグレーションと移植性の技術は，何年もかかって進展しました．特定の
問題を解決するより良い方法が開発されたり，特別なアプローチが体系化される
ことはよくあります．この過程はAutoconfの数多くの部分で発生しました．一つ
の結果は，今では@dfn{時代遅れ}と思われるマクロの存在です．まだ動作します
が，すでにそれが最善の方法ではなくなっていて，より近代的なマクロで置換さ
れるべきでしょう．理想的には，@code{autoupdate}が古いマクロの呼び出しを
現在のマクロに置換すべきでしょう．

@c Autoconf provides a simple means to obsolete a macro.
@c 
Autoconfは，マクロが時代遅れだということを意味する単純なものを提供してい
ます．

@defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @r{[}@var{message}@r{]})
@maindex DEFUN
@maindex AU_DEFUN
@c Define @var{old-macro} as @var{implementation}.  The only difference
@c with @code{AC_DEFUN} is that the user will be warned that
@c @var{old-macro} is now obsolete.
@c 
@var{implementation}として@var{old-macro}を定義します．@code{AC_DEFUN}を
用いたものとは，@var{old-macro}が現在は時代遅れだという警告をユーザが受
けるところだけが異なります．

@c If she then uses @code{autoupdate}, the call to @var{old-macro} will be
@c replaced by the modern @var{implementation}.  The additional
@c @var{message} is then printed.
@c 
@code{autoupdate}を使用する場合，@var{old-macro}の呼び出しは現在の
@var{implementation}で置換されます．更に，@var{message}が出力されます．
@end defmac


@node Coding Style,  , Obsoleting Macros, Writing Autoconf Macros
@section コーディングスタイル

@c The Autoconf macros follow a strict coding style.  You are encouraged to
@c follow this style, especially if you intend to distribute your macro,
@c either by contributing it to Autoconf itself, or via other means.
@c 
Autoconfマクロはスクリプトコーディングスタイルに従います．以下のスタイル
に従うように推奨し，特に，Autoconf自身に寄稿したり，その他の目的で，マク
ロを配布する目的がある場合はそうしてください．

@c The first requirement is to pay great attention to the quotation, for
@c more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
@c 
最初に必要なことは，引用符に大きく注意を払うことです．詳細は，
@ref{Autoconf Language}と@ref{M4 Quotation}を参照してください．

@c Do not try to invent new interfaces.  It is likely that there is a macro
@c in Autoconf that resembles the macro you are defining: try to stick to
@c this existing interface (order of arguments, default values, etc.).  We
@c @emph{are} conscious that some of these interfaces are not perfect;
@c nevertheless, when harmless, homogeneity should be preferred over
@c creativity.
@c 
新たなインターフェースの発明は試みないでください．定義しているマクロに似
ているAutoconfマクロが存在することはよくあります．この既存のインターフェー
スに従ってみてください(引数の順序，デフォルト値，等々)．我々は，これらの
インターフェースに完全でないものがあることは，意識@emph{しています}．そ
れにもかかわらず，無害なときは，創造性より均質性が好まれるでしょう．

@c Be careful about clashes both between M4 symbols and between shell
@c variables.
@c 
M4シンボル間とシェル変数間の両方の衝突に注意してください．

@c If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
@c you are unlikely to generate conflicts.  Nevertheless, when you need to
@c set a special value, @emph{avoid using a regular macro name}; rather,
@c use an ``impossible'' name.  For instance, up to version 2.13, the macro
@c @code{AC_SUBST} used to remember what @var{symbol}s were already defined
@c by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
@c But since there is a macro named @code{AC_SUBST_FILE}, it was just
@c impossible to @samp{AC_SUBST(FILE)}!  In this case,
@c @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
@c have been used (yes, with the parentheses)@dots{}or better yet, high-level
@c macros such as @code{AC_EXPAND_ONCE}.
@c 
推奨されるM4命名規則(@pxref{Macro Names})に従う場合，衝突が生じることは
あまりないでしょう．それにもかかわらず，特殊な値を設定する必要があるとき，
@emph{通常のマクロ名を使用することを避けてください}．``不可能な''名前を
使用する代わりです．例えば，バージョン2.13までは，通常のマクロ名
@code{AC_SUBST_@var{symbol}}を設定することで既に定義されている
@var{symbol}を記憶するため，マクロ@code{AC_SUBST}を使用していました．し
かし，@code{AC_SUBST_FILE}と命名されているマクロが存在するので，
@samp{AC_SUBST(FILE)}を使用することはできませんでした！この場合，
@code{AC_SUBST(@var{symbol})}や@code{_AC_SUBST(@var{symbol})}が使用され
るべきでした(そうです，カッコは使用します)@dots{}または，より良い方法と
して，@code{AC_EXPAND_ONCE}のようなハイレベルのマクロを使用すべきでした．

@c No Autoconf macro should ever enter the user-variable name space; i.e.,
@c except for the variables that are the actual result of running the
@c macro, all shell variables should start with @code{ac_}.  In
@c addition, small macros or any macro that is likely to be embedded in
@c other macros should be careful not to use obvious names.
@c 
Autoconfマクロは，ユーザ変数の名前空間に入るべきではありません．すなわち，
実際のマクロの実行結果となる変数以外の，全てシェル変数は@code{ac_}で始め
るべきです．さらに，小さなマクロや他のマクロに埋め込まれるようなマクロは，
明示的な名前を使用しないように中止すべきです．

@cindex @code{dnl}
@c Do not use @code{dnl} to introduce comments: most of the comments you
@c are likely to write are either header comments which are not output
@c anyway, or comments that should make their way into @file{configure}.
@c There are exceptional cases where you do want to comment special M4
@c constructs, in which case @code{dnl} is right, but keep in mind that it
@c is unlikely.
@c 
コメントを導入するために，@code{dnl}を使用しないでください．書こうとして
いるコメントのほとんどは，出力されないヘッダコメント，または，
@file{configure}に書かれるべきコメントです．特殊なM4の構成のコメントが欲
しい場合は例外があり，その場合は@code{dnl}が正しいのですが，あまりないこ
とだということを覚えておいてください．

@c M4 ignores the leading spaces before each argument, use this feature to
@c indent in such a way that arguments are (more or less) aligned with the
@c opening parenthesis of the macro being called.  For instance, instead of
@c 
M4は，引数に前置されるスペースを無視します．呼び出されているマクロの開カッ
コに，引数が整列するように字下げするために，この特徴を使用してください．
例えば，以下の代わりを考えます．


@example
AC_CACHE_CHECK(for EMX OS/2 environment,
ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
[ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
@end example

@noindent
@c write
@c 
以下のように書いてください．

@example
AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])
@end example

@noindent
@c or even
@c 
または，以下のようにしてください．

@example
AC_CACHE_CHECK([for EMX OS/2 environment],
               [ac_cv_emxos2],
               [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
                                                   [return __EMX__;])],
                                  [ac_cv_emxos2=yes],
                                  [ac_cv_emxos2=no])])
@end example

@c When using @code{AC_TRY_RUN} or any macro that cannot work when
@c cross-compiling, provide a pessimistic value (typically @samp{no}).
@c 
@code{AC_TRY_RUN}や，クロスコンパイルで動作不可能なマクロを使用している
とき，悲観的な値(通常は@samp{no})を提供してください．

@c Feel free to use various tricks to prevent auxiliary tools, such as
@c syntax-highlighting editors, from behaving improperly.  For instance,
@c instead of:
@c 
構文をハイライト表示するエディタのような，補助ツールが不適切に動作するこ
とを避けるため，様々な手段を自由に使用してください．例えば以下を考えます．

@example
patsubst([$1], [$"])
@end example

@noindent
@c use
@c 
以下を使用してください．

@example
patsubst([$1], [$""])
@end example

@noindent
@c so that Emacsen do not open a endless ``string'' at the first quote.
@c For the same reasons, avoid:
@c 
それは，Emacsenが最初の引用符で終りのない``文字列''を開いたままにしない
ようにするためです．同じ理由から以下のようなことは避けてください．

@example
test $[#] != 0
@end example

@noindent
@c and use:
@c 
以下を使用してください．

@example
test $[@@%:@@] != 0
@end example

@noindent
@c Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
@c breaking the bracket-matching highlighting from Emacsen.  Note the
@c preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc.  Do
@c not escape when it is unneeded.  Common examples of useless quotation
@c are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
@c etc.  If you add portability issues to the picture, you'll prefer
@c @samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
@c better than hacking Autoconf @code{:-)}.
@c 
そうしない場合，閉カッコは@samp{#}コメント内に隠され，Emacsenのカッコ一
致のハイライト表示を破壊します．好ましいスタイルは，M4からエスケープされ
るように注意してください．@samp{$[1]}，@samp{$[@@]}，等です．不必要なと
きにエスケープしないようにしてください．意味のない引用符の一般的な例は，
@samp{[$]$1}(@samp{$$1}と書いてください)，@samp{[$]var}(@samp{$var}を使
用してください)，等です．移植性の問題をこの状態に加える場合，
@samp{"[$]@@"}より@samp{$@{1+"$[@@]"@}}にした方が良く，Autoconfを白金具
するより何か他のことをした方が良いでしょう@code{:-)}．

@c When using @command{sed}, don't use @option{-e} except for indenting
@c purpose.  With the @code{s} command, the preferred separator is @samp{/}
@c unless @samp{/} itself is used in the command, in which case you should
@c use @samp{,}.
@c 
@command{sed}を使用しているとき，字下げの目的以外で@option{-e}を使用しな
いでください．@code{s}コマンドを用いた場合，@samp{/}自身がコマンドで使用
されない限り，優先されるセパレータは@samp{/}で，その場合は@samp{,}を使用
すべきです．

@c @xref{Macro Definitions}, for details on how to define a macro.  If a
@c macro doesn't use @code{AC_REQUIRE} and it is expected to never be the
@c object of an @code{AC_REQUIRE} directive, then use @code{define}.  In
@c case of doubt, use @code{AC_DEFUN}.  All the @code{AC_REQUIRE}
@c statements should be at the beginning of the macro, @code{dnl}'ed.
@c 
マクロ定義の方法の詳細は，@xref{Macro Definitions}. マクロで
@code{AC_REQUIRE}を使用しておらず，@code{AC_REQUIRE}ディレクティブのオブ
ジェクトがないことを期待する場合，@code{define}を使用してください．疑わ
しい場合は，@code{AC_DEFUN}を使用してください．全ての@code{AC_REQUIRE}文
は，@code{dnl}されているマクロの最初に書くべきです．

@c You should not rely on the number of arguments: instead of checking
@c whether an argument is missing, test that it is not empty.  It provides
@c both a simpler and a more predictable interface to the user, and saves
@c room for further arguments.
@c 
引数の数に依存すべきではありません．引数が足りないことを調査する代わりに，
空でないことをテストしてください．より簡単でより予測可能なインターフェー
スをユーザに提供し，余分な引数に対する余地を節約してください．

@c Unless the macro is short, try to leave the closing @samp{])} at the
@c beginning of a line, followed by a comment that repeats the name of the
@c macro being defined.  This introduces an additional newline in
@c @code{configure}; normally, that is not a problem, but if you want to
@c remove it you can use @samp{[]dnl} on the last line.  You can similarly
@c use @samp{[]dnl} after a macro call to remove its newline.  @samp{[]dnl}
@c is recommended instead of @samp{dnl} to ensure that M4 does not
@c interpret the @samp{dnl} as being attached to the preceding text or
@c macro output.  For example, instead of:
@c 
マクロが短くない場合は，行の最初に@samp{])}を残し，定義されているマクロ
の名前を繰り返すコメントを続けてください．これは，@code{configure}に余分
な改行を導入します．通常は問題ありませんが，削除したい場合は，行の最後に
@samp{[]dnl}を使用することが可能です．同様に，マクロ呼び出しの後に，改行
を削除するため，@samp{[]dnl}を使用することも可能です．M4が@samp{dnl}をテ
キストやマクロ出力の前に付けられているものとして解釈しないことを確実にす
るため，@samp{[]dnl}は@samp{dnl}の代わりとして推奨されています．例えば以
下の代わりを考えます．

@example
AC_DEFUN([AC_PATH_X],
[AC_MSG_CHECKING([for X])
AC_REQUIRE_CPP()
@r{# @dots{}omitted@dots{}}
  AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
fi])
@end example

@noindent
@c you would write:
@c 
以下のように書くべきです．

@example
AC_DEFUN([AC_PATH_X],
[AC_REQUIRE_CPP()[]dnl
AC_MSG_CHECKING([for X])
@r{# @dots{}omitted@dots{}}
  AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
fi[]dnl
])# AC_PATH_X
@end example

@c If the macro is long, try to split it into logical chunks.  Typically,
@c macros that check for a bug in a function and prepare its
@c @code{AC_LIBOBJ} replacement should have an auxiliary macro to perform
@c this setup.  Do not hesitate to introduce auxiliary macros to factor
@c your code.
@c 
マクロが長い場合，論理的な塊に分けてみてください．通常マクロは，関数のバ
グを調査し，このセットアップを実行するための補助マクロがある
@code{AC_LIBOBJ}の置換を準備します．コードの要素に補助マクロを導入するこ
とをためらわないでください．

@c In order to highlight the recommended coding style, here is a macro
@c written the old way:
@c 
推奨されるコーディングスタイルを強調するために，古い手法で書かれているマ
クロを紹介します．

@example
dnl Check for EMX on OS/2.
dnl _AC_EMXOS2
AC_DEFUN(_AC_EMXOS2,
[AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
ac_cv_emxos2=yes, ac_cv_emxos2=no)])
test "$ac_cv_emxos2" = yes && EMXOS2=yes])
@end example

@noindent
@c and the new way:
@c 
新しい方法は以下のようにします．

@example
# _AC_EMXOS2
# ----------
# Check for EMX on OS/2.
define([_AC_EMXOS2],
[AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])
test "$ac_cv_emxos2" = yes && EMXOS2=yes[]dnl
])# _AC_EMXOS2
@end example


@c ============================================= Portable Shell Programming

@node Portable Shell, Manual Configuration, Writing Autoconf Macros, Top
@chapter 移植性のあるシェルプログラミング

@c When writing your own checks, there are some shell-script programming
@c techniques you should avoid in order to make your code portable.  The
@c Bourne shell and upward-compatible shells like the Korn shell and Bash
@c have evolved over the years, but to prevent trouble, do not take
@c advantage of features that were added after @sc{unix} version 7, circa
@c 1977.  You should not use shell functions, aliases, negated character
@c classes, or other features that are not found in all Bourne-compatible
@c shells; restrict yourself to the lowest common denominator.  Even
@c @code{unset} is not supported by all shells!  Also, include a space
@c after the exclamation point in interpreter specifications, like this:
@c 
独自の調査を書くいている時，コードを移植性の高いものにするため，使用を避
けるべきシェルスクリプトプログラムテクニックもあります．Bourneシェルと， 
BashとKornシェルのような上位互換性があるシェルは，何年もかけて進展しまし
たが，問題を避けるために，@sc{unix}バージョン7の以降の1977年頃に加えられ
た機能を利用しないでください．シェル関数，エイリアス，無効な文字クラスや，
Bourneシェル互換のものでは見つからないすべての機能を使用するべきではあり
ません．最小公倍数に制限されてます．@code{unset}さえ，全てのシェルではサ
ポートしていません！また，以下のように，インタプリタ仕様として，感嘆符の
後にスペースを含めてください．

@example
#! /usr/bin/perl
@end example

@noindent
@c If you omit the space before the path, then 4.2@sc{bsd} based systems
@c (such as Sequent DYNIX) will ignore the line, because they interpret
@c @samp{#! /} as a 4-byte magic number.
@c 
パスの前のスペースを省略する場合，(Sequent DYNIXのような)4.2@sc{bsd}を基
本とするシステムは，@samp{#! /}は4バイトのマジックナンバーとして解釈され
るので，その行を無視します．

@c The set of external programs you should run in a @code{configure} script
@c is fairly small.  @xref{Utilities in Makefiles,, Utilities in
@c Makefiles, standards, GNU Coding Standards}, for the list.  This
@c restriction allows users to start out with a fairly small set of
@c programs and build the rest, avoiding too many interdependencies between
@c packages.
@c 
@code{configure}スクリプトで実行すべき外部プログラムの設定は，かなり小さ
くなっています．リストは，@xref{Utilities in Makefiles, , Utilities in
Makefiles, standards, GNU Coding Standards}.この制限で，ユーザは，かなり
小さいプログラム設定から残りをビルドすることが可能になっていて，パッケー
ジ間の独立部分を多くし過ぎることを避けることができます．

@c Some of these external utilities have a portable subset of features; see
@c @ref{Limitations of Usual Tools}.
@c 
これらの外部ユーティリティは，機能のサブセットの移植性があります．
@ref{Limitations of Usual Tools},を参照してください．

@menu
* Shellology::                  A zoology of shells
* Here-Documents::              Quirks and tricks
* File Descriptors::            FDs and redirections
* File System Conventions::     File- and pathnames
* Shell Substitutions::         Variable and command expansions
* Assignments::                 Varying side effects of assignments
* Special Shell Variables::     Variables you should not change
* Limitations of Builtins::     Portable use of not so portable /bin/sh
* Limitations of Usual Tools::  Portable use of portable tools
* Limitations of Make::         Portable Makefiles
@end menu

@node Shellology, Here-Documents, Portable Shell, Portable Shell
@section シェル

@c There are several families of shells, most prominently the Bourne
@c family and the C shell family which are deeply incompatible.  If you
@c want to write portable shell scripts, avoid members of the C shell
@c family.
@c 
いくつかのシェルのファミリーがあり，最も顕著なものは，Bourneファミリーと
Cシェルファミリーで，それらは全く互換性がありません．移植性の高いシェル
スクリプトを書きたい場合，Cシェルファミリーのメンバーは避けてください．

@c Below we describe some of the members of the Bourne shell family.
@c 
以下で，Bourneシェルファミリーのメンバーを，いくつか説明していきます．

@table @asis
@item Ash
@cindex Ash
@c @command{ash} is often used on @sc{gnu}/Linux and @sc{bsd} systems as a
@c light-weight Bourne-compatible shell.  Ash 0.2 has some bugs that are
@c fixed in the 0.3.x series, but portable shell scripts should workaround
@c them, since version 0.2 is still shipped with many @sc{gnu}/Linux
@c distributions.
@c 
@command{ash}は，動作の軽いBourne互換シェルとして@sc{gnu}/Linuxと
@sc{bsd}システムでよく使用されています．Ash 0.2には0.3.xシリーズで修正さ
れているバグがいくつかありますが，バージョン0.2は多くの@sc{gnu}/Linux 配
布物で配布されているので，移植性の高いシェルスクリプトではそれを回避すべ
きです．

@c To be compatible with Ash 0.2:
@c 
Ash 0.2での互換性のため以下のようにしてください．

@itemize @minus
@item
@c don't use @samp{$?} after expanding empty or unset variables:
@c 
空や設定されていない変数を展開した後で，@samp{$?}を使用しないでください．

@example
foo=
false
$foo
echo "Don't use it: $?"
@end example

@item
@c don't use command substitution within variable expansion:
@c 
変数の展開を用いてコマンドの代入を使用しないでください．

@example
cat $@{FOO=`bar`@}
@end example

@item
@c beware that single builtin substitutions are not performed by a sub
@c shell, hence their effect applies to the current shell!  @xref{Shell
@c Substitutions}, item ``Command Substitution''.
@c 
単一の組み込みの代入は，その効果が現在のシェルに適用されるため，サブシェ
ルで実行されないことに注意してください．アイテム``コマンドの代入''につい
ては，@xref{Shell Substitutions}.
@end itemize

@item Bash
@cindex Bash
@c To detect whether you are running @command{bash}, test if
@c @code{BASH_VERSION} is set.  To disable its extensions and require
@c @sc{posix} compatibility, run @samp{set -o posix}. @xref{Bash POSIX
@c Mode,, Bash @sc{posix} Mode, bash, The GNU Bash Reference Manual}, for
@c details.
@c 
@command{bash}を実行しているかどうかを検出するために，
@code{BASH_VERSION}が設定されているかどうかをテストしてください．その拡
張を利用不可能にし，@sc{posix}互換性を要求するため，@samp{set -o posix} 
を実行してください．詳細は，@xref{Bash POSIX Mode,, Bash @sc{posix}
Mode, bash, The GNU Bash Reference Manual}.

@item @command{/usr/xpg4/bin/sh} on Solaris
@cindex @command{/usr/xpg4/bin/sh} on Solaris
@c The @sc{posix}-compliant Bourne shell on a Solaris system is
@c @command{/usr/xpg4/bin/sh} and is part of an extra optional package.
@c There is no extra charge for this package, but it is also not part of a
@c minimal OS install and therefore some folks may not have it.
@c 
Solarisシステム上の@sc{posix}互換のBourneシェルは，
@command{/usr/xpg4/bin/sh}で，それはオプションパッケージの一部です．この
パッケージに対しては追加料金入りませんが，最小のOSのインストールにはない
ので，持っていない人もいるでしょう．

@item Zsh
@cindex Zsh
@c To detect whether you are running @command{zsh}, test if
@c @code{ZSH_VERSION} is set.  By default @command{zsh} is @emph{not}
@c compatible with the Bourne shell: you have to run @samp{emulate sh} and
@c set @code{NULLCMD} to @samp{:}. @xref{Compatibility,, Compatibility,
@c zsh, The Z Shell Manual}, for details.
@c 
@command{zsh}が実行されているかどうかを検出するために，
@code{ZSH_VERSION}が設定されているかどうかをテストしてください．デフォル
トで，@command{zsh}はBourneと互換性はあり@emph{ません}．@samp{emulate
sh}を実行し，@code{NULLCMD}を@samp{:}に設定する必要があります．詳細は，
@xref{Compatibility,, Compatibility, zsh, The Z Shell Manual}.

@c Zsh 3.0.8 is the native @command{/bin/sh} on Mac OS X 10.0.3.
@c 
Zsh 3.0.8は，Mac OS X 10.0.3でのネイティブな@command{/bin/sh}です．
@end table

@c The following discussion between Russ Allbery and Robert Lipe is worth
@c reading:
@c 
Russ AllberyとRobert Lipeの間でなされた，以下の議論は読む価値があります．

@noindent
Russ Allbery:

@quotation
@c The @sc{gnu} assumption that @command{/bin/sh} is the one and only shell
@c leads to a permanent deadlock.  Vendors don't want to break user's
@c existant shell scripts, and there are some corner cases in the Bourne
@c shell that are not completely compatible with a @sc{posix} shell.  Thus,
@c vendors who have taken this route will @emph{never} (OK@dots{}``never say
@c never'') replace the Bourne shell (as @command{/bin/sh}) with a
@c @sc{posix} shell.
@c 
@command{/bin/sh}が唯一のシェルであるという@sc{gnu}仮定では，永久に行き
詰まってしまいます．ベンダーは，ユーザの既存のシェルスクリプトを壊したく
はありませんし，Bourneシェルには@sc{posix}シェルと完全に互換ではない部分
もあります．このため，この方法を採用するベンダーは，@emph{決して}
(OK@dots{}``決して，決してとは言わないよ'')Bourneシェルを
(@command{/bin/sh}として)@sc{posix}シェルで置き換えないでしょう．
@end quotation

@noindent
Robert Lipe:

@quotation
@c This is exactly the problem.  While most (at least most System V's) do
@c have a bourne shell that accepts shell functions most vendor
@c @command{/bin/sh} programs are not the @sc{posix} shell.
@c 
これは本当に問題です．ほとんどのもの(少なくともほとんどのSystem V)はシェ
ル関数を受け入れるBourneシェルがあるのですが，ほとんどのベンダーの
@command{/bin/sh}は@sc{posix}シェルではありません．

@c So while most modern systems do have a shell _somewhere_ that meets the
@c @sc{posix} standard, the challenge is to find it.
@c 
そのため，ほとんど現在のシステムは@sc{posix}標準に適合しているシェルが_ 
どこかに_あるのですが，問題はそれを見つけることです．
@end quotation


@node Here-Documents, File Descriptors, Shellology, Portable Shell
@section ヒアドキュメント

@c Don't rely on @samp{\} being preserved just because it has no special
@c meaning together with the next symbol.  in the native @command{/bin/sh}
@c on OpenBSD 2.7 @samp{\"} expands to @samp{"} in here-documents with
@c unquoted delimiter.  As a general rule, if @samp{\\} expands to @samp{\}
@c use @samp{\\} to get @samp{\}.
@c 
@samp{\}は，次のシンボルと一緒になって特別の意味を持たないので，保存され
る@samp{\}に依存しないでください．OpenBSD 2.7のネイティブな
@command{/bin/sh}では，@samp{\"}は@samp{"}に展開され，ヒアドキュメントで
は引用符で囲まれていない分離子として用いられます．一般的な規則として，
@samp{\\}が@samp{\}に展開される場合，@samp{\}を得るために@samp{\\}を使用
してください．

@c With OpenBSD 2.7's @command{/bin/sh}
@c 
OpenBSD 2.7の@command{/bin/sh}では，以下のようになります．

@example
@group
$ cat <<EOF
> \" \\
> EOF
" \
@end group
@end example

@noindent
@c and with Bash:
@c 
そして，Bashでは以下のようになります．

@example
@group
bash-2.04$ cat <<EOF
> \" \\
> EOF
\" \
@end group
@end example


@c Many older shells (including the Bourne shell) implement here-documents
@c inefficiently.  Users can generally speed things up by using a faster
@c shell, e.g., by using the command @samp{bash ./configure} rather than
@c plain @samp{./configure}.
@c 
多くの古い(Bourneシェルを含む)シェルでは，ヒアドキュメントは非効率に実装
されています．ユーザは，一般的により早いシェルを使用して，例えば，そのま
ま@samp{./configure}するのではなく，コマンド@samp{bash ./configure}を使
用することによってスピードアップすることが可能です．

@c Some shells can be extremely inefficient when there are a lot of
@c here-documents inside a single statement.  For instance if your
@c @file{configure.ac} includes something like:
@c 
シェルによっては，単一の文の中にヒアドキュメントが多過ぎるとき，非常に非
効率になるものもあります．例えば，@file{configure.ac}に以下のようなもの
含めたとします．

@example
@group
if <cross_compiling>; then
  assume this and that
else
  check this
  check that
  check something else
  @dots{}
  on and on forever
  @dots{}
fi
@end group
@end example

@c A shell parses the whole @code{if}/@code{fi} construct, creating
@c temporary files for each here document in it.  Some shells create links
@c for such here-documents on every @code{fork}, so that the clean-up code
@c they had installed correctly removes them.  It is creating the links
@c that the shell can take forever.
@c 
シェルは，その中のそれぞれのヒアドキュメントに対して一時ファイルを作成し
ながら，@code{if}/@code{fi}の文脈全体をパースします．@code{fork}毎にその
ようなヒアドキュメントに対してリンクを作成するシェルもあり，インストール
された後のクリーンアップコードで正しく削除されます．それは，シェルが永久
に受け入れられるリンクを作成しているのです．

@c Moving the tests out of the @code{if}/@code{fi}, or creating multiple
@c @code{if}/@code{fi} constructs, would improve the performance
@c significantly.  Anyway, this kind of construct is not exactly the
@c typical use of Autoconf.  In fact, it's even not recommended, because M4
@c macros can't look into shell conditionals, so we may fail to expand a
@c macro when it was expanded before in a conditional path, and the
@c condition turned out to be false at run-time, and we end up not
@c executing the macro at all.
@c 
@code{if}/@code{fi}の外部のテストを移動したり，複数の@code{if}/@code{fi} 
の文脈を作成したりすることで，かなり動作が改善されるでしょう．とにかく，
こういった構成は，典型的なAutoconfの使用では正しくありません．実際，M4マ
クロは，シェルの条件文を見ることができないので，それは推奨されておらず，
条件分岐の前にそれが展開され，実行時に条件文が失敗だと分かるとき，マクロ
展開に失敗するかもしれず，マクロの実行を完全に終了できないでしょう．


@node File Descriptors, File System Conventions, Here-Documents, Portable Shell
@section ファイルディスクリプタ

@c Some file descriptors shall not be used, since some systems, admittedly
@c arcane, use them for special purpose:
@c 
システムによっては，明らかに不可解なのですが，特殊な目的で使用しているた
め，ファイルディスクリプタには使用すべきではないものもあります．

@table @asis
@item 3
@c some systems may open it to @samp{/dev/tty}.
@c 
それを@samp{/dev/tty}として開くシステムもあります．

@item 4
@c used on the Kubota Titan.
@c 
Kubota Titanで使用されています．
@end table

@c Don't redirect several times the same file descriptor, as you are doomed
@c to failure under Ultrix.
@c 
Ultrixでは以上終了だと告げられるので，同じファイルディスクリプタに複数回
リダイレクトしないでください．

@example
ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
UWS V4.4 (Rev. 11)
$ eval 'echo matter >fullness' >void
illegal io
$ eval '(echo matter >fullness)' >void
illegal io
$ (eval '(echo matter >fullness)') >void
Ambiguous output redirect.
@end example

@noindent
@c In each case the expected result is of course @file{fullness} containing
@c @samp{matter} and @file{void} being empty.
@c 
それぞれの場合で，期待される結果はもちろん，@samp{matter}を含んでいる
@file{fullness}と，空の@file{void}です．

@c Don't try to redirect the standard error of a command substitution: it
@c must be done @emph{inside} the command substitution: when running
@c @samp{: `cd /zorglub` 2>/dev/null} expect the error message to
@c escape, while @samp{: `cd /zorglub 2>/dev/null`} works properly.
@c 
コマンドの代入のリダイレクトを標準エラー出力にしないでください．それは，
コマンドの代入の@emph{内部で}行なう必要があります．エラーメッセージを削
除することを期待して@samp{: `cd /zorglub` 2>/dev/null}を実行しているとき，
@samp{: `cd /zorglub 2>/dev/null`}は正しく動作します．

@c It is worth noting that Zsh (but not Ash nor Bash) makes it possible
@c in assignments though: @samp{foo=`cd /zorglub` 2>/dev/null}.
@c 
(AshでもBashでもない)Zshが割当を可能にすることに注意する価値はあります．
@samp{foo=`cd /zorglub` 2>/dev/null}．

@c Most shells, if not all (including Bash, Zsh, Ash), output traces on
@c stderr, even for sub-shells.  This might result in undesired content
@c if you meant to capture the standard-error output of the inner command:
@c 
ほとんどのシェルでは，(Bash，Zsh，Ashを含め)全てではありませんが，標準エ
ラー出力を，サブシェルに対しても追跡しています．内部コマンドの標準エラー
出力を得る目的がある場合，これでは結果が望まない内容になるかもしれません．

@example
$ ash -x -c '(eval "echo foo >&2") 2>stderr'
$ cat stderr
+ eval echo foo >&2
+ echo foo
foo
$ bash -x -c '(eval "echo foo >&2") 2>stderr'
$ cat stderr
+ eval 'echo foo >&2'
++ echo foo
foo
$ zsh -x -c '(eval "echo foo >&2") 2>stderr'
@i{# Traces on startup files deleted here.}
$ cat stderr
+zsh:1> eval echo foo >&2
+zsh:1> echo foo
foo
@end example

@noindent
@c You'll appreciate the various levels of detail@dots{}
@c 
様々なレベルの詳細を認めるでしょう@dots{}

@c One workaround is to grep out uninteresting lines, hoping not to remove
@c good ones@dots{}
@c 
一つの回避方法は，興味がない行をgrepで削除することで，良い行は削除しない
ことを期待しつつ@dots{}


@node File System Conventions, Shell Substitutions, File Descriptors, Portable Shell
@section ファイルシステムの条件

@c While @command{autoconf} and friends will usually be run on some Unix
@c variety, it can and will be used on other systems, most notably @sc{dos}
@c variants.  This impacts several assumptions regarding file and
@c path names.
@c 
@command{autoconf}とその仲間達は，通常様々なUnixで実行されますが，それは
その他のシステムでも使用され，最も顕著なものとしては@sc{dos}の仲間があげ
られます．このことは，ファイルとパス名に関する仮定に衝突します．

@noindent
@c For example, the following code:
@c 
例えば，以下のようなコードを考えます．

@example
case $foo_dir in
  /*) # Absolute
     ;;
  *)
     foo_dir=$dots$foo_dir ;;
esac
@end example

@noindent
@c will fail to properly detect absolute paths on those systems, because
@c they can use a drivespec, and will usually use a backslash as directory
@c separator.  The canonical way to check for absolute paths is:
@c 
それらのシステムではドライブスペックを使用していて，通常はディレクトリの
分離子としてバックスラッシュを使用しているため，絶対パスを正しく検出する
ことに失敗するでしょう．絶対パスに対する調査の標準的な方法は以下のとおり
です．

@example
case $foo_dir in
  [\\/]* | ?:[\\/]* ) # Absolute
     ;;
  *)
     foo_dir=$dots$foo_dir ;;
esac
@end example

@noindent
@c Make sure you quote the brackets if appropriate and keep the backslash as
@c first character (@pxref{Limitations of Builtins}).
@c 
適切な場合は角カッコの引用符で囲み，最初の文字としてのバックスラッシュを
保持していることを確認してください(@pxref{Limitations of Builtins})．

@c Also, because the colon is used as part of a drivespec, these systems don't
@c use it as path separator.  When creating or accessing paths, use
@c @code{$ac_path_separator} instead (or the @code{PATH_SEPARATOR} output
@c variable).  @command{autoconf} sets this to the appropriate value (@samp{:}
@c or @samp{;}) when it starts up.
@c 
また，コロンがデバイススペックの一部として使用されているので，これらのシ
ステムではそれをパスの分離子として使用していません．パスを作成していると
きやパスにアクセスしているときは，代わりに@code{$ac_path_separator}(また
は，@code{PATH_SEPARATOR}の出力変数)を使用してください．
@command{autoconf}は，開始時にこれを適切な値(@samp{:}または@samp{;})に設
定します．

@c File names need extra care as well.  While @sc{dos}-based environments
@c that are Unixy enough to run @command{autoconf} (such as DJGPP) will
@c usually be able to handle long file names properly, there are still
@c limitations that can seriously break packages.  Several of these issues
@c can be easily detected by the
@c @href{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk}
@c package.
@c 
ファイル名にも余計な注意が必要になります．(DJGPPのような)
@command{autoconf}を十分に実行できるUnixのような@sc{dos}ベースの環境では，
通常長いファイル名を適切に扱うことが可能ですが，パッケージを壊してしまう
深刻な制限も残っています．これらの問題のいくつかは，
doschk@footnote{doschk,
@url{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz}}パッケージ
で用意に検出可能です．

@c A short overview follows; problems are marked with @sc{sfn}/@sc{lfn} to
@c indicate where they apply: @sc{sfn} means the issues are only relevant to
@c plain @sc{dos}, not to @sc{dos} boxes under Windows, while @sc{lfn}
@c identifies problems that exist even under Windows.
@c 
以下は簡単な全体像です．問題には，適用を示すため@sc{sfn}/@sc{lfn}で印が
ついています．@sc{sfn}は，Windows下の@sc{dos}窓ではなく，プレーンな
@sc{dos}にのみ関連する問題を意味し，一方@sc{lfn}は，Windowsでも存在する
問題を意味しています．

@table @asis
@item 複数のドットの禁止(@sc{sfn})
@c @sc{dos} cannot handle multiple dots in filenames.  This is an especially
@c important thing to remember when building a portable configure script,
@c as @command{autoconf} uses a .in suffix for template files.
@c 
@sc{dos}はファイル名に複数のドットがあるものを扱うことが不可能です．これ
は，@command{autoconf}は.inをテンプレートファイルの接尾子に使用するので，
移植性の高いconfigureスクリプトを構築しているときに覚えておく必要がある，
特に重要なことです．

@c This is perfectly OK on Unices:
@c 
以下はUnix上では完全にOKです．

@example
AC_CONFIG_HEADER(config.h)
AC_CONFIG_FILES([source.c foo.bar])
AC_OUTPUT
@end example

@noindent
@c but it causes problems on @sc{dos}, as it requires @samp{config.h.in},
@c @samp{source.c.in} and @samp{foo.bar.in}.  To make your package more portable
@c to @sc{dos}-based environments, you should use this instead:
@c 
しかし，それは@samp{config.h.in}，@samp{source.c.in}，そして
@samp{foo.bar.in}が必要になるので，@sc{dos}では問題があります．パッケー
ジを@sc{dos}ベースの環境でより移植性を高くするため，その代わりに以下を使
用すべきです．

@example
AC_CONFIG_HEADER(config.h:config.hin)
AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
AC_OUTPUT
@end example

@item ドットの前置の禁止(@sc{sfn})
@c @sc{dos} cannot handle filenames that start with a dot.  This is usually
@c not a very important issue for @command{autoconf}.
@c 
@sc{dos}はドットで始まるファイル名を扱うことが不可能です．これは通常，
@command{autoconf}に対してはあまり重要ではない問題です．

@item 大文字小文字を区別しない (@sc{lfn})
@c @sc{dos} is case insensitive, so you cannot, for example, have both a
@c file called @samp{INSTALL} and a directory called @samp{install}.  This
@c also affects @command{make}; if there's a file called @samp{INSTALL} in
@c the directory, @command{make install} will do nothing (unless the
@c @samp{install} target is marked as PHONY).
@c 
@sc{dos}は大文字小文字を区別しないので，例えば，@samp{INSTALL}という名の
ファイルと@samp{install}という名のディレクトリの両方を持つことができませ
ん．これは，@command{make}にも影響します．ディレクトリに@samp{INSTALL}と
いう名のファイルがある場合，@command{make install}は(@samp{install}が
PHONYとして印がついていないとき)何もしません．

@item 8+3の制限 (@sc{sfn})
@c Because the @sc{dos} file system only stores the first 8 characters of
@c the filename and the first 3 of the extension, those must be unique.
@c That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
@c @file{foobar-prettybird.c} all resolve to the same filename
@c (@file{FOOBAR-P.C}).  The same goes for @file{foo.bar} and
@c @file{foo.bartender}.
@c 
@sc{dos}ファイルシステムでは，ファイル名の最初の8文字と最初の3文字の拡張
子のみ保存され，それらはユニークである必要があります．それは，
@file{foobar-part1.c}，@file{foobar-part2.c}，そして
@file{foobar-prettybird.c}の全ては同じ名前(@file{FOOBAR-P.C})になります．
@file{foo.bar}と@file{foo.bartender}も同じものになります．

@c Note: This is not usually a problem under Windows, as it uses numeric
@c tails in the short version of filenames to make them unique.  However, a
@c registry setting can turn this behaviour off.  While this makes it
@c possible to share file trees containing long file names between @sc{sfn}
@c and @sc{lfn} environments, it also means the above problem applies there
@c as well.
@c 
注意：これは通常，ファイル名をユニークにするために短いバージョンでは数字
の後置を使用するので，Windowsでは問題になりません．しかし，レジストリの
設定でこの動作を停止可能です．これで長いファイル名を含むファイルのツリー
を，@sc{sfn}と@sc{lfn}の環境で共有することが可能になりますが，上記の問題
は同様に存在します．

@item 無効な文字
@c Some characters are invalid in @sc{dos} filenames, and should therefore
@c be avoided. In a @sc{lfn} environment, these are @samp{/}, @samp{\},
@c @samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
@c In a @sc{sfn} environment, other characters are also invalid.  These
@c include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
@c 
@sc{dos}ファイル名で無効な文字もあり，そのため避けた方が良いでしょう．
@sc{lfn}の環境では，@samp{/}，@samp{\}，@samp{?}，@samp{*}，@samp{:}，
@samp{<}，@samp{>}，@samp{|}，そして@samp{"}です．@sc{sfn}環境では，それ
以外にも無効になります．これには，@samp{+}，@samp{,}，@samp{[}，そして
@samp{]}が含まれます．
@end table


@node Shell Substitutions, Assignments, File System Conventions, Portable Shell
@section シェルの代入


@c Contrary to a persistent urban legend, the Bourne shell does not
@c systematically split variables and backquoted expressions, in particular
@c on the right-hand side of assignments and in the argument of @code{case}.
@c For instance, the following code:
@c 
persistent urban legendとは反対に，Bourneシェルは変数とバッククオートさ
れている式が整然と分かれておらず，特に右側の割り当てと@code{case}の引数
がそうです．例えば，以下のコードを考えます．

@example
case "$given_srcdir" in
.)  top_srcdir="`echo "$dots" | sed 's,/$,,'`"
*)  top_srcdir="$dots$given_srcdir" ;;
esac
@end example

@noindent
@c is more readable when written as:
@c 
以下のように書かれているとき，より読みやすくなります．

@example
case $given_srcdir in
.)  top_srcdir=`echo "$dots" | sed 's,/$,,'`
*)  top_srcdir=$dots$given_srcdir ;;
esac
@end example

@noindent
@c and in fact it is even @emph{more} portable: in the first case of the
@c first attempt, the computation of @code{top_srcdir} is not portable,
@c since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"}.
@c Worse yet, not all shells understand @code{"`@dots{}\"@dots{}\"@dots{}`"}
@c the same way.  There is just no portable way to use double-quoted
@c strings inside double-quoted backquoted expressions (pfew!).
@c 
そして，実際それは@emph{より}移植性が高くなります．最初の試みの最初の
caseで，全てのシェルが@code{"`@dots{}"@dots{}"@dots{}`"}を正しく解釈する
わけではないので，@code{top_srcdir}の計算結果は移植性が高くありません．
更に悪いことには，同様に@code{"`@dots{}\"@dots{}\"@dots{}`"}を全てのシェ
ルが解釈するわけではありません．二重引用符でバッククオートされている式の
内部で，二重引用符で囲まれた文字列を使用するための移植性を高める方法は全
くありません(pfew!)．

@table @code
@item $@@
@cindex @samp{"$@@"}
@c One of the most famous shell-portability issues is related to
@c @samp{"$@@"}: when there are no positional arguments, it is supposed to
@c be equivalent to nothing.  But some shells, for instance under Digital
@c Unix 4.0 and 5.0, will then replace it with an empty argument.  To be
@c portable, use @samp{$@{1+"$@@"@}}.
@c 
最も有名なシェルの移植性の問題の一つは，@samp{"$@@"}との関連です．位置に
依存する引数が無いとき，それは，何もないことと等価です．しかし，シェルに
よっては，例えばDigital Unix 4.0と5.0では，空の引数で置換されます．移植
性を高めるため，@samp{$@{1+"$@@"@}}を使用してください．

@item $@{@var{var}:-@var{value}@}
@cindex $@{@var{var}:-@var{value}@}
@c Old @sc{bsd} shells, including the Ultrix @code{sh}, don't accept the
@c colon for any shell substitution, and complain and die.
@c 
Ultrix @code{sh}を含め，古い@sc{bsd}シェルはシェルの代入に対してコロンを
受け入れず，文句を言って終了します．

@item $@{@var{var}=@var{literal}@}
@cindex $@{@var{var}=@var{literal}@}
@c Be sure to quote:
@c 
引用符で囲まれていることを確かめてください．

@example
: $@{var='Some words'@}
@end example

@noindent
@c otherwise some shells, such as on Digital Unix V 5.0, will die because
@c of a ``bad substitution''.
@c 
それ以外のDigital Unix V 5.0のようなシェルでは，``bad substitution''のた
めに終了します．

@c Solaris' @command{/bin/sh} has a frightening bug in its interpretation
@c of this.  Imagine you need set a variable to a string containing
@c @samp{@}}.  This @samp{@}} character confuses Solaris' @command{/bin/sh}
@c when the affected variable was already set.  This bug can be exercised
@c by running:
@c 
Solarisの@command{/bin/sh}にはこの解釈に恐ろしいバグがあります．変数を
@samp{@}}を含む文字列に設定する必要があることを想像してください．この
@samp{@}}文字で，影響ある変数が既に設定されているとき，Solarisの
@command{/bin/sh}は混乱します．このバグは，以下のように実行することで作
動されるはずです．

@example
$ unset foo
$ foo=$@{foo='@}'@}
$ echo $foo
@}
$ foo=$@{foo='@}'   # no error; this hints to what the bug is
$ echo $foo
@}
$ foo=$@{foo='@}'@}
$ echo $foo
@}@}
 ^ ugh!
@end example

@c It seems that @samp{@}} is interpreted as matching @samp{$@{}, even
@c though it is enclosed in single quotes.  The problem doesn't happen
@c using double quotes.
@c 
@samp{@}}は，シングル引用符で囲まれている場合でも，@samp{$@{}に一致する
ものとして解釈されているようです．二重引用符を使用すると問題は生じません．

@item $@{@var{var}=@var{expanded-value}@}
@cindex $@{@var{var}=@var{expanded-value}@}
@c On Ultrix,
@c running
@c 
Ultrixで，以下を実行したとします．

@example
default="yu,yaa"
: $@{var="$default"@}
@end example

@noindent
@c will set @var{var} to @samp{M-yM-uM-,M-yM-aM-a}, i.e., the 8th bit of
@c each char will be set. You won't observe the phenomenon using a simple
@c @samp{echo $var} since apparently the shell resets the 8th bit when it
@c expands $var.  Here are two means to make this shell confess its sins:
@c 
それは@var{var}を@samp{M-yM-uM-,M-yM-aM-a}に設定し，すなわち，全ての文字
の8番目のビットが設定されるでしょう．$varを展開するとき，シェルが8番目の
ビットを明示的にリセットするので，単純に@samp{echo $var}を使用している現
象が分かりません．このシェルにその違反で混乱させる2つの方法は，以下のよ
うになります．

@example
$ cat -v <<EOF
$var
EOF
@end example

@noindent
@c and
@c 
それと以下です．

@example
$ set | grep '^var=' | cat -v
@end example

@c One classic incarnation of this bug is:
@c 
このバグの古典的な典型の一つは以下のものです．

@example
default="a b c"
: $@{list="$default"@}
for c in $list; do
  echo $c
done
@end example

@noindent
@c You'll get @samp{a b c} on a single line.  Why?  Because there are no
@c spaces in @samp{$list}: there are @samp{M- }, i.e., spaces with the 8th
@c bit set, hence no IFS splitting is performed!!!
@c 
単一行に@samp{a b c}を得るでしょう．なぜでしょうか？それは，@samp{$list} 
にスペースが無いためです．@samp{M- }，すなわち8ビット目を設定するスペー
スがあるので，IFSによる分離が実行されないのです！！！

@c One piece of good news is that Ultrix works fine with @samp{:
@c $@{list=$default@}}; i.e., if you @emph{don't} quote.  The bad news is
@c then that @sc{qnx} 4.25 then sets @var{list} to the @emph{last} item of
@c @var{default}!
@c 
良いニュースの一つは，Ultrixが@samp{: $@{list=$default@}}で正確に動作す
ることです．すなわち，引用符で囲ま@emph{ない}場合です．悪いニュースとして
は，@sc{qnx} 4.25は，@var{list}を@var{default}の@emph{最後の}項目に設定
することです！

@c The portable way out consists in using a double assignment, to switch
@c the 8th bit twice on Ultrix:
@c 
移植性の高い方法は，Ultrixで8番目のビットを2回切替えるために，二重(引用
符による)代入を使用することです．

@example
list=$@{list="$default"@}
@end example

@noindent
@c @dots{}but beware of the @samp{@}} bug from Solaris (see above).  For safety,
@c use:
@c 
@dots{}しかし，Solarisの@samp{@}}のバグ(上記を参照してください)には用心
してください．安全にするには，以下を使用してください．

@example
test "$@{var+set@}" = set || var=@var{@{value@}}
@end example


@item `@var{commands}`
@cindex `@var{commands}`
@cindex Command Substitution
@c While in general it makes no sense, do not substitute a single builtin
@c with side effects as Ash 0.2, trying to optimize, does not fork a
@c sub-shell to perform the command.
@c 
一般的には意味がありませんが，Ash 0.2では最適化のためコマンドを実行する
ためサブシェルをforkしないので，副作用のある単一の組み込み物を代入しない
でください．

@c For instance, if you wanted to check that @command{cd} is silent, do not
@c use @samp{test -z "`cd /`"} because the following can happen:
@c 
例えば，@command{cd}が何も出力しないことを調査したい場合，以下のことが生
じるかもしれないので，@samp{test -z "`cd /`"}を使用しないでください．

@example
$ pwd
/tmp
$ test -n "`cd /`" && pwd
/
@end example

@noindent
@c The result of @samp{foo=`exit 1`} is left as an exercise to the reader.
@c 
@samp{foo=`exit 1`}の結果は，読者への演習問題として残しておきます．

@item $(@var{commands})
@cindex $(@var{commands})
@c This construct is meant to replace @samp{`@var{commands}`}; they can be
@c nested while this is impossible to do portably with back quotes.
@c Unfortunately it is not yet widely supported.  Most notably, even recent
@c releases of Solaris don't support it:
@c 
この構成は，@samp{`@var{commands}`}を置換するという意味があります．それ
らはネスト可能ですが，バッククオートを用いて移植することは不可能です．残
念ながら，まだ全体的にサポートされていません．特に，現在のSolarisリリー
スでもサポートされていません．

@example
$ showrev -c /bin/sh | grep version
Command version: SunOS 5.8 Generic 109324-02 February 2001
$ echo $(echo blah)
syntax error: `(' unexpected
@end example

@noindent
@c nor does @sc{irix} 6.5's Bourne shell:
@c 
また，@sc{irix} 6.5のBourneシェルもそうです．
@example
$ uname -a
IRIX firebird-image 6.5 07151432 IP22
$ echo $(echo blah)
$(echo blah)
@end example
@end table


@node Assignments, Special Shell Variables, Shell Substitutions, Portable Shell
@section 代入

@c When setting several variables in a row, be aware that the order of the
@c evaluation is undefined.  For instance @samp{foo=1 foo=2; echo $foo}
@c gives @samp{1} with sh on Solaris, but @samp{2} with Bash.  You must use
@c @samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
@c 
列にいくつかの変数を設定するとき，評価の順序が定義されていないことを覚え
ておいてください．例えば，@samp{foo=1 foo=2; echo $foo}は，Solarisの
@code{sh}では@samp{1}になりますが，Bashでは@samp{2}になります．順序を強
制するために@samp{;}を使用する必要があります．@samp{foo=1; foo=2; echo
$foo}のようにします．

@c Don't rely on the exit status of an assignment: Ash 0.2 does not change
@c the status and propagates that of the last statement:
@c 
代入の終了ステータスに依存しないようにしてください．Ash 0.2はステータス
を変更せず，最後の文に伝搬します．

@example
$ false || foo=bar; echo $?
1
$ false || foo=`:`; echo $?
0
@end example

@noindent
@c and to make things even worse, @sc{qnx 4.25} just sets the exit status
@c to 0 in any case:
@c 
そして，更に悪いことに，@sc{qnx 4.25}はあらゆる場合で終了ステータスを0に
設定します．

@example
$ foo=`exit 1`; echo $?
0
@end example

@c To assign default values, follow this algorithm:
@c 
デフォルト値を代入するために，以下のアルゴリズムを使用してください．

@enumerate
@item
@c If the default value is a literal and does not contain any closing
@c brace, use:
@c 
デフォルト値がリテラルで閉じカッコを含まない場合は以下を使用してください．

@example
: $@{var='my literal'@}
@end example

@item
@c If the default value contains no closing brace, has to be expanded, and
@c the variable being initialized will never be IFS-split (i.e., it's not a
@c list), then use:
@c 
デフォルト値が閉じカッコを含まず，展開されず，初期化されている変数がIFS 
で分けられていない(すなわち，リストでない)場合，以下を使用してください．

@example
: $@{var="$default"@}
@end example

@item
@c If the default value contains no closing brace, has to be expanded, and
@c the variable being initialized will be IFS-split (i.e., it's a list),
@c then use:
@c 
デフォルト値が閉じカッコを含まず，展開されず，初期化されている変数がIFS 
で分けられる(すなわち，リストの)場合，以下を使用してください．

@example
var=$@{var="$default"@}
@end example

@item
@c If the default value contains a closing brace, then use:
@c 
デフォルト値が閉じカッコを含む場合，以下を使用してください．

@example
test "$@{var+set@}" = set || var='$@{indirection@}'
@end example
@end enumerate

@c In most cases @samp{var=$@{var="$default"@}} is fine, but in case of
@c doubt, just use the latter.  @xref{Shell Substitutions}, items
@c @samp{$@{@var{var}:-@var{value}@}} and @samp{$@{@var{var}=@var{value}@}}
@c for the rationale.
@c 
ほとんどの場合，@samp{var=$@{var="$default"@}}で良いのですが，駄目なとき
は後者を使用してください．正当性のための，
@samp{$@{@var{var}:-@var{value}@}}と@samp{$@{@var{var}=@var{value}@}}の
項目は，@xref{Shell Substitutions}.


@node Special Shell Variables, Limitations of Builtins, Assignments, Portable Shell
@section 特殊なシェル変数

@c Some shell variables should not be used, since they can have a deep
@c influence on the behavior of the shell.  In order to recover a sane
@c behavior from the shell, some variables should be unset, but
@c @command{unset} is not portable (@pxref{Limitations of Builtins}) and a
@c fallback value is needed.  We list these values below.
@c 
シェルの動作に深く影響するため，使用すべきではないシェル変数もあります．
シェルからまともな動作に戻るため，unsetすべき変数もありますが，
@command{unset}は移植性が無く(@pxref{Limitations of Builtins})，代替値が
必要になります．これらの変数を以下にリストアップします．

@c Alphabetical order, case insensitive, `A' before `a'.
@table @code
@item CDPATH
@evindex CDPATH
@c When this variable is set @code{cd} is verbose, so idioms such as
@c @samp{abs=`cd $rel && pwd`} break because @code{abs} receives the path
@c twice.
@c 
この変数が設定されているとき，@code{cd}は冗長で，そのため@samp{abs=`cd
$rel && pwd`}のような慣用句は，@code{abs}がパスを2回受けとるので駄目にな
ります．

@c FIXME: Which shells?  How do they behave?

@c Setting @code{CDPATH} to the empty value is not enough for most shells.
@c A simple colon is enough except for @code{zsh}, which prefers a leading
@c dot:
@c 
@code{CDPATH}を空の値に設定することは，ほとんどのシェルに対して十分では
ありません．単純なコロンは@code{zsh}以外では十分で，そこではドットの前置
が好まれます．

@example
zsh-3.1.6 % mkdir foo && (CDPATH=: cd foo)
/tmp/foo
zsh-3.1.6 % (CDPATH=:. cd foo)
/tmp/foo
zsh-3.1.6 % (CDPATH=.: cd foo)
zsh-3.1.6 %
@end example

@noindent
@c (of course we could just @code{unset} @code{CDPATH}, since it also
@c behaves properly if set to the empty string).
@c 
(もちろん，空の文字列を設定した場合正しく動作するので，@code{CDPATH}を
@code{unset}することもできます．)

@c Life wouldn't be so much fun if @command{bash} and @command{zsh} had the
@c same behavior:
@c 
@command{bash}と@command{zsh}が同じ動作をする場合は，人生はそんなに楽し
くはなかったでしょう．

@example
bash-2.02 % (CDPATH=:. cd foo)
bash-2.02 % (CDPATH=.: cd foo)
/tmp/foo
@end example

@c Therefore, a portable solution to neutralize @samp{CDPATH} is
@c 
そのため，@samp{CDPATH}を無効にするための移植性の解決方法は以下のように
なります．

@example
CDPATH=$@{ZSH_VERSION+.@}:
@end example

@noindent
@c Note that since @command{zsh} supports @command{unset}, you may unset
@c @samp{CDPATH} using @samp{:} as a fallback, see
@c @ref{Limitations of Builtins}.
@c 
@command{zsh}は@command{unset}をサポートするので，代替として@samp{:}を使
用して@samp{CDPATH}をunsetすることもできます．@ref{Limitations of
Builtins}を参照してください．

@item IFS
@evindex IFS
@c Don't set the first character of @code{IFS} to backslash.  Indeed,
@c Bourne shells use the first character (backslash) when joining the
@c components in @samp{"$@@"} and some shells then re-interpret (!) the
@c backslash escapes, so you can end up with backspace and other strange
@c characters.
@c 
@code{IFS}の最初の文字をバックスラッシュに設定しないでください．実際，
@samp{"$@@"}で要素を加えるときは，Bourneシェルは最初の文字(バックスラッ
シュ)を使用し，そして，バックスラッシュエスケープをもう一度解釈する(！) 
シェルもあり，そのため，バックスペースとその他の奇妙な文字で終ることが可
能になっています．

@item LANG
@itemx LC_ALL
@itemx LC_TIME
@itemx LC_CTYPE
@itemx LANGUAGE
@itemx LC_COLLATE
@itemx LC_NUMERIC
@itemx LC_MESSAGES
@evindex LANG
@evindex LC_ALL
@evindex LC_TIME
@evindex LC_CTYPE
@evindex LANGUAGE
@evindex LC_COLLATE
@evindex LC_NUMERIC
@evindex LC_MESSAGES

@c These must not be set unconditionally because not all systems understand
@c e.g. @samp{LANG=C} (notably SCO).  Fixing @env{LC_MESSAGES} prevents
@c Solaris @command{sh} from translating var values in @code{set}!  Non-C
@c @env{LC_CTYPE} values break the ctype check.  Fixing @env{LC_COLLATE}
@c makes scripts more portable in some cases.  For example, it causes the
@c regular expression @samp{[a-z]} to match only lower-case letters on
@c @sc{ascii} platforms.  However, @samp{[a-z]} does not work in general
@c even when @env{LC_COLLATE} is fixed; for example, it does not work for
@c @sc{ebcdic} platforms.  For maximum portability, you should use regular
@c expressions like @samp{[abcdefghijklmnopqrstuvwxyz]} that list
@c characters explicitly instead of relying on ranges.
@c 
全てのシステムが，例えば@samp{LANG=C}を理解できるわけではない(特にSCO)の
で，無条件にこれらを設定してはいけません．@env{LC_MESSAGES}を修正するこ
とで，Solaris @command{sh}が@code{set}内の変数値を変換することを妨げます！
Cではない@env{LC_CTYPE}の値で，ctypeの調査は駄目になります．
@env{LC_COLLATE}を優勢することで，シェルの移植性がより高くなる場合もあり
ます．例えば，正規表現の@samp{[a-z]}が@sc{ascii}プラットフォームの小文字
のみに一致するようになります．しかし，@env{LC_COLLATE}を修正されたときで
も，@samp{[a-z]}は一般的に動作しません．例えば，@sc{ebcdic}プラットフォー
ムでは，それが動作しません．移植性を最大にするために，範囲に依存する代わ
りに，明示的に文字をリストアップする@samp{[abcdefghijklmnopqrstuvwxyz]} 
のような正規表現を使用すべきです．

@c @emph{If} one of these variables is set, you should try to unset it,
@c using @samp{C} as a fall back value. see @ref{Limitations of Builtins},
@c builtin @command{unset}, for more details.
@c 
これらの変数の一つが設定されている@emph{場合}，代替値として@samp{C}を使
用することで，それをunsetするよう試みるべきです．詳細は，
@ref{Limitations of Builtins}の組み込み@command{unset}を参照してください．

@item NULLCMD
@evindex NULLCMD
@c When executing the command @samp{>foo}, @command{zsh} executes
@c @samp{$NULLCMD >foo}.  The Bourne shell considers @code{NULLCMD} is
@c @samp{:}, while @command{zsh}, even in Bourne shell compatibility mode,
@c sets @code{NULLCMD} to @samp{cat}.  If you forgot to set @code{NULLCMD},
@c your script might be suspended waiting for data on its standard input.
@c 
コマンド@samp{>foo}を実行しているとき，@command{zsh}は@samp{$NULLCMD
>foo}を実行します．Bourneシェルは@code{NULLCMD}が@samp{:}だと考えますが，
@command{zsh}はBourneシェル互換モードでも，@code{NULLCMD}を@samp{cat}に
設定します．@code{NULLCMD}の設定を忘れた場合，スクリプトは標準入力からの
データ待ちのためサスペンド状態になるかもしれません．

@item status
@evindex status
@c This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
@c hence read-only.  Do not use it.
@c 
この変数は，@code{zsh}(少なくとも3.1.6)での@samp{$?}へのエイリアスで，そ
のため読み出し専用になっています．使用しないでください．

@item PATH_SEPARATOR
@evindex PATH_SEPARATOR
@c On DJGPP systems, the @code{PATH_SEPARATOR} variable can be set to
@c either @samp{:} or @samp{;} to control the path separator @command{bash}
@c uses to set up certain environment variables (such as
@c @code{PATH}). Since this only works inside bash, you want autoconf to
@c detect the regular @sc{dos} path separator @samp{;}, so it can be safely
@c substituted in files that may not support @samp{;} as path separator. So
@c either unset this variable or set it to @samp{;}.
@c 
DJGPPシステムでは，@code{PATH_SEPARATOR}変数は，パス分離子を制御するため
に@samp{:}または@samp{;}に設定されているはずで，@command{bash}は
(@code{PATH}のような)特定の環境変数をセットアップするために使用します．
これはbash内部でのみ動作するので，パス分離子として@samp{;}がサポートされ
ていないファイル内で代入する方が安全です．そのため，この変数をunsetする
か，@samp{;}に設定してください．

@item RANDOM
@evindex RANDOM
@c Many shells provide @code{RANDOM}, a variable that returns a different
@c integer when used.  Most of the time, its value does not change when it
@c is not used, but on @sc{irix 6.5} the value changes all the time.  This
@c can be observed by using @command{set}.
@c 
@code{RANDOM}を提供するシェルも多くあり，その変数は使用するとき異なる整
数を返します．使用されていないとき，その値は変更さることはほとんどありま
せんが，@sc{irix 6.5}では毎回値が変更されます．これは，@command{set}を使
用して監視すべきです．
@end table


@node Limitations of Builtins, Limitations of Usual Tools, Special Shell Variables, Portable Shell
@section シェル組み込みの制限

@c No, no, we are serious: some shells do have limitations! :)
@c 
だめだよ全く，我々は本気なのに．制限のあるシェルもあるんです！ :)

@c You should always keep in mind that any built-in or command may support
@c options, and therefore have a very different behavior with arguments
@c starting with a dash.  For instance, the innocent @samp{echo "$word"}
@c can give unexpected results when @code{word} starts with a dash.  It is
@c often possible to avoid this problem using @samp{echo "x$word"}, taking
@c the @samp{x} into account later in the pipe.
@c 
全ての組み込みコマンドやコマンドは，オプションをサポートし，そのため，ダッ
シュで始まる引数を用いると，非常に異なる動作をすることを覚えておくべきで
す．例えば罪の無い@samp{echo "$word"}でも，@code{word}がダッシュで始まる
ときは予期しない結果となるはずです．この問題は，パイプでは@samp{x}を後で
評価するように，@samp{echo "x$word"}を使用することで避けることが可能です．

@table @asis
@item @command{!}
@cindex @command{!}
@c You can't use @command{!}, you'll have to rewrite your code.
@c 
@command{!}は使用できず，コードを書き換える必要があります．

@item @command{break}
@c ------------------
@cindex @command{break}
@c The use of @samp{break 2}, etcetera, is safe.
@c 
@samp{break 2}の使用などは安全です．

@item @command{case}
@c -----------------
@cindex @command{case}
@c You don't need to quote the argument; no splitting is performed.
@c 
引数を引用符で囲む必要はありません．分離は実行されません．

@c You don't need the final @samp{;;}, but you should use it.
@c 
最後の@samp{;;}は不要ですが，使用した方が良いでしょう．

@c Because of a bug in its @code{fnmatch}, @command{bash} fails to properly
@c handle backslashes in character classes:
@c 
@code{fnmatch}のバグのため，@command{bash}はバックススラッシュを文字クラ
スとして正しく処理することに失敗します．

@example
bash-2.02$ case /tmp in [/\\]*) echo OK;; esac
bash-2.02$
@end example

@noindent
@c This is extremely unfortunate, since you are likely to use this code to
@c handle @sc{unix} or @sc{ms-dos} absolute paths.  To work around this
@c bug, always put the backslash first:
@c 
このコードを@sc{unix}や@sc{ms-dos}の絶対パスとして使用したいので，非常に
残念なことになります．このバグを回避するために，常にバックスラッシュを最
初に書いてください．

@example
bash-2.02$ case '\TMP' in [\\/]*) echo OK;; esac
OK
bash-2.02$ case /tmp in [\\/]*) echo OK;; esac
OK
@end example

@item @command{echo}
@c -----------------
@cindex @command{echo}
@c The simple @code{echo} is probably the most surprising source of
@c portability troubles.  It is not possible to use @samp{echo} portably
@c unless both options and escape sequences are omitted.  New applications
@c which are not aiming at portability should use @samp{printf} instead of
@c @samp{echo}.
@c 
単純な@code{echo}ですが，移植性の問題の根源として最も驚くべきものかもし
れません．移植性の高い@samp{echo}を使用することは，オプションとエスケー
プシーケンスを削除しない限り不可能です．移植性を目標とする新しいアプリケー
ションでは，@samp{echo}の代わりに@samp{printf}を使用すべきです．

@c Don't expect any option.  @xref{Preset Output Variables}, @code{ECHO_N}
@c etc. for a means to simulate @option{-c}.
@c 
オプションを期待しないでください．@code{ECHO_N}などの，@option{-c}をシミュ
レーションする方法は，@xref{Preset Output Variables}.

@c Do not use backslashes in the arguments, as there is no consensus on
@c their handling.  On @samp{echo '\n' | wc -l}, the @command{sh} of
@c Digital Unix 4.0, @sc{mips risc/os} 4.52, answer 2, but the Solaris'
@c @command{sh}, Bash and Zsh (in @command{sh} emulation mode) report 1.
@c Please note that the problem is truly @command{echo}: all the shells
@c understand @samp{'\n'} as the string composed of a backslash and an
@c @samp{n}.
@c 
引数へのバックスラッシュは，処理について同意がとれていないので使用しない
でください．@samp{echo '\n' | wc -l}を用いれば，Digital Unix 4.0と
@sc{mips risc/os} 4.52の@command{sh}では答えは2になりますが，Solarisの
@command{sh}，Bash，そしてZsh(の@command{sh}エミュレーションモード)では
答えは1になります．問題が本当に@command{echo}にあることに注意してくださ
い．全てのシェルは，@samp{'\n'}をバックスラッシュと@samp{n}の組み合わせ
であると理解します．

@c Because of these problems, do not pass a string containing arbitrary
@c characters to @command{echo}.  For example, @samp{echo "$foo"} is safe
@c if you know that @var{foo}'s value cannot contain backslashes and cannot
@c start with @samp{-}, but otherwise you should use a here-document like
@c this:
@c 
これらの問題のため，不定の文字を含む文字列を@command{echo}に渡さないでく
ださい．例えば，@var{foo}の値がバックスラッシュを含んでおらず，@samp{-} 
で始まらないことを知っている場合，@samp{echo "$foo"}は安全ですが，それ以
外では以下のようなヒアドキュメントを使用すべきではありません．

@example
cat <<EOF
$foo
EOF
@end example


@item @command{exit}
@c -----------------
@cindex @command{exit}
@c The default value of @command{exit} is supposed to be @code{$?};
@c unfortunately, some shells, such as the DJGPP port of Bash 2.04, just
@c perform @samp{exit 0}.
@c 
@command{exit}のデフォルト値は@code{$?}を想定しています．残念ながらBash
2.04を移植したDJGPPのように，シェルによっては@samp{exit 0}を実行します．

@example
bash-2.04$ foo=`exit 1` || echo fail
fail
bash-2.04$ foo=`(exit 1)` || echo fail
fail
bash-2.04$ foo=`(exit 1); exit` || echo fail
bash-2.04$
@end example

@c Using @samp{exit $?} restores the expected behavior.
@c 
@samp{exit $?}を使用すると期待される動作に復帰します．

@c Some shell scripts, such as those generated by @command{autoconf}, use a
@c trap to clean up before exiting.  If the last shell command exited with
@c nonzero status, the trap also exits with nonzero status so that the
@c invoker can tell that an error occurred.
@c 
@command{autoconf}が生成するようなシェルスクリプトなどには，以前の終了状
態をクリーンアップする仕掛けを使用しているものもあります．シェルの最後の
コマンドがゼロではないステータスで終了した場合も，呼び出し側がエラーの発
生を報告できるように，ゼロでないステータスで終了する仕掛けがあります．

@c Unfortunately, in some shells, such as Solaris 8 @command{sh}, an exit
@c trap ignores the @code{exit} command's status.  In these shells, a trap
@c cannot determine whether it was invoked by plain @code{exit} or by
@c @code{exit 1}.  Instead of calling @code{exit} directly, use the
@c @code{AC_MSG_ERROR} macro that has a workaround for this problem.
@c 
残念ながら，Solaris 8 @command{sh}のように，シェルによっては@code{exit} 
コマンドのステータスを無視する仕掛けが存在するものもあります．これらのシェ
ルでは，その仕掛けで呼び出しがプレーンの@code{exit}によるものなのか，
@code{exit 1}によるものなのか決定できません．@code{exit}を直接呼び出す代
わりに，この問題を回避するために@code{AC_MSG_ERROR}を呼び出してください．

@item @command{export}
@c -------------------
@cindex @command{export}
@c The builtin @command{export} dubs @dfn{environment variable} a shell
@c variable.  Each update of exported variables corresponds to an update of
@c the environment variables.  Conversely, each environment variable
@c received by the shell when it is launched should be imported as a shell
@c variable marked as exported.
@c 
組み込みの@command{export}は，@dfn{環境変数}をシェル変数にダビングします．
変数がエクスポートされて更新される度に，環境変数も更新されます．反対に，
環境変数はがシェルから読み出される度に，開始時にエクスポートされたものと
して印のついたシェル変数をインポートするべきです．

@c Alas, many shells, such as Solaris 2.5, IRIX 6.3, IRIX 5.2, AIX 4.1.5
@c and DU 4.0, forget to @command{export} the environment variables they
@c receive.  As a result, two variables are coexisting: the environment
@c variable and the shell variable.  The following code demonstrates this
@c failure:
@c 
ああ，Solaris 2.5，IRIX 6.3，IRIX 5.2，AIX 4.1.5，そしてDU 4.0のような多
くのシェルは，受けとった環境変数を@command{export}することを忘れています．
結果として，2つの変数は共存しています．環境変数とシェル変数の2つです．以
下のコードは，この失敗を説明するものです．

@example
#! /bin/sh
echo $FOO
FOO=bar
echo $FOO
exec /bin/sh $0
@end example

@noindent
@c when run with @samp{FOO=foo} in the environment, these shells will print
@c alternately @samp{foo} and @samp{bar}, although it should only print
@c @samp{foo} and then a sequence of @samp{bar}s.
@c 
環境変数で@samp{FOO=foo}として実行した場合，これらのシェルはそれぞれ
@samp{foo}と@samp{bar}を交互に出力しますが，@samp{foo}を出力した後に，続
けて@samp{bar}を出力します．

@c Therefore you should @command{export} again each environment variable
@c that you update.
@c 
このため，それぞれ更新した環境変数を再び@command{export}すべきです．


@item @command{false}
@c ------------------
@cindex @command{false}
@c Don't expect @command{false} to exit with status 1: in the native Bourne
@c shell of Solaris 8, it exits with status 255.
@c 
@command{false}がステータス1で終了することを期待してはいけません．
Solaris 8のネイティブなBourneシェルは，ステータス255で終了します．


@item @command{for}
@c ----------------
@cindex @command{for}
@c To loop over positional arguments, use:
@c 
位置の引数までループするため，以下のように使用したとします．

@example
for arg
do
  echo "$arg"
done
@end example

@noindent
@c You may @emph{not} leave the @code{do} on the same line as @code{for},
@c since some shells improperly grok:
@c 
シェルによっては，間違ってgrokするので，@code{for}と同じ行に@code{do}を
おいては@emph{いけません}．

@example
for arg; do
  echo "$arg"
done
@end example

@c If you want to explicitly refer to the positional arguments, given the
@c @samp{$@@} bug (@pxref{Shell Substitutions}), use:
@c 
明示的に位置の引数を参照したい場合，@samp{$@@}のバグがあるので，以下のよ
うに使用してください．

@example
for arg in $@{1+"$@@"@}; do
  echo "$arg"
done
@end example

@item @command{if}
@c ---------------
@cindex @command{if}
@c Using @samp{!} is not portable.  Instead of:
@c 
@samp{!}の使用は移植性がありません．以下のように書く変わりに，

@example
if ! cmp -s file file.new; then
  mv file.new file
fi
@end example

@noindent
@c use:
@c 
以下を使用してください．

@example
if cmp -s file file.new; then :; else
  mv file.new file
fi
@end example

@c There are shells that do not reset the exit status from an @command{if}:
@c 
@command{if}の終了ステータスをリセットしないシェルもあります．

@example
$ if (exit 42); then true; fi; echo $?
42
@end example

@noindent
@c whereas a proper shell should have printed @samp{0}.  This is especially
@c bad in Makefiles since it produces false failures.  This is why properly
@c written Makefiles, such as Automake's, have such hairy constructs:
@c 
そこでは，適切なシェルなら@samp{0}を出力すべきです．これは，異常終了とな
るので，Makefilesでは特に問題です．これが，Automakeが生成するような適切
に書かれているMakefileがごちゃごちゃした構成になっている理由です．

@example
if test -f "$file"; then
  install "$file" "$dest"
else
  :
fi
@end example


@item @command{set}
@c ----------------
@cindex @command{set}
@c This builtin faces the usual problem with arguments starting with a
@c dash.  Modern shells such as Bash or Zsh understand @option{--} to specify
@c the end of the options (any argument after @option{--} is a parameters,
@c even @samp{-x} for instance), but most shells simply stop the option
@c processing as soon as a non-option argument is found.  Therefore, use
@c @samp{dummy} or simply @samp{x} to end the option processing, and use
@c @command{shift} to pop it out:
@c 
この組み込みコマンドは，一般的なダッシュで始まる引数の問題に直面します．
BashやZshのような現在のシェルでは，オプションの終りを指定する
@option{--}(@option{--}以降の全ての引数は，例えば@samp{-x}であってもパラ
メータです)を理解しますが，ほとんどのシェルは，オプションではない引数が
見つかるとすぐにオプションの処理を単純に停止します．このため，オプション
の処理を終了するために@samp{dummy}や単純に@samp{x}を使用し，それを取り出
すために@command{shift}を使用してください．

@example
set x $my_list; shift
@end example

@item @command{shift}
@c ------------------
@cindex @command{shift}
@c Not only is @command{shift}ing a bad idea when there is nothing left to
@c shift, but in addition it is not portable: the shell of @sc{mips
@c risc/os} 4.52 refuses to do it.
@c 
@command{shift}するものが無いとき，@command{shift}を使用することは悪い考
え方であるだけでなく，移植性が無くなってしまいことも追加されてしまいます．
@sc{mips risc/os} 4.52のシェルは，それを廃棄してしまいます．

@item @command{test}
@c -----------------
@cindex @command{test}
@c The @code{test} program is the way to perform many file and string
@c tests.  It is often invoked by the alternate name @samp{[}, but using
@c that name in Autoconf code is asking for trouble since it is an M4 quote
@c character.
@c 
@code{test}プログラムは，多くのファイルと文字列のテストを実行する方法で
す．それは別名の@samp{[}で呼び出されることも多いのですが，M4の引用符文字
という問題から，Autoconfのコードではその名前を使用することが要求されてい
ます．

@c If you need to make multiple checks using @code{test}, combine them with
@c the shell operators @samp{&&} and @samp{||} instead of using the
@c @code{test} operators @option{-a} and @option{-o}.  On System V, the
@c precedence of @option{-a} and @option{-o} is wrong relative to the unary
@c operators; consequently, @sc{posix} does not specify them, so using them
@c is nonportable.  If you combine @samp{&&} and @samp{||} in the same
@c statement, keep in mind that they have equal precedence.
@c 
@code{test}を使用して複数の調査を行う必要がある場合，@code{test}の演算子
の@samp{-a}と@samp{-o}の代わりに，シェル演算子の@samp{&&}と@samp{||}で組
み合わせてください．System Vでは，@samp{-a}と@samp{-o}の優先順位は，単項
演算子とは間違った関係になっています．従って，@sc{posix}はそれらを指定し
ないので，それを使用すると移植性が無くなります．同じ文で@samp{&&}と
@samp{||}を組み合わせる場合，同じ優先順位があることを覚えておいてくださ
い．

@c You may use @samp{!} with @command{test}, but not with @command{if}:
@c @samp{test ! -r foo || exit 1}.
@c 
@command{test}で@samp{!}を使用することはできますが，@command{if}ではでき
ません．@samp{test ! -r foo || exit 1}．


@item @command{test} (files)
@c -------------------------
@c To enable @code{configure} scripts to support cross-compilation, they
@c shouldn't do anything that tests features of the build system instead of
@c the host system.  But occasionally you may find it necessary to check
@c whether some arbitrary file exists.  To do so, use @samp{test -f} or
@c @samp{test -r}.  Do not use @samp{test -x}, because @sc{4.3bsd} does not
@c have it.  Do not use @samp{test -e} either, because Solaris 2.5 does not
@c have it.
@c 
@code{configure}スクリプトでクロスコンパイルのサポートを可能にするため，
ホストシステムの代わりに，ビルドシステムの特徴のテストは，何もすべきでは
ありません．しかし，任意のファイルの存在を調査する必要があることが判明す
るかもしれません．そうするために@samp{test -f}や@samp{test -r}を使用して
ください．4.3BSDには@samp{test -x}が無いのでを使用しないでください．また，
Solaris 2.5には@samp{test -e}が無いので使用しないでください．


@item @command{test} (strings)
@c ---------------------------
@c Avoid @samp{test "@var{string}"}, in particular if @var{string} might
@c start with a dash, since @code{test} might interpret its argument as an
@c option (e.g., @samp{@var{string} = "-n"}).
@c 
@code{test}は引数をオプションとして解釈するので(例えば，
@samp{@var{string} = "-n"})，特に@var{string}がダッシュで始まる場合，
@samp{test "@var{string}"}を避けてください．

@c Contrary to a common belief, @samp{test -n @var{string}} and @samp{test
@c -z @var{string}} @strong{are} portable, nevertheless many shells (such
@c as Solaris 2.5, AIX 3.2, UNICOS 10.0.0.6, Digital Unix 4 etc.) have
@c bizarre precedence and may be confused if @var{string} looks like an
@c operator:
@c 
一般に信じられていることとは反対に，@samp{test -n @var{string}}と
@samp{test -z @var{string}}は，移植性が@strong{あります}が，それにもかか
わらず，(Solaris 2.5，AIX 3.2，UNICOS 10.0.0.6，Digital Unix 4等の)多く
のシェルには信じられない優先順位があり，@var{string}がオペレータのように
見える場合は混乱するかもしれません．

@example
$ test -n =
test: argument expected
@end example

@c If there are risks, use @samp{test "x@var{string}" = x} or @samp{test
@c "x@var{string}" != x} instead.
@c 
危険はありますが，代わりに@samp{test "x@var{string}" = x}や@samp{test
"x@var{string}" != x}を使用してください．

@c It is frequent to find variations of the following idiom:
@c 
以下のような慣用句はよく見かけます．

@example
test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
  @var{action}
@end example

@noindent
@c to take an action when a token matches a given pattern.  Such constructs
@c should always be avoided by using:
@c 
与えられているパターンに一致するとき動作します．そのような構文は，常に使
用を避けるべきです．

@example
echo "$ac_feature" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1 &&
  @var{action}
@end example

@noindent
@c Use @code{case} where possible since it is faster, being a shell builtin:
@c 
シェルの組み込みコマンドなのでより速くなっているため，可能な場所では
@code{case}を使用してください．

@example
case $ac_feature in
  *[!-a-zA-Z0-9_]*) @var{action};;
esac
@end example

@c Alas, negated character classes are probably not portable, although no
@c shell is known to not support the @sc{posix.2} syntax @samp{[!@dots{}]}
@c (when in interactive mode, @command{zsh} is confused by the
@c @samp{[!@dots{}]} syntax and looks for an event in its history because of
@c @samp{!}).  Many shells do not support the alternative syntax
@c @samp{[^@dots{}]} (Solaris, Digital Unix, etc.).
@c 
ああ，@sc{posix.2}の構文@samp{[!@dots{}]}をサポートしていないシェルは知
りませんが，文字クラスの否定は移植性が無いかもしれません( 対話的モードで
は，@command{zsh}は@samp{[!@dots{}]}の構文で混乱し，@samp{!}のため，ヒス
トリ内のイベントを探します)．多くのシェルは，構文@samp{[^@dots{}]}の代替
物をサポートしていません(Solaris，Digital Unix等)．

@c One solution can be:
@c 
以下は解決方法の一つです．

@example
expr "$ac_feature" : '.*[^-a-zA-Z0-9_]' >/dev/null &&
  @var{action}
@end example

@noindent
@c or better yet
@c 
以下の方が良いかもしれません．

@example
expr "x$ac_feature" : '.*[^-a-zA-Z0-9_]' >/dev/null &&
  @var{action}
@end example

@c @samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
@c "X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
@c @samp{@var{foo}} contains backslashes.
@c 
@samp{@var{foo}}がバックスラッシュを含んでいるとき問題を回避するので，
@samp{expr "X@var{foo}" : "X@var{bar}"}は，@samp{echo "X@var{foo}" |
grep "^X@var{bar}"}より堅牢です．


@item @command{trap}
@c -----------------
@cindex @command{trap}
@c It is safe to trap at least the signals 1, 2, 13 and 15.  You can also
@c trap 0, i.e., have the @command{trap} run when the script ends (either via an
@c explicit @command{exit}, or the end of the script).
@c 
少なくとも，シグナルの1，2，13，そして15をトラップすることは安全です．ま
た，0のトラップも可能で，すなわち，スクリプトが終るとき(明示的な
@command{exit}やスクリプトの終り)に@command{trap}を実行するということで
す．

@c Although @sc{posix} is not absolutely clear on this point, it is widely
@c admitted that when entering the trap @samp{$?} should be set to the exit
@c status of the last command run before the trap.  The ambiguity can be
@c summarized as: ``when the trap is launched by an @command{exit}, what is
@c the @emph{last} command run: that before @command{exit}, or
@c @command{exit} itself?''
@c 
@sc{posix}では，この点は絶対的に明確ではありませんが，@samp{$?}をトラッ
プするとき，トラップの前の最後に実行されたコマンドの終了ステータスが設定
されるべきだということは，広く認められています．曖昧な部分は以下のように
要約可能です．``トラップが@command{exit}で開始されるとき，実行された
@emph{最後の}コマンドは何でしょう？@command{exit}の直前ですか？それとも
@command{exit}自身ですか？''

@c Bash considers @command{exit} to be the last command, while Zsh and
@c Solaris 8 @command{sh} consider that when the trap is run it is
@c @emph{still} in the @command{exit}, hence it is the previous exit status
@c that the trap receives:
@c 
Bashは@command{exit}を最後のコマンドと考えますが，ZshとSolaris 8
@command{sh}は，トラップが実行されたとき@command{exit}の処理@emph{中}な
ので，トラップを受信する前の終了ステータスだと考えられます．

@example
$ cat trap.sh
trap 'echo $?' 0
(exit 42); exit 0
$ zsh trap.sh
42
$ bash trap.sh
0
@end example

@c The portable solution is then simple: when you want to @samp{exit 42},
@c run @samp{(exit 42); exit 42}, the first @command{exit} being used to
@c set the exit status to 42 for Zsh, and the second to trigger the trap
@c and pass 42 as exit status for Bash.
@c 
移植性の解決方法は簡単です．@samp{exit 42}にしたいとき，@samp{(exit 42);
exit 42}を実行し，最初の@command{exit}はZshに対する42の終了ステータスを
設定するために使用され，2番目は，トラップを誘発し，Bashに対して終了ステー
タスとしての42を渡すためです．

@c The shell in FreeBSD 4.0 has the following bug: @samp{$?} is reset to 0
@c by empty lines if the code is inside @command{trap}.
@c 
FreeBSD 4.0のシェルには，以下のバグがあります．コードが内部
@command{trap}の場合，空行で@samp{$?}が0にリセットされます．

@example
$ trap 'false

echo $?' 0
$ exit
0
@end example

@noindent
@c Fortunately, this bug only affects @command{trap}.
@c 
幸運にもこのバグは@command{trap}のみに影響します．

@item @command{true}
@c -----------------
@cindex @command{true}
@cindex @command{:}
@c Don't worry: as far as we know @command{true} is portable.
@c Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
@c portable shell community tends to prefer using @command{:}.  This has a
@c funny side effect: when asked whether @command{false} is more portable
@c than @command{true} Alexandre Oliva answered:
@c 
心配しないでください．我々が知っている限り@command{true}には移植性があり
ます．それにもかかわらず，常に組み込みコマンドというわけではなく(例えば
Bash 1.x)，移植性の高いシェルのコミュニティは，@command{:}の使用を好みが
ちです．これには副作用があります．@command{false}が@command{true}より移
植性が高いかどうか尋ねてみたときのAlexandre Olivaの回答です．

@quotation
@c In a sense, yes, because if it doesn't exist, the shell will produce an
@c exit status of failure, which is correct for @command{false}, but not
@c for @command{true}.
@c 
それらが存在しない場合，シェルは，@command{false}に対しては正しく，
@command{true}に対しては正しくない，異常終了のステータスを生成するので，
ある意味ではそのとおりです．
@end quotation


@item @command{unset}
@c ------------------
@cindex @command{unset}
@c You cannot assume the support of @command{unset}, nevertheless, because
@c it is extremely useful to disable embarrassing variables such as
@c @code{CDPATH} or @code{LANG}, you can test for its existence and use
@c it @emph{provided} you give a neutralizing value when @command{unset} is
@c not supported:
@c 
@command{unset}のサポートを仮定することはできませんが，@code{CDPATH}や
@code{LANG}のような邪魔な変数を利用不可能にすることは非常に役立つので，
存在をテストし，@emph{提供されていれば}それを使用し，@command{unset}がサ
ポートされていないときは，無効にする値を与えてください．

@example
if (unset FOO) >/dev/null 2>&1; then
  unset=unset
else
  unset=false
fi
$unset CDPATH || CDPATH=:
@end example

@c @xref{Special Shell Variables}, for some neutralizing values. Also, see
@c @ref{Limitations of Builtins}, documentation of @command{export}, for
@c the case of environment variables.
@c 
無効にする値については，@xref{Special Shell Variables}. また，環境変数の
caseについては@command{export}のドキュメント@ref{Limitations of
Builtins}も参照してください．
@end table


@node Limitations of Usual Tools, Limitations of Make, Limitations of Builtins, Portable Shell
@section 通常のツールの制限

@c The small set of tools you can expect to find on any machine can still
@c include some limitations you should be aware of.
@c 
あらゆるマシンで見つかることが期待できる小さなツールセットには，気付いて
おくべき制限がいくつか含まれているはずです．

@table @asis
@item @command{awk}
@c ----------------
@cindex @command{awk}
@c Don't leave white spaces before the parentheses in user functions calls,
@c @sc{gnu} awk will reject it:
@c 
ユーザ関数呼び出しで，カッコの前に空白を残してはならず，@sc{gnu} awkはそ
れを拒絶します．

@example
$ gawk 'function die () @{ print "Aaaaarg!"  @}
        BEGIN @{ die () @}'
gawk: cmd. line:2:         BEGIN @{ die () @}
gawk: cmd. line:2:                      ^ parse error
$ gawk 'function die () @{ print "Aaaaarg!"  @}
        BEGIN @{ die() @}'
Aaaaarg!
@end example

@c If you want your program to be deterministic, don't depend on @code{for}
@c on arrays:
@c 
プログラムを決定的にしたい場合，配列上の@code{for}に依存しないでください．

@example
$ cat for.awk
END @{
  arr["foo"] = 1
  arr["bar"] = 1
  for (i in arr)
    print i
@}
$ gawk -f for.awk </dev/null
foo
bar
$ nawk -f for.awk </dev/null
bar
foo
@end example

@c Some AWK, such as HPUX 11.0's native one, have regex engines fragile to
@c inner anchors:
@c 
HPUX 11.0のネイティブのAWKのように，内部アンカーに調子が悪いregexエンジ
ンがあるものもあります．

@example
$ echo xfoo | $AWK '/foo|^bar/ @{ print @}'
$ echo bar | $AWK '/foo|^bar/ @{ print @}'
bar
$ echo xfoo | $AWK '/^bar|foo/ @{ print @}'
xfoo
$ echo bar | $AWK '/^bar|foo/ @{ print @}'
bar
@end example

@noindent
@c Either do not depend on such patterns (i.e., use @samp{/^(.*foo|bar)/},
@c or use a simple test to reject such AWK.
@c 
そのようなパターンに依存したり(すなわち，@samp{/^(.*foo|bar)/}を使用する)，
そのようなAWKを拒絶する単純なテストを使用したりしないでください．


@item @command{cat}
@c ----------------
@cindex @command{cat}
@c Don't rely on any option.  The option @option{-v}, which displays
@c non-printing characters, @emph{seems} portable, though.
@c 
オプションに依存しないようにしてください．しかし，表示不可能な文字を表示
するオプション@option{-v}は，移植性が@emph{ありそうです}．

@item @command{cc}
@c ---------------
@c When a compilation such as @samp{cc foo.c -o foo} fails, some compilers
@c (such as @sc{cds} on Reliant @sc{unix}) leave a @file{foo.o}.
@c 
@samp{cc foo.c -o foo}のようなコンパイルが失敗したとき，(Reliant
@sc{unix}の@sc{cds}のように)@file{foo.o}を残すコンパイラもあります．


@item @command{cmp}
@c ----------------
@cindex @command{cmp}
@c @command{cmp} performs a raw data comparison of two files, while
@c @command{diff} compares two text files.  Therefore, if you might compare
@c DOS files, even if only checking whether two files are different, use
@c @command{diff} to avoid spurious differences due to differences of
@c newline encoding.
@c 
@command{cmp}は，2つのファイルの生のデータの比較を実行しますが，
@command{diff}は2つのテキストファイルを比較します．そのため，DOSのファイ
ルを比較する場合，2つのファイルが異なっている稼働かを調査するだけの場合
でも改行のエンコードの違いで見せかけの差が発生することを避けるため，
@command{diff}を使用してください．


@item @command{cp}
@c ---------------
@cindex @command{cp}
@c This is thanks to Ian.
@c SunOS @command{cp} does not support @option{-f}, although its
@c @command{mv} does.  It's possible to deduce why @command{mv} and
@c @command{cp} are different with respect to @option{-f}.  @command{mv}
@c prompts by default before overwriting a read-only file.  @command{cp}
@c does not.  Therefore, @command{mv} requires a @option{-f} option, but
@c @command{cp} does not.  @command{mv} and @command{cp} behave differently
@c with respect to read-only files because the simplest form of
@c @command{cp} cannot overwrite a read-only file, but the simplest form of
@c @command{mv} can.  This is because @command{cp} opens the target for
@c write access, whereas @command{mv} simply calls @code{link} (or, in
@c newer systems, @code{rename}).
@c 
SunOS @command{cp}は@option{-f}をサポートしていませんが，その
@command{mv}はサポートしています．@command{mv}と@command{cp}が
@option{-f}に関して異なっている理由については由来が推測できます．
@command{mv}はデフォルトで，読み込み専用のファイルを上書きする前にプロン
プトを表示します．@command{cp}はそうではありません．そのため，
@command{mv}には@option{-f}オプションが必要ですが，@command{cp}には不要
です．@command{mv}と@command{cp}は，読み込み専用のファイルに対して，動作
が異なり，その理由は，最も簡単な@command{cp}の形式では，読み込み専用のファ
イルを上書きできませんが，最も簡単な@command{mv}形式では，それが可能だと
いうことです．この理由は，@command{cp}はターゲットを書き込みアクセスで開
くのに対し，@command{mv}は単純に@code{link}(または，新しいシステムでは
@code{rename})を呼び出すためです．
@c Ian said: ``I don't think -p or -r are portable''!!! How can you live
@c without -r???


@item @command{diff}
@c -----------------
@cindex @command{diff}
@c Option @option{-u} is nonportable.
@c 
@option{-u}には移植性がありません，

@c Some implementations, such as Tru64's, fail when comparing to
@c @file{/dev/null}.  Use an empty file instead.
@c 
Tru64のように，実装によっては@file{/dev/null}の比較で失敗するものもあり
ます．その代わりに空のファイルを使用してください．

@item @command{dirname}
@c --------------------
@cindex @command{dirname}
@c Not all hosts have @command{dirname}, but it is reasonably easy to
@c emulate, e.g.:
@c 
全てのホストに@command{dirname}があるわけではありませんが，エミュレート
は妥当な程度に容易です．

@example
dir=`expr "x$file" : 'x\(.*\)/[^/]*' \|
          '.'      : '.'
@end example

@noindent
@c But there are a few subtilities, e.g., under UN*X, should @samp{//1}
@c give @samp{/}?  Paul Eggert answers:
@c 
しかし，微妙なところもあり，例えばUN*Xでは@samp{//1}は@samp{/}になるので
しょうか？以下はPaul Eggertの回答です．

@quotation
@c No, under some older flavors of Unix, leading @samp{//} is a special
@c path name: it refers to a ``super-root'' and is used to access other
@c machines' files.  Leading @samp{///}, @samp{////}, etc. are equivalent
@c to @samp{/}; but leading @samp{//} is special.  I think this tradition
@c started with Apollo Domain/OS, an OS that is still in use on some older
@c hosts.
@c 
古いUnixライクのものではそうはならず，前置される@samp{//}は特殊なパス名
になります．それは``スーパールート''を参照し，他のマシンのファイルをアク
セスするために使用されます．前置される@samp{///}，@samp{////}などは，
@samp{/}と等価です．しかし，前置される@samp{//}は特殊です．この伝統的は
Apollo Domain/OSで始まったと考えていて，古いホストではまだそのOSを使用し
ています．

@c POSIX.2 allows but does not require the special treatment for @samp{//}.
@c It says that the behavior of dirname on path names of the form
@c @samp{//([^/]+/*)?}  is implementation defined.  In these cases, GNU
@c @command{dirname} returns @samp{/}, but it's more portable to return
@c @samp{//} as this works even on those older flavors of Unix.
@c 
POSIX.2では可能ですが，@samp{//}に対する特別扱いは要求されていません．そ
こでは，形式@samp{//([^/]+/*)?}のパス名でのdirnameの動作は，実装で定義さ
れると告げています．これらの場合，GNU @command{dirname}は@samp{/}を返し
ますが，古いUnixライクのものでも動作するように@samp{//}を返した方が移植
性が高いでしょう．

@c I have heard rumors that this special treatment of @samp{//} may be
@c dropped in future versions of POSIX, but for now it's still the
@c standard.
@c 
この@samp{//}の特殊扱いは将来のPOSIXバージョンでなくなるかもしれないがと
いう噂をきいていますが，今はまだ標準です．
@end quotation


@item @command{egrep}
@c ------------------
@cindex @command{egrep}
@c The empty alternative is not portable, use @samp{?} instead. For
@c instance with Digital Unix v5.0:
@c 
空の選択肢は移植性が無く，代わりに@samp{?}を使用してください．例えば，
Digital Unix v5.0では以下のようになります．

@example
> printf "foo\n|foo\n" | egrep '^(|foo|bar)$'
|foo
> printf "bar\nbar|\n" | egrep '^(foo|bar|)$'
bar|
> printf "foo\nfoo|\n|bar\nbar\n" | egrep '^(foo||bar)$'
foo
|bar
@end example

@c @command{egrep} also suffers the limitations of @command{grep}.
@c 
@command{egrep}も@command{grep}の制限で苦しむことになります．


@item @command{expr}
@c -----------------
@cindex @command{expr}
@c No @command{expr} keyword starts with @samp{x}, so use @samp{expr
@c x"@var{word}" : 'x@var{regex}'} to keep @command{expr} from
@c misinterpreting @var{word}.
@c 
@samp{x}で始まる@command{expr}キーワードはないので，@command{expr}が
@var{word}を間違って解釈しないように，@samp{expr x"@var{word}" :
'x@var{regex}'}を使用してください．

@c Don't use @code{length}, @code{substr}, @code{match} and @code{index}.
@c 
@code{length}，@code{substr}，@code{match}，そして@code{index}は使用しな
いでください．

@item @command{expr} (@samp{|})
@cindex @command{expr} (@samp{|})
@c You can use @samp{|}.  Although @sc{posix} does require that @samp{expr
@c ''} return the empty string, it does not specify the result when you
@c @samp{|} together the empty string (or zero) with the empty string.  For
@c example:
@c 
@samp{|}を使用することは可能です．@sc{posix}では，@samp{expr ''}が空の文
字列を返すことを必須としていませんが，空の文字列を用いて空の文字列(また
はゼロ)とともに@samp{|}を用いたときの結果は安全ではありません．例えば以
下を考えます．

@example
expr '' \| ''
@end example

@c @sc{gnu}/Linux and @sc{posix.2-1992} return the empty string for this
@c case, but traditional Unix returns @samp{0} (Solaris is one such
@c example).  In the latest @sc{posix} draft, the specification has been
@c changed to match traditional Unix's behavior (which is bizarre, but it's
@c too late to fix this).  Please note that the same problem does arise
@c when the empty string results from a computation, as in:
@c 
@sc{gnu}/Linuxと@sc{posix.2-1992}ではこの場合空の文字列を返しますが，伝
統的なUnixでは@samp{0}を返します(Solarisはそのような例の一つです)．最近
の@sc{posix}ドラフトでは，その指定は伝統的なUnixの動作に一致するよう変更
されています(信じられないことですが，これを修正するには時すでに遅しです)．
同じ問題が計算結果が空の文字列になる時にも，以下の状態では発生します．

@example
expr bar : foo \| foo : bar
@end example

@noindent
@c Avoid this portability problem by avoiding the empty string.
@c 
空の文字列を避けることで，この移植性の問題を避けてください．

@item @command{expr} (@samp{:})
@c ----------------------------
@cindex @command{expr}
@c Don't use @samp{\?}, @samp{\+} and @samp{\|} in patterns, they are
@c not supported on Solaris.
@c 
Solarisではサポートされていないので，パターン内に，@samp{\?}，@samp{\+}，
そして@samp{\|}を使用しないでください．

@c The @sc{posix.2-1992} standard is ambiguous as to whether @samp{expr a :
@c b} (and @samp{expr 'a' : '\(b\)'}) output @samp{0} or the empty string.
@c In practice, it outputs the empty string on most platforms, but portable
@c scripts should not assume this.  For instance, the @sc{qnx} 4.25 native
@c @command{expr} returns @samp{0}.
@c 
@sc{posix.2-1992}標準では，@samp{expr a : b}(と@samp{expr 'a' :
'\(b\)'})が@samp{0}を出力するか空の文字列を出力するのかは明確ではありま
せん．実際問題として，それはほとんどのプラットフォームで空の文字列を出力
しますが，移植性の高いスクリプトでは，これを仮定すべきではありません．例
えば，@sc{qnx} 4.25ネイティブの@command{expr}は@samp{0}を返します．

@c You may believe that one means to get a uniform behavior would be to use
@c the empty string as a default value:
@c 
均一な動作を得る手段として，デフォルト値として空の文字列を使用することになっていると信じているかもしれません．

@example
expr a : b \| ''
@end example

@noindent
@c unfortunately this behaves exactly as the original expression, see the
@c @samp{@command{expr} (@samp{:})} entry for more information.
@c 
残念ながら，これは元の式として正確に動作します．詳細は，
@samp{@command{expr} (@samp{:})}の項目を参照してください．

@c Older @command{expr} implementations (e.g. SunOS 4 @command{expr} and
@c Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
@c @command{expr} to fail if the matched substring is longer than 120
@c bytes.  In this case, you might want to fall back on @samp{echo|sed} if
@c @command{expr} fails.
@c 
古い@command{expr}の実装(例えば，SunOS 4の@command{expr}とSolaris 8の
@command{/usr/ucb/expr})には，一致したサブ文字列が120バイトより長い場合，
@command{expr}が異常終了するという，思慮の欠けた長さの制限があります．こ
の状況では，@command{expr}が失敗した場合，@samp{echo|sed}に頼りたいと思
うかもしれません。

@c Don't leave, there is some more!
@c 
残っているものはそれだけではありません！

@c The @sc{qnx} 4.25 @command{expr}, in addition of preferring @samp{0} to
@c the empty string, has a funny behavior in its exit status: it's always 1
@c when parentheses are used!
@c 
@sc{qnx} 4.25の@command{expr}には，空の文字列ではなく@samp{0}となること
に加えて，終了ステータスでおかしな動作があります．それはカッコが使用され
ている時には，常に1になるということです！

@example
$ val=`expr 'a' : 'a'`; echo "$?: $val"
0: 1
$ val=`expr 'a' : 'b'`; echo "$?: $val"
1: 0

$ val=`expr 'a' : '\(a\)'`; echo "?: $val"
1: a
$ val=`expr 'a' : '\(b\)'`; echo "?: $val"
1: 0
@end example

@noindent
@c In practice this can be a big problem if you are ready to catch failures
@c of @command{expr} programs with some other method (such as using
@c @command{sed}), since you may get twice the result.  For instance
@c 
実際に，(@command{sed}のような)他の手法で@command{expr}プログラムで異常
終了を捕獲する準備がある場合，結果を2回得る可能性があるので，これは大き
な問題となります．例えば以下を考えます．

@example
$ expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'
@end example

@noindent
@c will output @samp{a} on most hosts, but @samp{aa} on @sc{qnx} 4.25.  A
@c simple work around consists in testing @command{expr} and use a variable
@c set to @command{expr} or to @command{false} according to the result.
@c 
ほとんどのホストでは@samp{a}を出力しますが，@sc{qnx} 4.25では@samp{aa}に
なります．単純な回避方法として，@command{expr}でのテストを構成し，結果に
よって@command{expr}や@command{false}で変数を設定する方法を使用します．


@item @command{find}
@c -----------------
@c The option @option{-maxdepth} seems to be GNU specific. Tru64 v5.1,
@c NetBSD 1.5 and Solaris 2.5 @command{find} commands do not understand it.
@c 
オプション@option{-maxdepth}はGNU特有のようです．Tru64 v5.1，NetBSD 1.5，
そしてSolaris 2.5の@command{find}コマンドはそれを理解しません．


@item @command{grep}
@c -----------------
@cindex @command{grep}
@c Don't use @samp{grep -s} to suppress output, because @samp{grep -s} on
@c System V does not suppress output, only error messages.  Instead,
@c redirect the standard output and standard error (in case the file
@c doesn't exist) of @code{grep} to @file{/dev/null}.  Check the exit
@c status of @code{grep} to determine whether it found a match.
@c 
System Vの@samp{grep -s}はエラーメッセージのみ抑制し，出力を抑制しないの
で，出力を抑制するために@samp{grep -s}を使用しないでください．その代わり
に(ファイルが存在しない場合) @code{grep}の標準出力と標準エラー出力を
@file{/dev/null}へリダイレクトしてください．一致が見つかったかどうかを決
定するために，@code{grep}の終了ステータスを調査してください．

@c Don't use multiple regexps with @option{-e}, as some @code{grep} will only
@c honor the last pattern (eg., IRIX 6.5 and Solaris 2.5.1).  Anyway,
@c Stardent Vistra SVR4 @code{grep} lacks @option{-e}@dots{}  Instead, use
@c alternation and @code{egrep}.
@c 
最後のパターンのみ尊重する@code{grep}(例えば，IRIX 6.5とSolaris 2.5.1)も
あるので，@option{-e}で複数の正規表現を使用しないでください．どちらにし
ろ，Stardent Vistra SVR4の@code{grep}には@option{-e}がありません@dots{} 
その代わりに@code{egrep}を使用してください．


@item @command{ln}
@c ---------------
@cindex @command{ln}
@cindex Symbolic links
@c Don't rely on @command{ln} having a @option{-f} option.  Symbolic links
@c are not available on old systems, use @samp{ln} as a fall back.
@c 
@option{-f}オプションがある@command{ln}に依存しないようにしてください．
古いシステムではシンボリックリンクは利用不可能なので，@samp{ln}に戻して
ください．

@c For versions of the DJGPP before 2.04, @command{ln} emulates soft links
@c for executables by generating a stub that in turn calls the real
@c program.  This feature also works with nonexistent files like in the
@c Unix spec. So @samp{ln -s file link} will generate @file{link.exe},
@c which will attempt to call @file{file.exe} if run. But this feature only
@c works for executables, so @samp{cp -p} is used instead for these
@c systems.  DJGPP versions 2.04 and later have full symlink support.
@c 
2.04以前のバージョンのDJGPPに対して，@command{ln}は実行形式に対するソフ
トリンクを，実際のプログラムを呼び出すスタブを生成することでエミュレート
します．この機能は，Unix独自の実行形式以外のファイルでも動作します．その
ため，@samp{ln -s file link}は@file{link.exe}を生成し，それは実行された
場合に@file{file.exe}の呼び出しを試みます．しかしこの機能は実行形式に対
してのみ動作するので，このシステムでは@samp{cp -p}が代わりに使用されます．
DJGPPの2.04とそれ以降では完全なシンボリックリンクがサポートされています．


@item @command{mv}
@c ---------------
@cindex @command{mv}
@c The only portable options are @option{-f} and @option{-i}.
@c 
移植性のあるオプションは，@option{-f}と@option{-i}のみです．

@c Moving individual files between file systems is portable (it was in V6),
@c but it is not always atomic: when doing @samp{mv new existing}, there's
@c a critical section where neither the old nor the new version of
@c @file{existing} actually exists.
@c 
ファイルシステム間で個別にファイルを移動することは(V6では)移植性がありま
すが，常に強力でははありません．@samp{mv new existing}をする時，
@file{existing}の古いものも新しいものも実際には存在していないという危険
な状態が存在します．

@c Moving directories across mount points is not portable, use @command{cp}
@c and @command{rm}.
@c 
マウントポイントを跨ってディレクトリを移動することは移植性が内ので，
@command{cp}と@command{rm}を使用してください．


@item @command{sed}
@c ----------------
@cindex @command{sed}
@c Patterns should not include the separator (unless escaped), even as part
@c of a character class.  In conformance with @sc{posix}, the Cray
@c @command{sed} will reject @samp{s/[^/]*$//}: use @samp{s,[^/]*$,,}.
@c 
文字クラスの一部の場合でも，パターンに(エスケープされていない)セパレータ
を含めるべきではありません．@sc{posix}準拠では，Crayの@command{sed}は
@samp{s/[^/]*$//}を拒絶します．@samp{s,[^/]*$,,}を使用してください．

@c Sed scripts should not use branch labels longer than 8 characters and
@c should not contain comments.
@c 
sedのスクリプトは，8文字以上の分岐ラベルを使用すべきではなく，コメントを
含めるべきでもありません．

@c Don't include extra @samp{;}, as some @command{sed}, such as NetBSD
@c 1.4.2's, try to interpret the second as a command:
@c 
NetBSD 1.4.2では，2番目のものをコマンドとして解釈しようと試みるので，
@command{sed}によっては，余分な@samp{;}を含めてはなりません．

@example
$ echo a | sed 's/x/x/;;s/x/x/'
sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
@end example

@c Input should have reasonably long lines, since some @command{sed} have
@c an input buffer limited to 4000 bytes.
@c 
@command{sed}によっては，入力バッファに4000バイトの制限があるものもある
ので，入力は妥当な長さの行にすべきです．

@c Alternation, @samp{\|}, is common but not portable.
@c 
@samp{\|}の交換は一般的ですが，移植性はありません．
@c FIXME: I know Solaris is guilty, but I don't remember how.

@c Anchors (@samp{^} and @samp{$}) inside groups are not portable.
@c 
グループ内のアンカー(@samp{^}と@samp{$})は移植性がありません．

@c Nested groups are extremely portable, but there is at least one
@c @command{sed} (System V/68 Base Operating System R3V7.1) that does not
@c support it.
@c 
入れ子状のグループは全く移植性あるものなのですが，それをサポートしていな
い@command{sed}が，少なくとも1つ存在します(System V/68 Base Operating
System R3V7.1)．

@c Of course the option @option{-e} is portable, but it is not needed.  No
@c valid Sed program can start with a dash, so it does not help
@c disambiguating.  Its sole usefulness is helping enforcing indenting as
@c in:
@c 
もちろんオプション@option{-e}には移植性がありますが，それは不要です．ダッ
シュで始まる有効なsedプログラムは無いので，明確にする役には立ちません．
唯一の有効性は，以下のように字下げを強制的に行なう時です．

@example
sed -e @var{instruction-1} \
    -e @var{instruction-2}
@end example

@noindent
@c as opposed to
@c 
これは以下の代わりのものです．

@example
sed @var{instruction-1};@var{instruction-2}
@end example

@c Contrary to yet another urban legend, you may portably use @samp{&} in
@c the replacement part of the @code{s} command to mean ``what was
@c matched''.
@c 
もう一つのurban legendとして，``一致したもの''を意味する@code{s}コマンド
の一部を置換する時，@samp{&}を使用しても移植性はあるでしょう．


@item @command{sed} (@samp{t})
@c ---------------------------
@cindex @command{sed} (@samp{t})
@c Some old systems have @command{sed} that ``forget'' to reset their
@c @samp{t} flag when starting a new cycle.  For instance on @sc{mips
@c risc/os}, and on @sc{irix} 5.3, if you run the following @command{sed}
@c script (the line numbers are not actual part of the texts):
@c 
古いシステムには，新しいサイクルと開始するとき，その@samp{t}フラグをリセッ
トすることを``忘れる'' @command{sed}があるシステムもあります．例えば，
@sc{mips risc/os}と@sc{irix} 5.3で，以下の@command{sed}スクリプトを実行
した場合を考えます(行番号は，実際にはテキストの一部ではありません)．

@example
s/keep me/kept/g  # a
t end             # b
s/.*/deleted/g    # c
: end             # d
@end example

@noindent
@c on
@c 
ファイルの内容は以下のようになります．

@example
delete me         # 1
delete me         # 2
keep me           # 3
delete me         # 4
@end example

@noindent
@c you get
@c 
以下を得ます．

@example
deleted
delete me
kept
deleted
@end example

@noindent
@c instead of
@c 
これは(本来は)以下のようになります．

@example
deleted
deleted
kept
deleted
@end example

@c Why? When processing 1, a matches, therefore sets the t flag, b jumps to
@c d, and the output is produced.  When processing line 2, the t flag is
@c still set (this is the bug).  Line a fails to match, but @command{sed}
@c is not supposed to clear the t flag when a substitution fails.  Line b
@c sees that the flag is set, therefore it clears it, and jumps to d, hence
@c you get @samp{delete me} instead of @samp{deleted}.  When processing 3 t
@c is clear, a matches, so the flag is set, hence b clears the flags and
@c jumps.  Finally, since the flag is clear, 4 is processed properly.
@c 
なぜでしょう？1行目を処理している時，一致するのでtフラグが設定され，b行
からd行まで移動し，出力が生成されます．2行目を処理している時，tフラグは
セットされたままです(これはバグです)．しかし，a行は一致に失敗しますが，
置換が失敗するとき，@command{sed}はtフラグをクリアすることをサポートして
いません．そのため，フラグが設定されているように見えるb行は，それをクリ
アし，dへ移動し，その結果，@samp{deleted}の代わりに@samp{delete me}にな
ります．3行目を処理している時，一致を示すtがクリアされるため，フラグが設
定され，その結果，b行はフラグをクリアし移動します．最終的にフラグはクリ
アになっているので，4行目は正しく処理されます．

@c There are two things one should remind about @samp{t} in @command{sed}.
@c Firstly, always remember that @samp{t} jumps if @emph{some} substitution
@c succeeded, not only the immediately preceding substitution, therefore,
@c always use a fake @samp{t clear; : clear} to reset the t flag where
@c indeed.
@c 
@command{sed}の@samp{t}について覚えておくべきことは2つあります．最初に，
成功した置換に@emph{よっては}，置換の直前だけでなく@samp{t}ジャンプする
ことを覚えておき，そのため，tフラグを実際にリセットするために，ごまかし
の@samp{t clear; : clear}を使用してください．

@c Secondly, you cannot rely on @command{sed} to clear the flag at each new
@c cycle.
@c 
2番目は，それぞれの新しいサイクルでフラグをクリアするのを@command{sed}に
依頼することはできません．

@c One portable implementation of the script above is:
@c 
上記のスクリプトの移植性の高い実装の一つは，以下のようになります．

@example
t clear
: clear
s/keep me/kept/g
t end
s/.*/deleted/g
: end
@end example

@item @command{touch}
@c ------------------
@cindex @command{touch}
@c On some old @sc{bsd} systems, @command{touch} or any command that
@c results in an empty file does not update the timestamps, so use a
@c command like @code{echo} as a workaround.
@c 
古い@sc{bsd}システムには，空のファイルに対する@command{touch}のようなコ
マンドで，タイムスタンプを更新しない結果となるものもあるので，回避するた
めに，@code{echo}のようなコマンドを使用してください．

@c GNU @command{touch} 3.16r (and presumably all before that) fails to work
@c on SunOS 4.1.3 when the empty file is on an @sc{nfs}-mounted 4.2 volume.
@c 
GNU @command{touch} 3.16r(とそれ以前の全て)は，型のファイルが@sc{nfs}で
マウントされている4.2のボリュームの時，SunOS 4.1.3での動作で異常終了しま
す．

@end table


@node Limitations of Make,  , Limitations of Usual Tools, Portable Shell
@section makeの制限

@c Make itself suffers a great number of limitations, only a few of which
@c being listed here.  First of all, remember that since commands are
@c executed by the shell, all its weaknesses are inherited@dots{}
@c 
make自身には非常に多くの制限があるので苦労します，ここではわずかですが紹
介します．とにかく，シェルによってコマンドが実行されるので，その弱い部分
の全てが継承されていくということを覚えておいてください@dots{}

@table @asis
@item Leading underscore in macro names
@c Some Make don't support leading underscores in macro names, such as on
@c NEWS-OS 4.2R.
@c 
NEWS-OS 4.2Rのように，マクロ名にアンダースコアを前置することをサポートし
ていないmakeもあります．

@example
$ cat Makefile
_am_include = #
_am_quote =
all:; @@echo this is test

% make
Make: Must be a separator on rules line 2.  Stop.

$ cat Makefile2
am_include = #
am_quote =
all:; @@echo this is test

$ make -f Makefile2
this is test
@end example

@item @code{VPATH}
@cindex @code{VPATH}
@c Don't use it!  For instance any assignment to @code{VPATH} causes Sun
@c @command{make} to only execute the first set of double-colon rules.
@c 
使用しないでください！例えば，@code{VPATH}を割り当てると，Sunの
@command{make}は，二重のコロンの規則のセットを最初に実行するだけになりま
す．

@end table




@c ================================================== Manual Configuration

@node Manual Configuration, Site Configuration, Portable Shell, Top
@chapter 手動のコンフィグレーション

@c A few kinds of features can't be guessed automatically by running test
@c programs.  For example, the details of the object-file format, or
@c special options that need to be passed to the compiler or linker.  You
@c can check for such features using ad-hoc means, such as having
@c @code{configure} check the output of the @code{uname} program, or
@c looking for libraries that are unique to particular systems.  However,
@c Autoconf provides a uniform method for handling unguessable features.
@c 
数種類の特徴については，テストプログラムを実行するだけでは自動的に推測で
きません．例えば，オブジェクトファイル形式の詳細や，コンパイラやリンカに
渡す必要がある特別なオプションもあります．そのように，@code{configure}に 
@code{uname}プログラムの出力を調査させたり，特定のシステムの特有のライブ
ラリを探すといった，特別な手法を使用して特徴を調査することが可能です．し
かし，Autoconfは，推測できない特徴を扱うための単一の方法を提供しています．

@menu
* Specifying Names::            Specifying the system type
* Canonicalizing::              Getting the canonical system type
* Using System Type::           What to do with the system type
@end menu

@node Specifying Names, Canonicalizing, Manual Configuration, Manual Configuration
@section システムタイプの指定

@c Like other @sc{gnu} @code{configure} scripts, Autoconf-generated
@c @code{configure} scripts can make decisions based on a canonical name
@c for the system type, which has the form:
@c @samp{@var{cpu}-@var{vendor}-@var{os}}, where @var{os} can be
@c @samp{@var{system}} or @samp{@var{kernel}-@var{system}}
@c 
他のGNU @code{configure}スクリプトのように，Autoconfが生成した 
@code{configure}スクリプトは，システムタイプの標準名に基づき決定させるこ
とが可能で，それは以下のような形式になります．
@samp{@var{cpu}-@var{vendor}-@var{os}}で，@var{os}は，
@samp{@var{system}}や@samp{@var{kernel}-@var{system}}が可能です．

@c @code{configure} can usually guess the canonical name for the type of
@c system it's running on.  To do so it runs a script called
@c @code{config.guess}, which infers the name using the @code{uname}
@c command or symbols predefined by the C preprocessor.
@c 
@code{configure}は，通常，実行しているシステムタイプの標準名を推測するこ
とが可能です．そうするために，@code{config.guess}と呼ばれるスクリプトを
呼び出し，それは，@code{uname}コマンドや，Cプリプロセッサが前もって定義
したシンボルを使用して推測します．

@c Alternately, the user can specify the system type with command line
@c arguments to @code{configure}.  Doing so is necessary when
@c cross-compiling.  In the most complex case of cross-compiling, three
@c system types are involved.  The options to specify them are@footnote{For
@c backward compatibility, @code{configure} will accept a system type as an
@c option by itself.  Such an option will override the defaults for build,
@c host and target system types.  The following configure statement will
@c configure a cross toolchain that will run on NetBSD/alpha but generate
@c code for GNU Hurd/sparc, which is also the build platform.
@c 
@c @example
@c ./configure --host=alpha-netbsd sparc-gnu
@c @end example
@c }:
@c 
その代わりとして，ユーザは@code{configure}へのコマンドライン引数で，シス
テムタイプを指定可能です．それはクロスコンパイル時に必要です．クロスコン
パイルで最も複雑な場合，3つのシステムタイプが呼び出されます．指定するオ
プションは以下の通りです@footnote{下位互換性のため，@code{configure}はシ
ステムタイプ自身をオプションとして受け入れます．そのようなオプションは，
システムタイプのビルド，ホスト，そしてターゲットに対してデフォルトに優先
します．以下のconfigure文は，NetBSD/alphaで実行されていますが，GNU
Hurd/sparcに対するコードを生成する，一連のクロスツールでのコンフィグレー
ションです．

@example
./configure --host=alpha-netbsd sparc-gnu
@end example
}:

@table @option
@item --build=@var{build-type}
@c the type of system on which the package is being configured and
@c compiled.
@c 
パッケージがコンフィグレーションされコンパイルされるシステムのタイプです．

@item --host=@var{host-type}
@ovindex cross_compiling
@c the type of system on which the package will run.
@c 
パッケージが実行されるシステムタイプです．

@item --target=@var{target-type}
@c the type of system for which any compiler tools in the package will
@c produce code (rarely needed).  By default, it is the same as host.
@c 
コードを生成するパッケージ中のコンパイラツールに対するシステムのタイプで
す(必要になることは滅多にありません)．デフォルトは，ホストと同じです．
@end table

@c They all default to the result of running @code{config.guess}, unless
@c you specify either @option{--build} or @option{--host}.  In this case, the
@c default becomes the system type you specified.  If you specify both, and
@c they're different, @code{configure} will enter cross compilation mode,
@c so it won't run any tests that require execution.
@c 
@option{--build}や@option{--host}のいずれかで指定しない限り，デフォルト
は全て@code{config.guess}を実行した結果となります．この(指定した)場合は，
デフォルトは指定したシステムタイプになります．両方指定していてそれらが異
なっている場合，@code{configure}はクロスコンパイルモードになるので，実行
が必要となるテストを全く実行しません．

@c Hint: if you mean to override the result of @code{config.guess}, prefer
@c @option{--build} over @option{--host}.  In the future, @option{--host} will
@c not override the name of the build system type.  Also, if you specify
@c @option{--host}, but not @option{--build}, when @code{configure} performs
@c the first compiler test it will try to run an executable produced by the
@c compiler.  If the execution fails, it will enter cross-compilation mode.
@c Note, however, that it won't guess the build-system type, since this may
@c require running test programs.  Moreover, by the time the compiler test
@c is performed, it may be too late to modify the build-system type: other
@c tests may have already been performed.  Therefore, whenever you specify
@c @code{--host}, be sure to specify @code{--build} too.
@c 
ヒント：@code{config.guess}の結果に優先することを意図した場合，
@option{--host}より@option{--build}の方が良いでしょう．将来は，
@option{--host}はビルドシステムタイプの名前に優先されないでしょう．また，
@option{--host}を指定していて@option{--build}を指定していない場合，
@code{configure}が最初にコンパイラのテストをする時に，コンパイラで事項形
式を生成するよう実行してみるでしょう．実行に失敗した場合，クロスコンパイ
ルモードになります．しかし，テストプログラムの実行を要求する可能性がある
ので，ビルドシステムタイプを推測することができないことに注意してください．
更に，コンパイラテストが実行される頃には，ビルドシステムタイプを編集して
も遅過ぎるかもしれません．他のテストは既に実行されているかもしれません．
そのため，@code{--host}を指定するときはいつも，必ず@code{--build}も指定
してください．

@example
./configure --build=i686-pc-linux-gnu --host=m68k-coff
@end example

@noindent
@c will enter cross-compilation mode, but @code{configure} will fail if it
@c can't run the code generated by the specified compiler if you configure
@c as follows:
@c 
上記でクロスコンパイルモードになりますが，以下のようなコンフィグレーショ
ンでは，指定されているコンパイラで生成されるコートが実行できないので，
@code{configure}は失敗するでしょう．

@example
./configure CC=m68k-coff-gcc
@end example

@c @code{configure} recognizes short aliases for many system types; for
@c example, @samp{decstation} can be used instead of
@c @samp{mips-dec-ultrix4.2}.  @code{configure} runs a script called
@c @code{config.sub} to canonicalize system type aliases.
@c 
@code{configure}は，多くのシステムタイプに対する短い別名を認識します．例
えば，@samp{decstation}は@samp{mips-dec-ultrix4.2}の代わりに使用すること
が可能です． @code{configure}は，システムタイプの別名を標準化するために
@code{config.sub}と呼ばれるスクリプトを実行します．


@node Canonicalizing, Using System Type, Specifying Names, Manual Configuration
@section 標準的なシステムタイプの取得

@c The following macros make the system type available to @code{configure}
@c scripts.
@c 
以下のマクロで，システムタイプが@code{configure}スクリプトで利用可能にな
ります．

@ovindex build_alias
@ovindex host_alias
@ovindex target_alias

@c The variables @samp{build_alias}, @samp{host_alias}, and
@c @samp{target_alias} are always exactly the arguments of @option{--build},
@c @option{--host}, and @option{--target}; in particular, they are left empty
@c if the user did not use them, even if the corresponding
@c @code{AC_CANONICAL} macro was run.  Any configure script may use these
@c variables anywhere.  These are the variables that should be used when in
@c interaction with the user.
@c 
変数@samp{build_alias}，@samp{host_alias}，そして@samp{target_alias}は，
常に厳密な@option{--build}，@option{--host}，そして@option{--target}への
引数となります．特に，対応する@code{AC_CANONICAL}マクロが実行されていて
も，ユーザが使用していない場合は空のままになります．すべてのconfigureス
クリプトは，これらの変数をどこででも使用可能です．これらは，ユーザとの対
話処理で使用されるべき変数です．

@c If you need to recognize some special environments based on their system
@c type, run the following macros to get canonical system names.  These
@c variables are not set before the macro call.
@c 
システムタイプを元にした特殊な環境を認識する必要がある場合，標準的なシス
テム名を取得するために以下のマクロを実行してください．これらの変数はマク
ロ呼び出しの前で設定されません．

@c If you use these macros, you must distribute @code{config.guess} and
@c @code{config.sub} along with your source code.  @xref{Output}, for
@c information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
@c to control in which directory @code{configure} looks for those scripts.
@c 
これらのマクロを使用する場合，ソースコードと一緒に@code{config.guess}と
@code{config.sub}を配布する必要があります．これらのスクリプトを探すため
に，@code{configure}が探すディレクトリを制御するために使用することが可能
な@code{AC_CONFIG_AUX_DIR}マクロに関する情報は，@xref{Output}.

@defmac AC_CANONICAL_BUILD
@maindex CANONICAL_BUILD
@ovindex build
@ovindex build_cpu
@ovindex build_vendor
@ovindex build_os
@c Compute the canonical build-system type variable, @code{build}, and its
@c three individual parts @code{build_cpu}, @code{build_vendor}, and
@c @code{build_os}.
@c 
標準的なビルドシステムタイプの変数の@code{build}と，それを識別する3つの
部分@code{build_cpu}，@code{build_vendor}，そして@code{build_os}を計算し
ます．

@c If @option{--build} was specified, then @code{build} is the
@c canonicalization of @code{build_alias} by @command{config.sub},
@c otherwise it is determined by the shell script @code{config.guess}.
@c 
@option{--build}が指定されている場合，@code{build}は@code{build_alias}の
@command{config.sub}で標準化されたものになり，それ以外では，シェルスクリ
プト@code{config.guess}で決定されます．
@end defmac

@defmac AC_CANONICAL_HOST
@maindex CANONICAL_HOST
@ovindex host
@ovindex host_cpu
@ovindex host_vendor
@ovindex host_os
@c Compute the canonical host-system type variable, @code{host}, and its
@c three individual parts @code{host_cpu}, @code{host_vendor}, and
@c @code{host_os}.
@c 
標準的なホストシステムタイプ変数の@code{host}と，それを識別する3つの部分
@code{host_cpu}，@code{host_vendor}，そして@code{host_os}を計算します．

@c If @option{--host} was specified, then @code{host} is the
@c canonicalization of @code{host_alias} by @command{config.sub},
@c otherwise it defaults to @code{build}.
@c 
@option{--host}が指定されている場合，@code{host}は@code{host_alias}の
@command{config.sub}で標準化されたものになり，それ以外では，シェルスクリ
プト@code{config.guess}で決定されます．

@c For temporary backward-compatibility, when @option{--host} is specified
@c by @option{--build} isn't, the build system will be assumed to be the
@c same as @option{--host}, and @samp{build_alias} will be set to that
@c value.  Eventually, this historically incorrect behavior will go away.
@c 
一時的な下位互換性として，@option{--host}が指定されていて
@option{--build}が指定されていない時，ビルドシステムは@option{--host}と
同じと仮定され，@samp{build_alias}はその変数で設定されます．最終的には，
歴史的に間違っているこの動作はなくなるでしょう．
@end defmac

@defmac AC_CANONICAL_TARGET
@maindex CANONICAL_TARGET
@ovindex target
@ovindex target_cpu
@ovindex target_vendor
@ovindex target_os
@c Compute the canonical target-system type variable, @code{target}, and its
@c three individual parts @code{target_cpu}, @code{target_vendor}, and
@c @code{target_os}.
@c 
標準的なターゲットシステムタイプ変数の@code{target}，それを識別する3つの
部分@code{target_cpu}，@code{target_vendor}，そして@code{target_os}を計
算します．

@c If @option{--target} was specified, then @code{target} is the
@c canonicalization of @code{target_alias} by @command{config.sub},
@c otherwise it defaults to @code{host}.
@c 
@option{--target}が指定されている場合，@code{target}は
@code{target_alias}の@command{config.sub}で標準化されたものになり，それ
以外では，デフォルトで@code{host}になります．
@end defmac


@node Using System Type,  , Canonicalizing, Manual Configuration
@section システムタイプを使用する

@c How do you use a canonical system type?  Usually, you use it in one or
@c more @code{case} statements in @file{configure.ac} to select
@c system-specific C files.  Then, using @code{AC_CONFIG_LINKS}, link those
@c files which have names based on the system name, to generic names, such
@c as @file{host.h} or @file{target.c} (@pxref{Configuration Links}).  The
@c @code{case} statement patterns can use shell wild cards to group several
@c cases together, like in this fragment:
@c 
どのようにして標準的なシステムタイプを使用するのでしょう．通常，システム
特有のCファイルを選択するために@file{configure.ac}で，一つ以上の
@code{case}文を使用します．@code{AC_CONFIG_LINKS}を使用し，システム名に
基づくこれらのファイルを，@file{host.h}や@file{target.c}のような一般的な
名前にリンクしてください(@pxref{Configuration Links})．@code{case}文のパ
ターンでは，以下の断片部分のように，複数の状態を分類するためシェルのワイ
ルドカードを使用することが可能です．

@example
case "$target" in
i386-*-mach* | i386-*-gnu*)
             obj_format=aout emulation=mach bfd_gas=yes ;;
i960-*-bout) obj_format=bout ;;
esac
@end example

@noindent
@c and in @file{configure.ac}, use:
@c 
そして，@file{configure.ac}では以下のように使用します．

@example
AC_CONFIG_LINKS(host.h:config/$machine.h
                object.h:config/$obj_format.h)
@end example

@c You can also use the host system type to find cross-compilation tools.
@c @xref{Generic Programs}, for information about the @code{AC_CHECK_TOOL}
@c macro which does that.
@c 
クロスコンパイルツールを探すため，ホストシステムタイプを使用することも可
能です．そうするための@code{AC_CHECK_TOOL}マクロの情報は，@xref{Generic
Programs}.


@c ===================================================== Site Configuration.

@node Site Configuration, Running configure scripts, Manual Configuration, Top
@chapter サイトコンフィグレーション

@c @code{configure} scripts support several kinds of local configuration
@c decisions.  There are ways for users to specify where external software
@c packages are, include or exclude optional features, install programs
@c under modified names, and set default values for @code{configure}
@c options.
@c 
@code{configure}スクリプトは，何種類かのローカルコンフィグレーションの宣
言をサポートします．ユーザが外部ソフトウェアパッケージの場所を指定したり，
追加の特徴を含めたり排除したり，編集された名前でプログラムをインストール
したり，@code{configure}オプションに対してデフォルト値を設定したりする方
法があります．

@menu
* External Software::           Working with other optional software
* Package Options::             Selecting optional features
* Pretty Help Strings::         Formating help string
* Site Details::                Configuring site details
* Transforming Names::          Changing program names when installing
* Site Defaults::               Giving @code{configure} local defaults
@end menu

@node External Software, Package Options, Site Configuration, Site Configuration
@section 外部ソフトウェアとともに動作する

@c Some packages require, or can optionally use, other software packages
@c that are already installed.  The user can give @code{configure}
@c command line options to specify which such external software to use.
@c The options have one of these forms:
@c 
既にインストールしてある他のソフトウェアパッケージを要求したり，追加で使
用していたりしているパッケージもあります．ユーザは，使用するそのような外
部ソフトの指定するために，@code{configure}のコマンドラインオプションを与
えることが可能です．オプションは以下の形式うちの１つです．

@example
--with-@var{package}=@r{[}@var{arg}@r{]}
--without-@var{package}
@end example

@c For example, @option{--with-gnu-ld} means work with the @sc{gnu} linker
@c instead of some other linker.  @option{--with-x} means work with The X
@c Window System.
@c 
例えば，@option{--with-gnu-ld}は，他のリンカの代わりに@sc{gnu}リンカで動
作することを意味します．@option{--with-x}はX Window Systemで動作すること
を意味します．

@c The user can give an argument by following the package name with
@c @samp{=} and the argument.  Giving an argument of @samp{no} is for
@c packages that are used by default; it says to @emph{not} use the
@c package.  An argument that is neither @samp{yes} nor @samp{no} could
@c include a name or number of a version of the other package, to specify
@c more precisely which other package this program is supposed to work
@c with.  If no argument is given, it defaults to @samp{yes}.
@c @option{--without-@var{package}} is equivalent to
@c @option{--with-@var{package}=no}.
@c 
ユーザはパッケージ名に続く引数を，@samp{=}とその引数で与えることが可能で
す．@samp{no}引数を与えるとパッケージはデフォルトを使用します．つまり，
パッケージを使用し@emph{ません}．@samp{yes}も@samp{no}もない引数は，他の
パッケージの名前やバージョンナンバーを含み，それは，このプログラムで動作
すると推測される他のパッケージを，より正確に指定します．引数が与えられて
いない場合，デフォルトは@samp{yes}です．@option{--without-@var{package}} 
は，@option{--with-@var{package}=no}と同じです．

@c @code{configure} scripts do not complain about
@c @option{--with-@var{package}} options that they do not support.  This
@c behavior permits configuring a source tree containing multiple packages
@c with a top-level @code{configure} script when the packages support
@c different options, without spurious error messages about options that
@c some of the packages support.  An unfortunate side effect is that option
@c spelling errors are not diagnosed.  No better approach to this problem
@c has been suggested so far.
@c 
@code{configure}スクリプトは，サポートしていない
@option{--with-@var{package}}オプションに文句を言いません．これにより，
複数のパッケージを含むソースツリーにおいて，パッケージが異なるオプション
をサポートするとき，パッケージによってはサポートするものもあるオプション
で深刻なエラーメッセージを出力すること無く，トップレベルの
@code{configure} スクリプトでのコンフィグレーションが可能になります．残
念な副作用として，オプションのスペルエラーは診断されません．この問題のよ
り良い手法はまだ提案されていません．

@c For each external software package that may be used, @file{configure.ac}
@c should call @code{AC_ARG_WITH} to detect whether the @code{configure}
@c user asked to use it.  Whether each package is used or not by default,
@c and which arguments are valid, is up to you.
@c 
使用される可能性のあるそれぞれの外部ソフトウェアパッケージに対して，
@code{configure}のユーザがそれの使用を依頼したかどうかを検出するため，
@file{configure.ac}で@code{AC_ARG_WITH}を呼び出すべきです．それぞれのパッ
ケージでデフォルトで使用するかどうかと，有効な引数については，好きにして
ください．

@defmac AC_ARG_WITH (@var{package}, @var{help-string}, @r{[}@var{action-if-given}@r{]}, @r{[}@var{action-if-not-given}r{]})
@maindex ARG_WITH
@c If the user gave @code{configure} the option @option{--with-@var{package}}
@c or @option{--without-@var{package}}, run shell commands
@c @var{action-if-given}.  If neither option was given, run shell commands
@c @var{action-if-not-given}.  The name @var{package} indicates another
@c software package that this program should work with.  It should consist
@c only of alphanumeric characters and dashes.
@c 
ユーザが@code{configure}に，オプション@option{--with-@var{package}}や
@option{--without-@var{package}}を与えた場合，シェルコマンド 
@var{action-if-given}を実行します．どちらも与えられていない場合は，シェ
ルコマンド@var{action-if-not-given}を実行します．名前@var{package}は，プ
ログラムで動作する，他のソフトウェアパッケージを示します．それは，英数字
とダッシュのみで成り立ちます．

@c The option's argument is available to the shell commands
@c @var{action-if-given} in the shell variable @code{withval}, which is
@c actually just the value of the shell variable @code{with_@var{package}},
@c with any @option{-} characters changed into @samp{_}.  You may use that
@c variable instead, if you wish.
@c 
オプションの引数は，@samp{-}文字を@samp{_}に変更したシェル変数 
@code{with_@var{package}}の実際の値となる，シェル変数@code{withval}内の
シェルコマンド@var{action-if-given}が利用可能です．望むなら，変わりにそ
の値を使用してもかまいません．

@c The argument @var{help-string} is a description of the option that
@c looks like this:
@c 
引数@var{help-string}は以下のような，オプションの説明です．
@example
  --with-readline         support fancy command line editing
@end example

@noindent
@c @var{help-string} may be more than one line long, if more detail is
@c needed.  Just make sure the columns line up in @samp{configure --help}.
@c Avoid tabs in the help string.  You'll need to enclose it in @samp{[}
@c and @samp{]} in order to produce the leading spaces.
@c 
詳細が必要な場合，@var{help-string}は一行以上でもかまいません．
@samp{configure --help}で行が整列していることを確認してください．ヘルプ
文字列でのタブの使用は避けてください．前置するスペースを生成するため
@samp{[}と@samp{]}で囲む必要があるでしょう．

@c You should format your @var{help-string} with the macro
@c @code{AC_HELP_STRING} (@pxref{Pretty Help Strings}).
@c 
@var{help-string}は，マクロ@code{AC_HELP_STRING}で書式化すべきです
(@pxref{Pretty Help Strings})．
@end defmac

@defmac AC_WITH (@var{package}, @var{action-if-given}, @r{[}@var{action-if-not-given}@r{]})
@maindex WITH
@c This is an obsolete version of @code{AC_ARG_WITH} that does not
@c support providing a help string.
@c 
これはヘルプ文字列の提供をサポートしていない，@code{AC_ARG_WITH}の時代遅
れのバージョンです．
@end defmac


@node Package Options, Pretty Help Strings, External Software, Site Configuration
@section パッケージオプションの選択

@c If a software package has optional compile-time features, the user can
@c give @code{configure} command line options to specify whether to
@c compile them.  The options have one of these forms:
@c 
ソフトウェアパッケージに追加のコンパイル時の特徴がある場合，それらをコン
パイルするかどうか指定するため，ユーザは@code{configure}コマンドラインオ
プションを与えることが可能です．オプションは以下の書式の１つになります．

@example
--enable-@var{feature}=@r{[}@var{arg}@r{]}
--disable-@var{feature}
@end example

@c These options allow users to choose which optional features to build and
@c install.  @option{--enable-@var{feature}} options should never make a
@c feature behave differently or cause one feature to replace another.
@c They should only cause parts of the program to be built rather than left
@c out.
@c 
これらのオプションで，ビルドしインストールする追加の機能を，ユーザが選択
することが可能になります．@option{--enable-@var{feature}}オプションで，
異なる動作を機能させたり，ある特徴を他の特徴で置換させたりするべきではあ
りません．それらは，プログラムの部分をビルドする，または削除するためだけ
にすべきです．

@c The user can give an argument by following the feature name with
@c @samp{=} and the argument.  Giving an argument of @samp{no} requests
@c that the feature @emph{not} be made available.  A feature with an
@c argument looks like @option{--enable-debug=stabs}.  If no argument is
@c given, it defaults to @samp{yes}.  @option{--disable-@var{feature}} is
@c equivalent to @option{--enable-@var{feature}=no}.
@c 
ユーザは，特徴の名前に続く引数を@samp{=}とその引数で与えることが可能です．
@samp{no}引数を与えると特徴は利用でき@emph{ません}．特徴は，
@option{--enable-debug=stabs}のような引数です．引数が与えられていない場
合は，デフォルトで@samp{yes}です．@option{--disable-@var{feature}}は， 
@option{--enable-@var{feature}=no}と同じです．

@c @code{configure} scripts do not complain about
@c @option{--enable-@var{feature}} options that they do not support.
@c This behavior permits configuring a source tree containing multiple
@c packages with a top-level @code{configure} script when the packages
@c support different options, without spurious error messages about options
@c that some of the packages support.
@c An unfortunate side effect is that option spelling errors are not diagnosed.
@c No better approach to this problem has been suggested so far.
@c 
@code{configure}スクリプトは，サポートしていない 
@option{--enable-@var{feature}}オプションに文句を言いません．これにより，
複数のパッケージを含むソースツリーにおいて，パッケージが異なるオプション
をサポートするとき，パッケージによってはサポートするものもあるオプション
で深刻なエラーメッセージを出力すること無く，トップレベルの
@code{configure} スクリプトでのコンフィグレーションが可能になります．残
念な副作用として，オプションのスペルエラーは診断されません．この問題のよ
り良い手法はまだ提案されていません．

@c For each optional feature, @file{configure.ac} should call
@c @code{AC_ARG_ENABLE} to detect whether the @code{configure} user asked
@c to include it.  Whether each feature is included or not by default, and
@c which arguments are valid, is up to you.
@c 
使用される可能性のあるそれぞれの追加の特徴に対して，@code{configure}のユー
ザがそれを含めることを依頼したかどうかを検出するため，
@file{configure.ac}で@code{AC_ARG_ENABLE}を呼び出すべきです．それぞれの
機能をデフォルトで使用するかどうかと，有効な引数については，好きにしてく
ださい．

@defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @r{[}@var{action-if-given}@r{]}, @r{[}@var{action-if-not-given}@r{]})
@maindex ARG_ENABLE
@c If the user gave @code{configure} the option
@c @option{--enable-@var{feature}} or @option{--disable-@var{feature}}, run
@c shell commands @var{action-if-given}.  If neither option was given, run
@c shell commands @var{action-if-not-given}.  The name @var{feature}
@c indicates an optional user-level facility.  It should consist only of
@c alphanumeric characters and dashes.
@c 
ユーザが，@code{configure}にオプション@option{--enable-@var{feature}}や
@option{--disable-@var{feature}}を与えた場合，シェルコマンド 
@var{action-if-given}を実行します．どちらも与えられない場合は，シェルコ
マンド@var{action-if-not-given}を実行します．名前@var{feature}はオプショ
ンのユーザレベルのファシリティを示します．それは，英数字とダッシュのみで
成り立ちます．

@c The option's argument is available to the shell commands
@c @var{action-if-given} in the shell variable @code{enableval}, which is
@c actually just the value of the shell variable
@c @code{enable_@var{feature}}, with any @option{-} characters changed into
@c @samp{_}.  You may use that variable instead, if you wish.  The
@c @var{help-string} argument is like that of @code{AC_ARG_WITH}
@c (@pxref{External Software}).
@c 
オプションの引数は，@samp{-}文字を@samp{_}に変更したシェル変数 
@code{enable_@var{package}}の実際の値となる，シェル変数@code{enableval} 
内のシェルコマンド@var{action-if-given}が利用可能です．望むなら，変わり
にその値を使用してもかまいません．@var{help-string}引数は，
@code{AC_ARG_WITH}と同様にしてください(@pxref{External Software})．

@c You should format your @var{help-string} with the macro
@c @code{AC_HELP_STRING} (@pxref{Pretty Help Strings}).
@c 
@var{help-string}は，マクロ@code{AC_HELP_STRING}で書式化すべきです
(@pxref{Pretty Help Strings})．
@end defmac

@defmac AC_ENABLE (@var{feature}, @var{action-if-given}, @r{[}@var{action-if-not-given}@r{]})
@maindex ENABLE
@c This is an obsolete version of @code{AC_ARG_ENABLE} that does not
@c support providing a help string.
@c 
これはヘルプ文字列の供給をサポートしない@code{AC_ARG_ENABLE}の時代遅れの
バージョンです．
@end defmac


@node Pretty Help Strings, Site Details, Package Options, Site Configuration
@section ヘルプ文字列を小奇麗にする

@c Properly formatting the @samp{help strings} which are used in
@c @code{AC_ARG_WITH} (@pxref{External Software}) and @code{AC_ARG_ENABLE}
@c (@pxref{Package Options}) can be challenging.  Specifically, you want
@c your own @samp{help strings} to line up in the appropriate columns of
@c @samp{configure --help} just like the standard Autoconf @samp{help
@c strings} do.  This is the purpose of the @code{AC_HELP_STRING} macro.
@c 
@code{AC_ARG_WITH} (@pxref{External Software})と@code{AC_ARG_ENABLE}
(@pxref{Package Options})で使用する@samp{help strings}を正しく書式化する
ことに挑戦してみましょう．具体的には，独自の@samp{help strings}を，標準
的なAutoconfの@samp{help strings}のように，@samp{configure --help}で列に
適切に並ぶようにしたいと思うでしょう．@code{AC_HELP_STRING}マクロの目的
はここにあります．

@defmac AC_HELP_STRING (@var{left-hand-side}, @var{right-hand-side})
@maindex HELP_STRING

@c Expands into an help string that looks pretty when the user executes
@c @samp{configure --help}.  It is typically used in @code{AC_ARG_WITH}
@c (@pxref{External Software}) or @code{AC_ARG_ENABLE} (@pxref{Package
@c Options}).  The following example will make this clearer.
@c 
ユーザが@samp{configure --help}を実行した時，小奇麗なヘルプ文字列に展開
します．通常は，@code{AC_ARG_WITH} (@pxref{External Software})や
@code{AC_ARG_ENABLE} (@pxref{Package Options})で使用します．以下の例でよ
り分かり易くなるでしょう．

@example
AC_DEFUN(TEST_MACRO,
[AC_ARG_WITH(foo,
             AC_HELP_STRING([--with-foo],
                            [use foo (default is NO)]),
             ac_cv_use_foo=$withval, ac_cv_use_foo=no),
AC_CACHE_CHECK(whether to use foo,
               ac_cv_use_foo, ac_cv_use_foo=no)])
@end example

@c Please note that the call to @code{AC_HELP_STRING} is @strong{unquoted}.
@c Then the last few lines of @samp{configure --help} will appear like
@c this:
@c 
@code{AC_HELP_STRING}の呼び出しは@strong{引用符で囲まない}ことに注意して
ください．@samp{configure --help}の最後の数行に，以下のような行が現れま
す．

@example
--enable and --with options recognized:
  --with-foo              use foo (default is NO)
@end example

@c The @code{AC_HELP_STRING} macro is particularly helpful when the
@c @var{left-hand-side} and/or @var{right-hand-side} are composed of macro
@c arguments, as shown in the following example.
@c 
@code{AC_HELP_STRING}マクロは，以下の例のように，@var{left-hand-side}そ
して/または@var{right-hand-side}がマクロ引数で構成される時，特に役に立ち
ます．

@example
AC_DEFUN(MY_ARG_WITH,
[AC_ARG_WITH([$1],
             AC_HELP_STRING([--with-$1], [use $1 (default is $2)]),
             ac_cv_use_$1=$withval, ac_cv_use_$1=no),
AC_CACHE_CHECK(whether to use $1, ac_cv_use_$1, ac_cv_use_$1=$2)])
@end example
@end defmac


@node Site Details, Transforming Names, Pretty Help Strings, Site Configuration
@section サイトコンフィグレーションの詳細

@c Some software packages require complex site-specific information.  Some
@c examples are host names to use for certain services, company names, and
@c email addresses to contact.  Since some configuration scripts generated
@c by Metaconfig ask for such information interactively, people sometimes
@c wonder how to get that information in Autoconf-generated configuration
@c scripts, which aren't interactive.
@c 
複雑なサイト指定の情報が必要となるソフトウェアパッケージもあります．例え
ば，特定のサービスで使用する，ホスト名，会社名，そして連絡先の電子メール
アドレスがあげられます．Metaconfigが生成したコンフィグレーションスクリプ
トには，そのような情報を対話的に尋ねるものもあるので，Autoconfが生成した
対話的でないコンフィグレーションスクリプトが，その情報を得る方法を不思議
に思うこともあるでしょう．

@c Such site configuration information should be put in a file that is
@c edited @emph{only by users}, not by programs.  The location of the file
@c can either be based on the @code{prefix} variable, or be a standard
@c location such as the user's home directory.  It could even be specified
@c by an environment variable.  The programs should examine that file at
@c run time, rather than at compile time.  Run time configuration is more
@c convenient for users and makes the configuration process simpler than
@c getting the information while configuring.  @xref{Directory Variables,,
@c Variables for Installation Directories, standards, GNU Coding
@c Standards}, for more information on where to put data files.
@c 
そのようなサイトコンフィギュレーション情報は，プログラムではなく，
@emph{ユーザだけ}が編集するファイルに書き込むべきです．ファイルの場所は，
@code{prefix}変数に基づくところか，ユーザのホームディレクトリのような，
標準的な場所が可能です．それは環境変数で指定するべきでしょう．プログラム
では，コンパイル時ではなく実行時にファイルを調査するべきです．実行時のコ
ンフィグレーションはユーザにとって便利で，コンフィグレーション時に情報を
得るよりコンフィグレーション処理が簡単になります．データファイルを書き込
む場所の詳細は，@xref{Directory Variables, , Variables for Installation
Directories, standards, GNU Coding Standards}, ．


@node Transforming Names, Site Defaults, Site Details, Site Configuration
@section インストール時のプログラム名の変換

@c Autoconf supports changing the names of programs when installing them.
@c In order to use these transformations, @file{configure.ac} must call the
@c macro @code{AC_ARG_PROGRAM}.
@c 
Autoconfは，インストール時にプログラム名を変更することをサポートします．
これらの変換を使用するため，@file{configure.ac}でマクロ
@code{AC_ARG_PROGRAM}を呼び出す必要があります．

@defmac AC_ARG_PROGRAM
@maindex ARG_PROGRAM
@ovindex program_transform_name
@c Place in output variable @code{program_transform_name} a sequence of
@c @code{sed} commands for changing the names of installed programs.
@c 
出力変数@code{program_transform_name}に，インストールするプログラムの名
前を変更するため，@code{sed}コマンドのシーケンスを配置します．

@c If any of the options described below are given to @code{configure},
@c program names are transformed accordingly.  Otherwise, if
@c @code{AC_CANONICAL_TARGET} has been called and a @option{--target} value
@c is given that differs from the host type (specified with @option{--host}),
@c the target type followed by a dash is used as a prefix.  Otherwise, no
@c program name transformation is done.
@c 
下記のオプションのいずれかが@code{configure}に与えれらた場合，プログラム
名は適宜変換されます．それ以外では，@code{AC_CANONICAL_SYSTEM}が呼び出さ
れ，@samp{--target}値がホストタイプ(@samp{--host}で指定されたり， 
@code{config.sub}でデフォルトとするもの)と違うもので与えられた場合，ター
ゲットタイプはダッシュが続いているプレフィクスとして使用されます．それ以
外ではプログラム名は変換されません．
@end defmac

@menu
* Transformation Options::      @code{configure} options to transform names
* Transformation Examples::     Sample uses of transforming names
* Transformation Rules::        @file{Makefile} uses of transforming names
@end menu

@node Transformation Options, Transformation Examples, Transforming Names, Transforming Names
@subsection 変換オプション

@c You can specify name transformations by giving @code{configure} these
@c command line options:
@c 
@code{configure}に以下のコマンドラインオプションを与えることで，名前変換
を指定することが可能です．

@table @option
@item --program-prefix=@var{prefix}
@c prepend @var{prefix} to the names;
@c 
@var{prefix}を名前に前置します．

@item --program-suffix=@var{suffix}
@c append @var{suffix} to the names;
@c 
@var{suffix}を名前に後置します．

@item --program-transform-name=@var{expression}
@c perform @code{sed} substitution @var{expression} on the names.
@c 
@code{sed}が@var{expression}を名前に代入します．
@end table


@node Transformation Examples, Transformation Rules, Transformation Options, Transforming Names
@subsection 変換例

@c These transformations are useful with programs that can be part of a
@c cross-compilation development environment.  For example, a
@c cross-assembler running on a Sun 4 configured with
@c @option{--target=i960-vxworks} is normally installed as
@c @file{i960-vxworks-as}, rather than @file{as}, which could be confused
@c with a native Sun 4 assembler.
@c 
これらの変換は，クロスコンパイル開発環境の一部となるプログラムで役に立ち
ます．例えば，@option{--target=i960-vxworks}オプションでコンフィグレーショ
ンされたSun 4でクロスアセンブラの実行では，通常，@file{as}ではなく
@file{i960-vxworks-as}がインストールされるので，ネイティブのSun 4アセン
ブラと混在できます．

@c You can force a program name to begin with @file{g}, if you don't want
@c @sc{gnu} programs installed on your system to shadow other programs with
@c the same name.  For example, if you configure @sc{gnu} @code{diff} with
@c @option{--program-prefix=g}, then when you run @samp{make install} it is
@c installed as @file{/usr/local/bin/gdiff}.
@c 
@sc{gnu}プログラムを，他のプログラムを隠してしまうような同じ名前でシステ
ムにインストールしたくない場合，プログラム名を@file{g}から始めることがで
きます．例えば，@sc{gnu} @code{diff}を@option{--program-prefix=g}でコン
フィグレーションする場合，@samp{make install}時に
@file{/usr/local/bin/gdiff}としてインストールされます．

@c As a more sophisticated example, you could use
@c 
より洗練された例として，以下を使用することができます．

@example
--program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
@end example
@noindent
@c to prepend @samp{g} to most of the program names in a source tree,
@c excepting those like @code{gdb} that already have one and those like
@c @code{less} and @code{lesskey} that aren't @sc{gnu} programs.  (That is
@c assuming that you have a source tree containing those programs that is
@c set up to use this feature.)
@c 
これは，ソースツリーで，@samp{g}をほとんどのプログラム名に前置し， 
@code{gdb}のように既に持っているものと，@code{less}と@code{lesskey}のよ
うに@sc{gnu}プログラムでないものは例外とすることができます．(この特徴を使用す
るために，セットアップされたプログラムを含むソースツリーを持っていること
が前提です．)

@c One way to install multiple versions of some programs simultaneously is
@c to append a version number to the name of one or both.  For example, if
@c you want to keep Autoconf version 1 around for awhile, you can configure
@c Autoconf version 2 using @option{--program-suffix=2} to install the
@c programs as @file{/usr/local/bin/autoconf2},
@c @file{/usr/local/bin/autoheader2}, etc.  Nevertheless, pay attention
@c that only the binaries are renamed, therefore you'd have problems with
@c the library files which might overlap.
@c 
同時にいくつかのプログラムの多数のバージョンをインストールする方法の１つ
として，１つあるいは両方の名前にバージョンナンバーを追加することです．例
えば，しばらくの間Autoconfバージョン1を保持したい場合，Autoconfバージョ
ン2を，@file{/usr/local/bin/autoconf2}や 
@file{/usr/local/bin/autoheader2}等としてプログラムをインストールするた
め，@option{--program-suffix=2}を使用してコンフィグレーションすることが
可能です．それにもかかわらず，バイナリのみ名前が変更されることに注意して
ください．そのため，オーバーラップする可能性のあるライブラリファイルは問
題になるでしょう．


@node Transformation Rules,  , Transformation Examples, Transforming Names
@subsection 変換規則

@c Here is how to use the variable @code{program_transform_name} in a
@c @file{Makefile.in}:
@c 
@file{Makefile.in}で変数@code{program_transform_name}を使用する方法は以
下のようになります．

@example
transform = @@program_transform_name@@
install: all
        $(INSTALL_PROGRAM) myprog $(bindir)/`echo myprog | \
                                               sed '$(transform)'`

uninstall:
        rm -f $(bindir)/`echo myprog | sed '$(transform)'`
@end example

@noindent
@c If you have more than one program to install, you can do it in a loop:
@c 
インストールする１つ以上のプログラムがある場合はループが可能です．

@example
PROGRAMS = cp ls rm
install:
        for p in $(PROGRAMS); do \
          $(INSTALL_PROGRAM) $$p $(bindir)/`echo $$p | \
                                              sed '$(transform)'`; \
        done

uninstall:
        for p in $(PROGRAMS); do \
          rm -f $(bindir)/`echo $$p | sed '$(transform)'`; \
        done
@end example

@c It is guaranteed that @code{program_transform_name} is never empty, and
@c that there are no useless separators.  Therefore you may safely embed
@c @code{program_transform_name} within a sed program using @samp{;}:
@c 
@code{program_transform_name}が空ではなく，無意味なセパレータがないこと
が保証されます．そのため，@samp{;}使用している@code{sed}プログラムに
@code{program_transform_name}を安全に埋め込むことができます．

@example
transform = @@program_transform_name@@
transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
@end example

@c Whether to do the transformations on documentation files (Texinfo or
@c @code{man}) is a tricky question; there seems to be no perfect answer,
@c due to the several reasons for name transforming.  Documentation is not
@c usually particular to a specific architecture, and Texinfo files do not
@c conflict with system documentation.  But they might conflict with
@c earlier versions of the same files, and @code{man} pages sometimes do
@c conflict with system documentation.  As a compromise, it is probably
@c best to do name transformations on @code{man} pages but not on Texinfo
@c manuals.
@c 
ドキュメントファイル(Texinfoや@code{man})で変換するどうかは，慎重を要す
る質問です．名前を変える理由がいくつかあるため，完全な答えがあるとは思わ
れません．ドキュメントは通常，特定のアーキテクチャ特有のものではなく，
Texinfoファイルはシステムドキュメントと衝突しません．しかし，それらは同
じファイルの前のバージョンと衝突したり，@code{man}ページはシステムドキュ
メントと衝突することがあるかもしれません．妥協案として，@code{man}ページ
は名前を変換してTexinfoマニュアルは変換しないのがおそらく最善でしょう．


@node Site Defaults,  , Transforming Names, Site Configuration
@section サイトのデフォルトの設定

@c Autoconf-generated @code{configure} scripts allow your site to provide
@c default values for some configuration values.  You do this by creating
@c site- and system-wide initialization files.
@c 
Autoconfが生成した@code{configure}スクリプトで，コンフィグレーションの値
に対してサイトのデフォルト値を供給できるものもあります．これは，サイト全
体と システム全体の初期化ファイルを作成することで可能となります．

@evindex CONFIG_SITE
@c If the environment variable @code{CONFIG_SITE} is set, @code{configure}
@c uses its value as the name of a shell script to read.  Otherwise, it
@c reads the shell script @file{@var{prefix}/share/config.site} if it exists,
@c then @file{@var{prefix}/etc/config.site} if it exists.  Thus,
@c settings in machine-specific files override those in machine-independent
@c ones in case of conflict.
@c 
環境変数@code{CONFIG_SITE}が設定されている場合，@code{configure}は，その
値を読み込むシェルスクリプトの名前として使用します．それ以外では，シェル
スクリプト@file{@var{prefix}/share/config.site}があればそれを読み込み， 
次に@file{@var{prefix}/etc/config.site}があればそれを読み込みます．この
ため，それらが衝突する状況では，マシン特有のファイルでの設定がマシン非依
存の設定に優先します．

@c Site files can be arbitrary shell scripts, but only certain kinds of
@c code are really appropriate to be in them.  Because @code{configure}
@c reads any cache file after it has read any site files, a site file can
@c define a default cache file to be shared between all Autoconf-generated
@c @code{configure} scripts run on that system (@pxref{Cache Files}).  If
@c you set a default cache file in a site file, it is a good idea to also
@c set the output variable @code{CC} in that site file, because the cache
@c file is only valid for a particular compiler, but many systems have
@c several available.
@c 
サイトファイルは任意のシェルスクリプトが可能ですが，本来なら特定の種類の
コードだけがその中にあるのが適切です．@code{configure}はサイトファイルを
読み込んだ後でキャッシュファイルを読み込むので，サイトファイルは，そのシ
ステムで実行されるAutoconfが生成した全ての@code{configure}スクリプト間で，
デフォルトのキャッシュファイルを共有することが可能になっています
(@pxref{Cache Files})．キャッシュファイルは特定のコンパイラに対してのみ
で有効ですが，システムの多くは複数の利用可能なコンパイラがあるので，デフォ
ルトのキャッシュファイルをサイトファイルに設定した場合，サイトファイルで
出力変数@code{CC}を設定するのは良い考えです．

@c You can examine or override the value set by a command line option to
@c @code{configure} in a site file; options set shell variables that have
@c the same names as the options, with any dashes turned into underscores.
@c The exceptions are that @option{--without-} and @option{--disable-} options
@c are like giving the corresponding @option{--with-} or @option{--enable-}
@c option and the value @samp{no}.  Thus, @option{--cache-file=localcache}
@c sets the variable @code{cache_file} to the value @samp{localcache};
@c @option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
@c @code{enable_warnings} to the value @samp{no}; @option{--prefix=/usr} sets the
@c variable @code{prefix} to the value @samp{/usr}; etc.
@c 
@code{configure}へのコマンドラインオプションで，サイトファイルで設定され
た値を調査したり優先したりすることが可能です．オプションは，ダッシュをア
ンダースコアに変更した，オプションと同じ名前のシェル変数を設定します．例
外は，@samp{--without-}と@samp{--disable-}オプションが，対応する
@samp{--with-}や@samp{--enable-}オプションに値@samp{no}を与えたものに似
ていることです．このため，@option{--cache-file=localcache}は，変数 
@code{cache_file}を値@samp{localcache}に設定し，
@option{--enable-warnings=no}や@option{--disable-warnings}は，変数 
@code{enable_warnings}を値@samp{no}に設定しします．
@option{--prefix=/usr}は，変数@code{prefix}を値@samp{/usr}に設定します．
等のようになっています．

@c Site files are also good places to set default values for other output
@c variables, such as @code{CFLAGS}, if you need to give them non-default
@c values: anything you would normally do, repetitively, on the command
@c line.  If you use non-default values for @var{prefix} or
@c @var{exec_prefix} (wherever you locate the site file), you can set them
@c in the site file if you specify it with the @code{CONFIG_SITE}
@c environment variable.
@c 
デフォルトでない値を与える必要がある場合，サイトファイルは@code{CFLAGS} 
のような他の出力変数に対しデフォルト値を設定するための良い場所です．通常
コマンドラインで繰り返し行っていることならなんでもできます．@var{prefix} 
や@var{exec_prefix}に対してデフォルト値ではないものを使用したい場合(サイ
トファイルの場所がどこであれ)，@code{CONFIG_SITE}を用いて指定すると，サ
イトファイルで設定できます．

@c You can set some cache values in the site file itself.  Doing this is
@c useful if you are cross-compiling, so it is impossible to check features
@c that require running a test program.  You could ``prime the cache'' by
@c setting those values correctly for that system in
@c @file{@var{prefix}/etc/config.site}.  To find out the names of the cache
@c variables you need to set, look for shell variables with @samp{_cv_} in
@c their names in the affected @code{configure} scripts, or in the Autoconf
@c M4 source code for those macros.
@c 
サイトファイル自身でキャッシュ値を設定することもできます．こうすることは
クロスコンパイルで役に立つので，テストプログラムの実行が必要となる特徴の
調査は不可能になります．システムに対して
@file{@var{prefix}/etc/config.site}でこれらの値を正しく設定することで，
``prime the cache''できます．設定する必要があるキャッシュ変数名を見つけ
るため，影響を受けた@code{configure}スクリプトやこれらのマクロのための
Autoconf M4ソースコードで，名前に@samp{_cv_}を伴うシェル変数を探してくだ
さい．

@c The cache file is careful to not override any variables set in the site
@c files.  Similarly, you should not override command-line options in the
@c site files.  Your code should check that variables such as @code{prefix}
@c and @code{cache_file} have their default values (as set near the top of
@c @code{configure}) before changing them.
@c 
キャッシュファイルは，サイトファイルで設定した変数を無効にしないよう注意
深く実行されます．また，サイトファイルでコマンドラインオプションを無効に
するべきではありません．コードでは，@code{prefix}と@code{cache_file}のよ
うな変数を変更する前に，(@code{configure}の最初の方で設定される)デフォル
ト値をがあるかどうかを調査するべきです．

@c Here is a sample file @file{/usr/share/local/gnu/share/config.site}.  The
@c command @samp{configure --prefix=/usr/share/local/gnu} would read this
@c file (if @code{CONFIG_SITE} is not set to a different file).
@c 
サンプルファイル@file{/usr/share/local/gnu/share/config.site}が以下のよ
うになります．コマンド@samp{configure --prefix=/usr/share/local/gnu}は，
(@code{CONFIG_SITE}で異なるファイルを設定していない場合)このファイルを読
みます．

@example
# config.site for configure
#
# Change some defaults.
test "$prefix" = NONE && prefix=/usr/share/local/gnu
test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
test "$sharedstatedir" = '$prefix/com' && sharedstatedir=/var
test "$localstatedir" = '$prefix/var' && localstatedir=/var

# Give Autoconf 2.x generated configure scripts a shared default
# cache file for feature test results, architecture-specific.
if test "$cache_file" = /dev/null; then
  cache_file="$prefix/var/config.cache"
  # A cache file is only valid for one C compiler.
  CC=gcc
fi
@end example


@c ============================================== Running configure Scripts.

@node Running configure scripts, config.status Invocation, Site Configuration, Top
@chapter @code{configure}スクリプトの実行
@cindex @code{configure}

@c Below are instructions on how to configure a package that uses a
@c @code{configure} script, suitable for inclusion as an @file{INSTALL}
@c file in the package.  A plain-text version of @file{INSTALL} which you
@c may use comes with Autoconf.
@c 
以下は，@code{configure}スクリプトを使用したパッケージのコンフィグレーショ
ン方法の説明書で，パッケージの@file{INSTALL}ファイルに含むのに適切なもの
です．使用可能なプレーンテキストバージョンの@file{INSTALL}は，Autoconf 
に付属しています．

@menu
* Basic Installation::          Instructions for typical cases
* Compilers and Options::       Selecting compilers and optimization
* Multiple Architectures::      Compiling for multiple architectures at once
* Installation Names::          Installing in different directories
* Optional Features::           Selecting optional features
* System Type::                 Specifying the system type
* Sharing Defaults::            Setting site-wide defaults for @code{configure}
* Environment Variables::       Defining environment variables.
* configure Invocation::        Changing how @code{configure} runs
@end menu

@include install-ja.texi


@c ============================================== Recreating a Configuration

@node config.status Invocation, Obsolete Constructs, Running configure scripts, Top
@chapter コンフィグレーションの再生成
@cindex @code{config.status}

@c The @code{configure} script creates a file named @file{config.status},
@c which actually configures, @dfn{instantiates}, the template files.  It
@c also records the configuration options that were specified when the
@c package was last configured in case reconfiguring is needed.
@c 
@code{configure}スクリプトは，実際にコンフィグレーションを行なう@dfn{実
際に作成されるもの}のテンプレートファイルとなる@file{config.status}とい
う名前のファイルを作成します．それは，再コンフィグレーションが必要な状況
でパッケージが前回コンフィグレーションされた時に指定されたコンフィグレー
ションオプションも記録しています．

@c Synopsis:
@c 
構文は以下のとおりです．
@example
./config.status @var{option}@dots{} [@var{file}@dots{}]
@end example

@c It configures the @var{files}, if none are specified, all the templates
@c are instantiated.  The files must be specified without their
@c dependencies, as in
@c 
@var{files}をコンフィグレーションし，何も指定されていない場合は全てのテ
ンプレートが実際に作成されるものになります．ファイルは，依存性無しで指定
する必要があり，以下のようにします．

@example
./config.status foobar
@end example

@noindent
@c not
@c 
以下のようにはしません．

@example
./config.status foobar:foo.in:bar.in
@end example

@c The supported @var{option}s are:
@c 
サポートされている@var{option}は以下のとおりです．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options, the list of the template
@c files and exit.
@c 
コマンドラインオプションの概要とテンプレートファイルのリストを出力し，終
了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力し終了します．

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時ファイルを削除しません．

@item --file=@var{file}[:@var{template}]
@c Require that @var{file} be instantiated as if
@c @samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used.  Both
@c @var{file} and @var{template} may be @samp{-} in which case the standard
@c output and/or standard input, respectively, is used.  If a
@c @var{template} filename is relative, it is first looked for in the build
@c tree, and then in the source tree. @xref{Configuration Actions}, for
@c more details.
@c 
@samp{AC_CONFIG_FILES(@var{file}:@var{template})}が使用されるように，実
際に作成されるファイルを要求します．@var{file}と@var{template}はどちらも
@samp{-}が可能で，それぞれ標準出力そして/または標準入力が使用されます．
@var{template}ファイル名が相対的な場合，最初にビルドツリーで検索され，次
にソースツリーで検索されます．詳細は，@xref{Configuration Actions}.

@c This option and the following ones provide one way for separately
@c distributed packages to share the values computed by @code{configure}.
@c Doing so can be useful if some of the packages need a superset of the
@c features that one of them, perhaps a common library, does.  These
@c options allow a @file{config.status} file to create files other than the
@c ones that its @file{configure.ac} specifies, so it can be used for a
@c different package.
@c 
このオプションと以下のものは，個別に配布されているパッケージで
@code{configure}が計算した値を共有する方法を提供します．そうすることは，
複数のパッケージがそれらのスーパーセット，おそらく共通のライブラリを必要
とする場合に役に立つはずです．これらのオプションで，@file{config.status} 
ファイルが@file{configure.ac}で指定しているもの以外のファイルも作成可能
になるので，ことなるパッケージで使用可能になります．

@item --header=@var{file}[:@var{template}]
@c Same as @option{--file} above, but with @samp{AC_CONFIG_HEADERS}.
@c 
@option{--file}と同じですが，@samp{AC_CONFIG_HEADERS}を使用します．

@item --recheck
@c Ask @file{config.status} to update itself and exit (no instantiation).
@c This option is useful if you change @code{configure}, so that the
@c results of some tests might be different from the previous run.  The
@c @option{--recheck} option re-runs @code{configure} with the same arguments
@c you used before, plus the @option{--no-create} option, which prevents
@c @code{configure} from running @file{config.status} and creating
@c @file{Makefile} and other files, and the @option{--no-recursion} option,
@c which prevents @code{configure} from running other @code{configure}
@c scripts in subdirectories.  (This is so other @file{Makefile} rules can
@c run @file{config.status} when it changes; @pxref{Automatic Remaking},
@c for an example).
@c 
@file{config.status}にそれ自身を更新するかどうか尋ねて終了します(実際に
作成しません)．いくつかのテストの結果が前回のものことなる可能性があるの
で，このオプションは@code{configure}を変更した場合に役に立ちます．
@option{--recheck}では，前回使用したものと同じ引数に加え，
@code{configure}が@file{config.status}を実行したり@file{Makefile}とその
他のファイルを作成したりしないようにする@option{--no-create}オプションと，
@code{configure}がサブディレクトリでその他の@code{configure}スクリプトを
実行しないようにする@option{--no-recursion}を用いて再実行します．
(@file{config.status}が変更された時に，他の@file{Makefile}の規則で実行可
能なようにするため，これは存在しています．例は，@pxref{Automatic
Remaking}) ．
@end table

@c @file{config.status} checks several optional environment variables that
@c can alter its behavior:
@c 
@file{config.status}は，その動作を変更するいくつかのオプションの環境変数
を調査します．

@defvar CONFIG_SHELL
@evindex CONFIG_SHELL
@c The shell with which to run @code{configure} for the @option{--recheck}
@c option.  It must be Bourne-compatible.  The default is @file{/bin/sh}.
@c 
@option{--recheck}オプションで@code{configure}が実行されるシェルです．
Bourne互換性とする必要があります．デフォルトは@file{/bin/sh}です．
@end defvar

@defvar CONFIG_STATUS
@evindex CONFIG_STATUS
@c The file name to use for the shell script that records the
@c configuration.  The default is @file{./config.status}.  This variable is
@c useful when one package uses parts of another and the @code{configure}
@c scripts shouldn't be merged because they are maintained separately.
@c 
コンフィグレーションを記録するシェルスクリプトのファイル名です．デフォル
トは@file{./config.status}です．この変数は，他のパッケージの一部を使用し
たり，@code{configure}スクリプトが別々に管理されていて，マージされていな
いとき役に立ちます．
@end defvar

@c You can use @file{./config.status} in your Makefiles.  For example, in
@c the dependencies given above (@pxref{Automatic Remaking}),
@c @file{config.status} is run twice when @file{configure.ac} has changed.
@c If that bothers you, you can make each run only regenerate the files for
@c that rule:
@c 
Makefileで@file{./config.status}を使用することも可能です．例えば，上記
(@pxref{Automatic Remaking})のような依存がある状況では，
@file{configure.ac}が変更された時，@file{config.status}は2回実行されます．
それがうるさい場合，以下のような規則で，ファイルを再生成するためだけにそ
れぞれ実行させることが可能です．
@example
@group
config.h: stamp-h
stamp-h: config.h.in config.status
        ./config.status config.h
        echo > stamp-h

Makefile: Makefile.in config.status
        ./config.status Makefile
@end group
@end example

@c The calling convention of @file{config.status} has changed, see
@c @ref{Obsolete config.status Use}, for details.
@c 
@file{config.status}の呼び出しの慣習は変更されました．詳細は，
@ref{Obsolete config.status Use}を参照してください．


@c =================================================== Obsolete Constructs

@node Obsolete Constructs, Questions, config.status Invocation, Top
@chapter 時代遅れの構成物

@c Autoconf changes, and throughout the years some constructs are obsoleted.
@c Most of the changes involve the macros, but the tools themselves, or
@c even some concepts, are now considered obsolete.
@c 
Autoconfは変化し，歳月を経て自体遅れになった構成物もあります．変更のほと
んどはマクロの呼び出しですが，ツール自身や，そのコンセプトさえも今では時
代遅れと考えられるものもあります．

@c You may completely skip this chapter if you are new to Autoconf, its
@c intention is mainly to help maintainers updating their packages by
@c understanding how to move to more modern constructs.
@c 
新しいAutoconfを使用する場合は，この章を完全に飛ばしてもかまいませんし，
ここでの目的は主に，より新しい構成物に変更する方法を理解することで，パッ
ケージを更新している管理者を助けることになっています．

@menu
* Obsolete config.status Use::  Different calling convention
* acconfig.h::                  Additional entries in @file{config.h.in}
* autoupdate Invocation::       Automatic update of @file{configure.ac}
* Obsolete Macros::             Backward compatibility macros
* Autoconf 1::                  Tips for upgrading your files
* Autoconf 2.13::               Some fresher tips
@end menu

@node Obsolete config.status Use, acconfig.h, Obsolete Constructs, Obsolete Constructs
@section 時代遅れの@file{config.status}の呼び出し

@c @file{config.status} now supports arguments to specify the files to
@c instantiate, see @ref{config.status Invocation}, for more details.
@c Before, environment variables had to be used.
@c 
@file{config.status}は現在，実際に作成されるファイルを指定するための引数
をサポートしています．詳細は，@ref{config.status Invocation}を参照してく
ださい．以前は環境変数の使用が必要でした．

@defvar CONFIG_COMMANDS
@evindex CONFIG_COMMANDS
@c The tags of the commands to execute.  The default is the arguments given
@c to @code{AC_OUTPUT} and @code{AC_CONFIG_COMMANDS} in
@c @file{configure.ac}.
@c 
実行するコマンドのタグです．デフォルトは，@file{configure.ac}内の
@code{AC_OUTPUT}と@code{AC_CONFIG_COMMANDS}に与える引数です．
@end defvar

@defvar CONFIG_FILES
@evindex CONFIG_FILES
@c The files in which to perform @samp{@@@var{variable}@@} substitutions.
@c The default is the arguments given to @code{AC_OUTPUT} and
@c @code{AC_CONFIG_FILES} in @file{configure.ac}.
@c 
@samp{@@@var{variable}@@}の置換を実行するファイルです．デフォルトは，
@file{configure.ac}内の@code{AC_OUTPUT}と@code{AC_CONFIG_COMMANDS}に与え
る引数です．
@end defvar

@defvar CONFIG_HEADERS
@evindex CONFIG_HEADERS
@c The files in which to substitute C @code{#define} statements.  The
@c default is the arguments given to @code{AC_CONFIG_HEADERS}; if that
@c macro was not called, @file{config.status} ignores this variable.
@c 
Cの@code{#define}文の置換を行なうファイルです．デフォルトは
@code{AC_CONFIG_HEADERS}に与える引数です．そのマクロが呼び出されていない
場合，@file{config.status}はこの値を無視します．
@end defvar

@defvar CONFIG_LINKS
@evindex CONFIG_LINKS
@c The symbolic links to establish.  The default is the arguments given to
@c @code{AC_CONFIG_LINKS}; if that macro was not called,
@c @file{config.status} ignores this variable.
@c 
作成されるシンボリックリンクです．デフォルトは，@code{AC_CONFIG_LINKS}に
与える引数です．そのマクロが呼び出されていない場合，@file{config.status}
はこの値を無視します．
@end defvar

@c In @ref{config.status Invocation}, using this old interface, the example
@c would be:
@c 
@ref{config.status Invocation}で古いインターフェースを使用する例は，以下
のようになります．

@example
@group
config.h: stamp-h
stamp-h: config.h.in config.status
        CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
          CONFIG_HEADERS=config.h ./config.status
        echo > stamp-h

Makefile: Makefile.in config.status
        CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
          CONFIG_FILES=Makefile ./config.status
@end group
@end example

@noindent
@c (If @file{configure.ac} does not call @code{AC_CONFIG_HEADERS}, there is
@c no need to set @code{CONFIG_HEADERS} in the @code{make} rules, equally
@c for @code{CONFIG_COMMANDS} etc.)
@c 
(@file{configure.ac}で@code{AC_CONFIG_HEADERS}を呼び出さない場合，
@code{make}規則に@code{CONFIG_HEADERS}を設定する必要はなく，
@code{CONFIG_COMMANDS}等に対しても同様になります．)


@node acconfig.h, autoupdate Invocation, Obsolete config.status Use, Obsolete Constructs
@section @file{acconfig.h}

@cindex @file{acconfig.h}
@cindex @file{config.h.top}
@cindex @file{config.h.bot}

@c In order to produce @file{config.h.in}, @command{autoheader} needs to
@c build or to find templates for each symbol.  Modern releases of Autoconf
@c use @code{AH_VERBATIM} and @code{AH_TEMPLATE} (@pxref{Autoheader
@c Macros}), but in older releases a file, @file{acconfig.h}, contained the
@c list of needed templates.  @code{autoheader} copies comments and
@c @code{#define} and @code{#undef} statements from @file{acconfig.h} in
@c the current directory, if present.  This file used to be mandatory if
@c you @code{AC_DEFINE} any additional symbols.
@c 
@file{config.h.in}を生成するため，@command{autoheader}はそれぞれのシンボ
ルに対するテンプレートを構築したり見つたりする必要がありました．現在の
Autoconfのリリースでは，@code{AH_VERBATIM}と@code{AH_TEMPLATE}を使用しま
すが(@pxref{Autoheader Macros})，古いリリースでは，ファイル
@file{acconfig.h}に必要なテンプレートのリストを含めていました．
@code{autoheader}は，コメントと@code{#define}と@code{#undef}の文を，
@file{acconfig.h} がカレントディレクトリに存在する場合はそこからコピーし
ます．追加のシンボルを@code{AC_DEFINE}する場合，このファイルを使用する義
務がありました．

@c Modern releases of Autoconf also provide @code{AH_TOP} and
@c @code{AH_BOTTOM} if you need to prepend/append some information to
@c @file{config.h.in}.  Ancient versions of Autoconf had a similar feature:
@c if @file{./acconfig.h} contains the string @samp{@@TOP@@},
@c @code{autoheader} copies the lines before the line containing
@c @samp{@@TOP@@} into the top of the file that it generates.  Similarly,
@c if @file{./acconfig.h} contains the string @samp{@@BOTTOM@@},
@c @code{autoheader} copies the lines after that line to the end of the
@c file it generates.  Either or both of those strings may be omitted.  An
@c even older alternate way to produce the same effect in jurasik versions
@c of Autoconf is to create the files @file{@var{file}.top} (typically
@c @file{config.h.top}) and/or @file{@var{file}.bot} in the current
@c directory.  If they exist, @code{autoheader} copies them to the
@c beginning and end, respectively, of its output.
@c 
@file{config.h.in}に情報を前置/後置したい場合，現在のAutoconfのリリース
でも，@code{AH_TOP}と@code{AH_BOTTOM}を提供しています．昔のバージョンの
Autoconfにはよく似た機能がありました．@file{./acconfig.h}に文字列
@samp{@@TOP@@}が含まれている場合，@code{autoheader}は@samp{@@TOP@@}が含
まれている行の前の行を生成するファイルの先頭にコピーします．同様に，
@file{./acconfig.h}に文字列@samp{@@BOTTOM@@}が含まれている場合，
@code{autoheader}はその行の後の行を生成するファイルの末尾にコピーします．
これらの文字列のいずれかまたは両方とも省略できます．Autoconfの古代のバー
ジョンで同じ効果を生成するための，さらに古い代替方法は，カレントディレク
トリにファイル@file{@var{file}.top}(通常は@file{config.h.top})や
@file{@var{file}.bot}を作成することです．それらが存在する場合，
@code{autoheader}はその出力の最初と終りに，それぞれその内容をコピーしま
す．

@c In former versions of Autoconf, the files used in preparing a software
@c package for distribution were:
@c 
以前のバージョンのAutoconfでは，配布するソフトウエアパッケージの準備で使
用するファイルは以下のようになっています．
@example
@group
configure.ac --.   .------> autoconf* -----> configure
               +---+
[aclocal.m4] --+   `---.
[acsite.m4] ---'       |
                       +--> [autoheader*] -> [config.h.in]
[acconfig.h] ----.     |
                 +-----'
[config.h.top] --+
[config.h.bot] --'
@end group
@end example

@c Use only the @code{AH_} macros, @file{configure.ac} should be
@c self-contained, and should not depend upon @file{acconfig.h} etc.
@c 
@code{AH_}マクロだけを使用し，@file{configure.ac}は自己内蔵型にすべきで，
そして，@file{acconfig.h}等に依存すべきではありません．


@node autoupdate Invocation, Obsolete Macros, acconfig.h, Obsolete Constructs
@section @file{configure.ac}を現代風にするために@code{autoupdate}を使用する
@cindex @code{autoupdate}

@c The @code{autoupdate} program updates a @file{configure.ac} file that
@c calls Autoconf macros by their old names to use the current macro names.
@c In version 2 of Autoconf, most of the macros were renamed to use a more
@c uniform and descriptive naming scheme.  @xref{Macro Names}, for a
@c description of the new scheme.  Although the old names still work
@c (@pxref{Obsolete Macros}, for a list of the old macros and the corresponding
@c new names), you can make your @file{configure.ac} files more readable
@c and make it easier to use the current Autoconf documentation if you
@c update them to use the new macro names.
@c 
@code{autoupdate}プログラムは，Autoconfマクロを古い名前で呼び出している
@file{configure.ac}ファイルを，現在のマクロ名に更新します．バージョン2の
Autoconfでは，ほとんどのマクロが，より一様で記述的な命名法で名前が変更さ
れています．新しい方法の記述は@xref{Macro Names}. 古い名前も動作しますが
(古いマクロとそれに対応する新しいマクロのリストは@pxref{Obsolete
Macros})，新しいマクロ名を使用するために更新した場合，
@file{configure.ac}はより可読性の高いものになり，現在のAutoconfマクロを
使用することがより簡単になります．

@evindex SIMPLE_BACKUP_SUFFIX
@c If given no arguments, @code{autoupdate} updates @file{configure.ac},
@c backing up the original version with the suffix @file{~} (or the value
@c of the environment variable @code{SIMPLE_BACKUP_SUFFIX}, if that is
@c set).  If you give @code{autoupdate} an argument, it reads that file
@c instead of @file{configure.ac} and writes the updated file to the
@c standard output.
@c 
引数が与えられていない場合，@code{autoupdate}は@file{configure.ac}を更新
し，元のバージョンを接尾子@file{~}でバックアップします(または，環境変数
@code{SIMPLE_BACKUP_SUFFIX}が設定されている場合はその値になります)．
@code{autoupdate}に引数を与えた場合，@file{configure.ac}の代わりにそのファ
イルを読み込み，更新されたファイルを標準出力に出力します．

@noindent
@c @code{autoupdate} accepts the following options:
@c 
@code{autoupdate}は以下のオプションを受け入れます．

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します．

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
@code{autoupdate}のバージョンナンバーを出力して終了します．

@item --verbose
@itemx -v
@c Report processing steps.
@c 
処理している段階を報告します．

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時的なファイルを削除しません．

@item --autoconf-dir=@var{dir}
@itemx -A @var{dir}
@evindex AC_MACRODIR
@c Override the location where the installed Autoconf data files are looked
@c for.  You can also set the @code{AC_MACRODIR} environment variable to a
@c directory; this option overrides the environment variable.
@c 
インストールされているAutoconfのデータファイルを探す場所に優先します．
@code{AC_MACRODIR}環境変数でディレクトリに設定することも可能です．このオ
プションは環境変数に優先します．

@c This option is rarely needed and dangerous; it is only used when one
@c plays with different versions of Autoconf simultaneously.
@c 
このオプションが必要なことは滅多になく危険なものです．一人の人が，異なる
バージョンのAutoconfを同時に使用している時のみ使用されます．

@item --localdir=@var{dir}
@itemx -l @var{dir}
@c Look for the package file @file{aclocal.m4} in directory @var{dir}
@c instead of in the current directory.
@c 
パッケージファイル@file{aclocal.m4}を，現在のディレクトリの代わりにディ
レクトリ@var{dir}で探します．
@end table


@node Obsolete Macros, Autoconf 1, autoupdate Invocation, Obsolete Constructs
@section 時代遅れのマクロ

@c Several macros are obsoleted in Autoconf, for various reasons (typically
@c they failed to quote properly, couldn't be extended for more recent
@c issues etc.).  They are still supported, but deprecated: their use
@c should be avoided.
@c 
様々な理由で(通常適切に引用婦で囲むことに失敗していて以前の配布物が拡張
できないなどの理由です)，いくつかのマクロがAutoconfで時代遅れになってい
ます．それらはサポートされていますが，止めるようお願いします．それらの使
用は避けた方が良いでしょう．

@c During the jump from Autoconf version 1 to version 2, most of the
@c macros were renamed to use a more uniform and descriptive naming scheme,
@c but their signature did not change.  @xref{Macro Names}, for a
@c description of the new naming scheme.  Below, there is just the mapping
@c from old names to new names for these macros, the reader is invited to
@c refer to the definition of the new macro for the signature and the
@c description.
@c 
Autoconfのバージョン１からバージョン２へ移行している間，より一般的でより
記述的な命名法を使用するために，ほとんどのマクロの名前が変更されましたが，
その署名は変更されていません．これらのマクロの古い名前と新しい名前の対応
付けしたものは以下のようになっていて，署名と記述に対する新しいマクロの定
義への参照へと読者を招待します．

@defmac AC_ALLOCA
@maindex ALLOCA
@code{AC_FUNC_ALLOCA}
@end defmac

@defmac AC_ARG_ARRAY
@maindex ARG_ARRAY
@c removed because of limited usefulness
@c 
有用性の制限のため削除．
@end defmac

@defmac AC_C_CROSS
@maindex C_CROSS
@c This macro is obsolete; it does nothing.
@c 
このマクロは時代遅れです．何もしません．
@end defmac

@defmac AC_CANONICAL_SYSTEM
@maindex CANONICAL_SYSTEM
@c Determine the system type and set output variables to the names of the
@c canonical system types.  @xref{Canonicalizing}, for details about the
@c variables this macro sets.
@c 
システムタイプを決定し，出力変数を標準的なシステムタイプ名に設定します．
このマクロが設定する変数の詳細は@xref{Canonicalizing}.

@c The user is encouraged to use either @code{AC_CANONICAL_BUILD}, or
@c @code{AC_CANONICAL_HOST}, or @code{AC_CANONICAL_TARGET}, depending on
@c the needs.  Using @code{AC_CANONICAL_TARGET} is enough to run the two
@c other macros.
@c 
ユーザは必要なものに依存して，@code{AC_CANONICAL_BUILD}または
@code{AC_CANONICAL_HOST}のいずれか，または@code{AC_CANONICAL_TARGET}を使
用することを推奨します．@code{AC_CANONICAL_TARGET}を実行することで，必ず
それ以外の二つのマクロが実行されます．
@end defmac

@defmac AC_CHAR_UNSIGNED
@maindex CHAR_UNSIGNED
@code{AC_C_CHAR_UNSIGNED}
@end defmac

@defmac AC_CHECK_TYPE (@var{type}, @var{default})
@maindex CHECK_TYPE
@c Autoconf, up to 2.13, used to provide this version of
@c @code{AC_CHECK_TYPE}, deprecated because of its flaws.  Firstly, although
@c it is a member of the @code{CHECK} clan, singular sub-family, it does
@c more than just checking.  Second, missing types are not
@c @code{typedef}'d, they are @code{#define}'d, which can lead to
@c incompatible code in the case of pointer types.
@c 
2.13までのAutoconfでは，このバージョンの@code{AC_CHECK_TYPE}を提供するた
めに使用されていましたが，問題があり反対されていました．第一に，それは
@code{CHECK}一族のメンバーですが，単一のファミリーに過ぎず，調査以上異常
のことを行なっていました．次に，足りない型は@code{typedef}されず，それら
は@code{#define}されるので，ポインタ型の場合は互換性がなくなってしまうは
ずです．

@c This use of @code{AC_CHECK_TYPE} is obsolete and discouraged, see
@c @ref{Generic Types}, for the description of the current macro.
@c 
この@code{AC_CHECK_TYPE}の使用は時代遅れで推奨できません．現在のマクロの
記述は，@ref{Generic Types}を参照してください．

@c If the type @var{type} is not defined, define it to be the C (or C++)
@c builtin type @var{default}; e.g., @samp{short} or @samp{unsigned}.
@c 
型@var{type}が定義されていない場合，それはC(またはC++)の組み込みの型
@var{default}に定義されます．例えば，@samp{short}や@samp{unsigned}です．

@c This macro is equivalent to:
@c 
このマクロは以下と等価です．

@example
AC_CHECK_TYPE([@var{type}],
              [AC_DEFINE([@var{type}], [@var{default}],
                         [Define to `@var{default}' if <sys/types.h>
                          does not define.])])
@end example

@c In order to keep backward compatibility, the two versions of
@c @code{AC_CHECK_TYPE} are implemented, selected by a simple heuristics:
@c 
下位互換性のため，2つのバージョンの@code{AC_CHECK_TYPE}が実装されていて，
単純な発見的手法で選択されます．

@enumerate
@item
@c If there are three or four arguments, the modern version is used.
@c 
引数が3つまたは4つある場合，現在のバージョンが使用されます．

@item
@c If the second argument appears to be a C or C++ type, then the
@c obsolete version is used.  This happens if the argument is a C or C++
@c @emph{builtin} type or a C identifier ending in @samp{_t}, optionally
@c followed by one of @samp{[(* } and then by a string of zero or more
@c characters taken from the set @samp{[]()* _a-zA-Z0-9}.
@c 
2番目の引数にCやC++の型がある場合，時代遅れのバージョンが使用されます．
引数がCやC++に@emph{組み込まれている}型，または@samp{_t}で終るC識別子で，
さらに一つの@samp{[(* }が続き，その後にゼロ以上の@samp{[]()* _a-zA-Z0-9}
以外の文字列が続く場合はこうなります．

@item
@c If the second argument is spelled with the alphabet of valid C and C++
@c types, the user is warned and the modern version is used.
@c 
2番目の引数が有効なCとC++のアルファベットで綴られている型の場合，ユーザ
は警告され，現在のバージョンが使用されます．

@item
@c Otherwise, the modern version is used.
@c 
それ以外では，現在のバージョンが使用されます．
@end enumerate

@noindent
@c You are encouraged either to use a valid builtin type, or to use the
@c equivalent modern code (see above), or better yet, to use
@c @code{AC_CHECK_TYPES} together with
@c 
有効な組み込まれている型を使用する，または，同じ現在のコード(上記参照)を
使用する，もしくはそれより良いものとして，@code{AC_CHECK_TYPES}とともに
使用することをお勧めします．

@example
#if !HAVE_LOFF_T
typedef loff_t off_t;
#endif
@end example
@end defmac
@c end of AC_CHECK_TYPE

@defmac AC_CHECKING (@var{feature-description})
@maindex CHECKING
@c Same as @samp{AC_MSG_NOTICE([checking @var{feature-description}@dots{}]}.
@c 
@samp{AC_MSG_NOTICE([checking @var{feature-description}@dots{}]}と同じで
す．
@end defmac

@defmac AC_COMPILE_CHECK (@var{echo-text}, @var{includes}, @var{function-body}, @var{action-if-found}, @r{[}@var{action-if-not-found}@r{]})
@maindex COMPILE_CHECK
@c This is an obsolete version of @code{AC_TRY_LINK} (@pxref{Examining
@c Libraries}), with the addition that it prints @samp{checking for
@c @var{echo-text}} to the standard output first, if @var{echo-text} is
@c non-empty.  Use @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead
@c to print messages (@pxref{Printing Messages}).
@c 
これは，@code{AC_TRY_LINK}の時代遅れのバージョンで(@pxref{Examining
Libraries})，@var{echo-text}が空の場合は，それは追加として@samp{checking
for @var{echo-text}}を標準出力に最初に出力します．メッセージを出力するた
めには，代わりに@code{AC_MSG_CHECKING}と@code{AC_MSG_RESULT}を使用してく
ださい(@pxref{Printing Messages})．
@end defmac

@defmac AC_CONST
@maindex CONST
@code{AC_C_CONST}
@end defmac

@defmac AC_CROSS_CHECK
@maindex CROSS_CHECK
@c Same as @code{AC_C_CROSS}, which is obsolete too, and does nothing
@c @code{:-)}.
@c 
@code{AC_C_CROSS}と同じで，さらにそれも時代遅れになっていて，何もしませ
ん@code{:-)}．
@end defmac

@defmac AC_CYGWIN
@maindex CYGWIN
@c Check for the Cygwin environment in which case the shell variable
@c @code{CYGWIN} is set to @samp{yes}.  Don't use this macro, the dignified
@c means to check the nature of the host is using
@c @code{AC_CANONICAL_HOST}.  As a matter of fact this macro is defined as:
@c 
Cygwin環境を調査し，その状況ではシェル変数@code{CYGWIN}を@samp{yes}に設
定します．このマクロを使用せず，権威のあるホストの調査手法
@code{AC_CANONICAL_HOST} が使用されています．実際問題として，このマクロ
は以下のように定義されています．

@example
AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
case $host_os in
  *cygwin* ) CYGWIN=yes;;
         * ) CYGWIN=no;;
esac
@end example

@c Beware that the variable @code{CYGWIN} has a very special meaning when
@c running CygWin32, and should not be changed.  That's yet another reason
@c not to use this macro.
@c 
変数@code{CYGWIN}には，CygWin32を実行しているときは非常に特殊な意味があ
ることに注意し，変更すべきではありません．それはこのマクロを使用しないも
う一つの理由です．
@end defmac

@defmac AC_DECL_YYTEXT
@maindex DECL_YYTEXT
@c Does nothing, now integrated in @code{AC_PROG_LEX}.
@c 
何もせず，現在は@code{AC_PROG_LEX}に統合されています．
@end defmac

@defmac AC_DIR_HEADER
@maindex DIR_HEADER
@cvindex DIRENT
@cvindex SYSNDIR
@cvindex SYSDIR
@cvindex NDIR
@c Like calling @code{AC_FUNC_CLOSEDIR_VOID} and@code{AC_HEADER_DIRENT},
@c but defines a different set of C preprocessor macros to indicate which
@c header file is found:
@c 
@code{AC_FUNC_CLOSEDIR_VOID}と@code{AC_HEADER_DIRENT}の呼び出しに似てい
ますが，ヘッダファイルが見つかったことを示すため，異なるCプリプロセッサ
マクロの組を定義します．

@multitable {@file{sys/ndir.h}} {Old Symbol} {@code{HAVE_SYS_NDIR_H}}
@item Header            @tab Old Symbol     @tab New Symbol
@item @file{dirent.h}   @tab @code{DIRENT}  @tab @code{HAVE_DIRENT_H}
@item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
@item @file{sys/dir.h}  @tab @code{SYSDIR}  @tab @code{HAVE_SYS_DIR_H}
@item @file{ndir.h}     @tab @code{NDIR}    @tab @code{HAVE_NDIR_H}
@end multitable
@end defmac

@defmac AC_DYNIX_SEQ
@maindex DYNIX_SEQ
@c If on Dynix/PTX (Sequent @sc{unix}), add @option{-lseq} to output variable
@c @code{LIBS}.  This macro used to be defined as
@c 
Dynix/PTX (Sequent @sc{unix})の場合，出力変数@code{LIBS}に@option{-lseq} 
を追加します．このマクロは以下のように定義されるよう使用されていました．

@example
AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS")
@end example

@noindent
@c now it is just @code{AC_FUNC_GETMNTENT}.
@c 
現在では，@code{AC_FUNC_GETMNTENT}で行ないます．
@end defmac

@defmac AC_EXEEXT
@maindex EXEEXT
@ovindex EXEEXT
@c Defined the output variable @code{EXEEXT} based on the output of the
@c compiler, which is now done automatically.  Typically set to empty
@c string if Unix and @samp{.exe} if Win32 or OS/2.
@c 
コンパイラの出力を元に出力変数@code{EXEEXT}を定義し，それは現在では自動
的に行なわれます．通常，Unixでは空の文字列で，Win32やOS/2では@samp{.exe}
に設定します．
@end defmac

@defmac AC_EMXOS2
@maindex EMXOS2
@c Similar to @code{AC_CYGWIN} but checks for the EMX environment on OS/2
@c and sets @code{EMXOS2}.
@c 
@code{AC_CYGWIN}に似ていますが，OS/2のEMX環境変数を調査し@code{EMXOS2}を
設定します．
@end defmac

@defmac AC_ERROR
@maindex ERROR
@code{AC_MSG_ERROR}
@end defmac

@defmac AC_FIND_X
@maindex FIND_X
@code{AC_PATH_X}
@end defmac

@defmac AC_FIND_XTRA
@maindex FIND_XTRA
@code{AC_PATH_XTRA}
@end defmac

@defmac AC_FUNC_CHECK
@maindex FUNC_CHECK
@code{AC_CHECK_FUNC}
@end defmac

@defmac AC_FUNC_WAIT3
@maindex FUNC_WAIT3
@cvindex HAVE_WAIT3
@c If @code{wait3} is found and fills in the contents of its third argument
@c (a @samp{struct rusage *}), which HP-UX does not do, define
@c @code{HAVE_WAIT3}.
@c 
@code{wait3}が見つかり，第3引数(@samp{struct rusage *})の内容が満たされ
ている場合，HP-UXは違いますが，@code{HAVE_WAIT3}を定義します．

@c These days portable programs should use @code{waitpid}, not
@c @code{wait3}, as @code{wait3} is being removed from the Open Group
@c standards, and will not appear in the next revision of POSIX.
@c 
現在では，@code{wait3}はOpen Groupの標準から削除されていて，次のリビジョ
ンのPOSIXでは無くなるので，移植性の高いプログラムでは@code{wait3}ではな
く@code{waitpid}を使用すべきです．
@end defmac

@defmac AC_GCC_TRADITIONAL
@maindex GCC_TRADITIONAL
@code{AC_PROG_GCC_TRADITIONAL}
@end defmac

@defmac AC_GETGROUPS_T
@maindex GETGROUPS_T
@code{AC_TYPE_GETGROUPS}
@end defmac

@defmac AC_GETLOADAVG
@maindex GETLOADAVG
@code{AC_FUNC_GETLOADAVG}
@end defmac

@defmac AC_HAVE_FUNCS
@maindex HAVE_FUNCS
@code{AC_CHECK_FUNCS}
@end defmac

@defmac AC_HAVE_HEADERS
@maindex HAVE_HEADERS
@code{AC_CHECK_HEADERS}
@end defmac

@defmac AC_HAVE_LIBRARY (@var{library}, @r{[}@var{action-if-found}@r{]}, @r{[}@var{action-if-not-found}@r{]}, @r{[}@var{other-libraries}@r{]})
@maindex HAVE_LIBRARY
@c This macro is equivalent to calling @code{AC_CHECK_LIB} with a
@c @var{function} argument of @code{main}.  In addition, @var{library} can
@c be written as any of @samp{foo}, @option{-lfoo}, or @samp{libfoo.a}.  In
@c all of those cases, the compiler is passed @option{-lfoo}.  However,
@c @var{library} cannot be a shell variable; it must be a literal name.
@c 
このマクロは，@var{function}引数を@code{main}にした@code{AC_CHECK_LIB}の
呼び出しと同じです．さらに，@var{library}は，@samp{foo}，@option{-lfoo}，
または@samp{libfoo.a}のいずれで書くことも可能です．これら全ての状況で，
コンパイラに@option{-lfoo}が渡されます．しかし，@var{library}をシェル変
数することは不可能です．リテラル名にする必要があります．
@end defmac

@defmac AC_HAVE_POUNDBANG
@maindex HAVE_POUNDBANG
@code{AC_SYS_INTERPRETER} (呼び出し規則が異なります)
@end defmac

@defmac AC_HEADER_CHECK
@maindex HEADER_CHECK
@code{AC_CHECK_HEADER}
@end defmac

@defmac AC_HEADER_EGREP
@maindex HEADER_EGREP
@code{AC_EGREP_HEADER}
@end defmac

@defmac AC_INIT (@var{unique-file-in-source-dir})
@maindex INIT
@c Formerly @code{AC_INIT} used to have a single argument, and was
@c equivalent to:
@c 
以前の@code{AC_INIT}は単一の引数のみで使用され，それは以下と同じです．

@example
AC_INIT
AC_CONFIG_SRCDIR(@var{unique-file-in-source-dir})
@end example
@end defmac

@defmac AC_INLINE
@maindex INLINE
@code{AC_C_INLINE}
@end defmac

@defmac AC_INT_16_BITS
@maindex INT_16_BITS
@cvindex INT_16_BITS
@c If the C type @code{int} is 16 bits wide, define @code{INT_16_BITS}.
@c Use @samp{AC_CHECK_SIZEOF(int)} instead.
@c 
Cの型が16ビット幅の場合，@code{INT_16_BITS}を定義します．代わりに
@samp{AC_CHECK_SIZEOF(int)}を使用してください．
@end defmac

@defmac AC_IRIX_SUN
@maindex IRIX_SUN
@c If on IRIX (Silicon Graphics @sc{unix}), add @option{-lsun} to output
@c @code{LIBS}.  If you were using it to get @code{getmntent}, use
@c @code{AC_FUNC_GETMNTENT} instead.  If you used it for the NIS versions
@c of the password and group functions, use @samp{AC_CHECK_LIB(sun,
@c getpwnam)}.  Up to Autoconf 2.13, it used to be
@c 
IRIX (Silicon Graphics @sc{unix})の場合，出力変数@code{LIBS}に
@option{-lsun}を追加します．@code{getmntent}を取得するためにそれを使用し
ている場合，その代わりに@code{AC_FUNC_GETMNTENT}を使用してください．NIS 
バージョンのパスワードとグループ関数のためにそれを使用している場合．
@samp{AC_CHECK_LIB(sun, getpwnam)}を使用してください．Autoconf 2.13まで
は，以下のように使用されていました．

@example
AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS")
@end example

@noindent
@c now it is defined as
@c 
現在ではそれは以下のように定義されます．

@example
AC_FUNC_GETMNTENT
AC_CHECK_LIB(sun, getpwnam)
@end example
@end defmac

@defmac AC_LANG_C
@maindex LANG_C
@c Same as @samp{AC_LANG(C)}.
@c 
@samp{AC_LANG(C)}と同じです．
@end defmac

@defmac AC_LANG_CPLUSPLUS
@maindex LANG_CPLUSPLUS
@c Same as @samp{AC_LANG(C++)}.
@c 
@samp{AC_LANG(C++)}と同じです．
@end defmac

@defmac AC_LANG_FORTRAN77
@maindex LANG_FORTRAN77
@c Same as @samp{AC_LANG(Fortran 77)}.
@c 
@samp{AC_LANG(Fortran 77)}と同じです．
@end defmac

@defmac AC_LANG_RESTORE
@maindex LANG_RESTORE
@c Select the @var{language} that is saved on the top of the stack, as set
@c by @code{AC_LANG_SAVE}, remove it from the stack, and call
@c @code{AC_LANG(@var{language})}.
@c 
@code{AC_LANG_SAVE}で設定されるように，スタックのトップに保存される
@var{language}を選択し，スタックから削除し，
@code{AC_LANG(@var{language})}を呼び出します．
@end defmac

@defmac AC_LANG_SAVE
@maindex LANG_SAVE
@c Remember the current language (as set by @code{AC_LANG}) on a stack.
@c The current language does not change.  @code{AC_LANG_PUSH} is preferred.
@c 
現在の言語を(@code{AC_LANG}で設定されるように)スタックに記憶します．現在
の言語は変更されません．@code{AC_LANG_PUSH}が好まれます．
@end defmac

@defmac AC_LINK_FILES (@var{source}@dots{}, @var{dest}@dots{})
@maindex LINK_FILES
@c This is an obsolete version of @code{AC_CONFIG_LINKS}.  An updated
@c version of:
@c 
これは，@code{AC_CONFIG_LINKS}の時代遅れのバージョンです．以下を更新した
バージョンにします．

@example
AC_LINK_FILES(config/$machine.h config/$obj_format.h,
              host.h            object.h)
@end example

@noindent
@c is:
@c 
それは，以下のようになります．

@example
AC_CONFIG_LINKS(host.h:config/$machine.h
                object.h:config/$obj_format.h)
@end example
@end defmac

@defmac AC_LN_S
@maindex LN_S
@code{AC_PROG_LN_S}
@end defmac

@defmac AC_LONG_64_BITS
@maindex LONG_64_BITS
@cvindex LONG_64_BITS
@c Define @code{LONG_64_BITS} if the C type @code{long int} is 64 bits wide.
@c Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead.
@c 
Cの型@code{long int}が64ビット幅の場合，@code{LONG_64_BITS}を定義します．
その代わりに，一般的なマクロ@samp{AC_CHECK_SIZEOF([long int])}を使用して
ください．
@end defmac

@defmac AC_LONG_DOUBLE
@maindex LONG_DOUBLE
@code{AC_C_LONG_DOUBLE}
@end defmac

@defmac AC_LONG_FILE_NAMES
@maindex LONG_FILE_NAMES
@code{AC_SYS_LONG_FILE_NAMES}
@end defmac

@defmac AC_MAJOR_HEADER
@maindex MAJOR_HEADER
@code{AC_HEADER_MAJOR}
@end defmac

@defmac AC_MEMORY_H
@maindex MEMORY_H
@cvindex NEED_MEMORY_H
@c Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
@c defined in @file{memory.h}.  Today it is equivalent to
@c @samp{AC_CHECK_HEADERS(memory.h)}.  Adjust your code to depend upon
@c @code{HAVE_MEMORY_H}, not @code{NEED_MEMORY_H}, see @xref{Standard
@c Symbols}.
@c 
@code{mem}関数が@file{memory.h}で定義されている場合に
@code{NEED_MEMORY_H}を定義するために使用されます．現在は，
@samp{AC_CHECK_HEADERS(memory.h)}と同じです．コードを
@code{NEED_MEMORY_H}ではなく@code{HAVE_MEMORY_H}に依存するように調整して
ください．@xref{Standard Symbols}.
@end defmac

@defmac AC_MINGW32
@maindex MINGW32
@c Similar to @code{AC_CYGWIN} but checks for the MingW32 compiler
@c environment and sets @code{MINGW32}.
@c 
@code{AC_CYGWIN}に似ていますが，それはMingW32コンパイラの環境を調査し
@code{MINGW32}を設定します．
@end defmac

@defmac AC_MINUS_C_MINUS_O
@maindex MINUS_C_MINUS_O
@code{AC_PROG_CC_C_O}
@end defmac

@defmac AC_MMAP
@maindex MMAP
@code{AC_FUNC_MMAP}
@end defmac

@defmac AC_MODE_T
@maindex MODE_T
@code{AC_TYPE_MODE_T}
@end defmac

@defmac AC_OBJEXT
@maindex OBJEXT
@ovindex OBJEXT
@c Defined the output variable @code{OBJEXT} based on the output of the
@c compiler, after .c files have been excluded.  Typically set to @samp{o}
@c if Unix, @samp{obj} if Win32.  Now the compiler checking macros handle
@c this automatically.
@c 
.cファイルが除外された後，コンパイラの出力に基づいて，出力変数 
@code{OBJEXT}を定義します．通常，Unixでは@samp{o}で，Win32では 
@samp{obj}に設定します．現在はコンパイラの調査マクロがこれを自動的に処理
します．
@end defmac

@defmac AC_OBSOLETE (@var{this-macro-name}, @r{[}@var{suggestion}@r{]})
@maindex OBSOLETE
@c Make @code{m4} print a message to the standard error output warning that
@c @var{this-macro-name} is obsolete, and giving the file and line number
@c where it was called.  @var{this-macro-name} should be the name of the
@c macro that is calling @code{AC_OBSOLETE}.  If @var{suggestion} is given,
@c it is printed at the end of the warning message; for example, it can be
@c a suggestion for what to use instead of @var{this-macro-name}.
@c 
@code{m4}が標準エラー出力に，@var{this-macro-name}が時代遅れだというメッ
セージをそれが呼び出されているファイルと行とともに出力します．
@var{this-macro-name}は，@code{AC_OBSOLETE}が呼び出しているマクロ名にす
べきです．@var{suggestion}が与えられている場合，それは警告メッセージの終
りに出力されます．例えば，@var{this-macro-name}の代わりに使用するものを
提案することが可能になります．

@c For instance
@c 
例えば以下のようにします．

@example
AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
@end example

@c You are encouraged to use @code{AU_DEFUN} instead, since it gives better
@c services to the user.
@c 
ユーザに対するより良いサービスとなるので，代わりに@code{AU_DEFUN}を使用
することを推奨します．
@end defmac

@defmac AC_OFF_T
@maindex OFF_T
@code{AC_TYPE_OFF_T}
@end defmac

@defmac AC_OUTPUT (@r{[}@var{file}@r{]}@dots{}, @r{[}@var{extra-cmds}@r{]}, @r{[}@var{init-cmds}@r{]})
@maindex OUTPUT
@c The use of @code{AC_OUTPUT} with argument is deprecated, this obsoleted
@c interface is equivalent to:
@c 
引数を用いた@code{AC_OUTPUT}の使用は反対され，これは以下と同じものの時代
遅れのインターフェースです．

@example
@group
AC_CONFIG_FILES(@var{file}@dots{})
AC_CONFIG_COMMANDS([default],
                   @var{extra-cmds}, @var{init-cmds})
AC_OUTPUT
@end group
@end example
@end defmac

@defmac AC_OUTPUT_COMMANDS (@var{extra-cmds}, @r{[}@var{init-cmds}@r{]})
@maindex OUTPUT_COMMANDS
@c Specify additional shell commands to run at the end of
@c @file{config.status}, and shell commands to initialize any variables
@c from @code{configure}.  This macro may be called multiple times.  It is
@c obsolete, replaced by @code{AC_CONFIG_COMMANDS}.
@c 
@file{config.status}の終りに実行する追加のシェルコマンドと，
@code{configure}で変数を初期化するためのシェルコマンドをを指定します．こ
のマクロは複数回呼び出し可能です．それは時代遅れで，
@code{AC_CONFIG_COMMANDS}で置換されました．

@c Here is an unrealistic example:
@c 
以下は現実的ではない例です．

@example
fubar=27
AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
                   fubar=$fubar)
AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
                   [echo init bit])
@end example

@c Aside from the fact that @code{AC_CONFIG_COMMANDS} requires an
@c additional key, an important difference is that
@c @code{AC_OUTPUT_COMMANDS} is quoting its arguments twice, while
@c @code{AC_CONFIG_COMMANDS}.  This means that @code{AC_CONFIG_COMMANDS}
@c can safely be given macro calls as arguments:
@c 
@code{AC_CONFIG_COMMANDS}が追加のキーを要求する事実以外，重要な差は
@code{AC_OUTPUT_COMMANDS}が引数を2回引用符で囲んでいますが
@code{AC_CONFIG_COMMANDS}はそうではないということです．これは，
@code{AC_CONFIG_COMMANDS}が引数として呼び出されるマクロとして安全に与え
ることが可能だということを意味します．

@example
AC_CONFIG_COMMANDS(foo, [my_FOO()])
@end example

@noindent
@c conversely, where one level of quoting was enough for literal strings
@c with @code{AC_OUTPUT_COMMANDS}, you need two with
@c @code{AC_CONFIG_COMMANDS}.  The following lines are equivalent:
@c 
反対に，1レベルの引用符が@code{AC_OUTPUT_COMMANDS}でのリテラル文字列に対
して十分なところでは，@code{AC_CONFIG_COMMANDS}が2回必要になります．以下
の行は等価です．

@example
@group
AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
AC_CONFIG_COMMANDS(default, [[echo "Square brackets: []"]])
@end group
@end example
@end defmac

@defmac AC_PID_T
@maindex PID_T
@code{AC_TYPE_PID_T}
@end defmac

@defmac AC_PREFIX
@maindex PREFIX
@code{AC_PREFIX_PROGRAM}
@end defmac

@defmac AC_PROGRAMS_CHECK
@maindex PROGRAMS_CHECK
@code{AC_CHECK_PROGS}
@end defmac

@defmac AC_PROGRAMS_PATH
@maindex PROGRAMS_PATH
@code{AC_PATH_PROGS}
@end defmac

@defmac AC_PROGRAM_CHECK
@maindex PROGRAM_CHECK
@code{AC_CHECK_PROG}
@end defmac

@defmac AC_PROGRAM_EGREP
@maindex PROGRAM_EGREP
@code{AC_EGREP_CPP}
@end defmac

@defmac AC_PROGRAM_PATH
@maindex PROGRAM_PATH
@code{AC_PATH_PROG}
@end defmac

@defmac AC_REMOTE_TAPE
@maindex REMOTE_TAPE
@c removed because of limited usefulness
@c 
有用性の制限のため削除されました．
@end defmac

@defmac AC_RESTARTABLE_SYSCALLS
@maindex RESTARTABLE_SYSCALLS
@code{AC_SYS_RESTARTABLE_SYSCALLS}
@end defmac

@defmac AC_RETSIGTYPE
@maindex RETSIGTYPE
@code{AC_TYPE_SIGNAL}
@end defmac

@defmac AC_RSH
@maindex RSH
@c Removed because of limited usefulness.
@c 
有用性の制限のため削除されました．
@end defmac

@defmac AC_SCO_INTL
@maindex SCO_INTL
@ovindex LIBS
@c If on SCO UNIX, add @option{-lintl} to output variable @code{LIBS}.  This
@c macro used to
@c 
SCO UNIXの場合，出力変数@code{LIBS}に@option{-lintl}を加えます．このマク
ロは以下を使用していました．

@example
AC_CHECK_LIB(intl, strftime, LIBS="-lintl $LIBS")
@end example

@noindent
@c now it just calls @code{AC_FUNC_STRFTIME} instead.
@c 
現在は，代わりに@code{AC_FUNC_STRFTIME}を呼び出します．
@end defmac

@defmac AC_SETVBUF_REVERSED
@maindex SETVBUF_REVERSED
@code{AC_FUNC_SETVBUF_REVERSED}
@end defmac

@defmac AC_SET_MAKE
@maindex SET_MAKE
@code{AC_PROG_MAKE_SET}
@end defmac

@defmac AC_SIZEOF_TYPE
@maindex SIZEOF_TYPE
@code{AC_CHECK_SIZEOF}
@end defmac

@defmac AC_SIZE_T
@maindex SIZE_T
@code{AC_TYPE_SIZE_T}
@end defmac

@defmac AC_STAT_MACROS_BROKEN
@maindex STAT_MACROS_BROKEN
@code{AC_HEADER_STAT}
@end defmac

@defmac AC_STDC_HEADERS
@maindex STDC_HEADERS
@code{AC_HEADER_STDC}
@end defmac

@defmac AC_STRCOLL
@maindex STRCOLL
@code{AC_FUNC_STRCOLL}
@end defmac

@defmac AC_ST_BLKSIZE
@maindex ST_BLKSIZE
@code{AC_STRUCT_ST_BLKSIZE}
@end defmac

@defmac AC_ST_BLOCKS
@maindex ST_BLOCKS
@code{AC_STRUCT_ST_BLOCKS}
@end defmac

@defmac AC_ST_RDEV
@maindex ST_RDEV
@code{AC_STRUCT_ST_RDEV}
@end defmac

@defmac AC_SYS_RESTARTABLE_SYSCALLS
@maindex SYS_RESTARTABLE_SYSCALLS
@cvindex HAVE_RESTARTABLE_SYSCALLS
@c If the system automatically restarts a system call that is interrupted
@c by a signal, define @code{HAVE_RESTARTABLE_SYSCALLS}. This macro does
@c not check if system calls are restarted in general--it tests whether a
@c signal handler installed with @code{signal} (but not @code{sigaction})
@c causes system calls to be restarted. It does not test if system calls
@c can be restarted when interrupted by signals that have no handler.
@c 
システムが自動的にシグナルで中断されたシステムコールを再スタートする場合，
@code{HAVE_RESTARTABLE_SYSCALLS}を定義します．このマクロは，システムが一
般的に再スタートするかどうかを調査しません -- それは，(@code{sigaction} 
ではなく)@code{signal}でインストールされているシグナルハンドラが再スター
トするためのシステムコールを呼び出すかどうかをテストします．ハンドラの無
いシグナルで中断されたときにシステムコールが再スタートされる場合，テスト
しません．

@c These days portable programs should use @code{sigaction} with
@c @code{SA_RESTART} if they want restartable system calls.  They should
@c not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
@c system call is restartable is a dynamic issue, not a configuration-time
@c issue.
@c 
今日の移植性の高いプログラムでは，システムコールを再スタートしたい場合，
@code{SA_RESTART}を用いて@code{sigaction}を使用すべきです．現在では，シ
ステムコールが再スタート可能かどうかは，コンフィグレーション時の問題では
なく動的な問題なので，@code{HAVE_RESTARTABLE_SYSCALLS}に依存すべきではあ
りません．
@end defmac

@defmac AC_SYS_SIGLIST_DECLARED
@maindex SYS_SIGLIST_DECLARED
@code{AC_DECL_SYS_SIGLIST}
@end defmac

@defmac AC_TEST_CPP
@maindex TEST_CPP
@code{AC_TRY_CPP}
@end defmac

@defmac AC_TEST_PROGRAM
@maindex TEST_PROGRAM
@code{AC_TRY_RUN}
@end defmac

@defmac AC_TIMEZONE
@maindex TIMEZONE
@code{AC_STRUCT_TIMEZONE}
@end defmac

@defmac AC_TIME_WITH_SYS_TIME
@maindex TIME_WITH_SYS_TIME
@code{AC_HEADER_TIME}
@end defmac

@defmac AC_UID_T
@maindex UID_T
@code{AC_TYPE_UID_T}
@end defmac

@defmac AC_UNISTD_H
@maindex UNISTD_H
@c Same as @samp{AC_CHECK_HEADERS(unistd.h)}.
@c 
@samp{AC_CHECK_HEADERS(unistd.h)}と同じです．
@end defmac

@defmac AC_USG
@maindex USG
@cvindex USG
@c Define @code{USG} if the @sc{bsd} string functions are defined in
@c @file{strings.h}.  You should no longer depend upon @code{USG}, but on
@c @code{HAVE_STRING_H}, see @xref{Standard Symbols}.
@c 
@sc{bsd}文字列関数が@file{strings.h}で定義されている場合，@code{USG}を定
義します．これからは@code{USG}ではなく@code{HAVE_STRING_H}に依存するよう
にすべきです．@xref{Standard Symbols}.
@end defmac

@defmac AC_UTIME_NULL
@maindex UTIME_NULL
@code{AC_FUNC_UTIME_NULL}
@end defmac

@defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@r{[}@var{cmd}@r{]})
@maindex VALIDATE_CACHED_SYSTEM_TUPLE
@c If the cache file is inconsistent with the current host, target and
@c build system types, it used to execute @var{cmd} or print a default
@c error message.
@c 
キャッシュファイルが現在のホスト，ターゲット，そしてビルドシステムのタイ
プで矛盾がある場合，@var{cmd}を実行したりデフォルトのエラーメッセージを
出力したりするために使用されていました．

@c This is now handled by default.
@c 
これは現在デフォルトで処理されます．
@end defmac

@defmac AC_VERBOSE (@var{result-description})
@maindex VERBOSE
@code{AC_MSG_RESULT}.
@end defmac

@defmac AC_VFORK
@maindex VFORK
@code{AC_FUNC_VFORK}
@end defmac

@defmac AC_VPRINTF
@maindex VPRINTF
@code{AC_FUNC_VPRINTF}
@end defmac

@defmac AC_WAIT3
@maindex WAIT3
@code{AC_FUNC_WAIT3}
@end defmac

@defmac AC_WARN
@maindex WARN
@code{AC_MSG_WARN}
@end defmac

@defmac AC_WORDS_BIGENDIAN
@maindex WORDS_BIGENDIAN
@code{AC_C_BIGENDIAN}
@end defmac

@defmac AC_XENIX_DIR
@maindex XENIX_DIR
@ovindex LIBS
@c This macro used to add @option{-lx} to output variable @code{LIBS} if on
@c Xenix.  Also, if @file{dirent.h} is being checked for, added
@c @option{-ldir} to @code{LIBS}.  Now it is merely an alias of
@c @code{AC_HEADER_DIRENT} instead, plus some code to detect whether
@c running @sc{xenix} on which you should not depend:
@c 
このマクロは，Xenixの場合に出力変数@code{LIBS}に@option{-lx}を追加するた
めに使用されていました．また，@file{dirent.h}が調査され，@code{LIBS}を
@option{-ldir}に追加していました．現在では，@code{AC_HEADER_DIRENT}の代
わりの別名となっていることも滅多に無く，依存すべきではありませんが，
@sc{xenix}で実行されているかどうかを検出するコートが追加されています．

@example
AC_MSG_CHECKING([for Xenix])
AC_EGREP_CPP(yes,
[#if defined M_XENIX && !defined M_UNIX
  yes
#endif],
             [AC_MSG_RESULT([yes]); XENIX=yes],
             [AC_MSG_RESULT([no]); XENIX=])
@end example
@end defmac

@defmac AC_YYTEXT_POINTER
@maindex YYTEXT_POINTER
@code{AC_DECL_YYTEXT}
@end defmac


@node Autoconf 1, Autoconf 2.13, Obsolete Macros, Obsolete Constructs
@section バージョン1からの更新

@c Autoconf version 2 is mostly backward compatible with version 1.
@c However, it introduces better ways to do some things, and doesn't
@c support some of the ugly things in version 1.  So, depending on how
@c sophisticated your @file{configure.ac} files are, you might have to do
@c some manual work in order to upgrade to version 2.  This chapter points
@c out some problems to watch for when upgrading.  Also, perhaps your
@c @code{configure} scripts could benefit from some of the new features in
@c version 2; the changes are summarized in the file @file{NEWS} in the
@c Autoconf distribution.
@c 
Autoconfバージョン2は，バージョン1とほとんど下位互換性があります．しかし，
何かをするときより良くする方法も導入し，バージョン1の醜いものにはサポー
トしなくなったものもあります．そのため，@file{configure.ac}の洗練具合に
依存して，バージョン2に更新するための手作業が必要になります．この章は，
更新時に見るべき問題点も示します．また，@code{configure}スクリプトは，バー
ジョン2の新しい機能で利益を得るでしょう．変更点は，Autoconf配布物のファ
イル@file{NEWS}に概要が書かれています．

@menu
* Changed File Names::          Files you might rename
* Changed Makefiles::           New things to put in @file{Makefile.in}
* Changed Macros::              Macro calls you might replace
* Changed Results::             Changes in how to check test results
* Changed Macro Writing::       Better ways to write your own macros
@end menu

@node Changed File Names, Changed Makefiles, Autoconf 1, Autoconf 1
@subsection ファイル名の変更

@c If you have an @file{aclocal.m4} installed with Autoconf (as opposed to
@c in a particular package's source directory), you must rename it to
@c @file{acsite.m4}.  @xref{autoconf Invocation}.
@c 
Autoconfでインストールされた@file{aclocal.m4}がある場合，(特定のパッケー
ジのソースディレクトリと対立するので)，それを@file{acsite.m4}に名前を変
更する必要があります．@xref{autoconf Invocation}.

@c If you distribute @file{install.sh} with your package, rename it to
@c @file{install-sh} so @code{make} builtin rules won't inadvertently
@c create a file called @file{install} from it.  @code{AC_PROG_INSTALL}
@c looks for the script under both names, but it is best to use the new name.
@c 
パッケージで@file{install.sh}を配布する場合，@code{make}組み込み規則が，
@file{install}と呼ばれる意図しないファイルを作成するので，
@file{install-sh}に名前を変更してください．@code{AC_PROG_INSTALL}は両方
の名前でスクリプトを探しますが，新しい名前を使用するのが最善です．

@c If you were using @file{config.h.top}, @file{config.h.bot}, or
@c @file{acconfig.h}, you still can, but you will have less clutter if you
@c use the @code{AH_} macros.  @xref{Autoheader Macros}.
@c 
@file{config.h.top}，@file{config.h.bot}，または@file{acconfig.h}を使用
している場合，そのまま使用することは可能ですが，@code{AH_}マクロを使用す
るとバラバラになりません．@xref{Autoheader Macros}.


@node Changed Makefiles, Changed Macros, Changed File Names, Autoconf 1
@subsection Makefileの変更

@c Add @samp{@@CFLAGS@@}, @samp{@@CPPFLAGS@@}, and @samp{@@LDFLAGS@@} in
@c your @file{Makefile.in} files, so they can take advantage of the values
@c of those variables in the environment when @code{configure} is run.
@c Doing this isn't necessary, but it's a convenience for users.
@c 
@file{Makefile.in}ファイルに@samp{@@CFLAGS@@}，@samp{@@CPPFLAGS@@}，そし
て@samp{@@LDFLAGS@@}を，@code{configure}実行時に，環境変数としてこれらの
変数の値を利用できるので，それらを加えてください．必要ではありませんが，
ユーザにとって便利です．

@c Also add @samp{@@configure_input@@} in a comment to each input file for
@c @code{AC_OUTPUT}, so that the output files will contain a comment saying
@c they were produced by @code{configure}.  Automatically selecting the
@c right comment syntax for all the kinds of files that people call
@c @code{AC_OUTPUT} on became too much work.
@c 
出力ファイルに，@code{configure}で生成されたというコメントを含めるために，
@code{AC_OUTPUT}に対する@file{Makefile}以外の入力ファイルのそれそれのコ
メントに，@samp{@@configure_input@@}を加えてください．@code{AC_OUTPUT}で
呼び出す全ての種類のファイルに対し，自動的に正しいコメント文を選択するに
は，作業が非常に多くなります．

@c Add @file{config.log} and @file{config.cache} to the list of files you
@c remove in @code{distclean} targets.
@c 
@code{distclean}ターゲットで削除するファイルリストに， 
@file{config.log}と@file{config.cache}を加えてください．

@c If you have the following in @file{Makefile.in}:
@c 
以下のような@file{Makefile.in}がある場合を考えます．

@example
prefix = /usr/local
exec_prefix = $(prefix)
@end example

@noindent
@c you must change it to:
@c 
以下のように変更する必要があります．

@example
prefix = @@prefix@@
exec_prefix = @@exec_prefix@@
@end example

@noindent
@c The old behavior of replacing those variables without @samp{@@}
@c characters around them has been removed.
@c 
周りに@samp{@@}が無い変数の置換をする古い動作は削除されました．


@node Changed Macros, Changed Results, Changed Makefiles, Autoconf 1
@subsection 変更されたマクロ

@c Many of the macros were renamed in Autoconf version 2.  You can still
@c use the old names, but the new ones are clearer, and it's easier to find
@c the documentation for them.  @xref{Obsolete Macros}, for a table showing the
@c new names for the old macros.  Use the @code{autoupdate} program to
@c convert your @file{configure.ac} to using the new macro names.
@c @xref{autoupdate Invocation}.
@c 
Autoconfバージョン2でマクロの多くは名前が変更されました．まだ古い名前を
使用することも可能ですますが，新しいものはより明確で，それらのドキュメン
トは簡単に見つかります．古いマクロに対する新しい名前の表は，
@xref{Obsolete Macros}.  新しいマクロを使用するように@file{configure.ac} 
を変換するため，@code{autoupdate}プログラムを使用してください．
@xref{autoupdate Invocation}.

@c Some macros have been superseded by similar ones that do the job better,
@c but are not call-compatible.  If you get warnings about calling obsolete
@c macros while running @code{autoconf}, you may safely ignore them, but
@c your @code{configure} script will generally work better if you follow
@c the advice it prints about what to replace the obsolete macros with.  In
@c particular, the mechanism for reporting the results of tests has
@c changed.  If you were using @code{echo} or @code{AC_VERBOSE} (perhaps
@c via @code{AC_COMPILE_CHECK}), your @code{configure} script's output will
@c look better if you switch to @code{AC_MSG_CHECKING} and
@c @code{AC_MSG_RESULT}.  @xref{Printing Messages}.  Those macros work best
@c in conjunction with cache variables.  @xref{Caching Results}.
@c 
マクロのいくつかは，より良い仕事をする似たものに置き換えられていますが，
呼び出しに互換性がありません．@code{autoconf}実行中に，時代遅れのマクロ
の呼び出しに関する警告がある場合，無視しても大丈夫ですが，時代遅れのマク
ロの置換に関して出力されるアドバイスに従う場合，@code{configure}スクリプ
トはより良い仕事をします．特に，テストの結果を報告するメカニズムが変化し
ました．(おそらく@code{AC_COMPILE_CHECK}によって)@code{echo}や
@code{AC_VERBOSE}を使用していた場合，@code{configure}スクリプトの出力は，
@code{AC_MSG_CHECKING}と@code{AC_MSG_RESULT}に変えた方が良く見えるでしょ
う．@xref{Printing Messages}. これらのマクロは，キャッシュ変数に関連して
最高の仕事をします．@xref{Caching Results}.


@node Changed Results, Changed Macro Writing, Changed Macros, Autoconf 1
@subsection 変更された結果

@c If you were checking the results of previous tests by examining the
@c shell variable @code{DEFS}, you need to switch to checking the values of
@c the cache variables for those tests.  @code{DEFS} no longer exists while
@c @code{configure} is running; it is only created when generating output
@c files.  This difference from version 1 is because properly quoting the
@c contents of that variable turned out to be too cumbersome and
@c inefficient to do every time @code{AC_DEFINE} is called.  @xref{Cache
@c Variable Names}.
@c 
シェル変数の@code{DEFS}を調査することで，前のテストの結果を調査していた
場合，それらのテストに対するキャッシュ変数の値を調査することに切り替える
必要があります．@code{DEFS}は@code{configure}実行中にも存在しません．そ
れは出力ファイルを生成するときのみ作成されます．バージョン1からのこの違
いは，正確にその変数を引用符で囲むことが，あまりに厄介で， 
@code{AC_DEFINE}を毎回呼び出すことは，非効率だと分かったためです． 
@xref{Cache Variable Names}.

@c For example, here is a @file{configure.ac} fragment written for Autoconf
@c version 1:
@c 
例えば，Autoconfバージョン1のために書かれた，@file{configure.ac}の一部は
以下のようになります．

@example
AC_HAVE_FUNCS(syslog)
case "$DEFS" in
*-DHAVE_SYSLOG*) ;;
*) # syslog is not in the default libraries.  See if it's in some other.
  saved_LIBS="$LIBS"
  for lib in bsd socket inet; do
    AC_CHECKING(for syslog in -l$lib)
    LIBS="$saved_LIBS -l$lib"
    AC_HAVE_FUNCS(syslog)
    case "$DEFS" in
    *-DHAVE_SYSLOG*) break ;;
    *) ;;
    esac
    LIBS="$saved_LIBS"
  done ;;
esac
@end example

@c Here is a way to write it for version 2:
@c 
バージョン2のための書き方は以下のようになります．

@example
AC_CHECK_FUNCS(syslog)
if test $ac_cv_func_syslog = no; then
  # syslog is not in the default libraries.  See if it's in some other.
  for lib in bsd socket inet; do
    AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG)
      LIBS="$LIBS -l$lib"; break])
  done
fi
@end example

@c If you were working around bugs in @code{AC_DEFINE_UNQUOTED} by adding
@c backslashes before quotes, you need to remove them.  It now works
@c predictably, and does not treat quotes (except back quotes) specially.
@c @xref{Setting Output Variables}.
@c 
引用符の前にバックスラッシュを加えることで，@code{AC_DEFINE_UNQUOTED}で
バグが生じる場合，それを削除する必要があります．今は予想通りに動作し，
(バックスラッシュ以外の)引用符を特別扱いしません．@xref{Setting Output
Variables}.

@c All of the boolean shell variables set by Autoconf macros now use
@c @samp{yes} for the true value.  Most of them use @samp{no} for false,
@c though for backward compatibility some use the empty string instead.  If
@c you were relying on a shell variable being set to something like 1 or
@c @samp{t} for true, you need to change your tests.
@c 
現在，Autoconfマクロが設定した真偽値のシェル変数のすべては，真の値に対し
て@samp{yes}が使用され．偽に対してはほとんど@samp{no}を使用しますが，下
位互換性のため，代わりに空の文字列を使用するものもあります．真に対して1 
や@samp{t}にシェル変数が設定されることを期待する場合，テストを変更する必
要があります．


@node Changed Macro Writing,  , Changed Results, Autoconf 1
@subsection マクロの書き方の変更

@c When defining your own macros, you should now use @code{AC_DEFUN}
@c instead of @code{define}.  @code{AC_DEFUN} automatically calls
@c @code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
@c do not interrupt other macros, to prevent nested @samp{checking@dots{}}
@c messages on the screen.  There's no actual harm in continuing to use the
@c older way, but it's less convenient and attractive.  @xref{Macro
@c Definitions}.
@c 
独自のマクロを定義する時，現在は@code{define}の代わりに@code{AC_DEFUN}を
使用すべきです．@code{AC_DEFUN}は@code{AC_PROVIDE}を自動的に呼び出し， 
@code{AC_REQUIRE}のために呼び出されるマクロが，画面上で入れ子状になって
いる@samp{checking@dots{}}メッセージを妨げないように，他のマクロを中断し
ていないことを確かめます．古い方法を使用し続けても実際に害はありませんが，
便利さと美しさが現象します．@xref{Macro Definitions}.

@c You probably looked at the macros that came with Autoconf as a guide for
@c how to do things.  It would be a good idea to take a look at the new
@c versions of them, as the style is somewhat improved and they take
@c advantage of some new features.
@c 
恐らく，Autoconfと共にやってくるマクロを，何かをする方法のガイドとして見
るでしょう．新しいバージョンのものを見ることは，スタイルが改善されている
ものもあり，新しい機能も利用しているので，よい考えでしょう．

@c If you were doing tricky things with undocumented Autoconf internals
@c (macros, variables, diversions), check whether you need to change
@c anything to account for changes that have been made.  Perhaps you can
@c even use an officially supported technique in version 2 instead of
@c kludging.  Or perhaps not.
@c 
文書化されていないAutoconfの内部(マクロ，変数，変換)を使用して，トリッキー
なことををしていた場合，なされた変更を考慮するため，変更する必要があるか
どうか調査してください．恐らくkludeする代わりに，バージョン2で公式にサポー
トされたテクニックを使用することができます．そうしなければダメでしょう．

@c To speed up your locally written feature tests, add caching to them.
@c See whether any of your tests are of general enough usefulness to
@c encapsulate into macros that you can share.
@c 
ローカルで書かれた特徴のテストを高速化するため，キャッシュを加えてくださ
い．共有できるマクロをカプセル化するため，テストが一般的に十分役に立つこ
とを確かめてください．


@node Autoconf 2.13,  , Autoconf 1, Obsolete Constructs
@section バージョン2.13からの更新

@c The introduction of the previous section (@pxref{Autoconf 1}) perfectly
@c suits this section...
@c 
前のセクションの導入は，このセクションにも全く適しているなあ@enddots{}

@quotation
@c Autoconf version 2.50 is mostly backward compatible with version 2.13.
@c However, it introduces better ways to do some things, and doesn't
@c support some of the ugly things in version 2.13.  So, depending on how
@c sophisticated your @file{configure.ac} files are, you might have to do
@c some manual work in order to upgrade to version 2.50.  This chapter
@c points out some problems to watch for when upgrading.  Also, perhaps
@c your @code{configure} scripts could benefit from some of the new
@c features in version 2.50; the changes are summarized in the file
@c @file{NEWS} in the Autoconf distribution.
@c 
Autoconfバージョン2.50は，バージョン2.13とほとんど下位互換性があります．
しかし，何かをするときより良くする方法も導入し，バージョン2.13の醜いもの
にはサポートしなくなったものもあります．そのため，@file{configure.ac}の
洗練具合に依存して，バージョン2.50に更新するための手作業が必要になります．
この章は，更新時に見るべき問題点も示します．また，@code{configure}スクリ
プトは，バージョン2.50の新しい機能で利益を得るでしょう．変更点は，
Autoconf 配布物のファイル@file{NEWS}に概要が書かれています．
@end quotation

@menu
* Changed Quotation::           Broken code which used to work
* New Macros::                  Interaction with foreign macros
@end menu

@node Changed Quotation, New Macros, Autoconf 2.13, Autoconf 2.13
@subsection 引用符で囲むことの変更

@c The most important changes are invisible to you: the implementation of
@c most macros have completely changed.  This allowed more factorization of
@c the code, better error messages, a higher uniformity of the user's
@c interface etc.  Unfortunately, as a side effect, some construct which
@c used to (miraculously) work might break starting with Autoconf 2.50.
@c The most common culprit is bad quotation.
@c 
紹介すべき最も重要な変更です．ほとんどのマクロの実装は完全に変更されまし
た．コードの分解が，エラーメッセージの改善，ユーザインターフェースの一貫
性などが，このことで可能になりました．残念ながら副作用として，これまで
(奇跡的に)動作していた構成物には，Autoconf 2.50でおかしくなり始めるもの
もあります．

@c For instance, in the following example, the message is not properly
@c quoted:
@c 
例えば，以下の例では，メッセージが適切に引用符で囲まれていません．

@example
AC_INIT
AC_CHECK_HEADERS(foo.h,,
AC_MSG_ERROR(cannot find foo.h, bailing out))
AC_OUTPUT
@end example

@noindent
@c Autoconf 2.13 simply ignores it:
@c 
Autoconf 2.13は，単純にそれを無視していました．

@example
$ autoconf-2.13; ./configure --silent
creating cache ./config.cache
configure: error: cannot find foo.h
$
@end example

@noindent
@c while Autoconf 2.50 will produce a broken @file{configure}:
@c 
しかしAutoconf 2.50では，壊れた@file{configure}を生成します．

@example
$ autoconf-2.50; ./configure --silent
configure: error: cannot find foo.h
./configure: exit: bad non-numeric arg `bailing'
./configure: exit: bad non-numeric arg `bailing'
$
@end example

@c The message needs to be quoted, and the @code{AC_MSG_ERROR} invocation
@c too!
@c 
メッセージは引用符で囲む必要があり，@code{AC_MSG_ERROR}の呼び出しもです！

@example
AC_INIT
AC_CHECK_HEADERS(foo.h,,
                 [AC_MSG_ERROR([cannot find foo.h, bailing out])])
AC_OUTPUT
@end example

@c Many many (and many more) Autoconf macros were lacking proper quotation,
@c including no less than... @code{AC_DEFUN} itself!
@c 
多くの多くの(いくらでも続けたい)Autoconfマクロは，少なくとも
@code{AC_DEFUN}自身も含めて，適切な引用がありませんでした！

@example
$ cat configure.in
AC_DEFUN([AC_PROG_INSTALL],
[# My own much better version
])
AC_INIT
AC_PROG_INSTALL
AC_OUTPUT
$ autoconf-2.13
autoconf: Undefined macros:
***BUG in Autoconf--please report*** AC_FD_MSG
***BUG in Autoconf--please report*** AC_EPI
configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
configure.in:5:AC_PROG_INSTALL
$ autoconf-2.50
$
@end example


@node New Macros,  , Changed Quotation, Autoconf 2.13
@subsection 新しいマクロ

@cindex @code{undefined macro: _m4_divert_diversion}

@c Because Autoconf has been dormant for years, Automake provided
@c Autoconf-like macros for a while.  Autoconf 2.50 now provides better
@c versions of these macros, integrated in the @code{AC_} namespace,
@c instead of @code{AM_}.  But in order to ease the upgrading via
@c @command{autoupdate}, bindings to such @code{AM_} macros are provided.
@c 
Autoconfは何年も休止中だったので，その間AutomakeがAutoconfライクのマクロ
を提供していました．現在は，Autoconf 2.50がこれらのマクロのより良いバー
ジョンを提供していて，@code{AM_}ではなく@code{AC_}の名前空間で統合されて
います．しかし，@command{autoupdate}で容易に更新できるように，そのような
@code{AM_}マクロも結合されて提供されています．

@c Unfortunately Automake did not quote the name of these macros!
@c Therefore, when @command{m4} find in @file{aclocal.m4} something like
@c @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, ...)}, @code{AM_TYPE_PTRDIFF_T} is
@c expanded, replaced with its Autoconf definition.
@c 
残念ながら，Automakeはこれらのマクロ名を引用符で囲んでいませんでした．そ
のため，@command{m4}が@file{aclocal.m4}で
@samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, ...)}のようなマクロを見つけた時，
@code{AM_TYPE_PTRDIFF_T}は展開され，そのAutoconfの定義で置換されていまし
た．

@c Fortunately Autoconf catches pre-@code{AC_INIT} expansions, and will
@c complain, in its own words:
@c 
幸い，Autoconfは前置される@code{AC_INIT}の展開を受けて，それが所有する単
語で文句をいいます．

@example
$ cat configure.in
AC_INIT
AM_TYPE_PTRDIFF_T
$ aclocal-1.4
$ autoconf
./aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
actypes.m4:289: AM_TYPE_PTRDIFF_T is expanded from...
./aclocal.m4:17: the top level
$
@end example

@c Future versions of Automake will simply no longer define most of these
@c macros, and will properly quote the names of the remaining macros.
@c But you don't have to wait for it to happen to do the right thing right
@c now: do not depend upon macros from Automake as it is simply not its job
@c to provide macros (but the one it requires by itself):
@c 
将来のAutomakeのバージョンは，単純にこれらのマクロをこれ以上定義せず，お
そらく残りのマクロ名を引用符で囲むでしょう．しかし，全てがうまくいくまで
じっと待っている必要はありません．(単独で要求されるものもありますが)マク
ロを提供するための仕事は単純ではないので，Automakeのマクロに依存しないで
ください．

@example
$ cat configure.in
AC_INIT
AM_TYPE_PTRDIFF_T
$ rm aclocal.m4
$ autoupdate
autoupdate: `configure.in' is updated
$ cat configure.in
AC_INIT
AC_CHECK_TYPES([ptrdiff_t])
$ aclocal-1.4
$ autoconf
$
@end example

@c ================================================ Questions About Autoconf.

@node Questions, History, Obsolete Constructs, Top
@chapter Autodonfに関する質問

@c Several questions about Autoconf come up occasionally.  Here some of them
@c are addressed.
@c 
Autoconfに関するいくつかの質問が，時々発生します．ここではそれらを扱いま
す．

@menu
* Distributing::                Distributing @code{configure} scripts
* Why GNU m4::                  Why not use the standard M4?
* Bootstrapping::               Autoconf and GNU M4 require each other?
* Why Not Imake::               Why GNU uses @code{configure} instead of Imake
@end menu

@node Distributing, Why GNU m4, Questions, Questions
@section @code{configure}スクリプトの配布

@display
@c What are the restrictions on distributing @code{configure}
@c scripts that Autoconf generates?  How does that affect my
@c programs that use them?
@c 
Autoconfが生成した@code{configure}スクリプトの配布の際，制限はありますか？
それは，それを利用する私のプログラムに影響しますか？
@end display

@c There are no restrictions on how the configuration scripts that Autoconf
@c produces may be distributed or used.  In Autoconf version 1, they were
@c covered by the @sc{gnu} General Public License.  We still encourage
@c software authors to distribute their work under terms like those of the
@c GPL, but doing so is not required to use Autoconf.
@c 
Autoconfが生成するコンフィギュレーションスクリプトを，配布したり使用した
りすることに制限はありません．Autoconfバージョン1では，@sc{gnu} General
Public Licenseでカバーされていました．我々はソフトウェア著者に，GPLのよ
うな規則で成果を配布することを奨励しまが，Autoconfを使用するため，そうす
ることは要求していません．

@c Of the other files that might be used with @code{configure},
@c @file{config.h.in} is under whatever copyright you use for your
@c @file{configure.ac}.  @file{config.sub} and @file{config.guess} have an
@c exception to the GPL when they are used with an Autoconf-generated
@c @code{configure} script, which permits you to distribute them under the
@c same terms as the rest of your package.  @file{install-sh} is from the X
@c Consortium and is not copyrighted.
@c 
@code{configure}と一緒に使用するファイルの@file{config.h.in}は， 
@file{configure.ac}に対して使用した著作権に従います．@file{config.sub}と
@file{config.guess}は，Autoconfが生成する@code{configure}スクリプトと一
緒に使用するとき，GPLの例外とされ，他のパッケージと同じ規則で配布できま
す．@file{install-sh}はXコンソーシアムからで，著作権はありません．

@node Why GNU m4, Bootstrapping, Distributing, Questions
@section なぜGNU M4が必要なのですか

@display
@c Why does Autoconf require @sc{gnu} M4?
@c 
なぜAutoconfは@sc{gnu} M4を必要とするのですか？
@end display

@c Many M4 implementations have hard-coded limitations on the size and
@c number of macros that Autoconf exceeds.  They also lack several
@c builtin macros that it would be difficult to get along without in a
@c sophisticated application like Autoconf, including:
@c 
M4の実装の多くは，マクロのサイズと数にハードコードされた制限があり，マク
ロ数はAutoconfの方が多いです．それらは，Autoconfのような洗練されたアプリ
ケーション無しでは難しい，以下を含むいくつかの組み込みマクロが足りません．

@example
builtin
indir
patsubst
__file__
__line__
@end example

@c Autoconf requires version 1.4 or above of @sc{gnu} M4 because it uses
@c frozen state files.
@c 
凍結した状態のファイルを使用するので，Autoconfでは@sc{gnu} M4のバージョ
ン1.4以上を要求します．

@c Since only software maintainers need to use Autoconf, and since @sc{gnu}
@c M4 is simple to configure and install, it seems reasonable to require
@c @sc{gnu} M4 to be installed also.  Many maintainers of @sc{gnu} and
@c other free software already have most of the @sc{gnu} utilities
@c installed, since they prefer them.
@c 
ソフトウェア管理者はAutoconfを使用する必要があり，@sc{gnu} M4はコンフィ
グレーションとインストールが簡単なので，@sc{gnu} M4のインストールの要求
も妥当だと思われます．@sc{gnu}と他のフリーソフトウェアの管理者の多くは，
ほとんどの@sc{gnu}ユーティリティが好きなので，既にンストールしています．


@node Bootstrapping, Why Not Imake, Why GNU m4, Questions
@section ブートストラップはどうするのですか？

@display
@c If Autoconf requires @sc{gnu} M4 and @sc{gnu} M4 has an Autoconf
@c @code{configure} script, how do I bootstrap?  It seems like a chicken
@c and egg problem!
@c 
Autoconfが@sc{gnu} M4を要求し，@sc{gnu} M4にAutoconfの@code{configure} 
スクリプトがある場合，どうやってブートストラップすればよいのでしょうか？
鶏と卵の問題みたいですね！
@end display

@c This is a misunderstanding.  Although @sc{gnu} M4 does come with a
@c @code{configure} script produced by Autoconf, Autoconf is not required
@c in order to run the script and install @sc{gnu} M4.  Autoconf is only
@c required if you want to change the M4 @code{configure} script, which few
@c people have to do (mainly its maintainer).
@c 
これは誤解です．@sc{gnu} M4は，Autoconfが生成した@code{configure}スクリ
プトと共にありますが，Autoconfは，スクリプトを実行するために@sc{gnu} M4 
のインストールを要求しません．AutoconfはM4の@code{configure}スクリプトを
変更したいときだけ必要で，(主に管理者以外)ほとんどの人が必要ありません．


@node Why Not Imake,  , Bootstrapping, Questions
@section なぜImakeではないのですか？

@display
@c Why not use Imake instead of @code{configure} scripts?
@c 
なぜ@code{configure}スクリプトの代わりにImakeを使用しないのですか?．
@end display

@c Several people have written addressing this question, so I include
@c adaptations of their explanations here.
@c 
何人かがこの質問を扱って書いてきたので，私はここでそれらの説明に脚色しま
す．

@c The following answer is based on one written by Richard Pixley:
@c 
次の答えは，Richard Pixleyが書いたものに基づきます．

@quotation
@c Autoconf generated scripts frequently work on machines that it has
@c never been set up to handle before.  That is, it does a good job of
@c inferring a configuration for a new system.  Imake cannot do this.
@c 
Autoconfが生成したスクリプトは，処理するために一度もセットアップされたこ
とがないマシンでも動作することがよくあります．すなわち，新しいシステムに
対するコンフィグレーションの推測によってきちんと動作します．Imakeではこ
れは不可能です．

@c Imake uses a common database of host specific data.  For X11, this makes
@c sense because the distribution is made as a collection of tools, by one
@c central authority who has control over the database.
@c 
Imakeは，ホスト特定のデータの共通のデータベースを使用します．データベー
スを制御している一つの中央の権威によって，配布物はツールのコレクションと
して作成されるので，X11に対してはこれは意味があります．

@c @sc{gnu} tools are not released this way.  Each @sc{gnu} tool has a
@c maintainer; these maintainers are scattered across the world.  Using a
@c common database would be a maintenance nightmare.  Autoconf may appear
@c to be this kind of database, but in fact it is not.  Instead of listing
@c host dependencies, it lists program requirements.
@c 
@sc{gnu}ツールはこの方法でリリースされません．それぞれの@sc{gnu}ツールに
は管理者がいて，管理者は世界中に散らばっています．共通のデータベースを使
用することは，管理するときの悪夢となります．Autoconfはこの種のデータベー
スのように見えますが，実際はそうではありません．ホストの依存性をリストアッ
プする代わりに，プログラムが要求することをリストアップします．

@c If you view the @sc{gnu} suite as a collection of native tools, then the
@c problems are similar.  But the @sc{gnu} development tools can be
@c configured as cross tools in almost any host+target permutation.  All of
@c these configurations can be installed concurrently.  They can even be
@c configured to share host independent files across hosts.  Imake doesn't
@c address these issues.
@c 
@sc{gnu}スイートをネイティブのツールのコレクションだと見なす場合，問題は
似ています．しかし，@sc{gnu}開発ツールは，ほとんどのホスト+ターゲットで，
クロスツールとしてコンフィグレーション可能です．これらのコンフィグレーショ
ンは，同時にインストールも可能です．それらは，ホスト間で共有するホスト非
依存ファイルもコンフィグレーション可能です．Imakeはこれらの問題を扱いま
せん．

@c Imake templates are a form of standardization.  The @sc{gnu} coding
@c standards address the same issues without necessarily imposing the same
@c restrictions.
@c 
Imakeテンプレートは標準化の形式です．@sc{gnu} coding standardsは，同じ制
限を必然的に課さずに，同じ問題を扱います．
@end quotation


@c Here is some further explanation, written by Per Bothner:
@c 
以下はPer Bothnerによって書かれたそれ以上の説明です．

@quotation
@c One of the advantages of Imake is that it easy to generate large
@c Makefiles using @code{cpp}'s @samp{#include} and macro mechanisms.
@c However, @code{cpp} is not programmable: it has limited conditional
@c facilities, and no looping.  And @code{cpp} cannot inspect its
@c environment.
@c 
Imakeの利点の１つは，@code{cpp}の@samp{#include}とマクロのメカニズムを使
用した，大きなMakefilesを簡単に生成することです．しかし，@code{cpp}はプ
ログラム不可能です．それは限定されたファシリティと，ループがないという制
限があります．そして@code{cpp}ではその環境を検査できません．

@c All of these problems are solved by using @code{sh} instead of
@c @code{cpp}.  The shell is fully programmable, has macro substitution,
@c can execute (or source) other shell scripts, and can inspect its
@c environment.
@c 
これらすべての問題は，@code{cpp}の代わりに@code{sh}を使用することで解決
されます．シェルは完全にプログラム可能で，マクロの代入や，他のシェルスク
リプトを実行する(あるいは他のもののソースとなる)ことが可能で，環境変数を
も検査可能です．
@end quotation


@c Paul Eggert elaborates more:
@c 
Paul Eggertはより多く詳述しています．

@quotation
@c With Autoconf, installers need not assume that Imake itself is already
@c installed and working well.  This may not seem like much of an advantage
@c to people who are accustomed to Imake.  But on many hosts Imake is not
@c installed or the default installation is not working well, and requiring
@c Imake to install a package hinders the acceptance of that package on
@c those hosts.  For example, the Imake template and configuration files
@c might not be installed properly on a host, or the Imake build procedure
@c might wrongly assume that all source files are in one big directory
@c tree, or the Imake configuration might assume one compiler whereas the
@c package or the installer needs to use another, or there might be a
@c version mismatch between the Imake expected by the package and the Imake
@c supported by the host.  These problems are much rarer with Autoconf,
@c where each package comes with its own independent configuration
@c processor.
@c 
Autoconfの場合，インストーラは，Imake自身がインストールされていて，うま
く働いていることを想定する必要がありません．これは，Imakeに慣れている人
にとっては，あまり利点とは思わないかもしれません．しかし，多くのホストで
Imakeはインストールされておらず，デフォルトのインストールではうまく動作
せず，Imakeにパッケージのインストールを要求すると，それらのホストでパッ
ケージの受け入れを妨げます．例えば，Imakeテンプレートとコンフィグレーショ
ンファイルは，正確にホストにインストールされていなかったり，Imakeのビル
ドの手続きは，全てのソースファイルが大きなディレクトリにあると誤解したり，
Imakeのコンフィグレーションは，一つのコンパイラを想定しているのに，パッ
ケージやインストーラが他のものを必要としたり，パッケージが期待するImake 
と，ホストがサポートするImakeのバージョンが異なったりする場合があります．
これらの問題は，Autoconfの方がはるかに稀で，それぞれのパッケージは，独自
の独立したコンフィグレーションプロセッサを持ってきます．

@c Also, Imake often suffers from unexpected interactions between
@c @code{make} and the installer's C preprocessor.  The fundamental problem
@c here is that the C preprocessor was designed to preprocess C programs,
@c not @file{Makefile}s.  This is much less of a problem with Autoconf,
@c which uses the general-purpose preprocessor @code{m4}, and where the
@c package's author (rather than the installer) does the preprocessing in a
@c standard way.
@c 
また，Imakeは，@code{make}とインストーラのCプリプロセッサの間の予期せぬ
干渉にもしばしば苦しみます．ここでの基本的な問題は，Cプリプロセッサが，
@file{Makefile}ではなく，Cプログラムのプリプロセスのためにデザインされて
いるということです．これは，Autoconfではほとんど問題にならず，それは汎用
のプリプロセッサ@code{m4}を使用し，そこでは(インストールする人ではなく) 
パッケージの著作者が標準的な方法でプリプロセスを行います．
@end quotation


@c Finally, Mark Eichin notes:
@c 
最後はMark Eichinが書きました．

@quotation
@c Imake isn't all that extensible, either.  In order to add new features to
@c Imake, you need to provide your own project template, and duplicate most
@c of the features of the existing one.  This means that for a sophisticated
@c project, using the vendor-provided Imake templates fails to provide any
@c leverage---since they don't cover anything that your own project needs
@c (unless it is an X11 program).
@c 
Imakeは，それほど拡張可能でもありません．Imakeに新しい特徴を加えるために，
独自のプロジェクトテンプレートを供給して，既存の特徴の大部分を繰り返す必
要があります．洗練されたプロジェクトに対してベンダーが供給したImakeテン
プレートを使用することは，効力の供給に失敗することを意味します．その理由
は，(たとえX11プログラムを使用していなくても) 独自のプロジェクトが必要と
するものを全くサポートしていないからです．

@c On the other side, though:
@c 
しかし，他の面では．

@c The one advantage that Imake has over @code{configure}:
@c @file{Imakefile}s tend to be much shorter (likewise, less redundant)
@c than @file{Makefile.in}s.  There is a fix to this, however---at least
@c for the Kerberos V5 tree, we've modified things to call in common
@c @file{post.in} and @file{pre.in} @file{Makefile} fragments for the
@c entire tree.  This means that a lot of common things don't have to be
@c duplicated, even though they normally are in @code{configure} setups.
@c 
一つの利点として，Imakeは@code{configure}以上のものを持っています． 
@file{Imakefile}は，@file{Makefile.in}より(同じか，かなり)短い傾向にあり
ます．これは修正されています．---しかし，少なくともKerberos V5のツリーに
対し，共通の@file{post.in}と@file{pre.in}を呼び出すため， 
@file{Makefile}の一部をツリー全体で修正しました．これは，多くの共通のも
のが，通常の@code{configure}セットアップにあるものさえ，繰りさえされるこ
とを意味します．
@end quotation




@c ===================================================== History of Autoconf.

@node History, Environment Variable Index, Questions, Top
@chapter Autoconfの歴史

@c You may be wondering, Why was Autoconf originally written?  How did it
@c get into its present form?  (Why does it look like gorilla spit?)  If
@c you're not wondering, then this chapter contains no information useful
@c to you, and you might as well skip it.  If you @emph{are} wondering,
@c then let there be light@dots{}
@c 
以下のことを不思議に思うかもしれません．なぜAutoconfは元々書かれたのです
か？どのようにして現在の形式になったのですか？(なぜそれはゴリラ唾によく
似ているのですか？)不思議に思っていない場合，この章は有用な情報を含んで
いないので，飛ばした方が良いでしょう．不思議に思って@emph{いる}場合，軽
くながしてください@dots{}．

@menu
* Genesis::                     Prehistory and naming of @code{configure}
* Exodus::                      The plagues of M4 and Perl
* Leviticus::                   The priestly code of portability arrives
* Numbers::                     Growth and contributors
* Deuteronomy::                 Approaching the promises of easy configuration
@end menu

@node Genesis, Exodus, History, History
@section Genesis

@c In June 1991 I was maintaining many of the @sc{gnu} utilities for the
@c Free Software Foundation.  As they were ported to more platforms and
@c more programs were added, the number of @option{-D} options that users
@c had to select in the @file{Makefile} (around 20) became burdensome.
@c Especially for me---I had to test each new release on a bunch of
@c different systems.  So I wrote a little shell script to guess some of
@c the correct settings for the fileutils package, and released it as part
@c of fileutils 2.0.  That @code{configure} script worked well enough that
@c the next month I adapted it (by hand) to create similar @code{configure}
@c scripts for several other @sc{gnu} utilities packages.  Brian Berliner
@c also adapted one of my scripts for his @sc{cvs} revision control system.
@c 
1991年6月，私はFree Software Foundationの@sc{gnu}ユーティリティの多くを
保守していました．それらは，より多くのプラットホームに移植され，より多く
のプログラムが追加されたので，ユーザは，@file{Makefile}で多くの 
@samp{-D}オプション(およそ20)を選択する必要があり厄介になりました．特に
私がそうでした---私は異なるシステムでそれぞれの新しいいリリースをテスト
する必要がありました．そして，私はfileutilsパッケージに対する正しい設定
を見つけるため小さなシェルスクリプトを書き，fileutils 2.0の一部としてリ
リースしました．その@code{configure}は，翌月，いくつかの他の@sc{gnu}ユー
ティリティパッケージに対する@code{configure}スクリプトを作成するため，
(手作業で)改造するとうまく動作しました．Brian Berlinerも，私のスクリプト
を，@sc{cvs}リビジョンコントロールシステム用に改造しました．

@c Later that summer, I learned that Richard Stallman and Richard Pixley
@c were developing similar scripts to use in the @sc{gnu} compiler tools;
@c so I adapted my @code{configure} scripts to support their evolving
@c interface: using the file name @file{Makefile.in} as the templates;
@c adding @samp{+srcdir}, the first option (of many); and creating
@c @file{config.status} files.
@c 
その夏の後，私はRichard StallmanとRichard Pixleyが，@sc{gnu}コンパイラツー
ルで使用する，類似のスクリプトを開発していたことを知りました．それで私は，
@code{configure}スクリプトが発展するインタフェースをサポートするように改
造しました．テンプレートとして，@file{Makefile.in}という名前のファイルを
使用し，(たくさんの中から)最初のオプション@samp{+srcdir}を追加し， 
@file{config.status}ファイルを作成しました．


@node Exodus, Leviticus, Genesis, History
@section Exodus

@c As I got feedback from users, I incorporated many improvements, using
@c Emacs to search and replace, cut and paste, similar changes in each of
@c the scripts.  As I adapted more @sc{gnu} utilities packages to use
@c @code{configure} scripts, updating them all by hand became impractical.
@c Rich Murphey, the maintainer of the @sc{gnu} graphics utilities, sent me
@c mail saying that the @code{configure} scripts were great, and asking if
@c I had a tool for generating them that I could send him.  No, I thought,
@c but I should!  So I started to work out how to generate them.  And the
@c journey from the slavery of hand-written @code{configure} scripts to the
@c abundance and ease of Autoconf began.
@c 
ユーザからのフィードバックを得るにつれ，私は，検索と置換，カットアンドペー
スト，それぞれのスクリプトの良く似た変更でEmacsを使用し，多くの改良点を
組み入れました．私が，@sc{gnu}ユーティリティパッケージに， 
@code{configure}スクリプトを使用するため改造するにつれ，手作業での更新は，
現実的なものではなくなりました．@sc{gnu}グラフィックユーティリティの管理
者Rich Murpheyは，@code{configure}スクリプトは素晴らしいというメールを送っ
てくれ，それらを生成するツールを持っているなら送って欲しいという依頼があ
りました．持ってはいませんでしたが，そうするべきだと思いました！それで，
私はそれらを生成する仕事を始めました．手書きの@code{configure}スクリプト
の奴隷から，Autoconfで簡単に始める裕福で簡単な旅が始まりました．

@c Cygnus @code{configure}, which was being developed at around that time,
@c is table driven; it is meant to deal mainly with a discrete number of
@c system types with a small number of mainly unguessable features (such as
@c details of the object file format).  The automatic configuration system
@c that Brian Fox had developed for Bash takes a similar approach.  For
@c general use, it seems to me a hopeless cause to try to maintain an
@c up-to-date database of which features each variant of each operating
@c system has.  It's easier and more reliable to check for most features on
@c the fly---especially on hybrid systems that people have hacked on
@c locally or that have patches from vendors installed.
@c 
Cygnus @code{configure}は，そのころには開発されていて，表ベースで動作し
ていました．それは，主に推測しにくい(オブジェクトファイルのフォーマット
の詳細のような)特徴を，小さな数字を使用して，システムタイプを不連続な数
字で，主に扱う手法を用いていました．Brian Foxが，Bashのために開発してい
た，自動的なコンフィグレーションシステムは，類似のアプローチをとっていま
す．一般的に使用するため，それぞれのオペレーティングシステムが持つそれぞ
れ異なる特徴の最新のデータベースを管理しようとすることは，望みがないよう
に思われました．その場その場でほとんどの機能を調査するため，より容易でよ
り信頼性が高いものです---特に，人々がローカルでハックしたり，ベンダーが
インストールしたパッチを持つ，ハイブリッドなシステムではそうなります．

@c I considered using an architecture similar to that of Cygnus
@c @code{configure}, where there is a single @code{configure} script that
@c reads pieces of @file{configure.ac} when run.  But I didn't want to have
@c to distribute all of the feature tests with every package, so I settled
@c on having a different @code{configure} made from each
@c @file{configure.ac} by a preprocessor.  That approach also offered more
@c control and flexibility.
@c 
私は Cygnus @code{configure}に類似のアーキテクチャを使おうと考え，それは
実行時に@file{configure.ac}の一部を読み込む一つの @code{configure}スクリ
プトです．しかし，全てのパッケージで全ての特徴を配布する必要は望まなかっ
たので，プロセッサーによってそれぞれの@file{configure.ac}から異なる
@code{configure}を作成する処理にしました．そのアプローチは，多くの制御と
柔軟性をもたらしました．

@c I looked briefly into using the Metaconfig package, by Larry Wall,
@c Harlan Stenn, and Raphael Manfredi, but I decided not to for several
@c reasons.  The @code{Configure} scripts it produces are interactive,
@c which I find quite inconvenient; I didn't like the ways it checked for
@c some features (such as library functions); I didn't know that it was
@c still being maintained, and the @code{Configure} scripts I had
@c seen didn't work on many modern systems (such as System V R4 and NeXT);
@c it wasn't very flexible in what it could do in response to a feature's
@c presence or absence; I found it confusing to learn; and it was too big
@c and complex for my needs (I didn't realize then how much Autoconf would
@c eventually have to grow).
@c 
私は，Larry Wall，Harlan Stennと，Raphael Manfrediによる，Metaconfigを使
用してみようとしましたが，いくつかの理由でやめました．それが生成する
@code{Configure}スクリプトは対話的で，それが非常に不都合だと分かりました．
私は，それが行う(ライブラリ関数のような)特徴の調査方法が，好きでありませ
んでした．さらに，いまだ管理されているかどうか分かりませんでした．
@code{Configure}スクリプトは，(System V R4とNeXTのような)近代的なシステ
ムでは動作しないように思えました．特徴の有無の反応で，できることがあまり
柔軟ではありませんでした．学ぶことが難しいと思いました．そして，必要以上
にあまりに大きく複雑でした(私は，そのとき，Autoconfが結局どれくらい成長
するのか，理解していませんでした)．

@c I considered using Perl to generate my style of @code{configure}
@c scripts, but decided that M4 was better suited to the job of simple
@c textual substitutions: it gets in the way less, because output is
@c implicit.  Plus, everyone already has it.  (Initially I didn't rely on
@c the @sc{gnu} extensions to M4.)  Also, some of my friends at the
@c University of Maryland had recently been putting M4 front ends on
@c several programs, including @code{tvtwm}, and I was interested in trying
@c out a new language.
@c 
私は，@code{configure}スクリプトの私のスタイルを生成するため，Perlを使用
することを考えましたが，M4は簡単なテキスト代入の仕事により適していたので，
それに決めました．出力が暗黙で決まっているので，より小さい手法になると思
いました．さらに，みんなは既にそれを所有しています．(最初は，私は
@sc{gnu}が拡張したM4 に依存しませんでした．)また，Maryland大学の私の友達
は最近，M4を@code{tvtwm}を含むいくつかのプログラムのフロントエンドとして
位置付けていて，私は新しい言語への挑戦に興味が湧きました．


@node Leviticus, Numbers, Exodus, History
@section Leviticus

@c Since my @code{configure} scripts determine the system's capabilities
@c automatically, with no interactive user intervention, I decided to call
@c the program that generates them Autoconfig.  But with a version number
@c tacked on, that name would be too long for old @sc{unix} file systems,
@c so I shortened it to Autoconf.
@c 
私の@code{configure}スクリプトは，ユーザの対話的な干渉無しでシステムの能
力を自動的に決定するので，それを生成するプログラムをAutoconfigと呼ぶこと
に決定しました．しかし，バージョンナンバーを付けると，@sc{unix}ファイル
システムとしてはあまりに長い名前なので，短くしてAutoconfとしました．

@c In the fall of 1991 I called together a group of fellow questers after
@c the Holy Grail of portability (er, that is, alpha testers) to give me
@c feedback as I encapsulated pieces of my handwritten scripts in M4 macros
@c and continued to add features and improve the techniques used in the
@c checks.  Prominent among the testers were Fran@,cois Pinard, who came up
@c with the idea of making an @file{autoconf} shell script to run @code{m4}
@c and check for unresolved macro calls; Richard Pixley, who suggested
@c running the compiler instead of searching the file system to find
@c include files and symbols, for more accurate results; Karl Berry, who
@c got Autoconf to configure @TeX{} and added the macro index to the
@c documentation; and Ian Lance Taylor, who added support for creating a C
@c header file as an alternative to putting @option{-D} options in a
@c @file{Makefile}, so he could use Autoconf for his @sc{uucp} package.
@c The alpha testers cheerfully adjusted their files again and again as the
@c names and calling conventions of the Autoconf macros changed from
@c release to release.  They all contributed many specific checks, great
@c ideas, and bug fixes.
@c 
1991年秋，私は，M4マクロの手書きのスクリプトの部品をカプセル化し，調査時
に使用する特徴と技術の改善をを加えることを続けるにつれて，フィードバック
してもらうため，移植性の聖杯にちなんだ探求者たちのグループ(つまり，アル
ファテスター)を呼びました．テスターの間で著明な人は，以下の通りです．
@code{m4}を実行し，未解決のマクロの呼び出しの調査する@file{autoconf}シェ
ルスクリプトを作成するアイディアをもたらした
@ifinfo
Franc,ois
@end ifinfo
@tex
Fran\c cois
@end tex
Pinard，インクルー
ドファイルやシンボルを探すためファイルシステムを探す代わりに，より正確な
結果を求るためコンパイラの実行を提案したRichard Pixley．Autoconfに，
@TeX{}コンフィグレーションを与え，ドキュメントにマクロインデクッスを加え
たKarl Berry．そして，@samp{-D}オプションを@file{Makefile}に書き込む代わ
りに，Cヘッダファイルを作成するサポートを加え，UUCPパッケージでAutoconf 
が使えるようにしたIan Taylor．アルファテスターは，リリース毎に変化する
Autoconfマクロの名前と呼び出し方法に対して，何度も何度もファイルを機嫌良
く調整してくれました．彼らは皆，多くの特定の調査，偉大なアイディア，そし
てバグフィクスを提供してくれました．


@node Numbers, Deuteronomy, Leviticus, History
@section Numbers

@c In July 1992, after months of alpha testing, I released Autoconf 1.0,
@c and converted many @sc{gnu} packages to use it.  I was surprised by how
@c positive the reaction to it was.  More people started using it than I
@c could keep track of, including people working on software that wasn't
@c part of the @sc{gnu} Project (such as TCL, FSP, and Kerberos V5).
@c Autoconf continued to improve rapidly, as many people using the
@c @code{configure} scripts reported problems they encountered.
@c 
1992年7月，何カ月ものアルファテストの後で，私は Autoconf 1.0をリリースし，
それを使用して多くの@sc{gnu}パッケージを改造しました．私は，それらに対す
るあまりに肯定的な反応に驚きました．私が追跡記録可能な人以上の多くの人々
がそれを使用し始め，それには，@sc{gnu}プロジェクトの一部ではない(TCL，
FSP とKerberos V5のような)ソフトウェアで仕事をしている人も含まれています．
Autoconfは，@code{configure}を使用している多くの人が遭遇した問題を報告し
てくれるので，急速に改善され続けました．

@c Autoconf turned out to be a good torture test for M4 implementations.
@c @sc{unix} @code{m4} started to dump core because of the length of the
@c macros that Autoconf defined, and several bugs showed up in @sc{gnu}
@c @code{m4} as well.  Eventually, we realized that we needed to use some
@c features that only @sc{gnu} M4 has.  4.3@sc{bsd} @code{m4}, in
@c particular, has an impoverished set of builtin macros; the System V
@c version is better, but still doesn't provide everything we need.
@c 
Autoconfは，@code{m4}実行の良い耐久テストだということが分かりました．
@sc{unix} @code{m4}は，Autoconfが定義するマクロの長さでコアダンプを吐き
始め，いくつかのバグが@sc{gnu} @code{m4}でも同様に明らかになりました．結
局，私達は@sc{gnu} M4のみが持つ特徴が必要だと認識しました．4.3@sc{bsd}
@code{m4}は，特に組み込みマクロの設定が足りず，System Vバージョンはまし
ですが，私達が必要とするもの全てをいまだに供給してくれません．

@c More development occurred as people put Autoconf under more stresses
@c (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
@c david zuhn contributed C++ support.  Fran@,cois Pinard made it diagnose
@c invalid arguments.  Jim Blandy bravely coerced it into configuring
@c @sc{gnu} Emacs, laying the groundwork for several later improvements.
@c Roland McGrath got it to configure the @sc{gnu} C Library, wrote the
@c @code{autoheader} script to automate the creation of C header file
@c templates, and added a @option{--verbose} option to @code{configure}.
@c Noah Friedman added the @option{--autoconf-dir} option and
@c @code{AC_MACRODIR} environment variable.  (He also coined the term
@c @dfn{autoconfiscate} to mean ``adapt a software package to use
@c Autoconf''.)  Roland and Noah improved the quoting protection in
@c @code{AC_DEFINE} and fixed many bugs, especially when I got sick of
@c dealing with portability problems from February through June, 1993.
@c 
人々が，Autoconfをより強い圧力下(そして，私が予想していなかった使用の下) 
で利用するにつれ，更なる開発事項が生じました．Karl BerryはX11に対する調
査を加えました．david zuhnはC++サポートを寄付してくれました．
@ifinfo
Franc,ois
@end ifinfo
@tex
Fran\c cois
@end tex
Pinardは，無効な引数を診断させるようにしました．Jim Blandyは勇敢にも，後
の改良のためのワークグランドとなるよう，@sc{gnu} Emacsのコンフィグレーショ
ンに強要しました．Roland McGrathは，@sc{gnu} Cライブラリのコンフィグレー
ションに使用し，Cヘッダテンプレートファイルを自動的に作成する，
@code{autoheader}スクリプトを書き，@code{configure}に，@samp{--verbose} 
オプションを加えました．Noah Friedmanは，@samp{--macrodir}オプションと 
@code{AC_MACRODIR}環境変数を加えました．(彼は，``ソフトウェアパッケージ
を，Autoconfを使用するものに改造してください''と言うことを意味する 
@dfn{autoconfiscate}という言葉も作り出しました．)RolandとNoahは， 
@code{AC_DEFINE}での引用の保護を改善し，特に私が1993年の2月から6月まで移
植性の問題にうんざりしているときに多くのバグを直しました．


@node Deuteronomy,  , Numbers, History
@section Deuteronomy

@c A long wish list for major features had accumulated, and the effect of
@c several years of patching by various people had left some residual
@c cruft.  In April 1994, while working for Cygnus Support, I began a major
@c revision of Autoconf.  I added most of the features of the Cygnus
@c @code{configure} that Autoconf had lacked, largely by adapting the
@c relevant parts of Cygnus @code{configure} with the help of david zuhn
@c and Ken Raeburn.  These features include support for using
@c @file{config.sub}, @file{config.guess}, @option{--host}, and
@c @option{--target}; making links to files; and running @code{configure}
@c scripts in subdirectories.  Adding these features enabled Ken to convert
@c @sc{gnu} @code{as}, and Rob Savoye to convert DejaGNU, to using
@c Autoconf.
@c 
長い間望まれていた主な特徴のリストが蓄積され，様々な人々のパッチの数年間
の効果は，残りのcruftを残したままでした．1994年4月のCygnus Supportに対す
る仕事中に，私はautoconfの主な修正を始めました．Cygnus @code{configure} 
が関連した部分がほとんどですが，david zuhnとKen Raeburnの助けで，
Autoconfが欠けているCygnus @code{configure}の特徴のほとんどを加えました．
これらの特徴は，@file{config.sub}，@file{config.guess}， @samp{--host}と
@samp{--target}を使用するサポート，ファイルをリンクさせること，サブディ
レクトリで@code{configure}を実行することを含みます．これらの特徴に加え，
Autoconfを使用するように，Kenは@sc{gnu} @code{as}を対応し，Rob Savoye は
DejaGNUを対応しました．

@c I added more features in response to other peoples' requests.  Many
@c people had asked for @code{configure} scripts to share the results of
@c the checks between runs, because (particularly when configuring a large
@c source tree, like Cygnus does) they were frustratingly slow.  Mike
@c Haertel suggested adding site-specific initialization scripts.  People
@c distributing software that had to unpack on MS-DOS asked for a way to
@c override the @file{.in} extension on the file names, which produced file
@c names like @file{config.h.in} containing two dots.  Jim Avera did an
@c extensive examination of the problems with quoting in @code{AC_DEFINE}
@c and @code{AC_SUBST}; his insights led to significant improvements.
@c Richard Stallman asked that compiler output be sent to @file{config.log}
@c instead of @file{/dev/null}, to help people debug the Emacs
@c @code{configure} script.
@c 
私は，他の人々の要求に答えより多くの特徴を加えました．多くの人々は， 
@code{configure}スクリプトが実行時の調査結果を共有できるよう求め，それは
(特に，Cygnusのような，大きなソースツリーのコンフィグレーション時に)イラ
イラする程遅かったためです．Mike Haertelは，サイト特定の初期化スクリプト
を加えることを提案しました．MS-DOSでアンパックが必要なものを配布している
人々は，生成されるファイル名が@file{config.h.in}のように二つのドットを含
むので，ファイル名の@file{.in}拡張子に優先するよう求めました．Jim Avera 
は，@code{AC_DEFINE}と@code{AC_SUBST}の引用を使用する問題の拡張試験を行
い，彼の洞察は重要な改良につながりました．Richard Stallmanは，Emacsの
@code{configure}スクリプトをデバッグする人々を助けるため， 
@file{/dev/null}の代わりに@file{config.log}にコンパイラ出力を送るよう頼
みました．

@c I made some other changes because of my dissatisfaction with the quality
@c of the program.  I made the messages showing results of the checks less
@c ambiguous, always printing a result.  I regularized the names of the
@c macros and cleaned up coding style inconsistencies.  I added some
@c auxiliary utilities that I had developed to help convert source code
@c packages to use Autoconf.  With the help of Fran@,cois Pinard, I made
@c the macros not interrupt each others' messages.  (That feature revealed
@c some performance bottlenecks in @sc{gnu} @code{m4}, which he hastily
@c corrected!)  I reorganized the documentation around problems people want
@c to solve.  And I began a test suite, because experience had shown that
@c Autoconf has a pronounced tendency to regress when we change it.
@c 
プログラム品質に不満があり，その他の変更をしました．メッセージに曖昧でな
い調査結果が表示されるようにし，常に結果を出力するようにしました．マクロ
の名前を組織化し，コーディングスタイルの矛盾をきれいにしました．Autoconf 
を使用するソースコードパッケージの改造を助けるため開発した，追加のユーティ
リティを加えました．
@ifinfo
Franc,ois
@end ifinfo
@tex
Fran\c cois
@end tex
Pinardの助けで，マクロがお互いのメッセー
ジに干渉しないようにしました．(その特徴は，@sc{gnu} @code{m4}のパフォー
マンスのボトルネックを明らかにし，彼はすぐに修正しました！) 人々が解決を
望むドキュメント周りの問題を再編成しました．そして，経験から，Autoconfを
変更したとき，明らかに退化する傾向が分かっているので，テストスイートを始
めました．

@c Again, several alpha testers gave invaluable feedback, especially
@c Fran@,cois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
@c and Mark Eichin.
@c 
再び，貴重なフィードバックをくれたアルファテスターです．特に，
@ifinfo
Franc,ois
@end ifinfo
@tex
Fran\c cois
@end tex
Pinard，Jim Meyering，Karl Berry，Rob Savoye，Ken Raeburnと，Mark Eichin 
です．

@c Finally, version 2.0 was ready.  And there was much rejoicing.  (And I
@c have free time again.  I think.  Yeah, right.)
@c 
最終的に，バージョン2.0が用意できました．そしてたくさんの喜びがありまし
た．(そして私は再び自由な時間を持ちます．私は考えます．これは正当な権利
だ．)


@c ========================================================== Appendices

@node Environment Variable Index, Output Variable Index, History, Top
@unnumbered 環境変数の索引

@c This is an alphabetical list of the environment variables that Autoconf
@c checks.
@c 
これは，Autoconfが調査する環境変数のアルファベット順のリストです．

@printindex ev

@node Output Variable Index, Preprocessor Symbol Index, Environment Variable Index, Top
@unnumbered 出力変数の索引

@c This is an alphabetical list of the variables that Autoconf can
@c substitute into files that it creates, typically one or more
@c @file{Makefile}s.  @xref{Setting Output Variables}, for more information
@c on how this is done.
@c 
これは，Autoconfが作成するファイルに，通常1つ以上の@file{Makefile}に代入
する変数のアルファベット順のリストです．こうする方法の詳細は， 
@xref{Setting Output Variables}.

@printindex ov

@node Preprocessor Symbol Index, Autoconf Macro Index, Output Variable Index, Top
@unnumbered プリプロセッサシンボルの索引

@c This is an alphabetical list of the C preprocessor symbols that the
@c Autoconf macros define.  To work with Autoconf, C source code needs to
@c use these names in @code{#if} directives.
@c 
これは，Autoconfマクロが定義するCプリプロセッサシンボルのアルファベット
順のリストです．Autoconfと共に動作するため，Cソースコードでは，
@code{#if}ディレクティブにこれらの名前を使用する必要があります．

@printindex cv

@node Autoconf Macro Index, M4 Macro Index, Preprocessor Symbol Index, Top
@unnumbered Autoconfマクロの索引

@c This is an alphabetical list of the Autoconf macros.  To make the list
@c easier to use, the macros are listed without their preceding @samp{AC_}.
@c 
これは，Autoconfマクロのアルファベット順のリストです．リストの使用を容易
にするため，マクロは前置される@samp{AC_}をとった形でリストアップされてい
ます．

@printindex ma

@node M4 Macro Index, Concept Index, Autoconf Macro Index, Top
@unnumbered M4マクロの索引

@c This is an alphabetical list of the M4, M4sugar, and M4sh macros.  To
@c make the list easier to use, the macros are listed without their
@c preceding @samp{m4_} or @samp{AS_}.
@c 
これは，M4，M4sugar，そしてM4shマクロのアルファベット順のリストです．リ
ストの使用を容易にするため，マクロは前置される@samp{m4_}や@samp{AS_}をとっ
た形でリストアップされています．

@printindex ms

@node Concept Index,  , M4 Macro Index, Top
@unnumbered 概念の索引

@c This is an alphabetical list of the files, tools, and concepts
@c introduced in this document.
@c 
これは，ファイル，ツール，そしてこのドキュメントで導入されている概念のア
ルファベット順のリストです．

@printindex cp

@contents
@bye

@c Local Variables:
@c ispell-local-dictionary: "american"
@c End:
