File:  [Local Repository] / gnujdoc / autoconf-2.57 / autoconf-ja.texi
Revision 1.2: download - view: text, annotated - select for diffs
Sat Feb 21 16:50:41 2004 UTC (16 years, 8 months ago) by futoshi
Branches: MAIN
CVS tags: HEAD
Bug fix for some Texinfo files.

\input texinfo @c -*-texinfo-*-
@comment ========================================================
@comment %**start of header
@setfilename autoconf-ja.info
@include autoconf-v.texi
@settitle Autoconf
@setchapternewpage odd
@setcontentsaftertitlepage
@finalout

@c @documentlanguage ja

@c A simple macro for optional variables.
@macro ovar{varname}
@r{[}@var{\varname\}@r{]}
@end macro

@c A simple macro for optional variables with a default value.
@macro dvar{varname, default}
@r{[}@var{\varname\} = @samp{\default\}@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

@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 ac
@c Define an Autotest macro index that @defmac doesn't write to.
@defcodeindex at
@c Define an M4sugar macro index that @defmac doesn't write to.
@defcodeindex ms
@c Define an index for *foreign* programs: `mv' etc.  Used for the
@c portability sections and so on.
@defindex pr

@c Define an index for functions: `alloca' etc.  Used for the
@c portability sections and so on.  We can't use `fn' (aka `fnindex),
@c since `@defmac' goes into it => we'd get all the macros too.

@c   FIXME: Aaarg!  It seems there are too many indices for TeX :(
@c
@c   ! No room for a new @write .
@c   l.112 @defcodeindex fu
@c
@c   so don't define yet another one :(  Just put some tags before each
@c   @prindex which is actually a @funindex.
@c
@c   @defcodeindex fu
@c
@c
@c   @c Put the programs and functions into their own index.
@c   @syncodeindex fu pr

@comment %**end of header
@comment ========================================================

@copying

This manual is for @acronym{GNU} Autoconf
(version @value{VERSION}, @value{UPDATED}),
a package for creating scripts to configure source code packages using
templates and an M4 macro package.

Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
2001, 2002 Free Software Foundation, Inc.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the @acronym{GNU} Free Documentation License,
Version 1.1 or any later version published by the Free Software
Foundation; with no Invariant Sections, with the Front-Cover texts
being ``A @acronym{GNU} Manual,'' and with the Back-Cover Texts as in
(a) below.  A copy of the license is included in the section entitled
``@acronym{GNU} Free Documentation License.''

(a) The FSF's Back-Cover Text is: ``You have freedom to copy and
modify this @acronym{GNU} Manual, like @acronym{GNU} software.  Copies
published by the Free Software Foundation raise funds for
@acronym{GNU} development.''
@end quotation
@end copying



@dircategory GNU programming tools
@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 @command{configure} scripts
* autoheader(ja): (autoconf-ja)autoheader Invocation.
                                How to create configuration templates
* autom4te(ja): (autoconf-ja)autom4te Invocation.
                                The Autoconf executables backbone
* configure(ja): (autoconf-ja)configure Invocation.
                                Configuring a package
* autoupdate(ja): (autoconf-ja)autoupdate Invocation.
                                Automatic update of @file{configure.ac}
* config.status(ja): (autoconf-ja)config.status Invocation.
                                Recreating a configuration
* testsuite(ja): (autoconf-ja)testsuite Invocation.
                                Running an Autotest test suite
@end direntry

@titlepage
@title Autoconf
@subtitle Creating Automatic Configuration Scripts
@subtitle for version @value{VERSION}, @value{UPDATED}
@author David MacKenzie
@author Ben Elliston
@author Akim Demaille
@c 翻訳:西尾 太
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage

@contents


@ifnottex
@node Top
@top Autoconf
@insertcopying
@end ifnottex

@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 @command{configure}
* Running configure Scripts::   How to use the Autoconf output
* config.status Invocation::    Recreating a configuration
* Obsolete Constructs::         Kept for backward compatibility
* Using Autotest::              Creating portable test suites
* FAQ::                         Frequent Autoconf Questions, with answers
* History::                     History of Autoconf
* Copying This Manual::         How to make copies of this manual
* Indices::                     Indices of symbols, concepts, etc.

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

@c The GNU Build System
@c 
GNUビルドシステム

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

@c Making @command{configure} Scripts
@c 
@command{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 @command{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 @file{configure.ac}

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

* Initializing configure::      Option processing etc.
* Notices::                     Copyright, version numbers in @command{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 on 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 
ヘッダファイル

* Header Portability::          Collected knowledge on common headers
* 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 
コンパイラとプリプロセッサ

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

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

* Language Choice::             Selecting which language to use for testing
* Writing Test Programs::       Forging source files for compilers
* Running the Preprocessor::    Detecting preprocessor symbols
* Running the Compiler::        Detecting language or header features
* Running the Linker::          Detecting library features
* Run Time::                    Testing for run-time features
* Systemology::                 A zoology of operating systems
* Multiple Cases::              Tests for several possible values

@c Writing Test Programs
@c 
テストプログラムを書く

* Guidelines::                  General rules for writing test programs
* Test Functions::              Avoiding pitfalls in test programs
* Generating Sources::          Source program boilerplate

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

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

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

* Cache Variable Names::        Shell variables used in caches
* Cache Files::                 Files @command{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
* Using autom4te::              The Autoconf executables backbone
* Programming in M4sugar::      Convenient pure M4 macros
* Programming in M4sh::         Common shell Constructs

@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
* Changequote is Evil::         Worse than INTERCAL: M4 + changequote
* Quadrigraphs::                Another way to escape special characters
* Quotation Rule Of Thumb::     One parenthesis, one quote

@c Using @command{autom4te}
@c 
@command{autom4te}の使用

* autom4te Invocation::         A @acronym{GNU} M4 wrapper
* Customizing autom4te::        Customizing the Autoconf package

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

* Redefined M4 Macros::         M4 builtins changed in M4sugar
* Evaluation Macros::           More quotation and evaluation control
* 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 @command{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::         Formatting help string
* Site Details::                Configuring site details
* Transforming Names::          Changing program names when installing
* Site Defaults::               Giving @command{configure} local defaults

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

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

@c Running @command{configure} Scripts
@c 
@command{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 @command{configure}
* Defining Variables::          Specifying the compiler etc.
* configure Invocation::        Changing how @command{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 
バージョン2.13からの更新

* Changed Quotation::           Broken code which used to work
* New Macros::                  Interaction with foreign macros
* Hosts and Cross-Compilation::  Bugward compatibility kludges
* AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
* AC_FOO_IFELSE vs AC_TRY_FOO::  A more generic scheme for testing sources

@c Generating Test Suites with Autotest
@c 
Autotestを用いてテストスイートを生成する

* Using an Autotest Test Suite::  Autotest and the user
* Writing testsuite.at::        Autotest macros
* testsuite Invocation::        Running @command{testsuite} scripts
* Making testsuite Scripts::    Using autom4te to create @command{testsuite}

@c Using an Autotest Test Suite
@c 
Autotestテストスイートの使用

* testsuite Scripts::           The concepts of Autotest
* Autotest Logs::               Their contents

@c Frequent Autoconf Questions, with answers
@c 
よくある質問とその回答

* Distributing::                Distributing @command{configure} scripts
* Why GNU m4::                  Why not use the standard M4?
* Bootstrapping::               Autoconf and @acronym{GNU} M4 require each other?
* Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
* Defining Directories::        Passing @code{datadir} to program
* autom4te.cache::              What is it?  Can I remove it?

@c History of Autoconf
@c 
Autoconfの歴史

* Genesis::                     Prehistory and naming of @command{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

@c Copying This Manual
@c 
このマニュアルのコピー条件

* GNU Free Documentation License::  License for copying this manual

@c Indices
@c 
索引

* 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
* Autotest Macro Index::        Index of Autotest macros
* Program & Function Index::    Index of those with portability problems
* Concept Index::               General index

@end detailmenu
@end menu

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

@node Introduction
@c @chapter Introduction
@chapter はじめに

@flushright
@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 
---詠み人知らず
@end flushright
@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
@c software packages---for a more complete solution, it should be used in
@c concert with other @acronym{GNU} build tools like Automake and
@c Libtool.  These other tools take on jobs like the creation of a
@c portable, recursive @file{Makefile} with all of the standard targets,
@c linking of shared libraries, and so on.  @xref{The GNU Build System},
@c for more information.
@c 
Autoconfは,移植性のあるソフトウェアパッケージに関連するすべての問題を
解決しているわけではありません --- より完全に解決するために,Automake 
とLibtoolのような,その他の@acronym{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 @acronym{GNU} M4 in order to generate the scripts.  It uses
@c features that some @sc{unix} versions of M4, including @acronym{GNU} M4 1.3,
@c do not have.  You must use version 1.4 or later of @acronym{GNU} M4.
@c 
Autoconfは,スクリプトを生成するために@acronym{GNU} M4が必要です.
@sc{unix}バージョンのM4が持っていない機能を使用していて,それには
@acronym{GNU} M4 1.3も含まれます.バージョン1.4以降の@acronym{GNU} M4 
を使用する必要があります.

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

@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 
更新情報,メーリングリストの詳細,既知のバグリストへのポインタなどは,
@href{http://www.gnu.org/software/autoconf/autoconf.html, Autoconf web
page}を参照してください.

@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://bugs.gnu.org/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 
バグの報告は,できれば
@href{http://bugs.gnu.org/cgi-bin/gnatsweb.pl?database=autoconf,
Autoconf Gnats database}へ提出するか,@email{bug-autoconf@@gnu.org,
the Autoconf Bugs mailing list}へ送付してください.できれば最初に,現
在の開発バージョンでバグが既に解決されていないことと,まだ報告されてい
ないことを調査してください.すべての必要な情報と問題を立証する短い
@file{configure.ac}を確実に同封してください.

@c Autoconf's development tree is accessible via @acronym{CVS}; see the Autoconf
@c web page for details.  There is also a
@c @href{http://subversions.gnu.org/cgi-bin/cvsweb/autoconf/, @acronym{CVS}web
@c interface to the Autoconf development tree}.  Patches relative to the
@c current @acronym{CVS} version can be sent for review to the
@c @email{autoconf-patches@@gnu.org, Autoconf Patches mailing list}.
@c 
Autoconfの開発ツリーは,@acronym{CVS}でアクセス可能です.詳細は,
Autoconfのウェブページを参照してください.
@href{http://subversions.gnu.org/cgi-bin/cvsweb/autoconf/,
@acronym{CVS}web interface to the Autoconf development tree}もあります.
現在の@acronym{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}の好意で作成
されている@href{http://www.gnu.org/software/ac-archive/, Autoconf
Macro Archive}を参照してください.


@c ================================================= The GNU Build System

@node The GNU Build System
@c @chapter The @acronym{GNU} Build System
@chapter @acronym{GNU}ビルドシステム

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

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

@node Automake
@section Automake

@c The ubiquity of @command{make} means that a @file{Makefile} is almost the
@c only viable way to distribute automatic build rules for software, but
@c one quickly runs into @command{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 @command{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 @command{configure}.  Into this mess steps @dfn{Automake}.
@c 
@command{make}の偏在とは,@file{Makefile}はソフトウェアの自動的なビル
ドルールを配布するほとんど唯一の現実的な方法だということを意味している
のですが,すぐに@command{make}の多くの限界にぶつかります.それには,自
動的な依存性の追跡に対するサポート,サブディレクトリでの再帰的なビルド,
(例えば,ネットワークファイルシステムに対する)信頼できるタイムスタンプ
などが足りないので,開発者はそれぞれのプロジェクトに対し,辛い(そして
間違うことが多い)車輪の再開発が必要になっています.多くのシステムの
@command{make}の癖のために,移植性は些細な問題ではなくなっています.な
によりも,ユーザが期待する多くの標準的なターゲット(@code{make install},
@code{make distclean},@code{make uninstall}など)を手作業で実装する必
要があることがあげられます.もちろん,Autoconfを使用しているので,
@code{@@CC@@},@code{@@CFLAGS@@},そして@command{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.  @command{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 @command{configure}, if not @file{/usr/local}).
@c 
結果として得られる@code{Makefile.in}(約400行)は,自動的に,すべての標
準的なターゲット,Autoconfが提供する置換式,自動的な依存性追跡,
@code{VPATH}のビルドなどをサポートします.@command{make}で@code{hello} 
プログラムをビルドし,@code{make install}でそれを
@file{/usr/local/bin}(または@file{/usr/local}でないときは
@command{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}は移植性が
ないかもしれません(例えば,自動的に依存情報を生成するために,コンパイ
ラの特殊な機能を使用しているかもしれません).しかし,@samp{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@enddots{}
@c 
Automakeの利点は,パッケージが大きければ大きい(特にサブディレクトリが
あるもの)ほど有利になりますが,小さなプログラムに対しても重要な利便性
と移植性を追加します.そして,それだけがすべてではありません@enddots{}

@node Libtool
@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, @acronym{GNU} provides a solution:
@c @dfn{Libtool}.
@c 
他のプログラムでも,これまでの作業の成果から利益を得ることを可能にする
ため,プログラムだけでなくライブラリをビルドしたいことも頻繁にあるでしょ
う.理想的には,@emph{共有}(動的にリンクされる)ライブラリを生成したい
と考え,それは,複数のプログラムからディスクやメモリに同じものを複製せ
ずに使用することが可能で,リンクされているプログラムに依存せずに更新可
能だからです.しかし,移植性の高い共有ライブラリは悪夢の元です --- そ
れぞれのシステムは,独自の互換性のないツール,コンパイラフラグ,そして
魔法の呪文があります.幸いにも@acronym{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 with 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
@c @section Pointers
@section 参考文献

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

@c There are a number of places that you can go to for more information on
@c the @acronym{GNU} build tools.
@c 
@acronym{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 
@href{http://www.gnu.org/software/autoconf/,Autoconf},
@href{http://www.gnu.org/software/automake/,Automake},そして
@href{http://www.gnu.org/software/libtool/,Libtool}のホームページ.

@c @item Automake Manual
@item Automakeのマニュアル

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

@c @item Books
@item 書籍

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

@c @item Tutorials and Examples
@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 
@href{http://sources.redhat.com/autoconf/,Autoconf Developer Page}では,
Autoconf/Automakeのオンラインのチュートリアルと,
@href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive}
のリンクも管理しています.

@end itemize

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

@node Making configure Scripts
@c @chapter Making @command{configure} Scripts
@chapter @command{configure}スクリプトの作成
@cindex @file{aclocal.m4}
@cindex @command{configure}

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

@itemize @minus
@item
@c one or more @file{Makefile} files, usually one in each subdirectory of the
@c package (@pxref{Makefile Substitutions});
@c 
一つ以上の@file{Makefile}で,通常はパッケージのそれぞれのサブディレク
トリに一つずつあります(@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 
(@samp{configure --config-cache}が使用されるときに作成される)
@file{config.cache}という名のオプションのシェルスクリプトで,それは多
くのテストの実行結果を保存しています(@pxref{Cache Files}).

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

@cindex @file{configure.in}
@cindex @file{configure.ac}
@c To create a @command{configure} script with Autoconf, you need to write an
@c Autoconf input file @file{configure.ac} (or @file{configure.in}) and run
@c @command{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 @command{autoheader}, and you will distribute the generated file
@c @file{config.h.in} with the package.
@c 
Autoconfを用いて@command{configure}スクリプトを作成するために,
Autoconfの入力ファイル@file{configure.ac}(または@file{configure.in}) 
を書き,@command{autoconf}をそこで実行する必要があります.Autoconfでも
たらされたものを補うために独自の機能テストを書く場合,
@file{aclocal.m4}と@file{acsite.m4}という名のファイルも書くことになる
でしょう.@code{#define}ディレクティブを含むCヘッダファイルを使用する
場合,@command{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 @command{autoconf} and @command{autoheader} also read the installed Autoconf
@c macro files (by reading @file{autoconf.m4}).
@c 
コンフィギュレーションで使用可能なファイルを生成する方法は,以下で示す
図の用になります.実行するプログラムには,@samp{*}が付いています.オプ
ションのファイルは角カッコ(@samp{[]})で囲っています.
@command{autoconf}と @command{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 @command{configure} scripts
@end menu

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

@c To produce a @command{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 @command{autoscan} program can give you a good start in writing
@c @file{configure.ac} (@pxref{autoscan Invocation}, for more information).
@c 
ソフトウェアパッケージの@command{configure}スクリプトを生成するため,
パッケージが必要とする,または利用可能なシステムの特徴をテストする
Autoconfマクロの呼び出しを含んでいる,@file{configure.ac}と呼ばれるファ
イルを作成してください.Autoconfマクロには,多くの特徴を調査するものは
すでに存在しています.それら関する記述は,@ref{Existing Tests}を参照し
てください.ほとんどのその他の特徴に対しては,カスタムチェックを生成す
るAutoconfのテンプレートマクロを使用することが可能です.それらに関する
詳細は,@ref{Writing Tests}を参照してください.特にトリッキーな,また
は専門的な特徴に対して,@file{configure.ac}に,若干の手作りのシェルコ
マンドを含める必要もあるでしょう.@command{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 process 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 @command{configure}'').  Using @file{configure.ac} is now
@c preferred.
@c 
Autoconfのこれまでのバージョンでは,名前@file{configure.in}を勧めてい
ましたが,それは曖昧で(このファイルを処理するために必要なツールは,拡
張子では分かりません),@file{config.h.in}などで(@samp{.in}は
``@command{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 @file{configure.ac}
@end menu

@node Shell Script Compiler
@c @subsection A Shell Script Compiler
@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: @command{configure}
@c must run on all those systems, and thus @command{configure} must limit itself
@c to their lowest common denominator of features.
@c 
Autoconfが解決する問題は,世界が混乱しているということです.結局,全て
の異なる種類のシステムでパッケージのコンパイルを簡単にするために
Autoconfを使用しますが,それを極端に嫌う人も中にはいます.Autoconf自身
は,これらの差を価値あるものとして扱います.@command{configure}をこれ
らの全てのシステムで実行する必要があり,そのため,@command{configure}
には,機能的にそれらの最小公倍数に制限する必要があります.

@c Naturally, you might then think of shell scripts; who needs
@c @command{autoconf}?  A set of properly written shell functions is enough to
@c make it easy to write @command{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 
通常,シェルスクリプトを考えるでしょう.@command{autoconf}が必要でしょ
うか?正しく書かれたシェル関数の組み合わせで,手で@command{configure} 
スクリプトを書くことを十分に簡単にします.ああ!残念ながら,シェル関数
は最小公倍数ではありません.そのため,関数を定義しそれを十回使用したい
ところで,その本体を十回コピーする必要があるでしょう.

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

@c How does @command{autoconf} perform this task?
@c 
どのようにして,@command{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 
可能性としては明らかに二つあります.新しい言語を作成すること,または既
存のものを拡張することです.前者は非常に魅力的です.あらゆる最適化が簡
単に実装可能で,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 @command{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}の最上位層です.
そのため,マクロを展開するものとして@command{autoconf}を実装することが
最も便利になっています.マクロ呼び出しをマクロの本体で置換し,最終的に
ピュアな@code{sh}スクリプトを生成しながら,テキスト入力で@dfn{マクロ展
開(macro expansion)}を繰り返し実行するプログラムです.Autoconfマクロの
展開に専念して実装する代わりに,M4のような既存の一般的な目的を持つマク
ロ言語を使用し,M4マクロの組み合わせとして拡張部分を実装する方が自然で
す.


@node Autoconf Language
@c @subsection The Autoconf Language
@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{全てのリテラル文字列の引数に対して二重で引用符を使用す
ること}は良い考えです.

@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の構成物の一つを,今では理解できるでしょう
@enddots{}第一の規則は,@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にありましたが,それを使用しない
でください!)さて,より詳しく見てみましょう.もう一方では,第一引数は
リテラルとして理解され,そのためそれは引用符で二重に囲む必要があります.

@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}で引用符で``正しく''囲まれているものは,実際には
三組の引用符が足りないことに気付くでしょう!それにもかかわらず,可読性
のため,リテラルを二重に引用符で囲むことは,このマニュアルでは必要なと
ころでのみ使用されます.

@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 
オプションの引数を受け入れるマクロもあり,それはこのドキュメントでは
(引用符の文字を使用して混乱しないように),@ovar{arg}として表現します.
空のままにしたり,明示的に引数を空にするために@samp{[]}を使用したり,
単純に後置されるカンマを省略したりすることが可能です.以下の三行は等価
となります.

@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 @command{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}では,単独行にそれぞれのマクロ呼び出しを書くことが
最善です.ほとんどのマクロは,余分な改行を加えません.それらは,コマン
ドを終端するためのマクロ呼び出しの後の改行に依存しています.このアプロー
チでは,生成された@command{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
@c @subsection Standard @file{configure.ac} Layout
@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 @command{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})ていて,
@command{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
@c Autoconf requirements
@c @code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
@c information on the package
@c checks for programs
@c checks for libraries
@c checks for header files
@c checks for types
@c checks for structures
@c checks for compiler characteristics
@c checks for library functions
@c checks for system services
@c @code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
@c @code{AC_OUTPUT}
@c 
Autoconfの必要条件
@code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
パッケージの情報
プログラムの調査
ライブラリの調査
ヘッダファイルの調査
型の調査
構造体の調査
コンパイラの特徴の調査
ライブラリ関数の調査
システムサービスの調査
@code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
@code{AC_OUTPUT}
@end group
@end display


@node autoscan Invocation
@c @section Using @command{autoscan} to Create @file{configure.ac}
@section @file{configure.ac}を作成するために@command{autoscan}を使用する
@cindex @command{autoscan}

@c The @command{autoscan} program can help you create and/or maintain a
@c @file{configure.ac} file for a software package.  @command{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 
@command{autoscan}プログラムは,ソフトウェアパッケージに対する 
@file{configure.ac}ファイルの作成と/または管理に役に立ちます.
@command{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, @command{autoscan} outputs a macro in the wrong order
@c relative to another macro, so that @command{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}に改名する前に,手作業でそれ
を調査する必要があります.恐らくなんらかの調整が必要です.時折
@command{autoscan}は,@command{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 @command{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 
@command{autoscan}は,パッケージのソースファイルで特定のシンボルを見つ
けたときに出力するマクロを決定するため,(Autoconfと一緒にインストール
されている)データファイルも使用します.これらのデータファイルはすべて
同じ書式です.それぞれの行は,シンボル,空白スペース,そしてそのシンボ
ルがある場合に出力するAutoconfマクロから成り立っています.@samp{#}で始
まる行はコメントです.

@c @command{autoscan} accepts the following options:
@c 
@command{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 --include=@var{dir}
@itemx -I @var{dir}
@c Append @var{dir} to the include path.  Multiple invocations accumulate.
@c 
@var{dir}をインクルードパスの後に追加します.複数回の呼び出しで累積さ
れます.

@item --prepend-include=@var{dir}
@item -B @var{dir}
@c Prepend @var{dir} to the include path.  Multiple invocations accumulate.
@c 
@var{dir}をインクルードパスの前に追加します.複数回の呼び出しで累積さ
れます.
@end table

@node ifnames Invocation
@c @section Using @command{ifnames} to List Conditionals
@section 条件をリストアップするため@command{ifnames}を使用する
@cindex @command{ifnames}

@c @command{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, @command{ifnames} can thus help you figure out what its
@c @command{configure} needs to check for.  It may help fill in some gaps in a
@c @file{configure.ac} generated by @command{autoscan} (@pxref{autoscan
@c Invocation}).
@c 
@command{ifnames}は,ソフトウェアパッケージに対する@file{configure.ac} 
を書くとき役に立つはずです.それは,Cプリプロセッサの条件式でパッケー
ジが既に使用している識別子を出力します.パッケージが既に移植性に対して
準備されている場合,@command{ifnames}は@command{configure}で調査するこ
とが必要なものを理解することに役く立つはずです.それは
@command{autoscan}が生成した@file{configure.ac}とのギャップを埋める役
にも立つかもしれません(@pxref{autoscan Invocation}).

@c @command{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 
@command{ifnames}は,コマンドラインで指名されたすべてのCソースファイル
を(無い場合は標準入力から)走査し,これらのファイルに現れる@code{#if}, 
@code{#elif},@code{#ifdef},または@code{#ifndef}ディレクティブの,す
べての識別子をソートしたリストを標準出力に書き出します.それは,識別子
があるファイルの空白で分離されたリストに続いて,一行にぞれぞれの識別子
を出力します.

@noindent
@c @command{ifnames} accepts the following options:
@c 
@command{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
@c @section Using @command{autoconf} to Create @command{configure}
@section @command{configure}を作成するため@command{autoconf}を使用する
@cindex @command{autoconf}

@c To create @command{configure} from @file{configure.ac}, run the
@c @command{autoconf} program with no arguments.  @command{autoconf} processes
@c @file{configure.ac} with the M4 macro processor, using the
@c Autoconf macros.  If you give @command{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 @command{configure}.  If you give
@c @command{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}から@command{configure}を作成するために,
@command{autoconf}プログラムを引数無しで実行してください.
@command{autoconf}は,Autoconfマクロを使用しながら,M4マクロプロセッサ
を用いて@file{configure.ac}を処理します.@command{autoconf}に引数を与
えている場合,@file{configure.ac}の代わりにそのファイルを読み,
@command{configure}の代わりに,標準出力にコンフィグレーションスクリプ
トを書き出します.@command{autoconf}に引数@option{-}を与えた場合,
@file{configure.ac}の代わりに標準入力から読み込み,標準出力にコンフィ
グレーションスクリプトを書き出します.

@c The Autoconf macros are defined in several files.  Some of the files are
@c distributed with Autoconf; @command{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
@c defined in more than one of the files that @command{autoconf} reads, the
@c last definition it reads overrides the earlier ones.
@c 
Autoconfマクロは,複数のファイルで定義されています.ファイルは,
Autoconfと一緒に配布される物もあります.@command{autoconf}は最初にそれ
を読み込みます.オプションのファイル@file{acsite.m4}を,配布された
Autoconfマクロファイルを含むディレクトリで探し,オプションのファイル
@file{aclocal.m4}はカレントディレクトリで探します.これらのファイルは,
サイトやパッケージのAutoconfマクロ定義を含めることが可能です(詳細は,
@pxref{Writing Autoconf Macros}).一つ以上のファイルで定義されているマ
クロを@command{autoconf}が読み込む場合,最後の定義がそれ以前の定義に優
先します.

@c @command{autoconf} accepts the following options:
@c 
@command{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 --force
@itemx -f
@c Remake @file{configure} even if newer than its input files.
@c 
入力ファイルより@file{configure}が新しい場合でも,それを再生成します.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Append @var{dir} to the include path.  Multiple invocations accumulate.
@c 
@var{dir}をインクルードパスの後に追加します.複数回の呼び出しで累積されます.

@item --prepend-include=@var{dir}
@item -B @var{dir}
@c Prepend @var{dir} to the include path.  Multiple invocations accumulate.
@c 
@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.  Passing @samp{-W @var{category}} will actually behave as if
@c you had passed @samp{--warnings=syntax,$WARNINGS,@var{category}}.  If
@c you want to disable the defaults and @code{WARNINGS}, but (for example)
@c enable the warnings about obsolete constructs, you would use @option{-W
@c none,obsolete}.
@c 
@samp{syntax}に関する警告はデフォルトで利用可能で,カンマで分けられた
カテゴリリストの環境変数@code{WARNINGS}は尊重されます.@samp{-W
@var{category}}を渡すことで,
@samp{--warnings=syntax,$WARNINGS,@var{category}}が渡されたかのように
動作します.デフォルトと@code{WARNINGS}を利用不可能にしたいが,(例えば) 
時代遅れの構成物についての警告は利用可能にしたい場合,@option{-W
none,obsolete}を使用してください.

@cindex Back trace
@cindex Macro invocation stack
@c Because @command{autoconf} uses @command{autom4te} behind the scenes, it
@c displays a back trace for errors, but not for warnings; if you want
@c them, just pass @option{-W error}.  @xref{autom4te Invocation}, for some
@c examples.
@c 
@command{autoconf}はバックグラウンドで@command{autom4te}を使用するので,
それはエラーのバックトレースを表示しますが,警告については行ないません.
そうしたい場合,@option{-W error}のみを渡してください.いくつかの例は,
@xref{autom4te Invocation}.

@item --trace=@var{macro}[:@var{format}]
@itemx -t @var{macro}[:@var{format}]
@c Do not create the @command{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 
@command{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 @ref{autom4te Invocation}, for details on the @var{format}.
@c 
@var{format}は,必要な場合は改行をともなう通常の文字列と,いくつかの特
殊なエスケープコードです.デフォルトは@samp{$f:$l:$n:$%}です.
@var{format}の詳細は,@ref{autom4te Invocation}を参照してください.

@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}.  For instance, to find the list of variables that
@c are substituted, use:
@c 
@file{configure.ac}ファイルの内容を調査する必要があることもよくありま
すが,自分で解析することは,非常に脆くエラーを起こしやすいものです.
@file{configure.ac}をスキャンするために,@option{--trace}を信頼してみ
てください.例えば,置換される変数のリストを見つけるため,以下のように
してみてください.

@example
@group
$ @kbd{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
$ @kbd{cat configure.ac}
AC_DEFINE(This, is, [an
[example]])
$ @kbd{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
$ @kbd{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 their parsing (for instance when no single
@c character is suitable as a separator):
@c 
長い@var{separator}は,複雑な構想の可読性を改善したり,解析を簡単にす
るために使用可能です(例えば,分離文字に適した単一文字が無いときです).

@example
@group
$ @kbd{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
@c @section Using @command{autoreconf} to Update @command{configure} Scripts
@section @command{configure}スクリプトを更新するため@command{autoreconf}を使用する
@cindex @command{autoreconf}

@c Installing the various components of the @acronym{GNU} Build System can be
@c tedious: running @command{autopoint} for Gettext, @command{automake} for
@c @file{Makefile.in} etc.@: in each directory.  It may be needed either
@c because some tools such as @command{automake} have been updated on your
@c system, or because some of the sources such as @file{configure.ac} have
@c been updated, or finally, simply in order to install the @acronym{GNU} Build
@c System in a fresh tree.
@c 
@acronym{GNU}ビルドシステムの様々なコンポーネントをインストールするこ
とは退屈なものです.それは,Gettextに対する@command{autopoint},
@file{Makefile.in} や@command{automake}等を,それぞれのディレクトリで
実行することを意味します.@command{automake}のようなツールが更新された
り,@file{configure.ac}のようなソースが更新されたり,ただ単純に
@acronym{GNU}ビルドシステムを新しいツリーにインストールするためだけで
も,そうすることが必要になるかもしれません.

@c @command{autoreconf} runs @command{autoconf}, @command{autoheader},
@c @command{aclocal}, @command{automake}, @command{libtoolize}, and
@c @command{autopoint} (when appropriate) repeatedly to update the
@c @acronym{GNU} Build System in the specified directories and their
@c subdirectories (@pxref{Subdirectories}).  By default, it only remakes
@c those files that are older than their sources.
@c 
@command{autoreconf}は,指定されたディレクトリとそのサブディレクトリ
(@pxref{Subdirectories})で,@acronym{GNU}ビルドシステムを更新するため
に,@command{autoconf},@command{autoheader},@command{aclocal},
@command{automake},@command{libtoolize},そして(適切なときは)
@command{autopoint}を繰り返し実行します.デフォルトで,ソースファイル
より古いファイルだけが再生成されます.

@c If you install a new version of some tool, you can make
@c @command{autoreconf} remake @emph{all} of the files by giving it the
@c @option{--force} option.
@c 
新しいバージョンのツールをインストールした場合,@command{autoreconf}に
@option{--force}オプションを与えることで,@emph{すべての}ファイルを再
生成することが可能です.

@c @xref{Automatic Remaking}, for @file{Makefile} rules to automatically
@c remake @command{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 
ソースファイルを変更したとき,@command{configure}スクリプトを自動的に
再生成する@file{Makefile}ルールについては,@xref{Automatic Remaking}. 
その方法は,コンフィギュレーションヘッダテンプレートのタイムスタンプを
正確に処理しますが,@option{--autoconf-dir=@var{dir}}や
@option{--localdir=@var{dir}}を渡しません.

@noindent
@c @command{autoreconf} accepts the following options:
@c 
@command{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 @command{autoreconf} runs
@c @command{autoconf} (and @command{autoheader}, if appropriate).
@c 
@command{autoreconf}が@command{autoconf}(と適切な場合は
@command{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 Install the missing auxiliary files in the package.  By default, files
@c are copied; this can be changed with @option{--symlink}.
@c 
パッケージの足りない補助ファイルをインストールします.デフォルトで,ファ
イルはコピーされます.@option{--symlink}で変更することも可能です.

@c This option triggers calls to @samp{automake --add-missing},
@c @samp{libtoolize}, @samp{autopoint}, etc.
@c 
このオプションは,@samp{automake --add-missing},@samp{libtoolize},
@samp{autopoint}等を呼び出すきっかけにもなります.

@item --symlink
@itemx -s
@c When used with @option{--install}, install symbolic links to the missing
@c auxiliary files instead of copying them.
@c 
@option{--install}とともに使用されるとき,足りない補助ファイルをコピー
する代わりに,シンボリックリンクを配置します.

@item --make
@itemx -m
@c When the directories were configured, update the configuration by
@c running @samp{./config.status --recheck && ./config.status}, and then
@c run @samp{make}.
@c 
ディレクトリがコンフィグレーションされるとき,@samp{./config.status
--recheck && ./config.status}を実行してコンフィグレーションを更新し,
@samp{make}を実行します.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Append @var{dir} to the include path.  Multiple invocations accumulate.
@c 
@var{dir}をインクルードパスの後に追加します.複数回の呼び出しで累積さ
れます.

@item --prepend-include=@var{dir}
@item -B @var{dir}
@c Prepend @var{dir} to the include path.  Multiple invocations accumulate.
@c 
@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).
@c 
(実際にはカンマで分離されているリストになっている)@var{category}に関連
する警告を報告します.

@table @samp
@item cross
@c related to cross compilation issues.
@c 
クロスコンパイルの問題に関連するもの.

@item obsolete
@c report the uses of obsolete constructs.
@c 
時代遅れの構成物の使用を報告.

@item portability
@c portability issues
@c 
移植性の問題.

@item syntax
@c dubious syntactic 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

@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.  Passing @samp{-W @var{category}} will actually behave as if
@c you had passed @samp{--warnings=syntax,$WARNINGS,@var{category}}.  If
@c you want to disable the defaults and @code{WARNINGS}, but (for example)
@c enable the warnings about obsolete constructs, you would use @option{-W
@c none,obsolete}.
@c 
@samp{syntax}の警告はデフォルトで利用可能で,カンマでカテゴリを分類し
たリストとなっている環境変数@code{WARNINGS}は尊重されます.@samp{-W
@var{category}}を渡すと,実際には
@samp{--warnings=syntax,$WARNINGS,@var{category}}を渡したかのように動
作します.デフォルトのものと@code{WARNINGS}を利用不可能にし,(例えば) 
時代遅れの構成物に関する警告を利用可能にしたい場合@option{-W
none,obsolete}を使用してください.
@end table


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

@node Setup
@c @chapter Initialization and Output Files
@chapter 出力ファイルの初期化

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

@menu
* Initializing configure::      Option processing etc.
* Notices::                     Copyright, version numbers in @command{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 on the configuration
* Subdirectories::              Configuring independent packages together
* Default Prefix::              Changing the default installation prefix
@end menu

@node Initializing configure
@c @section Initializing @command{configure}
@section @command{configure}の初期化

@c Every @command{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 
すべての@command{configure}スクリプトファイルでは,他の何よりも前に,
@code{AC_INIT}を呼び出す必要があります.そのほかに必要なマクロは 
@code{AC_OUTPUT}だけです(@pxref{Output}).

@defmac AC_INIT (@var{package}, @var{version}, @ovar{bug-report}, @ovar{tarname})
@acindex INIT
@c Process any command-line arguments and perform various initializations
@c and verifications.
@c 
あらゆるコマンドライン引数を処理し,様々な初期化と検証を実行します.

@c Set the name of the @var{package} and its @var{version}.  These are
@c typically used in @option{--version} support, including that of
@c @command{configure}.  The optional argument @var{bug-report} should be
@c the email to which users should send bug reports.  The package
@c @var{tarname} differs from @var{package}: the latter designates the full
@c package name (e.g., @samp{GNU Autoconf}), while the former is meant for
@c distribution tar ball names (e.g., @samp{autoconf}).  It defaults to
@c @var{package} with @samp{GNU } stripped, lower-cased, and all characters
@c other than alphanumerics and underscores are changed to @samp{-}.
@c 
@var{package}の名前とその@var{version}を設定します.これらは通常,
@command{configure}に含まれる@option{--version}のサポートで使用されま
す.オプションの引数@var{bug-report-address}は,ユーザがバグレポートを
送る電子メールアドレスにすべきです.パッケージの@var{tarname}は
@var{package}とは異なります.後者はパッケージの完全な名前を示します(例
えば,@samp{GNU Autoconf})が,前者は配布物のtar ballの名前(例えば,
@samp{autoconf})を意味します.デフォルトは@var{package}から@samp{GNU }
を取り除き,小文字にし,そして英数文字以外を全て@samp{-}にしたものです.

@c It is preferable that the arguments of @code{AC_INIT} be static, i.e.,
@c there should not be any shell computation, but they can be computed by
@c M4.
@c 
@code{AC_INIT}の引数は静的にすることが望ましく,すなわちシェルで演算し
て求めるべきではありませんが,M4で演算してもかまいません.

@c The following M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables
@c (e.g., @code{PACKAGE_NAME}), and preprocessor symbols (e.g.,
@c @code{PACKAGE_NAME}) are defined by @code{AC_INIT}:
@c 
以下のM4マクロ(例えば,@code{AC_PACKAGE_NAME})は,@code{AC_INIT}によっ
て,出力変数(例えば,@code{PACKAGE_NAME})を出力し,プリプロセッサシン
ボル(例えば,@code{PACKAGE_NAME})を定義します.

@table @asis
@item @code{AC_PACKAGE_NAME}, @code{PACKAGE_NAME}
@acindex PACKAGE_NAME
@ovindex PACKAGE_NAME
@cvindex PACKAGE_NAME
@c Exactly @var{package}.
@c 
そのまま@var{package}になります.

@item @code{AC_PACKAGE_TARNAME}, @code{PACKAGE_TARNAME}
@acindex PACKAGE_TARNAME
@ovindex PACKAGE_TARNAME
@cvindex PACKAGE_TARNAME
@c Exactly @var{tarname}.
@c 
そのまま@var{tarname}になります.

@item @code{AC_PACKAGE_VERSION}, @code{PACKAGE_VERSION}
@acindex PACKAGE_VERSION
@ovindex PACKAGE_VERSION
@cvindex PACKAGE_VERSION
@c Exactly @var{version}.
@c 
そのまま@var{version}になります.

@item @code{AC_PACKAGE_STRING}, @code{PACKAGE_STRING}
@acindex PACKAGE_STRING
@ovindex PACKAGE_STRING
@cvindex PACKAGE_STRING
@c Exactly @samp{@var{package} @var{version}}.
@c 
そのまま@samp{@var{package} @var{version}}になります.

@item @code{AC_PACKAGE_BUGREPORT}, @code{PACKAGE_BUGREPORT}
@acindex PACKAGE_BUGREPORT
@ovindex PACKAGE_BUGREPORT
@cvindex PACKAGE_BUGREPORT
@c Exactly @var{bug-report}.
@c 
そのまま@var{bug-report}になります.
@end table
@end defmac


@node Notices
@c @section Notices in @command{configure}
@section @command{configure}の注意事項

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

@c FIXME: AC_PREREQ should not be here
@defmac AC_PREREQ (@var{version})
@acindex 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 @command{configure} is earlier
@c than @var{version}, print an error message to the standard error output
@c and do not create @command{configure}.  For example:
@c 
使用しているAutoconfのバージョンが十分新しいことを保証します. 
@command{configure}の作成に使用されるAutoconfのバージョンが,
@var{version}以前の場合,標準エラー出力にエラーメッセージを出力し,
@command{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})
@acindex COPYRIGHT
@cindex Copyright Notice
@c State that, in addition to the Free Software Foundation's copyright on
@c the Autoconf macros, parts of your @command{configure} are covered by the
@c @var{copyright-notice}.
@c 
AutoconfマクロへのFree Software Foundationの著作権に加えて,
@command{configure}について@var{copyright-notice}でカバーしたい部分を
宣言してください.

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


@defmac AC_REVISION (@var{revision-info})
@acindex REVISION
@cindex Revision
@c Copy revision stamp @var{revision-info} into the @command{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 @command{configure}
@c without @acronym{RCS} or @acronym{CVS} changing it when you check in
@c @command{configure}.  That way, you can determine easily which revision of
@c @file{configure.ac} a particular @command{configure} corresponds to.
@c 
リビジョンスタンプ@var{revision-info}を,ドル記号やダブルクォートを削
除して@command{configure}スクリプトにコピーします.このマクロは,
@command{configure}をチェックインしたときに@acronym{RCS}や
@acronym{CVS}がリビジョンスタンプを変えなくても,@file{configure.ac}か
ら@command{configure}にそれを書き込みます.そうすることで,特定の
@command{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 @command{configure}:
@c 
これで,@command{configure}は以下のようになります.

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


@node Input
@c @section Finding @command{configure} Input
@section @command{configure}の入力を見つける


@defmac AC_CONFIG_SRCDIR (@var{unique-file-in-source-dir})
@acindex CONFIG_SRCDIR
@c @var{unique-file-in-source-dir} is some file that is in the package's
@c source directory; @command{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}は,パッケージのソースディレクトリにあ
るファイルです.@command{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 @acindex 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 @command{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} を呼び出して,他のシェルスクリプトを探す場所
を@command{configure}に教える必要があるかもしれません.

@defmac AC_CONFIG_AUX_DIR (@var{dir})
@acindex CONFIG_AUX_DIR
@c Use the auxiliary build tools (e.g., @file{install-sh},
@c @file{config.sub}, @file{config.guess}, Cygnus @command{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 @code{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 @command{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
@c @section Outputting Files
@section 出力ファイルを生成する

@c Every Autoconf script, e.g., @file{configure.ac}, should finish by
@c calling @code{AC_OUTPUT}.  That is the macro that generates
@c @file{config.status}, which will create the @file{Makefile}s and any
@c other files resulting from configuration.  This is the only required
@c macro besides @code{AC_INIT} (@pxref{Input}).
@c 
すべてのAutoconfスクリプト,例えば@file{configure.ac}は,
@code{AC_OUTPUT}の呼び出しで終えるべきです.それは,コンフィグレーショ
ンの結果生成される@file{Makefile}とその他のファイルを生成する,
@file{config.status}を生成するマクロです.@code{AC_INIT}以外で唯一必要
とされるマクロです(@pxref{Input}).

@defmac AC_OUTPUT
@acindex 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 perform 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 @command{make} in subdirectories, you should run it using the
@c @code{make} variable @code{MAKE}.  Most versions of @command{make} set
@c @code{MAKE} to the name of the @command{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 @command{make} do not set this variable.  The
@c following macro allows you to use it even with those versions.
@c 
サブディレクトリで@command{make}を実行する場合,@command{make}を変数 
@code{MAKE}を使用して実行すべきです.たいていのバージョンの
@command{make}で,@code{MAKE}に@command{make}プログラムと,それに与え
るあらゆるオプションを追加して設定します.(しかし,その中にコマンドラ
インで設定された値を含まないものも多いので,それらは自動的に渡されませ
ん.) 古いバージョンの@command{make}には,変数を設定しないものもありま
す.以下のマクロでそれらのバージョンでも使用可能になります.

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

@c If you 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
@c @section Performing Configuration Actions
@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 
このセクションでは,実際に何かを作成する基本的な四つのマクロの一般的な
動作を説明します.それらは,@code{AC_CONFIG_FILES},
@code{AC_CONFIG_HEADERS},@code{AC_CONFIG_COMMANDS},そして
@code{AC_CONFIG_LINKS}です.それらは全て以下のものが原型となっています.

@c FIXME: 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 
空白で分けられたタグのリストで,それらは通常,実際に作成されるファイル名
です.

@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 macros @code{AC_CONFIG_FILES} and @code{AC_CONFIG_HEADERS} use
@c special @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} (defaulting to @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}は,絶対パスまたは相対パスを用いたファイル名が可能です.後
者の場合,それは最初にビルドツリーで探され,その後でソースツリーで探さ
れます.

@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}}が
作成されるたびになります.

@c The variables set during the execution of @command{configure} are
@c @emph{not} available here: you first need to set them via the
@c @var{init-cmds}.  Nonetheless the following variables are precomputed:
@c 
@command{configure}の実行中に設定される変数は,ここでは利用@emph{不可
能} です.それらを最初に@var{init-cmds}で設定する必要があります.それ
にもかかわらず,以下の変数は前もって求められます.

@table @code
@item srcdir
@c The path from the top build directory to the top source directory.  This
@c is what @command{configure}'s option @option{--srcdir} sets.
@c 
ビルドディレクトリのトップからソースディレクトリのトップへのパスです.
これは,@command{configure}のオプション@option{--srcdir}で設定されるも
のです.

@item ac_top_srcdir
@c The path from the current build directory to the top source directory.
@c 
現在のビルドディレクトリからソースディレクトリのトップへのパスです.


@item ac_top_builddir
@c The path from the current build directory to the top build directory.
@c It can be empty, or else ends with a slash, so that you may concatenate
@c it.
@c 
現在のビルドディレクトリからビルドディレクトリのトップへのパスです.連
結できるように,それを空にしたり,スラッシュで終えることが可能です.

@item ac_srcdir
@c The path from the current build directory to the corresponding source
@c directory.
@c 
現在のビルドディレクトリから対応するソースディレクトリへのパスです.
@end table

@noindent
@c The @dfn{current} directory refers to the directory (or
@c pseudo-directory) containing the input part of @var{tags}.  For
@c instance, running
@c 
@dfn{現在の(current)}ディレクトリは,@var{tags}の一部の入力が含まれる
ディレクトリ(または疑似ディレクトリ)を参照します.例えば以下を実行した
とします.

@example
AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [@dots{}], [@dots{}])
@end example

@noindent
@c  with @option{--srcdir=../package} produces the following values:
@c 
@option{--srcdir=../package}を用いると,以下の値が生成されます.

@example
# Argument of --srcdir
srcdir='../package'
# Reversing deep/dir
ac_top_builddir='../../'
# Concatenation of $ac_top_builddir and srcdir
ac_top_srcdir='../../../package'
# Concatenation of $ac_top_srcdir and deep/dir
ac_srcdir='../../../package/deep/dir'
@end example

@noindent
@c independently of @samp{in/in.in}.
@c 
@samp{in/in.in}とは無関係です.

@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}の先頭付近に@emph{引用符で囲まれることなく}出力さ
れるシェルコマンドで,@file{config.status}が実行されるたびに(@var{tag}
に関係なく)実行されます.引用符で囲まれていないので,例えば,
@samp{$var}は@code{var}の値として出力されます.@var{init-cmds}は通常,
@var{commands} を実行するために必要な同じ変数を@file{config.status}に
与えるために,@file{configure}で使用されます.

@c You should be extremely cautious in your variable names: all the
@c @var{init-cmds} share the same name space and may overwrite each other
@c in unpredictable ways.  Sorry@enddots{}
@c 
変数名では特に注意すべきです.すべての@var{init-cmds}は同じ名前空間を
共有し,それぞれ予測できない方法で上書きされるかもしれません.残念です
@enddots{}
@end table

@c All these macros can be called multiple times, with different
@c @var{tag}s, of course!
@c 
当然ですが,すべてのこれらのマクロは,異なる@var{tag}を用いると,何回
でも呼び出すことが可能です!


@node Configuration Files
@c @section Creating Configuration Files
@section コンフィグレーションファイルの作成

@c Be sure to read the previous section, @ref{Configuration Actions}.

きちんとこの前の章を読んでくださいね,@ref{Configuration Actions}.

@defmac AC_CONFIG_FILES (@var{file}@dots{}, @ovar{cmds}, @ovar{init-cmds})
@acindex 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 
@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
@c @section Substitutions in Makefiles
@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 @command{configure} will create a @file{Makefile} in that directory.
@c To create a @file{Makefile}, @command{configure} performs a simple variable
@c substitution, replacing occurrences of @samp{@@@var{variable}@@} in
@c @file{Makefile.in} with the value that @command{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 @command{configure}.  To make @command{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 
コンパイルされたりインストールされたりするものを含んでいる,配布物のそ
れぞれのサブディレクトリには,@command{configure}がそのディレクトリに
@file{Makefile}を作成するためのファイル@file{Makefile.in}を配置すべき
です.@file{Makefile}を作成するために,@file{Makefile.in}の
@samp{@@@var{variable}@@}を@command{configure}が決定したその変数の値に
置換しながら,@command{configure}は単純な変数の代入を行います.このよ
うにして出力ファイルに代入される変数は,@dfn{出力変数(output
variable)}と呼ばれます.それらは@command{configure}で設定される普通の
シェル変数です.@command{configure}が特定の変数を出力ファイルに代入す
るように,変数名を引数として@code{AC_SUBST}マクロを呼び出す必要があり
ます.他の変数に対する@samp{@@@var{variable}@@}が変化することはありま
せん.@code{AC_SUBST}を用いた出力変数の作成方法の詳細は,@xref{Setting
Output Variables}.

@c A software package that uses a @command{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 
@command{configure}スクリプトを使用しているソフトウェアパッケージは,
ファイル@file{Makefile.in}と一緒に配布すべきですが,@file{Makefile}は
配布すべきではありません.つまり,ユーザはコンパイルする前にローカルシ
ステムに対して,正しくパッケージをコンフィグレーションする必要がありま
す.

@c @xref{Makefile Conventions,, Makefile Conventions, standards, The
@c @acronym{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 @acronym{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
@c @subsection Preset Output Variables
@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 @command{configure} runs, the default value is set
@c when you call @code{AC_PROG_CC} (or empty if you don't).  @command{configure}
@c uses this variable when compiling programs to test for C features.
@c 
Cコンパイラに対する,デバッグと最適化のオプションです.
@command{configure}を実行するときに環境変数で設定されていない場合,
@code{AC_PROG_CC}を呼び出すときにデフォルト値が設定されます(そうでない
場合は空になります).Cの特徴をテストするためのプログラムをコンパイルす
るとき,@command{configure}はこの変数を使用します.
@end defvar

@defvar configure_input
@ovindex configure_input
@c A comment saying that the file was generated automatically by
@c @command{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 
@command{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 @command{configure} in order to be used.
@c 
またその行の存在で,ファイルを編集している人は,@command{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 @command{configure} runs, the default
@c value is empty.  @command{configure} uses this variable when compiling or
@c preprocessing programs to test for C and C++ features.
@c 
ヘッダファイルを探すディレクトリ(@samp{-I@var{dir}})と,Cプリプロセッ
サとCコンパイラに対する,その他の雑多なオプションです.
@command{configure}を実行するときに環境変数で設定されていない場合,デ
フォルト値は空になります. @command{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 @command{configure} runs, the default value is
@c set when you call @code{AC_PROG_CXX} (or empty if you don't).
@c @command{configure} uses this variable when compiling programs to test for
@c C++ features.
@c 
C++コンパイラの,デバッグと最適化のオプションです.@command{configure}
を実行するときに環境変数で設定されていない場合,@code{AC_PROG_CXX}を呼
び出したときにデフォルト値に設定されます(そうでない場合は空になります).
@command{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, @command{configure} replaces @samp{@@DEFS@@} with
@c @option{-DHAVE_CONFIG_H} instead (@pxref{Configuration Headers}).  This
@c variable is not defined while @command{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}が呼
び出されている場合,@command{configure}は@samp{@@DEFS@@}の代わりに 
@samp{-DHAVE_CONFIG_H}に置換します(@pxref{Configuration Headers}).こ
の変数は,@command{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 @command{configure} runs, the default
@c value is set when you call @code{AC_PROG_F77} (or empty if you don't).
@c @command{configure} uses this variable when compiling programs to test for
@c Fortran 77 features.
@c 
Fortran 77コンパイラの,デバッグと最適化オプションです. 
@command{configure}を実行するときに環境変数で設定されていない場合, 
@code{AC_PROG_F77}を呼び出したときデフォルト値に設定されます(そうでな
い場合は空になります).@command{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 @command{configure} runs, the default value is empty.
@c @command{configure} uses this variable when linking programs to test for
@c C, C++ and Fortran 77 features.
@c 
strip(@samp{-s}),パス(@option{-L}),その他のあらゆる雑多なリンカに対
するオプションです.@command{configure}を実行するときに環境変数で設定
されていない場合,デフォルト値は空になります.@command{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}.  @command{configure} uses this variable when linking
@c programs to test for C, C++ and Fortran 77 features.
@c 
リンカに渡す@samp{-l}オプションです.デフォルト値は空ですが,ライブラ
リが見つかり,必要な関数を提供する場合,Autoconfマクロはこの変数に追加
のライブラリを前置するかもしれません.@ref{Libraries}を参照してくださ
い.@command{configure}は,C,C++,そしてFortran 77の特徴をテストする
プログラムのリンク時に,この変数を使用します.
@end defvar

@defvar builddir
@ovindex builddir
@c Rigorously equal to @samp{.}.  Added for symmetry only.
@c 
@samp{.}と厳密に等価です.対称性のために追加されました.
@end defvar

@defvar abs_builddir
@ovindex abs_builddir
@c Absolute path of @code{builddir}.
@c 
@code{builddir}の絶対パスです.
@end defvar

@defvar top_builddir
@ovindex top_builddir
@c The relative path to the top-level of the current build tree.  In the
@c top-level directory, this is the same as @code{builddir}.
@c 
現在のビルドツリーのトップレベルへの相対パスです.トップレベルのディレ
クトリは,ここでは@code{builddir}と同じです.
@end defvar

@defvar abs_top_builddir
@ovindex abs_top_builddir
@c Absolute path of @code{top_builddir}.
@c 
@code{top_builddir}の絶対パスです.
@end defvar

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

@defvar abs_srcdir
@ovindex abs_srcdir
@c Absolute path of @code{srcdir}.
@c 
@code{srcdir}の絶対パスです.
@end defvar

@defvar top_srcdir
@ovindex top_srcdir
@c The relative path to the top-level source code directory for the
@c package.  In the top-level directory, this is the same as @code{srcdir}.
@c 
パッケージのためのソースコードのトップレベルのディレクトリへの相対パス
です.トップレベルのディレクトリは,ここでは@code{srcdir}と同じです.
@end defvar

@defvar abs_top_srcdir
@ovindex abs_top_srcdir
@c Absolute path of @code{top_srcdir}.
@c 
@code{top_srcdir}の絶対パスです.
@end defvar

@node Installation Directory Variables
@c @subsection Installation Directory Variables
@subsection インストールディレクトリの変数

@c The following variables specify the directories where the package will
@c be installed, see @ref{Directory Variables,, Variables for
@c Installation Directories, standards, The @acronym{GNU} Coding
@c Standards}, for more information.  See the end of this section for
@c details on when and how to use these variables.
@c 
以下の変数は,パッケージがインストールされる場所を指定します.詳細は,
@ref{Directory Variables,, Variables for Installation Directories,
standards, The @acronym{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 deliberate 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 @acronym{GNU} coding standards, so that when
@c the user runs:
@c 
以下の動作は,@acronym{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 corresponding to the make-specified prefix.
@c 
@command{configure}に指定されるものとは異なるプレフィクスを指定するこ
とがまだ可能で,その場合に必要があれば,パッケージはmakeで指定されてい
るプレフィクスに対応するように依存性がハードコード化されます.

@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 except in
@c Makefiles.  For instance, instead of trying to evaluate @code{datadir}
@c in @file{configure} and hard-coding 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 
当然のことですが,これらの変数を@file{Makefiles}で使用すべきではありま
せん.例えば,@file{configure}で@code{datadir}を評価する代わりに,
@file{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{.in}, and uses a
@c Makefile snippet similar to:
@c 
同様に,@code{datadir}とその仲間を,シェルスクリプトやその他のファイル
で置換するために,@code{AC_OUTPUT_FILES}に頼るべきではなく,その代わり
に@command{make}にその置換を行なわせてください.例えば,Autoconfは
@samp{.in}で終るシェルスクリプトのテンプレートを配布していて,以下のよ
うな@file{Makefile}の一部を使用しています.

@example
@group
edit = sed \
        -e 's,@@datadir\@@,$(pkgdatadir),g' \
        -e 's,@@prefix\@@,$(prefix),g'
@end group

@group
autoconf: Makefile $(srcdir)/autoconf.in
        rm -f autoconf autoconf.tmp
        $(edit) $(srcdir)/autoconf.in >autoconf.tmp
        chmod +x autoconf.tmp
        mv autoconf.tmp autoconf
@end group

@group
autoheader: Makefile $(srcdir)/autoheader.in
        rm -f autoheader autoheader.tmp
        $(edit) $(srcdir)/autoconf.in >autoheader.tmp
        chmod +x autoheader.tmp
        mv autoheader.tmp autoheader
@end group
@end example

@c Some details are noteworthy:
@c 
注目すべきことがいくつかあります.

@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 likely the
@c variables you use, such as @samp{$(pkgdatadir)}, will contain
@c some.
@c 
@samp{$(pkgdatadir)}のように@samp{/}を含んでいる変数を使用することもあ
るので,@command{sed}の式で@samp{/}を使用しないでください.

@c @item Dependency on @file{Makefile}
@item @file{Makefile}への依存性
@c Since @code{edit} uses values that depend on the configuration specific
@c values (@code{prefix} etc.) and not only on @code{VERSION} and so forth,
@c the output depends on @file{Makefile}, not @file{configure.ac}.
@c 
@code{edit}は,コンフィグレーション特有の値(@code{prefix}等)に依存し,
@code{VERSION}やそれの以前のものには依存しない値を使用するので,出力は
@file{configure.ac}ではなく@file{Makefile}に依存します.

@c @item Separated dependencies and Single Suffix Rules
@item 依存性の分割と単一のサフィックスルール
@c You can't use them!  The above snippet cannot be (portably) rewritten
@c as:
@c 
それらを使用することは不可能です!上記の断片を,(おそらく)以下のように
書き換えることは不可能です.

@example
autoconf autoheader: Makefile
@group
.in:
        rm -f $@@ $@@.tmp
        $(edit) $< >$@@.tmp
        chmod +x $@@.tmp
        mv $@@.tmp $@@
@end group
@end example

@c @xref{Limitations of Make}, for details.
@c 
詳細は,@xref{Limitations of Make}.

@item @samp{$(srcdir)}
@c Be sure to specify the path to the sources, otherwise the package won't
@c support separated builds.
@c 
ソースへのパスを確実に指定し,そうしない場合はパッケージは分割ビルドを
サポートしないでしょう.
@end table


@node Build Directories
@c @subsection Build Directories
@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, @command{make} uses the @code{VPATH} variable to
@c find the files that are in the source directory.  @acronym{GNU} Make
@c and most other recent @command{make} programs can do this.  Older
@c @command{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 
これをサポートするために,@command{make}は,ソースディレクトリにあるファ
イルを見つけるため@code{VPATH}変数を使用します.@acronym{GNU} Makeとそ
の他のほとんどの最近の@command{make}プログラムはこうすることが可能です.
もっと古い@command{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}には,以下
のような二行が必要です.

@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 @command{make} do not do
@c variable substitutions on the value of @code{VPATH}.
@c 
@code{VPATH}の値に変数を代入しない@command{make}のバージョンもあるので, 
@code{VPATH}に他の値,例えば@samp{VPATH = $(srcdir)}を設定しないでくだ
さい.

@c @command{configure} substitutes the correct value for @code{srcdir} when
@c it produces @file{Makefile}.
@c 
@command{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 @command{make} do not set @code{$<} in explicit rules; they
@c expand it to an empty value.
@c 
暗黙のルールを期待して,(@code{VPATH}で見つかる)ソースディレクトリのファ
イルのパス名を展開する@command{make}変数の@code{$<}を使用しないでくだ
さい.(暗黙のルールとは,@file{.c}ファイルから@file{.o}ファイルを作成す
る方法を教える@samp{.c.o}の様なものです.)暗黙のルールで@code{$<}を設定
しないバージョンの@command{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
@c @subsection Automatic Remaking
@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 @acronym{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}を使用すると不必要な差異を生じ,@acronym{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 
この行を直接@file{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
@c @section Configuration Header Files
@section コンフィグレーションヘッダファイル
@cindex Configuration Header
@cindex @file{config.h}

@c When a package contains more than a few tests that define C preprocessor
@c symbols, the command lines to pass @option{-D} options to the compiler
@c can get quite long.  This causes two problems.  One is that the
@c @command{make} output is hard to visually scan for errors.  More
@c seriously, the command lines can exceed the length limits of some
@c operating systems.  As an alternative to passing @option{-D} options to
@c the compiler, @command{configure} scripts can create a C header file
@c containing @samp{#define} directives.  The @code{AC_CONFIG_HEADERS}
@c macro selects this kind of output.  It should be called right after
@c @code{AC_INIT}.
@c 
パッケージに二,三個以上のCプリプロセッサのシンボルのテストが含まれて
いるとき,コマンドラインでコンパイラに渡す@samp{-D}オプションはかなり
長くなります.これは二つの問題があります.一つは,@command{make}の出力
のエラーを探すとき,見て分からなくなることです.更に深刻な問題は,コマ
ンドラインがいくつかのオペレーティングシステムの長さの制限を越えること
です.コンパイラに@samp{-D}オプションを渡す代わりに, 
@command{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{}, @ovar{cmds}, @ovar{init-cmds})
@acindex 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 making some changes in the configuration without needlessly causing
@c object files 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
@c @subsection Configuration Header Templates
@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}, @command{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}がある
システムでは,@command{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 Pay attention that @samp{#undef} is in the first column, and there is
@c nothing behind @samp{HAVE_UNISTD_H}, not even white spaces.  You can
@c then decode the configuration header using the preprocessor directives:
@c 
@samp{#undef}が最初の列にあり,@samp{HAVE_UNISTD_H}の後に空白すらない
ことに注意してください.その後で,プリプロセッサ命令を使用しているコン
フィグレーションヘッダをデコードすることが可能です.

@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.  Similarly with old templates
@c with comments on the same line as the @samp{#undef}.  Anyway, putting
@c comments in preprocessor macros has never been a good idea.
@c 
@samp{#undef}の代わりに@samp{#define}を用いている,古い形式のテンプレー
トの使用は,強く反対します.@samp{#undef}と同じ行にコメントがある古い
テンプレートも同様です.とにかく,プロセッサマクロにコメントを書くのは,
決してよい考えではありません.

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


@node autoheader Invocation
@c @subsection Using @command{autoheader} to Create @file{config.h.in}
@subsection @file{config.h.in}を生成するため@command{autoheader}を使用する
@cindex @command{autoheader}

@c The @command{autoheader} program can create a template file of C
@c @samp{#define} statements for @command{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 
@command{autoheader}プログラムは,@command{configure}が使用するためのC
の@samp{#define}宣言のテンプレートファイルを作成することが可能です.
@file{configure.ac}で@code{AC_CONFIG_HEADERS(@var{file})}を呼び出す場
合,@command{autoheader}は@file{@var{file}.in}を作成します.複数のファ
イルが引数で与えられている場合,最初のファイルを使用します.それ以外の
場合,@command{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} call with a 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 builtin 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}が,それぞれのシンボルに対
して三番目の引数を用いて呼び出されている必要があります(@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 
引数を@command{autoheader}に与えた場合,@file{configure.ac}の代わりに
そのファイルを使用し,@file{config.h.in}の代わりに標準出力にヘッダファ
イルを書き出します.@samp{-}引数を@command{autoheader}に与えた場合,
@file{configure.ac}の代わりに標準入力から読み込み,標準出力にヘッダファ
イルを書き出します.

@c @command{autoheader} accepts the following options:
@c 
@command{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 --verbose
@itemx -v
@c Report processing steps.
@c 
処理しているステップを報告します.

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

@item --force
@itemx -f
@c Remake the template file even if newer than its input files.
@c 
入力ファイルよりテンプレートファイルが新しい場合でも,それを再生成しま
す.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Append @var{dir} to include path.  Multiple invocations accumulate.
@c 
@var{dir}をインクルードパスの後に追加します.複数回の呼び出しで累積さ
れます.

@item --prepend-include=@var{dir}
@item -B @var{dir}
@c Prepend @var{dir} to include path.  Multiple invocations accumulate.
@c 
@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
@c @subsection Autoheader Macros
@subsection autoheaderのマクロ

@c @command{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, @command{autoheader} fails with an error message.
@c 
@command{autoheader}は@file{configure.ac}を調査し,定義されているCプリ
プロセッサシンボルを判定します.それは,@code{AC_CHECK_HEADERS}や
@code{AC_CHECK_FUNCS}等が定義しているシンボルに対するテンプレートを生
成する方法は知っていますが,あらゆる追加のシンボルを@code{AC_DEFINE}し
ている場合,それに対するテンプレートを定義する必要があります.テンプレー
トが無い場合,@command{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})
@acindex AH_VERBATIM
@acindex VERBATIM
@c Tell @command{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 a symbol that can be @code{AC_DEFINE}'d.
@c 
@command{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})
@acindex AH_TEMPLATE
@acindex TEMPLATE
@c Tell @command{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 
@command{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})
@acindex AH_TOP
@acindex TOP
@c Include @var{text} at the top of the header template file.
@c 
@var{text}をヘッダテンプレートファイルの最初に含めます.
@end defmac


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


@node Configuration Commands
@c @section Running Arbitrary Configuration Commands
@section 任意のコンフィグレーションコマンドの実行

@c You can execute arbitrary commands 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{}, @ovar{cmds}, @ovar{init-cmds})
@acindex 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 @command{configure}.  Associate the commands with @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}の終りに実行するシェルコマンドと,
@command{configure}からのあらゆる変数を初期化するためのシェルコマンド
をを追加します.コマンドを@var{tag}に関連付けます.通常,@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})
@acindex OUTPUT_COMMANDS_PRE
@c Execute the @var{cmds} right before creating @file{config.status}.
@c 
@file{config.status}を作成する直前に@var{cmds}を実行します.
@end defmac

@defmac AC_CONFIG_COMMANDS_POST (@var{cmds})
@acindex 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
@c @section Creating Configuration Links
@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 a directory different from the source directory.
@c 
テストの結果によって,対象物へのリンクを作成することが便利だと分かるで
しょう.@code{AC_CONFIG_COMMANDS}を使用することも可能ですが,相対的な
シンボリックリンクを作成することで,パッケージがソースディレクトリとは
異なるディレクトリでビルドされるときに決定することが可能です.

@defmac AC_CONFIG_LINKS (@var{dest}:@var{source}@dots{}, @ovar{cmds}, @ovar{init-cmds})
@acindex 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 if possible, otherwise a copy.  The
@c @var{dest} and @var{source} names should be relative to the top level
@c source or build directory.  This macro is one of the instantiating
@c macros; see @ref{Configuration 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
@c @section Configuring Other Packages in Subdirectories
@section サブディレクトリで他のパッケージをコンフィグレーションする

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

@defmac AC_CONFIG_SUBDIRS (@var{dir} @dots{})
@acindex CONFIG_SUBDIRS
@ovindex subdirs
@c Make @code{AC_OUTPUT} run @command{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}に@command{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, an error is reported: if the
@c subdirectory is optional, write:
@c 
該当する@var{dir}が見つからない場合でもエラーを報告しません.サブディ
レクトリがオプションの場合,以下のように書いてください.

@example
if test -d $srcdir/foo; then
  AC_CONFIG_SUBDIRS(foo)
fi
@end example

@c NB: Yes, below we mean configure.in, not configure.ac.
@c 
@c If a given @var{dir} contains @command{configure.gnu}, it is run instead
@c of @command{configure}.  This is for packages that might use a
@c non-Autoconf script @command{Configure}, which can't be called through a
@c wrapper @command{configure} since it would be the same file on
@c case-insensitive filesystems.  Likewise, if a @var{dir} contains
@c @file{configure.in} but no @command{configure}, the Cygnus
@c @command{configure} script found by @code{AC_CONFIG_AUX_DIR} is used.
@c 
該当する@var{dir}に@file{configure.gnu}が含まれている場合,
@command{configure}の代わりにそれを実行します.これは,Autoconfスクリ
プトではない@command{Configure}を使用しているパッケージに対するもので,
大文字小文字を識別しないファイルシステムでは同じファイルになるので,そ
れを@command{configure}のラッパーとして呼び出すことは不可能です.同様
に,@var{dir}が@file{configure.ac}を含んでいて@command{configure}が無
い場合,@code{AC_CONFIG_AUXDIR}で見つかるCygnusの@command{configure}ス
クリプトが使用されます.

@c The subdirectory @command{configure} scripts are given the same command
@c line options that were given to this @command{configure} script, with minor
@c changes if needed, which include:
@c 
サブディレクトリの@command{configure}スクリプトには,この
@command{configure}スクリプトに与えられたものと同じコマンドラインオプ
ションが渡され,必要場合は少し変更され,変更されるものには以下のものが
含まれます.

@itemize @minus
@item
@c adjusting a relative path for the cache file;
@c 
キャッシュファイルへの相対的なパスを調整.

@item
@c adjusting a relative path for the source directory;
@c 
ソースディレクトリへの相対的なパスを調整.

@item
@c propagating the current value of @code{$prefix}, including if it was
@c defaulted, and if the default values of the top level and of the subdirectory
@c @file{configure} differ.
@c 
デフォルトの場合を含め,現在の@code{$prefix}の値を,トップレベルとサブ
ディレクトリの@file{configure}のデフォルト値が異なっている場合でも伝搬
させます.
@end itemize

@c This macro also sets the output variable @code{subdirs} to the list of
@c directories @samp{@var{dir} @dots{}}.  @file{Makefile} rules can use
@c this variable to determine which subdirectories to recurse into.
@c 
このマクロは,出力変数@code{subdirs}も,ディレクトリのリスト
@samp{@var{dir}@dots{}}に設定します.@file{Makefile}のルールは,この値を
サブディレクトリの定義に再帰的に使用することが可能です.

@c This macro may be called multiple times.
@c 
このマクロは何度でも呼び出し可能です.
@end defmac

@node Default Prefix
@c @section Default Prefix
@section デフォルトプレフィクス

@c By default, @command{configure} sets the prefix for files it installs to
@c @file{/usr/local}.  The user of @command{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 @command{configure}, and when running it.
@c 
@command{configure}はデフォルトで,ファイルをインストールするプレフィ
クスを@file{/usr/local}に設定します.@command{configure}のユーザは,異
なるディレクトリを,@samp{--prefix}と@samp{--exec-prefix}オプションで
選択することが可能です.デフォルトを変更する方法は二つあります.
@command{configure}を作成するときと,実行するときです.

@c Some software packages might want to install in a directory other than
@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})
@acindex 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 @command{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 
ユーザが既にインストールしている関連するプログラムの場所から, 
@command{configure}がインストールプレフィクスを推測すると便利かもしれ
ません.そうしたい場合,@code{AC_PREFIX_PROGRAM}を呼び出します.

@defmac AC_PREFIX_PROGRAM (@var{program})
@acindex 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}, else default the prefix as described above
@c (@file{/usr/local} or @code{AC_PREFIX_DEFAULT}).  For example, if
@c @var{program} is @code{gcc} and the @code{PATH} contains
@c @file{/usr/local/gnu/bin/gcc}, set the prefix to @file{/usr/local/gnu}.
@c 
ユーザが(@samp{--prefix}オプションを使用して)インストールプレフィクス
を指定しない場合,シェルが行うように,@code{PATH}で@var{program}を探し,
その値を推測します.@var{program}が見つかった場合,プレフィクスを
@var{program}を含むディレクトリの親に設定します.そうでない場合,上記
のもの(@file{/usr/local}や@code{AC_PREFIX_DEFAULT})がデフォルトのプレ
フィクスになります.例えば,@var{program}が@code{gcc}で,@code{PATH}が
@file{/usr/local/gnu/bin/gcc} を含んでいる場合,プレフィクスを 
@file{/usr/local/gnu}に設定します.
@end defmac



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

@node Existing Tests
@c @chapter Existing Tests
@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 @command{configure} runs (@pxref{Caching Results}).
@c 
これらのテストは,調査している特徴と見つかったものをユーザに伝えるメッ
セージを出力します.将来,@command{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
@c @section Common Behavior
@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
@c @subsection Standard Symbols
@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
@c succeeds.
@c 
これは,調査が成功した場合,シンボル@samp{HAVE_STRUCT__EXPENSIVEP}を定
義します.


@node Default Includes
@c @subsection Default Includes
@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
@c @section Alternative Programs
@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
@c @subsection Particular Program Checks
@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
@acindex PROG_AWK
@ovindex AWK
@c Check for @code{gawk}, @code{mawk}, @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{gawk} first because that is reported to be the
@c best implementation.
@c 
@code{gawk},@code{mawk},@code{nawk},そして@code{awk}を,この順番で
調査し,最初に見つかったものに出力変数@code{AWK}を設定します.最良の実
装と報告されているので,最初に@code{gawk}を調査します.
@end defmac

@defmac AC_PROG_EGREP
@acindex PROG_EGREP
@ovindex EGREP
@c Check for @code{grep -E} and @code{egrep}, in that order, and set
@c output variable @code{EGREP} to the first one that is found.
@c 
@code{grep -E}と@code{egrep}をこの順番で調査し,最初に見つかったもので
出力変数@code{EGREP}を設定します.
@end defmac

@defmac AC_PROG_FGREP
@acindex PROG_FGREP
@ovindex FGREP
@c Check for @code{grep -F} and @code{fgrep}, in that order, and set
@c output variable @code{FGREP} to the first one that is found.
@c 
@code{grep -F}と@code{fgrep}をこの順番で調査し,最初に見つかったもので
出力変数@code{FGREP}を設定します.
@end defmac

@defmac AC_PROG_INSTALL
@acindex PROG_INSTALL
@ovindex INSTALL
@ovindex INSTALL_PROGRAM
@ovindex INSTALL_DATA
@ovindex INSTALL_SCRIPT
@c Set output variable @code{INSTALL} to the path of a @acronym{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}で@acronym{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 @command{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}を使
用することも可能ですが,@command{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 @command{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 @acronym{BSD}-compatible @code{install} program.
@c 
使用可能な@file{install-sh}のコピーは,Autoconfでインストールされます. 
@code{AC_PROG_INSTALL}を使用する場合,配布物に@file{install-sh}か 
@file{install.sh}を含める必要があり,そうしない場合,
@command{configure} は見つからない旨,エラーメッセージを出力します --- 
たとえシステムに良い @code{install}があってもそうなります.この調査は,
そのファイルをたまたま入れ忘れることを阻止する安全対策で,それは
@acronym{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
@acindex 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}は,(間接的に)こ
のマクロを二回呼び出し,不快な``@code{AC_PROG_LEX} invoked multiple
times'' で始まる警告を生じます.将来のバージョンのAutomakeではこの症状
は修正されるでしょう.それまで,このメッセージを無視してください.
@end defmac

@defmac AC_PROG_LN_S
@acindex 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 in 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
@acindex 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
@acindex 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
@c @subsection Generic Program and File Checks
@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}, @ovar{value-if-not-found}, @ovar{path},  @ovar{reject})
@acindex 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}.
@c 
@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}, @ovar{value-if-not-found}, @ovar{path})
@acindex CHECK_PROGS
@c Check for each program in the whitespace-separated list
@c @var{progs-to-check-for} existing in the @code{PATH}.  If one 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 
空白で区切られたリスト@var{progs-to-check-for}のそれぞれのプログラムが
@code{PATH}に存在するかどうかを調査します.見つかった場合,
@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}, @ovar{value-if-not-found}, @ovar{path})
@acindex 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}, @ovar{value-if-not-found}, @ovar{path})
@acindex CHECK_TOOLS
@c Like @code{AC_CHECK_TOOL}, each of the tools in the list
@c @var{progs-to-check-for} are checked with a prefix of the host type as
@c determined by @code{AC_CANONICAL_HOST}, followed by a dash
@c (@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,
@c set @var{variable} to the name of that program.  If none of the tools in
@c the 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}, @ovar{value-if-not-found}, @ovar{path})
@acindex 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}, @ovar{value-if-not-found}, @ovar{path})
@acindex 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}, @ovar{value-if-not-found}, @ovar{path})
@acindex 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
@c @section Files
@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}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex 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}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex 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
@c @section Library Files
@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}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
@acindex 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 @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}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
@acindex SEARCH_LIBS
@c Search for a library defining @var{function} if it's not already
@c available.  This equates to calling
@c @samp{AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])])} first with
@c no libraries, then for each library listed in @var{search-libs}.
@c 
まだ利用可能ではない,@var{function}を定義しているライブラリを探します.
これは,最初にライブラリ無しで,その後でそれぞれのライブラリを
@var{search-libs}にリストアップしている
@samp{AC_LINK_IFELSE([AC_LANG_CALL([], [@var{function}])])}の呼び出し
と等価です.

@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
@c @section Library Functions
@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
@c @subsection Portability of C Functions
@subsection C関数の移植性

@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 @asis
@item @code{exit}
@c @fuindex exit
@c Did you know that, on some older hosts, @code{exit} returns @code{int}?
@c This is because @code{exit} predates @code{void}, and there was a long
@c tradition of it returning @code{int}.
@c 
古いホストでは,@code{exit}が@code{int}を返すものがあることを御存知で
すか?これは,@code{exit}のほうが@code{void}より時代が古く,@code{int}
を返すという伝統が長い間あったためです.

@item @code{snprintf}
@c @fuindex snprintf
@prindex @code{snprintf}
@c @fuindex vsnprintf
@prindex @code{vsnprintf}
@c The ISO C99 standard says that if the output array isn't big enough
@c and if no other errors occur, @code{snprintf} and @code{vsnprintf}
@c truncate the output and return the number of bytes that ought to have
@c been produced.  Some older systems return the truncated length (e.g.,
@c @acronym{GNU} C Library 2.0.x or @sc{irix} 6.5), some a negative value
@c (e.g., earlier @acronym{GNU} C Library versions), and some the buffer
@c length without truncation (e.g., 32-bit Solaris 7).  Also, some buggy
@c older systems ignore the length and overrun the buffer (e.g., 64-bit
@c Solaris 7).
@c 
ISO C99標準では,出力配列があまり大きくなくその他のエラーが無い場合,
@code{snprintf}と@code{vsnprintf}は出力を切捨て,生成された出力が必要
とするバイト数を返すことになっています.古いシステムでは切り捨てられた
長さを返したり(例えば,@acronym{GNU} Cライブラリ2.0.xや@sc{irix} 6.5),
負の値を返したり(例えば,より古いバージョンの@acronym{GNU} Cライブラリ),
切り捨てられなかったバッファの長さを返したり(例えば32ビットのSolaris
7)します.また,バグの多い古いシステムにはバッファの長さとオーバーラン
を無視するもの(例えば64ビットのSoraris 7)もあります.

@item @code{sprintf}
@c @fuindex sprintf
@prindex @code{sprintf}
@c @fuindex vsprintf
@prindex @code{vsprintf}
@c The ISO C standard says @code{sprintf} and @code{vsprintf} return the
@c number of bytes written, but on some old systems (SunOS 4 for
@c instance) they return the buffer pointer instead.
@c 
ISO Cの標準では,@code{sprintf}と@code{vsprintf}は書き込まれたバイト数
を返すことになっていますが,古いシステム(例えばSunOS 4)ではその代わり
にバッファへのポインタを返すものもあります.

@item @code{sscanf}
@c @fuindex sscanf
@prindex @code{sscanf}
@c On various old systems, e.g., HP-UX 9, @code{sscanf} requires that its
@c input string be writable (though it doesn't actually change it).  This
@c can be a problem when using @command{gcc} since it normally puts
@c constant strings in read-only memory
@c (@pxref{Incompatibilities,Incompatibilities of GCC,,gcc,Using and
@c Porting the @acronym{GNU} Compiler Collection}).  Apparently in some cases even
@c having format strings read-only can be a problem.
@c 
様々な古いシステム,例えばHP-UX 9では,@code{sscanf}は入力文字列が(た
とえそれが実際には変更されなくても)書き込み可能であることを要求します.
これは,@command{gcc}は通常,固定文字列を読み込み専用のメモリに書き込
むので(@pxref{Incompatibilities,Incompatibilities of GCC,,gcc,Using
and Porting the @acronym{GNU} Compiler Collection}),それを使用すると
き問題になるはずです.場合によっては,フォーマット文字列が明らかに読み
込み専用であっても問題になるはずです.

@item @code{strnlen}
@c @fuindex strnlen
@prindex @code{strnlen}
@c @acronym{AIX} 4.3 provides a broken version which produces the
@c following results:
@c 
@acronym{AIX} 4.3は,以下の結果を生成する壊れたバージョンを提供してい
ます.

@example
strnlen ("foobar", 0) = 0
strnlen ("foobar", 1) = 3
strnlen ("foobar", 2) = 2
strnlen ("foobar", 3) = 1
strnlen ("foobar", 4) = 0
strnlen ("foobar", 5) = 6
strnlen ("foobar", 6) = 6
strnlen ("foobar", 7) = 6
strnlen ("foobar", 8) = 6
strnlen ("foobar", 9) = 6
@end example

@item @code{unlink}
@c @fuindex unlink
@prindex @code{unlink}
@c The @acronym{POSIX} spec says that @code{unlink} causes the given file to be
@c removed only after there are no more open file handles for it.  Not all
@c OS's support this behavior 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 
@acronym{POSIX}の仕様では,@code{unlink}は開かれているファイルへのハン
ドルがなくなった後でファイルを削除するように述べられています.全てのOS 
がこの動作をサポートしているわけではありません.そのため,システムが
@code{unlink}を提供している場合でも,開いているファイルに対して呼び出
しても大丈夫だと仮定した移植は不可能です.例えば,Windows 9xとMEでは,
そのような呼び出しは失敗します.@acronym{DOS}は可能ですが,OSが削除し
た後にファイルへの書き込みが終了するので,ファイルシステムが駄目になり
ます.

@item @code{va_copy}
@c @fuindex va_copy
@prindex @code{va_copy}
@c The ISO C99 standard provides @code{va_copy} for copying
@c @code{va_list} variables.  It may be available in older environments
@c too, though possibly as @code{__va_copy} (e.g., @command{gcc} in strict
@c C89 mode).  These can be tested with @code{#ifdef}.  A fallback to
@c @code{memcpy (&dst, &src, sizeof(va_list))} will give maximum
@c portability.
@c 
ISO C99標準では,@code{va_list}をコピーするため@code{va_copy}を提供し
ています.古い環境でも利用可能かもしれませんが,おそらくは
@code{__va_copy}(例えば厳密なC89モード)でしょう.これらは@code{#ifdef}
でテスト可能です.@code{memcpy (&dst, &src, sizeof(va_list))}で代替す
ることで最大の移植性となるでしょう.

@item @code{va_list}
@c @fuindex va_list
@prindex @code{va_list}
@c @code{va_list} is not necessarily just a pointer.  It can be a
@c @code{struct} (e.g., @command{gcc} on Alpha), which means @code{NULL} is
@c not portable.  Or it can be an array (e.g., @command{gcc} in some
@c PowerPC configurations), which means as a function parameter it can be
@c effectively call-by-reference and library routines might modify the
@c value back in the caller (e.g., @code{vsnprintf} in the @acronym{GNU} C Library
@c 2.1).
@c 
@code{va_list}はポインタである必要はありません.@code{struct}(例えば
Alphaの@command{gcc})にすることが可能で,それは@code{NULL}では移植性が
無いことを意味します.配列(例えばPowerPCでコンフィグレーションされた
@command{gcc})も可能で,それは関数のパラメータとして効果的に参照呼び出
しが可能であり,ライブラリルーチンで呼び出しが返す値を修正する可能性が
ある(例えば@acronym{GNU} Cライブラリ2.1の@code{vsnprintf})ことを意味し
ます.

@item Signed @code{>>}
@c Normally the C @code{>>} right shift of a signed type replicates the
@c high bit, giving a so-called ``arithmetic'' shift.  But care should be
@c taken since the ISO C standard doesn't require that behavior.  On those
@c few processors without a native arithmetic shift (for instance Cray
@c vector systems) zero bits may be shifted in, the same as a shift of an
@c unsigned type.
@c 
通常,Cの符号付きの右シフト@code{>>}はハイビットを複製し,いわゆる``算
術''シフトになります.しかし,ISO Cの標準ではその動作を要求していない
ので,注意すべきです.ネイティブの算術シフトが無いプロセッサ(例えば
Crayベクターシステム)では,符号無しのシフトと同様に,ゼロビットがシフ
トインされる可能性があります.
@end table


@node Particular Functions
@c @subsection Particular Function Checks
@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
@acindex FUNC_ALLOCA
@cvindex C_ALLOCA
@cvindex HAVE_ALLOCA_H
@ovindex ALLOCA
@c @fuindex alloca
@prindex @code{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 @acronym{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-@acronym{ANSI} C compilers will ignore it, rather than
@c choke on it.
@c 
@code{alloca}を使用するソースファイルでは,正確に宣言するために,以下
のようなコードで始めるべきです.@acronym{AIX}のバージョンによっては,
@code{alloca}の宣言を,コメントとプリプロセッサディレクティブ以外の,
全ての行の前に書く必要があります.@code{#pragma}ディレクティブは,
@acronym{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
@acindex FUNC_CHOWN
@c @fuindex chown
@prindex @code{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
@acindex FUNC_CLOSEDIR_VOID
@cvindex CLOSEDIR_VOID
@c @fuindex closedir
@prindex @code{closedir}
@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
@acindex FUNC_ERROR_AT_LINE
@c @fuindex error_at_line
@prindex @code{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
@acindex FUNC_FNMATCH
@c @fuindex fnmatch
@prindex @code{fnmatch}
@c If the @code{fnmatch} function conforms to @acronym{POSIX}, define
@c @code{HAVE_FNMATCH}.  Detect common implementation bugs, for example,
@c the bugs in Solaris 2.4.
@c 
@code{fnmatch}関数が@acronym{POSIX}準拠の場合,@code{HAVE_FNMATCH}を定
義します.例えば,Solaris 2.4のバグのような,一般的な実装上のバグを検
出します.

@c Note that for historical reasons, contrary to the other specific
@c @code{AC_FUNC} macros, @code{AC_FUNC_FNMATCH} does not replace a
@c broken/missing @code{fnmatch}.  See @code{AC_REPLACE_FNMATCH} below.
@c 
歴史的な理由のため,それ以外の@code{AC_FUNC}マクロとは反対に,
@code{AC_FUNC_FNMATCH}は壊れていたり見つからなかったりする
@code{fnmatch} を置換しません.以下の@code{AC_REPLACE_FNMATCH}を参照し
てください.
@end defmac

@defmac AC_FUNC_FNMATCH_GNU
@acindex FUNC_FNMATCH_GNU
@c @fuindex fnmatch
@prindex @code{fnmatch}
@c Behave like @code{AC_REPLACE_FNMATCH} (@emph{replace}) but also test
@c whether @code{fnmatch} supports @acronym{GNU} extensions.  Detect common
@c implementation bugs, for example, the bugs in the @acronym{GNU} C
@c Library 2.1.
@c 
@code{AC_REPLACE_FNMATCH}(@emph{置換})のように動作しますが,
@code{fnmatch}が@acronym{GNU}の拡張をサポートするかどうかも調査します.
例えば,@acronym{GNU} Cライブラリ2.1のバグのような,一般的な実装上のバ
グを検出します.
@end defmac

@defmac AC_FUNC_FORK
@acindex FUNC_FORK
@cvindex HAVE_VFORK_H
@cvindex HAVE_WORKING_FORK
@cvindex HAVE_WORKING_VFORK
@cvindex vfork
@c @fuindex fork
@prindex @code{fork}
@c @fuindex vfork
@prindex @code{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
@acindex FUNC_FSEEKO
@cvindex _LARGEFILE_SOURCE
@c @fuindex fseeko
@prindex @code{fseeko}
@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
@acindex FUNC_GETGROUPS
@ovindex GETGROUPS_LIBS
@c @fuindex getgroups
@prindex @code{getgroups}
@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
@acindex FUNC_GETLOADAVG
@cvindex SVR4
@cvindex DGUX
@cvindex UMAX
@cvindex UMAX4_3
@cvindex HAVE_NLIST_H
@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 @fuindex getloadavg
@prindex @code{getloadavg}
@c Check how to get the system load averages.  To perform its tests
@c properly, this macro needs the file @file{getloadavg.c}; therefore, be
@c sure to set the @code{AC_LIBOBJ} replacement directory properly (see
@c @ref{Generic Functions}, @code{AC_CONFIG_LIBOBJ_DIR}).
@c 
システムのロードアベレージを取得する方法を調査します.適切に調査を実行
するため,このマクロはファイル@file{getloadavg.c}が必要です.このため,
適切な置換ディレクトリを@code{AC_LIBOBJ}で確実に設定してください
(@ref{Generic Functions}と,@code{AC_CONFIG_LIBOBJ_DIR}を参照してくだ
さい).

@c If the system has the @code{getloadavg} function, define
@c @code{HAVE_GETLOADAVG}, and set @code{GETLOADAVG_LIBS} to any libraries
@c needed to get that function.  Also add @code{GETLOADAVG_LIBS} to
@c @code{LIBS}.  Otherwise, require an @code{AC_LIBOBJ} replacement for
@c @samp{getloadavg} with source code in @file{@var{dir}/getloadavg.c}, and
@c possibly define several other C preprocessor macros and output
@c variables:
@c 
システムに@code{getloadavg}関数がある場合,@code{HAVE_GETLOADAVG}を定
義し,その関数の使用に必要な全てのライブラリを@code{GETLOADAVG_LIBS}に
設定します.また,@code{GETLOADAVG_LIBS}を@code{LIBS}に加えます.それ
以外の場合,@code{AC_LIBOBJ}で@samp{getloadavg}を
@file{@var{dir}/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{HAVE_NLIST_H}.
@c 
@file{nlist.h}が見つかる場合,@code{HAVE_NLIST_H}を定義します.

@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
@acindex FUNC_GETMNTENT
@cvindex HAVE_GETMNTENT
@c @fuindex getmntent
@prindex @code{getmntent}
@c Check for @code{getmntent} in the @file{sun}, @file{seq}, and @file{gen}
@c libraries, for @sc{irix} 4, PTX, and Unixware, respectively.  Then, if
@c @code{getmntent} is available, define @code{HAVE_GETMNTENT}.
@c 
@sc{irix} 4,PTXと,Unixwareに対し,@file{sun},@file{seq},そして
@file{gen} のライブラリ内の@code{getmntent}をそれぞれ調査します.
@code{getmntent}が利用可能な場合,@code{HAVE_GETMNTENT}を定義します.
@end defmac

@defmac AC_FUNC_GETPGRP
@acindex FUNC_GETPGRP
@cvindex GETPGRP_VOID
@c @fuindex getpgid
@c @fuindex getpgrp
@prindex @code{getpgid}
@prindex @code{getpgrp}
@c Define @code{GETPGRP_VOID} if it is an error to pass 0 to
@c @code{getpgrp}; this is the @acronym{POSIX} behavior.  On older BSD
@c systems, you must pass 0 to @code{getpgrp}, as it takes an argument and
@c behaves like @acronym{POSIX}'s @code{getpgid}.
@c 
@code{getpgrp}に0を渡すとエラーになる場合,@code{GETPGRP_VOID}を定義し
ます.これは@acronym{POSIX}の動作です.古い@acronym{BSD}システムでは,
それは引数をとり@acronym{POSIX}の@code{getpgid}のように動作するので,
@code{getpgrp}に0を渡す必要があります.

@example
#if GETPGRP_VOID
  pid = getpgrp ();
#else
  pid = getpgrp (0);
#endif
@end example

@c 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}が存在するかどうかを全く調査しません.そのよ
うな状況で動作する必要がある場合,@code{getpgrp}に対して最初に
@code{AC_CHECK_FUNC}を呼び出してください.
@end defmac

@defmac AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
@acindex FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
@cvindex LSTAT_FOLLOWS_SLASHED_SYMLINK
@c @fuindex lstat
@prindex @code{lstat}
@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} also incorrectly ignore trailing slashes.
@c 
@code{lstat}が後置されているスラッシュを間違って無視する場合,それ以外
の@code{unlink}のようなsymbolic-link-aware関数も後置されているスラッシュ
を間違って無視すると仮定した方が確実です.

@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
@acindex FUNC_MALLOC
@cvindex HAVE_MALLOC
@cvindex malloc
@c @fuindex malloc
@prindex @code{malloc}
@c If the @code{malloc} function is compatible with the @acronym{GNU} C
@c library @code{malloc} (i.e., @samp{malloc (0)} returns a valid
@c pointer), define @code{HAVE_MALLOC} to 1.  Otherwise define
@c @code{HAVE_MALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
@c @samp{malloc}, and define @code{malloc} to @code{rpl_malloc} so that the
@c native @code{malloc} is not used in the main project.
@c 
@code{malloc}関数が@acronym{GNU} Cライブラリの@code{malloc}と互換性が
ある場合,(すなわち@samp{malloc (0)}が有効なポインタを返す)場合,
@code{HAVE_MALLOC}を1に定義します.それ以外では,@code{HAVE_MALLOC}を0 
に定義し,@code{AC_LIBOBJ}で@samp{malloc}を置換し,ネイティブの
@code{malloc}が中心的なプロジェクトで使用されないように@code{malloc}を
@code{rpl_malloc}で定義するかどうかを尋ねます.

@c Typically, the replacement file @file{malloc.c} should look like (note
@c the @samp{#undef malloc}):
@c 
通常,ファイル@file{malloc.c}の置換は以下のようになります(@samp{#undef
malloc}に注意してください).

@verbatim
#if HAVE_CONFIG_H
# include <config.h>
#endif
#undef malloc

#include <sys/types.h>

void *malloc ();

/* Allocate an N-byte block of memory from the heap.
   If N is zero, allocate a 1-byte block.  */

void *
rpl_malloc (size_t n)
{
  if (n == 0)
    n = 1;
  return malloc (n);
}
@end verbatim
@end defmac

@defmac AC_FUNC_MEMCMP
@acindex FUNC_MEMCMP
@ovindex LIBOBJS
@c @fuindex memcmp
@prindex @code{memcmp}
@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_MBRTOWC
@acindex FUNC_MBRTOWC
@cvindex HAVE_MBRTOWC
@c @fuindex mbrtowc
@prindex @code{mbrtowc}
@c Define @code{HAVE_MBRTOWC} to 1 if the function @code{mbrtowc} and the
@c type @code{mbstate_t} are properly declared.
@c 
関数@code{mbrtowc}と型@code{mbstate_t}が正しく宣言されている場合,
@code{HAVE_MBRTOWC}を1に設定します.
@end defmac

@defmac AC_FUNC_MKTIME
@acindex FUNC_MKTIME
@ovindex LIBOBJS
@c @fuindex mktime
@prindex @code{mktime}
@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
@acindex FUNC_MMAP
@cvindex HAVE_MMAP
@c @fuindex mmap
@prindex @code{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
@acindex 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_REALLOC
@acindex FUNC_REALLOC
@cvindex HAVE_REALLOC
@cvindex realloc
@c @fuindex realloc
@prindex @code{realloc}
@c If the @code{realloc} function is compatible with the @acronym{GNU} C
@c library @code{realloc} (i.e., @samp{realloc (0, 0)} returns a
@c valid pointer), define @code{HAVE_REALLOC} to 1.  Otherwise define
@c @code{HAVE_REALLOC} to 0, ask for an @code{AC_LIBOBJ} replacement for
@c @samp{realloc}, and define @code{realloc} to @code{rpl_realloc} so that
@c the native @code{realloc} is not used in the main project.  See
@c @code{AC_FUNC_MALLOC} for details.
@c 
@code{realloc}関数が@acronym{GNU} Cライブラリの@code{realloc}と互換性
がある場合,(すなわち@samp{realloc (0, 0)}が有効なポインタを返す)場合,
@code{HAVE_REALLOC}を1に定義します.それ以外では,@code{HAVE_REALLOC} 
を0に定義し,@code{AC_LIBOBJ}で@samp{realloc}を置換し,ネイティブの
@code{realloc}が中心的なプロジェクトで使用されないように@code{realloc} 
を@code{rpl_realloc}で定義するかどうかを尋ねます.詳細は
@code{AC_FUNC_MALLOC}を参照してください.
@end defmac

@defmac AC_FUNC_SELECT_ARGTYPES
@acindex FUNC_SELECT_ARGTYPES
@cvindex SELECT_TYPE_ARG1
@cvindex SELECT_TYPE_ARG234
@cvindex SELECT_TYPE_ARG5
@c @fuindex select
@prindex @code{select}
@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
@acindex FUNC_SETPGRP
@cvindex SETPGRP_VOID
@c @fuindex setpgrp
@prindex @code{setpgrp}
@c If @code{setpgrp} takes no argument (the @acronym{POSIX} version), define
@c @code{SETPGRP_VOID}.  Otherwise, it is the @acronym{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}が引数を持たない(@acronym{POSIX}バージョンの)場合,
@code{SETPGRP_VOID}を定義します.それ以外では,@acronym{BSD}バージョン
で,二つのプロセスIDを引数とします.このマクロは@code{setpgrp}の存在を
全く調査しません.その状況で動作する必要がある場合,@code{setpgrp}に対
して最初に@code{AC_CHECK_FUNC}を呼び出してください.
@end defmac

@defmac AC_FUNC_STAT
@defmacx AC_FUNC_LSTAT
@acindex FUNC_STAT
@acindex FUNC_LSTAT
@cvindex HAVE_STAT_EMPTY_STRING_BUG
@cvindex HAVE_LSTAT_EMPTY_STRING_BUG
@c @fuindex stat
@prindex @code{stat}
@c @fuindex lstat
@prindex @code{lstat}
@c Determine whether @code{stat} or @code{lstat} have the bug that it
@c succeeds when given the zero-length file name as 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
@acindex FUNC_SETVBUF_REVERSED
@cvindex SETVBUF_REVERSED
@c @fuindex setvbuf
@prindex @code{setvbuf}
@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}が他とは異なり,第二引数でバッファの型,第三引数でバッファ
ポインタをとる場合,@code{SETVBUF_REVERSED}を定義します.
@end defmac

@defmac AC_FUNC_STRCOLL
@acindex FUNC_STRCOLL
@cvindex HAVE_STRCOLL
@c @fuindex strcoll
@prindex @code{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
@acindex FUNC_STRTOD
@ovindex POW_LIB
@c @fuindex strtod
@prindex @code{strtod}
@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
@acindex FUNC_STRERROR_R
@cvindex HAVE_STRERROR_R
@cvindex HAVE_DECL_STRERROR_R
@cvindex STRERROR_R_CHAR_P
@c @fuindex strerror_r
@prindex @code{strerror_r}
@c If @code{strerror_r} is available, define @code{HAVE_STRERROR_R}, and if
@c it is declared, define @code{HAVE_DECL_STRERROR_R}.  If it returns a
@c @code{char *} message, define @code{STRERROR_R_CHAR_P}; otherwise it
@c returns an @code{int} error number.  The Thread-Safe Functions option of
@c @acronym{POSIX} requires @code{strerror_r} to return @code{int}, but
@c many systems (including, for example, version 2.2.4 of the @acronym{GNU} C
@c Library) return a @code{char *} value that is not necessarily equal to
@c the buffer argument.
@c 
@code{strerror_r}が利用可能な場合は@code{HAVE_STRERROR_R}を定義し,そ
れが宣言されている場合,@code{HAVE_DECL_STRERROR_R}を定義します.それ
が@code{char *}のメッセージを返す場合,@code{STRERROR_R_CHAR_P}を定義
します.それ以外では@code{int}のエラーナンバーを返します.
@acronym{POSIX}では@code{strerror_r}が@code{int}を返すように要求してい
ますが,多くのシステムのスレッドセーフな関数のオプション(例えば
@acronym{GNU} Cライブラリのバージョン2.2.4を含む)は,バッファ引数に等
しい必要が無い@code{char *} の値を返します.
@end defmac

@defmac AC_FUNC_STRFTIME
@acindex FUNC_STRFTIME
@cvindex HAVE_STRFTIME
@c @fuindex strftime
@prindex @code{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_STRNLEN
@acindex FUNC_STRNLEN
@cvindex HAVE_STRNLEN
@c @fuindex strnlen
@prindex @code{strnlen}
@c If the @code{strnlen} function is not available, or is buggy (like the one
@c from @acronym{AIX} 4.3), require an @code{AC_LIBOBJ} replacement for it.
@c 
@code{strnlen}が利用不可能な場合や(@acronym{AIX} 4.3のように)バグが多
い場合,@code{AC_LIBOBJ}で置換することを要求します.
@end defmac

@defmac AC_FUNC_UTIME_NULL
@acindex FUNC_UTIME_NULL
@cvindex HAVE_UTIME_NULL
@c @fuindex utime
@prindex @code{utime}
@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
@acindex FUNC_VPRINTF
@cvindex HAVE_VPRINTF
@cvindex HAVE_DOPRNT
@c @fuindex vprintf
@prindex @code{vprintf}
@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

@defmac AC_REPLACE_FNMATCH
@acindex REPLACE_FNMATCH
@c @fuindex fnmatch
@prindex @code{fnmatch}
@c If the @code{fnmatch} function does not conform to @acronym{POSIX} (see
@c @code{AC_FUNC_FNMATCH}), ask for its @code{AC_LIBOBJ} replacement.
@c 
@code{fnmatch}関数が@acronym{POSIX}準拠でない場合
(@code{AC_FUNC_FNMATCH}を参照してください),それを@code{AC_LIBOBJ}で置
換するかどうかを尋ねます.

@c The files @file{fnmatch.c}, @file{fnmatch_loop.c}, and @file{fnmatch_.h}
@c in the @code{AC_LIBOBJ} replacement directory are assumed to contain a
@c copy of the source code of @acronym{GNU} @code{fnmatch}.  If necessary,
@c this source code is compiled as an @code{AC_LIBOBJ} replacement, and the
@c @file{fnmatch_.h} file is linked to @file{fnmatch.h} so that it can be
@c included in place of the system @code{<fnmatch.h>}.
@c 
@code{AC_LIBOBJ}の置換用ディレクトリのファイル@file{fnmatch.c},
@file{fnmatch_loop.c},そして@file{fnmatch_.h}が,@acronym{GNU}
@code{fnmatch}のソースコードをのコピーを含んでいると想定されます.必要
な場合,このソースコードは@code{AC_LIBOBJ}での置換物としてコンパイルさ
れ,システムの@code{<fnmatch.h>}でインクルードできるように,
@file{fnmatch_.h}が@file{fnmatch.h}にリンクされます.
@end defmac



@node Generic Functions
@c @subsection Generic Function Checks
@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}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex 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{}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex 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

@sp 1

@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 @acronym{POSIX}
@c environment.  Some functions may be missing or unfixable, and your
@c package must be ready to replace them.
@c 
Autoconfは,移植性について苦心してきた人々によって,何年もかけて形作ら
れてきた哲学に従います.特定のファイルの移植性の問題と,
@acronym{POSIX}環境にいるかのような問題とは別物です.関数によっては,
無いものがあったり修正不可能だったりするものもあり,パッケージではそれ
らを置き換える準備が必要になります.

@defmac AC_LIBOBJ (@var{function})
@acindex 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}は追跡不可能なので,
直接@code{LIBOBJS}を変更すべきではありません.
@end defmac

@defmac AC_LIBSOURCE (@var{file})
@acindex 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})
@acindex 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_CONFIG_LIBOBJ_DIR (@var{directory})
@acindex CONFIG_LIBOBJ_DIR
@c Specify that @code{AC_LIBOBJ} replacement files are to be found in
@c @var{directory}, a relative path starting from the top level of the
@c source tree.  The replacement directory defaults to @file{.}, the top
@c level directory, and the most typical value is @file{lib}, corresponding
@c to @samp{AC_CONFIG_LIBOBJ_DIR(lib)}.
@c 
@code{AC_LIBOBJ}で置換するファイルが@var{directory}で見つかるように,
ソースツリーのトップレベルから始まる相対パスを指定します.置換ディレク
トリのデフォルトはトップレベルディレクトリの@file{.}で,最も一般的な値
は@file{lib}で,@samp{AC_CONFIG_LIBOBJ_DIR(lib)}で対応します.

@c @command{configure} might need to know the replacement directory for the
@c following reasons: (i) some checks use the replacement files, (ii) some
@c macros bypass broken system headers by installing links to the
@c replacement headers, etc.
@c 
@command{configure}は以下の理由で,置換ディレクトリを知る必要がないか
もしれません.(i)置換ファイルを使用する調査もあります.(ii)置換ヘッダ
のリンクを導入することで,壊れたシステムヘッダをバイパスするマクロもあ
ります.等々.
@end defmac

@sp 1

@c It is common to merely check for the existence of a function, and ask
@c for its @code{AC_LIBOBJ} replacement if missing.  The following macro is
@c a convenient shorthand.
@c 
@code{AC_LIBOBJ}が無い場合,単に関数の存在を調査し,置換するかどうか尋
ねるだけのことは一般的です.以下のマクロは,便利で手短なものです.

@defmac AC_REPLACE_FUNCS (@var{function}@dots{})
@acindex 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
@c @section Header Files
@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ヘッダファイルの存在を調査します.必要とし
ているヘッダファイルを調査するために特に定義されたマクロがなく,その特
別な特性を調査する必要がない場合,一般的なヘッダファイルチェックマクロ
の一つを使用することが可能です.

@menu
* Header Portability::          Collected knowledge on common headers
* Particular Headers::          Special handling to find certain headers
* Generic Headers::             How to find other headers
@end menu

@node Header Portability
@c @subsection Portability of Headers
@subsection ヘッダの移植性

@c This section tries to collect knowledge about common headers, and the
@c problems they cause.  By definition, this list will always require
@c additions.  Please help us keeping it as complete as possible.
@c 
このセクションでは,一般的なヘッダとそれらの問題に関する知識を正しくし
てみたいと思います.定義上,以下のリストは常なる追加を必要とします.可
能な限り完全に保つ手助けをお願いします.

@table @asis
@c @item @file{inttypes.h} vs.@: @file{stdint.h}
@item @file{inttypes.h}対@file{stdint.h}
@c Paul Eggert notes that: ISO C 1999 says that @file{inttypes.h} includes
@c @file{stdint.h}, so there's no need to include @file{stdint.h}
@c separately in a standard environment.  Many implementations have
@c @file{inttypes.h} but not @file{stdint.h} (e.g., Solaris 7), but I don't
@c know of any implementation that has @file{stdint.h} but not
@c @file{inttypes.h}.  Nor do I know of any free software that includes
@c @file{stdint.h}; @file{stdint.h} seems to be a creation of the committee.
@c 
Paul Eggertのメモ:ISO C 1999では,@file{inttypes.h}は@file{stdint.h}
をインクルードするので,標準的な環境では@file{stdint.h}を個別にインク
ルードする必要な無いことになっています.多くの実装では,
@file{inttypes.h}はありますが@file{stdint.h}はありませんし(例えば,
Solaris 7),@file{stdint.h}があって@file{inttypes.h}が無いと言う実装は
知りません.また,@file{stdint.h}をインクルードしているフリーソフトウェ
アも知りません.@file{stdint.h}は,委員会で作成されたようです.
@end table


@node Particular Headers
@c @subsection Particular Header Checks
@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
@acindex 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
@acindex 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
@acindex HEADER_STAT
@acindex STAT_MACROS_BROKEN
@c If the macros @code{S_ISDIR}, @code{S_ISREG}, etc.@: 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_STDBOOL
@acindex HEADER_STDBOOL
@cvindex HAVE_STDBOOL_H
@cvindex HAVE__BOOL
@c If @file{stdbool.h} exists and is conformant to C99, define
@c @code{HAVE_STDBOOL_H} to 1; if the type @code{_Bool} is defined, define
@c @code{HAVE__BOOL} to 1.  To fulfill the C99 requirements, your
@c @file{system.h} should contain the following code:
@c 
@file{stdbool.h}が存在し,それがC99に準拠している場合,
@code{HAVE_STDBOOL_H}を1に定義します.型@code{_Bool}が定義されている場
合,@code{HAVE__BOOL}を1に定義します.C99の要求を満たすため,
@file{system.h}には以下のコードを含めるべきです.

@verbatim
#if HAVE_STDBOOL_H
# include <stdbool.h>
#else
# if ! HAVE__BOOL
#  ifdef __cplusplus
typedef bool _Bool;
#  else
typedef unsigned char _Bool;
#  endif
# endif
# define bool _Bool
# define false 0
# define true 1
# define __bool_true_false_are_defined 1
#endif
@end verbatim
@end defmac


@defmac AC_HEADER_STDC
@acindex HEADER_STDC
@cvindex STDC_HEADERS
@c Define @code{STDC_HEADERS} if the system has @acronym{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 @acronym{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 @acronym{ANSI} C requires.
@c 
システムに@acronym{ANSI} Cヘッダファイルが存在する場合,
@code{STDC_HEADERS}を定義します.特にこのマクロは,@file{stdlib.h},
@file{stdarg.h},@file{string.h},そして@file{float.h}を調査し,システ
ムにそれらが存在している場合は,おそらく@acronym{ANSI} Cヘッダーファイ
ルの残りも存在します.同様に,このマクロは@file{string.h}が
@code{memchr}を宣言(他の@code{mem}関数もおそらく存在)しているかどうか,
@file{stdlib.h}が@code{free}を宣言(@code{malloc}や他の関連する関数もお
そらく存在)しているかどうか,そして,@file{ctype.h}マクロが,
@acronym{ANSI} Cが要求するハイビットセット文字でも動作するかどうかを調
査します.

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

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

@example
AC_HEADER_STDC
AC_CHECK_FUNCS(strchr memcpy)
@end example

@noindent
@c then, in your code, you can use 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 @acronym{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 
@acronym{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
@acindex HEADER_SYS_WAIT
@cvindex HAVE_SYS_WAIT_H
@c If @file{sys/wait.h} exists and is compatible with @acronym{POSIX}, 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 @acronym{BSD} @code{union wait} instead
@c of @code{int} to store a status value.  If @file{sys/wait.h} is not
@c @acronym{POSIX} compatible, then instead of including it, define the
@c @acronym{POSIX} macros with their usual interpretations.  Here is an
@c example:
@c 
@file{sys/wait.h}が存在して,@acronym{POSIX}と互換性がある場合, 
@code{HAVE_SYS_WAIT_H}を定義します.非互換性は,@file{sys/wait.h}が存
在しない場合や,ステータスの値を保存するため,@code{int}の代わりに古い
@acronym{BSD}の@code{union wait}使用する場合に生じます.
@file{sys/wait.h}が@acronym{POSIX}と互換性がない場合,それをインクルー
ドする代わりに,それらの通常の解釈を用いて@acronym{POSIX}のマクロを定
義してください.例えば以下のようにします.

@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 @acronym{POSIX} systems.  If there is no @file{unistd.h}, it is definitely
@c not a @acronym{POSIX} system.  However, some non-@acronym{POSIX} systems do
@c have @file{unistd.h}.
@c 
@file{unistd.h}が@acronym{POSIX}システムに含まれている場合,
@code{_POSIX_VERSION}が定義されます.@file{unistd.h}が無い場合,明らか
に@acronym{POSIX}システムではありません.しかし,@file{unistd.h}を持つ
@acronym{POSIX}ではないシステムもあります.

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

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

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

@defmac AC_HEADER_TIME
@acindex 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} 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{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
@acindex HEADER_TIOCGWINSZ
@cvindex GWINSZ_IN_SYS_IOCTL
@c FIXME: I need clarifications from Jim.
@c 
@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
@c @subsection Generic Header Checks
@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 header
@c as well as find out whether it is present, you have to write your own
@c test for it (@pxref{Writing Tests}).
@c 
これらのマクロは,``特定の''テストマクロでカバーされていない,システム
ヘッダファイルを見つけるために使用されます.その存在を見つけるだけでな
く,ヘッダの内容を調査する必要がある場合,そのために独自のテストを書く
必要があります(@pxref{Writing Tests}).

@defmac AC_CHECK_HEADER (@var{header-file}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex CHECK_HEADER
@c If the system header file @var{header-file} is compilable, 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 For compatibility issues with older versions of Autoconf, please read
@c below.
@c 
古いバージョンのAutoconfとの互換性の問題は,以下を読んでください.
@end defmac

@defmac AC_CHECK_HEADERS (@var{header-file}@dots{}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex 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
@c @var{action-if-found} is given, it is additional shell code to execute
@c when one of the header files 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 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 For compatibility issues with older versions of Autoconf, please read
@c below.
@c 
古いバージョンのAutoconfとの互換性の問題は,以下を読んでください.
@end defmac

@c Previous versions of Autoconf merely checked whether the header was
@c accepted by the preprocessor.  This was changed because the old test was
@c inappropriate for typical uses.  Headers are typically used to compile,
@c not merely to preprocess, and the old behavior sometimes accepted
@c headers that clashed at compile-time.  If you need to check whether a
@c header is preprocessable, you can use @code{AC_PREPROC_IFELSE}
@c (@pxref{Running the Preprocessor}).
@c 
以前のバージョンのAutoconfは,ヘッダがプリプロセッサに適合しているかど
うかを,単純に調査していました.古いテストは,代表的な使用に対して不適
切であるため変更されました.ヘッダは通常コンパイルで使用され,プリプロ
セスでは滅多に使用されませんし,古い動作では,コンパイル時にだめになる
ヘッダを受け入れることもありました.ヘッダがプリプロセス可能かどうかを
調査する必要がある場合,@code{AC_PREPROC_IFELSE}を使用することが可能で
す(@pxref{Running the Preprocessor}).

@c This scheme, which improves the robustness of the test, also requires
@c that you make sure that headers that must be included before the
@c @var{header-file} be part of the @var{includes}, (@pxref{Default
@c Includes}).  If looking for @file{bar.h}, which requires that
@c @file{foo.h} be included before if it exists, we suggest the following
@c scheme:
@c 
このテストの耐性を高める手法は,@var{header-file}の前にインクルードす
る必要があるヘッダが,@var{includes}にあることも要求します
(@pxref{Default Includes}).@file{foo.h}が存在する場合,その前でインク
ルードされる必要がある@file{bar.h}を探す場合,以下の手法を提案します.

@verbatim
AC_CHECK_HEADERS([foo.h])
AC_CHECK_HEADERS([bar.h], [], [],
[#if HAVE_FOO_H
# include <foo.h>
# endif
])
@end verbatim

@node Declarations
@c @section Declarations
@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_COMPILE_IFELSE} (@pxref{Running the Compiler}).
@c 
以下のマクロは,変数と関数の宣言を調査します.必要なシンボルを調査する
ために特別なマクロが定義されていない場合,一般的なマクロ
(@pxref{Generic Declarations}を使用することが可能で,より複雑なテスト
に対しては,@code{AC_COMPILE_IFELSE}を使用してもかまいません
(@pxref{Running the Compiler}).

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

@node Particular Declarations
@c @subsection Particular Declaration Checks
@subsection 特定の宣言の調査

@c There are no specific macros for declarations.
@c 
宣言を調査する特別なマクロはありません.

@node Generic Declarations
@c @subsection Generic Declaration Checks
@subsection 一般的な宣言の調査

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

@defmac AC_CHECK_DECL (@var{symbol}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex 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}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex 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
void *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 
究極の状態でのみ二番目のカテゴリに分類されます.ファイルがコンフィグレー
ションされずに使用されている場合か,コンフィグレーション時に使用されて
いる場合のいずれかです.ほとんどの場合はこれまでの方法で十分です.
@end defmac


@node Structures
@c @section Structures
@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 macros
@c (@pxref{Generic Structures}) or, for more complex tests, you may use
@c @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}).
@c 
以下のマクロは,特定のCの構造体の存在を調査します.必要なメンバーの調
査するために定義されている特定のマクロが無い場合,一般的な構造体メンバー
のマクロを使用したり(@pxref{Generic Structures}),より複雑なテストに対
しては,@code{AC_COMPILE_IFELSE}を使用してもかまいません
(@pxref{Running the Compiler}).

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

@node Particular Structures
@c @subsection Particular Structure Checks
@subsection 特定の構造体の調査

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

@defmac AC_STRUCT_ST_BLKSIZE
@acindex 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
@acindex 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
@acindex 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
@acindex 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
@acindex 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
@c @subsection Generic Structure Checks
@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}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex 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}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex 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
@c @section Types
@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
@c @subsection Particular Type Checks
@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
@acindex 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_MBSTATE_T
@acindex TYPE_MBSTATE_T
@cvindex mbstate_t
@c Define @code{HAVE_MBSTATE_T} if @code{<wchar.h>} declares the
@c @code{mbstate_t} type.  Also, define @code{mbstate_t} to be a type if
@c @code{<wchar.h>} does not declare it.
@c 
@code{<wchar.h>}で@code{mbstate_t}型が宣言されている場合,
@code{HAVE_MBSTATE_T}を定義します.また,@code{<wchar.h>}で宣言されて
いない場合,型として@code{mbstate_t}を定義します.
@end defmac

@defmac AC_TYPE_MODE_T
@acindex 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
@acindex 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
@acindex 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
@acindex 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
@acindex 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
@acindex 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
@c @subsection Generic Type Checks
@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}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex CHECK_TYPE
@c Check whether @var{type} is defined.  It may be a compiler builtin type
@c or defined by the @var{includes} (@pxref{Default Includes}).
@c 
@var{type}が定義されているかどうかを調査します.コンパイラ組み込みの型
や,@var{includes}(@pxref{Default Includes})で定義されている可能性があ
ります.
@end defmac


@defmac AC_CHECK_TYPES (@var{types}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex 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
@c @section Compilers and Preprocessors
@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 @file{.c} files have been excluded, typically
@c to @samp{o} if Unix, @samp{obj} if Win32.
@c 
それらは,@file{.c}ファイルが除外された後で,コンパイラ出力のベースと
なる出力変数@code{OBJEXT}も定義し,通常,Unixでは@samp{o}でWin32では
@samp{obj}に定義されますます.

@c If the compiler being used does not produce executables, the tests 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
* Specific Compiler Characteristics::  Some portability issues
* Generic Compiler Characteristics::  Language independent tests
* C Compiler::                  Checking its characteristics
* C++ Compiler::                Likewise
* Fortran 77 Compiler::         Likewise
@end menu

@node Specific Compiler Characteristics
@c @subsection Specific Compiler Characteristics
@subsection 特定のコンパイラの特徴

@c Some compilers exhibit different behaviors.
@c 
コンパイラによっては異なる動作を示すものもあります.

@table @asis
@item Static/Dynamic Expressions
@c Autoconf relies on a trick to extract one bit of information from the C
@c compiler: using negative array sizes.  For instance the following
@c excerpt of a C source demonstrates how to test whether @samp{int}s are 4
@c bytes long:
@c 
Autoconfは,Cコンパイラからの情報の1ビットを抽出するトリックをあてにし
ます.負の配列の大きさを使用します.例えば,以下のCソースの引用で,
@samp{int}が4バイト長かどうかをテストする方法を説明します.

@example
int
main (void)
@{
  static int test_array [sizeof (int) == 4 ? 1 : -1];
  test_array [0] = 0
  return 0;
@}
@end example

@noindent
@c To our knowledge, there is a single compiler that does not support this
@c trick: the HP C compilers (the real one, not only the ``bundled'') on
@c HP-UX 11.00:
@c 
知っている限りでは,このトリックをサポートしないコンパイラは一つです.
それはHP-UX 11.00のHPのCコンパイラです(``バンドル''されているものだけ
ではなく,実際のものもそうです).

@example
$ @kbd{cc -c -Ae +O2 +Onolimit conftest.c}
cc: "conftest.c": error 1879: Variable-length arrays cannot \
    have static storage.
@end example

@c Autoconf works around this problem by casting @code{sizeof (int)} to
@c @code{long} before comparing it.
@c 
Autoconfは,比較する前に@code{sizeof (int)}を@code{long}にキャストする
ことで,この問題を解決します.
@end table

@node Generic Compiler Characteristics
@c @subsection Generic Compiler Characteristics
@subsection 一般的なコンパイラの特徴

@defmac AC_CHECK_SIZEOF (@var{type}, @ovar{unused}, @dvar{includes, default-includes})
@acindex 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}, be 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 @subsection C Compiler Characteristics
@subsection Cコンパイラの特徴

@c The following macros provide ways to find and exercise a C Compiler.
@c There are a few constructs that ought to be avoided, but do not deserve
@c being checked for, since they can easily be worked around.
@c 
以下のマクロは,Cコンパイラを探し使用する方法を提供します.避けたほう
が良い構成物もいくつかありますが,それらは容易に回避可能なので,調査に
使用しているなら無くしてしまうこともないでしょう.

@table @asis
@c @item Don't use lines containing solitary backslashes
@item 単一のバックスラッシュを含んでいる行を使用しないでください
@c They tickle a bug in the HP-UX C compiler (checked on HP-UX 10.20,
@c 11.00, and 11i).  Running the compiler on the following source,
@c 
それらは,HP-UX Cコンパイラにあるバグにはめられます(HP-UXの10.20,
11.00,そして11iで調査しました).以下のソースをコンパイラで実行します.

@example
#ifdef __STDC__
/\
* A comment with backslash-newlines in it. %@{ %@} *\
\
/
char str[] = "\\
" A string with backslash-newlines in it %@{ %@} \\
"";
char apostrophe = '\\
\
'\
';
#endif
@end example

@noindent
@c yields
@c 
以下のようになります.

@example
@error{}cpp: "foo.c", line 13: error 4048: Non-terminating comment at end of file.
@error{}cpp: "foo.c", line 13: error 4033: Missing #endif at end of file.
@end example

@noindent
@c Removing the lines with solitary backslashes solves the problem.
@c 
単一のバックスラッシュを用いた行を削除することで,問題を解決できます.

@c @item Don't compile several files at once if output matters to you
@item 出力が問題になる場合,一度に複数のファイルをコンパイルしないでください
@c Some compilers, such as the HP's, reports the name of the file it is
@c compiling @emph{when} they are several.  For instance:
@c 
HPのようにコンパイラには,ファイルが複数の@emph{とき},コンパイルして
いるファイル名を報告するものもあります.例えば以下のものです.

@example
$ @kbd{cc a.c b.c}
a.c:
b.c:
@end example

@noindent
@c This can cause problems if you observe the output of the compiler to
@c detect failures.  Invoking @samp{cc -c a.c -o a.o; cc -c b.c -o b.o; cc
@c a.o b.o -o c} solves the issue.
@c 
失敗を検出するために,コンパイラの出力を観察する場合,これは問題になる
はずです.@samp{cc -c a.c -o a.o; cc -c b.c -o b.o; cc a.o b.o -o c}で
呼び出すことで問題を解決します.
@end table

@defmac AC_PROG_CC (@ovar{compiler-search-list})
@acindex 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 the C compiler is not in @acronym{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 @acronym{ANSI} C on some system or another.  It
@c considers the compiler to be in @acronym{ANSI} C mode if it handles function
@c prototypes correctly.
@c 
Cコンパイラがデフォルトで@acronym{ANSI} Cモードでない場合,そうするた
めのオプションを出力変数@code{CC}に追加します.このマクロは,様々なシ
ステムで@acronym{ANSI} Cを選択するように,様々なオプションを試します.
関数のプロトタイプを正しく処理する場合,コンパイラが@acronym{ANSI} Cモー
ドだと考えます.

@c After calling this macro you can check whether the C compiler has been
@c set to accept @acronym{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 @acronym{ANSI} C, you can make an un-@acronym{ANSI}fied copy of it by
@c using the program @code{ansi2knr}, which comes with Automake.  See also
@c under @code{AC_C_PROTOTYPES} below.
@c 
このマクロを呼び出した後,Cコンパイラが@acronym{ANSI} Cを受け入れるよ
うに設定されているかどうかを調査することが可能です.そうでない場合,シェ
ル変数@code{ac_cv_prog_cc_stdc}は@samp{no}に設定されます.ソースコード
を@acronym{ANSI} Cで書いている場合,Automake附属のプログラム
@code{ansi2knr} を使用して,非@acronym{ANSI}fiedされたコピーを作成する
ことが可能です.@code{AC_C_PROTOTYPES}以下も参照してください.

@c If using the @acronym{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 @acronym{GNU} C compiler (@option{-O2} on systems
@c where GCC does not accept @option{-g}), or @option{-g} for other compilers.
@c 
@acronym{GNU} Cコンパイラを使用する場合,シェル変数の@code{GCC}を
@samp{yes}に設定します.出力変数@code{CFLAGS}がいまだ設定されていない
場合,@acronym{GNU} Cコンパイラに対しては@option{-g -O2}に設定し(GCCが 
@samp{-g}を受け入れないシステムは@samp{-O2}),それ以外のコンパイラに対
しては@option{-g}に設定します.
@end defmac

@defmac AC_PROG_CC_C_O
@acindex 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 @acronym{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}がそれと異なっている場
合はその両方を,実際にテストします.一つでも失敗した場合,テストは失敗
します.このマクロは,@acronym{GNU} Makeがデフォルトのコンパイルルール
を選択するように作成されました.
@end defmac


@defmac AC_PROG_CPP
@acindex 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 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_COMPILE_IFELSE} (@pxref{Running the Compiler}) or
@c @code{AC_RUN_IFELSE} (@pxref{Run Time}).
@c 
以下のマクロは,Cコンパイラやマシンアーキテクチャの特徴を調査します.
ここでリストアップされない特徴を調査するために,
@code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler})や
@code{AC_RUN_IFELSE} (@pxref{Run Time})を使用してください.

@defmac AC_C_BACKSLASH_A
@acindex HAVE_C_BACKSLASH_A
@c Define @samp{HAVE_C_BACKSLASH_A} to 1 if the C compiler understands
@c @samp{\a}.
@c 
Cコンパイラが@samp{\a}を理解する場合,@samp{HAVE_C_BACKSLASH_A}を1に定
義します.
@end defmac

@defmac AC_C_BIGENDIAN (@ovar{action-if-true}, @ovar{action-if-false}, @ovar{action-if-unknown})
@acindex C_BIGENDIAN
@cvindex WORDS_BIGENDIAN
@cindex Endianness
@c If words are stored with the most significant byte first (like Motorola
@c and SPARC CPUs), execute @var{action-if-true}.  If words are stored with
@c the least significant byte first (like Intel and VAX CPUs), execute
@c @var{action-if-false}.
@c 
(MotorolaとSPARCのCPUのように)wordが最上位バイトに最初に保存される場合,
@var{action-if-true}を実行します.(IntelとVAXのCPUのように)wordが最下
位バイトに最初に保存される場合,@var{action-if-false}を実行します.

@c This macro runs a test-case if endianness cannot be determined from the
@c system header files.  When cross-compiling, the test-case is not run but
@c grep'ed for some magic values.  @var{action-if-unknown} is executed if
@c the latter case fails to determine the byte sex of the host system.
@c 
システムヘッダファイルからエンディアンを決定不可能な場合,このマクロは
テストケースを実行します.クロスコンパイル時に,テストケースは実行され
ませんが,いくつかのマジック変数を検索します.後者の状況でホストシステ
ムのバイト特性の決定に失敗した場合,@var{action-if-unknown}が実行され
ます.

@c The default for @var{action-if-true} is to define
@c @samp{WORDS_BIGENDIAN}.  The default for @var{action-if-false} is to do
@c nothing.  And finally, the default for @var{action-if-unknown} is to
@c abort configure and tell the installer which variable he should preset
@c to bypass this test.
@c 
@var{action-if-true}のデフォルトは@samp{WORDS_BIGENDIAN}を定義すること
です.@var{action-if-false}のデフォルトは何もしないことです.そして最
後に,@var{action-if-unknown}のデフォルトは,コンフィグレーションを中
断し,インストールしている人に,このテストをバイパスさせるために変数を
前もって定義するよう伝えます.
@end defmac

@defmac AC_C_CONST
@acindex C_CONST
@cvindex const
@c If the C compiler does not fully support the @acronym{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コンパイラが@acronym{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 @command{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 
@command{autoconf}がこの状況を検出した場合,一般的に実際問題としてより
良い結果になるので,それは@code{const}のままにしておきます.しかし,C
コードコンパイルするためにC++コンパイラを使用することは推奨されていま
せんし,サポートもしていません.そして,この状況で問題が生じたインストー
ル者は,CコードをコンパイルするためにGCCのようなCコンパイラを入手すべ
きです.
@end defmac

@defmac AC_C_VOLATILE
@acindex 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 @acronym{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}キーワードは@acronym{ANSI} Cの機能なので,
@code{__STDC__}が定義されているときだけ,@code{volatile}が利用可能だと
期待するかもしれません.しかし,Ultrix 4.3のネイティブコンパイラは
@code{volatile}をサポートとしていますが,@code{__STDC__}を定義しません.
@end defmac

@defmac AC_C_INLINE
@acindex 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
@acindex 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
@acindex C_LONG_DOUBLE
@cvindex HAVE_LONG_DOUBLE
@c If the C compiler supports a working @code{long double} type with more
@c range or precision than the @code{double} type, define
@c @code{HAVE_LONG_DOUBLE}.
@c 
Cコンパイラが,@code{double}の型以上の範囲で動作する@code{long double}
の型をサポートしている場合,@code{HAVE_LONG_DOUBLE}を定義します.
@end defmac

@defmac AC_C_STRINGIZE
@acindex 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プリプロセッサが文字列作成オペレータをサポートする場合,
@code{HAVE_STRINGIZE}を定義します.文字列作成オペレータは@samp{#}と,
以下のようなマクロで見つかります.

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

@defmac AC_C_PROTOTYPES
@acindex C_PROTOTYPES
@cvindex PROTOTYPES
@cvindex __PROTOTYPES
@cvindex PARAMS
@c If function prototypes are understood by the compiler (as determined by
@c @code{AC_PROG_CC}), define @code{PROTOTYPES} and @code{__PROTOTYPES}.
@c 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 
関数のプロトタイプをコンパイラが理解する場合(@code{AC_PROG_CC}で決定さ
れます),@samp{PROTOTYPES}と@code{__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

@c This macro also defines @code{__PROTOTYPES}; this is for the benefit of
@c header files that cannot use macros that infringe on user name space.
@c 
このマクロは,@code{__PROTOTYPES}も定義します.これは,ユーザの名前空
間を侵害するマクロが使用不可能なヘッダファイルの利便性ためです.

@defmac AC_PROG_GCC_TRADITIONAL
@acindex PROG_GCC_TRADITIONAL
@ovindex CC
@c Add @option{-traditional} to output variable @code{CC} if using the
@c @acronym{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 @acronym{GNU} C compiler fix the header files automatically when installed,
@c this is becoming a less prevalent problem.
@c 
使用している@acronym{GNU} Cコンパイラと@code{ioctl}が,
@samp{-traditional}無しでは正確に動作しない場合,出力変数@code{CC}に
@samp{-traditional}を加えます.それは通常,修正されたヘッダファイルが
古いシステムにインストールされていないときに発生します.@acronym{GNU}
Cコンパイラの最近のバージョンは,インストール時に,自動的にヘッダファ
イルを修正するので,これはほとんど問題になりません.
@end defmac


@node C++ Compiler
@c @subsection C++ Compiler Characteristics
@subsection C++コンパイラの特徴


@defmac AC_PROG_CXX (@ovar{compiler-search-list})
@acindex 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++}その後でそれ以外
の名前です).これらの調査がすべて失敗した場合,最後の手段で@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 @acronym{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 @acronym{GNU} C++ compiler (@option{-O2} on
@c systems where G++ does not accept @option{-g}), or @option{-g} for other
@c compilers.
@c 
@acronym{GNU} C++コンパイラを使用している場合,シェル変数@code{GXX}を
@samp{yes}に設定します.出力変数@code{CXXFLAGS}がまだ設定されていない
場合,@acronym{GNU} C++コンパイラに対しては@option{-g -O2}(@samp{-g}を
受け入れないG++のシステムでは@samp{-O2})を設定し,他のコンパイラでは
@samp{-g}を設定します.
@end defmac

@defmac AC_PROG_CXXCPP
@acindex 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 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 @subsection Fortran 77 Compiler Characteristics
@subsection Fortran 77コンパイラの特徴

@defmac AC_PROG_F77 (@ovar{compiler-search-list})
@acindex 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 g77 f90 xlf90)
@end example

@c If using @code{g77} (the @acronym{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}(@acronym{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
@acindex 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_COMPILE_IFELSE}
@c (@pxref{Running the Compiler}) or @code{AC_RUN_IFELSE} (@pxref{Run
@c Time}), 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_COMPILE_IFELSE} (@pxref{Running the
Compiler})や@code{AC_RUN_IFELSE} (@pxref{Run Time})を使用してください.


@defmac AC_F77_LIBRARY_LDFLAGS
@acindex 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のイントリンシックとランタイムライブラリ(Fortran 77
intrinsic and run-time libraries)}に対して,リンカフラグ(例えば
@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, @acronym{GNU} Automake}).
@c 
このマクロは,単一のプログラムや共有ライブラリに,例えば,C++とFortran
77のソースコードを混在させる必要があるとき利用されます(@pxref{Mixing
Fortran 77 With C and C++, , , automake, @acronym{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 (@ovar{action-if-found}, @ovar{action-if-not-found})
@acindex 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 (say) @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, etc.)@: often one
@c prefers to provide one's own @code{main} and skip the Fortran library
@c initializations.  In this case, however, one may still need to provide a
@c dummy @code{MAIN__} routine in order to prevent linking errors on some
@c systems.  @code{AC_F77_DUMMY_MAIN} detects whether any such routine is
@c @emph{required} for linking, and what its name is; the shell variable
@c @code{F77_DUMMY_MAIN} holds this name, @code{unknown} when no solution
@c 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__})に定義します.
@ovar{action-if-not-found}はデフォルトでエラーで終了します.

@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
@acindex 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 (say) @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
@acindex 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, @acronym{GNU}
@c Automake}).
@c 
正しいものが選択できるように,関数名の大文字と小文字の両方のバージョン
を@code{F77_FUNC}に渡していることに注意してください.また,Fortran 77 
のルーチンへの全てのパラメータを,ポインタとして渡していることにも注意
してください(@pxref{Mixing Fortran 77 With C and C++,,, automake,
@acronym{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}, @ovar{shellvar})
@acindex 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
@c @section System Services
@section システムサービス

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

@defmac AC_PATH_X
@acindex 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 the files 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
@acindex 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
@acindex 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 @file{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}の形式の行を用いたスクリプトをサポートするかどうかを調査しま
す.このマクロを実行した後で,@file{configure.ac}のシェルコードは,シェ
ル変数の @code{interpval}を調査することが可能になります.システムで
@samp{#!}がサポートされている場合は@samp{yes},そうでなければ@samp{no} 
を設定します.
@end defmac

@defmac AC_SYS_LARGEFILE
@acindex 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 
@href{http://www.sas.com/standards/large.file/x_open.20Mar96.html,
large-file support}のために用意しています.ホストによっては,大きなファ
イルにアクセスできるプログラムをビルドするため,特別なコンパイラオプショ
ンが必要になります.そのようなオプションを出力変数@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
@acindex 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
@acindex SYS_POSIX_TERMIOS
@cindex POSIX termios headers
@cindex termios POSIX headers
@c Check to see if the POSIX termios headers and functions are available on the
@c system.  If so, set the shell variable @code{ac_cv_sys_posix_termios} to
@c @samp{yes}.  If not, set the variable to @samp{no}.
@c 
@acronym{POSIX} termiosヘッダと関数がシステムで利用可能かどうかを調査
します.その場合は,シェル変数@code{ac_cv_sys_posix_termios}を
@samp{yes}に設定します.それ以外ではその変数を@samp{no}に設定します.
@end defmac

@node UNIX Variants
@c @section UNIX Variants
@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
@acindex AIX
@cvindex _ALL_SOURCE
@c If on @acronym{AIX}, define @code{_ALL_SOURCE}.  Allows the use of some @acronym{BSD}
@c functions.  Should be called before any macros that run the C compiler.
@c 
@acronym{AIX}の場合,@code{_ALL_SOURCE}を定義します.いくつかの
@acronym{BSD}関数の使用を許可します.Cコンパイラを実行するあらゆるマク
ロの前に呼び出すべきです.
@end defmac

@defmac AC_GNU_SOURCE
@acindex GNU_SOURCE
@cvindex _GNU_SOURCE
@c If using the @acronym{GNU} C library, define @code{_GNU_SOURCE}.
@c Allows the use of some @acronym{GNU} functions.  Should be called
@c before any macros that run the C compiler.
@c 
@acronym{GNU} Cライブラリを使用している場合,@code{_GNU_SOURCE}を定義
します.いくつかの@acronym{GNU}の関数が使用可能になります.Cコンパイラ
を実行するマクロの前で呼び出すべきです.
@end defmac

@defmac AC_ISC_POSIX
@acindex ISC_POSIX
@ovindex LIBS
@c For @sc{interactive unix} (@acronym{ISC}), add @option{-lcposix} to output
@c variable @code{LIBS} if necessary for @acronym{POSIX} facilities.  Call this
@c after @code{AC_PROG_CC} and before any other macros that use @acronym{POSIX}
@c interfaces.  @sc{interactive unix} is no longer sold, and Sun says that
@c they will drop support for it on 2006-07-23, so this macro is becoming
@c obsolescent.
@c 
@sc{interactive unix} (@acronym{ISC})に対して,@acronym{POSIX}の機能が
必要な場合,出力変数@code{LIBS}に@option{-lcposix}を追加します.これは
@code{AC_PROG_CC}の後で,@acronym{POSIX}インターフェースを使用するその
他のマクロの前で呼び出してください.@sc{interactive unix}はすでに販売
されておらず,Sunは2006-07-23でサポートを終了することを告げているので,
このマクロは時代遅れになっています.
@end defmac

@defmac AC_MINIX
@acindex 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 @acronym{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と定義します.これで@acronym{POSIX}の機能が使
用可能になります.Cコンパイラを実行するあらゆるマクロの前で呼び出すべ
きです.
@end defmac




@c ========================================================= Writing Tests

@node Writing Tests
@c @chapter Writing Tests
@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 compiler system of the current
@c language (@pxref{Language Choice}).  They do not cache the results of
@c their tests for future use (@pxref{Caching Results}), because they don't
@c know enough about the information they are checking for to generate a
@c cache variable name.  They also do not print any messages, for the same
@c reason.  The checks for particular kinds of features call these macros
@c and do cache their results and print messages about what they're
@c checking for.
@c 
以下のマクロは,現在の言語のコンパイラシステムの出力を調査します
(@pxref{Language Choice}).それらは,キャッシュ変数名を生成するために
調査している情報を十分には知らないので,将来使用するためにテスト結果を
キャッシュしません(@pxref{Caching Results}).同じ理由でメッセージも出
力しません.特定の種類の機能の調査では,これらのマクロを呼び出し,結果
をキャッシュし,そして調査していることに関するメッセージを出力します.

@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
* Language Choice::             Selecting which language to use for testing
* Writing Test Programs::       Forging source files for compilers
* Running the Preprocessor::    Detecting preprocessor symbols
* Running the Compiler::        Detecting language or header features
* Running the Linker::          Detecting library features
* Run Time::                    Testing for run-time features
* Systemology::                 A zoology of operating systems
* Multiple Cases::              Tests for several possible values
@end menu

@node Language Choice
@c @section Language Choice
@section 言語の選択
@cindex Language

@c Autoconf-generated @command{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が生成した@command{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})
@acindex 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 (@ovar{language})
@acindex 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.
# @dots{}
AC_LANG_POP(Fortran 77)
@end example
@end defmac

@defmac AC_REQUIRE_CPP
@acindex 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


@node Writing Test Programs
@c @section Writing Test Programs
@section テストプログラムを書く

@c Autoconf tests follow is common scheme: feeding some program with some
@c input, and most of the time, feeding a compiler with some source file.
@c This section is dedicated to these source samples.
@c 
Autoconfのテストの流れは,共通の手法です.いくつかの入力をいくつかのプ
ログラムに与え,ほとんどの場合,ソースファイルをコンパイラに与えます.
このセクションでは,これらのソースのサンプルを提供します.

@menu
* Guidelines::                  General rules for writing test programs
* Test Functions::              Avoiding pitfalls in test programs
* Generating Sources::          Source program boilerplate
@end menu

@node Guidelines
@c @subsection Guidelines for Test Programs
@subsection テストプログラムのためのガイドライン

@c The most important rule to follow when writing testing samples is:
@c 
テストサンプルを書くときに従うべきもっとも重要な規則は以下のとおりです.

@c @center @emph{Look for realism.}
@center @emph{現実を探してください.}

@c This motto means that testing samples must be written with the same
@c strictness as real programs are written.  In particular, you should
@c avoid ``shortcuts'' and simplifications.
@c 
このモットーは,テストサンプルが現実にかかれるプログラムと同じ厳密さで
書く必要があるということです.特に,``ショートカット''と単純にしたもの
は避けるべきです.

@c Don't just play with the preprocessor if you want to prepare a
@c compilation.  For instance, using @command{cpp} to check if a header is
@c functional might let your @command{configure} accept a header which will
@c cause some @emph{compiler} error.  Do not hesitate checking header with
@c other headers included before, especially required headers.
@c 
コンパイルの準備をしたい場合,プリプロセッサだけで実行しないでください.
例えば,ヘッダが機能することを調査するために@command{cpp}を使用するだ
けでは,@command{configure}が@emph{コンパイラ}のエラーを生じるヘッダを
受け入れるかもしれません.以前にインクルードした他のヘッダ,特に必要と
されるヘッダを用いたヘッダの調査をためらわないでください.

@c Make sure the symbols you use are properly defined, i.e., refrain for
@c simply declaring a function yourself instead of including the proper
@c header.
@c 
使用しているシンボルが,適切に定義されている,すなわち適切なヘッダをイ
ンクルードする代わりに,自分で関数を単純に定義していないことを確かめて
ください.

@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 @acronym{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 @command{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}で始まる名前を与え
てください.@command{configure}スクリプトは,テストプログラム終了後や
スクリプトが中断された場合,@samp{rm -rf conftest*}を実行しクリーンアッ
プします.

@node Test Functions
@c @subsection Test Functions
@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
void *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, be 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 Generating Sources
@c @subsection Generating Sources
@subsection ソースの生成

@c Autoconf provides a set of macros that can be used to generate test
@c source files.  They are written to be language generic, i.e., they
@c actually depend on the current language (@pxref{Language Choice}) to
@c ``format'' the output properly.
@c 
Autoconfは,テストソースファイルを生成するために使用することが可能なマ
クロの組みを提供しています.それらは,一般的な言語で書かれていて,すな
わち,それらは実際に現在の言語(@pxref{Language Choice})に依存して適切
な出力``フォーマット''になっています.


@defmac AC_LANG_CONFTEST (@var{source})
@acindex LANG_CONFTEST
@c Save the @var{source} text in the current test source file:
@c @file{conftest.@var{extension}} where the @var{extension} depends on the
@c current language.
@c 
現在のテストソースファイルに@var{source}のテキストを保存します.
@file{conftest.@var{extension}}の@var{extension}は現在の言語に依存しま
す.

@c Note that the @var{source} is evaluated exactly once, like regular
@c Autoconf macro arguments, and therefore (i) you may pass a macro
@c invocation, (ii) if not, be sure to double quote if needed.
@c 
通常のAutoconfマクロ引数のように,@var{source}は一度だけ評価され,その
ため,(i)マクロ呼び出しに渡してもかまわず,(ii)そうでなければ,必要が
あれば二重に引用符で囲む必要があることに注意してください.
@end defmac

@defmac AC_LANG_SOURCE (@var{source})
@acindex LANG_SOURCE
@c Expands into the @var{source}, with proper definition of the current
@c location (e.g., @samp{#line 1234 "configure"} in C), and definition of
@c all the @code{AC_DEFINE} performed so far.
@c 
現在の場所の(例えば,Cでは@samp{#line 1234 "configure"}) 適切な定義を
用いて,@var{source}に展開し,すべての@code{AC_DEFINE}での定義も実行し
ます.
@end defmac

@c For instance executing (observe the double quotation!):
@c 
例えば,以下を実行します(二重の引用符を守ってください!).

@example
AC_INIT(Autoconf Documentation, @value{VERSION}, bug-autoconf@@gnu.org)
AC_DEFINE([HELLO_WORLD], ["Hello, World\n"])
AC_LANG_CONFTEST(
   [AC_LANG_SOURCE([[const char hw[] = "Hello, World\n";]])])
gcc -E -dD conftest.c -o -
@end example

@noindent
@c results in:
@c 
結果は以下のようになります.

@example
# 1 "conftest.c"
# 1169 "configure"

# 1 "confdefs.h" 1

#define PACKAGE_NAME "Autoconf Documentation"
#define PACKAGE_TARNAME "autoconf-documentation"
#define PACKAGE_VERSION "@value{VERSION}"
#define PACKAGE_STRING "Autoconf Documentation @value{VERSION}"
#define PACKAGE_BUGREPORT "bug-autoconf@@gnu.org"
#define HELLO_WORLD "Hello, World\n"
# 1170 "configure" 2

const char hw[] = "Hello, World\n";
@end example

@defmac AC_LANG_PROGRAM (@var{prologue}, @var{body})
@acindex LANG_PROGRAM
@c Expands into a source file which consists of the @var{prologue}, and
@c then @var{body} as body of the main function (e.g., @code{main} in
@c C).  Since it uses @code{AC_LANG_SOURCE}, the feature of the latter are
@c available.
@c 
@var{prologue}の内容と,@var{body}をmain関数(例えばCの@code{main})とし
てソースファイルに展開します.それは@code{AC_LANG_SOURCE}を使用するの
で,後者の機能は利用可能です.
@end defmac

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

@example
AC_INIT(Autoconf Documentation, @value{VERSION}, bug-autoconf@@gnu.org)
AC_DEFINE([HELLO_WORLD], ["Hello, World\n"])
AC_LANG_CONFTEST(
[AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
                 [[fputs (hw, stdout);]])])
gcc -E -dD conftest.c -o -
@end example

@noindent
@c results in:
@c 
結果は以下のようになります.

@example
# 1 "conftest.c"
# 1169 "configure"

# 1 "confdefs.h" 1

#define PACKAGE_NAME "Autoconf Documentation"
#define PACKAGE_TARNAME "autoconf-documentation"
#define PACKAGE_VERSION "@value{VERSION}"
#define PACKAGE_STRING "Autoconf Documentation @value{VERSION}"
#define PACKAGE_BUGREPORT "bug-autoconf@@gnu.org"
#define HELLO_WORLD "Hello, World\n"
# 1170 "configure" 2

const char hw[] = "Hello, World\n";
int
main ()
@{
fputs (hw, stdout);
  ;
  return 0;
@}
@end example


@defmac AC_LANG_CALL (@var{prologue}, @var{function})
@acindex LANG_CALL
@c Expands into a source file which consists of the @var{prologue}, and
@c then a call to the @var{function} as body of the main function (e.g.,
@c @code{main} in C).  Since it uses @code{AC_LANG_PROGRAMS}, the feature
@c of the latter are available.
@c 
@var{prologue}の内容と,@var{function}の呼び出しをmain関数(例えばCの
@code{main})の本体としてソースファイルに展開します.それは
@code{AC_LANG_SOURCE}を使用するので,後者の機能は利用可能です.

@c This function will probably be replaced in the feature by a version
@c which would enable specifying the arguments.  The use of this macro is
@c not encouraged, as it violates strongly the typing system.
@c 
この関数は,おそらく将来の引数指定が利用可能なバージョンで置換されます.
このマクロは特定のシステムをひどく侵害するので,その使用は推奨しません.
@end defmac


@defmac AC_LANG_FUNC_LINK_TRY (@var{function})
@acindex LANG_FUNC_LINK_TRY
@c Expands into a source file which consists of a pseudo use of the
@c @var{function} as body of the main function (e.g., @code{main} in C): a
@c simple (function pointer) assignment.  Since it uses
@c @code{AC_LANG_PROGRAMS}, the feature of the latter are available.
@c 
main関数(例えばCでは@code{main})の本体として,偽の@var{function}を使用
している内容をソースファイルに展開します.単純な(関数ポインタの)割当で
す.それは@code{AC_LANG_SOURCE}を使用するので,後者の機能は利用可能で
す.

@c As @code{AC_LANG_CALL}, this macro is documented only for completeness.
@c It is considered to be severely broken, and in the future will be
@c removed in favor of actual function calls (with properly typed
@c arguments).
@c 
@code{AC_LANG_CALL}があるので,このマクロは,補完の意味で説明していま
す.ひどく壊れていて,(適切な型の引数を用いた)実際の関数の呼び出しに将
来は変更しようと考えています.
@end defmac

@node Running the Preprocessor
@c @section Running the Preprocessor
@section プリプロセッサの実行

@c Sometimes one might need to run the preprocessor on some source file.
@c @emph{Usually it is a bad idea}, as you typically need to @emph{compile}
@c your project, not merely run the preprocessor on it; therefore you
@c certainly want to run the compiler, not the preprocessor.  Resist to the
@c temptation of following the easiest path.
@c 
いくつかのソースファイルでプリプロセッサを実行する必要があるときもあり
ます.通常はプロジェクトを@emph{コンパイル}する必要があり,プリプロセッ
サを実行する必要があることは滅多に無いので,@emph{そうすることは,普通
は悪い考えです}.そのため,きっとプリプロセッサではなくコンパイラを実
行したいと思うでしょう.安易な道をたどる誘惑に逆らってください.

@c Nevertheless, if you need to run the preprocessor, then use
@c @code{AC_PREPROC_IFELSE}.
@c 
それにもかかわらず,プリプロセッサを実行する必要がある場合,
@code{AC_PREPROC_IFELSE}を使用してください.

@defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
@acindex PREPROC_IFELSE
@c Run the preprocessor of the current language (@pxref{Language Choice})
@c on the @var{input}, run the shell commands @var{action-if-true} on
@c success, @var{action-if-false} otherwise.  The @var{input} can be made
@c by @code{AC_LANG_PROGRAM} and friends.
@c 
@var{input}で現在の言語(@pxref{Language Choice})のプリプロセッサを実行
し,成功したらシェルコマンド@var{action-if-true}を実行し,そうでなけれ
ば@var{action-if-false}を実行します.@var{input}は
@code{AC_LANG_PROGRAM}とその仲間で作成することが可能です.

@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 
このマクロは@code{CPPFLAGS}を使用しますが,@option{-g},@option{-O}な
どは多くのCプリプロセッサで有効なオプションではないので,@code{CFLAGS} 
は使用しません.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.
@c 
予期せぬ異常終了は,通常@code{AC_MSG_FAILURE}で報告します.
@end defmac

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

@example
AC_INIT(Autoconf Documentation, @value{VERSION}, bug-autoconf@@gnu.org)
AC_DEFINE([HELLO_WORLD], ["Hello, World\n"])
AC_PREPROC_IFELSE(
   [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
                    [[fputs (hw, stdout);]])],
   [AC_MSG_RESULT([OK])],
   [AC_MSG_FAILURE([unexpected preprocessor failure])])
@end example

@noindent
@c results in:
@c 
結果は以下のようになります.

@example
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
OK
@end example

@sp 1

@c The macro @code{AC_TRY_CPP} (@pxref{Obsolete Macros}) used to play the
@c role of @code{AC_PREPROC_IFELSE}, but double quotes its argument, making
@c it impossible to use it to ellaborate sources.  You are encouraged to
@c get rid of your old use of the macro @code{AC_TRY_CPP} in favor of
@c @code{AC_PREPROC_IFELSE}, but, in the first place, are you sure you need
@c to run the @emph{preprocessor} and not the compiler?
@c 
マクロ@code{AC_TRY_CPP}(@pxref{Obsolete Macros})は,
@code{AC_PREPROC_IFELSE}の役目を果たすために使用されていましたが,その
引数を二重の引用符で囲んでいるので,精巧なソースで使用することが不可能
でした.マクロ@code{AC_TRY_CPP}の@code{AC_PREPROC_IFELSE}をような古い
使い方を取り除くことも推奨しますが,最初にコンパイラではなく@emph{プリ
プロセッサ}を実行する必要があるのかを確かめることを推奨します.

@defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @var{action-if-found}, @ovar{action-if-not-found})
@acindex EGREP_HEADER
@c If the output of running the preprocessor on the system header file
@c @var{header-file} matches the extended regular expression
@c @var{pattern}, execute shell commands @var{action-if-found}, otherwise
@c execute @var{action-if-not-found}.
@c 
システムヘッダファイル@var{header-file}でのプリプロセッサの実行での出
力が拡張正規表現の@var{pattern}にマッチする場合,シェルコマンド
@var{action-if-found}を実行し,それ以外では@var{action-if-not-found}を
実行します.
@end defmac

@defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex 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 extended 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}でのプリプロセッサの実行での出力が拡張正規表現の
@var{pattern}にマッチする場合,シェルコマンド@var{action-if-found}を実
行し,それ以外では@var{action-if-not-found}を実行します.
@end defmac



@node Running the Compiler
@c @section Running the Compiler
@section コンパイラの実行

@c To check for a syntax feature of the (C, C++, or Fortran 77) compiler,
@c such as whether it recognizes a certain keyword, or simply to try some
@c library feature, use @code{AC_COMPILE_IFELSE} to try to compile a small
@c program that uses that feature.
@c 
特定のキーワードやを認識するかどうかといった,(C,C++,またはFortran
77)コンパイラの構文の特徴を調査するため,また,単純にいくつかのライブ
ラリの特徴を調査するため,それらの特徴を使用している小さなプログラムを
コンパイルしてみるため,@code{AC_COMPILE_IFELSE}を使用してください.

@defmac AC_COMPILE_IFELSE (@var{input}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex COMPILE_IFELSE
@c Run the compiler of the current language (@pxref{Language Choice}) on
@c the @var{input}, run the shell commands @var{action-if-true} on success,
@c @var{action-if-false} otherwise.  The @var{input} can be made by
@c @code{AC_LANG_PROGRAM} and friends.
@c 
現在の言語(@pxref{Language Choice})のコンパイラを@var{input}で実行し,
成功したらシェルコマンド@var{action-if-true}を,それ以外では
@var{action-if-false}を実行します.@var{input}は@code{AC_LANG_PROGRAM} 
やその仲間で作成することが可能です.

@c This macro uses @code{CFLAGS} or @code{CXXFLAGS} if either C or C++ is
@c the currently selected language, as well as @code{CPPFLAGS}, when
@c compiling.  If Fortran 77 is the currently selected language then
@c @code{FFLAGS} will be used when compiling.
@c 
このマクロは,CやC++のいずれか一方が現在の言語として選択されている場合,
@code{CFLAGS}や@code{CXXFLAGS}を使用し,コンパイル時には,同様に
@code{CPPFLAGS}を使用します.Fortran 77が現在の言語として選択されてい
る場合,コンパイル時には@code{FFLAGS}が使用されます.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.  This macro does not try to link; use
@c @code{AC_LINK_IFELSE} if you need to do that (@pxref{Running the
@c Linker}).
@c 
慣習的に,予期せぬ異常終了は@code{AC_MSG_FAILURE}で報告します.このマ
クロはリンクを試みません.そうする必要がある場合,
@code{AC_LINK_IFELSE}を使用してください(@pxref{Running the Linker}).
@end defmac

@node Running the Linker
@c @section Running the Linker
@section リンカの実行

@c To check for a library, a function, or a global variable, Autoconf
@c @command{configure} scripts try to compile and link a small program that
@c uses it.  This is unlike Metaconfig, which by default uses @code{nm} or
@c @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 run-time behavior if needed.  On the other hand,
@c it can be slower than scanning the libraries once, but accuracy is more
@c important than speed.
@c 
ライブラリ,関数,またはグローバル変数を調査するため,Autoconfの
@command{configure}スクリプトは,それを使用している小さなプログラムの
コンパイルとリンクを試みます.これはMetaconfigとは異なり,それはデフォ
ルトで,C ライブラリで関数が利用可能かどうか判定するために@code{nm}や
@code{ar}を使用します.オプションと@code{nm}と@code{ar}の出力の違いと,
標準ライブラリの位置の違いを処理することを避けるので,関数とのリンクを
試みることは,通常,より信頼性が高い方法になります.クロスコンパイルの
コンフィグレーションや,必要な場合は関数の実行時の動作を調査も可能です.
一方,一度のライブラリスキャンより遅くなるはずですが,正確さは時間より
重要です.

@c @code{AC_LINK_IFELSE} 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_LINK_IFELSE}は,関数とグローバル変数に対するテストのため,テ
ストプログラムをコンパイルするために使用されます.ライブラリを調査する 
@code{AC_CHECK_LIB}でも,調査しているライブラリを一時的に@code{LIBS}に
追加したり,小さなプログラムのリンクを試みたりすることで,使用されてい
ます(@pxref{Libraries}).

@defmac AC_LINK_IFELSE (@var{input}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex LINK_IFELSE
@c Run the compiler and the linker of the current language (@pxref{Language
@c Choice}) on the @var{input}, run the shell commands @var{action-if-true}
@c on success, @var{action-if-false} otherwise.  The @var{input} can be made
@c by @code{AC_LANG_PROGRAM} and friends.
@c 
現在の言語(@pxref{Language Choice})のコンパイラとリンカを@var{input}で
実行し,成功したらシェルコマンドの@var{action-if-true}を,それ以外では
@var{action-if-false}を実行します.@var{input}は@code{AC_LANG_PROGRAM} 
やその仲間で作成することが可能です.

@c This macro uses @code{CFLAGS} or @code{CXXFLAGS} if either C or C++ is
@c the currently selected language, as well as @code{CPPFLAGS}, when
@c compiling.  If Fortran 77 is the currently selected language then
@c @code{FFLAGS} will be used when compiling.
@c 
このマクロは,CやC++のいずれか一方が現在の言語として選択されている場合,
@code{CFLAGS}や@code{CXXFLAGS}を使用し,コンパイル時には,同様に
@code{CPPFLAGS}を使用します.Fortran 77が現在の言語として選択されてい
る場合,コンパイル時には@code{FFLAGS}が使用されます.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.  This macro does not try to execute the program;
@c use @code{AC_RUN_IFELSE} if you need to do that (@pxref{Run Time}).
@c 
慣習的に,予期せぬ異常終了は@code{AC_MSG_FAILURE}で報告します.このマ
クロはリンクを試みません.そうする必要がある場合,@code{AC_RUN_IFELSE} 
を使用してください(@pxref{Run Time}).
@end defmac



@node Run Time
@c @section Checking Run Time Behavior
@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_RUN_IFELSE}.  Avoid running test programs if
@c possible, because this prevents people from configuring your package for
@c cross-compiling.
@c 
コンフィグレーション時に実行時の動作を調査する必要が本当にある場合,結
果を決定するテストプログラムを書き,コンパイルして@code{AC_RUN_IFELSE} 
を使用して実行することも可能です.これは,クロスコンパイルでパッケージ
をコンフィグレーションする人々の妨げになるので,可能であれば,テストプ
ログラムの実行は避けてください.

@defmac AC_RUN_IFELSE (@var{input}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{action-if-cross-compiling})
@acindex RUN_IFELSE
@c If @var{program} compiles and links successfully and returns an exit
@c status of 0 when executed, run shell commands @var{action-if-true}.
@c Otherwise, run shell commands @var{action-if-false}.
@c 
@var{program}のコンパイルとリンクが正常終了し,実行時に0の終了ステータ
スが返る場合,シェルコマンド@var{action-if-true}を実行します.それ以外
では,シェルコマンド@var{action-if-false}を実行します.

@c The @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.  This
@c macro uses @code{CFLAGS} or @code{CXXFLAGS}, @code{CPPFLAGS},
@c @code{LDFLAGS}, and @code{LIBS}
@c 
@var{input}は,@code{AC_LANG_PROGRAM}とその仲間で作成することが可能で
す.このマクロは,@code{CFLAGS}や@code{CXXFLAGS},@code{CPPFLAGS},
@code{LDFLAGS},そして@code{LIBS}を使用します.

@c If the compiler being used does not produce executables that run on the
@c system where @command{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, @command{configure} prints
@c an error message and exits.
@c 
使用されるコンパイラが,@command{configure}が実行されているシステムで
実行する実行形式を生成しない場合,テストプログラムは実行されません.オ
プションのシェルコマンド@var{action-if-cross-compiling}が与えられてい
る場合,それらが変わりに実行されます.それ以外の場合,
@command{configure}はエラーメッセージを出力し終了します.

@c In the @var{action-if-false} section, the exit status of the program is
@c available in the shell variable @samp{$?}, but be very careful to limit
@c yourself to positive values smaller than 127; bigger values should be
@c saved into a file by the @var{program}.  Note also that you have simply
@c no guarantee that this exit status is issued by the @var{program}, or by
@c the failure of its compilation.  In other words, use this feature if
@c sadist only, it was reestablished because the Autoconf maintainers grew
@c tired of receiving ``bug reports''.
@c 
@var{action-if-false}セクションでは,プログラムの終了ステータスはシェ
ル変数@samp{$?}で利用可能ですが,127未満の正の値に制限するよう十分注意
してください.大きな値は,@var{program}でファイルに保存すべきです.ま
た,この終了ステータスが@var{program}で,またはそのコンパイルの異常終
了で,生成されることを保証されていないことに注意してください.言い替え
ると,苛められるのが好きな人だけこの機能を使用してください.それは,
Autoconfの管理者が飽き飽きするほど``バグの報告''を受けとることになっ
たので,元に戻しました.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.
@c 
慣習的に,予期せぬ異常終了は@code{AC_MSG_FAILURE}で報告します.
@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_RUN_IFELSE}.  @command{autoconf} prints a
@c warning message when creating @command{configure} each time it
@c encounters a call to @code{AC_RUN_IFELSE} with no
@c @var{action-if-cross-compiling} argument given.  You may ignore the
@c warning, though users will not be able to configure your package for
@c cross-compiling.  A few of the macros distributed with Autoconf
@c produce this warning message.
@c 
クロスコンパイルで実行時のテストが不可能な時は,使用する悲観的なデフォ
ルト値を提供してみてください.オプションの最後の引数を
@code{AC_RUN_IFELSE}に渡すことでこうします.@command{autoconf}は,
@var{action-if-cross-compiling}引数無しで@code{AC_RUN_IFELSE}を呼び出
すごとに,@command{configure}を生成するときに警告メッセージを出力しま
す.警告を無視してもかまいませんが,ユーザはクロスコンパイルでパッケー
ジのコンフィグレーションが不可能になります.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_RUN_IFELSE} that are embedded
@c in other macros, including a few of the ones that come with Autoconf,
@c you can test whether the shell variable @code{cross_compiling} is set to
@c @samp{yes}, and then use an alternate method to get the results instead
@c of calling the macros.
@c 
Autoconfとともに含まれている他のマクロに埋め込まれている,
@code{AC_RUN_IFELSE}の呼び出しに対するデフォルトを提供するため,シェル
変数@code{cross_compiling}が@samp{yes}に設定されているかどうかを調査し,
マクロ呼び出しの代わりに結果を取得するため,代わりの手法を使用してくだ
さい.

@node Systemology
@c @section Systemology
@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 
このセクションは,ドキュメントへのシステムとポインタを紹介することを目
的としています.ユーザが報告する特定の問題を解決するとき役に立つでしょ
う.

@c The @href{http://bhami.com/rosetta.html, Rosetta Stone for Unix}
@c contains a lot of interesting crossed information on various Unices.
@c 
@href{http://bhami.com/rosetta.html, Rosetta Stone for Unix}には,様々
なUnixの興味深い相互的な情報が大量にあります.

@table @asis
@item Darwin
@cindex Darwin
@c Darwin is also known as Mac OS X.  Beware that the file system @emph{can} be
@c case-preserving, but case insensitive.  This can cause nasty problems,
@c since for instance the installation attempt for a package having an
@c @file{INSTALL} file can result in @samp{make install} report that
@c nothing was to be done!
@c 
DarwinはMac OS Xとしても知られています.ファイルシステムで大文字小文字
の違いを保存することが@emph{可能}ですが,大文字小文字の区別をしないこ
とに注意してください.例えば,@file{INSTALL}ファイルがあるパッケージで
インストールを試みるとき,@samp{make install}で「何もすることが無い!」
のような結果が得られ,これは厄介な問題になります.

@c That's all dependent on whether the file system is a UFS (case
@c sensitive) or HFS+ (case preserving).  By default Apple wants you to
@c install the OS on HFS+.  Unfortunately, there are some pieces of
@c software which really need to be built on UFS.  We may want to rebuild
@c Darwin to have both UFS and HFS+ available (and put the /local/build
@c tree on the UFS).
@c 
それは,ファイルシステムがUFS(大文字小文字を区別する)かHFS+(大文字小文
字の違いを保存する)かに依存します.デフォルトで,AppleはHFS+にOSをイン
ストールして欲しがっています.残念ながら,本当にUFSでビルドする必要が
あるソフトウェアもあります.DarwinをUFSとHFS+の両方で利用可能なように
再構築して(そして/local/buildのツリーに配置して)欲しいと思います.

@item @acronym{QNX} 4.25
@cindex @acronym{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 
@c @acronym{QNX} is a realtime operating system running on Intel architecture
@c meant to be scalable from the small embedded systems to the hundred
@c processor super-computer.  It claims to be @acronym{POSIX} certified.  More
@c information is available on the @href{www.qnx.com, @acronym{QNX} home page},
@c including the @href{http://support.qnx.com/support/docs/qnx4/, @acronym{QNX}
@c man pages}.
@c 
@acronym{QNX}は,小さな組み込みシステムから百個のプロセッサを持つスー
パーコンピュータまで幅広く利用できる,Intelアーキテクチャでまで動作す
るリアルタイムオペレーティングシステムです.それは@acronym{POSIX}であ
ることが証明されていると主張しています.@href{www.qnx.com,
@acronym{QNX} home page} で,より多くの情報が利用可能で,そこには,
@href{http://support.qnx.com/support/docs/qnx4/, @acronym{QNX} man
pages}もあります.

@item Tru64
@cindex Tru64
@c The @href{http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/,
@c documentation of several versions of Tru64} is available in different
@c formats.
@c 
@href{http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/,
documentation of several versions of Tru64}では,様々な書式が利用可能
です.

@item Unix version 7
@cindex Unix version 7
@cindex V7
@c Documentation is available in the
@c @href{http://plan9.bell-labs.com/7thEdMan/index.html, V7 Manual}.
@c 
@href{http://plan9.bell-labs.com/7thEdMan/index.html, V7 Manual}でドキュ
メントは利用可能です.
@end table


@node Multiple Cases
@c @section Multiple Cases
@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_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
#include <sys/fstyp.h>]])],
                  [AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4])
if test $fstype = no; then
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
#include <sys/fstyp.h>]])],
                  [AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3])
fi
if test $fstype = no; then
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#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

@c ====================================================== Results of Tests.

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

@c Once @command{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 @command{configure} runs, and
@c print a message letting the user know the result of the test.
@c 
一度@command{configure}で特徴の存在を定義すると,その情報を記録するた
めに何ができるのでしょうか?そうする方法は四種類あります.Cプリプロセッ
サシンボルの定義,出力ファイルで変数を設定,@command{configure}実行時
のキャッシュファイルに結果を保存,そして,テスト結果をユーザに知らせる
メッセージの出力です.

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

@node Defining Symbols
@c @section Defining C Preprocessor Symbols
@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 @command{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
と異なり,@command{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}, @var{value}, @ovar{description})
@defmacx AC_DEFINE (@var{variable})
@acindex DEFINE
@c Define the C preprocessor variable @var{variable} to @var{value} (verbatim).
@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 @command{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{value}は改行のリテラルを含むべきではなく, 
@code{AC_CONFIG_HEADERS}を使用しない場合,@command{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

@c If neither @var{value} nor @var{description} are given, then
@c @var{value} defaults to 1 instead of to the empty string.  This is for
@c backwards compatibility with older versions of Autoconf, but this usage
@c is obsolescent and may be withdrawn in future versions of Autoconf.
@c 
@var{value}も@var{description}も与えられていない場合,@var{value}のデ
フォルトは空の文字列ではなく1になります.これは古いバージョンの
Autoconfの下位互換性のためですが,この使用方法は時代遅れで,Autoconfの
将来のバージョンでは無くなるかもしれません.
@end defmac

@defmac AC_DEFINE_UNQUOTED (@var{variable}, @var{value}, @ovar{description})
@defmacx AC_DEFINE_UNQUOTED (@var{variable})
@acindex 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}で,三つの
シェル展開が --- 一度に --- 実行されます.変数の展開(@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 a 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 @command{configure} script.  Use either spaces or
@c newlines.  That is, do this:
@c 
Bourneシェルの構文の特異性のため,他のマクロから呼び出しやシェルコード
と@code{AC_DEFINE}や@code{AC_DEFINE_UNQUOTED}を分けるために,セミコロ
ンを使用しないでください.そうすると,@command{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
@c @section Setting Output Variables
@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 @command{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{出力変数(output
variables)}を設定することで,それは,@command{configure}が出力したファ
イルの中に,シェル変数の値を代入することです.以下の二つのマクロで新し
い出力変数を作ります.利用可能な出力変数のリストは,@xref{Preset
Output Variables}.

@defmac AC_SUBST (@var{variable}, @ovar{value})
@acindex 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 @var{variable}.
@c 
@var{value}が与えられている場合,さらにそれも@var{variable}に渡されます.
@end defmac

@defmac AC_SUBST_FILE (@var{variable})
@acindex 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 varying 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 Environment variables that affect this situation, such as @samp{CC}
@c above, are called @dfn{precious variables}, and can be declared as such
@c by @code{AC_ARG_VAR}.
@c 
上記の@samp{CC}のように,この状況に影響する環境変数は@dfn{貴重な変数
(precious variables)}と命名されていて,@code{AC_ARG_VAR}のようなもので
宣言することが可能です.

@defmac AC_ARG_VAR (@var{variable}, @var{description})
@acindex 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
@var{variable} is @code{AC_SUBST}'d.

@item
@c The value of @var{variable} when @command{configure} was launched is
@c saved in the cache, including if it was not specified on the command
@c line but via the environment.  Indeed, while @command{configure} can
@c notice the definition of @code{CC} in @samp{./configure CC=bizarre-cc},
@c it is impossible to notice it in @samp{CC=bizarre-cc ./configure},
@c which, unfortunately, is what most users do.
@c 
@command{configure}が開始されたとき,@var{variable}の値は,コマンドラ
インで指定されておらず環境変数で指定されている場合も含めて,キャッシュ
に保存されません.実際,@command{configure}は@samp{./configure
CC=bizarre-cc}の@code{CC}の定義に注目できますが,@samp{CC=bizarre-cc
./configure}のものには注意できません.そして,残念ながらほとんどのユー
ザがそうしています.

@c We emphasize that it is the @emph{initial} value of @var{variable} which
@c is saved, not that found during the execution of @command{configure}.
@c Indeed, specifying @samp{./configure FOO=foo} and letting
@c @samp{./configure} guess that @code{FOO} is @code{foo} can be two very
@c different runs.
@c 
それは,保存される@var{variable}の@emph{初期}値ですが,
@command{configure}の実行中は見つからないことを強調しておきます.実際,
@samp{./configure FOO=foo}と指定することと,@samp{./configure}に
@code{FOO}が@code{foo}だと分からせることは,かなり違った結果になるはず
です.

@item
@c @var{variable} is checked for consistency between two
@c @command{configure} runs.  For instance:
@c 
@var{variable}は二回の@command{configure}の実行の間の整合性を調査され
ます.例えば,以下のようにします.

@example
$ @kbd{./configure --silent --config-cache}
$ @kbd{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
$ @kbd{CC=/usr/bin/cc ./configure undeclared_var=raboof --silent}
$ @kbd{./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
@c @section Caching Results
@section 結果のキャッシュ
@cindex Cache

@c To avoid checking for the same features repeatedly in various
@c @command{configure} scripts (or in repeated runs of one script),
@c @command{configure} can optionally save the results of many checks in a
@c @dfn{cache file} (@pxref{Cache Files}).  If a @command{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, @command{configure} can then run much faster than if it had to
@c perform all of the checks every time.
@c 
様々な@command{configure}スクリプトで,同じ特徴を繰り返し調査する(ある
いは何度も一つのスクリプトを実行する)ことを避けるため,
@command{configure}は,多くの調査結果を@dfn{キャッシュファイル(cache
file)}に保存します(@pxref{Cache Files}).キャッシュ可能な状態で
@command{configure} スクリプトを実行していてキャッシュファイルが見つかっ
た場合,前回の実行結果をキャッシュから読み込み,これらの調査の再実行を
避けます.結果として,@command{configure}は,毎回全ての調査を実行する
より早くなります.

@defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
@acindex 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 @command{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 @command{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}で識別した調査結果が,利用可能だということを保証します.
調査結果が読み込まれたキャッシュファイルにあり,@command{configure}に, 
@samp{--quiet}や@samp{--silent}オプションが与えられていない場合,結果
がキャッシュされていることを示すメッセージを出力します.それ以外では,
シェルコマンド@var{commands-to-set-it}を実行します.シェルコマンドを値
を決定するために実行する場合,@command{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})
@acindex 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 
これは,キャッシュが利用可能な場合,失敗します.このマクロの二回目の実
行で,@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 @command{configure} uses for caching
* Cache Checkpointing::         Loading and saving the cache file
@end menu

@node Cache Variable Names
@c @subsection Cache Variable Names
@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}_@ovar{additional-options}
@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
@c @subsection Cache Files
@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, @command{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 
デフォルトでは,古いキャッシュファイルの使用で偶然生じる問題を避けるた
め,@command{configure}はキャッシュファイルを使用しません(技術的には,
@option{--cache-file=/dev/null}を使用します).

@c To enable caching, @command{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 @command{configure} calls @command{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 
キャッシュを利用可能にするために,@command{configure}は結果をファイル
@file{config.cache}にキャッシュする@option{--config-cache}(または,
@option{-C})を受け入れます.代わり方法として,
@option{--cache-file=@var{file}}で@var{file}キャッシュファイルにを指定
します.@command{configure}がサブディレクトリの@command{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 @command{configure}.
@c 
@file{config.status}は,@command{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 @command{configure} script.  (Running @command{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 
サイトの初期化スクリプトで,通常のプログラムごとのキャッシュの代わりに,
使用するサイト全体のキャッシュファイルを指定することが可能になります.
この場合,キャッシュファイルは,新しい@command{configure}スクリプトを
実行する度に,情報がどんどん蓄積されていきます.(@command{configure}を
実行すると,既存のキャッシュファイルを用いて新しい結果をマージします.) 
しかし,システムのコンフィグレーションが(例えば,ライブラリやコンパイ
ラをインストールされて)変化し,古いキャッシュファイルが削除されない場
合,これは問題になるかもしれません.

@node Cache Checkpointing
@c @subsection Cache Checkpointing
@subsection キャッシュのチェックポイント方法

@c If your configure script, or a macro called from @file{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 
@command{configure}スクリプトや@file{configure.ac}から呼び出されるマク
ロがコンフィグレーション処理を中断する場合,二,三回
@code{AC_CACHE_SAVE}を使用して,キーポイントでキャッシュのチェックポイ
ントにすることが役に立ちます.そうすると,(おそらく)前に異常終了を引き
起こしたエラーを修正することで,@command{configure}スクリプトを再実行
する時間が大幅に削減されます.

@c FIXME: Do we really want to document this guy?
@defmac AC_CACHE_LOAD
@acindex 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
@acindex 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 @file{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@dots{}
AM_PATH_GTK(1.0.2,, [AC_MSG_ERROR([GTK not in path])])
AM_PATH_GTKMM(0.9.5,, [AC_MSG_ERROR([GTK not in path])])
@end group
@r{ @dots{} AC_OUTPUT, etc. @dots{}}
@end example

@node Printing Messages
@c @section Printing Messages
@section メッセージの出力
@cindex Messages, from @command{configure}

@c @command{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 
@command{configure}スクリプトは,それらを実行しているユーザに,何種類
かの情報を与える必要があります.以下のマクロは,それぞれの種類に対して
適切な方法でメッセージを出力します.全ての引数は,シェルのダブルクオー
トで囲まれているので,シェルは変数とバッククオートの代入を実行します.

@c These macros are all wrappers around the @code{echo} shell command.
@c @command{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}シェルコマンドを全てラップします.
@command{configure}スクリプトは,ユーザに対してメッセージを出力するた
め,直接@code{echo}を実行する必要は滅多にありません.これらのマクロを
使用すると,出力されるそれぞれのメッセージの種類を,いつでもどのように
でも簡単に変更できます.そのような変更にはマクロ定義の変更だけが必要で,
呼び出し側は自動的に変更されます.

@c To diagnose static issues, i.e., when @command{autoconf} is run, see
@c @ref{Reporting Messages}.
@c 
静的な問題を診断するため,例えば@command{autoconf}が実行されるときは,
@ref{Reporting Messages}を参照してください.

@defmac AC_MSG_CHECKING (@var{feature-description})
@acindex MSG_CHECKING
@c Notify the user that @command{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 
@command{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 @command{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@command{configure}が@samp{--quiet}や@samp{--silent}オプションを用いて
実行されている場合,このマクロは何も出力しません.
@end defmac

@defmac AC_MSG_RESULT (@var{result-description})
@acindex 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 @command{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@command{configure}が@samp{--quiet}や@samp{--silent}オプションで実行さ
れる場合,このマクロは何も出力しません.
@end defmac

@defmac AC_MSG_NOTICE (@var{message})
@acindex 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 @command{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@command{configure}が@samp{--quiet}や@samp{--silent}オプションで実行さ
れる場合,このマクロは何も出力しません.
@end defmac

@defmac AC_MSG_ERROR (@var{error-description}, @ovar{exit-status})
@acindex MSG_ERROR
@c Notify the user of an error that prevents @command{configure} from
@c completing.  This macro prints an error message to the standard error
@c output and exits @command{configure} with @var{exit-status} (1 by default).
@c @var{error-description} should be something like @samp{invalid value
@c $HOME for \$HOME}.
@c 
@command{configure}の完了を妨げるエラーをユーザに通知します.このマク
ロは,エラーメッセージを標準エラー出力に出力し,@command{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_FAILURE (@var{error-description}, @ovar{exit-status})
@acindex MSG_FAILURE
@c This @code{AC_MSG_ERROR} wrapper notifies the user of an error that
@c prevents @command{configure} from completing @emph{and} that additional
@c details are provided in @file{config.log}.  This is typically used when
@c abnormal results are found during a compilation.
@c 
これは,@code{AC_MSG_ERROR}のラッパーで,@command{configure}が終了する
のを妨げるエラーをユーザに告知し,@emph{そして}詳細を@file{config.log} 
に追加します.これは通常,コンパイル時に異常な結果が見つかったときに使
用されます.
@end defmac

@defmac AC_MSG_WARN (@var{problem-description})
@acindex MSG_WARN
@c Notify the @command{configure} user of a possible problem.  This macro
@c prints the message to the standard error output; @command{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 
可能性のある問題を@command{configure}を実行しているユーザに通知します.
このマクロは,標準エラー出力にメッセージを出力します.
@command{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
@c @chapter Programming in M4
@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は,二つのレイヤーのトップに書かれています.それは,純粋な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では,二つのレイヤーはまだ実験段階で,そのイン
ターフェースは将来変更される可能性があります.実際問題,@emph{文章化さ
れていないものは使用しないでください}.

@menu
* M4 Quotation::                Protecting macros from unwanted expansion
* Using autom4te::              The Autoconf executables backbone
* Programming in M4sugar::      Convenient pure M4 macros
* Programming in M4sh::         Common shell Constructs
@end menu

@node M4 Quotation
@c @section M4 Quotation
@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@enddots{}
@c 
@c The most common problem with 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
* Changequote is Evil::         Worse than INTERCAL: M4 + changequote
* Quadrigraphs::                Another way to escape special characters
* Quotation Rule Of Thumb::     One parenthesis, one quote
@end menu

@node Active Characters
@c @subsection Active Characters
@subsection アクティブな文字

@c To fully understand where proper quotation is important, you first need
@c to know what the special characters are 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 M4 tries to match by
@c pairs).
@c 
適切な引用符の重要性を完全に理解するため,最初にAutoconfでの特殊な文字
が何かを知る必要があります.@samp{#}はマクロ展開が実行されない内部コメ
ントの導入で,@samp{,}は引数のセパレータ,@samp{[}と@samp{]}はそれらの
引用符,そして最後は,(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 but when you find them in real life, they are usually in disguise.
@c 
マクロ呼び出しの微妙な状況を理解するために,最初に明らかな失敗を紹介し
なければならないでしょう.以下で``明確にされ''ていて,実生活でも見つか
るでしょうが,それらは通常ごまかしです.

@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 
マクロの展開があるごとに,引用符も展開されます.すなわち,第一レベルの
引用符は削除されます.

@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
@c @subsection One Macro Call
@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 unnecessary
@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 possibilities: either you
@c quote or you don't:
@c 
トップレベルでは,二つの可能性があります.引用符で囲む,または囲まない
での二つです.

@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@enddots{}
@c 
これを覚えていると,マクロがマクロを呼び出し,マクロがマクロを呼び出し
@dots{}となっているような状況も調査することが可能です.


@node Quotation and Nested Macros
@c @subsection Quotation and Nested Macros
@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 M4 evaluates its arguments
@c before applying the macro, @samp{active} is expanded, which results in:
@c 
最初の状況では,トップレベルでは@code{car}の引数を探し,@samp{active} 
が見つかります.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 
二番目の状況では,トップレベルは@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{後で},引数が評価されます.三番目
の状況では,@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 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 
う〜ん? 最初の状況は簡単に理解できますが,なぜ二番目が間違っていて,
三番目は正しいのでしょうか?それを理解するために,M4がマクロを展開した
後,結果として生じるテキストがすぐにマクロを展開に従って引用符が取り除
かれることを知っておく必要があります.これは,引用符の削除が二回行なわ
れることを意味します --- 最初に引数として@code{car}マクロに渡されると
き,二回目は@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 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}は,引数を二重に引用符で囲むので,ユーザはマクロの
呼び出しを引用符で囲まないままにしておくよう強制されるので,それは危険
です.カンマとその他のアクティブなシンボルは,マクロに渡される前にM4で
解釈され,それはユーザが期待している手法ではないことが多いものです.ま
た,@code{qar}は,他のマクロとは異なる動作をするので,Autoconfでは避け
るべき例外になります.

@node Changequote is Evil
@c @subsection @code{changequote} is Evil
@subsection @code{changequote}の弊害

@c The temptation is often high to bypass proper quotation, in particular
@c when it's late at night.  Then, many experienced Autoconf hackers
@c finally surrender to the dark side of the force and use the ultimate
@c weapon: @code{changequote}.
@c 
特に夜も遅くなると,適切な引用符をバイパスする誘惑が大きくなることも多
いものです.そして,経験豊富なAutoconfのハッカーの多くは,最終的に暗黒
の力に支配され,最終兵器を持ち出します.それは@code{changequote}です.

@c The M4 builtin @code{changequote} belongs to a set of primitives that
@c allow one to adjust the syntax of the language to adjust it to one's
@c needs.  For instance, by default M4 uses @samp{`} and @samp{'} as
@c quotes, but in the context of shell programming (and actually of most
@c programming languages), that's about the worst choice one can make:
@c because of strings and back-quoted expressions in shell code (such as
@c @samp{'this'} and @samp{`that`}), because of literal characters in usual
@c programming languages (as in @samp{'0'}), there are many unbalanced
@c @samp{`} and @samp{'}.  Proper M4 quotation then becomes a nightmare, if
@c not impossible.  In order to make M4 useful in such a context, its
@c designers have equipped it with @code{changequote}, which makes it
@c possible to choose another pair of quotes.  M4sugar, M4sh, Autoconf, and
@c Autotest all have chosen to use @samp{[} and @samp{]}.  Not especially
@c because they are unlikely characters, but @emph{because they are
@c characters unlikely to be unbalanced}.
@c 
M4組み込みの@code{changequote}は,言語の構文を必要に応じて調整すること
を可能にするプリミティブの組に属しています.例えば,M4では引用符として
デフォルトで@samp{`}と@samp{'}を使用しますが,シェルプログラムの文脈
(そして,ほとんどの実際のプログラミング言語)では,それは利用可能なもの
の中での最悪の選択です.シェルコードでの(@samp{'this'}と@samp{`that`}
のような)文字列とバッククオートされた式と,通常のプログラミング言語で
使用される(@samp{'0'}のような)リテラル文字のため,多くの対にならない
@samp{`}と@samp{'}が存在します.そのような文脈での厳密なM4の引用符が
(変更)不可能な場合は,悪夢になります.そのような文脈でM4を役立たせるた
め,それを設計した人は別の引用符の組の選択を可能にする
@code{changequote}を装備しました.M4sugar,M4sh,Autoconf,そして
Autotestでは,すべてのものが@samp{[}と@samp{]}の使用を選択しています.
それらが滅多に使用されない文字という理由だけでなく,@emph{対にならない
ことも滅多に無い文字という理由もあります}.

@c There are other magic primitives, such as @code{changecom} to specify
@c what syntactic forms are comments (it is common to see
@c @samp{changecom(<!--, -->)} when M4 is used to produce HTML pages),
@c @code{changeword} and @code{changesyntax} to change other syntactic
@c details (such as the character to denote the n-th argument, @samp{$} by
@c default, the parenthesis around arguments etc.).
@c 
構文形式がコメントだということを指定するため(M4がHTMLページを生成する
ために使用されるとき,@samp{changecom(<!--, -->)}が一般的だと分かるで
しょう)の@code{changecom}と,それ以外の構文の詳細を変更するための
@code{changeword}と@code{changesyntax}(n番目の引数を示す,デフォルトで
@samp{$}となっている文字や,引数の周りを囲むカッコなど)のような,それ
以外のマジックプリミティブもあります.

@c These primitives are really meant to make M4 more useful for specific
@c domains: they should be considered like command line options:
@c @option{--quotes}, @option{--comments}, @option{--words}, and
@c @code{--syntax}.  Nevertheless, they are implemented as M4 builtins, as
@c it makes M4 libraries self contained (no need for additional options).
@c 
これらのプリミティブは,特定の分野に対してM4がより役に立つようにするた
め,本当に意味があるものです.それらはコマンドラインオプションのように
考えるべきです.それらは,@option{--quotes},@option{--comments},
@option{--words},そして@code{--syntax}のようなものです.それにもかか
わらず,M4ライブラリ自身が含まれる(追加のオプションが必要無い)ように,
M4の組み込みとして実装されています.

@c There lies the problem@enddots{}
@c 
そこに問題があります@enddots{}

@sp 1

@c The problem is that it is then tempting to use them in the middle of an
@c M4 script, as opposed to its initialization.  This, if not carefully
@c thought out, can lead to disastrous effects: @emph{you are changing the
@c language in the middle of the execution}.  Changing and restoring the
@c syntax is often not enough: if you happened to invoke macros in between,
@c these macros will be lost, as the current syntax will probably not be
@c the one they were implemented with.
@c 
問題は,M4スクリプトの途中で,その初期化を目的としてそれを使用するとき
に発生します.これは,あまり注意していない場合,甚大な影響があるはずで
す.@emph{実行の途中で言語を変更しているようなものです}.構文の変更と
それからの復帰が十分でないことが多いものです.その間でマクロの呼び出し
を行なった場合,現在の構文はおそらくマクロを実装していないので,これら
のマクロは失われることになります.

@c FIXME: I've been looking for a short, real case example, but I
@c lost them all :(


@node Quadrigraphs
@c @subsection Quadrigraphs
@subsection 四文字表記
@cindex quadrigraphs
@cindex @samp{@@S|@@}
@cindex @samp{@@&t@@}
@c Info cannot handle `:' in index entries.
@c @cindex @samp{@@<:@@}
@c @cindex @samp{@@:>@@}
@c @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{四文字表記(quadrigraph)}の一つを使用することで,この問題を
解決することが可能です.

@table @samp
@item @@<:@@
@samp{[}
@item @@:>@@
@samp{]}
@item @@S|@@
@samp{$}
@item @@%:@@
@samp{#}
@item @@&t@@
@c Expands to nothing.
@c 
何にも展開されません.
@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{^@@<:@@}, independently of its quotation,
@c will appear as @samp{^[} in the output.
@c 
四文字表記は,@command{m4}が実行された後,変換処理の終りの段階で置換さ
れるので,M4の引用符の邪魔になりません.例えば,文字列@samp{[^@@<:@@]}
は,その引用符で囲まれている状態に依存せず,出力では@samp{[^[]}として
現れます.

@c The empty quadrigraph can be used:
@c 
空の四文字表記を使用することも可能です.

@itemize @minus
@c @item to mark trailing spaces explicitly
@item 明示的に後置されるスペースに印を付けるため

@c Trailing spaces are smashed by @command{autom4te}.  This is a feature.
@c 
後置される空白は@command{autom4te}で壊されます.これは仕様です.

@c @item to produce other quadrigraphs
@item その他の四文字表記を生成するため

@c For instance @samp{@@<@@&t@@:@@} produces @samp{@@<:@@}.
@c 
例えば,@samp{@@<@@&t@@:@@}は@samp{@@<:@@}を生成します.

@c @item to escape @emph{occurrences} of forbidden patterns
@item 禁止されているパターンの@emph{発生}をエスケープするため

@c For instance you might want to mention @code{AC_FOO} in a comment, while
@c still being sure that @command{autom4te} will still catch unexpanded
@c @samp{AC_*}.  Then write @samp{AC@@&t@@_FOO}.
@c 
例えば,@code{AC_FOO}をコメントとして書きたいかもしれませんが,
@command{autom4te}は展開されていない@samp{AC_*}を確実に受けとります.
そのときは,@samp{AC@@&t@@_FOO}と書いてください.
@end itemize

@c The name @samp{@@&t@@} was suggested by Paul Eggert:
@c 
@samp{@@&t@@}の名前はPaul Eggertの提案です.

@quotation
@c I should give some credit to the @samp{@@&t@@} pun.  The @samp{&} is my
@c own invention, but the @samp{t} came from the source code of the
@c @sc{algol68c} compiler, written by Steve Bourne (of Bourne shell fame),
@c and which used @samp{mt} to denote the empty string.  In C, it would
@c have looked like something like:
@c 
私は,@samp{@@&t@@}の語呂合わせに称賛を与えるべきでしょう.@samp{&}は
私自身の発明ですが,@samp{t}はSteve Bourne(Bourneシェルで有名です)によっ
て書かれた@sc{algol68c}コンパイラのソースコードが由来となっていて,そ
こでは空の文字列を示すために@samp{mt}を使用しています.Cでは,それは以
下のようなものになるでしょう.

@example
char const mt[] = "";
@end example

@noindent
@c but of course the source code was written in Algol 68.
@c 
しかし,ソースコードは当然Algol 68で書かれています.

@c I don't know where he got @samp{mt} from: it could have been his own
@c invention, and I suppose it could have been a common pun around the
@c Cambridge University computer lab at the time.
@c 
彼が@samp{mt}を得た場所を,私は知りません.それは独自の発明かもしれま
せんし,当時のケンブリッジ大学のコンピュータ研究所で,一般的な語呂合わ
せだったのかもしれません.
@end quotation

@node Quotation Rule Of Thumb
@c @subsection Quotation Rule Of Thumb
@subsection 引用符の経験則

@c To conclude, the quotation rule of thumb is:
@c 
終りに引用符の経験則を述べます.

@c @center @emph{One pair of quotes per pair of parentheses.}
@center @emph{カッコの組ごとに引用符の組}

@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 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に親しんでいる読者は,M4が引数を@dfn{まとめる(collect)}ときに
@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 @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 @command{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 M4
@c output, you need more quotes.  When in doubt, quote.
@c 
新たに書かれたマクロを用いて@command{configure}スクリプトを作成すると
き,マクロにより多くの引用符を加える必要があるかどうかの調査は,気を付
けて吟味してください.一つ以上の単語がM4の出力に現れない場合,より多く
の引用符が必要になります.迷ったときは引用符です.

@c However, it's also possible to put on too many layers of quotes.  If
@c this happens, the resulting @command{configure} script will contain
@c unexpanded macros.  The @command{autoconf} program checks for this problem
@c by doing @samp{grep AC_ configure}.
@c 
しかし,引用符のレイヤーが多過ぎる可能性もあります.この場合は,結果と
して得られる@command{configure}スクリプトは,展開されていないマクロが
含まれているでしょう.@command{autoconf}プログラムは,@samp{grep AC_
configure}を行なうことでこの問題を調査します.


@c ---------------------------------------- Using autom4te

@node Using autom4te
@c @section Using @command{autom4te}
@section @command{autom4te}の呼び出し

@c The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
@c to Autoconf per se, heavily rely on M4.  All these different uses
@c revealed common needs factored into a layer over @command{m4}:
@c @command{autom4te}@footnote{
@c @c
@c Yet another great name from Lars J. Aas.
@c @c
@c }.
@c 
Autoconf自身のものに加え,M4sugar,M4sh,そしてAutotestを含めた
Autoconfスイートは,M4にかなり依存しています.使い方が異なるこれらはす
べて,@command{m4}の上のレイヤーに集約したいという共通の要求を具体化し
ました.それは@command{autom4te}@footnote{
@c
Lars J. Aasのもう一つの偉大な名前です.
@c
}です.

@c @command{autom4te} should basically considered as a replacement of
@c @command{m4} itself.
@c 
@command{autom4te}は,基本的に@command{m4}自身に置き換わるものとして考
慮されるべきです.

@menu
* autom4te Invocation::         A @acronym{GNU} M4 wrapper
* Customizing autom4te::        Customizing the Autoconf package
@end menu

@node autom4te Invocation
@c @subsection Invoking @command{autom4te}
@subsection @command{autom4te}の呼び出し

@c The command line arguments are modeled after M4's:
@c 
コマンドライン引数は,M4のものをモデルにしています.

@example
autom4te @var{options} @var{files}
@end example

@noindent
@c where the @var{files} are directly passed to @command{m4}.  In addition
@c to the regular expansion, it handles the replacement of the quadrigraphs
@c (@pxref{Quadrigraphs}), and of @samp{__oline__}, the current line in the
@c output.  It supports an extended syntax for the @var{files}:
@c 
ここでの@var{files}は,直接@command{m4}に渡すものです.正規の展開に加
え,それは四文字表記(@pxref{Quadrigraphs})と,出力の現在の行の
@samp{__oline__}の置換を処理します.それは,@var{files}に対して拡張さ
れた構文もサポートしています.

@table @file
@item @var{file}.m4f
@c This file is an M4 frozen file.  Note that @emph{all the previous files
@c are ignored}.  See the option @option{--melt} for the rationale.
@c 
このファイルは,M4を固めたファイルです.@emph{以前のファイルはすべて無
視されることに}注意してください.正当性については,オプション
@option{--melt}を参照してください.

@item @var{file}?
@c If found in the library path, the @var{file} is included for expansion,
@c otherwise it is ignored instead of triggering a failure.
@c 
ライブラリパスで見つかった場合,@var{file}は展開に含められ,それ以外で
は,異常終了を発生する代わりに無視されます.
@end table

@sp 1

@c Of course, it supports the Autoconf common subset of options:
@c 
もちろん,それは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 and be even more verbose.
@c 
一時的なファイルを削除せず,さらに冗長になります.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Also look for input files in @var{dir}.  Multiple invocations
@c accumulate.
@c 
入力ファイルを@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{-}は標準出力を意味します.
@end table

@sp 1

@c As an extension of @command{m4}, it includes the following options:
@c 
@command{m4}の拡張として,それらは以下のオプションが含まれます.

@table @option
@item --warnings=@var{category}
@itemx -W @var{category}
@evindex WARNINGS
@c FIXME: Point to the M4sugar macros, not Autoconf's.
@c 
@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{autom4te -W @var{category}} will actually
@c behave as if you had run:
@c 
@samp{syntax}に関する警告は,デフォルトで利用可能で,カテゴリのカンマ
で分離されたリストの環境変数@code{WARNINGS}は尊重されます.
@command{autom4te -W @var{category}}は,実際に悪いことを実行したかのよ
うに動作します.

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

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

@cindex Back trace
@cindex Macro invocation stack
@c @command{autom4te} 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{autom4te}はエラーのバックトレースを表示しますが,警告は表示し
ません.警告も表示したい場合,@option{-W error}を渡してください.例え
ば以下のような@file{configure.ac}を考えます.

@example
AC_DEFUN([INNER],
[AC_RUN_IFELSE([AC_LANG_PROGRAM([exit (0)])])])

AC_DEFUN([OUTER],
[INNER])

AC_INIT
OUTER
@end example

@noindent
@c you get:
@c 
以下のようになるでしょう.

@example
$ @kbd{autom4te -l autoconf -Wcross}
configure.ac:8: warning: AC_RUN_IFELSE called without default \
to allow cross compiling
$ @kbd{autom4te -l autoconf -Wcross,error -f}
configure.ac:8: error: AC_RUN_IFELSE called without default \
to allow cross compiling
acgeneral.m4:3044: AC_RUN_IFELSE 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 --melt
@itemx -m
@c Do not use frozen files.  Any argument @code{@var{file}.m4f} will be
@c replaced with @code{@var{file}.m4}.  This helps tracing the macros which
@c are executed only when the files are frozen, typically
@c @code{m4_define}.  For instance, running:
@c 
固められたファイルを使用しません.すべての引数@code{@var{file}.m4f}は
@code{@var{file}.m4}で置換されます.これは,ファイルが固められていると
きだけに実行されるマクロ,通常は@code{m4_define}の追跡で役に立ちます.
例えば以下のように実行します.

@example
autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
@end example

@noindent
@c is roughly equivalent to running:
@c 
これは以下を実行したのと等価です.

@example
m4 1.m4 2.m4 3.m4 4.m4 input.m4
@end example

@noindent
@c while
@c 
一方,以下を実行した場合を考えます.

@example
autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
@end example

@noindent
@c is equivalent to:
@c 
これは以下と等価です.

@example
m4 --reload-state=4.m4f input.m4
@end example

@item --freeze
@itemx -f
@c Produce a frozen state file.  @command{autom4te} freezing is stricter
@c than M4's: it must produce no warnings, and no output other than empty
@c lines (a line with whitespace is @emph{not} empty) and comments
@c (starting with @samp{#}).  Please, note that contrary to @command{m4},
@c this options takes no argument:
@c 
固まった状態のファイルを生成します.@command{autom4te}の固め方は,M4よ
り厳密です.警告を生成させたり,空の行(空白行は空の行では@emph{ありま
せん}) とコメント(@samp{#}で始まります)以外の出力を生成してはいけませ
ん.@command{m4}とは異なり,このオプションは以下のように引数をとらない
ことに注意してください.

@example
autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
@end example

@noindent
@c corresponds to
@c 
これは以下に対応します.

@example
m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
@end example

@item --mode=@var{octal-mode}
@itemx -m @var{octal-mode}
@c Set the mode of the non-traces output to @var{octal-mode}; by default
@c @samp{0666}.
@c 
@var{octal-mode}にトレース出力以外のモードを設定します.デフォルトは
@samp{0666}です.
@end table

@sp 1

@cindex @file{autom4te.cache}
@c As another additional feature over @command{m4}, @command{autom4te}
@c caches its results.  @acronym{GNU} M4 is able to produce a regular
@c output and traces at the same time.  Traces are heavily used in the
@c @acronym{GNU} Build System: @command{autoheader} uses them to build
@c @file{config.h.in}, @command{autoreconf} to determine what
@c @acronym{GNU} Build System components are used, @command{automake} to
@c ``parse'' @file{configure.ac} etc.  To save the long runs of
@c @command{m4}, traces are cached while performing regular expansion,
@c and conversely.  This cache is (actually, the caches are) stored in
@c the directory @file{autom4te.cache}.  @emph{It can safely be removed}
@c at any moment (especially if for some reason @command{autom4te}
@c considers it is trashed).
@c 
それ以外の@command{m4}上の追加機能として,@command{autom4te}がその結果
をキャッシュするというものがあります.@acronym{GNU} M4は,標準出力を生
成すると同時にトレースすることが可能です.トレースは@acronym{GNU}ビル
ドシステムで重点的に使用されています.@command{autoheader}は,
@file{config.h.in}をビルドするために,@command{autoreconf}は,使用され
ている@acronym{GNU}ビルドシステムの構成要素を決定するために,
@command{automake}は@file{configure.ac}をパースするため等として使用し
ています.@command{m4}の長い実行結果を保存するために,通常の展開を実行
している間,トレースはキャッシュされます@footnote{訳注:原文にある
``and conversely''が何を指すのか分かりません.}.このキャッシュ(実際に
は複数ある) は,ディレクトリ@file{autom4te.cache}に保存されます.いつ
でも@emph{削除して大丈夫です}(特に,理由があれば@command{autom4te}はそ
れが捨てられてしまったと考えます).

@table @option
@item --cache=@var{directory}
@itemx -C @var{directory}
@c Specify the name of the directory where the result should be cached.
@c Passing an empty value disables caching.  Be sure to pass a relative
@c path name, as for the time being, global caches are not supported.
@c 
結果をキャッシュするディレクトリの名前を指定します.空の値を渡すことで
キャッシュが利用不可能になります.グローバルキャッシュがサポートされる
ときまで,相対パスで渡してください.

@item --no-cache
@c Don't cache the results.
@c 
結果をキャッシュしません.

@item --force
@itemx -f
@c If a cache is used, consider it obsolete (but update it anyway).
@c 
キャッシュが使用されている場合,時代遅れだと考えません(しかし,それは
いずれにせよ更新されます).
@end table

@sp 1

@c Because traces are so important to the @acronym{GNU} Build System,
@c @command{autom4te} provides high level tracing features as compared to
@c M4, and helps exploiting the cache:
@c 
トレースは@acronym{GNU}ビルドシステムに重きをおいて実装されているので,
@command{autom4te}は,M4と比較して高度なトレース機能を提供していて,
キャッシュを利用する手助けとなります.

@table @option
@item --trace=@var{macro}[:@var{format}]
@itemx -t @var{macro}[:@var{format}]
@c Trace the invocations of @var{macro} according to the @var{format}.
@c Multiple @option{--trace} arguments can be used to list several macros.
@c Multiple @option{--trace} arguments for a single macro are not
@c cumulative; instead, you should just make @var{format} as long as
@c needed.
@c 
@var{format}によって,@var{macro}の呼び出しをトレースします.複数の
@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:$%}.  It can
@c use the following special escapes:
@c 
@var{format}は,必要なときは改行を用いていて,特殊なエスケープコードを
も用いている通常の文字列です.デフォルトは@samp{$f:$l:$n:$%}です.以下
の特殊なエスケープ文字が使用可能です.

@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{,}).それぞれの引数は引用符で囲
まれています.すなわち,角カッコの組で囲まれています.

@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 @xref{autoconf Invocation}, for examples of trace uses.
@c 
トレースの使用例は@xref{autoconf Invocation}.

@item --preselect=@var{macro}
@itemx -p @var{macro}
@c Cache the traces of @var{macro}, but do not enable traces.  This is
@c especially important to save CPU cycles in the future.  For instance,
@c when invoked, @command{autoconf} preselects all the macros that
@c @command{autoheader}, @command{automake}, @command{autoreconf} etc.@: will
@c trace, so that running @command{m4} is not needed to trace them: the
@c cache suffices.  This results in a huge speed-up.
@c 
@var{macro}のトレースをキャッシュしますが,キャッシュを利用可能にしま
せん.これは特に,将来のCPUサイクルを無駄にしないために重要です.例え
ば呼び出し時に,@command{m4}の実行でトレースする必要が無いように,
@command{autoconf}は@command{autoheader},@command{automake},
@command{autoreconf}などがトレースするすべてのマクロを前もって選択しま
す.キャッシュは十分です.これは結果として非常に高速になります.
@end table

@sp 1

@cindex Autom4te Library
@c Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
@c libraries}.  They consists in a powerful yet extremely simple feature:
@c sets of combined command line arguments:
@c 
最後に,@command{autom4te}は@dfn{Autom4teライブラリ(Autom4te
libraries)}の概念を導入します.それらは,強力ですが非常にシンプルな機
能から成り立っています.コマンドライン引数の組み合わせの組です.

@table @option
@item --language=@var{language}
@itemx -l =@var{language}
@c Use the @var{language} Autom4te library.  Current languages include:
@c 
@var{language}をAutom4teライブラリで使用します.現在の言語は以下のもの
が含まれています.

@table @code
@item M4sugar
@c create M4sugar output.
@c 
M4sugar出力を作成します.

@item M4sh
@c create M4sh executable shell scripts.
@c 
M4shの実行可能なシェルスクリプトを作成します.

@item Autotest
@c create Autotest executable test suites.
@c 
Autotestの実行可能なテストスイートを作成します.

@item Autoconf
@c create Autoconf executable configure scripts.
@c 
Autoconfの実行可能なコンフィグレーションスクリプトを作成します.
@end table

@item --prepend-include=@var{dir}
@item -B @var{dir}
@c Prepend directory @var{dir} to the search path.  This is used to include
@c the language-specific files before any third-party macros.
@c 
検索パスにディレクトリ@var{dir}を前置します.これは,サードパーティー
のマクロの前に,言語指定ファイルを含めるために使用します.

@end table

@cindex @file{autom4te.cfg}
@c As an example, if Autoconf is installed in its default location,
@c @file{/usr/local}, running @samp{autom4te -l m4sugar foo.m4} is
@c strictly equivalent to running @samp{autom4te --prepend-include
@c /usr/local/share/autoconf m4sugar/m4sugar.m4f --warnings syntax foo.m4}.
@c Recursive expansion applies: running @samp{autom4te -l m4sh foo.m4}
@c is the same as @samp{autom4te --language M4sugar m4sugar/m4sh.m4f
@c foo.m4}, i.e., @samp{autom4te --prepend-include /usr/local/share/autoconf
@c m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4}.  The definition
@c of the languages is stored in @file{autom4te.cfg}.
@c 
例として,Autoconfがデフォルトの場所@file{/usr/local}にインストールさ
れている場合,@samp{autom4te -l m4sugar foo.m4}を実行することは,
@samp{autom4te --prepend-include /usr/local/share/autoconf
m4sugar/m4sugar.m4f --warning syntax foo.m4}を実行することと厳密に等価
となります.再帰的な展開も適用します.@samp{autom4te --language m4sh
foo.m4}を実行することは,@samp{autom4te --language M4sugar
m4sugar/m4sh.m4f foo.m4}と同じで,すなわち,@samp{autom4te
--prepend-include /usr/local/share/autoconf m4sugar/m4sugar.m4f
m4sugar/m4sh.m4f --mode 777 foo.m4}と同じになります.言語の定義は,
@file{autom4te.cfg}に保存されます.

@node Customizing autom4te
@c @subsection Customizing @command{autom4te}
@subsection @command{autom4te}のカスタマイズ

@c One can customize @command{autom4te} via @file{~/.autom4te.cfg} (i.e.,
@c as found in the user home directory), and @file{./.autom4te.cfg} (i.e.,
@c as found in the directory from which @command{autom4te} is run).  The
@c order is first reading @file{autom4te.cfg}, then @file{~/.autom4te.cfg},
@c then @file{./.autom4te.cfg}, and finally the command line arguments.
@c 
@file{~/.autom4te.cfg} (すなわち,ユーザのホームディレクトリにあるとき) 
と,@file{./.autom4te.cfg} (すなわち,@command{autom4te}が実行されるディ
レクトリにあるとき)で,@command{autom4te}をカスタマイズすることが可能
です.順番として,最初に@file{autom4te.cfg}を読み込み,そして
@file{~/.autom4te.cfg},そして@file{./.autom4te.cfg},そして最後にコマ
ンドライン引数を読み込みます.

@c In these text files, comments are introduced with @code{#}, and empty
@c lines are ignored.  Customization is performed on a per-language basis,
@c wrapped in between a @samp{begin-language: "@var{language}"},
@c @samp{end-language: "@var{language}"} pair.
@c 
これらのテキストファイルでは,コメントは@code{#}ではじまり,空の行は無
視されます.カスタマイズは,言語ごとを基本に実行され,
@samp{begin-language: "@var{language}"}と@samp{end-language:
"@var{language}"}の組みで囲まれます.

@c Customizing a language stands for appending options (@pxref{autom4te
@c Invocation}) to the current definition of the language.  Options, and
@c more generally arguments, are introduced by @samp{args:
@c @var{arguments}}.  You may use the traditional shell syntax to quote the
@c @var{arguments}.
@c 
言語のカスタマイズとは,現在の言語の定義にオプションを追加すること
(@pxref{autom4te Invocation})を意味します.オプションと一般的な引数は,
@samp{args: @var{arguments}}で始まります.@var{arguments}を引用符で囲
むことによって伝統的なシェルの構文を使用してもかまいません.

@c As an example, to disable Autoconf caches (@file{autom4te.cache})
@c globally, include the following lines in @file{~/.autom4te.cfg}:
@c 
例として,Autoconfのキャッシュ(@file{autom4te.cache})を大域的に利用不
可能にするため,以下の行を@file{~/.autom4te.cfg}に含めます.

@verbatim
## ------------------ ##
## User Preferences.  ##
## ------------------ ##

begin-language: "Autoconf"
args: --no-cache
end-language: "Autoconf"
@end verbatim


@node Programming in M4sugar
@c @section Programming in M4sugar
@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
* Evaluation Macros::           More quotation and evaluation control
* Forbidden Patterns::          Catching unexpanded macros
@end menu

@node Redefined M4 Macros
@c @subsection Redefined M4 Macros
@subsection M4マクロの再定義

@c With a few exceptions, all the M4 native macros are moved in the
@c @samp{m4_} pseudo-namespace, e.g., M4sugar renames @code{define} as
@c @code{m4_define} etc.
@c 
いくつか例外がありますが,全てのM4ネイティブなマクロは,@samp{m4_}疑似
名前空間に移動されていて,例えば,M4sugarでは@code{define}を
@code{m4_define}に名前を変えるなどのようになっています.

@c Some M4 macros are redefined, and are slightly incompatible with their
@c native equivalent.
@c 
M4マクロには再定義されているものもあり,ネイティブな同義語とわずかに互
換性がなくなっています.

@defmac dnl
@msindex dnl
@c This macro kept its original name: no @code{m4_dnl} is defined.
@c 
このマクロは,もともとの名前を維持しています.@code{m4_dnl}は定義され
ていません.
@end defmac

@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_exit (@var{exit-status})
@msindex m4_exit
@c This macro corresponds to @code{m4exit}.
@c 
このマクロは@code{m4exit}に対応します.
@end defmac

@defmac m4_if (@var{comment})
@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @ovar{not-equal})
@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @dots{})
@msindex m4_if
@c This macro corresponds to @code{ifelse}.
@c 
このマクロは@code{ifelse}に対応します.
@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_bpatsubst (@var{string}, @var{regexp}, @ovar{replacement})
@msindex bpatsubst
@c This macro corresponds to @code{patsubst}.  The name @code{m4_patsubst}
@c is kept for future versions of M4sh, on top of @acronym{GNU} M4 which will
@c provide extended regular expression syntax via @code{epatsubst}.
@c 
このマクロは@code{patsubst}に対応します.@code{m4_patsubst}の名前は,
@code{epatsubst}で拡張した正規表現の構文を提供する,@acronym{GNU} M4の
最上位のM4shの将来のバージョンに対して残されています.
@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

@defmac m4_bregexp (@var{string}, @var{regexp}, @ovar{replacement})
@msindex bregexp
@c This macro corresponds to @code{regexp}.  The name @code{m4_regexp}
@c is kept for future versions of M4sh, on top of @acronym{GNU} M4 which will
@c provide extended regular expression syntax via @code{eregexp}.
@c 
このマクロは@code{regexp}に対応しています.@code{m4_regexp}の名前は,
@code{eregexp}で拡張した正規表現の構文を提供する,@acronym{GNU} M4の最
上位のM4shの将来のバージョンに対して残されています.
@end defmac

@defmac m4_wrap (@var{text})
@msindex m4_wrap
@c This macro corresponds to @code{m4wrap}.
@c 
このマクロは@code{m4wrap}に対応しています.

@c You are encouraged to end @var{text} with @samp{[]}, so that there are
@c no risks that two consecutive invocations of @code{m4_wrap} result in an
@c unexpected pasting of tokens, as in
@c 
二つの連続して呼び出される@code{m4_wrap}が,そのままトークンとして渡さ
れるという予期しない結果となる危険が無いように,@var{text}を@samp{[]}
で終えることが推奨されます.

@example
m4_define([foo], [Foo])
m4_define([bar], [Bar])
m4_define([foobar], [FOOBAR])
m4_wrap([bar])
m4_wrap([foo])
@result{}FOOBAR
@end example
@end defmac

@node Evaluation Macros
@c @subsection Evaluation Macros
@subsection マクロの評価

@c The following macros give some control over the order of the evaluation
@c by adding or removing levels of quotes.  They are meant for hard-core M4
@c programmers.
@c 
以下のマクロは,引用符のレベルを追加したり削除したりすることで,評価の
順序全体を制御するものです.それらは,ハードコアなM4プログラマに対して
意味があります.

@defmac m4_dquote (@var{arg1}, @dots{})
@msindex dquote
@c Return the arguments as a quoted list of quoted arguments.
@c 
引用符で囲まれたリストを引用符で囲んだ引数を返します.
@end defmac

@defmac m4_quote (@var{arg1}, @dots{})
@msindex quote
@c Return the arguments as a single entity, i.e., wrap them into a pair of
@c quotes.
@c 
単一の要素として引数を返し,すなわち,一つの引用符の組でそれらを囲みま
す.
@end defmac

@c The following example aims at emphasizing the difference between (i), not
@c using these macros, (ii), using @code{m4_quote}, and (iii), using
@c @code{m4_dquote}.
@c 
以下の例は,(i)これらの例を使用していない,(ii)@code{m4_quote}を使用し
ている,(iii)@code{m4_dquote}を使用している,といったそれぞれの間の差
を強調することを目的としています.

@example
$ @kbd{cat example.m4}
# Overquote, so that quotes are visible.
m4_define([show], [$[]1 = [$1], $[]@@ = [$@@]])
m4_divert(0)dnl
show(a, b)
show(m4_quote(a, b))
show(m4_dquote(a, b))
$ @kbd{autom4te -l m4sugar example.m4}
$1 = a, $@@ = [a],[b]
$1 = a,b, $@@ = [a,b]
$1 = [a],[b], $@@ = [[a],[b]]
@end example



@node Forbidden Patterns
@c @subsection Forbidden Patterns
@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 overquotation).
@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 that 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 by @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

@node Programming in M4sh
@c @section Programming in M4sh
@section M4shでのプログラミング

@c FIXME: Eventually will become a chapter, as it is not related to
@c programming in M4 per se.
@c 
@c M4sh, pronounced ``mash'', is aiming at producing portable Bourne shell
@c scripts.  This name was coined by Lars J. Aas, who notes that,
@c according to the Webster's Revised Unabridged Dictionary (1913):
@c 
M4shは,``mash''と発音し,移植性の高いBourneシェルスクリプトを生成する
ことが狙いです.この名前はLars J. Aasが発明し,Webster's Revised
Unabridged Dictionary (1913)にメモがあります@footnote{訳注:これだから
アメリカンジョークは@enddots{}}.

@quotation
Mash \Mash\, n.  [Akin to G. meisch, maisch, meische, maische, mash,
wash, and prob.@: to AS.@: miscian to mix.  See ``Mix''.]

@enumerate 1
@item
@c A mass of mixed ingredients reduced to a soft pulpy state by beating or
@c pressure@enddots{}
@c 
混合成分の塊を,こう解や圧搾でパルプ状に軟らかくして絞った@enddots{}

@item
@c A mixture of meal or bran and water fed to animals.
@c 
動物に与える粉餌やぬかと水を混ぜたもの.

@item
@c A mess; trouble.  [Obs.] --Beau.@: & Fl.
@c 
混乱.トラブル.  [Obs.] --Beau.@: & Fl.
@end enumerate
@end quotation


@c For the time being, it is not mature enough to be widely used.
@c 
今しばらくは,広範囲の使用に十分なほど熟していません.

@c M4sh provides portable alternatives for some common shell constructs
@c that unfortunately are not portable in practice.
@c 
M4shは,実験してみると残念ながら移植性が無い,一般的なシェルの構成に対
する移植性の高い代替物を提供しています.

@defmac AS_DIRNAME (@var{pathname})
@msindex DIRNAME
@c Return the directory portion of @var{pathname}, using the algorithm
@c required by @acronym{POSIX}.  @xref{Limitations of Usual Tools}, for more
@c details about what this returns and why it is more portable than the
@c @command{dirname} command.
@c 
@acronym{POSIX}で要求されるアルゴリズムを使用しながら,@var{pathname} 
のディレクトリ部分を返します.これが返すものと,それが
@command{dirname}コマンドより移植性が高い理由の詳細は,
@xref{Limitations of Usual Tools}.
@end defmac

@defmac AS_MKDIR_P (@var{filename})
@msindex MKDIR_P
@c Make the directory @var{filename}, including intervening directories
@c as necessary.  This is equivalent to @samp{mkdir -p @var{filename}},
@c except that it is portable to older versions of @command{mkdir} that
@c lack support for the @option{-p} option.
@c 
間に入る必要なディレクトリを含め,ディレクトリ@var{filename}を作成しま
す.これは@samp{mkdir -p @var{filename}}と等価ですが,@option{-p}オプ
ションが無い古いバージョンの@command{mkdir}に移植性を持たせます.
@end defmac

@c=================================================== Writing Autoconf Macros.

@node Writing Autoconf Macros
@c @chapter Writing Autoconf Macros
@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 @command{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
@c @section Macro Definitions
@section マクロの定義

@acindex DEFUN
@c Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
@c similar to the M4 builtin @code{m4_define} macro.  In addition to
@c defining a macro, @code{AC_DEFUN} adds to it some code that is used to
@c constrain the order in which macros are called (@pxref{Prerequisite
@c Macros}).
@c 
Autoconfマクロは,M4組み込みの@code{m4_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 @acronym{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, @acronym{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])
# --------------------------------------
m4_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 M4 to discard the text
@c through the next newline.
@c 
ピュアなM4コードに関して,非常に特殊なコメントがある場合は,コメントを
@file{configure}とヘッダコメントに入れる意味がないので,組み込みの
@code{dnl}を使用してください.それで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
@c @section Macro Names
@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 the 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 
オペレーティングシステムの特徴.
@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
@c @section Reporting Messages
@section メッセージの報告
@cindex Messages, from @command{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 @command{configure} is run, see @ref{Printing Messages}.
@c 
マクロが良性または悪性の異常な状況を静的に診断しているとき,以下のマク
ロを使用してそれを報告すべきです.動的な発行,すなわち
@command{configure} が実行されているときは,@ref{Printing Messages}を
参照してください.

@defmac AC_DIAGNOSE (@var{category}, @var{message})
@acindex DIAGNOSE
@c Report @var{message} as a warning (or as an error if requested by the
@c user) if warnings of the @var{category} are turned on.  You are
@c encouraged to use 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 categories.  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})
@acindex 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})
@acindex FATAL
@c Report a severe error @var{message}, and have @command{autoconf} die.
@c 
サーバエラー@var{message}を報告し,@command{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
@c @section Dependencies Between 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
@c @subsection Prerequisite 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})
@acindex 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_temperature_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
@c @subsection Suggested Ordering
@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 @command{configure} from @file{configure.ac}, not when running
@c @command{configure}.
@c 
Autoconfは,これらの依存性を持つマクロが@file{configure.ac}ファイルで
順序が間違って現れるとき,ユーザに警告する@code{AC_BEFORE}を提供してい
ます.警告は,@file{configure.ac}から@command{configure}を作成するとき
に発生しますが,@command{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})
@acindex BEFORE
@c Make 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}が既に呼び出されている場合,M4は標準エラー出力
に警告メッセージを出力します.@var{this-macro-name}は,
@code{AC_BEFORE}を呼び出すマクロの名前にすべきです.マクロ
@var{called-macro-name}は,@code{AC_DEFUN}を使用して定義されている,ま
たは呼び出されていることを示す@code{AC_PROVIDE}の呼び出しを含んでいる
必要があります.
@end defmac

@node Obsoleting Macros
@c @section Obsoleting 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, @command{autoupdate} should replace the old macro calls
@c with their modern implementation.
@c 
コンフィグレーションと移植性の技術は,何年もかかって進展しました.特定
の問題を解決するより良い方法が開発されたり,特別なアプローチが体系化さ
れることはよくあります.この過程はAutoconfの数多くの部分で発生しました.
一つの結果は,今では@dfn{時代遅れ(obsolete)}と思われるマクロの存在です.
まだ動作しますが,すでにそれが最善の方法ではなくなっていて,より近代的
なマクロで置換すべきでしょう.理想的には,@command{autoupdate}が古いマ
クロの呼び出しを現在のマクロに置換すべきでしょう.

@c Autoconf provides a simple means to obsolete a macro.
@c 
Autoconfは,マクロが時代遅れだということを意味する単純なものを提供して
います.

@defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @ovar{message})
@acindex DEFUN
@acindex 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 @command{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 
@command{autoupdate}を使用する場合,@var{old-macro}の呼び出しは現在の
@var{implementation}で置換されます.更に,@var{message}が出力されます.
@end defmac

@node Coding Style
@c @section Coding Style
@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_RUN_IFELSE} or any macro that cannot work when
@c cross-compiling, provide a pessimistic value (typically @samp{no}).
@c 
@code{AC_RUN_IFELSE}や,クロスコンパイルで動作不可能なマクロを使用して
いるとき,悲観的な値(通常は@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
m4_bpatsubst([$1], [$"])
@end example

@noindent
@c use
@c 
以下を使用してください.

@example
m4_bpatsubst([$1], [$""])
@end example

@noindent
@c so that Emacsen do not open an 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 unnecessary.  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{m4_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{m4_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 @command{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{])}を残し,定義されているマク
ロの名前を繰り返すコメントを続けてください.これは,
@command{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.
m4_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
@c @chapter Portable Shell Programming
@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 (@pxref{Systemology}).
@c 
独自の調査を書いているとき,コードを移植性の高いものにするため,使用を
避けるべきシェルスクリプトプログラムのテクニックもあります.Bourneシェ
ルと, BashとKornシェルのような上位互換性があるシェルは,何年もかけて
進展しましたが,問題を避けるために,@sc{unix}バージョン7の以降の1977年
頃に加えられた機能を利用しないでください(@pxref{Systemology}).

@c 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シェル互換のものでは
見つからないすべての機能を使用するべきではありません.最小公倍数に制限
されてます.@code{unset}さえ,全てのシェルではサポートしていません!ま
た,以下のように,インタプリタ仕様として,感嘆符の後にスペースを含めて
ください.

@example
#! /usr/bin/perl
@end example

@noindent
@c If you omit the space before the path, then 4.2@acronym{BSD} based systems
@c (such as DYNIX) will ignore the line, because they interpret
@c @samp{#! /} as a 4-byte magic number.  Some old systems have quite
@c small limits on the length of the @samp{#!} line too, for instance 32
@c bytes (not including the newline) on SunOS 4.
@c 
パスの前のスペースを省略する場合,(DYNIXのような)4.2@acronym{BSD}を基
本とするシステムは,@samp{#! /}は4バイトのマジックナンバーとして解釈さ
れるので,その行を無視します.古いシステムでは,@samp{#!}行の長さにも
小さな制限があり,例えばSunOS 4では,(改行を含めず)32バイトになります.

@c The set of external programs you should run in a @command{configure} script
@c is fairly small.  @xref{Utilities in Makefiles,, Utilities in
@c Makefiles, standards, @acronym{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 
@command{configure}スクリプトで実行すべき外部プログラムの設定は,かな
り小さくなっています.リストは,@xref{Utilities in Makefiles, ,
Utilities in Makefiles, standards, @acronym{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}を参照してください.

@c There are other sources of documentation about shells.  See for instance
@c @href{http://www.faqs.org/faqs/unix-faq/shell/, the Shell FAQs}.
@c 
シェルに関するドキュメントのソースは他にもあります.例えば,
@href{http://www.faqs.org/faqs/unix-faq/shell/, the Shell FAQs}を参照
してください.

@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
@c @section Shellology
@section シェル

@c There are several families of shells, most prominently the Bourne family
@c and the C shell family which are deeply incompatible.  If you want to
@c write portable shell scripts, avoid members of the C shell family.  The
@c @href{http://www.faqs.org/faqs/unix-faq/shell/shell-differences/, the
@c Shell difference FAQ} includes a small history of Unix shells, and a
@c comparison between several of them.
@c 
いくつかのシェルのファミリーがあり,最も重要なものは,Bourneファミリー
とCシェルファミリーで,それらは全く互換性がありません.移植性の高いシェ
ルスクリプトを書きたい場合,Cシェルファミリーのメンバーは避けてくださ
い.@href{http://www.faqs.org/faqs/unix-faq/shell/shell-differences/,
the Shell difference FAQ}には,Unixシェルの小さな歴史と,それらの間の
比較が書かれています.

@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 @acronym{GNU}/Linux and @acronym{BSD}
@c systems as a light-weight Bourne-compatible shell.  Ash 0.2 has some
@c bugs that are fixed in the 0.3.x series, but portable shell scripts
@c should work around them, since version 0.2 is still shipped with many
@c @acronym{GNU}/Linux distributions.
@c 
@command{ash}は,動作の軽いBourne互換シェルとして@acronym{GNU}/Linuxと
@acronym{BSD}システムでよく使用されています.Ash 0.2には0.3.xシリーズ
で修正されているバグがいくつかありますが,バージョン0.2は多くの
@acronym{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
@c subshell, 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 @acronym{POSIX} compatibility, run @samp{set -o posix}.  @xref{Bash POSIX
@c Mode,, Bash @acronym{POSIX} Mode, bash, The @acronym{GNU} Bash Reference
@c Manual}, for details.
@c 
@command{bash}を実行しているかどうかを検出するために,
@code{BASH_VERSION}が設定されているかどうかをテストしてください.その
拡張を利用不可能にし,@acronym{POSIX}互換性を要求するため,@samp{set
-o posix} を実行してください.詳細は,@xref{Bash POSIX Mode,, Bash
@acronym{POSIX} Mode, bash, The @acronym{GNU} Bash Reference Manual}.

@c @item Bash 2.05 and later
@item Bash 2.05とそれ以降
@cindex Bash 2.05 and later
@c Versions 2.05 and later of @command{bash} use a different format for the
@c output of the @command{set} builtin, designed to make evaluating its
@c output easier.  However, this output is not compatible with earlier
@c versions of @command{bash} (or with many other shells, probably).  So if
@c you use @command{bash} 2.05 or higher to execute @command{configure},
@c you'll need to use @command{bash} 2.05 for all other build tasks as well.
@c 
バージョン2.05とそれ以降の@command{bash}は,@command{set}組み込みコマ
ンドの出力に対して,その出力をより容易に評価できるように設計されている
ので,異なる書式を使用しています.しかし,この出力はそれ以前のバージョ
ンの@command{bash}(や,おそらくそれ以外の多くのシェル)と互換性がありま
せん.そのため,@command{bash} 2.05やそれ以上のものを
@command{configure}の実行に使用している場合,それ以外のすべてのビルド
の作業に対しても,同じように@command{bash} 2.05を使用する必要があるで
しょう.

@c @item @command{/usr/xpg4/bin/sh} on Solaris
@item Solarisの@command{/usr/xpg4/bin/sh}
@prindex @command{/usr/xpg4/bin/sh} on Solaris
@c The @acronym{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システム上の@acronym{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 @acronym{GNU} assumption that @command{/bin/sh} is the one and only shell
@c leads to a permanent deadlock.  Vendors don't want to break users'
@c existing shell scripts, and there are some corner cases in the Bourne
@c shell that are not completely compatible with a @acronym{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 @acronym{POSIX} shell.
@c 
@command{/bin/sh}が唯一のシェルであるという@acronym{GNU}仮定では,永久
に行き詰まってしまいます.ベンダーは,ユーザの既存のシェルスクリプトを
壊したくはありませんし,Bourneシェルには@acronym{POSIX}シェルと完全に
互換ではない部分もあります.このため,この方法を採用するベンダーは,
@emph{決して} (OK@dots{}``決して,決してとは言わないよ'')Bourneシェル
を(@command{/bin/sh}として)@acronym{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 @acronym{POSIX} shell.
@c 
これは本当に問題です.ほとんどのもの(少なくともほとんどのSystem V)はシェ
ル関数を受け入れるBourneシェルがあるのですが,ほとんどのベンダーの
@command{/bin/sh}は@acronym{POSIX}シェルではありません.

@c So while most modern systems do have a shell @emph{somewhere} that meets the
@c @acronym{POSIX} standard, the challenge is to find it.
@c 
そのため,ほとんど現在のシステムは@acronym{POSIX}標準に適合しているシェ
ルが@emph{どこかに}あるのですが,問題はそれを見つけることです.
@end quotation

@node Here-Documents
@c @section Here-Documents
@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 Open@acronym{BSD} 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{\}に依存しないでください.Open@acronym{BSD} 2.7のネイティブ
な@command{/bin/sh}では,@samp{\"}は@samp{"}に展開され,ヒアドキュメン
トでは引用符で囲まれていない分離子として用いられます.一般的な規則とし
て,@samp{\\}が@samp{\}に展開される場合,@samp{\}を得るために@samp{\\} 
を使用してください.

@c With Open@acronym{BSD} 2.7's @command{/bin/sh}
@c 
Open@acronym{BSD} 2.7の@command{/bin/sh}では,以下のようになります.

@example
@group
$ @kbd{cat <<EOF
> \" \\
> EOF}
" \
@end group
@end example

@noindent
@c and with Bash:
@c 
そして,Bashでは以下のようになります.

@example
@group
bash-2.04$ @kbd{cat <<EOF
> \" \\
> EOF}
\" \
@end group
@end example


@c Many older shells (including the Bourne shell) implement here-documents
@c inefficiently.  And some shells mishandle large here-documents: for
@c example, Solaris 8 @command{dtksh}, which is derived from
@c @command{ksh} M-12/28/93d, mishandles variable expansion that occurs
@c on 1024-byte buffer boundaries within a here-document.  Users can
@c generally fix these problems by using a faster or more reliable
@c shell, e.g., by using the command @samp{bash ./configure} rather than
@c plain @samp{./configure}.
@c 
多くの古い(Bourneシェルを含む)シェルでは,ヒアドキュメントは非効率に実
装されています.大きなヒアドキュメントを間違って扱うシェルもあります.
例えば,Solaris 8 @command{dtksh}は@command{ksh} M-12/28/93dで提供され
ていて,ヒアドキュメントを1024バイトのバッファの境界で間違った変数の展
開を生じます.ユーザは一般的に,より速くより信頼性の高いシェルを使用し
て,これらの問題を修正することが可能で,例えば,そのまま
@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 can take the shell 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
@c @section File Descriptors
@section ファイルディスクリプタ

@c Some file descriptors shall not be used, since some systems, admittedly
@c arcane, use them for special purpose:
@c 
システムによっては,明らかに不可解なのですが,特殊な目的で使用している
ため,ファイルディスクリプタには使用すべきではないものもあります.

@display
@c 3 --- some systems may open it to @samp{/dev/tty}.
@c 4 --- used on the Kubota Titan.
@c 
3 --- それを@samp{/dev/tty}として開くシステムもあります.
4 --- Kubota Titanで使用されています.
@end display

@c Don't redirect the same file descriptor several times, 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)
$ @kbd{eval 'echo matter >fullness' >void}
illegal io
$ @kbd{eval '(echo matter >fullness)' >void}
illegal io
$ @kbd{(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 undesirable content
@c if you meant to capture the standard-error output of the inner command:
@c 
ほとんどのシェルでは,(Bash,Zsh,Ashを含め)全てではありませんが,標準
エラー出力を,サブシェルに対しても追跡しています.内部コマンドの標準エ
ラー出力を得る目的がある場合,これでは結果が望まない内容になるかもしれ
ません.

@example
$ @kbd{ash -x -c '(eval "echo foo >&2") 2>stderr'}
$ @kbd{cat stderr}
+ eval echo foo >&2
+ echo foo
foo
$ @kbd{bash -x -c '(eval "echo foo >&2") 2>stderr'}
$ @kbd{cat stderr}
+ eval 'echo foo >&2'
++ echo foo
foo
$ @kbd{zsh -x -c '(eval "echo foo >&2") 2>stderr'}
@i{# Traces on startup files deleted here.}
$ @kbd{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@enddots{}
@c 
様々なレベルの詳細を認めるでしょう@enddots{}

@c One workaround is to grep out uninteresting lines, hoping not to remove
@c good ones@enddots{}
@c 
一つの回避方法は,興味がない行をgrepで削除することで,良い行は削除しな
いことを期待しつつ@enddots{}

@c Don't try to move/delete open files, such as in @samp{exec >foo; mv foo
@c bar}; see @ref{Limitations of Builtins}, @command{mv} for more details.
@c 
@samp{exec >foo; mv foo bar}のように,開いているファイルの移動/削除の
試みはしないようにしてください.@command{mv}の詳細は,@ref{Limitations
of Builtins}を参照してください.

@node File System Conventions
@c @section File System Conventions
@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 @acronym{DOS}
@c variants.  This impacts several assumptions regarding file and
@c path names.
@c 
@command{autoconf}とその仲間達は,通常様々なUnixで実行されますが,それ
はその他のシステムでも使用され,最も顕著なものとしては@acronym{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 the
@c @code{PATH_SEPARATOR} output variable instead.  @command{configure} sets this
@c to the appropriate value (@samp{:} or @samp{;}) when it starts up.
@c 
また,コロンがデバイス指定の一部として使用されているので,これらのシス
テムではそれをパスの分離子として使用していません.パスを作成していると
きやパスにアクセスしているときは,代わりに@code{PATH_SEPARATOR}出力変
数を使用してください.@command{configure}は,開始時にこれを適切な値
(@samp{:} または@samp{;})に設定します.

@c File names need extra care as well.  While @acronym{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のような@acronym{DOS}ベースの
環境では,通常長いファイル名を適切に扱うことが可能ですが,パッケージを
壊してしまう深刻な制限も残っています.これらの問題のいくつかは,
@href{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk} 
パッケージで容易に検出することが可能です.

@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 @acronym{DOS}, not to @acronym{DOS} boxes under Windows, while @sc{lfn}
@c identifies problems that exist even under Windows.
@c 
以下は簡単な全体像です.問題には,適用を示すため@sc{sfn}/@sc{lfn}で印
がついています.@sc{sfn}は,Windows下の@acronym{DOS}窓ではなく,プレー
ンな@acronym{DOS}にのみ関連する問題を意味し,一方@sc{lfn}は,Windowsで
も存在する問題を意味しています.

@table @asis
@c @item No multiple dots (@sc{sfn})
@item 複数のドットの禁止 (@sc{sfn})
@c @acronym{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 
@acronym{DOS}はファイル名に複数のドットがあるものを扱うことが不可能で
す.これは,@command{autoconf}は@file{.in}をテンプレートファイルの接尾
子に使用するので,移植性の高いconfigureスクリプトを構築しているときに
覚えておく必要がある,特に重要なことです.

@c This is perfectly OK on Unices:
@c 
以下はUnix上では完全にOKです.

@example
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([source.c foo.bar])
AC_OUTPUT
@end example

@noindent
@c but it causes problems on @acronym{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 @acronym{DOS}-based environments, you should use this instead:
@c 
しかし,それは@samp{config.h.in},@samp{source.c.in},そして
@samp{foo.bar.in}が必要になるので,@acronym{DOS}では問題があります.パッ
ケージを@acronym{DOS}ベースの環境でより移植性を高くするため,その代わ
りに以下を使用すべきです.

@example
AC_CONFIG_HEADERS([config.h:config.hin])
AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
AC_OUTPUT
@end example

@c @item No leading dot (@sc{sfn})
@item ドットの前置の禁止 (@sc{sfn})
@c @acronym{DOS} cannot handle filenames that start with a dot.  This is usually
@c not a very important issue for @command{autoconf}.
@c 
@acronym{DOS}はドットで始まるファイル名を扱うことが不可能です.これは
通常,@command{autoconf}に対してはあまり重要ではない問題です.

@c @item Case insensitivity (@sc{lfn})
@item 大文字小文字を区別しない (@sc{lfn})
@c @acronym{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, @samp{make install} will do nothing (unless the
@c @samp{install} target is marked as PHONY).
@c 
@acronym{DOS}は大文字小文字を区別しないので,例えば,@samp{INSTALL}と
いう名のファイルと@samp{install}という名のディレクトリの両方を持つこと
ができません.これは,@command{make}にも影響します.ディレクトリに
@samp{INSTALL}という名のファイルがある場合,@samp{make install}は
(@samp{install}がPHONY として印がついていないとき)何もしません.

@c @item The 8+3 limit (@sc{sfn})
@item 8+3の制限 (@sc{sfn})
@c Because the @acronym{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 
@acronym{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 behavior 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}の環境で共有することが可能になりますが,上
記の問題は同様に存在します.

@c @item Invalid characters
@item 無効な文字
@c Some characters are invalid in @acronym{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 
@acronym{DOS}ファイル名で無効な文字もあり,そのため避けた方が良いでしょ
う.@sc{lfn}の環境では,@samp{/},@samp{\},@samp{?},@samp{*},
@samp{:},@samp{<},@samp{>},@samp{|},そして@samp{"}です.@sc{sfn}環
境では,それ以外にも無効になります.これには,@samp{+},@samp{,},
@samp{[},そして@samp{]}が含まれます.
@end table

@node Shell Substitutions
@c @section Shell Substitutions
@section シェルの代入

@c Contrary to a persistent urban legend, the Bourne shell does not
@c systematically split variables and back-quoted 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 back-quoted 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, @acronym{POSIX} says
@c that @samp{"$@@"} is supposed to be equivalent to nothing, but the
@c original Unix Version 7 Bourne shell treated it as equivalent to
@c @samp{""} instead, and this behavior survives in later implementations
@c like Digital Unix 5.0.
@c 
最も有名なシェルの移植性の問題の一つは,@samp{"$@@"}との関連です.位置
に依存する引数が無いとき,@acronym{POSIX}では@samp{"$@@"}を何もないこ
とと等価になっていますが,オリジナルのUnixバージョン7のBourneシェルは
その代わりに@samp{""}として扱い,この動作はDigital Unix 5.0のようにそ
れ以降の実装でも提供されています.

@c The traditional way to work around this portability problem is to use
@c @samp{$@{1+"$@@"@}}.  Unfortunately this method does not work with
@c Zsh (3.x and 4.x), which is used on Mac OS X.  When emulating
@c the Bourne shell, Zsh performs word splitting on @samp{$@{1+"$@@"@}}:
@c 
この移植性の問題を回避する伝統的な方法は,@samp{$@{1+"$@@"@}}を使用す
ることです.残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x
と4.x)では動作しません.Bourneシェルをエミュレートしているとき,Zshは
@samp{$@{1+"$@@"@}}で単語の分離を実行します.

@example
zsh $ @kbd{emulate sh}
zsh $ @kbd{for i in "$@@"; do echo $i; done}
Hello World
!
zsh $ @kbd{for i in $@{1+"$@@"@}; do echo $i; done}
Hello
World
!
@end example

@noindent
@c Zsh handles plain @samp{"$@@"} properly, but we can't use plain
@c @samp{"$@@"} because of the portability problems mentioned above.
@c One workaround relies on Zsh's ``global aliases'' to convert
@c @samp{$@{1+"$@@"@}} into @samp{"$@@"} by itself:
@c 
Zshは,プレーンの@samp{"$@@"}をおそらく処理しますが,上記の移植性の問
題のため,プレーンの@samp{"$@@"}を使用することはできません.回避する方
法の一つは,@samp{$@{1+"$@@"@}}を@samp{"$@@"}に変換するZshの``global
aliases''に依存します.

@example
test "$@{ZSH_VERSION+set@}" = set && alias -g '$@{1+"$@@"@}'='"$@@"'
@end example

@c A more conservative workaround is to avoid @samp{"$@@"} if it is
@c possible that there may be no positional arguments.  For example,
@c instead of:
@c 
より保守的な回避方法は,位置に依存する引数を用いなくても良い限り,
@samp{"$@@"}を避けることです.例えば,以下の代わりを考えます.

@example
cat conftest.c "$@@"
@end example

@c you can use this instead:
@c 
この代わりに以下を使用することが可能です.

@example
case $# in
0) cat conftest.c;;
*) cat conftest.c "$@@";;
esac
@end example

@item $@{@var{var}:-@var{value}@}
@c Info cannot handle `:' in index entries.
@c @cindex $@{@var{var}:-@var{value}@}
@c 
@c Old @acronym{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}を含め,古い@acronym{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''の
ために終了します.

@sp 1

@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
$ @kbd{unset foo}
$ @kbd{foo=$@{foo='@}'@}}
$ @kbd{echo $foo}
@}
$ @kbd{foo=$@{foo='@}'   # no error; this hints to what the bug is}
$ @kbd{echo $foo}
@}
$ @kbd{foo=$@{foo='@}'@}}
$ @kbd{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}に設定し,すなわち,全ての文
字の八番目のビットがセットされるでしょう.@samp{$var}を展開するとき,
シェルが八番目のビットを明示的にリセットするので,単純に@samp{echo
$var}を使用している現象が分かりません.このシェルにその違反で混乱させ
る二つの方法は,以下のようになります.

@example
$ @kbd{cat -v <<EOF
$var
EOF}
@end example

@noindent
@c and
@c 
それと以下です.

@example
$ @kbd{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- },すなわち八ビット目を
設定するスペースがあるので,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 @acronym{QNX} 4.25 then sets @var{list} to the @emph{last} item of
@c @var{default}!
@c 
良いニュースの一つは,Ultrixが@samp{: $@{list=$default@}}で正確に動作
することです.すなわち,引用符で囲ま@emph{ない}場合です.悪いニュース
としては,@acronym{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で八番目のビットを二回切替えるために,二重
(引用符による)代入を使用することです.

@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, becauase Ash 0.2, trying to optimize, does not fork a
@c subshell 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
$ @kbd{pwd}
/tmp
$ @kbd{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
$ @kbd{showrev -c /bin/sh | grep version}
Command version: SunOS 5.8 Generic 109324-02 February 2001
$ @kbd{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
$ @kbd{uname -a}
IRIX firebird-image 6.5 07151432 IP22
$ @kbd{echo $(echo blah)}
$(echo blah)
@end example
@end table


@node Assignments
@c @section Assignments
@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 following to find @file{subdir/program}:
@c 
@file{subdir/program}を見つけるために,以下に依存しないようにしてくだ
さい.

@example
PATH=subdir$PATH_SEPARATOR$PATH program
@end example

@noindent
@c as this does not work with Zsh 3.0.6.  Use something like this
@c instead:
@c 
これはZsh 3.0.6では動作しません.代わりに以下のようなものを使用してく
ださい.

@example
(PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
@end example

@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
$ @kbd{false || foo=bar; echo $?}
1
$ @kbd{false || foo=`:`; echo $?}
0
@end example

@noindent
@c and to make things even worse, @acronym{QNX} 4.25 just sets the exit status
@c to 0 in any case:
@c 
そして,更に悪いことに,@acronym{QNX} 4.25はあらゆる場合で終了ステータ
スを0に設定します.

@example
$ @kbd{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
@c @section Special Shell Variables
@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 it specifies a list of directories to search
@c when invoking @code{cd} with a relative filename.  @acronym{POSIX}
@c 1003.1-2001 says that if a nonempty directory name from @code{CDPATH}
@c is used successfully, @code{cd} prints the resulting absolute
@c filename.  Unfortunately this output can break idioms like
@c @samp{abs=`cd src && pwd`} because @code{abs} receives the path twice.
@c Also, many shells do not conform to this part of @acronym{POSIX}; for
@c example, @command{zsh} prints the result only if a directory name
@c other than @file{.} was chosen from @code{CDPATH}.
@c 
この変数が設定されているとき,それは@code{cd}が相対的なファイル名で呼
び出されるときに検索するディレクトリのリストを設定します.
@acronym{POSIX} 1003.1-2001では,@code{CDPATH}で空ではないディレクトリ
名が正しく使用されている場合,@code{cd}は絶対的なファイル名を結果とし
て出力することになっています.残念ながらこの出力では,@code{abs}がパス
を二回受けとるので,@samp{abs=`cd src && pwd`}のような慣用句が駄目にな
ります.また,多くのシェルは,この部分の@acronym{POSIX}に準拠していま
せん.例えば,@command{zsh} は,@file{.}以外のディレクトリ名が
@code{CDPATH}で選択されている場合以外,結果を出力しません.

@c In practice the shells that have this problem also support
@c @command{unset}, so you can work around the problem as follows:
@c 
実際,この問題があるシェルは@command{unset}もサポートしているので,以
下のようにしてその問題を回避することが可能です.

@example
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
@end example

@c Autoconf-generated scripts automatically unset @code{CDPATH} if
@c possible, so you need not worry about this problem in those scripts.
@c 
Autoconfが生成したスクリプトは自動的に@code{CDPATH}をunsetするので,こ
れらのスクリプトのこの問題を心配する必要はありません.

@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シェルは最初の文字(バックスラッ
シュ)を使用し,そして,バックスラッシュエスケープをもう一度解釈する(!) 
シェルもあり,そのため,バックスペースとその他の奇妙な文字で終ることが
可能になっています.

@c The proper value for @code{IFS} (in regular code, not when performing
@c splits) is @samp{@key{SPC}@key{TAB}@key{RET}}.  The first character is
@c especially important, as it is used to join the arguments in @samp{@@*}.
@c 
(splitを実行していないとき,標準的なコードの)@code{IFS}の適切な値は,
@samp{@key{SPC}@key{TAB}@key{RET}}です.@samp{@@*}の引数を連結するため
に使用するので,最初の文字は特に重要です.

@item LANG
@itemx LC_ALL
@itemx LC_COLLATE
@itemx LC_CTYPE
@itemx LC_MESSAGES
@itemx LC_MONETARY
@itemx LC_NUMERIC
@itemx LC_TIME
@evindex LANG
@evindex LC_ALL
@evindex LC_COLLATE
@evindex LC_CTYPE
@evindex LC_MESSAGES
@evindex LC_MONETARY
@evindex LC_NUMERIC
@evindex LC_TIME

@c Autoconf-generated scripts normally set all these variables to
@c @samp{C} because so much configuration code assumes the C locale and
@c @acronym{POSIX} requires that locale environment variables be set to
@c @samp{C} if the C locale is desired.  However, some older, nonstandard
@c systems (notably @acronym{SCO}) break if locale environment variables
@c are set to @samp{C}, so when running on these systems
@c Autoconf-generated scripts unset the variables instead.
@c 
あまりに多くのコンフィグレーションコードがCロケールを仮定していて,
@acronym{POSIX}ではCロケールが要求される場合はロケールの環境変数を
@samp{C}に設定する必要があるので,Autoconfが生成したスクリプトは通常,
これらのすべての変数を@samp{C}に設定します.しかし,非標準の古いシステ
ム(特に@acronym{SCO})では,ロケールの環境変数が@samp{C}に設定されてい
る場合は壊れてしまうので,これらのシステムでAutoconfが生成したスクリプ
トを実行するとき,代わりに変数を未設定(unset)にしてください.

@item LANGUAGE
@evindex LANGUAGE

@c @env{LANGUAGE} is not specified by @acronym{POSIX}, but it is a @acronym{GNU}
@c extension that overrides @env{LC_ALL} in some cases, so
@c Autoconf-generated scripts set it too.
@c 
@env{LANGUAGE}は@acronym{POSIX}で指定されていませんが,それは場合によっ
ては@env{LC_ALL}に優先させる@acronym{GNU}の拡張なので,Autoconfが生成
したスクリプトはそれも設定します.

@item LC_ADDRESS
@itemx LC_IDENTIFICATION
@itemx LC_MEASUREMENT
@itemx LC_NAME
@itemx LC_PAPER
@itemx LC_TELEPHONE
@evindex LC_ADDRESS
@evindex LC_IDENTIFICATION
@evindex LC_MEASUREMENT
@evindex LC_NAME
@evindex LC_PAPER
@evindex LC_TELEPHONE

@c These locale environment variables are @acronym{GNU} extensions.  They
@c are treated like their @acronym{POSIX} brethren (@env{LC_COLLATE},
@c etc.)@: as described above.
@c 
これらのロケール環境変数は@acronym{GNU}の拡張です.それらは,上記の
@acronym{POSIX}の仲間(@env{LC_COLLATE}など)のように扱われます.

@item LINENO
@evindex LINENO
@c Most modern shells provide the current line number in @code{LINENO}.
@c Its value is the line number of the beginning of the current command.
@c Autoconf attempts to execute @command{configure} with a modern shell.
@c If no such shell is available, it attempts to implement @code{LINENO}
@c with a Sed prepass that replaces each instance of the string
@c @code{$LINENO} (not followed by an alphanumeric character) with the
@c line's number.
@c 
ほとんどの近代的なシェルは,現在の行番号を@code{LINENO}で提供していま
す.その値は,現在のコマンドの最初の行番号です.Autoconfは近代的なシェ
ルで@command{configure}の実行を試みます.利用可能なそのようなシェルが
無い場合,それぞれの文字列@code{$LINENO}(英数文字が続かない)をインスタ
ンスを行番号で置換するために,Sedに前もって渡す手法を用いて,
@code{LINENO}の実装を試みます.

@c You should not rely on @code{LINENO} within @command{eval}, as the
@c behavior differs in practice.  Also, the possibility of the Sed
@c prepass means that you should not rely on @code{$LINENO} when quoted,
@c when in here-documents, or when in long commands that cross line
@c boundaries.  Subshells should be OK, though.  In the following
@c example, lines 1, 6, and 9 are portable, but the other instances of
@c @code{LINENO} are not:
@c 
実行時の動作が異なるので,@command{eval}で@code{LINENO}に依存すべきで
はありません.また,Sedに前もって渡す手法を用いる可能性は,引用符で囲
んでいるとき,ヒアドキュメントのとき,または行を跨るほど長いコマンドの
とき,@code{$LINENO}に依存すべきではないことを意味しています.ただし,
サブシェルは問題ありません.以下の例では,一行目,六行目,そして九行目
は移植性がありますが,それ以外の@code{LINENO}のインスタンスは移植性が
ありません.

@example
@group
$ @kbd{cat lineno}
echo 1. $LINENO
cat <<EOF
3. $LINENO
4. $LINENO
EOF
( echo 6. $LINENO )
eval 'echo 7. $LINENO'
echo 8. '$LINENO'
echo 9. $LINENO '
10.' $LINENO
@end group
@group
$ @kbd{bash-2.05 lineno}
1. 1
3. 2
4. 2
6. 6
7. 1
8. $LINENO
9. 9
10. 9
@end group
@group
$ @kbd{zsh-3.0.6 lineno}
1. 1
3. 2
4. 2
6. 6
7. 7
8. $LINENO
9. 9
10. 9
@end group
@group
$ @kbd{pdksh-5.2.14 lineno}
1. 1
3. 2
4. 2
6. 6
7. 0
8. $LINENO
9. 9
10. 9
@end group
@group
$ @kbd{sed '=' <lineno |}
> @kbd{  sed '}
> @kbd{    N}
> @kbd{    s,$,-,}
> @kbd{    : loop}
> @kbd{    s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,}
> @kbd{    t loop}
> @kbd{    s,-$,,}
> @kbd{    s,^[0-9]*\n,,}
> @kbd{  ' |}
> @kbd{  sh}
1. 1
3. 3
4. 4
6. 6
7. 7
8. 8
9. 9
10. 10
@end group
@end example


@item NULLCMD
@evindex NULLCMD
@c When executing the command @samp{>foo}, @command{zsh} executes
@c @samp{$NULLCMD >foo}.  The Bourne shell considers @code{NULLCMD} to be
@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 ENV
@itemx MAIL
@itemx MAILPATH
@itemx PS1
@itemx PS2
@itemx PS4
@evindex ENV
@evindex MAIL
@evindex MAILPATH
@evindex PS1
@evindex PS2
@evindex PS4
@c These variables should not matter for shell scripts, since they are
@c supposed to affect only interactive shells.  However, at least one
@c shell (the pre-3.0 @sc{uwin} @command{ksh}) gets confused about
@c whether it is interactive, which means that (for example) a @env{PS1}
@c with a side effect can unexpectedly modify @samp{$?}.  To work around
@c this bug, Autoconf-generated scripts do something like this:
@c 
これらの変数は,対話的なシェルに対してのみ影響すると考えられるので,シェ
ルスクリプトに対して問題はありません.しかし,少なくとも一つのシェル
(pre-3.0 @sc{uwin} @command{ksh})はそれが対話的かどうかを混同し,つま
り(例えば)@env{PS1}の副作用として,@samp{$?}を予期せず変更するはずです.
このバグを回避するために,Autoconfが生成したスクリプトは以下のようなこ
とをします.

@example
(unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
PS1='$ '
PS2='> '
PS4='+ '
@end example

@item PWD
@evindex PWD
@c @acronym{POSIX} 1003.1-2001 requires that @command{cd} and
@c @command{pwd} must update the @env{PWD} environment variable to point
@c to the logical path to the current directory, but traditional shells
@c do not support this.  This can cause confusion if one shell instance
@c maintains @env{PWD} but a subsidiary and different shell does not know
@c about @env{PWD} and executes @command{cd}; in this case @env{PWD} will
@c point to the wrong directory.  Use @samp{`pwd`} rather than
@c @samp{$PWD}.
@c 
@acronym{POSIX} 1003.1-2001は,@command{cd}と@command{pwd}が現在のディ
レクトリの論理的なパスを示す@env{PWD}環境変数を必ず更新することを要求
していますが,伝統的なシェルはこれをサポートしていません.一つのシェル
の実体が@env{PWD}を管理していて,サブディレクトリと別のシェルは
@env{PWD}を知らずに@command{cd}を実行する場合,これで混乱するはずです.
この状況では,@env{PWD}は間違ったディレクトリを示します.@samp{$PWD}の
代わりに@samp{`pwd`}を使用してください.

@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 If it is not set, @command{configure} will detect the appropriate path
@c separator for the build system and set the @code{PATH_SEPARATOR} output
@c variable accordingly.
@c 
設定されていない場合,@command{configure}はビルドシステムに対する適切
なパスの分離子を検出し,@code{PATH_SEPARATOR}出力変数をそれに応じて設
定します.

@c On DJGPP systems, the @code{PATH_SEPARATOR} environment variable can be
@c set to either @samp{:} or @samp{;} to control the path separator
@c @command{bash} uses to set up certain environment variables (such as
@c @code{PATH}).  Since this only works inside @command{bash}, you want
@c @command{configure} to detect the regular @acronym{DOS} path separator
@c (@samp{;}), so it can be safely substituted in files that may not support
@c @samp{;} as path separator.  So it is recommended to either unset this
@c variable or set it to @samp{;}.
@c 
DJGPPシステムでは,パス分離子を制御するために,@code{PATH_SEPARATOR}環
境変数を@command{bash}が(@code{PATH}のような)特定の環境変数を設定する
ために使用している@samp{:}または@samp{;}のいずれかに設定することが可能
です.これは@command{bash}内部でのみ動作するので,パス分離子として
@samp{;}がサポートされていないファイル内で代入する方が安全だろうという
理由から,@command{configure}で標準的な@acronym{DOS}のパス分離子
(@samp{;})を検出したいことでしょう.そのため,この変数をunsetするか,
@samp{;}に設定してください.

@item RANDOM
@evindex RANDOM
@c Many shells provide @code{RANDOM}, a variable that returns a different
@c integer each time it is used.  Most of the time, its value does not
@c change when it is not used, but on @sc{irix} 6.5 the value changes all
@c the time.  This can be observed by using @command{set}.
@c 
@code{RANDOM}を提供するシェルも多くあり,その変数は使用するたびに異な
る整数を返します.その値が使用されていないとき,変更さることはほとんど
ありませんが,@sc{irixq} 6.5では毎回値が変更されます.これは,
@command{set}を使用して監視すべきです.
@end table


@node Limitations of Builtins
@c @section Limitations of Shell Builtins
@section シェル組み込みの制限

@c No, no, we are serious: some shells do have limitations!  :)
@c 
だめだよ全く,我々は本気なのに.制限のあるシェルもあるんです! :)

@c You should always keep in mind that any builtin 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{.}
@prindex @command{.}
@c Use @command{.} only with regular files (use @samp{test -f}).  Bash
@c 2.03, for instance, chokes on @samp{. /dev/null}.  Also, remember that
@c @command{.} uses @env{PATH} if its argument contains no slashes, so if
@c you want to use @command{.} on a file @file{foo} in the current
@c directory, you must use @samp{. ./foo}.
@c 
通常のファイル(@samp{test -f}を使用してください)を用いるときだけ
@command{.}コマンドを使用してください.例えば,Bash 2.03は,
@samp{. /dev/null}で固まります.また,引数にスラッシュを含まない場合は
@command{.}は@env{PATH}を使用するので,現在のディレクトリのファイル
@file{foo}で@command{.}を使用したい場合,@samp{. ./foo}を使用する必要
があることを覚えておいてください.

@item @command{!}
@prindex @command{!}
@c You can't use @command{!}; you'll have to rewrite your code.
@c 
@command{!}を使用することは不可能です.コードを書き換える必要がありま
す.


@item @command{break}
@c ------------------
@prindex @command{break}
@c The use of @samp{break 2} etc.@: is safe.
@c 
@samp{break 2}の使用などは安全です.


@item @command{cd}
@c ---------------------------------
@prindex @command{cd}
@c @acronym{POSIX} 1003.1-2001 requires that @command{cd} must support
@c the @option{-L} (``logical'') and @option{-P} (``physical'') options,
@c with @option{-L} being the default.  However, traditional shells do
@c not support these options, and their @command{cd} command has the
@c @option{-P} behavior.
@c 
@acronym{POSIX} 1003.1-2001では,@command{cd}が@option{-L} (``論理的'') 
と@option{-P} (``物理的'')オプションをサポートし,@option{-L}がデフォ
ルトであることを要求しています.しかし,伝統的なシェルはこれらのオプショ
ンをサポートしておらず,@command{cd}コマンドは@option{-P}のように動作
します.

@c Portable scripts should assume neither option is supported, and should
@c assume neither behavior is the default.  This can be a bit tricky,
@c since the @acronym{POSIX} default behavior means that, for example,
@c @samp{ls ..} and @samp{cd ..} may refer to different directories if
@c the current logical directory is a symbolic link.  It is safe to use
@c @command{cd @var{dir}} if @var{dir} contains no @file{..} components.
@c Also, Autoconf-generated scripts check for this problem when computing
@c variables like @code{ac_top_srcdir} (@pxref{Configuration Actions}),
@c so it is safe to @command{cd} to these variables.
@c 
移植性の高いスクリプトは,どちらのオプションもサポートしていると仮定す
べきではなく,どちらの動作もデフォルトと仮定すべきではありません.これ
はちょっとトリッキーで,例えば,@acronym{POSIX}のデフォルトの動作では,
現在の論理的なディレクトリがシンボリックリンクの場合,@samp{ls ..}と
@samp{cd ..}では異なるディレクトリを参照している可能性があります.
@var{dir}に@file{..}の要素が無い場合,@command{cd @var{dir}}を使用して
も安全です.また,Autoconfが生成するスクリプトは,@code{ac_top_srcdir}
のような変数を計算するとき,この問題を調査するので
(@pxref{Configuration Actions}),これらの変数で@command{cd}しても安全
です.

@c Also please see the discussion of the @command{pwd} command.
@c 
@command{pwd}コマンドの議論も参照してください.


@item @command{case}
@c -----------------
@prindex @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$ @kbd{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$ @kbd{case '\TMP' in [\\/]*) echo OK;; esac}
OK
bash-2.02$ @kbd{case /tmp in [\\/]*) echo OK;; esac}
OK
@end example

@c Some shells, such as Ash 0.3.8, are confused by an empty
@c @code{case}/@code{esac}:
@c 
Ash 0.3.8のように,シェルによっては空の@code{case}/@code{esac}で混乱す
るものもあります.

@example
ash-0.3.8 $ @kbd{case foo in esac;}
@error{}Syntax error: ";" unexpected (expecting ")")
@end example

@c Many shells still do not support parenthesized cases, which is a pity
@c for those of us using tools that rely on balanced parentheses.  For
@c instance, Solaris 2.8's Bourne shell:
@c 
多くのシェルでは,カッコで囲まれているケース文をサポートしておらず,そ
れは,対になっているカッコに依存しているツールを使用している我々のよう
な人間にとっては残念なことです.例えば,Solaris 2.8のBourneシェルがそ
うです.

@example
$ @kbd{case foo in (foo) echo foo;; esac}
@error{}syntax error: `(' unexpected
@end example


@item @command{echo}
@c -----------------
@prindex @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{-n}.
@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 and @acronym{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と
@acronym{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 -----------------
@prindex @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$ @kbd{foo=`exit 1` || echo fail}
fail
bash-2.04$ @kbd{foo=`(exit 1)` || echo fail}
fail
bash-2.04$ @kbd{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 argument.  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 -------------------
@prindex @command{export}
@c The builtin @command{export} dubs a shell variable @dfn{environment
@c variable}.  Each update of exported variables corresponds to an update
@c of 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{環境変数(environment
variable)}に複製します.変数がエクスポートされて更新される度に,環境変
数も更新されます.反対に,環境変数はがシェルから読み出される度に,開始
時にエクスポートされたものとして印のついたシェル変数をインポートするべ
きです.

@c Alas, many shells, such as Solaris 2.5, @sc{irix} 6.3, @sc{irix} 5.2,
@c @acronym{AIX} 4.1.5, and Digital @sc{unix} 4.0, forget to
@c @command{export} the environment variables they receive.  As a result,
@c two variables coexist: the environment variable and the shell
@c variable.  The following code demonstrates this failure:
@c 
ああ,Solaris 2.5,@sc{irix} 6.3,@sc{irix} 5.2,@acronym{AIX} 4.1.5,
そしてDigital @sc{unix} 4.0のような多くのシェルは,受けとった環境変数
を@command{export}することを忘れています.結果として,二つの変数は共存
しています.環境変数とシェル変数の二つです.以下のコードは,この失敗を
説明するものです.

@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 ------------------
@prindex @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 ----------------
@prindex @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 
シェルによっては,間違って解釈するので,@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

@noindent
@c But keep in mind that Zsh, even in Bourne shell emulation mode, performs
@c word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
@c item @samp{$@@}, for more.
@c 
しかし,ZshはBourneシェルエミュレーションモードでも,
@samp{$@{1+"$@@"@}}で単語の分離を試みるのことを覚えておいてください.
@samp{$@@}の詳細は,@ref{Shell Substitutions}を参照してください.


@item @command{if}
@c ---------------
@prindex @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
$ @kbd{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}を出力すべきです.これは,異常終了と
なるので,@file{Makefile}では特に問題です.これが,Automakeが生成する
ような適切に書かれている@file{Makefile}がごちゃごちゃした構成になって
いる理由です.

@example
if test -f "$file"; then
  install "$file" "$dest"
else
  :
fi
@end example


@item @command{pwd}
@c ----------------
@prindex @command{pwd}
@c With modern shells, plain @command{pwd} outputs a ``logical''
@c directory name, some of whose components may be symbolic links.  These
@c directory names are in contrast to ``physical'' directory names, whose
@c components are all directories.
@c 
最近のシェルを用いると,@command{pwd}は``論理的な''ディレクトリ名を出
力し,その構成要素にはシンボリックリンクがある可能性があります.これら
のディレクトリ名は,構成要素はすべてディレクトリとなっている``物理的な'' 
ディレクトリ名とは異なります.

@c @acronym{POSIX} 1003.1-2001 requires that @command{pwd} must support
@c the @option{-L} (``logical'') and @option{-P} (``physical'') options,
@c with @option{-L} being the default.  However, traditional shells do
@c not support these options, and their @command{pwd} command has the
@c @option{-P} behavior.
@c 
@acronym{POSIX} 1003.1-2001では,@command{pwd}は,@option{-L} (``論理
的'') と@option{-P} (``物理的'')オプションをサポートし,@option{-L}が
デフォルトになっている必要があります.しかし,伝統的なシェルはこれらの
オプションをサポートしておらず,@command{pwd}コマンドは@option{-P}のよ
うに動作します.

@c Portable scripts should assume neither option is supported, and should
@c assume neither behavior is the default.  Also, on many hosts
@c @samp{/bin/pwd} is equivalent to @samp{pwd -P}, but @acronym{POSIX}
@c does not require this behavior and portable scripts should not rely on
@c it.
@c 
移植性の高いスクリプトでは,どちらのオプションもサポートしていると仮定
すべきではなく,どちらの動作もデフォルトと仮定すべきではありません.ま
た,多くのホストは@samp{/bin/pwd}が@samp{pwd -P}と同じですが,
@acronym{POSIX} はこの動作を要求しておらず,移植性の高いシェルではそれ
に依存すべきではありません.

@c Typically it's best to use plain @command{pwd}.  On modern hosts this
@c outputs logical directory names, which have the following advantages:
@c 
通常,そのまま@command{pwd}を使用するのが最善でしょう.最近のホストで
は,これで論理的なディレクトリ名を出力し,以下の利点があります.

@itemize @bullet
@item
@c Logical names are what the user specified.
@c 
論理的な名前はユーザが指定するものです.
@item
@c Physical names may not be portable from one installation
@c host to another due to network filesystem gymnastics.
@c 
物理的な名前は,インストールしたホストと,それ以外のネットワークファイ
ルシステムとで移植性が無いかもしれません.
@item
@c On modern hosts @samp{pwd -P} may fail due to lack of permissions to
@c some parent directory, but plain @command{pwd} cannot fail for this
@c reason.
@c 
最近のホストでは,親ディレクトリに許可が無いと@samp{pwd -P}は失敗する
かもしれませんが,@command{pwd}をそのまま使うと,この理由で失敗するは
ずはありません.
@end itemize

@c Also please see the discussion of the @command{cd} command.
@c 
@command{cd}コマンドでの議論も参照してください.


@item @command{set}
@c ----------------
@prindex @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 parameter,
@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

@c Some shells have the "opposite" problem of not recognizing all options
@c (e.g., @samp{set -e -x} assigns @samp{-x} to the command line).  It is
@c better to elide these:
@c 
すべてのオプションを認識しないこととは"反対"の問題(例えば,@samp{set
-e -x}で@samp{-x}をコマンドラインに割り当てるといった問題)があるシェル
もあります.以下のように省略した方が良いでしょう.

@example
set -ex
@end example


@item @command{shift}
@c ------------------
@prindex @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 @acronym{MIPS
@c RISC/OS} 4.52 refuses to do it.
@c 
@command{shift}するものが無いとき,@command{shift}を使用することは悪い
考え方であるだけでなく,移植性が無くなってしまいことも追加されてしまい
ます.@acronym{MIPS RISC/OS} 4.52のシェルは,それを廃棄してしまいます.


@item @command{source}
@c -------------------
@prindex @command{source}
@c This command is not portable, as @acronym{POSIX} does not require it; use
@c @command{.} instead.
@c 
@acronym{POSIX}が要求していないので,このコマンドは移植性がありません.
代わりに@command{.}を使用してください.


@item @command{test}
@c -----------------
@prindex @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, @acronym{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}の優先順位は,
単項演算子とは間違った関係になっています.従って,@acronym{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 @command{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 4.3@acronym{BSD} does not
@c have it.  Do not use @samp{test -e} either, because Solaris 2.5 does not
@c have it.
@c 
@command{configure}スクリプトでクロスコンパイルのサポートを可能にする
ため,ホストシステムの代わりに,ビルドシステムの特徴のテストは,何もす
べきではありません.しかし,任意のファイルの存在を調査する必要があるこ
とが判明するかもしれません.そうするために@samp{test -f}や@samp{test
-r}を使用してください.4.3@acronym{BSD}には@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
@c @samp{test -z @var{string}} @strong{are} portable.  Nevertheless many
@c shells (such as Solaris 2.5, @acronym{AIX} 3.2, @sc{unicos} 10.0.0.6,
@c Digital Unix 4 etc.) have bizarre precedence and may be confused if
@c @var{string} looks like an operator:
@c 
一般に信じられていることとは反対に,@samp{test -n @var{string}}と
@samp{test -z @var{string}}は,移植性が@strong{あります}.それにもかか
わらず,(Solaris 2.5,@acronym{AIX} 3.2,@sc{unicos} 10.0.0.6,Digital
@sc{unix} 4等の)多くのシェルには信じられない優先順位があり,
@var{string}がオペレータのように見える場合は混乱するかもしれません.

@example
$ @kbd{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 common 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 @acronym{POSIX} 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 
ああ,@acronym{POSIX}の構文@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 -----------------
@prindex @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 @acronym{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 
@acronym{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
$ @kbd{cat trap.sh}
trap 'echo $?' 0
(exit 42); exit 0
$ @kbd{zsh trap.sh}
42
$ @kbd{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の終了ステー
タスを設定するために使用され,二番目は,トラップを誘発し,Bashに対して
終了ステータスとしての42を渡すためです.

@c The shell in Free@acronym{BSD} 4.0 has the following bug: @samp{$?} is
@c reset to 0 by empty lines if the code is inside @command{trap}.
@c 
Free@acronym{BSD} 4.0のシェルには,以下のバグがあります.コードが内部
@command{trap}の場合,空行で@samp{$?}が0にリセットされます.

@example
$ @kbd{trap 'false}

echo $?' 0
$ @kbd{exit}
0
@end example

@noindent
@c Fortunately, this bug only affects @command{trap}.
@c 
幸運にもこのバグは@command{trap}のみに影響します.

@item @command{true}
@c -----------------
@prindex @command{true}
@c Info cannot handle `:' in index entries.
@c @prindex @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 ------------------
@prindex @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{PS1}, 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{PS1}のような邪魔な変数を利用不可能にすることは非常に役立つの
で,存在をテストし,@emph{提供されていれば}それを使用し,
@command{unset}がサポートされていないときは,無効にする値を与えてくだ
さい.

@example
if (unset FOO) >/dev/null 2>&1; then
  unset=unset
else
  unset=false
fi
$unset PS1 || PS1='$ '
@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
@c @section Limitations of Usual Tools
@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 ----------------
@prindex @command{awk}
@c Don't leave white spaces before the parentheses in user functions calls;
@c @acronym{GNU} awk will reject it:
@c 
ユーザ関数呼び出しで,カッコの前に空白を残さないでください.
@acronym{GNU} awkはそれを拒絶します.

@example
$ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
        BEGIN @{ die () @}'}
gawk: cmd. line:2:         BEGIN @{ die () @}
gawk: cmd. line:2:                      ^ parse error
$ @kbd{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
$ @kbd{cat for.awk}
END @{
  arr["foo"] = 1
  arr["bar"] = 1
  for (i in arr)
    print i
@}
$ @kbd{gawk -f for.awk </dev/null}
foo
bar
$ @kbd{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 
HP-UX 11.0のネイティブのAWKのように,内部アンカーに調子が悪い正規表現
のエンジンがあるものもあります.

@example
$ @kbd{echo xfoo | $AWK '/foo|^bar/ @{ print @}'}
$ @kbd{echo bar | $AWK '/foo|^bar/ @{ print @}'}
bar
$ @kbd{echo xfoo | $AWK '/^bar|foo/ @{ print @}'}
xfoo
$ @kbd{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 ----------------
@prindex @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}を残すコンパイラもあります.

@c HP-UX @command{cc} doesn't accept @file{.S} files to preprocess and
@c assemble.  @samp{cc -c foo.S} will appear to succeed, but in fact does
@c nothing.
@c 
HP-UX @command{cc}は,プリプロセスとアセンブラを行なう@file{.S}ファイ
ルを受け入れません.@samp{cc -c foo.S}は成功したように見えますが,実際
には何もしません.

@c The default executable, produced by @samp{cc foo.c}, can be
@c 
@samp{cc foo.c}で生成されるデフォルトの実行形式は,以下のようになるは
ずです.

@itemize
@c @item @file{a.out} --- usual Unix convention.
@c @item @file{b.out} --- i960 compilers (including @command{gcc}).
@c @item @file{a.exe} --- DJGPP port of @command{gcc}.
@c @item @file{a_out.exe} --- GNV @command{cc} wrapper for DEC C on OpenVMS.
@c @item @file{foo.exe} --- various MS-DOS compilers.
@c 
@item @file{a.out} --- 通常のUnixの慣習です.
@item @file{b.out} --- i960 コンパイラ(@command{gcc}を含む).
@item @file{a.exe} --- @command{gcc}が移植されたDJGPP.
@item @file{a_out.exe} --- OpenVMS上のDEC Cに対するGNV @command{cc}ラッパー.
@item @file{foo.exe} --- 様々なMS-DOSのコンパイラ.
@end itemize


@item @command{cmp}
@c ----------------
@prindex @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}は,二つのファイルの生のデータの比較を実行しますが,
@command{diff}は二つのテキストファイルを比較します.そのため,
@acronym{DOS}のファイルを比較する場合,二つのファイルが異なっているか
どうかを調査するだけの場合でも改行のエンコードの違いで見せかけの差が発
生することを避けるため,@command{diff}を使用してください.


@item @command{cp}
@c ---------------
@prindex @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???

@c Bob Proulx notes that @samp{cp -p} always @emph{tries} to copy
@c ownerships.  But whether it actually does copy ownerships or not is a
@c system dependent policy decision implemented by the kernel.  If the
@c kernel allows it then it happens.  If the kernel does not allow it then
@c it does not happen.  It is not something @command{cp} itself has control
@c over.
@c 
Bob Proulxは,@samp{cp -p}は常に所有権のコピーを@emph{試みる}とメモし
ています.しかし,実際に所有権をコピーするかどうかは,カーネルで実装さ
れているシステムポリシーの決定に依存します.カーネルが許可している場合
はそうなります.カーネルが許可していない場合は,そうなりません.
@command{cp}自身が制御しているものではありません.

@c In SysV any user can chown files to any other user, and SysV also had a
@c non-sticky @file{/tmp}.  That undoubtedly derives from the heritage of
@c SysV in a business environment without hostile users.  BSD changed this
@c to be a more secure model where only root can @command{chown} files and
@c a sticky @file{/tmp} is used.  That undoubtedly derives from the heritage
@c of BSD in a campus environment.
@c 
SysVでは,ユーザはファイルを別のユーザにchown可能で,SysVにはstickyで
はない@file{/tmp}もあります.それは疑い無く,敵意のあるユーザのいない
ビジネス環境のSysVの遺産に由来しています.@acronym{BSD}は,rootだけが
ファイルを@command{chown}可能にし,stickyな@file{/tmp}を使用して,これ
をより安全なモデルに変更しました.それは疑い無く,キャンパス環境の
@acronym{BSD}の遺産に由来します.

@c Linux by default follows BSD, but it can be configured to allow
@c @command{chown}.  HP-UX as an alternate example follows SysV, but it can
@c be configured to use the modern security model and disallow
@c @command{chown}.  Since it is an administrator configurable parameter
@c you can't use the name of the kernel as an indicator of the behavior.
@c 
Linuxはデフォルトで@acronym{BSD}に準拠していますが,@command{chown}可
能に設定することも可能です.別の例として,HP-UXはSysVに準拠しています
が,最近のセキュリティモデルを使用するよう設定し,@command{chown}でき
なくすることが可能です.それは管理者が設定可能なパラメータなので,動作
を示すためにカーネル名を使用することは不可能です.



@item @command{date}
@c -----------------
@prindex @command{date}
@c Some versions of @command{date} do not recognize special % directives,
@c and unfortunately, instead of complaining, they just pass them through,
@c and exit with success:
@c 
@command{date}のバージョンによっては,特殊な%による指示語を理解しない
ものもあり,残念ながら警告をする代わりに,それをそのまま通過させ,正し
く終了します.

@example
$ @kbd{uname -a}
OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
$ @kbd{date "+%s"}
%s
@end example


@item @command{diff}
@c -----------------
@prindex @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 --------------------
@prindex @command{dirname}
@c Not all hosts have a working @command{dirname}, and you should instead
@c use @code{AS_DIRNAME} (@pxref{Programming in M4sh}).  For example:
@c 
全てのホストに動作する@command{dirname}があるわけではなく,その代わり
に@code{AS_DIRNAME}を使用すべきです(@pxref{Programming in M4sh}).例え
ば以下のようにします.

@example
dir=`dirname "$file"`       # This is not portable.
dir=`AS_DIRNAME(["$file"])` # This is more portable.
@end example

@noindent
@c This handles a few subtleties in the standard way required by
@c @acronym{POSIX}.  For example, under UN*X, should @samp{dirname //1} give
@c @samp{/}?  Paul Eggert answers:
@c 
これは,@acronym{POSIX}で要求されている標準では,幾分微妙な扱いです.
例えば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 @acronym{POSIX} allows but does not require the special treatment for
@c @samp{//}.  It says that the behavior of dirname on path names of the
@c form @samp{//([^/]+/*)?}  is implementation defined.  In these cases,
@c @acronym{GNU} @command{dirname} returns @samp{/}, but it's more
@c portable to return @samp{//} as this works even on those older flavors
@c of Unix.
@c 
@acronym{POSIX}では可能ですが,@samp{//}に対する特別扱いは要求されてい
ません.そこでは,形式@samp{//([^/]+/*)?}のパス名でのdirnameの動作は,
実装で定義されると告げています.これらの場合,@acronym{GNU}
@command{dirname}は@samp{/}を返しますが,古いUnixライクのものでも動作
するように@samp{//}を返した方が移植性が高いでしょう.
@end quotation


@item @command{egrep}
@c ------------------
@prindex @command{egrep}
@c @acronym{POSIX} 1003.1-2001 no longer requires @command{egrep},
@c but many older hosts do not yet support the @acronym{POSIX}
@c replacement @code{grep -E}.  To work around this problem, invoke
@c @code{AC_PROG_EGREP} and then use @code{$EGREP}.
@c 
@acronym{POSIX} 1003.1-2001では,もはや@command{egrep}を要求していませ
んが,より古いホストの多くはまだ@acronym{POSIX}の@code{grep -E}での置
換をサポートしていません.この問題を回避するため,@code{AC_PROG_EGREP}
を呼び出し,@code{$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 -----------------
@prindex @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{|})
@prindex @command{expr} (@samp{|})
@c You can use @samp{|}.  Although @acronym{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{|}を使用することは可能です.@acronym{POSIX}では,@samp{expr ''} 
が空の文字列を返すことを必須としていませんが,空の文字列を用いて空の文
字列(またはゼロ)とともに@samp{|}を用いたときの結果は安全ではありません.
例えば以下を考えます.

@example
expr '' \| ''
@end example

@c @acronym{GNU}/Linux and @acronym{POSIX}.2-1992 return the empty string
@c for this case, but traditional @sc{unix} returns @samp{0} (Solaris is
@c one such example).  In @acronym{POSIX}.1-2001, the specification has
@c been changed to match traditional @sc{unix}'s behavior (which is
@c bizarre, but it's too late to fix this).  Please note that the same
@c problem does arise when the empty string results from a computation,
@c as in:
@c 
@acronym{GNU}/Linuxと@acronym{POSIX}.2-1992では,この場合は空の文字列
を返しますが,伝統的な@sc{unix}では@samp{0}を返します(Solarisはそのよ
うな例の一つです).最近の@acronym{POSIX}.1-2001ドラフトでは,その指定
は伝統的な@sc{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 ----------------------------
@prindex @command{expr}
@c Don't use @samp{\?}, @samp{\+} and @samp{\|} in patterns, as they are
@c not supported on Solaris.
@c 
Solarisではサポートされていないので,パターン内に,@samp{\?},
@samp{\+},そして@samp{\|}を使用しないでください.

@c The @acronym{POSIX} standard is ambiguous as to whether
@c @samp{expr 'a' : '\(b\)'} outputs @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 @acronym{QNX} 4.25 native
@c @command{expr} returns @samp{0}.
@c 
@acronym{POSIX}標準では,@samp{expr 'a' : '\(b\)'}が@samp{0}を出力する
か空の文字列を出力するのかは明確ではありません.実際問題として,それは
ほとんどのプラットフォームで空の文字列を出力しますが,移植性の高いスク
リプトでは,これを仮定すべきではありません.例えば,@acronym{QNX} 4.25 
ネイティブの@command{expr}は@samp{0}を返します.

@c One might think that a way 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 @acronym{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 
@acronym{QNX} 4.25の@command{expr}には,空の文字列ではなく@samp{0}とな
ることに加えて,終了ステータスでおかしな動作があります.それはカッコが
使用されているときには,常に1になるということです!

@example
$ @kbd{val=`expr 'a' : 'a'`; echo "$?: $val"}
0: 1
$ @kbd{val=`expr 'a' : 'b'`; echo "$?: $val"}
1: 0

$ @kbd{val=`expr 'a' : '\(a\)'`; echo "?: $val"}
1: a
$ @kbd{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}プログラムで異
常終了を捕獲する準備がある場合,結果を二回得る可能性があるので,これは
大きな問題となります.例えば以下を考えます.

@example
$ @kbd{expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'}
@end example

@noindent
@c will output @samp{a} on most hosts, but @samp{aa} on @acronym{QNX} 4.25.  A
@c simple workaround 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}を出力しますが,@acronym{QNX} 4.25では
@samp{aa}になります.単純な回避方法として,@command{expr}でのテストを
構成し,結果によって@command{expr}や@command{false}で変数を設定する方
法を使用します.


@item @command{fgrep}
@c ------------------
@prindex @command{fgrep}
@c @acronym{POSIX} 1003.1-2001 no longer requires @command{fgrep},
@c but many older hosts do not yet support the @acronym{POSIX}
@c replacement @code{grep -F}.  To work around this problem, invoke
@c @code{AC_PROG_FGREP} and then use @code{$FGREP}.
@c 
@acronym{POSIX} 1003.1-2001では,もはや@command{fgrep}を要求していませ
んが,より古いホストの多くはまだ@acronym{POSIX}の@code{grep -F}での置
換をサポートしていません.この問題を回避するため,@code{AC_PROG_FGREP}
を呼び出し,@code{$FGREP}を使用してください.


@item @command{find}
@c -----------------
@c The option @option{-maxdepth} seems to be @acronym{GNU} specific.
@c Tru64 v5.1, Net@acronym{BSD} 1.5 and Solaris 2.5 @command{find}
@c commands do not understand it.
@c 
オプション@option{-maxdepth}は@acronym{GNU}特有のようです.Tru64 v5.1,
Net@acronym{BSD} 1.5,そしてSolaris 2.5の@command{find}コマンドはそれ
を理解しません.

@c The replacement of @samp{@{@}} is guaranteed only if the argument is
@c exactly @emph{@{@}}, not if it's only a part of an argument.  For
@c instance on DU, and HP-UX 10.20 and HP-UX 11:
@c 
@samp{@{@}}の置換は,引数が正確に@emph{@{@}}の場合のみ保証され,それが
引数の一部の場合は保証されません.例えば,DUとHP-UX 10.20とHP-UX 11で
は保証されません.

@example
$ @kbd{touch foo}
$ @kbd{find . -name foo -exec echo "@{@}-@{@}" \;}
@{@}-@{@}
@end example

@noindent
@c while @acronym{GNU} @command{find} reports @samp{./foo-./foo}.
@c 
一方,@acronym{GNU} @command{find}は@samp{./foo-./foo}を報告します.


@item @command{grep}
@c -----------------
@prindex @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 (e.g., @sc{irix} 6.5 and Solaris 2.5.1).  Anyway,
@c Stardent Vistra SVR4 @code{grep} lacks @option{-e}@dots{}  Instead, use
@c extended regular expressions and alternation.
@c 
最後のパターンのみ尊重する@code{grep}(例えば,@acronym{AIX} 6.5と
Solaris 2.5.1)もあるので,@option{-e}で複数の正規表現を使用しないでく
ださい.どちらにしろ,Stardent Vistra SVR4の@code{grep}には@option{-e} 
がありません@enddots{} その代わりに拡張した正規表現と代入を使用してく
ださい.

@c Don't rely on @option{-w}, as Irix 6.5.16m's @command{grep} does not
@c support it.
@c 
Irix 6.5.16mの@command{grep}は,それをサポートしていないので,
@option{-w}に依存しないようにしてください.


@item @command{ln}
@c ---------------
@prindex @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_S)} as a portable substitute.
@c 
@option{-f}オプションがある@command{ln}に依存しないようにしてください.
古いシステムではシンボリックリンクは利用不可能です.移植性のある代替物
@samp{$(LN_S)}を使用してください.

@c For versions of the DJGPP before 2.04, @command{ln} emulates soft links
@c to 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{ls}
@c ---------------
@prindex @command{ls}
@cindex Listing directories
@c The portable options are @option{-acdilrtu}.  Modern practice is for
@c @option{-l} to output both owner and group, but traditional
@c @command{ls} omits the group.
@c 
移植性のあるオプションは@option{-acdilrtu}です.最近では,@option{-l}
で所有者とグループを出力しますが,伝統的な@command{ls}はグループを省略
します.

@c From Bruce Lilly:
@c
@c # telnet dim
@c [...]
@c   UNIX System V (TWG-TCP/IP) (dim.blilly.com)
@c [...]
@c $ mkdir foo
@c $ cd foo
@c $ /bin/ls a.exe 2>/dev/null
@c a.exe not found
@c $ what /bin/ls
@c /bin/ls:
@c           fndcmd:fndcmd.sl 1.68
@c $ uname -a
@c UNIX dim SYSTEM5 3.51m mc68k
@c
@c It's an AT&T 3B1.  See http://www.faqs.org/faqs/3b1-faq/ or any
@c mirror of the 3B1 FAQ.  It's actually SVR2.2.
@c 
@c Modern practice is for all diagnostics to go to standard error, but
@c traditional @samp{ls foo} prints the message @samp{foo not found} to
@c standard output if @file{foo} does not exist.  Be careful when writing
@c shell commands like @samp{sources=`ls *.c 2>/dev/null`}, since with
@c traditional @command{ls} this is equivalent to @samp{sources="*.c not
@c found"} if there are no @samp{.c} files.
@c 
最近では,すべての診断結果は標準エラー出力に出てきますが,伝統的な
@samp{ls foo}は,@file{foo}が存在しない場合,メッセージ@samp{foo not
found}を標準出力に出力します.伝統的な@command{ls}では,@samp{.c}ファ
イルが無い場合,@samp{sources=`ls *.c 2>/dev/null`}は
@samp{sources="*.c not found"}と等価なので,そのようなシェルコマンドを
書くときに注意してください.


@item @command{mkdir}
@c ------------------
@prindex @command{mkdir}
@cindex Making directories
@c None of @command{mkdir}'s options are portable.  Instead of
@c @samp{mkdir -p @var{filename}}, you should use use
@c @code{AS_MKDIR_P(@var{filename})} (@pxref{Programming in M4sh}).
@c 
@command{mkdir}のオプションには移植性はありません.@samp{mkdir -p
@var{filename}}の代わりに@code{AS_MKDIR_P(@var{filename})}を使用すべき
です(@pxref{Programming in M4sh}).

@item @command{mv}
@c ---------------
@prindex @command{mv}
@cindex Moving open files
@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 Be aware that moving files from @file{/tmp} can sometimes cause
@c undesirable (but perfectly valid) warnings, even if you created these
@c files.  On some systems, creating the file in @file{/tmp} is setting a
@c guid @code{wheel} which you may not be part of.  So the file is copied,
@c and then the @code{chgrp} fails:
@c 
ファイルを@file{/tmp}から移動することで,これらのファイルを作成してい
たとしても,好ましくない(が,まったく有効な)警告を発生することがあるこ
とを覚えておいてください.システムによっては,@file{/tmp}にファイルを
作成すると,guidを自分が所属していない@code{wheel}に設定するものもあり
ます.そのためファイルがコピーされると,@code{chgrp}で失敗します.

@example
$ @kbd{touch /tmp/foo}
$ @kbd{mv /tmp/foo .}
@error{}mv: ./foo: set owner/group (was: 3830/0): Operation not permitted
$ @kbd{echo $?}
0
$ @kbd{ls foo}
foo
@end example

@noindent
@c This behavior conforms to @acronym{POSIX}:
@c 
この動作は,@acronym{POSIX}に準拠しています.

@quotation
@c If the duplication of the file characteristics fails for any reason, mv
@c shall write a diagnostic message to standard error, but this failure
@c shall not cause mv to modify its exit status.''
@c 
何らかの理由でファイル属性の複製に失敗する場合,@command{mv}は診断メッ
セージを標準エラー出力に書き出しますが,この異常終了で,@command{mv}は
終了ステータスを変更しません.
@end quotation

@c Moving directories across mount points is not portable, use @command{cp}
@c and @command{rm}.
@c 
マウントポイントを跨ってディレクトリを移動することは移植性が無いので,
@command{cp}と@command{rm}を使用してください.

@c Moving/Deleting open files isn't portable.  The following can't be done
@c on DOS/WIN32:
@c 
開いているファイルの移動/削除は移植性がありません.以下の例はDOS/WIN32
では実行不可能です.

@example
exec > foo
mv foo bar
@end example

@noindent
@c nor can
@c 
以下も実行不可能です.

@example
exec > foo
rm -f foo
@end example

@item @command{sed}
@c ----------------
@prindex @command{sed}
@c Patterns should not include the separator (unless escaped), even as part
@c of a character class.  In conformance with @acronym{POSIX}, the Cray
@c @command{sed} will reject @samp{s/[^/]*$//}: use @samp{s,[^/]*$,,}.
@c 
文字クラスの一部の場合でも,パターンに(エスケープされていない)セパレー
タを含めるべきではありません.@acronym{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のスクリプトは,八文字以上の分岐ラベルを使用すべきではなく,コメントを
含めるべきでもありません.

@c Don't include extra @samp{;}, as some @command{sed}, such as Net@acronym{BSD}
@c 1.4.2's, try to interpret the second as a command:
@c 
Net@acronym{BSD} 1.4.2では,二番目のものをコマンドとして解釈しようと試
みるので,@command{sed}によっては,余分な@samp{;}を含めてはなりません.

@example
$ @kbd{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 @acronym{POSIX} does not require its
@c support, so it should be avoided in portable scripts.  Solaris 8
@c @command{sed} does not support alternation; e.g., @samp{sed '/a\|b/d'}
@c deletes only lines that contain the literal string @samp{a|b}.
@c 
@samp{\|}の交換は一般的ですが,@acronym{POSIX}はそのサポートを要求して
いないので,移植性の高いスクリプトでは避けるべきです.Solaris 8の
@command{sed}は交換をサポートしていません.例えば,@samp{sed
'/a\|b/d'} は,リテラル文字列@samp{a|b}を含んでいる行のみ検出します.

@c Anchors (@samp{^} and @samp{$}) inside groups are not portable.
@c 
グループ内のアンカー(@samp{^}と@samp{$})は移植性がありません.

@c Nested parenthesization in patterns (e.g., @samp{\(\(a*\)b*)\)}) is
@c quite portable to modern hosts, but is not supported by some older
@c @command{sed} implementations like SVR3.
@c 
パターン内の入れ子状のカッコは,現在のホストでは完全に移植性あるものな
のですが,SVR3のように古い@command{sed}の実装ではサポートされていませ
ん.

@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 to help enforcing indentation 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''.  All descendants of Bell Lab's V7 @command{sed} (at least; we
@c don't have first hand experience with older @command{sed}s) have
@c supported it.
@c 
もう一つの垢抜けた伝説として,``マッチしたもの''を意味する@code{s}コマ
ンドの一部を置換するとき,@samp{&}を使用しても移植性はあるでしょう.す
べてのベル研究所のV7 @command{sed}の子孫は(少なくとも,我々はそれより
古い@command{sed}を経験したことはありません)サポートしています.

@c @acronym{POSIX} requires that you must not have any white space between
@c @samp{!}  and the following command.  It is OK to have blanks between
@c the address and the @samp{!}.  For instance, on Solaris 8:
@c 
@acronym{POSIX}では,@samp{!}とそれ以降のコマンドの間に空白があっては
いけません.アドレスと@samp{!}の間の空白はOKです.例えば,Solaris 8で
は以下のようになります.

@example
$ @kbd{echo "foo" | sed -n '/bar/ ! p'}
@error{}Unrecognized command: /bar/ ! p
$ @kbd{echo "foo" | sed -n '/bar/! p'}
@error{}Unrecognized command: /bar/! p
$ @kbd{echo "foo" | sed -n '/bar/ !p'}
foo
@end example

@item @command{sed} (@samp{t})
@c ---------------------------
@prindex @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 @acronym{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}があるシステムもあります.例え
ば,@acronym{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 
なぜでしょう?一行目を処理しているとき,マッチするのでtフラグがセット
され,b行からd行まで移動し,出力が生成されます.二行目を処理していると
き,tフラグはセットされたままです(これはバグです).しかし,a行はマッチ
に失敗しますが,置換が失敗するとき,@command{sed}はtフラグをクリアする
ことをサポートしていません.そのため,フラグがセットされているように見
えるb行は,それをクリアし,dへ移動し,その結果,@samp{deleted}の代わり
に@samp{delete me}になります.三行目を処理しているとき,マッチを示すt
がクリアされるため,フラグがセットされ,その結果,b行はフラグをクリア
し移動します.最終的にフラグはクリアになっているので,四行目は正しく処
理されます.

@c There are two things one should remember 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}について覚えておくべきことは二つあります.最初
に,成功した置換に@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 
二番目は,それぞれの新しいサイクルでフラグをクリアするのを
@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 ------------------
@prindex @command{touch}
@c On some old @acronym{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 
古い@acronym{BSD}システムには,空のファイルに対する@command{touch}のよ
うなコマンドで,タイムスタンプを更新しない結果となるものもあるので,回
避するために,@code{echo}のようなコマンドを使用してください.

@c @acronym{GNU} @command{touch} 3.16r (and presumably all before that)
@c fails to work on SunOS 4.1.3 when the empty file is on an
@c @acronym{NFS}-mounted 4.2 volume.
@c 
@acronym{GNU} @command{touch} 3.16r(とそれ以前の全て)は,空のファイル
が@acronym{NFS}でマウントされている4.2のボリュームのとき,SunOS 4.1.3 
での動作で異常終了します.

@end table


@node Limitations of Make
@c @section Limitations of Make
@section Makeの制限

@c @command{make} itself suffers a great number of limitations, only a few
@c of which are listed here.  First of all, remember that since commands
@c are executed by the shell, all its weaknesses are inherited@enddots{}
@c 
@command{make}自身には非常に多くの制限があるので苦労します,ここではわ
ずかですが紹介します.とにかく,シェルによってコマンドが実行されるので,
その弱い部分の全てが継承されていくということを覚えておいてください
@enddots{}

@table @asis
@item @code{$<}
@c @acronym{POSIX} says that the @samp{$<} construct in makefiles can be used
@c only in inference rules and in the @samp{.DEFAULT} rule; its meaning in
@c ordinary rules is unspecified.  Solaris 8's @command{make} for instance
@c will replace it with the argument.
@c 
@acronym{POSIX}では,@file{makefile}の構成物の@samp{$<}は推測される規
則と@samp{.DEFAULT}ルールのみで使用可能だと告げています.通常のルールでの
その意味は明記されていません.例えば,Solaris 8の@command{make}はそれ
を引数で置換します.

@c @item Leading underscore in macro names
@item マクロ名へのアンダースコアの前置
@c Some @command{make}s don't support leading underscores in macro names,
@c such as on NEWS-OS 4.2R.
@c 
NEWS-OS 4.2Rのように,マクロ名にアンダースコアを前置することをサポート
していない@command{make}もあります.

@example
$ @kbd{cat Makefile}
_am_include = #
_am_quote =
all:; @@echo this is test
$ @kbd{make}
Make: Must be a separator on rules line 2.  Stop.
$ @kbd{cat Makefile2}
am_include = #
am_quote =
all:; @@echo this is test
$ @kbd{make -f Makefile2}
this is test
@end example

@c @item Trailing backslash in macro
@item マクロへのバックスラッシュの後置
@c  This has been seen on ia64 hpux 11.20, and on one hppa hpux 10.20,
@c  but another hppa hpux 10.20 didn't have it.  Bob Proulx
@c  <bob@proulx.com> thinks it was in hpux 8.0 too.
@c 
@c On some versions of HP-UX, @command{make} will read multiple newlines
@c following a backslash, continuing to the next non-empty line.  For
@c example,
@c 
HP-UXのバージョンによっては,@command{make}には,バックスラッシュ以降
の複数の改行を,空ではない行も含めて読み込むものもあります.例えば以下
のようにします.

@example
FOO = one \

BAR = two

test:
        : FOO is "$(FOO)"
        : BAR is "$(BAR)"
@end example

@noindent
@c shows @code{FOO} equal to @code{one BAR = two}.  Other @command{make}s
@c sensibly let a backslash continue only to the immediately following
@c line.
@c 
@code{FOO}は@code{one BAR = two}と等価です.それ以外の@command{make}で
は,バックスラッシュは直後の行だけを含みます.

@c @item Escaped newline in comments
@item コメント内のエスケープされた改行

@c According to @acronym{POSIX}, @file{Makefile} comments start with @code{#}
@c and continue until an unescaped newline is reached.
@c 
@acronym{POSIX}によると,@file{Makefile}のコメントは@code{#}ではじまり,
エスケープされていない改行まで続きます.

@example
% @kbd{cat Makefile}
# A = foo \
      bar \
      baz

all:
        @@echo ok
% @kbd{make}   # GNU make
ok
@end example

@noindent
@c However in Real World this is not always the case.  Some implementations
@c discards anything from @code{#} up to the end of line, ignoring any
@c trailing backslash.
@c 
しかし現実では,これは常にそうではありません.実装によっては,@code{#}
から行末までを廃棄し,後置されるバックスラッシュを無視するものもありま
す.

@example
% @kbd{pmake}  # BSD make
"Makefile", line 3: Need an operator
Fatal errors encountered -- cannot continue
@end example

@noindent
@c Therefore, if you want to comment out a multi-line definition, prefix each
@c line with @code{#}, not only the first.
@c 
このため,複数行の定義をコメントアウトしたい場合,最初の行だけでなく,
それぞれの行に@code{#} を前置してください.

@example
# A = foo \
#     bar \
#     baz
@end example

@c @item @code{make macro=value} and sub-@command{make}s.
@item @code{make macro=value}とサブ呼び出しの@command{make}

@c A command-line variable definition such as @code{foo=bar} overrides any
@c definition of @code{foo} in the @file{Makefile}.  Some @command{make}
@c implementations (such as @acronym{GNU} @command{make}) will propagate this
@c override to sub-invocations of @command{make}.  This is allowed but not
@c required by @acronym{POSIX}.
@c 
コマンドライン変数の@code{foo=bar}のような定義は,@file{Makefile}の
@code{foo}の定義に優先します.(@acronym{GNU} @command{make}のような)
@command{make}の実装によっては,この優先はサブ呼び出しの@command{make} 
に伝搬します.これは可能ですが,@acronym{POSIX}では要求されていません.

@example
% @kbd{cat Makefile}
foo = foo
one:
        @@echo $(foo)
        $(MAKE) two
two:
        @@echo $(foo)
% @kbd{make foo=bar}            # GNU make 3.79.1
bar
make two
make[1]: Entering directory `/home/adl'
bar
make[1]: Leaving directory `/home/adl'
% @kbd{pmake foo=bar}           # BSD make
bar
pmake two
foo
@end example

@c You have a few possibilities if you do want the @code{foo=bar} override
@c to propagate to sub-@command{make}s.  One is to use the @code{-e}
@c option, which causes all environment variables to have precedence over
@c the @file{Makefile} macro definitions, and declare foo as an environment
@c variable:
@c 
サブ呼び出しの@command{make}に@code{foo=bar}の優先を伝搬したい場合,移
植性を持たせる方法が無いわけではありません.その一つは,すべての環境変
数を@file{Makefile}マクロ定義に優先させる@code{-e}オプションを使用し,
@var{foo}を環境変数として定義する方法です.

@example
% @kbd{env foo=bar make -e}
@end example

@c The @code{-e} option is propagated to sub-@command{make}s automatically,
@c and since the environment is inherited between @command{make}
@c invocations, the @code{foo} macro will be overridden in
@c sub-@code{make}s as expected.
@c 
@code{-e}オプションは,自動的にサブ呼び出しの@command{make}に伝搬し,
環境変数は@command{make}の呼び出し間で継承されるので,@code{foo}マクロ
はサブ呼び出しの@code{make}で期待したように優先されます.

@c Using @code{-e} could have unexpected side-effects if your environment
@c contains some other macros usually defined by the Makefile.  (See
@c also the note about @code{make -e} and @code{SHELL} below.)
@c 
@code{-e}を使用することで,@file{Makefile}で通常定義されるその他のマク
ロが環境変数に含まれている場合,予期しない副作用があるかもしれません.
(以下の@code{make -e}と@code{SHELL}の注意も参照してください.)

@c Another way to propagate overrides to sub-@command{make}s is to do it
@c manually, from your @file{Makefile}:
@c 
サブ呼び出しの@command{make}に優先物を伝搬させるもう一つの方法は,
@file{Makefile}に手動で行なうことです.

@example
foo = foo
one:
        @@echo $(foo)
        $(MAKE) foo=$(foo) two
two:
        @@echo $(foo)
@end example

@c You need to foresee all macros that a user might want to override if
@c you do that.
@c 
そうする場合,ユーザが優先したいと思われるすべてのマクロを予測する必要
があります.

@c @item The @code{SHELL} macro
@item @code{SHELL}マクロ
@cindex @code{SHELL} and @command{make}
@cindex @command{make} and @code{SHELL}

@c @acronym{POSIX}-compliant @command{make}s internally use the @code{$(SHELL)}
@c macro to spawn shell processes and execute @file{Makefile} rules.  This
@c is a builtin macro supplied by @command{make}, but it can be modified
@c from the @file{Makefile} or a command-line argument.
@c 
@acronym{POSIX}準拠の@command{make}では,シェルプロセスを起動したり,
@file{Makefile}ルールを実行するために,内部で@code{$(SHELL)}マクロを使用
します.これは@command{make}で提供される組み込みマクロですが,
@file{Makefile}やコマンドライン引数で変更することが可能です.

@c Not all @command{make}s will define this @code{SHELL} macro.  OSF/Tru64
@c @command{make} is an example; this implementation will always use
@c @code{/bin/sh}.  So it's a good idea to always define @code{SHELL} in
@c your @file{Makefile}s.  If you use Autoconf, do
@c 
すべての@command{make}が,この@code{SHELL}マクロを定義するわけではあり
ません.例えば,OSF/Tru64 @command{make}がそうです.この実装では,常に
@code{/bin/sh}を使用します.そのため,@file{Makefile}で常に
@code{SHELL} を定義するのは良い考えです.Autoconfを使用している場合,
以下のようにしてください.

@example
SHELL = @@SHELL@@
@end example

@c @acronym{POSIX}-compliant @command{make}s should never acquire the value of
@c $(SHELL) from the environment, even when @code{make -e} is used
@c (otherwise, think about what would happen to your rules if
@c @code{SHELL=/bin/tcsh}).
@c 
@acronym{POSIX}準拠の@command{make}では,@code{make -e}が使用されてい
る場合でも,環境変数から$(SHELL)の値を入手してはなりません(そうでない
場合,@code{SHELL=/bin/tcsh}の状況でルールによって何が起こるのか考えてみ
てください).

@c However not all @command{make} implementations will make this exception.
@c For instance it's not surprising that OSF/Tru64 @command{make} doesn't
@c protect @code{SHELL}, since it doesn't use it.
@c 
しかし,すべての@command{make}がこのような例外を実装しているわけではあ
りません.例えば,OSF/Tru64 @command{make}は@code{SHELL}を使用しないの
で,保護していなくても不思議ではありません.

@example
% @kbd{cat Makefile}
SHELL = /bin/sh
FOO = foo
all:
        @@echo $(SHELL)
        @@echo $(FOO)
% @kbd{env SHELL=/bin/tcsh FOO=bar make -e}   # OSF1 V4.0 Make
/bin/tcsh
bar
% @kbd{env SHELL=/bin/tcsh FOO=bar gmake -e}  # GNU make
/bin/sh
bar
@end example

@c @item Comments in rules
@item ルール内のコメント
@cindex Comments in @file{Makefile} rules
@cindex @file{Makefile} rules and comments

@c Never put comments in a rule.
@c 
コメントをルールに書き込まないでください.

@c Some @command{make} treat anything starting with a tab as a command for
@c the current rule, even if the tab is immediately followed by a @code{#}.
@c The @command{make} from Tru64 Unix V5.1 is one of them.  The following
@c @file{Makefile} will run @code{# foo} through the shell.
@c 
タブで始まるものは,タブの直後に@code{#}が続いていても,すべて現在のルー
ルのコマンドとして扱う@command{make}もあります.Tru64 Unix V5.1の
@command{make}はその一つです.以下の@file{Makefile}で,シェルで@code{#
foo}を実行します.

@example
all:
        # foo
@end example

@c @item The @file{obj/} subdirectory.
@item @file{obj/}サブディレクトリ
@cindex @file{obj/}, subdirectory
@cindex BSD @command{make} and @file{obj/}

@c Never name one of your subdirectories @file{obj/} if you don't like
@c surprises.
@c 
びっくりしたくなければ,サブディレクトリを@file{obj/}と命名しないでく
ださい.

@c If an @file{obj/} directory exists, BSD @command{make} will enter it
@c before reading @file{Makefile}.  Hence the @file{Makefile} in the
@c current directory will not be read.
@c 
@file{obj/}ディレクトリが存在する場合,@acronym{BSD} @command{make}は
@file{Makefile}を読み込む前に,そのなかに入ります.このため,現在のディ
レクトリの@file{Makefile}は読み込まれません.

@example
% @kbd{cat Makefile}
all:
        echo Hello
% @kbd{cat obj/Makefile}
all:
        echo World
% @kbd{make}      # GNU make
echo Hello
Hello
% @kbd{pmake}     # BSD make
echo World
World
@end example

@item @code{make -k}
@cindex @code{make -k}

@c Do not rely on the exit status of @code{make -k}.  Some implementations
@c reflect whether they encountered an error in their exit status; other
@c implementations always succeed.
@c 
@code{make -k}の終了ステータスに依存しないようにしてください.終了ステー
タスがエラーかどうかを反映する実装もあります.それ以外の実装では,常に成
功します.

@example
% @kbd{cat Makefile}
all:
        false
% @kbd{make -k; echo exit status: $?}    # GNU make
false
make: *** [all] Error 1
exit status: 2
% @kbd{pmake -k; echo exit status: $?}   # BSD make
false
*** Error code 1 (continuing)
exit status: 0
@end example

@item @code{VPATH}
@cindex @code{VPATH}

@c There is no @code{VPATH} support specified in @acronym{POSIX}.  Many
@c @command{make}s have a form of @code{VPATH} support, but its
@c implementation is not consistent amongst @command{make}s.
@c 
@acronym{POSIX}では,@code{VPATH}サポートを指定していません.多くの
@command{make}は@code{VPATH}サポートの形式がありますが,その実装は,
@command{make}間で一貫していません.

@c Maybe the best suggestion to give to people who need the @code{VPATH}
@c feature is to choose a @command{make} implementation and stick to it.
@c Since the resulting @file{Makefile}s are not portable anyway, better
@c choose a portable @command{make} (hint, hint).
@c 
@code{VPATH}機能を必要としている人々への最高の提案は,@command{make}の
実装を選択しそれに固執するようにと言うことかもしれません.
@file{Makefile} の結果は常に移植性があるとは限らないので,移植性の高い
@command{make}を選択するのが良いでしょう(ヒント,ヒント).

@c Here are a couple of known issues with some @code{VPATH}
@c implementations.
@c 
@code{VPATH}の実装の既知の問題には以下のものがあります.

@table @asis

@c @item @code{VPATH} and double-colon rules
@item @code{VPATH}と二重のコロンのルール
@cindex @code{VPATH} and double-colon rules
@cindex double-colon rules and @code{VPATH}

@c Any assignment to @code{VPATH} causes Sun @command{make} to only execute
@c the first set of double-colon rules.  (This comment has been here since
@c 1994 and the context has been lost.  It's probably about SunOS 4.  If
@c you can reproduce this, please send us a test case for illustration.)
@c 
@code{VPATH}への代入で,Sunの@command{make}は最初の二重コロンのルールの
組だけを実行します.(このコメントは,1994年からで,現在は無くなってい
ます.SunOS 4では移植性があります.これが再生成された場合,それを説明
するテストケースを送ってください.)

@c @item @code{$<} in inference rules:
@item 推論ルールの@code{$<}
@cindex suffix rules, @code{$<}, and @code{VPATH}
@cindex @code{$<}, inference rules, and @code{VPATH}
@cindex @code{VPATH}, inference rules, and @code{$<}
@c One implementation of @command{make} would not prefix @code{$<} if this
@c prerequisite has been found in a @code{VPATH} dir.  This means that
@c 
@command{make}の一つの実装では,@code{VPATH}ディレクトリにこの必要条件
が見つかっても,@code{$<}が前置されません.これは以下のことを意味しま
す.

@example
VPATH = ../src
.c.o:
        cc -c $< -o $@@
@end example

@noindent
@c would run @code{cc -c foo.c -o foo.o}, even if @file{foo.c} was actually
@c found in @file{../src/}.
@c 
これで,@file{foo.c}が実際には@file{../src/}で見つかった場合でも,
@code{cc -c foo.c -o foo.o}を実行します.

@c This can be fixed as follows.
@c 
これは以下のようにして修正可能です.

@example
VPATH = ../src
.c.o:
        cc -c `test -f $< || echo ../src/`$< -o $@@
@end example

@c This kludge was introduced in Automake in 2000, but the exact context
@c have been lost.  If you know which @command{make} implementation is
@c involved here, please drop us a note.
@c 
この間に合わせ手法は,2000年のAutomakeで導入されましたが,正確な内容は
失われています.@command{make}の実装がこのように複雑になったか知ってい
る場合,我々に報告してください.


@c @item @code{$<} not supported in explicit rules
@item 明示的なルールで@code{$<}がサポートされていない
@cindex explicit rules, @code{$<}, and @code{VPATH}
@cindex @code{$<}, explicit rules, and @code{VPATH}
@cindex @code{VPATH}, explicit rules, and @code{$<}

@c As said elsewhere, using @code{$<} in explicit rules is not portable.
@c The prerequisite file must be named explicitly in the rule.  If you want
@c to find the prerequisite via a @code{VPATH} search, you have to code the
@c whole thing manually.  For instance, using the same pattern as above:
@c 
他でも述べたように,明示的なルールで@code{$<}を使用するのは移植性があり
ません.必要条件のファイルは,ルール内で明示的な名前にすべきです.
@code{VPATH}の検索で必要条件を見つけたい場合,手動でコード全体を書く必
要があります.例えば,上記と同じパターンを用いると以下のようになります.

@example
VPATH = ../src
foo.o: foo.c
        cc -c `test -f foo.c || echo ../src/`foo.c -o foo.o
@end example

@c @item Automatic rule rewriting
@item 自動的なルールの再書き込み
@cindex @code{VPATH} and automatic rule rewriting
@cindex automatic rule rewriting and @code{VPATH}

@c Some @command{make} implementations, such as SunOS @command{make}, will
@c search prerequisites in @code{VPATH} and rewrite all their occurrences
@c in the rule appropriately.
@c 
SunOS @command{make}のように,@code{VPATH}で必要条件を探し,出現するた
びに適切なルールにを再書き込みする@command{make}の実装もあります.

@c For instance
@c 
例えば,以下を考えます.

@example
VPATH = ../src
foo.o: foo.c
        cc -c foo.c -o foo.o
@end example

@noindent
@c would execute @code{cc -c ../src/foo.c -o foo.o} if @file{foo.c} was
@c found in @file{../src}.  That sounds great.
@c 
@file{foo.c}が@file{../src}で見つかった場合,@code{cc -c ../src/foo.c
-o foo.o}を実行します.素晴らしいと思います.

@c However, for the sake of other @command{make} implementations, we can't
@c rely on this, and we have to search @code{VPATH} manually:
@c 
しかし,それ以外の@command{make}の実装では,これに依存することは不可能
で,@code{VPATH}を手動で検索する必要があります.

@example
VPATH = ../src
foo.o: foo.c
        cc -c `test -f foo.c || echo ../src/`foo.c -o foo.o
@end example

@noindent
@c However the "prerequisite rewriting" still applies here.  So if
@c @file{foo.c} is in @file{../src}, SunOS @command{make} will execute
@c 
しかし"必要条件の再書き込み"はこれに適用されます.そのため,
@file{../src}に@file{foo.c}がある場合,SunOSの@command{make}は以下を実
行します.

@example
@code{cc -c `test -f ../src/foo.c || echo ../src/`foo.c -o foo.o}
@end example

@noindent
@c which reduces to
@c 
以下を生成します.

@example
cc -c foo.c -o foo.o
@end example

@noindent
@c and thus fails.  Oops.
@c 
そしてこのために失敗します.あぁ.

@c One workaround is to make sure that foo.c never appears as a plain word
@c in the rule.  For instance these three rules would be safe.
@c 
回避策の一つは,ルールのなかに@file{foo.c}をそのまま書いていないことを確
かめることです.例えば,以下の三つのルールは安全です.

@example
VPATH = ../src
foo.o: foo.c
        cc -c `test -f ./foo.c || echo ../src/`foo.c -o foo.o
foo2.o: foo2.c
        cc -c `test -f 'foo2.c' || echo ../src/`foo2.c -o foo2.o
foo3.o: foo3.c
        cc -c `test -f "foo3.c" || echo ../src/`foo3.c -o foo3.o
@end example

@c Things get worse when your prerequisites are in a macro.
@c 
必要条件がマクロにあるとき,事態はより悪くなります.

@example
VPATH = ../src
HEADERS = foo.h foo2.h foo3.h
install-HEADERS: $(HEADERS)
        for i in $(HEADERS); do \
          $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \
            $(DESTDIR)$(includedir)/$$i; \
        done
@end example

@c The above @code{install-HEADERS} rule is not SunOS-proof because @code{for
@c i in $(HEADERS);} will be expanded as @code{for i in foo.h foo2.h foo3.h;}
@c where @code{foo.h} and @code{foo2.h} are plain words and are hence
@c subject to @code{VPATH} adjustments.
@c 
上記の@code{install-HEADERS}ルールは,@code{for i in $(HEADERS);}は
@code{for i in foo.h foo2.h foo3.h;}に展開され,@code{foo.h}と
@code{foo2.h}はそのまま単語となり,このためサブジェクトは@code{VPATH} 
に調整されるので,SunOSでは信頼できません.

@c If the three files are in @file{../src}, the rule is run as:
@c 
三つのファイルが@file{../src}にある場合,このルールは以下のように実行
されます.

@example
for i in ../src/foo.h ../src/foo2.h foo3.h; do \
  install -m 644 `test -f $i || echo ../src/`$i \
     /usr/local/include/$i; \
done
@end example

@c where the two first @command{install} calls will fail.  For instance,
@c consider the @code{foo.h} installation:
@c 
最初の二つの@command{install}の呼び出しは失敗します.例えば,
@code{foo.h}をインストールする事を考えます.

@example
install -m 644 `test -f ../src/foo.h || echo ../src/`../src/foo.h \
  /usr/local/include/../src/foo.h;
@end example
@noindent
@c It reduces to:
@c 
以下を生成します.

@example
install -m 644 ../src/foo.h /usr/local/include/../src/foo.h;
@end example

@c Note that the manual @code{VPATH} search did not cause any problems here;
@c however this command installs @file{foo.h} in an incorrect directory.
@c 
手動の@code{VPATH}の検索には問題が無いことに注意してください.しかし,
このコマンドは,間違ったディレクトリに@file{foo.h}をインストールします.

@c Trying to quote @code{$(HEADERS)} in some way, as we did for
@c @code{foo.c} a few @file{Makefile}s ago, does not help:
@c 
ここまで,いくつかの@file{Makefile}で@code{foo.c}に対して行なってきた,
@code{$(HEADERS)}をどうにかして引用符で囲むことは役に立ちません.

@example
install-HEADERS: $(HEADERS)
        headers='$(HEADERS)'; for i in $$headers; do \
          $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \
            $(DESTDIR)$(includedir)/$$i; \
        done
@end example

@c Indeed, @code{headers='$(HEADERS)'} expands to @code{headers='foo.h
@c foo2.h foo3.h'} where @code{foo2.h} is still a plain word.  (Aside: the
@c @code{headers='$(HEADERS)'; for i in $$headers;} idiom is a good
@c idea if @code{$(HEADERS)} can be empty, because some shell produce a
@c syntax error on @code{for i in;}.)
@c 
実際,@code{headers='$(HEADERS)'}は@code{headers='foo.h foo2.h
foo3.h'} に展開され,@code{foo2.h}はそのまま単語になります.(一方,
@code{headers='$(HEADERS)'; for i in $$headers;}の慣用句は,@code{for
i in;}で構文エラーになるシェルもあるので,@code{$(HEADERS)}が空の場合
は良い考えです.)

@c One workaround is to strip this unwanted @file{../src/} prefix manually:
@c 
回避方法の一つは,不要な@file{../src/}の接頭辞を手動で削除する事です.
@example
VPATH = ../src
HEADERS = foo.h foo2.h foo3.h
install-HEADERS: $(HEADERS)
        headers='$(HEADERS)'; for i in $$headers; do \
          i=`expr "$$i" : '../src/\(.*\)'`;
          $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \
            $(DESTDIR)$(includedir)/$$i; \
        done
@end example


@c @item OSF/Tru64 @command{make} creates prerequisite directories magically
@item OSF/Tru64 @command{make}の@command{make}は,不思議なディレクトリの必要条件を作成する
@cindex @code{VPATH} and prerequisite directories
@cindex prerequisite directories and @code{VPATH}

@c When a prerequisite is a sub-directory of @code{VPATH}, Tru64
@c @command{make} will create it in the current directory.
@c 
必要条件が@code{VPATH}のサブディレクトリにある場合,Tru64
@command{make}はそれを現在のディレクトリに作成します.

@example
% @kbd{mkdir -p foo/bar build}
% @kbd{cd build}
% @kbd{cat >Makefile <<END
VPATH = ..
all: foo/bar
END}
% @kbd{make}
mkdir foo
mkdir foo/bar
@end example

@c This can yield unexpected results if a rule uses a manual @code{VPATH}
@c search as presented before.
@c 
ルールは,前に存在している手動の@code{VPATH}検索を使用するので,これは
予想外の結果になるはずです.

@example
VPATH = ..
all : foo/bar
        command `test -d foo/bar || echo ../`foo/bar
@end example

@c The above @command{command} will be run on the empty @file{foo/bar}
@c directory that was created in the current directory.
@c 
上記の@command{command}は,現在のディレクトリに作成された,空の
@file{foo/bar}ディレクトリで実行されます.

@c @item target lookup
@item ターゲットの探索
@cindex @code{VPATH}, resolving target pathnames

@c @acronym{GNU} @command{make} uses a rather complex algorithm to decide when it
@c should use files found via a @code{VPATH} search.  @xref{Search
@c Algorithm,, How Directory Searches are Performed, make, The @acronym{GNU} Make
@c Manual}.
@c 
@acronym{GNU} @command{make}は,@code{VPATH}で見つかったファイルを使用
すべきとき決定するアルゴリズムは幾分複雑です.@xref{Search Algorithm,,
How Directory Searches are Performed, make, The @acronym{GNU} Make
Manual}.

@c If a target needs to be rebuilt, @acronym{GNU} @command{make} discards the
@c filename found during the @code{VPATH} search for this target, and
@c builds the file locally using the filename given in the @file{Makefile}.
@c If a target does not need to be rebuilt, @acronym{GNU} @command{make} uses the
@c filename found during the @code{VPATH} search.
@c 
ターゲットのリビルドが必要な場合,@acronym{GNU} @command{make}は,この
ターゲットを@code{VPATH}で検索している間に見つかったファイル名を廃棄し,
@file{Makefile}で与えられたファイル名を使用して,ローカルなファイルを
ビルドします.ターゲットをリビルドする必要が無い場合は,@acronym{GNU}
@command{make}は@code{VPATH}で検索している間に見つかったファイル名を使
用します.

@c Other @command{make} implementations, like BSD @command{make}, are
@c easier to describe: the filename found during the @code{VPATH} search
@c will be used whether the target needs to be rebuilt or not.  Therefore
@c new files are created locally, but existing files are updated at their
@c @code{VPATH} location.
@c 
@acronym{BSD} @command{make}のような,その他の@command{make}の実装は,
より簡単に記述できます.@code{VPATH}で検索している間に見つかったファイ
ル名は,ターゲットがリビルドを必要としているかどうかにかかわらず使用さ
れます.このため<新しいファイルはローカルに作成されますが,
@code{VPATH}に位置する既存のファイルは更新されます.

@c When attempting a @code{VPATH} build for an autoconfiscated package
@c (e.g, @code{mkdir build; ../configure}), this means the @acronym{GNU}
@c @command{make} will build everything locally in the @file{build}
@c directory, while BSD @command{make} will build new files locally and
@c update existing files in the source directory.
@c 
@code{VPATH}で,autoconfパッケージのビルドを試みるとき(例えば,
@code{mkdir build; ../configure}),@acronym{GNU} @command{make}
@command{make}は@file{build}ディレクトリですべてのローカルにビルドしま
すが,@acronym{BSD} @command{make}はローカルな新しいファイルをビルドし,
ソースディレクトリの既存のファイルを更新する事を意味します.

@example
% @kbd{cat Makefile}
VPATH = ..
all: foo.x bar.x
foo.x bar.x: newer.x
        @@echo Building $@@
% @kbd{touch ../bar.x}
% @kbd{touch ../newer.x}
% @kbd{make}        # GNU make
Building foo.x
Building bar.x
% @kbd{pmake}       # BSD make
Building foo.x
Building ../bar.x
@end example

@c Another point worth mentioning is that once @acronym{GNU} @command{make} has
@c decided to ignore a @code{VPATH} filename (e.g., it ignored
@c @file{../bar.x} in the above example) it will continue to ignore it when
@c the target occurs as a prerequisite of another rule.
@c 
言及する価値のあるもう一つの点は,@acronym{GNU} @command{make}が一度
@code{VPATH}のファイル名を無視する事に決めると(例えば,上記の例の
@file{../bar.x}を無視する),ターゲットが他のルールの必要条件になったとき,
それを無視し続けます.

@c The following example shows that @acronym{GNU} @command{make} does not look up
@c @file{bar.x} in @code{VPATH} before performing the @code{.x.y} rule,
@c because it ignored the @code{VPATH} result of @file{bar.x} while running
@c the @code{bar.x: newer.x} rule.
@c 
以下の例では,@code{bar.x: newer.x}のルールを実行している間に
@file{bar.x} の@code{VPATH}の結果を無視するので,@code{.x.y}のルールを実
行する前に,@acronym{GNU} @command{make}は@code{VPATH}の@file{bar.x}を
探さない事を示しています.

@example
% @kbd{cat Makefile}
VPATH = ..
all: bar.y
bar.x: newer.x
        @@echo Building $@@
.SUFFIXES: .x .y
.x.y:
        cp $< $@@
% @kbd{touch ../bar.x}
% @kbd{touch ../newer.x}
% @kbd{make}        # GNU make
Building bar.x
cp bar.x bar.y
cp: cannot stat `bar.x': No such file or directory
make: *** [bar.y] Error 1
% @kbd{pmake}       # BSD make
Building ../bar.x
cp ../bar.x bar.y
@end example

@c Note that if you drop away the command from the @code{bar.x: newer.x}
@c rule, things will magically start to work: @acronym{GNU}
@c @command{make} knows that @code{bar.x} hasn't been updated, therefore
@c it doesn't discard the result from @code{VPATH} (@file{../bar.x}) in
@c succeeding uses.
@c 
@code{bar.x: newer.x}ルールからコマンドを削除した場合,手品のように動
作し始める事に注意してください.@acronym{GNU} @command{make}は,
@code{bar.x}が更新されていない事を知っているので,@code{VPATH}
(@file{../bar.x})の結果がうまく使用できるという結果を廃棄しません.

@example
% @kbd{cat Makefile}
VPATH = ..
all: bar.y
bar.x: newer.x
.SUFFIXES: .x .y
.x.y:
        cp $< $@@
% @kbd{touch ../bar.x}
% @kbd{touch ../newer.x}
% @kbd{make}        # GNU make
cp ../bar.x bar.y
% @kbd{rm bar.y}
% @kbd{pmake}       # BSD make
cp ../bar.x bar.y
@end example
@end table
@c end item about VPATH

@c @item Single Suffix Rules and Separated Dependencies
@item 単一のサフィックスルールと分離された依存性
@cindex Single Suffix Inference Rule
@cindex Rule, Single Suffix Inference
@c A @dfn{Single Suffix Rule} is basically a usual suffix (inference) rule
@c (@samp{.from.to:}), but which @emph{destination} suffix is empty
@c (@samp{.from:}).
@c 
@dfn{単一のサフィックスルール(Single Suffix Rule)}は,基本的に(推測さ
れる)通常のサフィックスルール(@samp{.from.to:})ですが,@emph{ディスティ
ネーション(destination)}サフィックスは空(@samp{.from:})です.

@cindex Separated Dependencies
@c @dfn{Separated dependencies} simply refers to listing the prerequisite
@c of a target, without defining a rule.  Usually one can list on the one
@c hand side, the rules, and on the other hand side, the dependencies.
@c 
@dfn{分離された依存性(Separated dependencies)}は,ルールを定義すること
無く,ターゲットの必要条件のリストを単純に参照します.通常,一方ではルー
ルを,もう一方で依存性をリストアップすることが可能です.

@c Solaris @command{make} does not support separated dependencies for
@c targets defined by single suffix rules:
@c 
Solarisの@command{make}は,単一のサフィックスルールで定義されたターゲッ
トに対する,分離された依存性をサポートしていません.

@example
$ @kbd{cat Makefile}
.SUFFIXES: .in
foo: foo.in
.in:
        cp $< $@
$ @kbd{touch foo.in}
$ @kbd{make}
$ @kbd{ls}
Makefile  foo.in
@end example

@noindent
@c while @acronym{GNU} Make does:
@c 
一方@acronym{GNU} Makeはサポートしています.

@example
$ @kbd{gmake}
cp foo.in foo
$ @kbd{ls}
Makefile  foo       foo.in
@end example

@c Note it works without the @samp{foo: foo.in} dependency.
@c 
それは@samp{foo: foo.in}の依存性無しで動作することに注意してください.

@example
$ @kbd{cat Makefile}
.SUFFIXES: .in
.in:
        cp $< $@
$ @kbd{make foo}
cp foo.in foo
@end example

@noindent
@c and it works with double suffix inference rules:
@c 
そして,それは二重のサフィックスの継承ルールで動作することにも注意して
ください.

@example
$ @kbd{cat Makefile}
foo.out: foo.in
.SUFFIXES: .in .out
.in.out:
        cp $< $@
$ @kbd{make}
cp foo.in foo.out
@end example

@c As a result, in such a case, you have to write target rules.
@c 
結果として,そのような状況では,ターゲットルールを書く必要があります.
@end table




@c ================================================== Manual Configuration

@node Manual Configuration
@c @chapter Manual Configuration
@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 @command{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 
数種類の特徴については,テストプログラムを実行するだけでは自動的に推測
できません.例えば,オブジェクトファイルのフォーマットの詳細や,コンパ
イラやリンカに渡す必要がある特別なオプションもあります.そのように,
@command{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
@c @section Specifying the System Type
@section システムタイプの指定

@c Like other @acronym{GNU} @command{configure} scripts, Autoconf-generated
@c @command{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 
他の@acronym{GNU} @command{configure}スクリプトのように,Autoconfが生
成した @command{configure}スクリプトでは,システムタイプの標準名に基づ
いて決定することが可能で,それは以下のような形式になります.
@samp{@var{cpu}-@var{vendor}-@var{os}}で,@var{os}は,
@samp{@var{system}}や@samp{@var{kernel}-@var{system}}が可能です.

@c @command{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 @command{config.guess}, which infers the name using the @code{uname}
@c command or symbols predefined by the C preprocessor.
@c 
@command{configure}は,通常,実行しているシステムタイプの標準名を推測
することが可能です.そうするために,@command{config.guess}と呼ばれるス
クリプトを呼び出し,それは,@code{uname}コマンドや,Cプリプロセッサが
前もって定義したシンボルを使用して推測します.

@c Alternately, the user can specify the system type with command line
@c arguments to @command{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:
@c 
その代わりとして,ユーザは@command{configure}へのコマンドライン引数で,
システムタイプを指定可能です.それはクロスコンパイル時に必要です.クロ
スコンパイルで最も複雑な場合,三つのシステムタイプが呼び出されます.指
定するオプションは以下の通りです.

@table @option
@item --build=@var{build-type}
@c the type of system on which the package is being configured and
@c compiled.  It defaults to the result of running @command{config.guess}.
@c 
パッケージがコンフィグレーションされコンパイルされるシステムのタイプで
す.デフォルトは,@command{config.guess}の実行結果になります.

@item --host=@var{host-type}
@ovindex cross_compiling
@c the type of system on which the package will run.  By default it is the
@c same as the build machine.  Specifying it enables the cross-compilation
@c mode.
@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 If you mean to override the result of @command{config.guess}, use
@c @option{--build}, not @option{--host}, since the latter enables
@c cross-compilation.  For historical reasons, passing @option{--host} also
@c changes the build type.  Therefore, whenever you specify @code{--host},
@c be sure to specify @code{--build} too.  This will be fixed in the
@c future.
@c 
@command{config.guess}の結果に優先することを意図した場合,
@option{--host}はクロスコンパイルを利用可能にするものなので,
@option{--host}ではなく@option{--build}を使用してください.歴史的な理
由から,@option{--host}を渡してもビルド形式を変更します.そのため,
@code{--host}を指定するときは常に@code{--build}も確実に指定してくださ
い.これは将来,修正されるでしょう.

@example
./configure --build=i686-pc-linux-gnu --host=m68k-coff
@end example

@noindent
@c will enter cross-compilation mode, but @command{configure} will fail if it
@c can't run the code generated by the specified compiler if you configure
@c as follows:
@c 
上記でクロスコンパイルモードになりますが,以下のようなコンフィグレーショ
ンでは,指定されているコンパイラで生成されるコートが実行不可能なので,
@command{configure}は失敗するでしょう.

@example
./configure CC=m68k-coff-gcc
@end example

@cindex @command{config.sub}
@c @command{configure} recognizes short aliases for many system types; for
@c example, @samp{decstation} can be used instead of
@c @samp{mips-dec-ultrix4.2}.  @command{configure} runs a script called
@c @command{config.sub} to canonicalize system type aliases.
@c 
@command{configure}は,多くのシステムタイプに対する短い別名を認識しま
す.例えば,@samp{decstation}は@samp{mips-dec-ultrix4.2}の代わりに使用
することが可能です. @command{configure}は,システムタイプの別名を標準
化するために@command{config.sub}と呼ばれるスクリプトを実行します.

@c This section deliberately omits the description of the obsolete
@c interface; see @ref{Hosts and Cross-Compilation}.
@c 
このセクションでは,故意に時代遅れのインターフェースの記述を省略してき
ました.@ref{Hosts and Cross-Compilation}を参照してください.


@node Canonicalizing
@c @section Getting the Canonical System Type
@section 標準的なシステムタイプの取得

@c The following macros make the system type available to @command{configure}
@c scripts.
@c 
以下のマクロで,システムタイプが@command{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 @command{config.guess} and
@c @command{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 @command{configure} looks for those scripts.
@c 
これらのマクロを使用する場合,ソースコードと一緒に
@command{config.guess} と@command{config.sub}を配布する必要があります.
@command{configure}がこれらのスクリプトを探すディレクトリを制御するた
めに使用可能な@code{AC_CONFIG_AUX_DIR}マクロに関する情報は,
@xref{Output}.


@defmac AC_CANONICAL_BUILD
@acindex 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}と,それを識別する三つ
の部分@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 @command{config.guess}.
@c 
@option{--build}が指定されている場合,@code{build}は@code{build_alias}
の@command{config.sub}で標準化されたものになり,それ以外では,シェルス
クリプト@command{config.guess}で決定されます.
@end defmac

@defmac AC_CANONICAL_HOST
@acindex 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}と,それを識別する三つの
部分@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}で標準化されたものになり,それ以外では,シェルスク
リプト@command{config.guess}で決定されます.
@end defmac

@defmac AC_CANONICAL_TARGET
@acindex 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},それを識別する三
つの部分@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

@c Note that there can be artifacts due to the backward compatibility
@c code.  See @xref{Hosts and Cross-Compilation}, for more.
@c 
下位互換性のコードのため,人為的なものがあることに注意してください.詳
細は,@xref{Hosts and Cross-Compilation}.

@node Using System Type
@c @section Using the System Type
@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 later 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 Note that the above example uses @code{$target} because it's taken from
@c a tool which can be built on some architecture (@code{$build}), run on
@c another (@code{$host}), but yet handle data for a third architecture
@c (@code{$target}).  Such tools are usually part of a compiler suite, they
@c generate code for a specific @code{$target}.
@c 
上記の例では,いくつかのアーキテクチャ(@code{$build})でビルドされ,別
のもの(@code{$host})で実行することが可能なツールから持ってこられている
ため,@code{$target}を使用していて,第三のアーキテクチャ
(@code{$target})に対するデータを扱っていることにに注意してください.そ
のようなツールは,通常コンパイラスイートの一部で,それは特殊な
@code{$target}に対するコードを生成します.

@c However @code{$target} should be meaningless for most packages.  If you
@c want to base a decision on the system where your program will be run,
@c make sure you use the @code{$host} variable, as in the following
@c excerpt:
@c 
しかし,@code{$target}はほとんどのパッケージで意味が無いようにすべきで
す.プログラムを実行するシステムを決定の基本にしたい場合,以下の抜粋部
分のように,@code{$host}変数を使用していることを確かめてください.

@example
case $host in
  *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
    MUMBLE_INIT="mumble.ini"
    ;;
  *)
    MUMBLE_INIT=".mumbleinit"
    ;;
esac
AC_SUBST([MUMBLE_INIT])
@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
@c @chapter Site Configuration
@chapter サイトのコンフィグレーション

@c @command{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 @command{configure}
@c options.
@c 
@command{configure}スクリプトは,何種類かのローカルコンフィグレーショ
ンの宣言をサポートします.ユーザが外部ソフトウェアパッケージの場所を指
定したり,追加の特徴を含めたり排除したり,編集された名前でプログラムを
インストールしたり,@command{configure}オプションに対してデフォルト値
を設定したりする方法があります.

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

@node External Software
@c @section Working With External Software
@section 外部ソフトウェアとともに動作する

@c Some packages require, or can optionally use, other software packages
@c that are already installed.  The user can give @command{configure}
@c command line options to specify which such external software to use.
@c The options have one of these forms:
@c 
既にインストールしてある他のソフトウェアパッケージを要求したり,追加で
使用していたりしているパッケージもあります.ユーザは,使用するそのよう
な外部ソフトの指定するために,@command{configure}のコマンドラインオプ
ションを与えることが可能です.オプションは以下の形式うちの一つです.

@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
@c awful.
@example
--with-@var{package}[=@var{arg}]
--without-@var{package}
@end example

@c For example, @option{--with-gnu-ld} means work with the @acronym{GNU} linker
@c instead of some other linker.  @option{--with-x} means work with The X
@c Window System.
@c 
例えば,@option{--with-gnu-ld}は,他のリンカの代わりに@acronym{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 @command{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 @command{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 
@command{configure}スクリプトは,サポートしていない
@option{--with-@var{package}}オプションに文句を言いません.これにより,
複数のパッケージを含むソースツリーにおいて,パッケージが異なるオプショ
ンをサポートするとき,パッケージによってはサポートするものもあるオプショ
ンで深刻なエラーメッセージを出力すること無く,トップレベルの
@command{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 @command{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 
使用される可能性のあるそれぞれの外部ソフトウェアパッケージに対して,
@command{configure}のユーザがそれの使用を依頼したかどうかを検出するた
め,@file{configure.ac}で@code{AC_ARG_WITH}を呼び出すべきです.それぞ
れのパッケージでデフォルトで使用するかどうかと,有効な引数については,
好きにしてください.

@defmac AC_ARG_WITH (@var{package}, @var{help-string}, @ovar{action-if-given}, @ovar{action-if-not-given})
@acindex ARG_WITH
@c If the user gave @command{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 
ユーザが@command{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
@c --help}.  Avoid tabs in the help string.  You'll need to enclose the
@c help string in @samp{[} and @samp{]} in order to produce the leading
@c 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}, @ovar{action-if-not-given})
@acindex 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
@c @section Choosing Package Options
@section パッケージオプションの選択

@c If a software package has optional compile-time features, the user can
@c give @command{configure} command line options to specify whether to
@c compile them.  The options have one of these forms:
@c 
ソフトウェアパッケージに追加のコンパイル時の特徴がある場合,それらをコ
ンパイルするかどうか指定するため,ユーザは@command{configure}コマンド
ラインオプションを与えることが可能です.オプションは以下の書式の一つに
なります.

@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
@c awful.
@example
--enable-@var{feature}[=@var{arg}]
--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 @command{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 @command{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 
@command{configure}スクリプトは,サポートしていない 
@option{--enable-@var{feature}}オプションに文句を言いません.これによ
り,複数のパッケージを含むソースツリーにおいて,パッケージが異なるオプ
ションをサポートするとき,パッケージによってはサポートするものもあるオ
プションで深刻なエラーメッセージを出力すること無く,トップレベルの
@command{configure} スクリプトでのコンフィグレーションが可能になります.
残念な副作用として,オプションのスペルエラーは診断されません.この問題
のより良い手法はまだ提案されていません.

@c For each optional feature, @file{configure.ac} should call
@c @code{AC_ARG_ENABLE} to detect whether the @command{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 
使用される可能性のあるそれぞれの追加の機能に対して,
@command{configure} のユーザがそれを含めることを依頼したかどうかを検出
するため,@file{configure.ac}で@code{AC_ARG_ENABLE}を呼び出すべきです.
それぞれの機能をデフォルトで使用するかどうかと,有効な引数については,
好きにしてください.

@defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @ovar{action-if-given}, @ovar{action-if-not-given})
@acindex ARG_ENABLE
@c If the user gave @command{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 
ユーザが,@command{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}, @ovar{action-if-not-given})
@acindex 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
@c @section Making Your Help Strings Look Pretty
@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})
@acindex 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
@c @section Configuring Site Details
@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, @acronym{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, @acronym{GNU} Coding Standards}.

@node Transforming Names
@c @section Transforming Program Names When Installing
@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
@acindex 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 @command{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, the target type followed by a dash is used as a prefix.
@c Otherwise, no program name transformation is done.
@c 
下記のオプションのいずれかが@command{configure}に与えれらている場合,
プログラム名は適宜変換されます.それ以外では,
@code{AC_CANONICAL_SYSTEM} が呼び出されて,@samp{--target}の値が与えら
れている場合,ダッシュが続いているターゲットタイプがプレフィクスとして
使用されます.それ以外ではプログラム名は変換されません.
@end defmac

@menu
* Transformation Options::      @command{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
@c @subsection Transformation Options
@subsection 変換オプション

@c You can specify name transformations by giving @command{configure} these
@c command line options:
@c 
@command{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
@c @subsection Transformation Examples
@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 @acronym{GNU} programs installed on your system to shadow other programs with
@c the same name.  For example, if you configure @acronym{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 
@acronym{GNU}プログラムを,他のプログラムを隠してしまうような同じ名前
でシステムにインストールしたくない場合,プログラム名を@file{g}から始め
ることができます.例えば,@acronym{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 @acronym{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}の
ように@acronym{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
@c @subsection Transformation Rules
@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
PROGRAMS = cp ls rm
transform = @@program_transform_name@@
install:
        for p in $(PROGRAMS); do \
          $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
                                              sed '$(transform)'`; \
        done

uninstall:
        for p in $(PROGRAMS); do \
          rm -f $(DESTDIR)$(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
@c @section Setting Site Defaults
@section サイトのデフォルトの設定

@c Autoconf-generated @command{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が生成した@command{configure}スクリプトで,コンフィグレーショ
ンの値に対して,サイトのデフォルト値を供給できるものもあります.これは,
サイト全体と システム全体の初期化ファイルを作成することで可能となりま
す.

@evindex CONFIG_SITE
@c If the environment variable @code{CONFIG_SITE} is set, @command{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}が設定されている場合,@command{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 @command{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 @command{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 
サイトファイルは任意のシェルスクリプトが可能ですが,本来なら特定の種類
のコードだけがその中にあるのが適切です.@command{configure}はサイトファ
イルを読み込んだ後でキャッシュファイルを読み込むので,サイトファイルは,
そのシステムで実行されるAutoconfが生成した全ての@command{configure}ス
クリプト間で,デフォルトのキャッシュファイルを共有することが可能になっ
ています(@pxref{Cache Files}).キャッシュファイルは特定のコンパイラに
対してのみで有効ですが,システムの多くは複数の利用可能なコンパイラがあ
るので,デフォルトのキャッシュファイルをサイトファイルに設定した場合,
サイトファイルで出力変数@code{CC}を設定するのは良い考えです.

@c You can examine or override the value set by a command line option to
@c @command{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 
@command{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, where 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 @command{configure} scripts, or in the Autoconf
@c M4 source code for those macros.
@c 
サイトファイル自身でキャッシュ値を設定することもできます.こうすること
で,テストプログラムの実行が必要な特徴の調査が不可能なクロスコンパイル
で役に立ちます.システムに対して@file{@var{prefix}/etc/config.site} で
これらの値を正しく設定することで,``キャッシュの用意''が可能です.設定
する必要があるキャッシュ変数名を見つけるため,影響を受けた
@command{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 @command{configure}) before changing them.
@c 
キャッシュファイルは,サイトファイルで設定した変数を無効にしないよう注
意深く実行します.また,サイトファイルでコマンドラインオプションを無効
にするべきではありません.コードでは,@code{prefix}と@code{cache_file}
のような変数を変更する前に,(@command{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
@c @chapter Running @command{configure} Scripts
@chapter @command{configure}スクリプトの実行
@cindex @command{configure}

@c Below are instructions on how to configure a package that uses a
@c @command{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 
以下は,@command{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 @command{configure}
* Defining Variables::          Specifying the compiler etc.
* configure Invocation::        Changing how @command{configure} runs
@end menu

@set autoconf
@include install-ja.texi


@c ============================================== Recreating a Configuration

@node config.status Invocation
@c @chapter Recreating a Configuration
@chapter コンフィグレーションの再生成
@cindex @command{config.status}

@c The @command{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 
@command{configure}スクリプトは,実際にコンフィグレーションを行なう
@dfn{実際に作成されるもの(instantiates)}のテンプレートファイルとなる
@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 --silent
@itemx --quiet
@itemx -q
@c Do not print progress messages.
@c 
処理中のメッセージを出力しません.

@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 @command{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 
このオプションと以下のものは,個別に配布されているパッケージで
@command{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 @command{configure}, so that the
@c results of some tests might be different from the previous run.  The
@c @option{--recheck} option re-runs @command{configure} with the same arguments
@c you used before, plus the @option{--no-create} option, which prevents
@c @command{configure} from running @file{config.status} and creating
@c @file{Makefile} and other files, and the @option{--no-recursion} option,
@c which prevents @command{configure} from running other @command{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}にそれ自身を更新するかどうか尋ねて終了します(実際
に作成しません).いくつかのテストの結果が前回のもの異なる可能性がある
ので,このオプションは@command{configure}を変更した場合に役に立ちます.
@option{--recheck}では,前回使用したものと同じ引数に加え,
@command{configure}が@file{config.status}を実行したり@file{Makefile}と
その他のファイルを作成したりしないようにする@option{--no-create}オプショ
ンと,@command{configure}がサブディレクトリでその他の
@command{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 @command{configure} for the @option{--recheck}
@c option.  It must be Bourne-compatible.  The default is a shell that
@c supports @env{LINENO} if available, and @file{/bin/sh} otherwise.
@c 
@option{--recheck}オプションで@command{configure}が実行されるシェルで
す.Bourne互換にする必要があります.デフォルトは,利用可能な場合は
@env{LINENO}をサポートするシェルで,それ以外では@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 @command{configure}
@c scripts shouldn't be merged because they are maintained separately.
@c 
コンフィグレーションを記録するシェルスクリプトのファイル名です.デフォ
ルトは@file{./config.status}です.この変数は,他のパッケージの一部を使
用したり,@command{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
@c @chapter Obsolete Constructs
@chapter 時代遅れの構成物

@c Autoconf changes, and throughout the years some constructs have been
@c obsoleted.  Most of the changes involve the macros, but in some cases
@c the tools themselves, or even some concepts, are now considered
@c 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
@c @section Obsolete @file{config.status} Invocation
@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
@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.  @command{autoheader} copied 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}に必要なテンプレートのリストを含めていました.
@command{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 @command{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 @command{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 ancient 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, @command{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@@}が含まれている場合,@command{autoheader}は@samp{@@TOP@@} 
が含まれている行の前の行を生成するファイルの先頭にコピーします.同様に,
@file{./acconfig.h}に文字列@samp{@@BOTTOM@@}が含まれている場合,
@command{autoheader}はその行の後の行を生成するファイルの末尾にコピーし
ます.これらの文字列のいずれかまたは両方とも省略できます.古いバージョ
ンのAutoconfで同じ効果を生成するための,さらに古い代替方法は,カレント
ディレクトリにファイル@file{@var{file}.top}(通常は@file{config.h.top}) 
や@file{@var{file}.bot}を作成することです.それらが存在する場合,
@command{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 Using 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
@c @section Using @command{autoupdate} to Modernize @file{configure.ac}
@section @file{configure.ac}を現代風にするために@command{autoupdate}を使用する
@cindex @command{autoupdate}

@c The @command{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 
@command{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, @command{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 @command{autoupdate} an argument, it reads that file
@c instead of @file{configure.ac} and writes the updated file to the
@c standard output.
@c 
引数が与えられていない場合,@command{autoupdate}は@file{configure.ac}
を更新し,元のバージョンを接尾子@file{~}でバックアップします(または,
環境変数@code{SIMPLE_BACKUP_SUFFIX}が設定されている場合はその値になり
ます).@command{autoupdate}に引数を与えた場合,@file{configure.ac}の代
わりにそのファイルを読み込み,更新されたファイルを標準出力に出力します.

@noindent
@c @command{autoupdate} accepts the following options:
@c 
@command{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 
Autoconfのバージョンナンバーを出力して終了します.

@item --verbose
@itemx -v
@c Report processing steps.
@c 
処理している段階を報告します.

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

@item --force
@itemx -f
@c Force the update even if the file has not changed.  Disregard the cache.
@c 
ファイルが変更されていない場合でも強制的に更新します.キャッシュは無視
されます.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Also look for input files in @var{dir}.  Multiple invocations accumulate.
@c Directories are browsed from last to first.
@c 
入力ファイルを@var{dir}でも探します.複数回の呼び出しは累積されます.
ディレクトリは最後のものから最初のものという順序で見ていきます.
@end table

@node Obsolete Macros
@c @section Obsolete Macros
@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, if 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のバージョン1からバージョン2へ移行している間,より一般的でより
記述的な命名法を使用するために,ほとんどのマクロの名前が変更されました
が,そのシグニチャは変更されていません.以下で,これらのマクロの古い名
前と新しい名前の対応付けがあるものは,署名と記述に対する新しいマクロの
定義へ参照するよう読者を招待します.

@defmac AC_ALLOCA
@acindex ALLOCA
@code{AC_FUNC_ALLOCA}
@end defmac

@defmac AC_ARG_ARRAY
@acindex ARG_ARRAY
@c removed because of limited usefulness
@c 
有用性の制限のため削除.
@end defmac

@defmac AC_C_CROSS
@acindex C_CROSS
@c This macro is obsolete; it does nothing.
@c 
このマクロは時代遅れです.何もしません.
@end defmac

@defmac AC_CANONICAL_SYSTEM
@acindex 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
@acindex CHAR_UNSIGNED
@code{AC_C_CHAR_UNSIGNED}
@end defmac

@defmac AC_CHECK_TYPE (@var{type}, @var{default})
@acindex 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.  Secondly, 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_UNQUOTED([@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 
下位互換性のため,二つのバージョンの@code{AC_CHECK_TYPE}が実装されてい
て,単純な発見的手法で選択されます.

@enumerate
@item
@c If there are three or four arguments, the modern version is used.
@c 
引数が三つまたは四つある場合,現在のバージョンが使用されます.

@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 
二番目の引数に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 
二番目の引数が有効な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})
@acindex 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}, @ovar{action-if-not-found})
@acindex COMPILE_CHECK
@c This is an obsolete version of @code{AC_TRY_COMPILE} itself replaced by
@c @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}), with the
@c addition that it prints @samp{checking for @var{echo-text}} to the
@c standard output first, if @var{echo-text} is non-empty.  Use
@c @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead to print
@c messages (@pxref{Printing Messages}).
@c 
これは,@code{AC_TRY_COMPILE}の時代遅れのバージョンで,それ自身も
@code{AC_COMPILE_IFELSE}で置換され(@pxref{Running the Compiler}),それ
は@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
@acindex CONST
@code{AC_C_CONST}
@end defmac

@defmac AC_CROSS_CHECK
@acindex 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
@acindex 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_SYS_SIGLIST
@acindex DECL_SYS_SIGLIST
@cvindex SYS_SIGLIST_DECLARED
@c Same as @samp{AC_CHECK_DECLS([sys_siglist])}.
@c 
@samp{AC_CHECK_DECLS([sys_siglist])}と同じです.
@end defmac

@defmac AC_DECL_YYTEXT
@acindex DECL_YYTEXT
@c Does nothing, now integrated in @code{AC_PROG_LEX}.
@c 
何もせず,現在は@code{AC_PROG_LEX}に統合されています.
@end defmac

@defmac AC_DIR_HEADER
@acindex 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}}
@c @item Header            @tab Old Symbol     @tab New Symbol
@item ヘッダ            @tab 古いシンボル   @tab 新しいシンボル
@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
@acindex DYNIX_SEQ
@c If on DYNIX/ptx, add @option{-lseq} to output variable
@c @code{LIBS}.  This macro used to be defined as
@c 
DYNIX/ptxの場合,出力変数@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
@acindex 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
@acindex 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
@acindex ERROR
@code{AC_MSG_ERROR}
@end defmac

@defmac AC_FIND_X
@acindex FIND_X
@code{AC_PATH_X}
@end defmac

@defmac AC_FIND_XTRA
@acindex FIND_XTRA
@code{AC_PATH_XTRA}
@end defmac

@defmac AC_FUNC_CHECK
@acindex FUNC_CHECK
@code{AC_CHECK_FUNC}
@end defmac

@defmac AC_FUNC_WAIT3
@acindex 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}が見つかり,第三引数(@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の標準から削除されていて,次のリビジョ
ンの@acronym{POSIX}では無くなるので,移植性の高いプログラムでは
@code{wait3}ではなく@code{waitpid}を使用すべきです.
@end defmac

@defmac AC_GCC_TRADITIONAL
@acindex GCC_TRADITIONAL
@code{AC_PROG_GCC_TRADITIONAL}
@end defmac

@defmac AC_GETGROUPS_T
@acindex GETGROUPS_T
@code{AC_TYPE_GETGROUPS}
@end defmac

@defmac AC_GETLOADAVG
@acindex GETLOADAVG
@code{AC_FUNC_GETLOADAVG}
@end defmac

@defmac AC_HAVE_FUNCS
@acindex HAVE_FUNCS
@code{AC_CHECK_FUNCS}
@end defmac

@defmac AC_HAVE_HEADERS
@acindex HAVE_HEADERS
@code{AC_CHECK_HEADERS}
@end defmac

@defmac AC_HAVE_LIBRARY (@var{library}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
@acindex 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
@acindex HAVE_POUNDBANG
@c @code{AC_SYS_INTERPRETER} (different calling convention)
@c 
@code{AC_SYS_INTERPRETER} (呼び出し規則が異なります)
@end defmac

@defmac AC_HEADER_CHECK
@acindex HEADER_CHECK
@code{AC_CHECK_HEADER}
@end defmac

@defmac AC_HEADER_EGREP
@acindex HEADER_EGREP
@code{AC_EGREP_HEADER}
@end defmac

@defmac AC_INIT (@var{unique-file-in-source-dir})
@acindex 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
@acindex INLINE
@code{AC_C_INLINE}
@end defmac

@defmac AC_INT_16_BITS
@acindex 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の型@code{int}が16ビット幅の場合,@code{INT_16_BITS}を定義します.代
わりに@samp{AC_CHECK_SIZEOF(int)}を使用してください.
@end defmac

@defmac AC_IRIX_SUN
@acindex IRIX_SUN
@c If on @sc{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 
@acronym{AIX} (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
@acindex LANG_C
@c Same as @samp{AC_LANG(C)}.
@c 
@samp{AC_LANG(C)}と同じです.
@end defmac

@defmac AC_LANG_CPLUSPLUS
@acindex LANG_CPLUSPLUS
@c Same as @samp{AC_LANG(C++)}.
@c 
@samp{AC_LANG(C++)}と同じです.
@end defmac

@defmac AC_LANG_FORTRAN77
@acindex LANG_FORTRAN77
@c Same as @samp{AC_LANG(Fortran 77)}.
@c 
@samp{AC_LANG(Fortran 77)}と同じです.
@end defmac

@defmac AC_LANG_RESTORE
@acindex 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
@acindex 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{})
@acindex 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
@acindex LN_S
@code{AC_PROG_LN_S}
@end defmac

@defmac AC_LONG_64_BITS
@acindex 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
@acindex LONG_DOUBLE
@code{AC_C_LONG_DOUBLE}
@end defmac

@defmac AC_LONG_FILE_NAMES
@acindex LONG_FILE_NAMES
@code{AC_SYS_LONG_FILE_NAMES}
@end defmac

@defmac AC_MAJOR_HEADER
@acindex MAJOR_HEADER
@code{AC_HEADER_MAJOR}
@end defmac

@defmac AC_MEMORY_H
@acindex 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 @ref{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
@acindex 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
@acindex MINUS_C_MINUS_O
@code{AC_PROG_CC_C_O}
@end defmac

@defmac AC_MMAP
@acindex MMAP
@code{AC_FUNC_MMAP}
@end defmac

@defmac AC_MODE_T
@acindex MODE_T
@code{AC_TYPE_MODE_T}
@end defmac

@defmac AC_OBJEXT
@acindex 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 
@file{.c}ファイルが除外された後,コンパイラの出力に基づいて,出力変数 
@code{OBJEXT}を定義します.通常,Unixでは@samp{o}で,Win32では 
@samp{obj}に設定します.現在はコンパイラの調査マクロがこれを自動的に処
理します.
@end defmac

@defmac AC_OBSOLETE (@var{this-macro-name}, @ovar{suggestion})
@acindex OBSOLETE
@c Make 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 
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
@acindex OFF_T
@code{AC_TYPE_OFF_T}
@end defmac

@defmac AC_OUTPUT (@ovar{file}@dots{}, @ovar{extra-cmds}, @ovar{init-cmds})
@acindex 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}, @ovar{init-cmds})
@acindex 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 @command{configure}.  This macro may be called multiple times.  It is
@c obsolete, replaced by @code{AC_CONFIG_COMMANDS}.
@c 
@file{config.status}の終りに実行する追加のシェルコマンドと,
@command{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, unlike
@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}が引数を二回引用符で囲んでいますが
@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}が二回必要になります.
以下の行は等価です.

@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
@acindex PID_T
@code{AC_TYPE_PID_T}
@end defmac

@defmac AC_PREFIX
@acindex PREFIX
@code{AC_PREFIX_PROGRAM}
@end defmac

@defmac AC_PROG_CC_STDC
@acindex PROG_CC_STDC
@c This macro has been integrated into @code{AC_PROG_CC}.
@c 
このマクロは,@code{AC_PROG_CC}に統合されました.
@end defmac

@defmac AC_PROGRAMS_CHECK
@acindex PROGRAMS_CHECK
@code{AC_CHECK_PROGS}
@end defmac

@defmac AC_PROGRAMS_PATH
@acindex PROGRAMS_PATH
@code{AC_PATH_PROGS}
@end defmac

@defmac AC_PROGRAM_CHECK
@acindex PROGRAM_CHECK
@code{AC_CHECK_PROG}
@end defmac

@defmac AC_PROGRAM_EGREP
@acindex PROGRAM_EGREP
@code{AC_EGREP_CPP}
@end defmac

@defmac AC_PROGRAM_PATH
@acindex PROGRAM_PATH
@code{AC_PATH_PROG}
@end defmac

@defmac AC_REMOTE_TAPE
@acindex REMOTE_TAPE
@c removed because of limited usefulness
@c 
有用性の制限のため削除されました.
@end defmac

@defmac AC_RESTARTABLE_SYSCALLS
@acindex RESTARTABLE_SYSCALLS
@code{AC_SYS_RESTARTABLE_SYSCALLS}
@end defmac

@defmac AC_RETSIGTYPE
@acindex RETSIGTYPE
@code{AC_TYPE_SIGNAL}
@end defmac

@defmac AC_RSH
@acindex RSH
@c removed because of limited usefulness
@c 
有用性の制限のため削除されました.
@end defmac

@defmac AC_SCO_INTL
@acindex 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
@acindex SETVBUF_REVERSED
@code{AC_FUNC_SETVBUF_REVERSED}
@end defmac

@defmac AC_SET_MAKE
@acindex SET_MAKE
@code{AC_PROG_MAKE_SET}
@end defmac

@defmac AC_SIZEOF_TYPE
@acindex SIZEOF_TYPE
@code{AC_CHECK_SIZEOF}
@end defmac

@defmac AC_SIZE_T
@acindex SIZE_T
@code{AC_TYPE_SIZE_T}
@end defmac

@defmac AC_STAT_MACROS_BROKEN
@acindex STAT_MACROS_BROKEN
@code{AC_HEADER_STAT}
@end defmac

@defmac AC_STDC_HEADERS
@acindex STDC_HEADERS
@code{AC_HEADER_STDC}
@end defmac

@defmac AC_STRCOLL
@acindex STRCOLL
@code{AC_FUNC_STRCOLL}
@end defmac

@defmac AC_ST_BLKSIZE
@acindex ST_BLKSIZE
@code{AC_CHECK_MEMBERS}
@end defmac

@defmac AC_ST_BLOCKS
@acindex ST_BLOCKS
@code{AC_STRUCT_ST_BLOCKS}
@end defmac

@defmac AC_ST_RDEV
@acindex ST_RDEV
@code{AC_CHECK_MEMBERS}
@end defmac

@defmac AC_SYS_RESTARTABLE_SYSCALLS
@acindex 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
@acindex SYS_SIGLIST_DECLARED
@code{AC_DECL_SYS_SIGLIST}
@end defmac

@defmac AC_TEST_CPP
@acindex TEST_CPP
@c @code{AC_TRY_CPP}, replaced with @code{AC_PREPROC_IFELSE}.
@c 
@code{AC_TRY_CPP}になり,それも@code{AC_PREPROC_IFELSE}で置き換えられ
ました.
@end defmac

@defmac AC_TEST_PROGRAM
@acindex TEST_PROGRAM
@c @code{AC_TRY_RUN}, replaced with @code{AC_RUN_IFELSE}.
@c 
@code{AC_TRY_RUN}になり,それも@code{AC_RUN_IFELSE}で置き換えられまし
た.
@end defmac

@defmac AC_TIMEZONE
@acindex TIMEZONE
@code{AC_STRUCT_TIMEZONE}
@end defmac

@defmac AC_TIME_WITH_SYS_TIME
@acindex TIME_WITH_SYS_TIME
@code{AC_HEADER_TIME}
@end defmac

@defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex TRY_COMPILE
@c Same as @samp{AC_COMPILE_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
@c [[@var{function-body}]])], [@var{action-if-true}],
@c [@var{action-if-false}])} (@pxref{Running the Compiler}).
@c 
@samp{AC_COMPILE_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
[[@var{function-body}]])], [@var{action-if-true}],
[@var{action-if-false}])}と同じです(@pxref{Running the Compiler}).

@c This macro double quotes both @var{includes} and @var{function-body}.
@c 
このマクロは,@var{includes}と@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
@c be used when compiling.
@c 
CとC++に対して,@var{includes}は@var{function-body}にあるコードが必要
とするすべての@code{#include}文です(現在選択されている言語がFortran 77 
の場合,@var{includes}は無視されます).このマクロは,CやC++のいずれか
が現在選択されている言語になっている場合,@code{CFLAGS}や
@code{CXXFLAGS}を使用し,コンパイル時には同様に@code{CPPFLAGS}を使用し
ます.Fortran 77が現在選択されている言語の場合,@code{FFLAGS}がコンパ
イルで使用されるでしょう.
@end defmac

@defmac AC_TRY_CPP (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
@acindex TRY_CPP
@c Same as @samp{AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@var{input}]])],
@c [@var{action-if-true}], [@var{action-if-false}])} (@pxref{Running the
@c Preprocessor}).
@c 
@samp{AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@var{input}]])],
[@var{action-if-true}], [@var{action-if-false}])}と同じです
(@pxref{Running the Preprocessor}).

@c This macro double quotes the @var{input}.
@c 
このマクロは@var{input}を二重に引用符で囲みます.
@end defmac

@defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex TRY_LINK
@c Same as @samp{AC_LINK_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
@c [[@var{function-body}]])], [@var{action-if-true}],
@c [@var{action-if-false}])} (@pxref{Running the Compiler}).
@c 
@samp{AC_LINK_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
[[@var{function-body}]])], [@var{action-if-true}],
[@var{action-if-false}])}と同じです(@pxref{Running the Compiler}).

@c This macro double quotes both @var{includes} and @var{function-body}.
@c 
このマクロは,@var{includes}と@var{function-body}の両方を二重に引用符
で囲みます.

@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.  If the file compiles
@c and links successfully, run shell commands @var{action-if-found},
@c otherwise run @var{action-if-not-found}.
@c 
現在の言語に依存して(@pxref{Language Choice}),@var{function-body}の中
身にある関数をコンパイルしリンクすることが可能かどうかを調べるテストプ
ログラムを作成します.ファイルのコンパイルとリンクが成功する場合,シェ
ルコマンド@var{action-if-found}を実行し,それ以外では
@var{action-if-not-found}を実行します.

@c This macro double quotes both @var{includes} and @var{function-body}.
@c 
このマクロは,@var{includes}と@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 
の場合,@var{includes}は無視されます).このマクロは,CやC++のいずれか
が現在選択されている言語になっている場合,@code{CFLAGS}や
@code{CXXFLAGS}を使用し,コンパイル時には同様に@code{CPPFLAGS}を使用し
ます.Fortran 77が現在選択されている言語の場合,@code{FFLAGS}がコンパ
イルで使用されるでしょう.しかし,@code{LDFLAGS}と@code{LIBS}は,あら
ゆる状況でリンク時に使用されます.
@end defmac

@defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex TRY_LINK_FUNC
@c This macro is equivalent to
@c @samp{AC_LINK_IFELSE([AC_LANG_CALL([[@var{includes}]],
@c [[@var{function-body}]])], [@var{action-if-true}],
@c [@var{action-if-false}])}.
@c 
このマクロは,@samp{AC_LINK_IFELSE([AC_LANG_CALL([[@var{includes}]],
[[@var{function-body}]])], [@var{action-if-true}],
[@var{action-if-false}])}と同じです.
@end defmac

@defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, @ovar{action-if-false}, @ovar{action-if-cross-compiling})
@acindex TRY_RUN
@c Same as @samp{AC_RUN_IFELSE([AC_LANG_SOURCE([[@var{program}]],
@c [@var{action-if-true}], [@var{action-if-false}],
@c [@var{action-if-cross-compiling}])} (@pxref{Run Time}).
@c 
@samp{AC_RUN_IFELSE([AC_LANG_SOURCE([[@var{program}]],
[@var{action-if-true}], [@var{action-if-false}],
[@var{action-if-cross-compiling}])}と同じです(@pxref{Run Time}).
@end defmac


@defmac AC_UID_T
@acindex UID_T
@code{AC_TYPE_UID_T}
@end defmac

@defmac AC_UNISTD_H
@acindex UNISTD_H
@c Same as @samp{AC_CHECK_HEADERS(unistd.h)}.
@c 
@samp{AC_CHECK_HEADERS(unistd.h)}と同じです.
@end defmac

@defmac AC_USG
@acindex USG
@cvindex USG
@c Define @code{USG} if the @acronym{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 @ref{Standard Symbols}.
@c 
@acronym{BSD}文字列関数が@file{strings.h}で定義されている場合,
@code{USG}を定義します.これからは@code{USG}ではなく
@code{HAVE_STRING_H}に依存するようにすべきです.@xref{Standard
Symbols}.
@end defmac

@defmac AC_UTIME_NULL
@acindex UTIME_NULL
@code{AC_FUNC_UTIME_NULL}
@end defmac

@defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@ovar{cmd})
@acindex 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.  This is now handled by default.
@c 
キャッシュファイルが現在のホスト,ターゲット,そしてビルドシステムのタ
イプで矛盾がある場合,@var{cmd}を実行したりデフォルトのエラーメッセー
ジを出力したりするために使用されていました.これは現在デフォルトで処理
されます.
@end defmac

@defmac AC_VERBOSE (@var{result-description})
@acindex VERBOSE
@code{AC_MSG_RESULT}.
@end defmac

@defmac AC_VFORK
@acindex VFORK
@code{AC_FUNC_VFORK}
@end defmac

@defmac AC_VPRINTF
@acindex VPRINTF
@code{AC_FUNC_VPRINTF}
@end defmac

@defmac AC_WAIT3
@acindex WAIT3
@code{AC_FUNC_WAIT3}
@end defmac

@defmac AC_WARN
@acindex WARN
@code{AC_MSG_WARN}
@end defmac

@defmac AC_WORDS_BIGENDIAN
@acindex WORDS_BIGENDIAN
@code{AC_C_BIGENDIAN}
@end defmac

@defmac AC_XENIX_DIR
@acindex 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
@acindex YYTEXT_POINTER
@code{AC_DECL_YYTEXT}
@end defmac

@node Autoconf 1
@c @section Upgrading From Version 1
@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 @command{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に更新するための手
作業が必要になります.この章は,更新時に見るべき問題点も示します.また,
@command{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
@c @subsection Changed File Names
@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
@c @subsection Changed Makefiles
@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 @command{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@@}を,@command{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 @command{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 
出力ファイルに,@command{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
@c @subsection Changed Macros
@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 @command{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}を変換するため,@command{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 @command{autoconf}, you may safely ignore them, but
@c your @command{configure} script will generally work better if you follow
@c the advice that is printed 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 @command{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 
マクロには,より良い仕事をする似たものに置き換えられたものもありますが,
呼び出しに互換性がありません.@command{autoconf}実行中に,時代遅れのマ
クロの呼び出しに関する警告がある場合,無視しても大丈夫ですが,時代遅れ
のマクロの置換に関して出力されるアドバイスに従う場合,
@command{configure}スクリプトはより良い仕事をします.特に,テストの結
果を報告するメカニズムが変化しました.(おそらく@code{AC_COMPILE_CHECK}
によって)@code{echo}や@code{AC_VERBOSE}を使用していた場合,
@command{configure}スクリプトの出力は,@code{AC_MSG_CHECKING}と
@code{AC_MSG_RESULT}に変えた方が良く見えるでしょう.@xref{Printing
Messages}. これらのマクロは,キャッシュ変数に関連して最高の仕事をしま
す.@xref{Caching Results}.



@node Changed Results
@c @subsection Changed Results
@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 @command{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}は@command{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
@c @subsection Changed Macro Writing
@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 them into macros that you can share.
@c 
ローカルで書かれた特徴のテストを高速化するため,キャッシュを加えてくだ
さい.共有可能なマクロをカプセル化するため,テストが一般的に十分役に立
つことを確かめてください.


@node Autoconf 2.13
@c @section Upgrading From Version 2.13
@section バージョン2.13からの更新

@c The introduction of the previous section (@pxref{Autoconf 1}) perfectly
@c suits this section@enddots{}
@c 
前のセクション(@pxref{Autoconf 1})の導入は,このセクションにも全く適し
ているなあ@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 @command{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に更新するため
の手作業が必要になります.この章は,更新時に見るべき問題点も示します.
また,@command{configure}スクリプトは,バージョン2.50の新しい機能でよ
り良くなります.変更点は,Autoconf 配布物のファイル@file{NEWS}に概要が
書かれています.
@end quotation

@menu
* Changed Quotation::           Broken code which used to work
* New Macros::                  Interaction with foreign macros
* Hosts and Cross-Compilation::  Bugward compatibility kludges
* AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
* AC_FOO_IFELSE vs AC_TRY_FOO::  A more generic scheme for testing sources
@end menu

@node Changed Quotation
@c @subsection Changed Quotation
@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
$ @kbd{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
$ @kbd{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@dots{} @code{AC_DEFUN} itself!
@c 
多くの多くの(いくらでも続けたい)Autoconfマクロには@dots{}少なくとも
@code{AC_DEFUN}自身も含めて,適切な引用がありませんでした!

@example
$ @kbd{cat configure.in}
AC_DEFUN([AC_PROG_INSTALL],
[# My own much better version
])
AC_INIT
AC_PROG_INSTALL
AC_OUTPUT
$ @kbd{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
$ @kbd{autoconf-2.50}
$
@end example


@node New Macros
@c @subsection New Macros
@subsection 新しいマクロ

@cindex undefined macro
@cindex @code{_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 names of these macros!
@c Therefore, when @command{m4} finds something like
@c @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})} in @file{aclocal.m4},
@c @code{AM_TYPE_PTRDIFF_T} is
@c expanded, replaced with its Autoconf definition.
@c 
残念ながら,Automakeはこれらのマクロ名を引用符で囲んでいませんでした.
そのため,@command{m4}が@samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})}の
ようなマクロを@file{aclocal.m4}で見つけたとき,
@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
$ @kbd{cat configure.in}
AC_INIT
AM_TYPE_PTRDIFF_T
$ @kbd{aclocal-1.4}
$ @kbd{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 itself):
@c 
将来のAutomakeのバージョンは,単純にこれらのマクロをこれ以上定義せず,
おそらく残りのマクロ名を引用符で囲むでしょう.しかし,全てがうまくいく
までじっと待っている必要はありません.(単独で要求されるものもあります
が)マクロを提供するための仕事は単純ではないので,Automakeのマクロに依
存しないでください.

@example
$ @kbd{cat configure.in}
AC_INIT
AM_TYPE_PTRDIFF_T
$ @kbd{rm aclocal.m4}
$ @kbd{autoupdate}
autoupdate: `configure.in' is updated
$ @kbd{cat configure.in}
AC_INIT
AC_CHECK_TYPES([ptrdiff_t])
$ @kbd{aclocal-1.4}
$ @kbd{autoconf}
$
@end example


@node Hosts and Cross-Compilation
@c @subsection Hosts and Cross-Compilation
@subsection ホストとクロスコンパイル

@c Based on the experience of compiler writers, and after long public
@c debates, many aspects of the cross-compilation chain have changed:
@c 
コンパイラ作者の経験とそれ以降の長期にわたる公開討論を基にして,一連の
クロスコンパイルの多くの面が変更されました.

@itemize @minus
@item
@c the relationship between the build, host, and target architecture types,
@c 
ビルド,ホスト,そしてターゲットアーキテクチャタイプの違いに関連するこ
と.

@item
@c the command line interface for specifying them to @command{configure},
@c 
@command{configure}でそれらを指定するコマンドラインインターフェース.

@item
@c the variables defined in @command{configure},
@c 
@command{configure}で定義される変数.

@item
@c the enabling of cross-compilation mode.
@c 
クロスコンパイルモードを利用可能にすること.
@end itemize

@sp 1

@c The relationship between build, host, and target have been cleaned up:
@c the chain of default is now simply: target defaults to host, host to
@c build, and build to the result of @command{config.guess}.  Nevertheless,
@c in order to ease the transition from 2.13 to 2.50, the following
@c transition scheme is implemented.  @emph{Do not rely on it}, as it will
@c be completely disabled in a couple of releases (we cannot keep it, as it
@c proves to cause more problems than it cures).
@c 
ビルド,ホスト,そしてターゲットアーキテクチャタイプの違いに関連するこ
とは解決しています.一連のデフォルトは,現在は単純です.ターゲットのデ
フォルトはホスト,ホストはビルド,そしてビルドは@command{config.guess}
の結果となっています.それにもかかわらず,2.13から2.50へ容易に変換する
ために,以下の変換手法が実装されています.それは,リリースの組を完全に
利用不可能にすることはできないので,@emph{それに依存しないでください}
(直すより問題が生じることが多いので,我々はそれを維持することは不可能
です).

@c They all default to the result of running @command{config.guess}, unless
@c you specify either @option{--build} or @option{--host}.  In this case,
@c the default becomes the system type you specified.  If you specify both,
@c and they're different, @command{configure} will enter cross compilation
@c mode, so it won't run any tests that require execution.
@c 
@option{--build}または@option{--host}で指定しない限り,すべてのデフォ
ルトは@command{config.guess}の実行結果になります.指定する場合は,デフォ
ルトは指定したシステムタイプになります.両方を指定していて異なっている
場合,テストと要求された実行物をの実行しないように,
@command{configure}はクロスコンパイルモードになります.

@c Hint: if you mean to override the result of @command{config.guess},
@c prefer @option{--build} over @option{--host}.  In the future,
@c @option{--host} will not override the name of the build system type.
@c Whenever you specify @code{--host}, be sure to specify @code{--build}
@c too.
@c 
ヒント:@command{config.guess}の結果に優先させたい場合は,
@option{--host}ではなく@option{--build}の方が好ましくなっています.将
来は,@option{--host}でビルドシステムタイプを優先しなくなるでしょう.
@code{--host}を指定する場合も,確実に@code{--build}も指定してください.

@sp 1

@c For backward compatibility, @command{configure} will accept a system
@c type as an option by itself.  Such an option will override the
@c defaults for build, host, and target system types.  The following
@c configure statement will configure a cross toolchain that will run on
@c Net@acronym{BSD}/alpha but generate code for @acronym{GNU} Hurd/sparc, which is
@c also the build platform.
@c 
下位互換性のため,@command{configure}はシステムタイプ自身をオプション
として受け入れます.そのようなオプションは,ビルド,ホスト,そしてター
ゲットのシステムタイプのデフォルトに優先されます.以下のコンフィグレー
ション命令では,Net@acronym{BSD}/alphaで実行するのですが,ビルドプラッ
トフォームにもなる@acronym{GNU} Hurd/sparcのコードを生成する一連のクロ
スツールがコンフィグレーションされます.

@example
./configure --host=alpha-netbsd sparc-gnu
@end example

@sp 1

@c In Autoconf 2.13 and before, the variables @code{build}, @code{host},
@c and @code{target} had a different semantics before and after the
@c invocation of @code{AC_CANONICAL_BUILD} etc.  Now, the argument of
@c @option{--build} is strictly copied into @code{build_alias}, and is left
@c empty otherwise.  After the @code{AC_CANONICAL_BUILD}, @code{build} is
@c set to the canonicalized build type.  To ease the transition, before,
@c its contents is the same as that of @code{build_alias}.  Do @emph{not}
@c rely on this broken feature.
@c 
Autoconf 2.13とそれ以前では,変数@code{build},@code{host},そして
@code{target}は,@code{AC_CANONICAL_BUILD}の呼び出しの前後で異なる意味
を持っていました.現在は,@option{--build}の引数を指定することで,それ
は厳密な意味で@code{build_alias}にコピーされ,それ以外では空のままにな
ります.@code{AC_CANONICAL_BUILD}の後で,@code{build}は標準的なビルド
タイプに設定されます.変換を容易にするため,以前の内容は,
@code{build_alias}と同じです.この壊れた機能に依存@emph{しないように}
してください.

@c For consistency with the backward compatibility scheme exposed above,
@c when @option{--host} is specified but @option{--build} isn't, the build
@c system will be assumed to be the same as @option{--host}, and
@c @samp{build_alias} will be set to that value.  Eventually, this
@c historically incorrect behavior will go away.
@c 
下位互換性を考慮した手法は上のようになり,@option{--host}が指定されて
いて,@option{--build}指定されていないときは,ビルドシステムは
@option{--host}と同じだと仮定され,@samp{build_alias}がその値として設
定されます.最終的には,この歴史的に間違っている動作はなくなるでしょう.

@sp 1

@c The former scheme to enable cross-compilation proved to cause more harm
@c than good, in particular, it used to be triggered too easily, leaving
@c regular end users puzzled in front of cryptic error messages.
@c @command{configure} could even enter cross-compilation mode only
@c because the compiler was not functional.  This is mainly because
@c @command{configure} used to try to detect cross-compilation, instead of
@c waiting for an explicit flag from the user.
@c 
クロスコンパイルを利用可能にするための前者の方法はあまり良くなく,特に,
それが安易に使用されると,通常のエンドユーザが不可解なエラーメッセージ
を前にして困ってしまいます.コンパイラが汎用的でないときだけのために,
@command{configure}はクロスコンパイルモードに入ることが可能です.これ
は主に,ユーザからの明示的なフラグを待つ代わりに,@command{configure}
をクロスコンパイルの検出を試みるために使用されるためです.

@c Now, @command{configure} enters cross-compilation mode if and only if
@c @option{--host} is passed.
@c 
現在は,@option{--host}が渡されている場合,そしてその状況でだけ,
@command{configure}はクロスコンパイルモードに入ります.

@c That's the short documentation.  To ease the transition between 2.13 and
@c its successors, a more complicated scheme is implemented.  @emph{Do not
@c rely on the following}, as it will be removed in the near future.
@c 
以下は,短いドキュメントです.2.13とその後のものの間で簡単に変換するた
め,より複雑な手法が実行されています.以下は将来削除されるので,
@emph{以下の内容に依存しないでください}.

@c If you specify @option{--host}, but not @option{--build}, when
@c @command{configure} performs the first compiler test it will try to run
@c an executable produced by the compiler.  If the execution fails, it will
@c enter cross-compilation mode.  This is fragile.  Moreover, by the time
@c the compiler test is performed, it may be too late to modify the
@c build-system type: other tests may have already been performed.
@c Therefore, whenever you specify @code{--host}, be sure to specify
@c @code{--build} too.
@c 
@option{--host}を指定していて@option{--build}を指定していない場合,
@command{configure}が最初のコンパイルテストを実行するときに,コンパイ
ラで実行形式が生成されることを実行することで調査してみます.実行が失敗
する場合,クロスコンパイルモードに入ります.これは壊れやすいものです.
さらに,コンパイラテストを実行する頃には,ビルドシステムのタイプを修正
するには遅過ぎるかもしれません.そのため,@code{--host}を指定するとき
には,確実に@code{--build}も指定してください.

@example
./configure --build=i686-pc-linux-gnu --host=m68k-coff
@end example

@noindent
@c will enter cross-compilation mode.  The former interface, which
@c consisted in setting the compiler to a cross-compiler without informing
@c @command{configure} is obsolete.  For instance, @command{configure} will
@c fail if it can't run the code generated by the specified compiler if you
@c configure as follows:
@c 
これでクロスコンパイルモードに入ります.コンパイラに
@command{configure} の情報を渡すことなくクロスコンパイルする設定から成
り立っている前者のインターフェースは時代遅れです.例えば,以下のような
コンフィグレーションを行なっていて,指定されたコンパイラで生成されたコー
ドが実行できない場合,@command{configure}は失敗します.

@example
./configure CC=m68k-coff-gcc
@end example


@node AC_LIBOBJ vs LIBOBJS
@c @subsection @code{AC_LIBOBJ} vs.@: @code{LIBOBJS}
@subsection @code{AC_LIBOBJ}対@code{LIBOBJS}

@c Up to Autoconf 2.13, the replacement of functions was triggered via the
@c variable @code{LIBOBJS}.  Since Autoconf 2.50, the macro
@c @code{AC_LIBOBJ} should be used instead (@pxref{Generic Functions}).
@c Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
@c 
Autoconf 2.13までは,関数の置換は変数@code{LIBOBJS}で開始されていまし
た.Autoconf 2.50からは,マクロ@code{AC_LIBOBJ}を代わりに使用すべきで
す(@pxref{Generic Functions}).Autoconf 2.53からは,@code{LIBOBJS}の使
用はエラーになります.

@c This change is mandated by the unification of the @acronym{GNU} Build System
@c components.  In particular, the various fragile techniques used to parse
@c a @file{configure.ac} are all replaced with the use of traces.  As a
@c consequence, any action must be traceable, which obsoletes critical
@c variable assignments.  Fortunately, @code{LIBOBJS} was the only problem,
@c and it can even be handled gracefully (read, ``without your having to
@c change something'').
@c 
この変更は,@acronym{GNU}ビルドシステムの構成要素から要求されました.
特に,@file{configure.ac}のパースで使用される様々な壊れやすいテクニッ
クは,すべてトレースを使用することで置換されます.結果として,すべての
動作をトレース可能にする必要があり,それでクリティカルな変数の代入は時
代遅れになります.幸運にも@code{LIBOBJS}だけが問題となっていて,それは
美しく処理することが可能です(``何も変更する必要はない''ということです).

@c There were two typical uses of @code{LIBOBJS}: asking for a replacement
@c function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
@c 
典型的な@code{LIBOBJS}の使用方法は二つありました.関数の置換を依頼する
ことと,Automakeそして/またはLibtoolに対する@code{LIBOBJS}を調整するこ
とです.

@sp 1

@c As for function replacement, the fix is immediate: use
@c @code{AC_LIBOBJ}.  For instance:
@c 
関数の置換に対しては,修正はすぐにできます.@code{AC_LIBOBJ}を使用して
ください.例えば,以下を考えます.

@example
LIBOBJS="$LIBOBJS fnmatch.o"
LIBOBJS="$LIBOBJS malloc.$ac_objext"
@end example

@noindent
@c should be replaced with:
@c 
以下で置換すべきです.

@example
AC_LIBOBJ([fnmatch])
AC_LIBOBJ([malloc])
@end example

@sp 1

@ovindex U
@cindex @code{$U}
@c When asked for automatic de-ANSI-fication, Automake needs
@c @code{LIBOBJS}'ed filenames to have @samp{$U} appended to the base
@c names.  Libtool requires the definition of @code{LTLIBOBJS}, whose
@c suffixes are mapped to @samp{.lo}.  People used to run snippets such as:
@c 
自動的なde-ANSI-ficationが依頼されたとき,Automakeは,@samp{$U}をベー
スファイル名に追加するために@code{LIBOBJS}されたファイル名が必要です.
Libtoolは,接尾子が@samp{.lo}になっている@code{LTLIBOBJS}の定義が必要
です.人々は,以下のような断片を実行していました.

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

@noindent
@c Note that this code is @emph{wrong}, because @samp{.o} is not the only
@c possible extension@footnote{
@c @c
@c Yet another reason why assigning @code{LIBOBJS} directly is discouraged.
@c @c
@c }!  It should have read:

@samp{.o}が拡張子ではない可能性があるので,このコードが@emph{間違ってい
る}ことに注意してください@footnote{
@c
もう一つの理由として,@code{LIBOBJS}を直接代入するのは反対です.
@c
}! 以下のように読み換えてください.

@example
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIB@@&t@@OBJS=`echo "$LIB@@&t@@OBJS" |
             sed 's,\.[[^.]]* ,$U&,g;s,\.[[^.]]*$,$U&,'`
LTLIBOBJS=`echo "$LIB@@&t@@OBJS" |
           sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
AC_SUBST(LTLIBOBJS)
@end example

@sp 1

@c You no longer have to use this: @code{AC_OUTPUT} normalizes
@c @code{LIBOBJS} and @code{LTLIBOBJS} (hence it works with any version of
@c Automake and Libtool).  Just remove these lines (@command{autoupdate}
@c cannot handle this task, since this is not a macro).
@c 
もやはこれを使用する必要がありません.@code{AC_OUTPUT}は@code{LIBOBJS}
と@code{LTLIBOBJS}を正規化します(そのため,あらゆるバージョンの
AutomakeとLibtoolで動作します).この行を削除してください(これはマクロ
ではないので,@command{autoupdate}でこの作業を行なうことは不可能です).

@c Note that @code{U} must not be used in your Makefiles.
@c 
@code{U}を@file{Makefile}で使用する必要はありません.



@node AC_FOO_IFELSE vs AC_TRY_FOO
@c @subsection @code{AC_FOO_IFELSE} vs.@: @code{AC_TRY_FOO}
@subsection @code{AC_FOO_IFELSE}対@code{AC_TRY_FOO}

@c Since Autoconf 2.50, internal codes uses @code{AC_PREPROC_IFELSE},
@c @code{AC_COMPILE_IFELSE}, @code{AC_LINK_IFELSE}, and
@c @code{AC_RUN_IFELSE} on the other one hand and @code{AC_LANG_SOURCES},
@c and @code{AC_LANG_PROGRAM} on the other hand instead of the deprecated
@c @code{AC_TRY_CPP}, @code{AC_TRY_COMPILE}, @code{AC_TRY_LINK}, and
@c @code{AC_TRY_RUN}.  The motivations where:
@c 
Autoconf 2.50以来,内部コードでは,一方では@code{AC_PREPROC_IFELSE},
@code{AC_COMPILE_IFELSE},@code{AC_LINK_IFELSE},そして
@code{AC_RUN_IFELSE}を使用し,もう一方では反対されている
@code{AC_TRY_CPP},@code{AC_TRY_COMPILE},@code{AC_TRY_LINK},そして
@code{AC_TRY_RUN}の代わりに@code{AC_LANG_SOURCES}と
@code{AC_LANG_PROGRAM}を使用しています.その動機は以下にあります.

@itemize @minus
@item
@c a more consistent interface: @code{AC_TRY_COMPILE} etc.@: were double
@c quoting their arguments;
@c 
より矛盾のないインターフェース.@code{AC_TRY_COMPILE}などは,その引数
を二重の引用符で囲みます.

@item
@c the combinatoric explosion is solved by decomposing on the one hand the
@c generation of sources, and on the other hand executing the program;
@c 
一方ではソースを生成し,もう一方ではプログラムを実行するように,組合せ
が増加しても分解することで解決します.

@item
@c this scheme helps supporting more languages than plain C and C++.
@c 
この手法はプレーンのCとC++より多くの言語をサポートする助けとなります.
@end itemize

@c In addition to the change of syntax, the philosphy has changed too:
@c while emphasis was put on speed at the expense of accuracy, today's
@c Autoconf promotes accuracy of the testing framework at, ahem..., the
@c expense of speed.
@c 
構文の変更だけでなく,哲学的な変更もなされました.正確さの代償として速
度を用いたことを強調しておきますが,今日のAutoconfは,テスティングフレー
ムワークの正確さを進展させていて,う〜ん@dots{}速度の代償になっていま
す.

@c As a perfect example of what is @emph{not} to be done, here is how to
@c find out whether a header file contains a particular declaration, such
@c as a typedef, a structure, a structure member, or a function.  Use
@c @code{AC_EGREP_HEADER} instead of running @code{grep} directly on the
@c header file; on some systems the symbol might be defined in another
@c header file that the file you are checking @samp{#include}s.
@c 
なされては@emph{いない}完全な例として,ヘッダファイルが,型,構造体,
構造体のメンバー,または関数といった特定の宣言を含んでいるかどうかを調
べる方法が以下にあります.ヘッダファイルで直接@code{grep}を実行する代
わりに,@code{AC_EGREP_HEADER}を使用してください.調査している
@samp{#include} 以外のヘッダファイルでシンボルを定義しているシステムも
あるでしょう.

@c As a (bad) example, here is how you should not check for C preprocessor
@c symbols, either defined by header files or predefined by the C
@c preprocessor: using @code{AC_EGREP_CPP}:
@c 
(悪い)例として,シンボルが,ヘッダファイルで定義されているか,またはC 
プリプロセッサで定義されているかを,Cプリプロセッサを調査すべきではな
い理由がは以下にあります.

@example
@group
AC_EGREP_CPP(yes,
[#ifdef _AIX
  yes
#endif
], is_aix=yes, is_aix=no)
@end group
@end example

@c The above example, properly written would (i) use
@c @code{AC_LANG_PROGRAM}, and (ii) run the compiler:
@c 
上記の例では,適切に書かれている(i)@code{AC_LANG_PROGRAM}を使用し,
(ii)コンパイラを実行すべきです.

@example
@group
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#if !defined _AIX
# error _AIX not defined
#endif
]])],
                   [is_aix=yes],
                   [is_aix=no])
@end group
@end example


@c ============================= Generating Test Suites with Autotest

@node Using Autotest
@c @chapter Generating Test Suites with Autotest
@chapter Autotestで一般的なテストスイートを生成する

@cindex Autotest

@display
@c @strong{Note: This section describes an experimental feature which will
@c be part of Autoconf in a forthcoming release.  Although we believe
@c Autotest is stabilizing, this documentation describes an interface which
@c might change in the future: do not depend upon Autotest without
@c subscribing to the Autoconf mailing lists.}
@c 
@strong{注意:このセクションでは,この次のリリースのAutoconfの一部となっ
ている,実験的な機能を記述しています.我々はAutotestが安定していること
を信じていますが,このドキュメントでは将来変更される可能性があるインター
フェースを記述しています.Autoconfのメーリングリストを購読しないまま
Autotestに依存することはやめてください.}
@end display

@c It is paradoxical that portable projects depend on nonportable tools
@c to run their test suite.  Autoconf by itself is the paragon of this
@c problem: although it aims at perfectly portability, up to 2.13, its
@c test suite was using Deja@acronym{GNU}, a rich and complex testing
@c framework, but which is far from being standard on Unix systems.
@c Worse yet, it was likely to be missing on the most fragile platforms,
@c the very platforms that are most likely to torture Autoconf and
@c exhibit deficiencies.
@c 
移植性の高いプロジェクトで,テストスイートを実行するために移植性のない
ツールに依存していることは,矛盾しています.Autoconf自身がこの問題の典
型です.2.13までは完全な移植性を目的としていましたが,そのテストスイー
トはDeja@acronym{GNU}を使用していて,それは高品質で複雑なテストフレー
ムワークですが,Unixシステムの標準からかけ離れていました.悪いことに,
ほとんどの壊れやすいプラットフォームが無いことがよくあり,そのプラット
フォームがAutoconfを苦しめ,欠陥を提示していることがほとんどでした.

@c To circumvent this problem many package maintainers have developed their
@c own testing framework, based on simple shell scripts whose sole output
@c are their exit status: the test succeeded, or failed.  In addition, most
@c of these tests share some common patterns, what results in lots of
@c duplicated code, tedious maintenance etc.
@c 
この問題を回避するために,パッケージ管理者の多くは,その出力が終了ステー
タスとなる,つまりテストが成功するまたは失敗するといった,単純なシェル
スクリプトをベースに,独自のテストフレームワークを開発してきました.さ
らに,これらのテストのほとんどは,共通のパターン,重複している大量のコー
ドの結果,退屈な管理などを共有しています.

@c Following exactly the same reasoning that yielded to the inception of
@c Autoconf, Autotest provides a test suite generation frame work, based on
@c M4 macros, building a portable shell script.  The suite itself is
@c equipped with automatic logging and tracing facilities which greatly
@c diminish the interaction with bug reporters, and simple timing reports.
@c 
以下はAutoconfが生まれた理由と全く同じですが,Autotestは,M4マクロを基
本として移植性の高いシェルスクリプトを構築するテストスイートを生成する
フレームワークを提供しています.スイート自身は,バグの報告で中断するこ
とを限りなく少なくし,自動的なログ生成と追跡機能を備えていて,単純なタ
イミングでバグは報告されます.

@c Autoconf itself has been using Autotest for years, and we do attest that
@c it has considerably improved the strength of the test suite, and the
@c quality of bug reports.  Other projects are known to use some generation
@c of Autotest, such as Bison, Free Recode, Free Wdiff, @acronym{GNU} Tar, each of
@c them having different needs, what slowly polishes Autotest as a general
@c testing framework.
@c 
Autoconf自身はAutotestを何年も使用していて,テストスイートとバグの報告
の強さをかなり改善している@dfn{attest}を実行しています.Autotestの生成
物を使用していることが知られている,Bison,Free Recode,Free Wdiff,
@acronym{GNU} Tar といったそれ以外のプロジェクトでは,それぞれ異なるニー
ズがあり,一般的なテストフレームワークとしてのAutotestにのんびりと磨き
をかけていました.

@c Nonetheless, compared to Deja@acronym{GNU}, Autotest is inadequate for
@c interactive tool testing, which is probably its main limitation.
@c 
それにもかかわらず,Deja@acronym{GNU}と比較して,Autotestは対話的なテ
ストツールとしては不十分で,それがおそらく主な制限事項となっています.

@menu
* Using an Autotest Test Suite::  Autotest and the user
* Writing testsuite.at::        Autotest macros
* testsuite Invocation::        Running @command{testsuite} scripts
* Making testsuite Scripts::    Using autom4te to create @command{testsuite}
@end menu

@node Using an Autotest Test Suite
@c @section Using an Autotest Test Suite
@section Autotestテストスイートを使用する

@menu
* testsuite Scripts::           The concepts of Autotest
* Autotest Logs::               Their contents
@end menu

@node testsuite Scripts
@c @subsection @command{testsuite} Scripts
@subsection @command{testsuite}スクリプト

@cindex @command{testsuite}

@c Generating testing or validation suites using Autotest is rather easy.
@c The whole validation suite is held in a file to be processed through
@c @command{autom4te}, itself using @acronym{GNU} M4 under the scene, to
@c produce a stand-alone Bourne shell script which then gets distributed.
@c Neither @command{autom4te} nor @acronym{GNU} M4 are not needed anymore at
@c the installer end.
@c 
Autotestを使用してテストスイートや評価スイートを生成することは簡単です.
評価スイート全体は,@command{autom4te}で処理されるファイルに保持されて
いて,それ自身は配布物から得られるスタンドアローンのBourneシェルスクリ
プトを生成するために,@acronym{GNU} M4の環境下で使用されます.
@command{autom4te}も@acronym{GNU} M4もインストールしているエンドユーザ
は不要です.

@cindex test group
@c Each test of the validation suite should be part of some test group.  A
@c @dfn{test group} is a sequence of interwoven tests that ought to be
@c executed together, usually because one test in the group creates data
@c files than a later test in the same group needs to read.  Complex test
@c groups make later debugging more tedious.  It is much better keeping
@c keep only a few tests per test group, and if you can put only one test
@c per test group, this is just ideal.
@c 
評価スイートのそれぞれのテストは,テストグループの一部にすべきです.
@dfn{テストグループ(test group)}は,通常はグループのテストの一つがデー
タファイルを作成し,それ以降のテストで同じグループのテストがそれを読み
込むために,お互いに実行される必要がある混合テストの,連続した手続きに
なっています.テストグループごとの数個のテストのみを維持する方がより良
く,テストグループごとに一つのテストのみを維持することが可能な場合,そ
れは理想的です.

@c For all but the simplest packages, some file such as @file{testsuite.at}
@c does not fully hold all test sources, as these are often easier to
@c maintain in separate files.  Each of these separate files holds a single
@c test group, or a sequence of test groups all addressing some common
@c functionality in the package.  In such cases, file @file{testsuite.at}
@c only initializes the whole validation suite, and sometimes do elementary
@c health checking, before listing include statements for all other test
@c files.  The special file @file{package.m4}, containing the
@c identification of the package, is automatically included if found.
@c 
最も単純なパッケージ以外のすべてのものに対して,@file{testsuite.at}の
ようなファイルは,別々のファイルにした方が管理しやすいことも多いので,
すべてのテストのソースを完全に保持しているわけではありません.これらの
個別のファイルのそれぞれは,単一のテストグループや,パッケージの共通の
機能をすべて提示しているテストグループの連続したものを維持しています.
そのような場合は,ファイル@file{testsuite.at}は評価スイート全体の初期
化のみを行ない,他のすべてのテストファイルに対して含める文をリストアッ
プする前に,要素が健全かどうかを調査するときもあります.特殊なファイル
@file{package.m4}はパッケージの識別子を含んでいて,見つかった場合は自
動的にインクルードされます.

@c The validation scripts that Autotest produces are by convention called
@c @command{testsuite}.  When run, @command{testsuite} executes each test
@c group in turn, producing only one summary line per test to say if that
@c particular test succeeded or failed.  At end of all tests, summarizing
@c counters get printed.  If any test failed, one debugging script gets
@c automatically generated for each test group which failed.  These
@c debugging scripts are named @file{testsuite.@var{nn}}, where @var{nn} is
@c the sequence number of the test group.  In the ideal situation, none of
@c the tests fail, and consequently, no debugging script is generated out
@c of validation.
@c 
Autotestが生成する評価スクリプトは,慣習で@command{testsuite}から呼び
出されます.実行時には,@command{testsuite}はそれぞれのテストグループ
を順番に実行し,テストごとにその特定のテストが成功したか失敗したかを告
げる概要を表示する一行を生成します.すべてのテストの終りに,数を集約し
て出力します.テストが失敗した場合,失敗したそれぞれのテストグループに
対してデバッグスクリプトが自動的に生成されます.これらのデバッグスクリ
プトは@file{testsuite.@var{nn}}と命名され,@var{nn}はテストグループの
順番を示す数です.理想的な状況では,テストは失敗しませんし,従ってデバッ
グスクリプトは評価からは生成されません.

@c The automatic generation of debugging scripts for failed test has the
@c purpose of easing the chase for bugs.
@c 
失敗したテストに対する自動的に生成されるデバッグスクリプトには,バグを
簡単に追跡するという目的があります.

@c It often happens in practice that individual tests in the validation
@c suite need to get information coming out of the configuration process.
@c Some of this information, common for all validation suites, is provided
@c through the file @file{atconfig}, automatically created by
@c @code{AC_CONFIG_TESTDIR}.  For configuration informations which your
@c testing environment specifically needs, you might prepare an optional
@c file named @file{atlocal.in}, instantiated by @code{AC_CONFIG_FILES}.
@c The configuration process produces @file{atconfig} and @file{atlocal}
@c out of these two input files, and these two produced files are
@c automatically read by the @file{testsuite} script.
@c 
評価スイートの個別のテストがコンフィグレーションスクリプトからの情報を
入手する必要が生じることも,実験段階ではよくあります.すべての評価スイー
トで共通なこの情報が,@code{AC_CONFIG_TESTDIR}で自動的に生成されるファ
イル@file{atconfig}で提供されることもあります.テスト環境で特別に必要
となるコンフィグレーションの情報に対し,@code{AC_CONFIG_FILES}で実際に
作成されるように,@file{atlocal.in}という名前の追加ファイルを準備して
もかまいません.コンフィグレーションのプロセスで,@file{atconfig}と
@file{atlocal} は二つの入力ファイルから作成され,これら二つの生成され
たファイルは,自動的に@file{testsuite}スクリプトで読み込まれます.

@c Here is a diagram showing the relationship between files.
@c 
ファイル間の関係を表示する図は以下のようになります.

@noindent
@c Files used in preparing a software package for distribution:
@c 
配布するソフトウェアパッケージの準備に使用されるファイルです.

@example
subfile-1.at ->.
    ...         \
subfile-i.at ---->-- testsuite.at -->.
    ...         /                     \
subfile-n.at ->'                       >-- autom4te* -->testsuite
                                      /
                      [package.m4] ->'
@end example

@noindent
@c Files used in configuring a software package:
@c 
ソフトウェアパッケージのコンフィグレーションで使用されるファイルです.

@example
                                     .--> atconfig
                                    /
[atlocal.in] -->  config.status* --<
                                    \
                                     `--> [atlocal]
@end example

@noindent
@c Files created during the test suite execution:
@c 
テストスイートを実行中に作成されるファイルです.

@example
atconfig -->.                    .--> testsuite.log
             \                  /
              >-- testsuite* --<
             /                  \
[atlocal] ->'                    `--> [testsuite.@var{nn}*]
@end example


@node Autotest Logs
@c @subsection Autotest Logs
@subsection Autotestのログ

@c When run, the test suite creates a log file named after itself, e.g., a
@c test suite named @command{testsuite} creates @file{testsuite.log}.  It
@c contains a lot of information, usually more than maintainers actually
@c need, but therefore most of the time it contains all that is needed:
@c 
実行時に,テストスイートはそれ自身の名前に@file{.log}が後置されている
ログファイルを作成し,例えば,@command{testsuite}という名前のテストス
イートは@file{testsuite.log}を作成します.それには多くの情報が含まれ,
通常は管理者が実際に必要とするもの以上ですが,そのためほとんどの場合で
必要とされるすべてのものが含まれます.

@table @asis
@item command line arguments
@item コマンドライン引数
@c akim s/to consist in/to consist of/
@c 
@c A very bad Unix habit which is unfortunately wide spread consists of
@c setting environment variables before the command, such as in
@c @samp{CC=my-home-grown-cc ./testsuite}.  This results in the test suite
@c not knowing this change, hence (i) it can't report it to you, and (ii)
@c it cannot preserve the value of @code{CC} for subsequent runs@footnote{
@c @c
@c When a failure occurs, the test suite is rerun, verbosely, and the user
@c is asked to ``play'' with this failure to provide better information.
@c It is important to keep the same environment between the first run, and
@c bug-tracking runs.
@c @c
@c }.  Autoconf faced exactly the same problem, and solved it by asking
@c users to pass the variable definitions as command line arguments.
@c Autotest requires this rule too, but has no means to enforce it; the log
@c then contains a trace of the variables the user changed.
@c 
残念なことに広く広がっているUnixの非常に悪い習慣は,
@samp{CC=my-home-grown-cc ./testsuite}のように,コマンドの前に環境変数
を設定することです.この結果テストスイートは変更を知ることが無く,その
ため,(i)それを報告することが不可能で,(ii)連続する実行に対し@code{CC}
の値を保存することができません@footnote{
@c
異常終了が生じたとき,テストスイートは再実行され,冗長になり,より良い
情報を提供するためにこの失敗で``play''するようユーザに依頼します.最初
の実行とバグの追跡での実行が同じ環境変数を維持していることが重要です.
@c
}.Autoconfは全く同じ問題に直面していて,コマンドライン変数での変数定
義を渡すようユーザに依頼することで解決しました.Autotestでもこの規則が
要求されますが,強制する意味はありません.ログにはユーザが変更した変数
の追跡が含まれています.

@c @item @file{ChangeLog} excerpts
@item @file{ChangeLog}の抜粋
@c The topmost lines of all the @file{ChangeLog}s found in the source
@c hierarchy.  This is especially useful when bugs are reported against
@c development versions of the package, since the version string does not
@c provide sufficient information to know the exact state of the sources
@c the user compiled.  Of course this relies on the use of a
@c @file{ChangeLog}.
@c 
ソースの階層で見つかるすべての@file{ChangeLog}の先頭の行です.バグがパッ
ケージの開発バージョンで報告されるとき,バージョン文字列はユーザがコン
パイルしたソースの正確な状態を知るための情報としては十分ではないので,
これは特に役に立ちます.もちろんこれは@file{ChangeLog}の使用方法に依存
します.

@c @item build machine
@item ビルドマシン
@c Running a test suite in a cross-compile environment is not an easy task,
@c since it would mean having the test suite run on a machine @var{build},
@c while running programs on a machine @var{host}.  It is much simpler to
@c run both the test suite and the programs on @var{host}, but then, from
@c the point of view of the test suite, there remains a single environment,
@c @var{host} = @var{build}.  The log contains relevant information on the
@c state of the build machine, including some important environment
@c variables.
@c 
クロスコンパイル環境でテストスイートを実行するということは,テストスイー
トはマシン@var{build}で実行されますがプログラムはマシン@var{host}で実
行されるという意味があり,簡単な作業ではありません.テストスイートとプ
ログラムの両方を@var{host}で実行するのはより簡単ですが,テストスイート
の観点からすると,単一の環境変数@var{host} = @var{build}は残ります.ロ
グにはビルドマシンに関連する情報が含まれていて,それには重要な環境変数
も含まれています.
@c FIXME: How about having an M4sh macro to say `hey, log the value
@c of `@dots{}'?  This would help both Autoconf and Autotest.

@c @item tested programs
@item テストされたプログラム
@c The absolute path and answers to @option{--version} of the tested
@c programs (see @ref{Writing testsuite.at}, @code{AT_TESTED}).
@c 
テストされたプログラムの絶対バスと@option{--version}の答えです
(@ref{Writing testsuite.at},@code{AT_TESTED}を参照してください).

@c @item configuration log
@item コンフィグレーションのログ
@c The contents of @file{config.log}, as created by @command{configure},
@c are appended.  It contains the configuration flags and a detailed report
@c on the configuration itself.
@c 
@command{configure}で生成される@file{config.log}の内容が後置されます.
それにはコンフィグレーションフラグとコンフィグレーション自身の詳細な報
告が含まれます.
@end table


@node Writing testsuite.at
@c @section Writing @file{testsuite.at}
@section @file{testsuite.at}を書く

@c The @file{testsuite.at} is a Bourne shell script making use of special
@c Autotest M4 macros.  It often contains a call to @code{AT_INIT} nears
@c its beginning followed by one call to @code{m4_include} per source file
@c for tests.  Each such included file, or the remainder of
@c @file{testsuite.at} if include files are not used, contain a sequence of
@c test groups.  Each test group begins with one call to @code{AT_SETUP},
@c it contains an arbitrary number of shell commands or calls to
@c @code{AT_CHECK}, and it completes with one call to @code{AT_CLEANUP}.
@c 
@file{testsuite.at}はBourneシェルスクリプトで,特殊なAutotest M4マクロ
を使用して作成します.それは,最初の方で@code{AT_INIT}の呼び出しを含ん
でいて,それにテストのためのソースファイルごとに@code{m4_include}の呼
び出しが続きます.それぞれのインクルードファイルや,インクルードファイ
ルが使用されていない場合は@file{testsuite.at}の残りは,テストグループ
の連続した手続きが含まれています.それぞれのテストグループは
@code{AT_SETUP}の呼び出しで始まり,それは任意の数のシェルコマンドや
@code{AT_CHECK}の呼び出しが含まれていて,@code{AT_CLEANUP}の呼び出しで
完結します.

@defmac AT_INIT (@ovar{name})
@atindex INIT
@c FIXME: Not clear, plus duplication of the information.
@c 
@c Initialize Autotest.  Giving a @var{name} to the test suite is
@c encouraged if your package includes several test suites.  In any case,
@c the test suite always displays the package name and version.  It also
@c inherits the package bug report address.
@c 
Autotestを初期化します.パッケージに複数のテストスイートを含める場合,
テストスイートに@var{name}を与えることが推奨されます.すべての状況で,
テストスイートは常にパッケージ名とバージョンを表示します.それはパッケー
ジのバグを報告する(メール)アドレスも継承します.
@end defmac

@defmac AT_TESTED (@var{executables})
@atindex TESTED
@c Log the path and answer to @option{--version} of each program in
@c space-separated list @var{executables}.  Several invocations register
@c new executables, in other words, don't fear registering one program
@c several times.
@c 
それぞれのプログラムのパスと@option{--version}の答を,スペースで分離さ
れているリスト@var{executables}にログをとります.複数回呼び出されると
新しい実行が登録され,言い替えると,一つのプログラムの複数回の登録を危
惧する必要はありません.
@end defmac

@c Autotest test suites rely on the @code{PATH} to find the tested program.
@c This saves from generating the absolute paths to the various tools, and
@c makes it possible to test installed programs.  Therefore, knowing what
@c programs are being exercised is crucial to understand some problems in
@c the test suite itself, or its occasional misuses.  It is a good idea to
@c also subscribe foreign programs you depend upon, to ease incompatibility
@c diagnostics.
@c 
Autotestテストスイートは,テストされるプログラムを見つける際に
@code{PATH}に依存します.これは様々なツールの絶対パスから生成されるも
のから保存され,インストールされているプログラムのテストを可能にします.
そのため,動作しているプログラムを知ることは,テストスイート自身やその
偶発的な誤使用の問題を理解するために重要です.互換性の問題を簡単に診断
するために,依存している外部のプログラムを登録することも重要です.

@sp 1

@defmac AT_SETUP (@var{test-group-name})
@atindex SETUP
@c This macro starts a group of related tests, all to be executed in the
@c same subshell.  It accepts a single argument, which holds a few words
@c (no more than about 30 or 40 characters) quickly describing the purpose
@c of the test group being started.
@c 
このマクロは関連するテストのグループがすべて同じサブシェルで実行される
ように開始します.それは,開始されるテストグループの目的を手短に記述し
た数語の単語(30から40文字以下)を保持している,単一の引数を受け入れます.
@end defmac

@defmac AT_KEYWORDS (@var{keywords})
@atindex KEYWORDS
@c Associate the space-separated list of @var{keywords} to the enclosing
@c test group.  This makes it possible to run ``slices'' of the test suite.
@c For instance if some of your test groups exercise some @samp{foo}
@c feature, then using @samp{AT_KEYWORDS(foo)} lets you run
@c @samp{./testsuite -k foo} to run exclusively these test groups.  The
@c @var{title} of the test group is automatically recorded to
@c @code{AT_KEYWORDS}.
@c 
まとまっているテストグループに関連する,スペースで分離されている
@var{keywords}のリストです.これでテストスイートの``slices''を実行する
ことが可能になります.例えばテストグループの@samp{foo}の機能を行使して
いる場合,@samp{AT_KEYWORDS(foo)}を使用することで,これらのテストグルー
プを排他的に実行するために@samp{./testsuite -k foo}を実行します.テス
トグループの@var{title}は,@code{AT_KEYWORDS}に自動的に保存されます.

@c Several invocations within a test group accumulate new keywords.  In
@c other words, don't fear registering several times the same keyword in a
@c test group.
@c 
テストグループ内で複数回呼び出すことで新しいキーワードを累積します.言
い替えると,テストグループで同じキーワードを複数回登録することを危惧す
る必要はありません.
@end defmac

@defmac AT_CLEANUP
@atindex CLEANUP
@c End the current test group.
@c 
現在のテストグループを終了します.
@end defmac

@sp 1

@defmac AT_DATA (@var{file}, @var{contents})
@atindex DATA
@c Initialize an input data @var{file} with given @var{contents}.  Of
@c course, the @var{contents} have to be properly quoted between square
@c brackets to protect against included commas or spurious M4
@c expansion.  The contents ought to end with an end of line.
@c 
入力データの@var{file}を,与えられた@var{contents}で初期化します.もち
ろん,カンマが含まれていることや,見せかけのM4の展開から保護するために,
@var{contents}は適切に角カッコで囲む必要があります.内容は行末(EOF)で
終える必要があります.
@end defmac

@defmac AT_CHECK (@var{commands}, @dvar{status, @samp{0}}, @ovar{stdout}, @ovar{stderr})
@atindex CHECK
@c Execute a test by performing given shell @var{commands}.  These commands
@c should normally exit with @var{status}, while producing expected
@c @var{stdout} and @var{stderr} contents.  If @var{commands} exit with
@c status 77, then the whole test group is skipped.
@c 
与えられたシェルコマンド@var{commands}を実行することでテストを実行しま
す.これらのコマンドは,期待される@var{stdout}と@var{stderr}の内容を生
成しながら,通常の@var{status}で終えるべきです.@var{commands}が77のス
テータスで終了する場合,テストグループ全体が省略されます.

@c The @var{commands} @emph{must not} redirect the standard output, nor the
@c standard error.
@c 
@var{commands}を標準出力にも標準エラー出力にもリダイレクトしては
@emph{いけません}.

@c If @var{status}, or @var{stdout}, or @var{stderr} is @samp{ignore}, then
@c the corresponding value is not checked.
@c 
@var{status},または@var{stdout},または@var{stderr}が@samp{ignore}の
場合,対応する値は調査されません.

@c The special value @samp{expout} for @var{stdout} means the expected
@c output of the @var{commands} is the content of the file @file{expout}.
@c If @var{stdout} is @samp{stdout}, then the standard output of the
@c @var{commands} is available for further tests in the file @file{stdout}.
@c Similarly for @var{stderr} with @samp{expout} and @samp{stderr}.
@c 
@var{stdout}に対する特殊な値@samp{expout}は,@var{commands}の出力がファ
イル@file{expout}の内容であることを期待するという意味があります.
@var{stdout}が@samp{stdout}の場合,@var{commands}の標準出力はファイル
@file{stdout}のテスト以外でも利用可能です.@samp{expout}と
@samp{stderr} を用いている@var{stderr}も同様です.
@end defmac


@node testsuite Invocation
@c @section Running @command{testsuite} Scripts
@section @command{testsuite}スクリプトの実行
@cindex @command{testsuite}

@c Autotest test suites support the following arguments:
@c 
Autotestテストスイートは以下の引数をサポートしています.

@table @samp
@item --help
@itemx -h
@c Display the list of options and exit successfully.
@c 
オプションのリストを表示し,正しく終了します.

@item --version
@itemx -V
@c Display the version of the test suite and exit successfully.
@c 
テストスイートのバージョンを表示し,正しく終了します.

@item --clean
@itemx -c
@c Remove all the files the test suite might have created and exit.  Meant
@c for @code{clean} Makefile targets.
@c 
テストスイートが生成したすべてのファイルを削除し終了します.Makefileター
ゲットの@code{clean}を意味します.

@item --list
@itemx -l
@c List all the tests (or only the selection), including their possible
@c keywords.
@c 
すべてのテスト(またはセクションのみ)を,可能なキーワードを含めてリスト
アップします.
@end table

@sp 1

@c By default all the tests are performed (or described with
@c @option{--list}) in the default environment first silently, then
@c verbosely, but the environment, set of tests, and verbosity level can be
@c tuned:
@c 
デフォルトで,すべてのテストはデフォルトの環境変数で,最初は静かに,そ
の後で冗長に実行され(または@option{--list}で記述され)ますが,テストの
組の環境変数と冗長さの度合は調整可能です.

@table @samp
@item @var{variable}=@var{value}
@c Set the environment @var{variable} to @var{value}.  Do not run
@c @samp{FOO=foo ./testsuite} as debugging scripts would then run in a
@c different environment.
@c 
環境変数@var{variable}を@var{value}に設定します.デバッグスクリプトと
して@samp{FOO=foo ./testsuite}を実行して,その後で異なる環境変数で実行
しないでください.

@cindex @code{AUTOTEST_PATH}
@c The variable @code{AUTOTEST_PATH} specifies the testing path to prepend
@c to @code{PATH}.  It handles specially relative paths (not starting with
@c @samp{/}): they are considered to be relative to the top level of the
@c package being built.  All the directories are made absolute, first
@c starting from the top level @emph{build} tree, then from the
@c @emph{source} tree.  For instance @samp{./testsuite
@c AUTOTEST_PATH=tests:bin} for a @file{/src/foo-1.0} source package built
@c in @file{/tmp/foo} results in @samp{/tmp/foo/tests:/tmp/foo/bin} and
@c then @samp{/src/foo-1.0/tests:/src/foo-1.0/bin} being prepended to
@c @code{PATH}.
@c 
変数@code{AUTOTEST_PATH}は@code{PATH}に前置するためにテストするパスを
指定します.それは特別に相対パス(@samp{/}で始まらない)を処理します.そ
れらは,ビルドしているパッケージのトップレベルから相対的なものと考えら
れます.すべてのディレクトリは絶対的になり,最初は@emph{ビルド}ツリー
のトップレベルで開始され,その後で@emph{ソース}ツリーで開始されます.
例えば,@file{/tmp/foo}でビルドされている@file{/src/foo-1.0}のソースパッ
ケージの@samp{./testsuite AUTOTEST_PATH=tests:bin}は,結果として
@samp{/tmp/foo/tests:/tmp/foo/bin}になり,そして
@samp{/src/foo-1.0/tests:/src/foo-1.0/bin}が@code{PATH}に追加されます.

@item @var{number}
@itemx @var{number}-@var{number}
@itemx @var{number}-
@itemx -@var{number}
@c Add the corresponding test groups, with obvious semantics, to the
@c selection.
@c 
明確な意味を持ち一致するテストグループを選択肢に追加します.

@item --keywords=@var{keywords}
@itemx -k @var{keywords}
@c Add to the selection the test groups which title or keywords (arguments
@c to @code{AT_SETUP} or @code{AT_KEYWORDS}) match @emph{all} the keywords
@c of the comma separated list @var{keywords}.
@c 
(@code{AT_SETUP}や@code{AT_KEYWORDS}への引数となる)タイトルやキーワー
ドが@emph{すべての}カンマで分けられたリスト@var{keywords}のキーワード
にマッチするテストグループの選択に追加します.

@c Running @samp{./testsuite -k autoupdate,FUNC} will select all the tests
@c tagged with @samp{autoupdate} @emph{and} @samp{FUNC} (as in
@c @samp{AC_CHECK_FUNC}, @samp{AC_FUNC_FNMATCH} etc.) while
@c @samp{./testsuite -k autoupdate -k FUNC} runs all the tests tagged with
@c @samp{autoupdate} @emph{or} @samp{FUNC}.
@c 
@samp{./testsuite -k autoupdate,FUNC}を実行すると,
(@samp{AC_CHECK_FUNC}や@samp{AC_FUNC_FNMATCH}などで)
@samp{autoupdate}@emph{および} @samp{FUNC}でタグ付けされているすべての
テストを選択しますが,@samp{./testsuite -k autoupdate -k FUNC}は
@samp{autoupdate}@emph{あるいは}@samp{FUNC}でタグ付けされているすべて
のテストを選択します.

@item --errexit
@itemx -e
@c If any test fails, immediately abort testing.  It implies
@c @option{--debug}: post test group clean up, debugging script generation,
@c and logging are inhibited.  This option is meant for the full test
@c suite, it is not really useful for generated debugging scripts.
@c 
テストが失敗した場合,すぐにテストを中断します.それは@option{--debug}
を暗黙に指定します.過去のテストグループをクリーンアップし,デバッグス
クリプトを生成し,ログは停止されます.このオプションは,すべてのテスト
スイートに対して意味があり,それは生成されるデバッグスクリプトに対して
は実際には意味がありません.

@item --verbose
@itemx -v
@c Force more verbosity in the detailed output of what is being done.  This
@c is the default for debugging scripts.
@c 
行なっているものの詳細な出力でより冗長なものにします.これはデバッグス
クリプトに対してデフォルトです.

@item --debug
@itemx -d
@c Do not remove the files after a test group was performed ---but they are
@c still removed @emph{before}, therefore using this option is sane when
@c running several test groups.  Do not create debugging scripts.  Do not
@c log (in order to preserve supposedly existing full log file).  This is
@c the default for debugging scripts.
@c 
テストグループを実行した後でファイルを削除しません --- しかし,それら
は実行前には削除され,そのためこのオプションの使用は,複数のテストグルー
プを実行するとき問題ありません.デバッグスクリプトを作成しません.ログ
は行なわれません(おそらく存在している既存の完全なログファイルを保持す
るためです).これはデバッグスクリプトに対してデフォルトです.

@item --trace
@itemx -x
@c Trigger shell tracing of the test groups.
@c 
テストグループのシェルの追跡を開始します.
@end table


@node Making testsuite Scripts
@c @section Making @command{testsuite} Scripts
@section @command{testsuite}スクリプトの作成

@c For putting Autotest into movement, you need some configuration and
@c Makefile machinery.  We recommend, at least if your package uses deep or
@c shallow hierarchies, that you use @file{tests/} as the name of the
@c directory holding all your tests and their @file{Makefile}.  Here is a
@c check list of things to do.
@c 
Autotestを動作に入れるため,コンフィグレーションと@file{Makefile}のか
らくりで必要になるものもあります.少なくともパッケージで深いまたは浅い
階層を使用している場合,すべてのテストとその@file{Makefile}を格納する
ディレクトリの名前として,@file{tests/}を使用することを推奨します.行
なうことの調査リストは以下のようになります.

@itemize @minus

@item
@cindex @file{package.m4}
@c Make sure to create the file @file{package.m4}, which defines the
@c identity of the package.  It must define @code{AT_PACKAGE_STRING}, the
@c full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
@c address to which bug reports should be sent.  For sake of completeness,
@c we suggest that you also define @code{AT_PACKAGE_NAME},
@c @code{AT_PACKAGE_TARNAME}, and @code{AT_PACKAGE_VERSION}.
@c @xref{Initializing configure}, for a description of these variables.  We
@c suggest the following Makefile excerpt:
@c 
パッケージ固有の定義を行なうファイル@file{package.m4}を必ず作成してく
ださい.それは,パッケージの完全な署名となる@code{AT_PACKAGE_STRING}と,
バグレポートを送るアドレス@code{AT_PACKAGE_BUGREPORT}を定義する必要が
あります.完全性の目的で,@code{AT_PACKAGE_NAME},
@code{AT_PACKAGE_TARNAME},そして@code{AT_PACKAGE_VERSION}を定義するこ
とも提案します.これらの変数の記述は@xref{Initializing configure}.  我々
は以下のようなMakefileの断片を提案します.

@smallexample
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
        @{                                      \
          echo '# Signature of the current package.'; \
          echo 'm4_define([AT_PACKAGE_NAME],      [@@PACKAGE_NAME@@])'; \
          echo 'm4_define([AT_PACKAGE_TARNAME],   [@@PACKAGE_TARNAME@@])'; \
          echo 'm4_define([AT_PACKAGE_VERSION],   [@@PACKAGE_VERSION@@])'; \
          echo 'm4_define([AT_PACKAGE_STRING],    [@@PACKAGE_STRING@@])'; \
          echo 'm4_define([AT_PACKAGE_BUGREPORT], [@@PACKAGE_BUGREPORT@@])'; \
        @} >$(srcdir)/package.m4
@end smallexample

@noindent
@c Be sure to distribute @file{package.m4} and to put it into the source
@c hierarchy: the test suite ought to be shipped!
@c 
@file{package.m4}を配布していることと,それをソースの階層に書いている
ことを確かめてください.テストスイートは配布する必要があります!

@item
@c Invoke @code{AC_CONFIG_TESTDIR}.
@c 
@code{AC_CONFIG_TESTDIR}の呼び出し.

@defmac AC_CONFIG_TESTDIR (@var{directory}, @dvar{test-path, @var{directory}})
@acindex CONFIG_TESTDIR
@c An Autotest test suite is to be configured in @var{directory}.  This
@c macro requires the instantiation of @file{@var{directory}/atconfig} from
@c @file{@var{directory}/atconfig.in}, and sets the default
@c @code{AUTOTEST_PATH} to @var{test-path} (@pxref{testsuite Invocation}).
@c 
Autotestテストスイートは,@var{directory}でコンフィグレーションされま
す.このマクロは,@file{@var{directory}/atconfig.in}からの
@file{@var{directory}/atconfig}の実体を必要とし,デフォルトの
@code{AUTOTEST_PATH}を@var{test-path}に設定します(@pxref{testsuite
Invocation}).
@end defmac

@item
@c Still within @file{configure.ac}, as appropriate, ensure that some
@c @code{AC_CONFIG_FILES} command includes substitution for
@c @file{tests/atlocal}.
@c 
しかし,@file{configure.ac}に,@code{AC_CONFIG_FILES}コマンドが
@file{tests/atlocal}での代入を確実に含むよう,適切に
@file{configure.ac} に書いてください.

@item
@c The @file{tests/Makefile.in} should be modified so the validation in
@c your package is triggered by @samp{make check}.  An example is provided
@c below.
@c 
@samp{make check}でパッケージの評価を開始するように,
@file{tests/Makefile.in}を修正すべきです.例は以下で提供しています.
@end itemize

@c With Automake, here is a minimal example about how to link @samp{make
@c check} with a validation suite.
@c 
Automakeを用いると,評価スイートで@samp{make check}をリンクする方法の
最小限の例は以下のようになります.

@example
EXTRA_DIST = testsuite.at testsuite
TESTSUITE = $(srcdir)/testsuite
check-local: atconfig atlocal $(TESTSUITE)
        $(SHELL) $(TESTSUITE)

AUTOTEST = $(AUTOM4TE) --language=autotest
$(TESTSUITE): $(srcdir)/testsuite.at
        $(AUTOTEST) -I $(srcdir) $@@.at -o $@@.tmp
        mv $@@.tmp $@@
@end example

@c You might want to list explicitly the dependencies, i.e., the list of
@c the files @file{testsuite.at} includes.
@c 
依存性,すなわち@file{testsuite.at}を含んでいるファイルのリストを,明
示的にリストアップしたいかもしれません.

@c With strict Autoconf, you might need to add lines inspired from the
@c following:
@c 
厳密にAutoconfを用いると,以下のような行を追加する必要があるかもしれま
せん.

@example
subdir = tests

atconfig: $(top_builddir)/config.status
        cd $(top_builddir) && \
           $(SHELL) ./config.status $(subdir)/$@@

atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
        cd $(top_builddir) && \
           $(SHELL) ./config.status $(subdir)/$@@
@end example

@noindent
@c and manage to have @file{atconfig.in} and @code{$(EXTRA_DIST)}
@c distributed.
@c 
そして,@file{atconfig.in}と@code{$(EXTRA_DIST)}を配布物されるように管
理する必要があるかもしれません.



@c =============================== Frequent Autoconf Questions, with answers

@node FAQ
@c @chapter Frequent Autoconf Questions, with answers
@chapter Autoconfのよくある質問と答え

@c Several questions about Autoconf come up occasionally.  Here some of them
@c are addressed.
@c 
Autoconfに関するいくつかの質問が,時々発生します.ここではそれらを扱い
ます.

@menu
* Distributing::                Distributing @command{configure} scripts
* Why GNU m4::                  Why not use the standard M4?
* Bootstrapping::               Autoconf and @acronym{GNU} M4 require each other?
* Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
* Defining Directories::        Passing @code{datadir} to program
* autom4te.cache::              What is it?  Can I remove it?
@end menu

@node Distributing
@c @section Distributing @command{configure} Scripts
@section @command{configure}スクリプトの配布

@display
@c What are the restrictions on distributing @command{configure}
@c scripts that Autoconf generates?  How does that affect my
@c programs that use them?
@c 
Autoconfが生成した@command{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 @acronym{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では,@acronym{GNU}
General Public Licenseでカバーされていました.我々はソフトウェア著者に,
GPLのような規則で成果を配布することを奨励していましたが,Autoconfを使
用するためにそうすることは要求していません.

@c Of the other files that might be used with @command{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 @command{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 
@command{configure}と一緒に使用するファイルの@file{config.h.in}は, 
@file{configure.ac}に対して使用した著作権に従います.@file{config.sub}
と@file{config.guess}は,Autoconfが生成する@command{configure}スクリプ
トと一緒に使用するとき,GPLの例外とされ,他のパッケージと同じ規則で配
布できます.@file{install-sh}はXコンソーシアムからのもので,著作権保護
はありません.

@node Why GNU m4
@c @section Why Require @acronym{GNU} M4?
@section なぜ@acronym{GNU} M4が必要なのですか?

@display
@c Why does Autoconf require @acronym{GNU} M4?
@c 
なぜAutoconfは@acronym{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
m4_builtin
m4_indir
m4_bpatsubst
__file__
__line__
@end example

@c Autoconf requires version 1.4 or above of @acronym{GNU} M4 because it uses
@c frozen state files.
@c 
固まった状態のファイルを使用するので,Autoconfでは@acronym{GNU} M4のバー
ジョン1.4以上を要求します.

@c Since only software maintainers need to use Autoconf, and since @acronym{GNU}
@c M4 is simple to configure and install, it seems reasonable to require
@c @acronym{GNU} M4 to be installed also.  Many maintainers of @acronym{GNU} and
@c other free software already have most of the @acronym{GNU} utilities
@c installed, since they prefer them.
@c 
ソフトウェア管理者はAutoconfを使用する必要があり,@acronym{GNU} M4はコ
ンフィグレーションとインストールが簡単なので,@acronym{GNU} M4のインス
トールの要求も妥当だと思われます.@acronym{GNU}と他のフリーソフトウェ
アの管理者の多くは,@acronym{GNU}ユーティリティが好きなので,既にイン
ストールしています.

@node Bootstrapping
@c @section How Can I Bootstrap?
@section ブートストラップはどうするのですか?

@display
@c If Autoconf requires @acronym{GNU} M4 and @acronym{GNU} M4 has an Autoconf
@c @command{configure} script, how do I bootstrap?  It seems like a chicken
@c and egg problem!
@c 
Autoconfが@acronym{GNU} M4を要求し,@acronym{GNU} M4にAutoconfの
@command{configure}スクリプトがある場合,どうやってブートストラップす
ればよいのでしょうか?鶏と卵の問題みたいですね!
@end display

@c This is a misunderstanding.  Although @acronym{GNU} M4 does come with a
@c @command{configure} script produced by Autoconf, Autoconf is not required
@c in order to run the script and install @acronym{GNU} M4.  Autoconf is only
@c required if you want to change the M4 @command{configure} script, which few
@c people have to do (mainly its maintainer).
@c 
これは誤解です.@acronym{GNU} M4は,Autoconfが生成した
@command{configure}スクリプトと共に配布されていますが,Autoconfは,ス
クリプトを実行するために@acronym{GNU} M4をインストールすることを要求し
ません.AutoconfはM4の@command{configure}スクリプトを変更したいときだ
け必要で,(主に管理者以外) ほとんどの人が必要ありません.

@node Why Not Imake
@c @section Why Not Imake?
@section なぜImakeではないのですか?

@display
@c Why not use Imake instead of @command{configure} scripts?
@c 
なぜ@command{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 @acronym{GNU} tools are not released this way.  Each @acronym{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 
@acronym{GNU}ツールはこの方法でリリースされません.それぞれの
@acronym{GNU}ツールには管理者がいて,管理者は世界中に散らばっています.
共通のデータベースを使用することは,管理するときの悪夢となります.
Autoconfはこの種のデータベースのように見えますが,実際はそうではありま
せん.ホストの依存性をリストアップする代わりに,プログラムが要求するこ
とをリストアップします.

@c If you view the @acronym{GNU} suite as a collection of native tools, then the
@c problems are similar.  But the @acronym{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 
@acronym{GNU}スイートをネイティブのツールのコレクションだと見なす場合,
問題は似ています.しかし,@acronym{GNU}開発ツールは,ほとんどのホスト+
ターゲットで,クロスツールとしてコンフィグレーション可能です.これらの
コンフィグレーションは,同時にインストールも可能です.それらは,ホスト
間で共有するホスト非依存ファイルもコンフィグレーション可能です.Imake
はこれらの問題を扱いません.

@c Imake templates are a form of standardization.  The @acronym{GNU} coding
@c standards address the same issues without necessarily imposing the same
@c restrictions.
@c 
Imakeテンプレートは標準化の形式です.@acronym{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 @command{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 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ではほとんど問題にならず,そ
れは汎用のプリプロセッサ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 @command{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 @command{configure} setups.
@c 
一つの利点として,Imakeは@command{configure}以上のものを持っています. 
@file{Imakefile}は,@file{Makefile.in}より(同じか,かなり)短い傾向にあ
ります.これは修正されています.---しかし,少なくともKerberos V5のツリー
に対し,共通の@file{post.in}と@file{pre.in}を呼び出すため, 
@file{Makefile}の一部をツリー全体で修正しました.これは,多くの共通の
ものが,通常の@command{configure}セットアップにあるものさえ,繰りさえ
されることを意味します.
@end quotation


@node Defining Directories
@c @section How Do I @code{#define} Installation Directories?
@section インストールディレクトリを@code{#define}で定義する方法は?

@display
@c My program needs library files, installed in @code{datadir} and
@c similar.  If I use
@c 
プログラムは,@code{datadir}やそれに似た場所にインストールされているラ
イブラリファイルが必要です.以下を使用した場合です.

@example
AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
                   [Define to the read-only architecture-independent
                    data directory.])
@end example

@noindent
@c I get
@c 
以下のようになりました.

@example
#define DATADIR "$@{prefix@}/share"
@end example
@end display

@c As already explained, this behavior is on purpose, mandated by the
@c @acronym{GNU} Coding Standards, see @ref{Installation Directory
@c Variables}.  There are several means to achieve a similar goal:
@c 
既に説明しているので,この動作は目的通りで,@acronym{GNU} Coding
Standardsでも強制されています.@ref{Installation Directory Variables}
を参照してください.同様の目的を達成するため,いくつかの手段があります.

@itemize @minus
@item
@c Do not use @code{AC_DEFINE} but use your @file{Makefile} to pass the
@c actual value of @code{datadir} via compilation flags, see
@c @ref{Installation Directory Variables}, for the details.
@c 
@code{AC_DEFINE}を使用せず,コンパイルフラグで@code{datadir}の実際の値
を渡す@file{Makefile}を使用してください.詳細は,@ref{Installation
Directory Variables}を参照してください.

@item
@c This solution can be simplified when compiling a program: you may either
@c extend the @code{CPPFLAGS}:
@c 
プログラムのコンパイル時では,この解決方法は単純になります.
@code{CPPFLAGS}を拡張してもかまいません.

@example
CPPFLAGS = -DDATADIR=\"$(datadir)\" @@CPPFLAGS@@
@end example

@noindent
@c or create a dedicated header file:
@c 
または,そのためのヘッダファイルを作成します.

@example
DISTCLEANFILES = datadir.h
datadir.h: Makefile
        echo '#define DATADIR "$(datadir)"' >$@@
@end example

@item
@c Use @code{AC_DEFINE} but have @command{configure} compute the literal
@c value of @code{datadir} and others.  Many people have wrapped macros to
@c automate this task.  For instance, the macro @code{AC_DEFINE_DIR} from
@c the @href{http://www.gnu.org/software/ac-archive/, Autoconf Macro
@c Archive}.
@c 
@code{AC_DEFINE}を使用しますが,@command{configure}に@code{datadir}と
その他のリテラル値を計算させます.多くの人々は,ラッパーマクロでこの作
業を自動的に実行させています.例えば,
@href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive}
のマクロ@code{AC_DEFINE_DIR}です.

@c This solution does not conform to the @acronym{GNU} Coding Standards.
@c 
この解決方法は,@acronym{GNU} Coding Standardsに準拠していません.

@item
@c Note that all the previous solutions hard wire the absolute path to
@c these directories in the executables, which is not a good property.  You
@c may try to compute the paths relatively to @code{prefix}, and try to
@c find @code{prefix} at runtime, this way your package is relocatable.
@c Some macros are already available to address this issue: see
@c @code{adl_COMPUTE_RELATIVE_PATHS} and
@c @code{adl_COMPUTE_STANDARD_RELATIVE_PATHS} on the
@c @href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive}.
@c 
これまでのすべての解決方法は,これらのディレクトリの絶対パスが,実行形
式に強く結び付いていて,あまり良くないことに注意してください.
@code{prefix}からの相対パスを計算し,実行時に@code{prefix}を見つけても
よく,こうするとパッケージが移動可能になります.この問題を解決するため
に既に利用可能なマクロもあります.
@href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive}
の@code{adl_COMPUTE_RELATIVE_PATHS}と
@code{adl_COMPUTE_STANDARD_RELATIVE_PATHS}を参照してください.
@end itemize


@node autom4te.cache
@c @section What is @file{autom4te.cache}?
@section @file{autom4te.cache}はなんですか?

@display
@c What is this directory @file{autom4te.cache}?  Can I safely remove it?
@c 
このディレクトリ@file{autom4te.cache}は何ですか?削除しても大丈夫です
か?
@end display

@c In the @acronym{GNU} Build System, @file{configure.ac} plays a central
@c role and is read by many tools: @command{autoconf} to create
@c @file{configure}, @command{autoheader} to create @file{config.h.in},
@c @command{automake} to create @file{Makefile.in}, @command{autoscan} to
@c check the completeness of @file{configure.ac}, @command{autoreconf} to
@c check the @acronym{GNU} Build System components that are used.  To
@c ``read @file{configure.ac}'' actually means to compile it with M4,
@c which can be a very long process for complex @file{configure.ac}.
@c 
@acronym{GNU}ビルドシステムでは,@file{configure.ac}が中心的な役割を果
たし,多くのツールから読み込まれます.@command{autoconf}は
@file{configure}を作成するため,@command{autoheader}は
@file{config.h.in}を作成するため,@command{automake}は
@file{Makefile.in}を作成するため,@command{autoscan}は
@file{configure.ac}が完全であるかを調査するため,@command{autoreconf} 
はそれらを利用する@acronym{GNU}ビルドシステムの構成物を調査するために
読み込みます.``@file{configure.ac}を読み込む''本当の意味は,それをM4 
でコンパイルするということで,複雑な@file{configure.ac}では,それは非
常に長い処理になり得ます.

@c This is why all these tools, instead of running directly M4, invoke
@c @command{autom4te} (@pxref{autom4te Invocation}) which, while answering to
@c a specific demand, stores additional information in
@c @file{autom4te.cache} for future runs.  For instance, if you run
@c @command{autoconf}, behind the scenes, @command{autom4te} will also
@c store information for the other tools, so that when you invoke
@c @command{autoheader} or @command{automake} etc., re-processing
@c @file{configure.ac} is not needed.  The speed up is frequently of 30,
@c and is increasing with the size of @file{configure.ac}.
@c 
これが,直接M4を実行する代わりに,これらすべてのツールが
@command{autom4te} (@pxref{autom4te Invocation})を呼び出す理由で,特別
な要求に答えている間,将来実行するために@file{autom4te.cache}に追加情
報を保存しています.例えば,@command{autoconf}を実行する場合,その影で
は@command{autoheader}や@command{automake}などを呼び出すとき,
@file{configure.ac}を再び処理する必要が無いように,@command{autom4te} 
はそれ以外のツールのための情報を保存しています.速度の向上は30倍ぐらい
で,@file{configure.ac}の大きさにより更に大きくなります.

@c But it is and remains being simply a cache: you can safely remove it.
@c 
しかし,それは単純なキャッシュです.削除しても問題ありません.

@sp 1

@display
@c Can I permanently get rid of it?
@c 
永久に削除することは可能ですか?
@end display

@c The creation of this cache can be disabled from
@c @file{~/.autom4te.cfg}, see @ref{Customizing autom4te}, for more
@c details.  You should be aware that disabling the cache slows down the
@c Autoconf test suite by 40%.  The more @acronym{GNU} Build System
@c components are used, the more the cache is useful; for instance
@c running @samp{autoreconf -f} on the Coreutils is twice slower without
@c the cache @emph{although @option{--force} implies that the cache is
@c not fully exploited}, and eight times slower than without
@c @option{--force}.
@c 
このキャッシュの生成は,@file{~/.autom4te.cfg}で利用不可能にすることが
可能で,詳細は@ref{Customizing autom4te}を参照してください.キャッシュ
を利用不可能にするとAutoconfのテストスイートが40%遅くなることを覚えて
おいてください.それ以外の@acronym{GNU}ビルドシステムの構成物を使用し
ている場合,キャッシュはより役に立ちます.例えば,Coreutilsで
@samp{autoreconf -f}を実行すると,@emph{たとえ@option{--force}を暗黙に
指定していてもキャッシュを完全に利用することができないので}キャッシュ
が無ければ二倍遅くなり,@option{--force}がなければ八倍遅くなります.



@c ===================================================== History of Autoconf.

@node History
@c @chapter History of Autoconf
@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@enddots{}
@c 
以下のことを不思議に思うかもしれません.なぜAutoconfは元々書かれたので
すか?どのようにして現在の形式になったのですか?(なぜそれはゴリラの唾
によく似ているのですか?)不思議に思っていない場合,この章は有用な情報
を含んでいないので,飛ばした方が良いでしょう.不思議に思って@emph{いる} 
場合,軽くながしてください@enddots{}

@menu
* Genesis::                     Prehistory and naming of @command{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
@section Genesis

@c In June 1991 I was maintaining many of the @acronym{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 @command{configure} script worked well enough that
@c the next month I adapted it (by hand) to create similar @command{configure}
@c scripts for several other @acronym{GNU} utilities packages.  Brian Berliner
@c also adapted one of my scripts for his @acronym{CVS} revision control system.
@c 
1991年6月,私はFree Software Foundationの@acronym{GNU}ユーティリティの
多くを保守していました.それらは,より多くのプラットホームに移植され,
より多くのプログラムが追加されたので,ユーザは,@file{Makefile}で多く
の @samp{-D}オプション(およそ20)を選択する必要があり厄介になりました.
特に私がそうでした---私は異なるシステムでそれぞれの新しいリリースをテ
ストする必要がありました.そして,私はfileutilsパッケージに対する正し
い設定を見つけるため小さなシェルスクリプトを書き,fileutils 2.0の一部
としてリリースしました.その@command{configure}は,翌月,いくつかの他
の@acronym{GNU} ユーティリティパッケージに対する@command{configure} ス
クリプトを作成するため,(手作業で)改造するとうまく動作しました.Brian
Berlinerも,私のスクリプトを,@acronym{CVS}リビジョンコントロールシス
テム用に改造しました.

@c Later that summer, I learned that Richard Stallman and Richard Pixley
@c were developing similar scripts to use in the @acronym{GNU} compiler tools;
@c so I adapted my @command{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が,@acronym{GNU}コン
パイラツールで使用する,類似のスクリプトを開発していたことを知りました.
それで私は,@command{configure}スクリプトが発展するインタフェースをサ
ポートするように改造しました.テンプレートとして,@file{Makefile.in}と
いう名前のファイルを使用し,(たくさんの中から)最初のオプション
@samp{+srcdir}を追加し, @file{config.status}ファイルを作成しました.

@node Exodus
@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 @acronym{GNU} utilities packages to use
@c @command{configure} scripts, updating them all by hand became impractical.
@c Rich Murphey, the maintainer of the @acronym{GNU} graphics utilities, sent me
@c mail saying that the @command{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 @command{configure} scripts to the
@c abundance and ease of Autoconf began.
@c 
ユーザからのフィードバックを得るにつれ,私は,検索と置換,カットアンド
ペースト,それぞれのスクリプトの良く似た変更でEmacsを使用し,多くの改
良点を組み入れました.私が,@acronym{GNU}ユーティリティパッケージに, 
@command{configure}スクリプトを使用するため改造するにつれ,手作業での
更新は,現実的なものではなくなりました.@acronym{GNU}グラフィックユー
ティリティの管理者Rich Murpheyは,@command{configure}スクリプトは素晴
らしいというメールを送ってくれ,それらを生成するツールを持っているなら
送って欲しいという依頼がありました.持ってはいませんでしたが,そうする
べきだと思いました!それで,私はそれらを生成する仕事を始めました.手書
きの@command{configure}スクリプトの奴隷から,Autoconfで簡単に始める裕
福で簡単な旅が始まりました.

@c Cygnus @command{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 @command{configure}は,そのころには開発されていて,表を基に動作
していました.それは,主に推測しにくい(オブジェクトファイルのフォーマッ
トの詳細のような)特徴を,小さな数字を使用して,システムタイプを不連続
な数字で,扱う手法を主に用いていました.Brian Foxが,Bashのために開発
していた自動的なコンフィグレーションシステムは,類似のアプローチをとっ
ています.一般的に使用するため,それぞれのオペレーティングシステムが持
つそれぞれ異なる特徴の最新のデータベースを管理しようとすることは,望み
がないように思われました.その場その場でほとんどの機能を調査するため,
より容易でより信頼性が高いものが必要です --- 特に,人々がローカルでハッ
クしたり,ベンダーがインストールしたパッチがある,ハイブリッドなシステ
ムではそうなります.

@c I considered using an architecture similar to that of Cygnus
@c @command{configure}, where there is a single @command{configure} script that
@c reads pieces of @file{configure.in} 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 @command{configure} made from each
@c @file{configure.in} by a preprocessor.  That approach also offered more
@c control and flexibility.
@c 
私は Cygnus @command{configure}に類似のアーキテクチャを使おうと考え,
それは実行時に@file{configure.in}の一部を読み込む一つの 
@command{configure}スクリプトです.しかし,全てのパッケージで全ての特
徴を配布する必要は望まなかったので,プロセッサーによってそれぞれの
@file{configure.in}から異なる@command{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 @command{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 @command{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を
使用してみようとしましたが,いくつかの理由でやめました.それが生成する
@command{configure}スクリプトは対話的で,それが非常に不都合だと分かり
ました.私は,それが行う(ライブラリ関数のような)特徴の調査方法が,好き
でありませんでした.さらに,いまだ管理されているかどうか分かりませんで
した.@command{configure}スクリプトは,(System V R4とNeXTのような)近代
的なシステムでは動作しないように思えました.特徴の有無の反応で,できる
ことがあまり柔軟ではありませんでした.学ぶことが難しいと思いました.そ
して,必要以上にあまりに大きく複雑でした(私は,そのとき,Autoconfが結
局どれくらい成長するのか,理解していませんでした).

@c I considered using Perl to generate my style of @command{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 @acronym{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 
私は,@command{configure}スクリプトの私のスタイルを生成するため,Perl 
を使用することを考えましたが,簡単なテキスト代入の仕事により適している
M4に決めました.出力が暗黙で決まっているので,より小さい手法になると思
いました.さらに,みんなは既にそれを所有しています.(最初は,私は
@acronym{GNU}が拡張したM4に依存しませんでした.)また,Maryland大学の私
の友達は最近,M4を@code{tvtwm}を含むいくつかのプログラムのフロントエン
ドとして位置付けていて,私は新しい言語への挑戦に興味が湧きました.

@node Leviticus
@section Leviticus

@c Since my @command{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 
私の@command{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 Autoconf shell script to run 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 @acronym{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マクロの手書きのスクリプトの部品をカプセル化し,調査
時に使用する特徴と技術の改善を加えることを続けるにつれて,フィードバッ
クしてもらうため,移植性の聖杯にちなんだ探求者たちのグループ(つまり,
アルファテスター)を呼びました.テスターの間で著明な人は,以下の通りで
す.M4を実行し,未解決のマクロの呼び出しの調査するAautoconfシェルスク
リプトを作成するアイディアをもたらしたFran@,{c}ois Pinard,インクルー
ドファイルやシンボルを探すためファイルシステムを探す代わりに,より正確
な結果を求るためコンパイラの実行を提案したRichard Pixley.Autoconfに,
@TeX{}コンフィグレーションを与え,ドキュメントにマクロインデクッスを加
えたKarl Berry.そして,@samp{-D}オプションを@file{Makefile}に書き込む
代わりに,Cヘッダファイルを作成するサポートを加え,@acronym{UUCP}パッ
ケージでAutoconfが使えるようにしたIan Taylor.アルファテスターは,リリー
スごとに変化するAutoconfマクロの名前と呼び出し方法に対して,何度も何度
もファイルを機嫌良く調整してくれました.彼らは皆,多くの特定の調査,偉
大なアイディア,そしてバグフィクスを提供してくれました.

@node Numbers
@section Numbers

@c In July 1992, after months of alpha testing, I released Autoconf 1.0,
@c and converted many @acronym{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 @acronym{GNU} Project (such as TCL, FSP, and Kerberos V5).
@c Autoconf continued to improve rapidly, as many people using the
@c @command{configure} scripts reported problems they encountered.
@c 
1992年7月,何カ月ものアルファテストの後で,私は Autoconf 1.0をリリース
し,それを使用して多くの@acronym{GNU}パッケージを改造しました.私は,
それらに対するあまりに肯定的な反応に驚きました.私が追跡記録可能な人以
上の多くの人々がそれを使用し始め,それには,@acronym{GNU}プロジェクト
の一部ではない(TCL,FSP とKerberos V5のような)ソフトウェアで仕事をして
いる人も含まれています.Autoconfは,@command{configure}を使用している
多くの人が遭遇した問題を報告してくれるので,急速に改善され続けました.

@c Autoconf turned out to be a good torture test for M4 implementations.
@c @sc{unix} M4 started to dump core because of the length of the
@c macros that Autoconf defined, and several bugs showed up in @acronym{GNU}
@c M4 as well.  Eventually, we realized that we needed to use some
@c features that only @acronym{GNU} M4 has.  4.3@acronym{BSD} 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は,M4実行の良い耐久テストだということが分かりました.
@sc{unix} M4は,Autoconfが定義するマクロの長さでコアダンプを吐き始め,
いくつかのバグが@acronym{GNU} M4でも同様に明らかになりました.結局,私
達は@acronym{GNU} M4のみが持つ機能が必要だと認識しました.
4.3@acronym{BSD} 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 @acronym{GNU} Emacs, laying the groundwork for several later improvements.
@c Roland McGrath got it to configure the @acronym{GNU} C Library, wrote the
@c @command{autoheader} script to automate the creation of C header file
@c templates, and added a @option{--verbose} option to @command{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++サポートを寄付してくれました.
Fran@,cois Pinardは,無効な引数を診断させるようにしました.Jim Blandy 
は勇敢にも,後の改良のためのワークグランドとなるよう,@acronym{GNU}
Emacsのコンフィグレーションに強要しました.Roland McGrathは,
@acronym{GNU} Cライブラリのコンフィグレーションに使用し,Cヘッダテンプ
レートファイルを自動的に作成する,@command{autoheader}スクリプトを書き,
@command{configure}に,@samp{--verbose}オプションを加えました.Noah
Friedmanは,@samp{--macrodir}オプションと @code{AC_MACRODIR}環境変数を
加えました.(彼は,``ソフトウェアパッケージを,Autoconfを使用するもの
に改造してください''と言うことを意味する @dfn{autoconfiscate}という言
葉も作り出しました.)RolandとNoahは,@code{AC_DEFINE}での引用の保護を
改善し,特に私が1993年の2月から6月まで移植性の問題にうんざりしていると
きに多くのバグを直しました.

@node Deuteronomy
@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 @command{configure} that Autoconf had lacked, largely by adapting the
@c relevant parts of Cygnus @command{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 @command{configure}
@c scripts in subdirectories.  Adding these features enabled Ken to convert
@c @acronym{GNU} @code{as}, and Rob Savoye to convert Deja@acronym{GNU}, to using
@c Autoconf.
@c 
長い間望まれていた主な特徴のリストが蓄積され,様々な人々のパッチの数年
間の効果は,残りのcruftを残したままでした.1994年4月のCygnus Supportに
対する仕事中に,私はautoconfの主な修正を始めました.Cygnus
@command{configure}が関連した部分がほとんどですが,david zuhnとKen
Raeburnの助けで,Autoconfに欠けているCygnus @command{configure}のほと
んどの機能を追加しました.これらの機能は,@file{config.sub},
@file{config.guess},@samp{--host}と@samp{--target}を使用するサポート,
ファイルをリンクさせること,サブディレクトリで@command{configure}を実
行することを含みます.これらの機能に加え,Autoconfを使用するように,
Kenは@acronym{GNU} @code{as}を対応し,Rob Savoye はDeja@acronym{GNU}を
対応しました.

@c I added more features in response to other peoples' requests.  Many
@c people had asked for @command{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 @command{configure} script.
@c 
私は,他の人々の要求に答えより多くの機能を加えました.多くの人々は, 
@command{configure}スクリプトが実行時の調査結果を共有できるよう求め,
それは(特に,Cygnusのような,大きなソースツリーのコンフィグレーション
時に)イライラする程遅かったためです.Mike Haertelは,サイト特定の初期
化スクリプトを加えることを提案しました.MS-DOSでアンパックが必要なもの
を配布している人々は,生成されるファイル名が@file{config.h.in}のように
二つのドットを含むので,ファイル名の@file{.in}拡張子に優先するよう求め
ました.Jim Avera は,@code{AC_DEFINE}と@code{AC_SUBST}の引用を使用す
る問題の拡張試験を行い,彼の洞察は重要な改良につながりました.Richard
Stallmanは,Emacsの@command{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 @acronym{GNU} 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を使用するソースコードパッケージの改造を助けるため開発した,追
加のユーティリティを加えました.Fran@,cois Pinardの助けで,マクロがお
互いのメッセージに干渉しないようにしました.(その機能は,@acronym{GNU}
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 
再び,貴重なフィードバックをくれたアルファテスターです.特に,
Fran@,cois 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 Copying This Manual
@c @appendix Copying This Manual
@appendix このマニュアルのコピー条件

@menu
* GNU Free Documentation License::  License for copying this manual
@end menu

@include fdl.texi

@node Indices
@c @appendix Indices
@appendix 索引

@menu
* 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
* Autotest Macro Index::        Index of Autotest macros
* Program & Function Index::    Index of those with portability problems
* Concept Index::               General index
@end menu

@node Environment Variable Index
@c @appendixsec Environment Variable Index
@appendixsec 環境変数の索引

@c This is an alphabetical list of the environment variables that Autoconf
@c checks.
@c 
以下は,Autoconfが調査する環境変数のアルファベット順のリストです.

@printindex ev

@node Output Variable Index
@c @appendixsec Output Variable Index
@appendixsec 出力変数の索引

@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が作成するファイルに,通常は一つ以上の@file{Makefile} 
に代入する変数のアルファベット順のリストです.こうする方法の詳細は, 
@xref{Setting Output Variables}.

@printindex ov

@node Preprocessor Symbol Index
@c @appendixsec Preprocessor Symbol Index
@appendixsec プリプロセッサシンボルの索引

@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
@c @appendixsec Autoconf Macro Index
@appendixsec 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 ac

@node M4 Macro Index
@c @appendixsec M4 Macro Index
@appendixsec 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 Autotest Macro Index
@c @appendixsec Autotest Macro Index
@appendixsec Autotestマクロの索引

@c This is an alphabetical list of the Autotest macros.  To make the list
@c easier to use, the macros are listed without their preceding @samp{AT_}.
@c 
以下は,Autotestマクロのアルファベット順のリストです.リストの利用がよ
り容易になるよう,マクロは前置される@samp{AT_}を用いずにリストアップさ
れています.

@printindex at

@node Program & Function Index
@c @appendixsec Program and Function Index
@appendixsec プログラムと関数の索引

@c This is an alphabetical list of the programs and functions which
@c portability is discussed in this document.
@c 
以下は,このドキュメントで移植性を検討しているプログラムと関数のアルファ
ベット順のリストです.

@printindex pr

@node Concept Index
@c @appendixsec Concept Index
@appendixsec 概念の索引

@c This is an alphabetical list of the files, tools, and concepts
@c introduced in this document.
@c 
以下は,ファイル,ツール,そしてこのドキュメントで紹介されている概念の
アルファベット順のリストです.

@printindex cp

@bye

@c Local Variables:
@c ispell-local-dictionary: "american"
@c End:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>