File:  [Local Repository] / gnujdoc / autoconf-2.53 / autoconf-ja.texi
Revision 1.4: download - view: text, annotated - select for diffs
Mon May 30 15:58:16 2005 UTC (15 years, 5 months ago) by futoshi
Branches: MAIN
CVS tags: HEAD
autoconf-2.53 bug @-command
emacs-20.6 missing @ref first argument
gdb-4.18 missing @ for value command

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

@finalout
@setchapternewpage odd
@setcontentsaftertitlepage

@include autoconf-v.texi

@ignore

@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
@c @ifnothtml
@macro href{url, title}
\title\@footnote{\title\, @url{\url\}.}
@end macro
@c @end ifnothtml

@end ignore

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

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

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

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

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

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@end ifinfo

@titlepage
@title Autoconf
@subtitle Creating Automatic Configuration Scripts
@subtitle Edition @value{EDITION}, for Autoconf version @value{VERSION}
@subtitle @value{UPDATED}
@author David MacKenzie
@author Ben Elliston
@author Akim Demaille
@c I think I've rewritten all of Noah and Roland's contributions by now.
@c 翻訳:西尾 太

@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
2001, 2002 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no
Front-Cover Texts, and with no Back-Cover Texts.
A copy of the license is included in the section entitled ``GNU
Free Documentation License''.
@end titlepage

@c Define an environment variable index.
@defcodeindex ev
@c Define an output variable index.
@defcodeindex ov
@c Define a CPP variable index.
@defcodeindex cv
@c Define an Autoconf macro index that @defmac doesn't write to.
@defcodeindex 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


@ifinfo
@node Top
@top Autoconf
@end ifinfo

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

@end ifinfo

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

@menu
* Introduction::                Autoconf's purpose, strengths, and weaknesses
* The GNU build system::        A set of tools for portable software packages
* Making configure Scripts::    How to organize and produce Autoconf scripts
* Setup::                       Initialization and output
* Existing Tests::              Macros that check for particular features
* Writing Tests::               How to write new feature checks
* Results::                     What to do with results from feature checks
* Programming in M4::           Layers on top of which Autoconf is written
* Writing Autoconf Macros::     Adding new macros to Autoconf
* Portable Shell::              Shell script portability pitfalls
* Manual Configuration::        Selecting features that can't be guessed
* Site Configuration::          Local defaults for @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
* Questions::                   Questions about Autoconf, 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 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 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 from the configuration
* Subdirectories::              Configuring independent packages together
* Default Prefix::              Changing the default installation prefix

@c Substitutions in Makefiles
@c 
Makefileの置換式

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

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

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

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

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

@c Common Behavior
@c 
共通の動作

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

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

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

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

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

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

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

@c Declarations
@c 
宣言

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

@c Structures
@c 
構造体

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

@c Types
@c 
型

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

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

* 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 
テストを書く

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

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

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

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

* Defining Symbols::            Defining C preprocessor symbols
* Setting Output Variables::    Replacing variables in output files
* Caching Results::             Speeding up subsequent @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
* Invoking 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 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::         Formating 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 
Version 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::

@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 Questions About Autoconf
@c 
Autoconfに関する質問

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

@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
@chapter はじめに

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

@node Automake
@section Automake

@c The ubiquity of @code{make} means that a @code{Makefile} is almost the
@c only viable way to distribute automatic build rules for software, but
@c one quickly runs into @code{make}'s numerous limitations.  Its lack of
@c support for automatic dependency tracking, recursive builds in
@c subdirectories, reliable timestamps (e.g. for network filesystems), and
@c so on, mean that developers must painfully (and often incorrectly)
@c reinvent the wheel for each project.  Portability is non-trivial, thanks
@c to the quirks of @code{make} on many systems.  On top of all this is the
@c manual labor required to implement the many standard targets that users
@c have come to expect (@code{make install}, @code{make distclean},
@c @code{make uninstall}, etc.).  Since you are, of course, using Autoconf,
@c you also have to insert repetitive code in your @code{Makefile.in} to
@c recognize @code{@@CC@@}, @code{@@CFLAGS@@}, and other substitutions
@c provided by @command{configure}.  Into this mess steps @dfn{Automake}.
@c 
@code{make}の偏りとは,@code{Makefile}はソフトウェアの自動的なビルド規則
を配布するためのほとんど唯一の現実的な方法なのですが,すぐに@code{make} 
の多くの限界にぶつかることを示しています.それには,自動的な依存性の追跡
に対するサポート,サブディレクトリでの再帰的なビルド,(例えば,ネットワー
クファイルシステムに対する)信頼できるタイムスタンプなどが足りないので,
開発者はそれぞれのプロジェクトに対し,辛い(そして間違うことが多い)車輪の
再開発が必要になっています.多くのシステムの@code{make}の癖のために,移
植性は些細な問題ではなくなっています.なによりも,ユーザが期待する多くの
標準的なターゲット(@code{make install},@code{make distclean},
@code{make uninstall}など)を手作業で実装する必要があることがあげられます.
もちろん,Autoconfを使用しているので,@code{@@CC@@},@code{@@CFLAGS@@},
そして@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.  @code{make} will
@c build the @code{hello} program, and @code{make install} will install it
@c in @file{/usr/local/bin} (or whatever prefix was given to
@c @command{configure}, if not @file{/usr/local}).
@c 
結果として得られる@code{Makefile.in}(約400行)は,自動的に,すべての標準
的なターゲット,Autoconfが提供する置換式,自動的な依存性追跡,
@code{VPATH}のビルドなどをサポートします.@code{make}で@code{hello}プロ
グラムをビルドし,@code{make install}でそれを@file{/usr/local/bin}(また
は@file{/usr/local}でないときは@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}は移植性がない
かもしれません(例えば,自動的に依存情報を生成するために,コンパイラの特
殊な機能を使用しているかもしれません).しかし,@code{make dist}を実行す
ることで,あらゆるシステムで動作する@code{Makefile.in}を用いている,
@file{hello-1.0.tar.gz}(やあらゆるプログラムをバージョンを持つ)パッケー
ジを生成します.

@c The benefits of Automake increase for larger packages (especially ones
@c with subdirectories), but even for small programs the added convenience
@c and portability can be substantial.  And that's not all@dots{}
@c 
Automakeの利点は,パッケージが大きければ大きい(特にサブディレクトリがあ
るもの)ほど有利になりますが,小さなプログラムに対しても重要な利便性と移
植性を追加します.そして,それだけがすべてではありません@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, GNU provides a solution:
@c @dfn{Libtool}.
@c 
他のプログラムで,これまでの作業の成果から利益を得ることを可能にするため,
プログラムだけでなくライブラリをビルドしたいことも頻繁にあるでしょう.理
想的には,@emph{共有}(動的にリンクされる)ライブラリを生成したいと考え,
それは,複数のプログラムからディスクやメモリに同じものを複製せずに使用可
能で,リンクされているプログラムに依存せずに更新可能だからです.しかし,
移植性の高い共有ライブラリは悪夢の元です --- それぞれのシステムは,独自
の互換性のないツール,コンパイラフラグ,そして魔法の呪文があります.幸い
にもGNUは解決方法を提供しています.それは,@dfn{Libtool}です.
@cindex Libtool

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

@node Pointers
@section 参考文献

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

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

@itemize @minus

@item Web

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

@item Automakeのマニュアル

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

@item 書籍

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

@item チュートリアルと例

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

@end itemize

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

@node Making configure Scripts
@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, one in each subdirectory of the
@c package (@pxref{Makefile Substitutions});
@c 
1つ以上の@file{Makefile}で,それはパッケージのそれぞれのサブディレクトリ
に1つずつあります(@pxref{Makefile Substitutions}).

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

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

@item
@c an optional shell script normally called @file{config.cache}
@c (created when using @samp{configure --config-cache}) that
@c saves the results of running many of the tests (@pxref{Cache Files});
@c 
(@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
@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 produce this file is not
@c described by its extension), and introduces a slight confusion with
@c @file{config.h.in} and so on (for which @samp{.in} means ``to be
@c processed by @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 configure.ac
@end menu

@node 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}スク
リプトを書くことを十分に簡単にします.ああ!残念ながら,シェル関数は最小
公倍数ではありません.そのため,関数を定義しそれを10回使用したいところで,
その本体を10回コピーする必要があるでしょう.

@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 
可能性としては明らかに2つあります.新しい言語を作成すること,または既存
のものを拡張することです.前者は非常に魅力的です.あらゆる最適化が簡単に
実装可能で,厳密なチェックがAutoconfプログラムで実行可能です(例えば,移
植性のないあらゆる構成物は除外します).あるいは,@code{sh}(Bourne shell)
言語のように,既存の言語を拡張することが可能です.

@c Autoconf does the latter: it is a layer on top of @code{sh}.  It was
@c therefore most convenient to implement @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{マクロ展開}を
繰り返し実行するプログラムです.Autoconfマクロの展開に専念して実装する代
わりに,M4のような既存の一般的な目的を持つマクロ言語を使用し,M4マクロの
組み合わせとして拡張部分を実装する方が自然です.


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

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

@c You are now able to understand one of the constructs of Autoconf that
@c has been continually misunderstood@dots{}  The rule of thumb is that
@c @emph{whenever you expect macro expansion, expect quote expansion};
@c i.e., expect one level of quotes to be lost.  For instance:
@c 
絶えず誤解されていたAutoconfの構成物の一つを,今では理解できるでしょう
@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にありましたが,それを使用しないでくださ
い!)さて,より詳しく見てみましょう.もう一方では,第一引数はリテラルと
して理解され,そのためそれは引用符で2重に囲む必要があります.

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

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

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

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

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

@c It is best to put each macro call on its own line in
@c @file{configure.ac}.  Most of the macros don't add extra newlines; they
@c rely on the newline after the macro call to terminate the commands.
@c This approach makes the generated @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
@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 
Autoconfの必要条件
@code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
@c information on the package
@c 
パッケージの情報
@c checks for programs
@c 
プログラムの調査
@c checks for libraries
@c 
ライブラリの調査
@c checks for header files
@c 
ヘッダファイルの調査
@c checks for types
@c 
型の調査
@c checks for structures
@c 
構造体の調査
@c checks for compiler characteristics
@c 
コンパイラの特徴の調査
@c checks for library functions
@c 
ライブラリ関数の調査
@c checks for system services
@c 
システムサービスの調査
@code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
@code{AC_OUTPUT}
@end group
@end display


@node autoscan Invocation
@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 Also look for input files in @var{dir}.  Multiple invocations
@c accumulate.  Directories are browsed from last to first.
@c 
入力ファイルを@var{dir}でも探します.複数回の呼び出しは累積されます.ディ
レクトリは最後のものから最初のものという順序で見ていきます.
@end table

@node ifnames Invocation
@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
@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 @code{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マクロを使用しながら,@code{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 Also look for input files in @var{dir}.  Multiple invocations
@c accumulate.  Directories are browsed from last to first.
@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. @command{autoconf -W @var{category}} will actually
@c behave as if you had run:
@c 
@samp{syntax}に関する警告はデフォルトで利用可能で,カンマで分けられたカ
テゴリリストの環境変数@code{WARNINGS}は尊重されます.@command{autoconf
-W @var{category}}は,実際には以下のように実行したかのように動作します.

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

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

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

@example
AC_DEFUN([INNER],
[AC_TRY_RUN([exit (0)])])

AC_DEFUN([OUTER],
[INNER])

AC_INIT
OUTER
@end example

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@c If you install a new version of some tools, 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 Copy missing auxiliary files.  This option is similar to the option
@c @code{--add-missing} in @command{automake}.
@c 
足りない補助ファイルをコピーします.このオプションは,@command{automake} 
のオプション@code{--add-missing}に似ています.

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

@item --include=@var{dir}
@itemx -I @var{dir}
@c Also look for input files in @var{dir}.  Multiple invocations
@c accumulate.  Directories are browsed from last to first.
@c 
入力ファイルを@var{dir}でも探します.複数回の呼び出しは累積されます.ディ
レクトリは最後のものから最初のものという順序で見ていきます.
@end table


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

@node Setup
@chapter 出力ファイルの初期化

@c Autoconf-generated @command{configure} scripts need some information about
@c how to initialize, such as how to find the package's source files; and
@c about the output files to produce.  The following sections describe
@c initialization and the creation of output files.
@c 
Autoconfが生成した@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 from the configuration
* Subdirectories::              Configuring independent packages together
* Default Prefix::              Changing the default installation prefix
@end menu

@node Initializing 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}, @@r{[}@var{bug-report}@r{]}, @@r{[}@var{tarname}@r{]})
@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 latter is meant for
@c distribution tar ball names (e.g., @samp{autoconf}).  It defaults to
@c @var{package} once @samp{GNU } strip, lower cased, and all non
@c alphanumeric character mapped onto @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 these arguments be static, i.e., there should not
@c be any shell computation, but they can be computed by M4.  The following
@c M4 macros (e.g., @code{AC_PACKAGE_NAME}), output variables (e.g.,
@c @code{PACKAGE_NAME}), and preprocessor symbols (e.g.,
@c @code{PACKAGE_NAME}) are then defined:
@c 
これらの引数は静的にすることが望ましく,すなわちシェルで演算して求めるべ
きではありませんが,M4で演算してもかまいません.以下のM4マクロ(例えば
@code{AC_PACKAGE_NAME}),出力変数(例えば@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
@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 @sc{rcs} or @code{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}をチェックインしたときに@sc{rcs}や@code{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
@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 @command{make} have a rule that creates
@c @file{install} from it if there is no @file{Makefile}.
@c 
ディレクトリ@var{dir}にある補助的なビルドツール(例えば,
@file{install-sh},@file{config.sub}, @file{config.guess},そしてCygnus
@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
@section 出力ファイルを生成する

@c Every Autoconf script, e.g., @file{configure.ac}, should finish by
@c calling @code{AC_OUTPUT}.  It is the macro that generates
@c @file{config.status}, which will create the @file{Makefile}s and any
@c other files resulting from configuration.  The only required macro is
@c @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 take all the configuration actions: all the
@c output files (see @ref{Configuration Files}, macro
@c @code{AC_CONFIG_FILES}), header files (see @ref{Configuration Headers},
@c macro @code{AC_CONFIG_HEADERS}), commands (see @ref{Configuration
@c Commands}, macro @code{AC_CONFIG_COMMANDS}), links (see
@c @ref{Configuration Links}, macro @code{AC_CONFIG_LINKS}), subdirectories
@c to configure (see @ref{Subdirectories}, macro @code{AC_CONFIG_SUBDIRS})
@c are honored.
@c 
@file{config.status}は,全てのコンフィグレーションの実行を受け入れます.
全ての出力ファイル(@ref{Configuration Files}とマクロ
@code{AC_CONFIG_FILES}を参照してください),ヘッダファイル
(@ref{Configuration Commands}とマクロ@code{AC_CONFIG_COMMANDS}を参照して
ください),コマンド(@ref{Configuration Commands}とマクロ
@code{AC_CONFIG_COMMANDS}を参照してください),リンク(@ref{Configuration
Links}とマクロ@code{AC_CONFIG_LINKS}を参照してください),サブディレクト
リ(@ref{Configuration Links}とマクロ@code{AC_CONFIG_LINKS}を参照してくだ
さい)が尊重されます.
@end defmac

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



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

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

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

@example
@@SET_MAKE@@
@end example



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

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

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

@c 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 variable 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{現在の}ディレクトリは,@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@dots{}
@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
@section コンフィグレーションファイルの作成

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

@defmac AC_CONFIG_FILES (@var{file}@dots{}, @@r{[}@var{cmds}@r{]}, @@r{[}@var{init-cmds}@r{]})
@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
@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{出力変数}と呼ばれます.それらは
@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 GNU Coding Standards}, for more information on what to put in
@c @file{Makefile}s.
@c 
@file{Makefile}に書くものの詳細は@xref{Makefile Conventions,, Makefile
Conventions, standards, The GNU Coding Standards}.

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

@node Preset Output Variables
@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{srcbuild}.
@c 
現在のビルドツリーのトップレベルへの相対パスです.トップレベルのディレク
トリは,ここでは@code{srcbuild}と同じです.
@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
@subsection インストールディレクトリの変数

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

@defvar bindir
@ovindex bindir
@c The directory for installing executables that users run.
@c 
ユーザが実行する実行形式をインストールするディレクトリです.
@end defvar

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

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

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

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

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

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

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

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

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

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

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

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

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


@c Most of these variables have values that rely on @code{prefix} or
@c @code{exec_prefix}.  It is 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 @sc{gnu} coding standards, so that when
@c the user runs:
@c 
以下の動作は,@sc{gnu} coding standardsで示されれていて,ユーザが実行時
にそうなるようになっています.

@table @samp
@item make
@c she can still specify a different prefix from the one specified to
@c @command{configure}, in which case, if needed, the package shall hard
@c code dependencies 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 hardcoding it in Makefiles using
@c e.g. @samp{AC_DEFINE_UNQUOTED(DATADIR, "$datadir")}, you should add
@c @samp{-DDATADIR="$(datadir)"} to your @code{CPPFLAGS}.
@c 
当然のことですが,これらの変数を@file{Makefileq}で使用すべきではありませ
ん.例えば,@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{.sh}, and uses
@c this Makefile snippet:
@c 
同様に,@code{datadir}とその仲間を,シェルスクリプトやその他のファイルで
置換するために,@code{AC_OUTPUT_FILES}に頼るべきではなく,その代わりに
@command{make}にその置換を行なわせてください.@samp{.sh}で終るシェルスク
リプトのAutoconf的なテンプレートの例として,以下のようなMakefileの一部を
使用してください.

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

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

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

@item $(pkgdatadir)
@c Don't use @samp{@@pkgdatadir@@}!  Use the matching makefile variable
@c instead.
@c 
@samp{@@pkgdatadir@@}を使用しないでください!代わりに,makefile変数のマッ
チングを使用してください.

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


@node Build Directories
@subsection ビルドディレクトリ

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

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

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

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

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

@c @command{configure} substitutes in 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 @code{make} do not set @code{$<} in explicit rules; they
@c expand it to an empty value.
@c 
暗黙の規則を期待して,(@code{VPATH}で見つかる)ソースディレクトリのファイ
ルのパス名を展開する@code{make}変数の@code{$<}を使用しないでください.
(暗黙の規則とは,@file{.c}ファイルから@file{.o}ファイルを作成する方法を
教える@samp{.c.o}の様なものです.)暗黙の規則で@code{$<}を設定しないバー
ジョンの@code{make}もあり,それは,空の値で展開します.

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

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

@node Automatic Remaking
@subsection 自動的なリメイク

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

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

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

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

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

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

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

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

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

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

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

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

@c When a package tests more than a few C preprocessor symbols, the command
@c lines to pass @option{-D} options to the compiler can get quite long.
@c This causes two problems.  One is that the @code{make} output is hard to
@c visually scan for errors.  More seriously, the command lines can exceed
@c the length limits of some operating systems.  As an alternative to
@c passing @option{-D} options to the compiler, @command{configure} scripts can
@c create a C header file containing @samp{#define} directives.  The
@c @code{AC_CONFIG_HEADERS} macro selects this kind of output.  It should
@c be called right after @code{AC_INIT}.
@c 
2,3個以上のCプリプロセッサのシンボルをパッケージでテストするとき,コマ
ンドラインでコンパイラに渡す@samp{-D}オプションはかなり長くなります.こ
れは2つの問題があります.一つは,@code{make}の出力のエラーを探すとき,見
て分からなくなることです.更に深刻な問題は,コマンドラインがいくつかのオ
ペレーティングシステムの長さの制限を越えることです.コンパイラに
@samp{-D}オプションを渡す代わりに, @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{}, @@r{[}@var{cmds}@r{]}, @@r{[}@var{init-cmds}@r{]})
@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 some changes in configuration without needlessly causing object files
@c that depend on the header file to be recompiled.
@c 
@var{header}がすでに存在していて,内容が@code{AC_OUTPUT}が書き込むものと
同じ場合は,そのまま残ります.こうすることで,ヘッダファイルに依存するオ
ブジェクトファイルを不必要に再コンパイルする必要がなく,コンフィグレーショ
ン時に変更が可能になります.

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

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

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

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

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

@node Header Templates
@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 You can then decode the configuration header using the preprocessor
@c directives:
@c 
その後で,プリプロセッサ命令を使用しているコンフィグレーションヘッダをデ
コードすることが可能です.

@example
@group
#include <conf.h>

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

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

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


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

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

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

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

@c If you give @command{autoheader} an argument, it uses that file instead
@c of @file{configure.ac} and writes the header file to the standard output
@c instead of to @file{config.h.in}.  If you give @command{autoheader} an
@c argument of @option{-}, it reads the standard input instead of
@c @file{configure.ac} and writes the header file to the standard output.
@c 
引数を@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 Also look for input files in @var{dir}.  Multiple invocations accumulate.
@c Directories are browsed from last to first.
@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
@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 the 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
@section 任意のコンフィグレーションコマンドの実行

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

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

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

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

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

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

@defmac AC_CONFIG_COMMANDS_POST (@var{cmds})
@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
@section コンフィグレーションのリンクを作成する

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

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

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

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

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

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

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



@node Subdirectories
@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 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.ac} 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 default values of the top level and of sub directory
@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.  This
@c macro may be called multiple times.
@c 
このマクロは,出力変数@code{subdirs}も,ディレクトリのリスト
@samp{@var{dir}@dots{}}に設定します.@file{Makefile}の規則は,この値をサ
ブディレクトリの定義に再帰的に使用することが可能です.このマクロは何度で
も呼び出し可能です.
@end defmac

@node 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}オプションで選択す
ることが可能です.デフォルトを変更する方法は2つあります.
@command{configure}を作成するときと,実行するときです.

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

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



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

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

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

@c Autoconf comes with a copy of @file{install-sh} that you can use.  If
@c you use @code{AC_PROG_INSTALL}, you must include either
@c @file{install-sh} or @file{install.sh} in your distribution, or
@c @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 @sc{bsd}-compatible @code{install} program.
@c 
使用可能な@file{install-sh}のコピーは,Autoconfでインストールされます. 
@code{AC_PROG_INSTALL}を使用する場合,配布物に@file{install-sh}か 
@file{install.sh}を含める必要があり,そうしない場合,@command{configure}
は見つからない旨,エラーメッセージを出力します --- たとえシステムに良い 
@code{install}があってもそうなります.この調査は,そのファイルをたまたま
入れ忘れることを阻止する安全対策で,それは@sc{bsd}互換の@code{install}プ
ログラムが無いシステムでパッケージをインストールすることを妨げます.

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

@defmac AC_PROG_LEX
@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}は,(間接的に)この
マクロを2度呼び出し,不快な``@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 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
@subsection 一般的なプログラムとファイルの調査

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

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

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

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

@defmac AC_CHECK_TOOL (@var{variable}, @var{prog-to-check-for}, @@r{[}@var{value-if-not-found}@r{]}, @@r{[}@var{path}@r{]})
@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}, @@r{[}@var{value-if-not-found}@r{]}, @@r{[}@var{path}@r{]})
@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}, @@r{[}@var{value-if-not-found}@r{]}, @@r{[}@var{path}@r{]})
@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}, @@r{[}@var{value-if-not-found}@r{]}, @@r{[}@var{path}@r{]})
@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}, @@r{[}@var{value-if-not-found}@r{]}, @@r{[}@var{path}@r{]})
@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
@section ファイル
@cindex File, checking

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

@defmac AC_CHECK_FILE (@var{file}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@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}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@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
@section ライブラリファイル
@cindex Library, checking

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

@defmac AC_CHECK_LIB (@var{library}, @var{function}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @@r{[}@var{other-libraries}@r{]})
@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 of @code{LIBS} in
@c a right-to-left (least-dependent to most-dependent) fashion such that
@c library dependencies are satisfied as a natural side-effect of
@c consecutive tests. Some linkers are very sensitive to library ordering
@c so the order in which @code{LIBS} is generated is important to reliable
@c detection of libraries.
@c 
@var{action-if-found}は,ライブラリとのリンクが成功した場合に実行するシェ
ルコマンドのリストです.@var{action-if-not-found}は,リンクが失敗した場
合に実行するシェルコマンドのリストです.@var{action-if-found}が指定され
ていない場合,デフォルトで@samp{-l@var{library}}を@code{LIBS}に加え, 
@samp{HAVE_LIB@var{library}}を(全て大文字で)定義します.このマクロは,ラ
イブラリの依存が連続的なテストの自然な副作用として満たされているように,
右から左(最小依存から最大依存)の方法で@code{LIBS}のビルドサポートを試み
ます.ライブラリの順序に注意が必要なリンカもあるので,@code{LIBS}が生成
される順序は,ライブラリの信頼できる検出にとって重要です.

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


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

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

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



@node Library Functions
@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
@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{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 and
@c if no other errors occur, @code{snprintf} and @code{vsnprintf} truncate
@c the output and return the number of bytes that ought to have been
@c produced.  Some older systems return the truncated length (e.g., GNU C
@c Library 2.0.x or IRIX 6.5), some a negative value (e.g., earlier GNU C
@c Library versions), and some the buffer length without truncation (e.g.,
@c 32-bit Solaris 7).  Also, some buggy older systems ignore the length and
@c overrun the buffer (e.g., 64-bit Solaris 7).
@c 
ISO C99標準では,出力配列があまり大きくなくその他のエラーが無い場合,
@code{snprintf}と@code{vsnprintf}は出力を切捨て,生成された出力が必要と
するバイト数を返すことになっています.古いシステムでは切り捨てられた長さ
を返したり(例えば,GNU Cライブラリ2.0.xやIRIX 6.5),負の値を返したり(例
えば,より古いバージョンの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 is 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 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 GNU Compiler Collection}),それを使用するとき問題になるはず
です.場合によっては,フォーマット文字列が明らかに読み込み専用であっても
問題になるはずです.

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

@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} (eg. @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} (eg. @command{gcc} on Alpha), which means @code{NULL} is
@c not portable.  Or it can be an array (eg. @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 (eg. @code{vsnprintf} in the GNU C Library
@c 2.1).
@c 
@code{va_list}はポインタである必要はありません.@code{struct}(例えば
Alphaの@command{gcc})にすることが可能で,それは@code{NULL}では移植性が無
いことを意味します.配列(例えばPowerPCでコンフィグレーションされた
@command{gcc})も可能で,それは関数のパラメータとして効果的に参照呼び出し
が可能であり,ライブラリルーチンで呼び出しが返す値を修正する可能性がある
(例えば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 behaviour.  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
@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 AIX,
@c the declaration of @code{alloca} must precede everything else except for
@c comments and preprocessor directives.  The @code{#pragma} directive is
@c indented so that pre-@sc{ansi} C compilers will ignore it, rather than
@c choke on it.
@c 
@code{alloca}を使用するソースファイルでは,正確に宣言するために,以下の
ようなコードで始めるべきです.AIXのバージョンによっては,@code{alloca}の
宣言を,コメントとプリプロセッサディレクティブ以外の,全ての行の前に書く
必要があります.@code{#pragma}ディレクティブは,ANSI C以前のコンパイラが
停止するのではなく無視するように,字下げを行います.

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

@defmac AC_FUNC_CHOWN
@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 is available and works (unlike the one on
@c Solaris 2.4), define @code{HAVE_FNMATCH}.
@c 
@code{fnmatch}関数が利用可能で,(SunOS 5.4と異なり)動作する場合, 
@code{HAVE_FNMATCH}を定義します.
@end defmac

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

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

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

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

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

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

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

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

@defmac AC_FUNC_GETPGRP
@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 @sc{posix.1} behavior.  On older BSD
@c systems, you must pass 0 to @code{getpgrp}, as it takes an argument and
@c behaves like @sc{posix.1}'s @code{getpgid}.
@c 
@code{getpgrp}に0を渡すとエラーになる場合,@code{GETPGRP_VOID}を定義しま
す.これは@sc{posix.1}の動作です.古いBSDシステムでは,それは引数をとり
@sc{posix.1}の@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} and @code{unlink} also incorrectly ignore trailing slashes.
@c 
@code{lstat}が後置されているスラッシュを間違って無視する場合,それ以外の
@code{unlink}のようなsymbolic-link-aware関数と,@code{unlink}も後置され
ているスラッシュを間違って無視すると仮定した方が確実です.

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

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

@defmac AC_FUNC_MEMCMP
@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_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_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 @sc{posix.1} version), define
@c @code{SETPGRP_VOID}.  Otherwise, it is the @sc{bsd} version, which takes
@c two process IDs as arguments.  This macro does not check whether
@c @code{setpgrp} exists at all; if you need to work in that situation,
@c first call @code{AC_CHECK_FUNC} for @code{setpgrp}.
@c 
@code{setpgrp}が引数を持たない(@sc{posix.1}バージョンの)場合,
@code{SETPGRP_VOID}を定義します.それ以外では,@sc{bsd}バージョンで,2
つのプロセス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 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}が他とは異なり,第2引数でバッファの型,第3引数でバッファポ
インタをとる場合,@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 @sc{posix-200x} requires @code{strerror_r} to return @code{int}, but
@c many systems (including, for example, version 2.2.4 of the 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}のエラーナンバーを返します.多くのシステムのス
レッドセーフな関数のオプション(例えば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 Check for a working @code{strnlen}, and ask for its replacement.  Some
@c architectures are know to provide broken versions of @code{strnlen}, such
@c as AIX 4.3.
@c 
@code{strnlen}が動作することを調査し,置換するかどうかを尋ねます.アーキ
テクチャによっては,AIX 4.3のように壊れたバージョンの@code{strnlen}を提
供していることが知られています.
@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

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

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

@defmac AC_CHECK_FUNC (@var{function}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@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{}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@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}が与えられている場合,関数の1つが見つかったとき実
行する,追加のシェルコードになります.最初に一致したループでブレイクする
ためには,@samp{break}を与えることで可能になります.
@var{action-if-not-found}が与えられている場合,それは関数が1つでも見つ
からないときに実行されます.
@end defmac

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

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

@defmac AC_LIBOBJ (@var{function})
@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_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
@section ヘッダファイル
@cindex Header, checking

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

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

@node Particular Headers
@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} et al. defined in
@c @file{sys/stat.h} do not work properly (returning false positives),
@c define @code{STAT_MACROS_BROKEN}.  This is the case on Tektronix UTekV,
@c Amdahl UTS and Motorola System V/88.
@c 
@file{sys/stat.h}で定義されている@code{S_ISDIR},@code{S_ISREG}等のマク
ロが正確に動作しない(間違った正の値を返す)場合,
@code{STAT_MACROS_BROKEN} を定義します.Tektronix UTekV,Amdahl UTS,そ
してMotorola System V/88の場合がそうです.
@end defmac


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

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

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

@example
AC_HEADER_STDC
AC_CHECK_FUNCS(strchr memcpy)
@end example

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

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

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

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

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

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

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

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

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

@defmac AC_HEADER_TIME
@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} or @code{struct timezone} as well as
@c @code{struct tm}.  It is best used in conjunction with
@c @code{HAVE_SYS_TIME_H}, which can be checked for using
@c @code{AC_CHECK_HEADERS(sys/time.h)}.
@c 
プログラムが,@file{time.h}と@file{sys/time.h}の両方をインクルードする可
能性がある場合,@code{TIME_WITH_SYS_TIME}を定義します.古いシステムでは,
@file{sys/time.h}が@file{time.h}をインクルードするものもありますが,
@file{time.h}は複数回のインクルードに対して保護されていないので,プログ
ラムで明示的に両方のファイルをインクルードすべきではありません.このマク
ロは,例えば,@code{struct tm}と同様,@code{struct timeval}や 
@code{struct timezone}を使用するプログラムで役に立ちます. 
@code{AC_CHECK_HEADERS(sys/time.h)}を使用していることを調査可能にする
@code{HAVE_SYS_TIME_H}と一緒に使用するのが最善の方法です.

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


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

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

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

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

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

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

@table @asis
@item @var{includes}が空の場合
@c check whether
@c 
以下の内容を調査します.

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

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

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

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

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

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

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

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

@node Declarations
@section 宣言
@cindex Declaration, checking

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

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

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

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

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

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

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

@defmac AC_CHECK_DECL (@var{symbol}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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
char *malloc (size_t *s);
#endif
@end example

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


@node Structures
@section 構造体
@cindex Structure, checking

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

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

@node Particular Structures
@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
@subsection 一般的な構造体の調査

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

@defmac AC_CHECK_MEMBER (@var{aggregate}.@var{member}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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
@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
@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_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
@subsection 一般的な型の調査

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

@defmac AC_CHECK_TYPE (@var{type}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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
@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 1compiler, typically to the empty string if Unix and
@c @samp{.exe} if Win32 or OS/2.
@c 
コンパイラ(@code{AC_PROG_CC},@code{AC_PROG_CXX},@code{AC_PROG_F77})に
対する全てのテストは,コンパイラの出力のベースとなる出力変数
@code{EXEEXT}を定義し,通常,Unixでは空の文字列でWin32やOS/2では
@samp{.exe}に定義されます.

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

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

@menu
* 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
@subsection 特定のコンパイラの特徴

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

@table @asis
@item スタティック/ダイナミックの表現
@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 
知っている限りでは,このトリックをサポートしないコンパイラは1つです.そ
れは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
@subsection 一般的なコンパイラの特徴

@defmac AC_CHECK_SIZEOF (@var{type}, @@r{[}@var{unused}@r{]}, @r{[}@var{includes} = @samp{default-includes}@r{]})
@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}, make sure to
@c include @file{stdio.h} which is required for this macro to run.
@c 
@code{SIZEOF_@var{type}}(@pxref{Standard Symbols})を@var{type}のバイトサ
イズに定義します.@samp{type}が分からない場合,そのサイズは0になります.
@var{includes}が指定されていない場合,デフォルトのインクルードが使用され
ます(@pxref{Default Includes}).@var{include}を与える場合,このマクロを
実行するために必要な@file{stdio.h}を含めてください.

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

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

@example
AC_CHECK_SIZEOF(int *)
@end example

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


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

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

@defmac AC_PROG_CC_C_O
@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 @sc{gnu} Make to choose the default C compilation
@c rule.
@c 
Cコンパイラが@samp{-c}と@samp{-o}オプションを同時に受け入れない場合,
@code{NO_MINUS_C_MINUS_O}を定義します.このマクロは,@code{AC_PROG_CC}で
見つかったコンパイラと,パスの最初の@code{cc}がそれと異なっている場合は
その両方を,実際にテストします.
@end defmac

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

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


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

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


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

@defmac AC_C_BIGENDIAN (@@r{[}@var{action-if-true}@r{]}, @@r{[}@var{action-if-false}@r{]}, @@r{[}@var{action-if-unknown}@r{]})
@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 less 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 @sc{ansi} C qualifier
@c @code{const}, define @code{const} to be empty.  Some C compilers that do
@c not define @code{__STDC__} do support @code{const}; some compilers that
@c define @code{__STDC__} do not completely support @code{const}.  Programs
@c can simply use @code{const} as if every C compiler supported it; for
@c those that don't, the @file{Makefile} or configuration header file will
@c define it as empty.
@c 
Cコンパイラが@sc{ansi} Cの修飾子@code{const}を完全にサポートしない場合, 
@code{const}を空で定義します.@code{__STDC__}を定義しないCコンパイラには,
@code{const}をサポートするものもあります.@code{__STDC__}を定義するCコン
パイラには,@code{const}を完全にサポートしないものもあります.全てのCコ
ンパイラが@code{const}をサポートするかのように,プログラムはそれを使用す
ることができます.サポートしないもののために@file{Makefile}やコンフィグ
レーションヘッダファイルは,それを空で定義します.

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

@example
const int foo;
@end example

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

@c If @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 @sc{ansi} C, so
@c you might expect that @code{volatile} is available only when
@c @code{__STDC__} is defined.  However, Ultrix 4.3's native compiler does
@c support volatile, but does not defined @code{__STDC__}.
@c 
一般的に,@code{volatile}キーワードは@sc{ansi} Cの機能なので,
@code{__STDC__}が定義されているときだけ,@code{volatile}が利用可能だと期
待するかもしれません.しかし,Ultrix 4.3のネイティブコンパイラは
@code{volatile}をサポートとしていますが,@code{__STDC__}を定義しません.
@end defmac

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

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

@defmac AC_C_PROTOTYPES
@acindex C_PROTOTYPES
@cvindex PROTOTYPES
@cvindex __PROTOTYPES
@cvindex PARAMS
@c Check to see if function prototypes are understood by the compiler.  If
@c so, 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 
関数のプロトタイプをコンパイラが理解するかどうかを知るために調査します.
その場合は@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 @sc{gnu} C compiler and @code{ioctl} does not work properly without
@c @option{-traditional}.  That usually happens when the fixed header files
@c have not been installed on an old system.  Since recent versions of the
@c @sc{gnu} C compiler fix the header files automatically when installed,
@c this is becoming a less prevalent problem.
@c 
使用している@sc{gnu} Cコンパイラと@code{ioctl}が,@samp{-traditional}無
しでは正確に動作しない場合,出力変数@code{CC}に@samp{-traditional}を加え
ます.それは通常,修正されたヘッダファイルが古いシステムにインストールさ
れていないときに発生します.@sc{gnu} Cコンパイラの最近のバージョンは,イ
ンストール時に,自動的にヘッダファイルを修正するので,これはほとんど問題
になりません.
@end defmac


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


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

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

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



@node Fortran 77 Compiler
@subsection Fortran 77コンパイラの特徴

@defmac AC_PROG_F77 (@@r{[}@var{compiler-search-list}@r{]})
@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 cf77 g77 f90 xlf90)
@end example

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

@defmac AC_PROG_F77_C_O
@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_TRY_COMPILE}
@c (@pxref{Examining Syntax}) or @code{AC_TRY_RUN} (@pxref{Run Time}),
@c making sure to first set the current language to Fortran 77
@c @code{AC_LANG(Fortran 77)} (@pxref{Language Choice}).
@c 
以下のマクロは,Fortran 77コンパイラの特徴を調査します.ここでリストアッ
プされていない特徴を調査するために,現在の言語がFortran
77@code{AC_LANG_FORTRAN77}(@pxref{Language Choice})に設定されていること
を最初に確認し,@code{AC_TRY_COMPILE}(@pxref{Examining Syntax})や
@code{AC_TRY_RUN}(@pxref{Run Time})を使用してください.


@defmac AC_F77_LIBRARY_LDFLAGS
@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のイントリンシックとランタイムライブラリ}に対して,リンカ
フラグ(例えば@samp{-L}と@samp{-l})を決定します.出力変数 @code{FLIBS}に
は,これらのフラグが設定されます.

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

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

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

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


@defmac AC_F77_DUMMY_MAIN (@@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@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 e.g. @code{MAIN__} to run the
@c user's program.  The @code{AC_F77_DUMMY_MAIN} or @code{AC_F77_MAIN}
@c macro figures out how to deal with this interaction.
@c 
多くのコンパイラでは,@code{AC_F77_LIBRARY_LDFLAGS}で見つかるFortranライ
ブラリは,Fortran I/Oのようなものを初期化したり,ユーザプログラムを実行
するために,例えば@code{MAIN__}のような名前を持つユーザ提供のエントリー
関数を呼び出す,独自の@code{main}エントリー関数を提供しています.
@code{AC_F77_DUMMY_MAIN}や@code{AC_F77_MAIN}マクロは,この相互作用を扱う
方法を理解します.

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

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

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

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

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

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

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

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

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

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

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

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

@defmac AC_F77_FUNC (@var{name}, @@r{[}@var{shellvar}@r{]})
@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
@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 them in several directories where they often reside.  If either
@c method is successful, set the shell variables @code{x_includes} and
@c @code{x_libraries} to their locations, unless they are in directories
@c the compiler searches by default.
@c 
X Window Systemのインクルードファイルとライブラリの場所を調査します.ユー
ザがコマンドラインオプションで,@samp{--x-includes=@var{dir}}と
@samp{--x-libraries=@var{dir}}を与えている場合,そのディレクトリを使用し
ます.どちらか一つまたは両方とも与えられない場合,@code{xmkmf}を平凡な
@file{Imakefile}で実行し,生成された@file{Makefile}を調査し,足りない値
を取得します.(@code{xmkmf}が存在しない等のように)失敗した場合,配置され
ることが多いディレクトリ等で検索します.いずれかの手法で成功した場合,コ
ンパイラがデフォルトで検索するディレクトリに無い限り,シェル変数
@code{x_includes}と@code{x_libraries}をその場所に設定します.

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

@defmac AC_PATH_XTRA
@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 @command{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 
large-file support@footnote{large-file support,
@url{http://www.sas.com/standards/large.file/x_open.20Mar96.html}.}のた
めにアレンジします.ホストによっては,大きなファイルにアクセスできるプロ
グラムをビルドするため,特別なコンパイラオプションが必要になります.その
ようなオプションを出力変数@code{CC}に,全て追加します.必要な場合は,
@code{_FILE_OFFSET_BITS}と@code{_LARGE_FILES}を定義します.

@c Large-file support can be disabled by configuring with the
@c @option{--disable-largefile} option.
@c 
大きなファイルのサポートは,@option{--disable-largefile}オプションを用い
てコンフィグレーションすることで利用不可能にすることが可能です.

@c If you use this macro, check that your program works even when
@c @code{off_t} is longer than @code{long}, since this is common when
@c large-file support is enabled.  For example, it is not correct to print
@c an arbitrary @code{off_t} value @code{X} with @code{printf ("%ld",
@c (long) X)}.
@c 
このマクロを使用する場合,大きなファイルのサポートが利用可能なときは,
@code{off_t}が@code{long}より長いときが一般的なので,それでもプログラム
が動作するかどうかを調査してください.例えば,@code{printf ("%ld",
(long) X)}で任意の@code{off_t}の値@code{X}を出力しても正しくなくなります.
@end defmac

@defmac AC_SYS_LONG_FILE_NAMES
@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 POSIX termios headers and functions are available on the
@c system.  If so, set the shell variable @code{am_cv_sys_posix_termios} to
@c @samp{yes}.  If not, set the variable to @samp{no}.
@c 
POSIX termiosヘッダと関数がシステムで利用可能かどうかを調査します.その
場合は,シェル変数@code{am_cv_sys_posix_termios}を@samp{yes}に設定します.
それ以外ではその変数を@samp{no}に設定します.
@end defmac

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

@defmac AC_ISC_POSIX
@acindex ISC_POSIX
@ovindex LIBS
@c For @sc{interactive unix} (@sc{isc}), add @option{-lcposix} to output
@c variable @code{LIBS} if necessary for @sc{posix} facilities.  Call this
@c after @code{AC_PROG_CC} and before any other macros that use @sc{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} (@sc{isc})に対して,@sc{posix}の機能が必要な場合,
出力変数@code{LIBS}に@option{-lcposix}を追加します.これは
@code{AC_PROG_CC}の後で,@sc{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 @sc{posix}
@c facilities.  Should be called before any macros that run the C compiler.
@c 
Minixの場合,@code{_MINIX}と@code{_POSIX_SOURCE}を定義し, 
@code{_POSIX_1_SOURCE}を2と定義します.これでPOSIXの機能が使用可能になり
ます.Cコンパイラを実行するあらゆるマクロの前で呼び出すべきです.
@end defmac




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

@node Writing Tests
@chapter テストを書く

@c If the existing feature tests don't do something you need, you have to
@c write new ones.  These macros are the building blocks.  They provide
@c ways for other macros to check whether various kinds of features are
@c available and report the results.
@c 
既存の特徴テストでは必要なことができない場合,新しいものを書く必要があり
ます.これらのマクロはブロックの組み立てです.他のマクロで様々な特徴が利
用可能かどうか調査し結果を報告するための方法を提供します.

@c This chapter contains some suggestions and some of the reasons why the
@c existing tests are written the way they are.  You can also learn a lot
@c about how to write Autoconf tests by looking at the existing ones.  If
@c something goes wrong in one or more of the Autoconf tests, this
@c information can help you understand the assumptions behind them, which
@c might help you figure out how to best solve the problem.
@c 
この章には,提案と,既存のテストが書かれている方法の理由も含んでいます.
また,既存のものを見ることで,Autoconfテストの書き方について知ることが可
能です.Autoconfのテストの一つ以上がうまくいかない場合,この情報は背後で
行われていることの理解を助けるので,最善の問題解決法が分かるでしょう.

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

@c When you write a feature test that could be applicable to more than one
@c software package, the best thing to do is encapsulate it in a new macro.
@c @xref{Writing Autoconf Macros}, for how to do that.
@c 
1つ以上のソフトウェアパッケージに適用可能な特徴テストを書いているとき,
新しいマクロに要約することがベストです.その方法は,@xref{Writing
Autoconf Macros}.

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

@node Examining Declarations
@section 宣言の調査

@c The macro @code{AC_TRY_CPP} is used to check whether particular header
@c files exist.  You can check for one at a time, or more than one if you
@c need several header files to all exist for some purpose.
@c 
マクロ@code{AC_TRY_CPP}は,特定のヘッダファイルが存在するかどうか調査す
るために使用します.目的があって,複数のヘッダファイルが全て必要な場合で
も,一度に一つまたはそれ以上調査することが可能です.

@defmac AC_TRY_CPP (@var{input}, @@r{[}@var{action-if-true}@r{]}, @@r{[}@var{action-if-false}@r{]})
@acindex TRY_CPP
@c If the preprocessor produces no error messages while processing the
@c @var{input} (typically includes), run shell commands
@c @var{action-if-true}.  Otherwise run shell commands
@c @var{action-if-false}.  Beware that @var{input} is double quoted.  Shell
@c variable, back quote, and backslash substitutions are performed on
@c @var{input}.
@c 
プリプロセッサが@var{input} (通常はインクルード)を処理している間にエラー
メッセージを生成しない場合,シェルコマンド@var{action-if-true}を実行しま
す.それ以外では,シェルコマンド@var{action-if-false}を実行します.
@var{input}は二重に引用符で囲まれていることに注意してください.シェル変
数,バッククオート,そしてバックスラッシュの置換は,@var{input}で実行さ
れます.

@c This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
@c @option{-g}, @option{-O}, etc. are not valid options to many C
@c preprocessors.
@c 
@samp{-g},@samp{-O}等は,多くのCプリプロセッサで正当なオプションではな
いため,このマクロは@code{CPPFLAGS}を使用しますが,@code{CFLAGS}は使用し
ません.
@end defmac

@c Here is how to find out whether a header file contains a particular
@c declaration, such as a typedef, a structure, a structure member, or a
@c function.  Use @code{AC_EGREP_HEADER} instead of running @code{grep}
@c directly on the header file; on some systems the symbol might be defined
@c in another header file that the file you are checking @samp{#include}s.
@c 
ヘッダファイルが,typedef,構造体,構造体メンバー,あるいは関数のような
特定の宣言を含んでいるかどうかを調査する方法は以下のようになります.ヘッ
ダファイルで直接@code{grep}を実行する代わりに,@code{AC_EGREP_HEADER}を
使用します.調査した@samp{#include}ファイル以外のヘッダファイルに,シン
ボルを定義しているシステムもあります.

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

@c To check for C preprocessor symbols, either defined by header files or
@c predefined by the C preprocessor, use @code{AC_EGREP_CPP}.  Here is an
@c example of the latter:
@c 
ヘッダファイルの定義や,Cプリプロセッサの前定義といった,Cプリプロセッサ
シンボルを調査するために@code{AC_EGREP_CPP}を使用してください.その例は
以下のようになります.

@example
AC_EGREP_CPP(yes,
[#ifdef _AIX
  yes
#endif
], is_aix=yes, is_aix=no)
@end example

@defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@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 @code{egrep} regular expression @var{pattern}, execute shell commands
@c @var{action-if-found}, otherwise execute @var{action-if-not-found}.
@c 
@var{program}はCやC++プログラムのテキストで,そこでは,シェル変数,バッ
ククオートと,バックスラッシュの代入が行われます.@var{program}上でのプ
リプロセッサの実行の出力が,@code{egrep}の正規表現@var{pattern}とマッチ
する場合,シェルコマンドの@var{action-if-found}を実行し,それ以外では 
@var{action-if-not-found}を実行します.

@c This macro calls @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP} (depending
@c on which language is current, @pxref{Language Choice}), if it hasn't
@c been called already.
@c 
このマクロは,それまでに呼ばれていなければ,@code{AC_PROG_CPP}や 
@code{AC_PROG_CXXCPP}を(現在の言語に依存して@pxref{Language Choice})呼び
出します.
@end defmac

@node Examining Syntax
@section 構文の調査

@c To check for a syntax feature of the C, C++ or Fortran 77 compiler, such
@c as whether it recognizes a certain keyword, use @code{AC_TRY_COMPILE} to
@c try to compile a small program that uses that feature.  You can also use
@c it to check for structures and structure members that are not present on
@c all systems.
@c 
C,C++,またはFortran 77コンパイラが,あるキーワードを理解するかどうかと
いった構文の特徴を調査するため,@code{AC_TRY_COMPILE}をそれらの特徴を使
用している小さなプログラムをコンパイルを試みるために使用してください.全
てのシステムで,構造体や構造体メンバの存在を調査するために使用することも
可能です.

@defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@acindex TRY_COMPILE
@c Create a test program in the current language (@pxref{Language Choice})
@c to see whether a function whose body consists of @var{function-body} can
@c be compiled.  If the file compiles successfully, run shell commands
@c @var{action-if-found}, otherwise run @var{action-if-not-found}.
@c 
@var{function-body}から成り立つ関数がコンパイル可能かどうかを知るために, 
現在の言語(@pxref{Language Choice})でテストプログラムを作成します.ファ
イルが正しくコンパイルされる場合,シェルコマンド@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.
@c 
CとC++に対して,@var{includes}は@var{function-body}のコードが必要とする
@code{#include}文になります(現在選択されている言語がFortran 77の場合は無
視されます).このマクロは,現在選択されている言語がCやC++の場合,
@code{CFLAGS}や@code{CXXFLAGS}も使用し,コンパイル時には @code{CPPFLAGS} 
も使用します.Fortran 77が現在選択されている言語の場合,コンパイル時に
@code{FFLAGS}を使用します.

@c This macro does not try to link; use @code{AC_TRY_LINK} if you need to
@c do that (@pxref{Examining Libraries}).
@c 
このマクロはリンクを試みません. 必要な場合は@code{AC_TRY_LINK}を使用し
てください(@pxref{Examining Libraries}).
@end defmac

@node Examining Libraries
@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}
@c or @code{ar} on the C library to try to figure out which functions are
@c available.  Trying to link with the function is usually a more reliable
@c approach because it avoids dealing with the variations in the options
@c and output formats of @code{nm} and @code{ar} and in the location of the
@c standard libraries.  It also allows configuring for cross-compilation or
@c checking a function's runtime behavior if needed.  On the other hand, it
@c can be slower than scanning the libraries once.
@c 
ライブラリ,関数,またはグローバル変数を調査するため,Autoconfの
@command{configure}スクリプトは,それを使用している小さなプログラムのコ
ンパイルとリンクを試みます.これはMetaconfigとは異なり,デフォルトで,C 
ライブラリで関数が利用可能かどうか判定するために@code{nm}や@code{ar}を使
用します.オプションと@code{nm}と@code{ar}の出力の違いと,標準ライブラリ
の位置の違いを処理することを避けるので,通常,関数のリンクの試みは信頼性
が高い方法です.クロスコンパイルや,必要な場合は関数の実行時の動作を調査
についても,コンフィグレーション時に行なうことが可能です.一方,1度のラ
イブラリスキャンより遅くなります.

@c A few systems have linkers that do not return a failure exit status when
@c there are unresolved functions in the link.  This bug makes the
@c configuration scripts produced by Autoconf unusable on those systems.
@c However, some of them can be given options that make the exit status
@c correct.  This is a problem that Autoconf does not currently handle
@c automatically.  If users encounter this problem, they might be able to
@c solve it by setting @code{LDFLAGS} in the environment to pass whatever
@c options the linker needs (for example, @option{-Wl,-dn} on @sc{mips
@c risc/os}).
@c 
リンクで未解決のシンボルがあるとき,失敗という終了ステータスを戻さないリ
ンカを持つシステムが無いわけではありません.このバグのため,Autoconfが生
成したコンフィグレーションスクリプトは,これらのシステムでは使用不可能で
す.しかし,終了ステータスを正しくするオプションが与えられているものもあ
ります.この問題は現在,Autoconfが自動的に正しく処理できません.ユーザが
この問題に遭遇した場合,リンカが必要なオプション(例えば,MIPS RISC/OSで
の@samp{-Wl,-dn})を環境変数の@code{LDFLAGS}に渡して設定することで解決可
能かもしれません.

@c @code{AC_TRY_LINK} is used to compile test programs to test for
@c functions and global variables.  It is also used by @code{AC_CHECK_LIB}
@c to check for libraries (@pxref{Libraries}), by adding the library being
@c checked for to @code{LIBS} temporarily and trying to link a small
@c program.
@c 
@code{AC_TRY_LINK}は,関数とグローバル変数に対するテストのため,テストプ
ログラムをコンパイルするために使用されます.ライブラリを調査する 
@code{AC_CHECK_LIB}でも,調査しているライブラリを一時的に@code{LIBS}に追
加したり,小さなプログラムのリンクを試みたりすることで,使用されています
(@pxref{Libraries}).

@defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@acindex TRY_LINK
@c Depending on the current language (@pxref{Language Choice}), create a
@c test program to see whether a function whose body consists of
@c @var{function-body} can be compiled and linked.  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の場合は無視
されます).このマクロは,現在選択されている言語が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}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]})
@acindex TRY_LINK_FUNC
@c Depending on the current language (@pxref{Language Choice}), create a
@c test program to see whether a program whose body consists of
@c a prototype of and a call to @var{function} can be compiled and linked.
@c 
現在の言語に依存して(@pxref{Language Choice}),プロトタイプと
@var{function}の呼び出しを含むプログラムの,コンパイルとリンクが可能かど
うか判定するために,テストプログラムを作成します.

@c If the file compiles and links successfully, run shell commands
@c @var{action-if-found}, otherwise run @var{action-if-not-found}.
@c 
ファイルのコンパイルとリンクが成功した場合,シェルコマンドの
@var{action-if-found}を実行し,それ以外では@var{action-if-not-found}を実
行します.
@end defmac



@node Run Time
@section 実行時の動作の調査

@c Sometimes you need to find out how a system performs at run time, such
@c as whether a given function has a certain capability or bug.  If you
@c can, make such checks when your program runs instead of when it is
@c configured.  You can check for things like the machine's endianness when
@c your program initializes itself.
@c 
関数の能力やバグといった,実行時のシステムの動作を知る必要があるかもしれ
ません.できれば,コンフィグレーション時ではなくプログラムの実行時に調査
してください.プログラム自身の初期化時に,マシンのエンディアンの様なもの
は調査することが可能です.

@c If you really need to test for a run-time behavior while configuring,
@c you can write a test program to determine the result, and compile and
@c run it using @code{AC_TRY_RUN}.  Avoid running test programs if
@c possible, because this prevents people from configuring your package for
@c cross-compiling.
@c 
コンフィグレーション時に,実行時の動作をテストする必要が本当にある場合,
結果を決定し,@code{AC_TRY_RUN}を使用してコンパイルと実行を行なうために,
テストプログラムを書くことが可能です.クロスコンパイルでパッケージをコン
フィグレーションする邪魔になるなるので,できれば,テストプログラムの実行
は避けてください.

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

@node Test Programs
@subsection テストプログラムの実行

@c Use the following macro if you need to test run-time behavior of the
@c system while configuring.
@c 
コンフィグレーション時に実行時の動作をテストする必要がある場合,以下のマ
クロを使用してください.

@defmac AC_TRY_RUN (@var{program}, @@r{[}@var{action-if-true}@r{]}, @@r{[}@var{action-if-false}@r{]}, @@r{[}@var{action-if-cross-compiling}@r{]})
@acindex TRY_RUN
@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 This macro double quotes @var{program}, the text of a program in the
@c current language (@pxref{Language Choice}), on which shell variable and
@c back quote substitutions are performed.  This macro uses @code{CFLAGS}
@c or @code{CXXFLAGS}, @code{CPPFLAGS}, @code{LDFLAGS}, and @code{LIBS}
@c when compiling.
@c 
このマクロは@var{program}を二重に引用符で囲み,それは現在の言語
(@pxref{Language Choice})のプログラムのテキストで,シェル変数とバックク
オートの置換が実行されます.このマクロはコンパイル時に,@code{CFLAGS}や
@code{CXXFLAGS},@code{CPPFLAGS},@code{LDFLAGS},そして@code{LIBS}を使
用します.

@c If the C compiler being used does not produce executables that run on
@c the system where @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 
使用される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 shall 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の管理者が``バグレポート''の受信の
増加に飽き飽きしているので元に戻しました.
@end defmac

@c Try to provide a pessimistic default value to use when cross-compiling
@c makes run-time tests impossible.  You do this by passing the optional
@c last argument to @code{AC_TRY_RUN}.  @command{autoconf} prints a warning
@c message when creating @command{configure} each time it encounters a call to
@c @code{AC_TRY_RUN} with no @var{action-if-cross-compiling} argument
@c given.  You may ignore the warning, though users will not be able to
@c configure your package for cross-compiling.  A few of the macros
@c distributed with Autoconf produce this warning message.
@c 
クロスコンパイルで実行時のテストが不可能なとき,使用する悲観的なデフォル
ト値を与えてみてください.@code{AC_TRY_RUN}のオプションの最後の引数で渡
します.@command{configure}を作成するたびごとに,@code{AC_TRY_RUN}の呼び
出しで@var{action-if-cross-compiling}引数が与えられないときは,
@command{autoconf} は警告メッセージを出力します.警告を無視することもで
きますが,ユーザは,パッケージのクロスコンパイルのコンフィグレーションが
できません.Autoconf が配布するマクロには,この警告メッセージを生成する
ものもあります.

@c To configure for cross-compiling you can also choose a value for those
@c parameters based on the canonical system name (@pxref{Manual
@c Configuration}).  Alternatively, set up a test results cache file with
@c the correct values for the host system (@pxref{Caching Results}).
@c 
クロスコンパイルのコンフィグレーションのため,標準的なシステム名 
(@pxref{Manual Configuration})に基づくパラメータに対する値を選択すること
も可能です.代わりに,ホストシステムに対する正しい値で,テスト結果のキャッ
シュファイルを設定してください(@pxref{Caching Results}).

@c To provide a default for calls of @code{AC_TRY_RUN} that are embedded in
@c other macros, including a few of the ones that come with Autoconf, you
@c can call @code{AC_PROG_CC} before running them.  Then, if the shell
@c variable @code{cross_compiling} is set to @samp{yes}, use an alternate
@c method to get the results instead of calling the macros.
@c 
Autoconfで提供される2,3のものを含め,@code{AC_TRY_RUN}が埋め込まれて
いる他のマクロの呼び出しに対してデフォルトを与えるため,実行する前に 
@code{AC_PROG_CC}を呼び出すことが可能です.シェル変数 
@code{cross_compiling}が@samp{yes}に設定されている場合,マクロを呼び出す
代わりに,結果を得るための代わりの手法を使用します.


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

@c Test programs should not write anything to the standard output.  They
@c should return 0 if the test succeeds, nonzero otherwise, so that success
@c can be distinguished easily from a core dump or other failure;
@c segmentation violations and other failures produce a nonzero exit
@c status.  Test programs should @code{exit}, not @code{return}, from
@c @code{main}, because on some systems (old Suns, at least) the argument
@c to @code{return} in @code{main} is ignored.
@c 
テストプログラムは,標準出力に何かを書き出すべきではありません.コアダン
プや他の失敗と簡単に区別できるように,成功した場合は0,それ以外ではゼロ
以外を返すべきです.セグメンテーション違反やその他の失敗は,終了ステータ
スでゼロ以外を生成します.@code{main}内の@code{return}の引数を無視するシ
ステム(古いSun では少なくとも)もあるので,テストプログラムの@code{main} 
では@code{return}ではなく@code{exit}を使用するべきです.

@c Test programs can use @code{#if} or @code{#ifdef} to check the values of
@c preprocessor macros defined by tests that have already run.  For
@c example, if you call @code{AC_HEADER_STDC}, then later on in
@c @file{configure.ac} you can have a test program that includes an
@c @sc{ansi} C header file conditionally:
@c 
既に実行されたテストで定義されたプリプロセッサの値を調査するため,テスト
プログラムで@code{#if}や@code{#ifdef}を使用することが可能です.例えば, 
@code{AC_HEADER_STDC}を呼び出す場合,@file{configure.ac}の後の方で,暫定
的にANSI Cヘッダファイルをインクルードするテストプログラムを使用すること
が可能です.

@example
@group
#if STDC_HEADERS
# include <stdlib.h>
#endif
@end group
@end example

@c If a test program needs to use or create a data file, give it a name
@c that starts with @file{conftest}, such as @file{conftest.data}.  The
@c @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
@subsection 関数のテスト

@c Function declarations in test programs should have a prototype
@c conditionalized for C++.  In practice, though, test programs rarely need
@c functions that take arguments.
@c 
テストプログラムでの関数宣言には,C++に対する条件付のプロトタイプを持た
せるべきです.しかし,テストプログラムで引数をとる関数が必要になることは,
実際には滅多にありません.

@example
#ifdef __cplusplus
foo (int i)
#else
foo (i) int i;
#endif
@end example

@c Functions that test programs declare should also be conditionalized for
@c C++, which requires @samp{extern "C"} prototypes.  Make sure to not
@c include any header files containing clashing prototypes.
@c 
テストプログラムが宣言する関数には,@samp{extern "C"}プロトタイプを要求
するC++に対する条件付けも行なうべきです.壊れたプロトタイプを含んでいる
ヘッダファイルをインクルードしていないことを確かめてください.

@example
#ifdef __cplusplus
extern "C" void *malloc (size_t);
#else
char *malloc ();
#endif
@end example

@c If a test program calls a function with invalid parameters (just to see
@c whether it exists), organize the program to ensure that it never invokes
@c that function.  You can do this by calling it in another function that is
@c never invoked.  You can't do it by putting it after a call to
@c @code{exit}, because GCC version 2 knows that @code{exit} never returns
@c and optimizes out any code that follows it in the same block.
@c 
テストプログラムが(その存在の確認のためにだけ)無効なパラメータで関数を呼
び出す場合,その関数を決して呼び出さないことを保証するようにプログラムを
構成してください.決して呼び出されないそれ以外の他の関数から関数を呼び出
すことで,こうすることが可能です.GCCバージョン2は,@code{exit}は値を返
さず,同じブロックにあるそれ以降のコードを最適化で外してしまうことが知ら
れているので,@code{exit}の呼び出し以降にそれを書き込まないでください.

@c If you include any header files, make sure to call the functions
@c relevant to them with the correct number of arguments, even if they are
@c just 0, to avoid compilation errors due to prototypes.  GCC version 2
@c has internal prototypes for several functions that it automatically
@c inlines; for example, @code{memcpy}.  To avoid errors when checking for
@c them, either pass them the correct number of arguments or redeclare them
@c with a different return type (such as @code{char}).
@c 
ヘッダファイルをインクルードする場合は,たとえ引数が0だけであっても,プ
ロトタイプで生じるコンパイルエラーを避けるため,正しい数の引数を適切にし
て関数を呼び出していることを確認してください.GCCのバージョン2は,自動的
にインライン化される関数プロトタイプ,例えば@code{memcpy}もあります.そ
れらを調査しているときのエラーを避けるため,正しい数の引数を与えるか,
(@code{char}のような)異なる戻り値で再定義してください.

@node Systemology
@section システム

@c This section aims at presenting some systems and pointers to
@c documentation.  It may help you addressing particular problems reported
@c by users.
@c 
このセクションは,ドキュメントへのシステムとポインタを紹介することを目的
としています.ユーザが報告する特定の問題を解決するとき役に立つでしょう

@table @asis
@item @sc{qnx 4.25}
@cindex @sc{qnx 4.25}
@c FIXME: Please, if you feel like writing something more precise,
@c it'd be great.  In particular, I can't understand the difference with
@c QNX Neutrino.
@c 
@c @sc{qnx} is a realtime operating system running on Intel architecture
@c meant to be scalable from the small embedded systems to hundred
@c processor super-computer.  It claims to be @sc{posix} certified. More
@c information is available on the @href{www.qnx.com, @sc{qnx} home page},
@c including the @href{http://support.qnx.com/support/docs/qnx4/, @sc{qnx}
@c man pages}.
@c 
@sc{qnx}は,小さな組み込みシステムから百個のプロセッサを持つスーパーコン
ピュータまで幅広く利用できる,Intelアーキテクチャまで動作するリアルタイ
ムオペレーティングシステムです.それは@sc{posix}であることが証明されてい
ると主張しています.@sc{qnx} home page@footnote{@sc{qnx} home page,
@url{www.qnx.com}.}で,より多くの情報が利用可能で,そこには,@sc{qnx}
man pages@footnote{@sc{qnx} man pages,
@url{http://support.qnx.com/support/docs/qnx4}.}もあります.
@end table


@node Multiple Cases
@section 複数のケース文

@c Some operations are accomplished in several possible ways, depending on
@c the @sc{unix} variant.  Checking for them essentially requires a ``case
@c statement''.  Autoconf does not directly provide one; however, it is
@c easy to simulate by using a shell variable to keep track of whether a
@c way to perform the operation has been found yet.
@c 
処理によっては,それぞれ異なる@sc{unix}に依存して,考えられるいくつかの
方法で達成されるものもあります.それを本質的に調査するためには,``case 
文'' が必要です.Autoconfは直接それを提供していません.しかし,実行する
処理が見つかったかどうかの追跡を続けるため,シェル変数を使用することで簡
単にシミュレート可能です.

@c Here is an example that uses the shell variable @code{fstype} to keep
@c track of whether the remaining cases need to be checked.
@c 
残っているcaseを調査する必要があるかどうかに関係なく追跡を続けるために,
シェル変数@code{fstype}を使用する例は,以下のようになります.

@example
@group
AC_MSG_CHECKING([how to get file system type])
fstype=no
# The order of these tests is important.
AC_TRY_CPP([#include <sys/statvfs.h>
#include <sys/fstyp.h>],
           [AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4])
if test $fstype = no; then
  AC_TRY_CPP([#include <sys/statfs.h>
#include <sys/fstyp.h>],
             [AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3])
fi
if test $fstype = no; then
  AC_TRY_CPP([#include <sys/statfs.h>
#include <sys/vmount.h>],
             [AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX])
fi
# (more cases omitted here)
AC_MSG_RESULT([$fstype])
@end group
@end example

@node Language Choice
@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 (@@r{[}@var{language}@r{]})
@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.
# ...
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



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

@node Results
@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}で特徴の存在を定義すると,その情報を記録するため
に何ができるのでしょうか?そうする方法は4種類あります.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
@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}, @@r{[}@var{value}@r{]}, @@r{[}@var{description}@r{]})
@acindex DEFINE
@c Define C preprocessor variable @var{variable}.  If @var{value} is given,
@c set @var{variable} to that value (verbatim), otherwise set it to 1.
@c @var{value} should not contain literal newlines, and if you are not
@c using @code{AC_CONFIG_HEADERS} it should not contain any @samp{#}
@c characters, as @code{make} tends to eat them.  To use a shell variable
@c (which you need to do in order to define a value containing the M4 quote
@c characters @samp{[} or @samp{]}), use @code{AC_DEFINE_UNQUOTED} instead.
@c @var{description} is only useful if you are using
@c @code{AC_CONFIG_HEADERS}.  In this case, @var{description} is put into
@c the generated @file{config.h.in} as the comment before the macro define.
@c The following example defines the C preprocessor variable
@c @code{EQUATION} to be the string constant @samp{"$a > $b"}:
@c 
Cプリプロセッサ変数@var{variable}を定義します.@var{value}が与えられる場
合は,@var{variable}にその値を(そのまま)設定し,それ以外では1に設定しま
す.@var{value}は改行のリテラルを含むべきではなく, 
@code{AC_CONFIG_HEADERS}を使用しない場合,@code{make}が処理してしまうの
で,@samp{#}文字を含めるべきではありません.シェル変数(M4の引用符文字
@samp{[}や@samp{]}を含む定義値が必要なもの)を使用するために,代わりに
@code{AC_DEFINE_UNQUOTED}を使用してください.@var{description}は, 
@code{AC_CONFIG_HEADER}を使用する場合だけ役に立ちます.この場合, 
@var{description}は,生成された@file{config.h.in}に,マクロ定義前のコメ
ントとして書き込まれます.以下の例は,Cプリプロセッサ変数@code{EQUATION} 
を文字定数@samp{"$a > $b"}と定義します.

@example
AC_DEFINE(EQUATION, "$a > $b")
@end example
@end defmac

@defmac AC_DEFINE_UNQUOTED (@var{variable}, @@r{[}@var{value}@r{]}, @@r{[}@var{description}@r{]})
@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}で,3つのシェ
ル展開が---一度に---実行されます.変数の展開(@samp{$}),コマンドの置換
(@samp{`}),そしてバックスラッシュエスケープ(@samp{\})です.値の中のシン
グルクオートとダブルクオートの文字列,特別な意味を持ちません.
@var{variable}や @var{value}がシェル変数のときは,@code{AC_DEFINE}の代わ
りにこのマクロを使用してください.以下がその例です.

@example
AC_DEFINE_UNQUOTED(config_machfile, "$machfile")
AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)
AC_DEFINE_UNQUOTED($ac_tr_hdr)
@end example
@end defmac

@c Due to the syntactical bizarreness of the Bourne shell, do not use
@c semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
@c calls from other macro calls or shell code; that can cause syntax errors
@c in the resulting @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
@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{出力変数}を設定することで,
それは,@command{configure}が出力したファイルの中に,シェル変数の値を代
入することです.以下の2つのマクロで新しい出力変数を作ります.利用可能な
出力変数のリストは,@xref{Preset Output Variables}.

@defmac AC_SUBST (@var{variable}, @@r{[}@var{value}@r{]})
@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 @samp{variable}.
@c 
@var{value}が与えられている場合,さらにそれも@samp{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 different environments can be extremely
@c dangerous.  If for instance the user runs @samp{CC=bizarre-cc
@c ./configure}, then the cache, @file{config.h} and many other output
@c files will depend upon @command{bizarre-cc} being the C compiler.  If
@c for some reason the user runs @command{/configure} again, or if it is
@c run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
@c and @pxref{config.status Invocation}), then the configuration can be
@c inconsistent, composed of results depending upon two different
@c compilers.
@c 
異なる環境変数で@command{configure}を実行することは非常に危険です.例え
ば,ユーザが@samp{CC=bizarre-cc ./configure}を実行した場合,キャッシュ,
@file{config.h},そして多くの出力ファイルは,Cコンパイラが
@command{bizarre-cc}だということに依存します.理由があって,ユーザが再び
@command{./configure}を実行した場合や,@samp{./config.status --recheck} 
でそれが実行される場合(@xref{Automatic Remaking}.  @pxref{config.status
Invocation}),コンフィグレーションは矛盾し,二つの異なるコンパイラに依存
した結果で構成されます.

@c Such variables are named @dfn{precious variables}, and can be declared
@c as such by @code{AC_ARG_VAR}.
@c 
そのような変数は@dfn{貴重な変数(precious variables)}と命名されていて,
@code{AC_ARG_VAR}のようなもので宣言することが可能です.

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

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

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

@example
$ @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
@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{キャッシュファイル}に保存します(@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 
これは,キャッシュが利用可能な場合,失敗します.このマクロの2回目の実行
で,@code{TRUE_WORKS}は@emph{定義されていないでしょう}.適切な実装は以下
のようになります.

@example
@group
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
                [ac_cv_shell_true_works=no
                 true && ac_cv_shell_true_works=yes])
 if test $ac_cv_shell_true_works = yes; then
   AC_DEFINE([TRUE_WORKS], 1
             [Define if `true(1)' works properly.])
 fi
])
@end group
@end example

@c Also, @var{commands-to-set-it} should not print any messages, for
@c example with @code{AC_MSG_CHECKING}; do that before calling
@c @code{AC_CACHE_VAL}, so the messages are printed regardless of whether
@c the results of the check are retrieved from the cache or determined by
@c running the shell commands.
@c 
また,@var{commands-to-set-it}では,例えば@code{AC_MSG_CHECKING}を用いて
メッセージを出力すべきではありません.調査の結果がキャッシュから取り出さ
れるか,シェルコマンドの実行で決定されるかに依存せずメッセージが出力され
るので,@code{AC_CACHE_VAL}の呼び出しの前にしてください.

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

@node 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}_@r{[}@var{additional-options}@r{]}
@end example

@noindent
@c for example, @samp{ac_cv_header_stat_broken} or
@c @samp{ac_cv_prog_gcc_traditional}.  The parts of the variable name are:
@c 
例えば,@samp{ac_cv_header_stat_broken}や
@samp{ac_cv_prog_gcc_traditional}です.変数名の一部は以下のようにします.

@table @asis
@item @var{package-prefix}
@c An abbreviation for your package or organization; the same prefix you
@c begin local Autoconf macros with, except lowercase by convention.
@c For cache values used by the distributed Autoconf macros, this value is
@c @samp{ac}.
@c 
パッケージや組織の省略です.小文字の慣習以外は,ローカルなAutoconfマクロ
と同じプレフィクスで開始します.配布されているAutoconfマクロで使用される
キャッシュ値に対して,この値は@samp{ac}になっています.

@item @code{_cv_}
@c Indicates that this shell variable is a cache value. This string
@c @emph{must} be present in the variable name, including the leading
@c underscore.
@c 
シェル変数がキャッシュ値であることを示します.この文字列は,前置されるア
ンダースコアを含め,変数名に存在する@emph{必要があります}.

@item @var{value-type}
@c A convention for classifying cache values, to produce a rational naming
@c system.  The values used in Autoconf are listed in @ref{Macro Names}.
@c 
合理的な命名システムを生成するため,キャッシュ値の分類のための慣習です.
Autoconfで使用する値は,@ref{Macro Names}にリストがあります.

@item @var{specific-value}
@c Which member of the class of cache values this test applies to.
@c For example, which function (@samp{alloca}), program (@samp{gcc}), or
@c output variable (@samp{INSTALL}).
@c 
このテストが適応しているキャッシュ値のクラスのメンバーです.例えば,関数
(@samp{alloca}),プログラム(@samp{gcc}),または,出力変数
(@samp{INSTALL})です.

@item @var{additional-options}
@c Any particular behavior of the specific member that this test applies to.
@c For example, @samp{broken} or @samp{set}.  This part of the name may
@c be omitted if it does not apply.
@c 
このテストが適応している特定のメンバーの特定の動作です.例えば,
@samp{broken}や@samp{set}です.適応されない場合,名前のこの部分は省略さ
れます.
@end table

@c The values assigned to cache variables may not contain newlines.
@c Usually, their values will be boolean (@samp{yes} or @samp{no}) or the
@c names of files or functions; so this is not an important restriction.
@c 
キャッシュ変数に割り当てられた値には,改行を含めてはなりません.通常,そ
れらの値は真偽値(@samp{yes}や@samp{no}),あるいはファイルや関数の名前で
す.そのため,これは重要な制限ではありません.

@node Cache Files
@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
@subsection キャッシュのチェックポイント方法

@c If your configure script, or a macro called from configure.ac, happens
@c to abort the configure process, it may be useful to checkpoint the cache
@c a few times at key points using @code{AC_CACHE_SAVE}.  Doing so will
@c reduce the amount of time it takes to re-run the configure script with
@c (hopefully) the error that caused the previous abort corrected.
@c 
@command{configure}スクリプトや@file{configure.ac}から呼び出されるマクロ
がコンフィグレーション処理を中断する場合,2,3回@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 configure.ac.
@c 
キャッシュファイルに全てのキャッシュ値を書き込みます.自動的に 
@code{AC_OUTPUT}から呼び出されますが,@file{configure.ac}のキーポイント
で@code{AC_CACHE_SAVE}を呼び出すことは,大変役に立つはずです.
@end defmac

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

@example
@r{ @dots{} AC_INIT, etc. @dots{}}
@group
# Checks for programs.
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
@r{ @dots{} more program checks @dots{}}
AC_CACHE_SAVE
@end group

@group
# Checks for libraries.
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, connect)
@r{ @dots{} more lib checks @dots{}}
AC_CACHE_SAVE
@end group

@group
# Might abort...
AM_PATH_GTK(1.0.2,, [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
@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}, @@r{[}@var{exit-status}@r{]})
@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_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
@chapter M4でのプログラミング

@c Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
@c convenient macros for pure M4 programming, and @dfn{M4sh}, which
@c provides macros dedicated to shell script generation.
@c 
Autoconfは,2つのレイヤーのトップに書かれています.それは,純粋なM4プロ
グラムで便利なマクロを提供している@dfn{M4sugar}と,シェルスクリプトの生
成に専念するマクロを提供する@dfn{M4sh}です.

@c As of this version of Autoconf, these two layers are still experimental,
@c and their interface might change in the future.  As a matter of fact,
@c @emph{anything that is not documented must not be used}.
@c 
このバージョンのAutoconfでは,2つのレイヤーはまだ実験段階で,そのインター
フェースは将来変更される可能性があります.実際問題,@emph{文章化されてい
ないものは使用しないでください}.

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

@node 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@dots{}

@c The most common brokenness of existing macros is an improper quotation.
@c This section, which users of Autoconf can skip, but which macro writers
@c @emph{must} read, first justifies the quotation scheme that was chosen
@c for Autoconf and then ends with a rule of thumb.  Understanding the
@c former helps one to follow the latter.
@c 
既存のマクロの最も一般的な問題は,不適当な引用符です.このセクションでは,
Autoconfのユーザは飛ばすことができますが,マクロを書く人は読む@emph{必要
があり},最初にAutoconfで採択された引用符を利用する方法を正当化し,最後
に経験則を述べます.前者を理解すると後者で役立ちます.

@menu
* Active Characters::           Characters that change the behavior of m4
* One Macro Call::              Quotation and one macro call
* Quotation and Nested Macros::  Macros calling macros
* 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
@subsection アクティブな文字

@c To fully understand where proper quotation is important, you first need
@c to know what are the special characters in Autoconf: @samp{#} introduces
@c a comment inside which no macro expansion is performed, @samp{,}
@c separates arguments, @samp{[} and @samp{]} are the quotes themselves,
@c and finally @samp{(} and @samp{)} (which @code{m4} tries to match by
@c pairs).
@c 
適切な引用符の重要性を完全に理解するため,最初にAutoconfでの特殊な文字を
しる必要があります.@samp{#}はマクロ展開が実行されない内部コメントの導入
で,@samp{,}は引数のセパレータ,@samp{[}と@samp{]}はそれらの引用符,そし
て最後は,(@code{m4}が対の一致を試みる)@samp{(}と@samp{)}です.

@c In order to understand the delicate case of macro calls, we first have
@c to present some obvious failures.  Below they are ``obvious-ified'',
@c although you find them in real life, they are usually in disguise.
@c 
マクロ呼び出しの微妙な状況を理解するために,最初に明らかな失敗を紹介しな
ければならないでしょう.以下は``明らかなified''で,実生活でも見つかるで
しょうが,それらは通常ごまかしです.

@c Comments, introduced by a hash and running up to the newline, are opaque
@c tokens to the top level: active characters are turned off, and there is
@c no macro expansion:
@c 
ハッシュと改行まで実行することで導入されるコメントは,トップレベルへの不
明瞭なトークンです.アクティブな文字はそうではなくなり,マクロの展開もあ
りません.

@example
# define([def], ine)
@result{}# define([def], ine)
@end example

@c Each time there can be a macro expansion, there is a quotation
@c expansion; i.e., one level of quotes is stripped:
@c 
マクロの展開があるごとに,引用符も展開されます.すなわち,第1レベルの引
用符は削除されます.

@example
int tab[10];
@result{}int tab10;
[int tab[10];]
@result{}int tab[10];
@end example

@c Without this in mind, the reader will try hopelessly to use her macro
@c @code{array}:
@c 
これを覚えていなければ,読者は絶望しながらもマクロの@code{array}を使用し
てみるでしょう.

@example
define([array], [int tab[10];])
array
@result{}int tab10;
[array]
@result{}array
@end example

@noindent
@c How can you correctly output the intended results@footnote{Using
@c @code{defn}.}?
@c 
期待する結果を正しく出力するにはどうすれば良いでしょうか
@footnote{@code{defn}を使用します.}?


@node One Macro Call
@subsection 一つのマクロの呼び出し

@c Let's proceed on the interaction between active characters and macros
@c with this small macro, which just returns its first argument:
@c 
さて,アクティブな文字と以下の単に最初の引数を返す小さなマクロを用いたマ
クロで,対話的に進めていきましょう.

@example
define([car], [$1])
@end example

@noindent
@c The two pairs of quotes above are not part of the arguments of
@c @code{define}; rather, they are understood by the top level when it
@c tries to find the arguments of @code{define}.  Therefore, it is
@c equivalent to write:
@c 
上記の二組の引用符は@code{define}の引数の一部ではありません.そうではな
く,@code{define}の引数の検索が試みられるときに,それらはトップレベルで
理解されます.そのため,それは以下のように書くことと等価です.

@example
define(car, $1)
@end example

@noindent
@c But, while it is acceptable for a @file{configure.ac} to avoid unneeded
@c quotes, it is bad practice for Autoconf macros which must both be more
@c robust and also advocate perfect style.
@c 
しかし,@file{configure.ac}が不必要な引用符を受け入れることはできますが,
より強固で,完全な形式を提案する必要もあるAutoconfマクロにとっては悪い慣
習です.

@c At the top level, there are only two possible quotings: either you
@c quote or you don't:
@c 
トップレベルでは,引用符では2つの可能性があります.引用符で囲む,または
囲まないでの二つです.

@example
car(foo, bar, baz)
@result{}foo
[car(foo, bar, baz)]
@result{}car(foo, bar, baz)
@end example

@c Let's pay attention to the special characters:
@c 
特殊文字に注目してみましょう.

@example
car(#)
@error{}EOF in argument list
@end example

@c The closing parenthesis is hidden in the comment; with a hypothetical
@c quoting, the top level understood it this way:
@c 
閉じカッコはコメント内に隠れてしまいます.引用符を推測することで,トップ
レベルでは以下のように理解します.

@example
car([#)]
@end example

@noindent
@c Proper quotation, of course, fixes the problem:
@c 
適切な引用符は,もちろんこの問題を修正します.

@example
car([#])
@result{}#
@end example

@c The reader will easily understand the following examples:
@c 
読者は,以下の例の方が理解しやすいかもしれません.

@example
car(foo, bar)
@result{}foo
car([foo, bar])
@result{}foo, bar
car((foo, bar))
@result{}(foo, bar)
car([(foo], [bar)])
@result{}(foo
car([], [])
@result{}
car([[]], [[]])
@result{}[]
@end example

@c With this in mind, we can explore the cases where macros invoke
@c macros@dots{}
@c 
これを覚えていると,マクロがマクロを呼び出し,マクロがマクロを呼び出し
@dots{}となっているような状況も調査することが可能です.


@node Quotation and Nested Macros
@subsection 引用符と入れ子状のマクロ

@c The examples below use the following macros:
@c 
これ以降の例では,以下のマクロを使用しています.

@example
define([car], [$1])
define([active], [ACT, IVE])
define([array], [int tab[10]])
@end example

@c Each additional embedded macro call introduces other possible
@c interesting quotations:
@c 
追加の埋め込まれたマクロ呼び出しは,それぞれ興味深い引用符について,その
他の可能性を導き出します.

@example
car(active)
@result{}ACT
car([active])
@result{}ACT, IVE
car([[active]])
@result{}active
@end example

@c In the first case, the top level looks for the arguments of @code{car},
@c and finds @samp{active}.  Because @code{m4} evaluates its arguments
@c before applying the macro, @samp{active} is expanded, which results in:
@c 
最初の状況では,トップレベルでは@code{car}の引数を探し,@samp{active}が
見つかります.@code{m4}はマクロを適用する前のその引数と等価なので,
@samp{active}は展開され,結果として以下のようになります.

@example
car(ACT, IVE)
@result{}ACT
@end example

@noindent
@c In the second case, the top level gives @samp{active} as first and only
@c argument of @code{car}, which results in:
@c 
2番目の状況では,トップレベルは@code{car}の最初で唯一の引数として
@samp{active}を与えるので,結果として以下のようになります.

@example
active
@result{}ACT, IVE
@end example

@noindent
@c i.e., the argument is evaluated @emph{after} the macro that invokes it.
@c In the third case, @code{car} receives @samp{[active]}, which results in:
@c 
すなわち,マクロが呼び出された@emph{後で},引数が評価されます.3番目の状
況では,@code{car}は@samp{[active]}を受けとり,結果として以下のようにな
ります.

@example
[active]
@result{}active
@end example

@noindent
@c exactly as we already saw above.
@c 
上記で見たものと同じですね.

@c The example above, applied to a more realistic example, gives:
@c 
より現実的な例を適用して,上記の例に与えてみましょう.

@example
car(int tab[10];)
@result{}int tab10;
car([int tab[10];])
@result{}int tab10;
car([[int tab[10];]])
@result{}int tab[10];
@end example

@noindent
@c Huh?  The first case is easily understood, but why is the second wrong,
@c and the third right?  To understand that, you must know that after
@c @code{m4} expands a macro, the resulting text is immediately subjected
@c to macro expansion and quote removal.  This means that the quote removal
@c occurs twice---first before the argument is passed to the @code{car}
@c macro, and second after the @code{car} macro expands to the first
@c argument.
@c 
う〜ん? 最初の状況は簡単に理解できますが,なぜ2番目が間違っていて,3番
目は正しいのでしょうか?それを理解するために,@code{m4}がマクロを展開し
た後,結果として生じるテキストがすぐにマクロを展開に従って引用符が取り除
かれることを知っておく必要があります.これは,引用符の削除が2回行なわれ
ることを意味します --- 最初に引数として@code{car}マクロに渡されるとき,2
回目は@code{car}マクロが最初の引数を展開するときです.

@c As the author of the Autoconf macro @code{car}, you then consider it to
@c be incorrect that your users have to double-quote the arguments of
@c @code{car}, so you ``fix'' your macro.  Let's call it @code{qar} for
@c quoted car:
@c 
Autoconfマクロ@code{car}の作者として,ユーザが@code{car}の引数を二重の引
用符にする必要があることは間違っていると考えるようにし,マクロを@emph{修
正}してください.引用符で囲まれている@code{car}に対して,それを
@code{qar}と呼ぶことにしましょう.

@example
define([qar], [[$1]])
@end example

@noindent
@c and check that @code{qar} is properly fixed:
@c 
そして,@code{qar}が適切に修正されていることを調査してみます.

@example
qar([int tab[10];])
@result{}int tab[10];
@end example

@noindent
@c Ahhh!  That's much better.
@c 
ああ!そうした方が良さそうですね.

@c But note what you've done: now that the arguments are literal strings,
@c if the user wants to use the results of expansions as arguments, she has
@c to use an @emph{unquoted} macro call:
@c 
しかし,自分が行なったことに注意してください.現在その引数はリテラル文字
列ですが,引数を展開した結果をユーザが使用したい場合,@emph{引用符で囲ま
れていない}マクロを使用する必要があります.

@example
qar(active)
@result{}ACT
@end example

@noindent
@c where she wanted to reproduce what she used to do with @code{car}:
@c 
@code{car}を用いて行なっていたことを再生成したい状況を考えます.

@example
car([active])
@result{}ACT, IVE
@end example

@noindent
@c Worse yet: she wants to use a macro that produces a set of @code{cpp}
@c macros:
@c 
まだ駄目ですね.@code{cpp}マクロの組を生成するマクロを使用したい状況を考
えてみましょう.

@example
define([my_includes], [#include <stdio.h>])
car([my_includes])
@result{}#include <stdio.h>
qar(my_includes)
@error{}EOF in argument list
@end example

@c This macro, @code{qar}, because it double quotes its arguments, forces
@c its users to leave their macro calls unquoted, which is dangerous.
@c Commas and other active symbols are interpreted by @code{m4} before
@c they are given to the macro, often not in the way the users expect.
@c Also, because @code{qar} behaves differently from the other macros,
@c it's an exception that should be avoided in Autoconf.
@c 
このマクロ@code{qar}は,引数を二重に引用符で囲むので,ユーザはマクロの呼
び出しを引用符で囲まないままにしておくよう強制されるので,それは危険です.
カンマとその他のアクティブなシンボルは,マクロに渡される前に@code{m4}で
解釈され,それはユーザが期待している手法ではないことが多いものです.また,
@code{qar}は,他のマクロとは異なる動作をするので,Autoconfでは避けるべき
例外になります.

@node 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 her
@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), it's about the worst choice one can make:
@c because of strings and back quoted expression in shell (such as
@c @samp{'this'} and @samp{`that`}), because of literal characters in usual
@c programming language (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 chose 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...
@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, 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
@subsection 4文字表記
@cindex quadrigraphs
@cindex @samp{@@<:@@}
@cindex @samp{@@:>@@}
@cindex @samp{@@S|@@}
@cindex @samp{@@%:@@}
@cindex @samp{@@&t@@}

@c When writing an autoconf macro you may occasionally need to generate
@c special characters that are difficult to express with the standard
@c autoconf quoting rules.  For example, you may need to output the regular
@c expression @samp{[^[]}, which matches any character other than @samp{[}.
@c This expression contains unbalanced brackets so it cannot be put easily
@c into an M4 macro.
@c 
autoconfマクロを書いているとき,標準的なautoconfの引用符の規則で表現する
ことが難しい,特殊な文字を生成する必要が生じるかもしれません.例えば,
@samp{[}以外の全ての文字に一致する正規表現@samp{[^[]}を出力する必要があ
るかもしれません.この表現は,対称ではないカッコを含んでいるので,M4マク
ロの中に簡単に書き込むことはできません.

@c You can work around this problem by using one of the following
@c @dfn{quadrigraphs}:
@c 
以下の@dfn{4文字表記}の一つを使用することで,この問題を解決することが可
能です.

@table @samp
@item @@<:@@
@samp{[}
@item @@:>@@
@samp{]}
@item @@S|@@
@samp{$}
@item @@%:@@
@samp{#}
@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 
4文字表記は,@command{m4}が実行された後,変換処理の終りの段階で置換され
るので,M4の引用符の邪魔になりません.例えば,文字列@samp{[^@@<:@@]}は,
その引用符で囲まれている状態に依存せず,出力では@samp{[^[]}として現れま
す.

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

@itemize @minus
@item 明示的に後置されるスペースに印を付けるため

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

@item その他の4文字表記を生成するため

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

@item 禁止されているパターンの@emph{発生}をエスケープするため

@c For instance you might want to mention @code{AC_FOO} is 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
@subsection 引用の経験則

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

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

@c Never over-quote, never under-quote, in particular in the definition of
@c macros.  In the few places where the macros need to use brackets
@c (usually in C program text or regular expressions), properly quote
@c @emph{the arguments}!
@c 
特にマクロ定義では,多過ぎる引用符もだめ,少な過ぎる引用符も駄目です.カッ
コを使用する必要があるマクロ(通常Cのプログラム文や正規表現の中)では,適
切に@emph{引数を}引用符で囲んでください!

@c It is common to read Autoconf programs with snippets like:
@c 
以下のような断片を用いたAutoconfプログラムを読むことはよくあります.

@example
AC_TRY_LINK(
changequote(<<, >>)dnl
<<#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif>>,
changequote([, ])dnl
[atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
@end example

@noindent
@c which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
@c double quoting, so you just need:
@c 
それは,@code{AC_TRY_LINK}は@emph{すでに}二重に引用符で囲まれているので, 
全く無駄になり,実際は以下のようにするだけで十分です.

@example
AC_TRY_LINK(
[#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif],
            [atoi (*tzname);],
            [ac_cv_var_tzname=yes],
            [ac_cv_var_tzname=no])
@end example

@noindent
@c The M4-fluent reader will note that these two examples are rigorously
@c equivalent, since @code{m4} swallows both the @samp{changequote(<<, >>)}
@c and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
@c quotes are not part of the arguments!
@c 
M4に親しんでいる読者は,@code{m4}が引数を@dfn{まとめる}ときに
@samp{changequote(<<, >>)}と@samp{<<} @samp{>>}の両方を飲み込むので,こ
れら二つの例が厳密に等価であることに注意してください.これらの引用符は引
数の一部ではありません!

@c Simplified, the example above is just doing this:
@c 
単純にしてみると,上記の例は以下のようになります.

@example
changequote(<<, >>)dnl
<<[]>>
changequote([, ])dnl
@end example

@noindent
@c instead of simply:
@c 
その代わりに単純に以下のようにします.

@example
[[]]
@end example


@c With macros that do not double quote their arguments (which is the
@c rule), double-quote the (risky) literals:
@c 
引数を(規則で)二重に引用符で囲まないマクロを用いると,二重の引用は(危険
な)文字列になります.

@example
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif]],
                                [atoi (*tzname);])],
               [ac_cv_var_tzname=yes],
               [ac_cv_var_tzname=no])
@end example

@c See @xref{Quadrigraphs}, for what to do if you run into a hopeless case
@c where quoting does not suffice.
@c 
引用符が十分でない状況で望みがなくなった場合どうすればいいかということに
ついては,@xref{Quadrigraphs}.

@c When you create a @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 @code{m4}
@c output, you need more quotes.  When in doubt, quote.
@c 
新たに書かれたマクロを用いて@command{configure}スクリプトを作成するとき,
マクロにより多くの引用符を加える必要があるかどうかの調査は,気を付けて吟
味してください.一つ以上の単語が@code{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}を行なうことでこの問題を調査します.

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

@c The Autoconf suite, including M4sugar, M4sh, and Autotest in addition to
@c Autoconf per se, heavily rely on M4.  All these different uses revealed
@c common needs factored into a layer over @command{m4}:
@c @command{autom4te}@footnote{
@c @c
@c Yet another great name for Lars J. Aas.
@c @c
@c }.Cambridge
@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.  In particular, its handling of command line
@c arguments is modeled after M4's:
@c 
@command{autom4te}は,@command{m4}自身に置き換わるものとして,基本的に考
えるべきです.特に,コマンドライン引数の処理は,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}に渡すものです.正規の展開に加え,
それは4文字表記(@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.  Contrary to M4 but in agreement with common sense,
@c directories are browsed from last to first.
@c 
入力ファイルを@var{dir}でも探します.複数回の呼び出しは累積されます.M4 
とは逆ですが一般的な意味と同じになるように,ディレクトリは最後のものから
最初のものという順序で見ていきます.

@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_TRY_RUN([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_TRY_RUN called without default \
to allow cross compiling
$ @kbd{autom4te -l autoconf -Wcross,error}
configure.ac:8: error: AC_TRY_RUN called without default \
to allow cross compiling
acgeneral.m4:3044: AC_TRY_RUN is expanded from...
configure.ac:2: INNER is expanded from...
configure.ac:5: OUTER is expanded from...
configure.ac:8: the top level
@end example

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

@table @option
@item --force
@itemx -f
@c Do not consider the cache (but update it anyway).
@c 
キャッシュを考慮しません(しかし,それはいずれにせよ更新されます).
@end table

@sp 1

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

@table @option
@item --trace=@var{macro}[:@var{format}]
@itemx -t @var{macro}[:@var{format}]
@c Trace the invocations to @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}, @code{automake}, @code{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},@code{automake},
@code{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ライブラリ}の概念を導入します.
それらは,強力ですが非常にシンプルな機能から成り立っています.コマンドラ
イン引数の組み合わせの組です.

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


@node 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
@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}, @@r{[}@var{not-equal}@r{]})
@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, ...)
@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}, @@r{[}@var{replacement}@r{]})
@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 @sc{gnu} M4 which will
@c provide extended regular expression syntax via @code{epatsubst}.
@c 
このマクロは@code{patsubst}に対応します.@code{m4_patsubst}の名前は,
@code{epatsubst}で拡張した正規表現の構文を提供する,@sc{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}, @@r{[}@var{replacement}@r{]})
@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 @sc{gnu} M4 which will
@c provide extended regular expression syntax via @code{eregexp}.
@c 
このマクロは@code{regexp}に対応しています.@code{m4_regexp}の名前は,
@code{eregexp}で拡張した正規表現の構文を提供する,@sc{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
@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}, ...)
@msindex dquote
@c Return the arguments as a quoted list of quoted arguments.
@c 
引用符で囲まれたリストを引用符で囲んだ引数を返します.
@end defmac

@defmac m4_quote (@var{arg1}, ...)
@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 emphasing 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}
# Over quote, 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
@subsection 禁止されているパターン

@c M4sugar provides a means to define suspicious patterns, patterns
@c describing tokens which should not be found in the output.  For
@c instance, if an Autoconf @file{configure} script includes tokens such as
@c @samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
@c wrong (typically a macro was not evaluated because of over quotation).
@c 
M4sugar提供の目的は,怪しげはパターン,つまり出力に現れるべきではないトー
クンを記述しているパターンを定義するためです.例えば,Autoconf
@file{configure}スクリプトに@samp{AC_DEFINE}や@samp{dnl}のようなトークン
が含められている場合,おそらく何か問題が発生するでしょう(通常は,余分な
引用符のためにマクロが評価されていないためです).

@c M4sugar forbids all the tokens matching @samp{^m4_} and @samp{^dnl$}.
@c 
M4sugarは,@samp{^m4_}と@samp{^dnl$}に一致する全てのトークンを禁止します.

@defmac m4_pattern_forbid (@var{pattern})
@msindex pattern_forbid
@c Declare no token matching @var{pattern} must be found in the output.
@c Comments are not checked; this can be a problem if, for instance, you
@c have some macro left unexpanded after an @samp{#include}.  No consensus
@c is currently found in the Autoconf community, as some people consider it
@c should be valid to name macros in comments (which doesn't makes sense to
@c the author of this documentation, as @samp{#}-comments should document
@c the output, not the input, documented vy @samp{dnl}-comments).
@c 
出力で見つかる必要のある@var{pattern}に一致するトークンを宣言しません.
コメントは調査されません.これは,例えば,@samp{#include}より後に展開さ
れないまま残っているマクロがある場合に問題になるはずです.現在,Autoconf 
コミュニティでは合意がとおらず,コメント内で指名されているマクロを有効に
すべきだと考えている人もいるからです(@samp{#}のコメントは出力を説明する
べきで,@samp{dnl}コメントのように入力を説明するのではないため,このドキュ
メントの著者には意味がありません).
@end defmac

@c Of course, you might encounter exceptions to these generic rules, for
@c instance you might have to refer to @samp{$m4_flags}.
@c 
もちろん,これらの一般的な規則の例外に遭遇する可能性もあり,例えば,
@samp{$m4_flags}を参照する必要があるかもしれません.

@defmac m4_pattern_allow (@var{pattern})
@msindex pattern_allow
@c Any token matching @var{pattern} is allowed, including if it matches an
@c @code{m4_pattern_forbid} pattern.
@c 
@var{pattern}に一致している全てのトークンが可能で,それには
@code{m4_pattern_forbid}パターンに一致しているものも含まれます.
@end defmac

@node 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 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 @sc{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 
@sc{posix}で要求されるアルゴリズムを使用しながら,@var{pathname}のディレ
クトリ部分を返します.これが返すものと,それが@command{dirname}コマンド
より移植性が高い理由の詳細は,@xref{Limitations of Usual Tools}.
@end defmac

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

@node 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
@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 GNU m4}, for more complete information on writing M4 macros.
@c 
マクロに渡す引数は,@samp{$1},@samp{$2}等のように参照することが可能です.
M4マクロを書く際の完全な情報は,@xref{Definitions, , How to define new
macros, m4.info, GNU m4}.

@c Be sure to properly quote both the @var{macro-body} @emph{and} the
@c @var{macro-name} to avoid any problems if the macro happens to have
@c been previously defined.
@c 
マクロが偶然前に定義されている場合の問題を避けるために,
@var{macro-body}@emph{と}@var{macro-name}の両方を,適切に引用符で囲んで
いることを確かめてください.

@c Each macro should have a header comment that gives its prototype, and a
@c brief description.  When arguments have default values, display them in
@c the prototype.  For example:
@c 
それぞれのマクロには,そのプロトタイプと短い説明を付与するため,ヘッダの
コメントを書くべきです.引数がデフォルト値の場合,そのプロトタイプを表示
してください.例えば以下のようにします.

@example
# AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
# --------------------------------------
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 @code{m4} to discard the text
@c through the next newline.
@c 
ピュアなM4コードに関して,非常に特殊なコメントがある場合は,コメントを
@file{configure}とヘッダコメントに入れる意味がないので,組み込みの
@code{dnl}を使用してください.それで@code{m4}は,次の改行までのテキスト
を廃棄します.

@c Keep in mind that @code{dnl} is rarely needed to introduce comments;
@c @code{dnl} is more useful to get rid of the newlines following macros
@c that produce no output, such as @code{AC_REQUIRE}.
@c 
@code{dnl}がコメントの導入に必要になることは滅多にないということを覚えて
おいてください.@code{dnl}は,@code{AC_REQUIRE}のような,出力を生成しな
いマクロに続く改行を除去するときに,より役に立ちます.


@node Macro Names
@section マクロ名

@c All of the Autoconf macros have all-uppercase names starting with
@c @samp{AC_} to prevent them from accidentally conflicting with other
@c text.  All shell variables that they use for internal purposes have
@c mostly-lowercase names starting with @samp{ac_}.  To ensure that your
@c macros don't conflict with present or future Autoconf macros, you should
@c prefix your own macro names and any shell variables they use with some
@c other sequence.  Possibilities include your initials, or an abbreviation
@c for the name of your organization or software package.
@c 
全てのAutoconfマクロは,他のテキストと偶然衝突することを避けるため 
@samp{AC_}で始まる全て大文字の名前になっています.内部目的で使用する全て
のシェル変数は,@samp{ac_}で始まるほとんど小文字の名前になっています.マ
クロが,現在または将来のAutoconfマクロと衝突しないことを保証するため,マ
クロ名と他の手続きで使用するシェル変数に,独自の接頭辞を付けてください.
可能性としては,イニシャルや組織やソフトウェアパッケージの名前の省略を含
めることになるでしょう.

@c Most of the Autoconf macros' names follow a structured naming convention
@c that indicates the kind of feature check by the name.  The macro names
@c consist of several words, separated by underscores, going from most
@c general to most specific.  The names of their cache variables use the
@c same convention (@pxref{Cache Variable Names}, for more information on
@c them).
@c 
ほとんどのAutoconfマクロ名は,名前によって調査している特徴の種類を示す,
構造化された命名則に続きます.複数の単語から成り立つマクロ名は,アンダー
スコアで分けられ,最も一般的なものから最も特殊なものへとなっています.
キャッシュ変数の名前も,同じ規則を使用しています(詳細は@pxref{Cache
Variable Names}).

@c The first word of the name after @samp{AC_} usually tells the category
@c of feature being tested.  Here are the categories used in Autoconf for
@c specific test macros, the kind of macro that you are more likely to
@c write.  They are also used for cache variables, in all-lowercase.  Use
@c them where applicable; where they're not, invent your own categories.
@c 
@samp{AC_}の後の名前の最初の単語は,通常テストしている特徴のカテゴリを伝
えるものです.よく書くマクロの種類のテストマクロを指定するため,Autoconf
が使用するカテゴリは以下のようになっています.それらはキャッシュ変数でも
全て小文字で使用されます.適用可能なものを使用してください.無ければ独自
のカテゴリを考え出してください.

@table @code
@item C
@c C language builtin features.
@c 
C言語組み込み特徴.
@item DECL
@c Declarations of C variables in header files.
@c 
ヘッダファイルでのC変数の宣言.
@item FUNC
@c Functions in libraries.
@c 
ライブラリの関数.
@item GROUP
@c @sc{unix} group owners of files.
@c 
ファイルの@sc{unix}グループオーナー.
@item HEADER
@c Header files.
@c 
ヘッダファイル.
@item LIB
@c C libraries.
@c 
Cライブラリ.
@item PATH
@c The full path names to files, including programs.
@c 
プログラムを含むファイルのフルパス名.
@item PROG
@c The base names of programs.
@c 
プログラムのベース名.
@item MEMBER
@c Members of aggregates.
@c 
集合体のメンバ.
@item SYS
@c Operating system features.
@c 
オペレーティングシステムの特徴.
@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
@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 it falls into the @var{category}.  You are encouraged to use
@c standard categories, which currently include:
@c 
それが@var{category}に分類される場合,@var{message}を警告として(またはユー
ザが要求する場合はエラーとして)報告します.以下の現在含められている標準
的なカテゴリを使用することを勧めます.

@table @samp
@item all
@c messages that don't fall into one of the following category.  Use of an
@c empty @var{category} is equivalent.
@c 
以下のカテゴリの一つに分類されないメッセージです.空の@var{category}を使
用することと等価です.

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

@item obsolete
@c use of an obsolete construct.
@c 
時代遅れの構成の使用です.

@item syntax
@c dubious syntactic constructs, incorrectly ordered macro calls.
@c 
曖昧な構文構成,間違った順序のマクロ呼び出しです.
@end table
@end defmac

@defmac AC_WARNING (@var{message})
@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
@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
@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 
@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_temparature_in_celsius" -gt "38" &&
  dance_floor=occupied])
AC_DEFUN([NEWTON_JOHN],
[test "$hair_style" = "curly" &&
  dance_floor=occupied])
@end group

@group
AC_DEFUN([RESERVE_DANCE_FLOOR],
[if date | grep '^Sat.*pm' >/dev/null 2>&1; then
  AC_REQUIRE([TRAVOLTA])
  AC_REQUIRE([NEWTON_JOHN])
fi])
@end group
@end example

@noindent
@c with this @file{configure.ac}
@c 
これを@file{configure.ac}で使用します.

@example
AC_INIT
RESERVE_DANCE_FLOOR
if test "$dance_floor" = occupied; then
  AC_MSG_ERROR([cannot pick up here, let's move])
fi
@end example

@noindent
@c will not leave you with a better chance to meet a kindred soul at
@c other times than Saturday night since it expands into:
@c 
それは以下のように展開されるので,土曜日の夜以外に仲間に会う機会が残って
いません.

@example
@group
test "$body_temperature_in_celsius" -gt "38" &&
  dance_floor=occupied
test "$hair_style" = "curly" &&
  dance_floor=occupied
fi
if date | grep '^Sat.*pm' >/dev/null 2>&1; then


fi
@end group
@end example

@c This behavior was chosen on purpose: (i) it prevents messages in
@c required macros from interrupting the messages in the requiring macros;
@c (ii) it avoids bad surprises when shell conditionals are used, as in:
@c 
この動作は意図的に選択されました.(i) それは要求されるマクロのメッセージ
が,要求しているマクロのメッセージとして解釈されることを妨げます.(ii) 
それは,シェルの条件文が使用されるときひどく驚くことを妨げます.以下のよ
うになります.

@example
@group
if @dots{}; then
  AC_REQUIRE([SOME_CHECK])
fi
@dots{}
SOME_CHECK
@end group
@end example


@c You are encouraged to put all @code{AC_REQUIRE}s at the beginning of a
@c macro.  You can use @code{dnl} to avoid the empty lines they leave.
@c 
マクロの最初に全ての@code{AC_REQUIRE}を書き込むことを推奨します.空の行
が残ることを避けるため,@code{dnl}を使用することが可能です.

@node Suggested Ordering
@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 @code{m4} print a warning message to the standard error output if
@c @var{called-macro-name} has already been called.  @var{this-macro-name}
@c should be the name of the macro that is calling @code{AC_BEFORE}.  The
@c macro @var{called-macro-name} must have been defined using
@c @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
@c that it has been called.
@c 
@var{called-macro-name}が既に呼び出されている場合,@code{m4}は標準エラー
出力に警告メッセージを出力します.@var{this-macro-name}は,
@code{AC_BEFORE}を呼び出すマクロの名前にすべきです.マクロ
@var{called-macro-name}は,@code{AC_DEFUN}を使用して定義されている,また
は呼び出されていることを示す@code{AC_PROVIDE}の呼び出しを含んでいる必要
があります.
@end defmac

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

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

@defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @@r{[}@var{message}@r{]})
@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
@section コーディングスタイル

@c The Autoconf macros follow a strict coding style.  You are encouraged to
@c follow this style, especially if you intend to distribute your macro,
@c either by contributing it to Autoconf itself, or via other means.
@c 
Autoconfマクロはスクリプトコーディングスタイルに従います.以下のスタイル
に従うように推奨し,特に,Autoconf自身に寄稿したり,その他の目的で,マク
ロを配布する目的がある場合はそうしてください.

@c The first requirement is to pay great attention to the quotation, for
@c more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
@c 
最初に必要なことは,引用符に大きく注意を払うことです.詳細は,
@ref{Autoconf Language}と@ref{M4 Quotation}を参照してください.

@c Do not try to invent new interfaces.  It is likely that there is a macro
@c in Autoconf that resembles the macro you are defining: try to stick to
@c this existing interface (order of arguments, default values, etc.).  We
@c @emph{are} conscious that some of these interfaces are not perfect;
@c nevertheless, when harmless, homogeneity should be preferred over
@c creativity.
@c 
新たなインターフェースの発明は試みないでください.定義しているマクロに似
ているAutoconfマクロが存在することはよくあります.この既存のインターフェー
スに従ってみてください(引数の順序,デフォルト値,等々).我々は,これらの
インターフェースに完全でないものがあることは,意識@emph{しています}.そ
れにもかかわらず,無害なときは,創造性より均質性が好まれるでしょう.

@c Be careful about clashes both between M4 symbols and between shell
@c variables.
@c 
M4シンボル間とシェル変数間の両方の衝突に注意してください.

@c If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
@c you are unlikely to generate conflicts.  Nevertheless, when you need to
@c set a special value, @emph{avoid using a regular macro name}; rather,
@c use an ``impossible'' name.  For instance, up to version 2.13, the macro
@c @code{AC_SUBST} used to remember what @var{symbol}s were already defined
@c by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
@c But since there is a macro named @code{AC_SUBST_FILE}, it was just
@c impossible to @samp{AC_SUBST(FILE)}!  In this case,
@c @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
@c have been used (yes, with the parentheses)@dots{}or better yet, high-level
@c macros such as @code{AC_EXPAND_ONCE}.
@c 
推奨されるM4命名規則(@pxref{Macro Names})に従う場合,衝突が生じることは
あまりないでしょう.それにもかかわらず,特殊な値を設定する必要があるとき,
@emph{通常のマクロ名を使用することを避けてください}.``信じられない''名
前を使用する代わりです.例えば,バージョン2.13までは,通常のマクロ名
@code{AC_SUBST_@var{symbol}}を設定することで既に定義されている
@var{symbol}を記憶するため,マクロ@code{AC_SUBST}を使用していました.し
かし,@code{AC_SUBST_FILE}と命名されているマクロが存在するので,
@samp{AC_SUBST(FILE)}を使用することはできませんでした!この場合,
@code{AC_SUBST(@var{symbol})}や@code{_AC_SUBST(@var{symbol})}が使用され
るべきでした(そうです,カッコは使用します)@dots{}または,より良い方法と
して,@code{AC_EXPAND_ONCE}のようなハイレベルのマクロを使用すべきでした.

@c No Autoconf macro should ever enter the user-variable name space; i.e.,
@c except for the variables that are the actual result of running the
@c macro, all shell variables should start with @code{ac_}.  In
@c addition, small macros or any macro that is likely to be embedded in
@c other macros should be careful not to use obvious names.
@c 
Autoconfマクロは,ユーザ変数の名前空間に入るべきではありません.すなわち,
実際のマクロの実行結果となる変数以外の,全てシェル変数は@code{ac_}で始め
るべきです.さらに,小さなマクロや他のマクロに埋め込まれるようなマクロは,
明示的な名前を使用しないように注意すべきです.

@cindex @code{dnl}
@c Do not use @code{dnl} to introduce comments: most of the comments you
@c are likely to write are either header comments which are not output
@c anyway, or comments that should make their way into @file{configure}.
@c There are exceptional cases where you do want to comment special M4
@c constructs, in which case @code{dnl} is right, but keep in mind that it
@c is unlikely.
@c 
コメントを導入するために,@code{dnl}を使用しないでください.書こうとして
いるコメントのほとんどは,出力されないヘッダコメント,または,
@file{configure}に書かれるべきコメントです.特殊なM4の構成のコメントが欲
しい場合は例外があり,その場合は@code{dnl}が正しいのですが,あまりないこ
とだということを覚えておいてください.

@c M4 ignores the leading spaces before each argument, use this feature to
@c indent in such a way that arguments are (more or less) aligned with the
@c opening parenthesis of the macro being called.  For instance, instead of
@c 
M4は,引数に前置されるスペースを無視します.呼び出されているマクロの開カッ
コに,引数が整列するように字下げするために,この特徴を使用してください.
例えば,以下の代わりを考えます.

@example
AC_CACHE_CHECK(for EMX OS/2 environment,
ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
[ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
@end example

@noindent
@c write
@c 
以下のように書いてください.

@example
AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])
@end example

@noindent
@c or even
@c 
または,以下のようにしてください.

@example
AC_CACHE_CHECK([for EMX OS/2 environment],
               [ac_cv_emxos2],
               [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
                                                   [return __EMX__;])],
                                  [ac_cv_emxos2=yes],
                                  [ac_cv_emxos2=no])])
@end example

@c When using @code{AC_TRY_RUN} or any macro that cannot work when
@c cross-compiling, provide a pessimistic value (typically @samp{no}).
@c 
@code{AC_TRY_RUN}や,クロスコンパイルで動作不可能なマクロを使用している
とき,悲観的な値(通常は@samp{no})を提供してください.

@c Feel free to use various tricks to prevent auxiliary tools, such as
@c syntax-highlighting editors, from behaving improperly.  For instance,
@c instead of:
@c 
構文をハイライト表示するエディタのような,補助ツールが不適切に動作するこ
とを避けるため,様々な手段を自由に使用してください.例えば以下を考えます.

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

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

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

@noindent
@c so that Emacsen do not open a endless ``string'' at the first quote.
@c For the same reasons, avoid:
@c 
それは,Emacsenが最初の引用符で終りのない``文字列''を開いたままにしない
ようにするためです.同じ理由から以下のようなことは避けてください.

@example
test $[#] != 0
@end example

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

@example
test $[@@%:@@] != 0
@end example

@noindent
@c Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
@c breaking the bracket-matching highlighting from Emacsen.  Note the
@c preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc.  Do
@c not escape when it is unneeded.  Common examples of useless quotation
@c are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
@c etc.  If you add portability issues to the picture, you'll prefer
@c @samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
@c better than hacking Autoconf @code{:-)}.
@c 
そうしない場合,閉カッコは@samp{#}コメント内に隠され,Emacsenのカッコ一
致のハイライト表示を破壊します.好ましいスタイルは,M4からエスケープされ
るように注意してください.@samp{$[1]},@samp{$[@@]},等です.不必要なと
きにエスケープしないようにしてください.意味のない引用符の一般的な例は,
@samp{[$]$1}(@samp{$$1}と書いてください),@samp{[$]var}(@samp{$var}を使
用してください),等です.移植性の問題をこの状態に加える場合,
@samp{"[$]@@"}より@samp{$@{1+"$[@@]"@}}にした方が良く,Autoconfをハッキ
ングするより何か他のことをした方が良いでしょう@code{:-)}.

@c When using @command{sed}, don't use @option{-e} except for indenting
@c purpose.  With the @code{s} command, the preferred separator is @samp{/}
@c unless @samp{/} itself is used in the command, in which case you should
@c use @samp{,}.
@c 
@command{sed}を使用しているとき,字下げの目的以外で@option{-e}を使用しな
いでください.@code{s}コマンドを用いた場合,@samp{/}自身がコマンドで使用
されない限り,優先されるセパレータは@samp{/}にし,コマンドで使用される場
合は@samp{,}を使用すべきです.

@c @xref{Macro Definitions}, for details on how to define a macro.  If a
@c macro doesn't use @code{AC_REQUIRE} and it is expected to never be the
@c object of an @code{AC_REQUIRE} directive, then use @code{define}.  In
@c case of doubt, use @code{AC_DEFUN}.  All the @code{AC_REQUIRE}
@c statements should be at the beginning of the macro, @code{dnl}'ed.
@c 
マクロ定義の方法の詳細は,@xref{Macro Definitions}.  マクロで
@code{AC_REQUIRE}を使用しておらず,@code{AC_REQUIRE}ディレクティブのオブ
ジェクトがないことを期待する場合,@code{define}を使用してください.疑わ
しい場合は,@code{AC_DEFUN}を使用してください.全ての@code{AC_REQUIRE}文
は,@code{dnl}されているマクロの最初に書くべきです.

@c You should not rely on the number of arguments: instead of checking
@c whether an argument is missing, test that it is not empty.  It provides
@c both a simpler and a more predictable interface to the user, and saves
@c room for further arguments.
@c 
引数の数に依存すべきではありません.引数が足りないことを調査する代わりに,
空でないことをテストしてください.より簡単でより予測可能なインターフェー
スをユーザに提供し,余分な引数に対する余地を節約してください.

@c Unless the macro is short, try to leave the closing @samp{])} at the
@c beginning of a line, followed by a comment that repeats the name of the
@c macro being defined.  This introduces an additional newline in
@c @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.
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
@chapter 移植性のあるシェルプログラミング

@c When writing your own checks, there are some shell-script programming
@c techniques you should avoid in order to make your code portable.  The
@c Bourne shell and upward-compatible shells like the Korn shell and Bash
@c have evolved over the years, but to prevent trouble, do not take
@c advantage of features that were added after @sc{unix} version 7, circa
@c 1977.  You should not use shell functions, aliases, negated character
@c classes, or other features that are not found in all Bourne-compatible
@c shells; restrict yourself to the lowest common denominator.  Even
@c @code{unset} is not supported by all shells!  Also, include a space
@c after the exclamation point in interpreter specifications, like this:
@c 
独自の調査を書いているとき,コードを移植性の高いものにするため,使用を避
けるべきシェルスクリプトプログラムのテクニックもあります.Bourneシェルと, 
BashとKornシェルのような上位互換性があるシェルは,何年もかけて進展しまし
たが,問題を避けるために,@sc{unix}バージョン7の以降の1977年頃に加えられ
た機能を利用しないでください.シェル関数,エイリアス,無効な文字クラスや,
Bourneシェル互換のものでは見つからないすべての機能を使用するべきではあり
ません.最小公倍数に制限されてます.@code{unset}さえ,全てのシェルではサ
ポートしていません!また,以下のように,インタプリタ仕様として,感嘆符の
後にスペースを含めてください.

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

@noindent
@c If you omit the space before the path, then 4.2@sc{bsd} based systems
@c (such as Sequent DYNIX) will ignore the line, because they interpret
@c @samp{#! /} as a 4-byte magic number.  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 
パスの前のスペースを省略する場合,(Sequent DYNIXのような)4.2@sc{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, 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, GNU Coding Standards}.  この制限で,ユーザは,
かなり小さいプログラム設定から残りをビルドすることが可能になっていて,パッ
ケージ間の独立部分を多くし過ぎることを避けることができます.

@c Some of these external utilities have a portable subset of features; see
@c @ref{Limitations of Usual Tools}.
@c 
これらの外部ユーティリティには,移植性の高い機能のサブセットがあります.
@ref{Limitations of Usual Tools}を参照してください.

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

@node Shellology
@section シェル

@c There are several families of shells, most prominently the Bourne
@c family and the C shell family which are deeply incompatible.  If you
@c want to write portable shell scripts, avoid members of the C shell
@c family.
@c 
いくつかのシェルのファミリーがあり,最も顕著なものは,Bourneファミリーと
Cシェルファミリーで,それらは全く互換性がありません.移植性の高いシェル
スクリプトを書きたい場合,Cシェルファミリーのメンバーは避けてください.

@c Below we describe some of the members of the Bourne shell family.
@c 
以下で,Bourneシェルファミリーのメンバーを,いくつか説明していきます.

@table @asis
@item Ash
@cindex Ash
@c @command{ash} is often used on @sc{gnu}/Linux and @sc{bsd} systems as a
@c light-weight Bourne-compatible shell.  Ash 0.2 has some bugs that are
@c fixed in the 0.3.x series, but portable shell scripts should workaround
@c them, since version 0.2 is still shipped with many @sc{gnu}/Linux
@c distributions.
@c 
@command{ash}は,動作の軽いBourne互換シェルとして@sc{gnu}/Linuxと
@sc{bsd}システムでよく使用されています.Ash 0.2には0.3.xシリーズで修正さ
れているバグがいくつかありますが,バージョン0.2は多くの@sc{gnu}/Linux 配
布物で配布されているので,移植性の高いシェルスクリプトではそれを回避すべ
きです.

@c To be compatible with Ash 0.2:
@c 
Ash 0.2での互換性のため以下のようにしてください.

@itemize @minus
@item
@c don't use @samp{$?} after expanding empty or unset variables:
@c 
空や設定されていない変数を展開した後で,@samp{$?}を使用しないでください.

@example
foo=
false
$foo
echo "Don't use it: $?"
@end example

@item
@c don't use command substitution within variable expansion:
@c 
変数の展開でコマンドの代入を使用しないでください.

@example
cat $@{FOO=`bar`@}
@end example

@item
@c beware that single builtin substitutions are not performed by a sub
@c shell, hence their effect applies to the current shell!  @xref{Shell
@c Substitutions}, item ``Command Substitution''.
@c 
単一の組み込みの代入は,その効果が現在のシェルに適用されるため,サブシェ
ルで実行されないことに注意してください.アイテム``コマンドの代入''につい
ては,@xref{Shell Substitutions}.
@end itemize

@item Bash
@cindex Bash
@c To detect whether you are running @command{bash}, test if
@c @code{BASH_VERSION} is set.  To disable its extensions and require
@c @sc{posix} compatibility, run @samp{set -o posix}. @xref{Bash POSIX
@c Mode,, Bash @sc{posix} Mode, bash, The GNU Bash Reference Manual}, for
@c details.
@c 
@command{bash}を実行しているかどうかを検出するために,
@code{BASH_VERSION}が設定されているかどうかをテストしてください.その拡
張を利用不可能にし,@sc{posix}互換性を要求するため,@samp{set -o posix} 
を実行してください.詳細は,@xref{Bash POSIX Mode,, Bash @sc{posix}
Mode, bash, The GNU Bash Reference Manual}.

@item 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 this
@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を使用する必要があるでしょう.

@item Solarisの@command{/usr/xpg4/bin/sh}
@c @prindex @command{/usr/xpg4/bin/sh} on Solaris
@c The @sc{posix}-compliant Bourne shell on a Solaris system is
@c @command{/usr/xpg4/bin/sh} and is part of an extra optional package.
@c There is no extra charge for this package, but it is also not part of a
@c minimal OS install and therefore some folks may not have it.
@c 
Solarisシステム上の@sc{posix}互換のBourneシェルは,
@command{/usr/xpg4/bin/sh}で,それはオプションパッケージの一部です.この
パッケージに対しては追加料金は不要ですが,最小のOSのインストールにはない
ので,持っていない人もいるでしょう.

@item Zsh
@cindex Zsh
@c To detect whether you are running @command{zsh}, test if
@c @code{ZSH_VERSION} is set.  By default @command{zsh} is @emph{not}
@c compatible with the Bourne shell: you have to run @samp{emulate sh} and
@c set @code{NULLCMD} to @samp{:}. @xref{Compatibility,, Compatibility,
@c zsh, The Z Shell Manual}, for details.
@c 
@command{zsh}が実行されているかどうかを検出するために,
@code{ZSH_VERSION}が設定されているかどうかをテストしてください.デフォル
トで,@command{zsh}はBourneと互換性はあり@emph{ません}.@samp{emulate
sh}を実行し,@code{NULLCMD}を@samp{:}に設定する必要があります.詳細は,
@xref{Compatibility,, Compatibility, zsh, The Z Shell Manual}.

@c Zsh 3.0.8 is the native @command{/bin/sh} on Mac OS X 10.0.3.
@c 
Zsh 3.0.8は,Mac OS X 10.0.3でのネイティブな@command{/bin/sh}です.
@end table

@c The following discussion between Russ Allbery and Robert Lipe is worth
@c reading:
@c 
Russ AllberyとRobert Lipeの間でなされた,以下の議論は読む価値があります.

@noindent
Russ Allbery:

@quotation
@c The @sc{gnu} assumption that @command{/bin/sh} is the one and only shell
@c leads to a permanent deadlock.  Vendors don't want to break user's
@c existant shell scripts, and there are some corner cases in the Bourne
@c shell that are not completely compatible with a @sc{posix} shell.  Thus,
@c vendors who have taken this route will @emph{never} (OK@dots{}``never say
@c never'') replace the Bourne shell (as @command{/bin/sh}) with a
@c @sc{posix} shell.
@c 
@command{/bin/sh}が唯一のシェルであるという@sc{gnu}仮定では,永久に行き
詰まってしまいます.ベンダーは,ユーザの既存のシェルスクリプトを壊したく
はありませんし,Bourneシェルには@sc{posix}シェルと完全に互換ではない部分
もあります.このため,この方法を採用するベンダーは,@emph{決して}
(OK@dots{}``決して,決してとは言わないよ'')Bourneシェルを
(@command{/bin/sh}として)@sc{posix}シェルで置き換えないでしょう.
@end quotation

@noindent
Robert Lipe:

@quotation
@c This is exactly the problem.  While most (at least most System V's) do
@c have a Bourne shell that accepts shell functions most vendor
@c @command{/bin/sh} programs are not the @sc{posix} shell.
@c 
これは本当に問題です.ほとんどのもの(少なくともほとんどのSystem V)はシェ
ル関数を受け入れるBourneシェルがあるのですが,ほとんどのベンダーの
@command{/bin/sh}は@sc{posix}シェルではありません.

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

@node Here-Documents
@section ヒアドキュメント

@c Don't rely on @samp{\} being preserved just because it has no special
@c meaning together with the next symbol.  in the native @command{/bin/sh}
@c on OpenBSD 2.7 @samp{\"} expands to @samp{"} in here-documents with
@c unquoted delimiter.  As a general rule, if @samp{\\} expands to @samp{\}
@c use @samp{\\} to get @samp{\}.
@c 
@samp{\}は,次のシンボルと一緒になって特別の意味を持たないので,保存され
る@samp{\}に依存しないでください.OpenBSD 2.7のネイティブな
@command{/bin/sh}では,@samp{\"}は@samp{"}に展開され,ヒアドキュメントで
は引用符で囲まれていない分離子として用いられます.一般的な規則として,
@samp{\\}が@samp{\}に展開される場合,@samp{\}を得るために@samp{\\}を使用
してください.

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

@example
@group
$ @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.  Users can generally speed things up by using a faster
@c shell, e.g., by using the command @samp{bash ./configure} rather than
@c plain @samp{./configure}.
@c 
多くの古い(Bourneシェルを含む)シェルでは,ヒアドキュメントは非効率に実装
されています.ユーザは,一般的により早いシェルを使用して,例えば,そのま
ま@samp{./configure}するのではなく,コマンド@samp{bash ./configure}を使
用することによってスピードアップすることが可能です.

@c Some shells can be extremely inefficient when there are a lot of
@c here-documents inside a single statement.  For instance if your
@c @file{configure.ac} includes something like:
@c 
シェルによっては,単一の文の中にヒアドキュメントが多過ぎるとき,非常に非
効率になるものもあります.例えば,@file{configure.ac}に以下のようなもの
含めたとします.

@example
@group
if <cross_compiling>; then
  assume this and that
else
  check this
  check that
  check something else
  @dots{}
  on and on forever
  @dots{}
fi
@end group
@end example

@c A shell parses the whole @code{if}/@code{fi} construct, creating
@c temporary files for each here document in it.  Some shells create links
@c for such here-documents on every @code{fork}, so that the clean-up code
@c they had installed correctly removes them.  It is creating the links
@c that the shell can take forever.
@c 
シェルは,その中のそれぞれのヒアドキュメントに対して一時ファイルを作成し
ながら,@code{if}/@code{fi}の文脈全体をパースします.@code{fork}ごとにそ
のようなヒアドキュメントに対してリンクを作成するシェルもあり,インストー
ルされた後のクリーンアップコードで正しく削除されます.それは,シェルが永
久に受け入れられるリンクを作成しているのです.

@c Moving the tests out of the @code{if}/@code{fi}, or creating multiple
@c @code{if}/@code{fi} constructs, would improve the performance
@c significantly.  Anyway, this kind of construct is not exactly the
@c typical use of Autoconf.  In fact, it's even not recommended, because M4
@c macros can't look into shell conditionals, so we may fail to expand a
@c macro when it was expanded before in a conditional path, and the
@c condition turned out to be false at run-time, and we end up not
@c executing the macro at all.
@c 
@code{if}/@code{fi}の外部のテストを移動したり,複数の@code{if}/@code{fi} 
の文脈を作成したりすることで,かなり動作が改善されるでしょう.とにかく,
こういった構成は,典型的なAutoconfの使用では正しくありません.実際,M4マ
クロは,シェルの条件文を見ることができないので,それは推奨されておらず,
条件分岐の前にそれが展開され,実行時に条件文が失敗だと分かるとき,マクロ
展開に失敗するかもしれず,マクロの実行を完全に終了できないでしょう.

@node File Descriptors
@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 
3 --- それを@samp{/dev/tty}として開くシステムもあります.
@c 4 --- used on the Kubota Titan.
@c 
4 --- Kubota Titanで使用されています.
@end display

@c Don't redirect several times the same file descriptor, as you are doomed
@c to failure under Ultrix.
@c 
Ultrixでは異常終了だと告げられるので,同じファイルディスクリプタに複数回
リダイレクトしないでください.

@example
ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
UWS V4.4 (Rev. 11)
$ @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 undesired 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@dots{}
@c 
様々なレベルの詳細を認めるでしょう@dots{}

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

@c Don't try to move/delete open files, such as in @samp{exec >foo; mv foo
@c bar}, see @xref{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
@section ファイルシステムの条件

@c While @command{autoconf} and friends will usually be run on some Unix
@c variety, it can and will be used on other systems, most notably @sc{dos}
@c variants.  This impacts several assumptions regarding file and
@c path names.
@c 
@command{autoconf}とその仲間達は,通常様々なUnixで実行されますが,それは
その他のシステムでも使用され,最も顕著なものとしては@sc{dos}の仲間があげ
られます.このことは,ファイルとパス名に関する仮定に衝突します.

@noindent
@c For example, the following code:
@c 
例えば,以下のようなコードを考えます.

@example
case $foo_dir in
  /*) # Absolute
     ;;
  *)
     foo_dir=$dots$foo_dir ;;
esac
@end example

@noindent
@c will fail to properly detect absolute paths on those systems, because
@c they can use a drivespec, and will usually use a backslash as directory
@c separator.  The canonical way to check for absolute paths is:
@c 
それらのシステムではドライブスペックを使用していて,通常はディレクトリの
分離子としてバックスラッシュを使用しているため,絶対パスを正しく検出する
ことに失敗するでしょう.絶対パスに対する調査の標準的な方法は以下のとおり
です.

@example
case $foo_dir in
  [\\/]* | ?:[\\/]* ) # Absolute
     ;;
  *)
     foo_dir=$dots$foo_dir ;;
esac
@end example

@noindent
@c Make sure you quote the brackets if appropriate and keep the backslash as
@c first character (@pxref{Limitations of Builtins}).
@c 
適切な場合は角カッコの引用符で囲み,最初の文字としてのバックスラッシュを
保持していることを確認してください(@pxref{Limitations of Builtins}).

@c Also, because the colon is used as part of a drivespec, these systems don't
@c use it as path separator.  When creating or accessing paths, use 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 @sc{dos}-based environments
@c that are Unixy enough to run @command{autoconf} (such as DJGPP) will
@c usually be able to handle long file names properly, there are still
@c limitations that can seriously break packages.  Several of these issues
@c can be easily detected by the
@c @href{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk}
@c package.
@c 
ファイル名にも余計な注意が必要になります.(DJGPPのような)
@command{autoconf}を十分に実行できるUnixのような@sc{dos}ベースの環境では,
通常長いファイル名を適切に扱うことが可能ですが,パッケージを壊してしまう
深刻な制限も残っています.これらの問題のいくつかは,
doschk@footnote{doschk,
@url{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz}.}パッケー
ジで用意に検出可能です.

@c A short overview follows; problems are marked with @sc{sfn}/@sc{lfn} to
@c indicate where they apply: @sc{sfn} means the issues are only relevant to
@c plain @sc{dos}, not to @sc{dos} boxes under Windows, while @sc{lfn}
@c identifies problems that exist even under Windows.
@c 
以下は簡単な全体像です.問題には,適用を示すため@sc{sfn}/@sc{lfn}で印が
ついています.@sc{sfn}は,Windows下の@sc{dos}窓ではなく,プレーンな
@sc{dos}にのみ関連する問題を意味し,一方@sc{lfn}は,Windowsでも存在する
問題を意味しています.

@table @asis
@item 複数のドットの禁止
@c @sc{dos} cannot handle multiple dots in filenames.  This is an especially
@c important thing to remember when building a portable configure script,
@c as @command{autoconf} uses a .in suffix for template files.
@c 
@sc{dos}はファイル名に複数のドットがあるものを扱うことが不可能です.これ
は,@command{autoconf}は@file{.in}をテンプレートファイルの接尾子に使用す
るので,移植性の高いconfigureスクリプトを構築しているときに覚えておく必
要がある,特に重要なことです.

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

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

@noindent
@c but it causes problems on @sc{dos}, as it requires @samp{config.h.in},
@c @samp{source.c.in} and @samp{foo.bar.in}.  To make your package more portable
@c to @sc{dos}-based environments, you should use this instead:
@c 
しかし,それは@samp{config.h.in},@samp{source.c.in},そして
@samp{foo.bar.in}が必要になるので,@sc{dos}では問題があります.パッケー
ジを@sc{dos}ベースの環境でより移植性を高くするため,その代わりに以下を使
用すべきです.

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

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

@item 大文字小文字を区別しない (@sc{lfn})
@c @sc{dos} is case insensitive, so you cannot, for example, have both a
@c file called @samp{INSTALL} and a directory called @samp{install}.  This
@c also affects @command{make}; if there's a file called @samp{INSTALL} in
@c the directory, @command{make install} will do nothing (unless the
@c @samp{install} target is marked as PHONY).
@c 
@sc{dos}は大文字小文字を区別しないので,例えば,@samp{INSTALL}という名の
ファイルと@samp{install}という名のディレクトリの両方を持つことができませ
ん.これは,@command{make}にも影響します.ディレクトリに@samp{INSTALL}と
いう名のファイルがある場合,@command{make install}は(@samp{install}が
PHONYとして印がついていないとき)何もしません.

@item 8+3の制限 (@sc{sfn})
@c Because the @sc{dos} file system only stores the first 8 characters of
@c the filename and the first 3 of the extension, those must be unique.
@c That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
@c @file{foobar-prettybird.c} all resolve to the same filename
@c (@file{FOOBAR-P.C}).  The same goes for @file{foo.bar} and
@c @file{foo.bartender}.
@c 
@sc{dos}ファイルシステムでは,ファイル名の最初の8文字と最初の3文字の拡張
子のみ保存され,それらはユニークである必要があります.それは,
@file{foobar-part1.c},@file{foobar-part2.c},そして
@file{foobar-prettybird.c}の全ては同じ名前(@file{FOOBAR-P.C})になります.
@file{foo.bar}と@file{foo.bartender}も同じものになります.

@c Note: This is not usually a problem under Windows, as it uses numeric
@c tails in the short version of filenames to make them unique.  However, a
@c registry setting can turn this behaviour off.  While this makes it
@c possible to share file trees containing long file names between @sc{sfn}
@c and @sc{lfn} environments, it also means the above problem applies there
@c as well.
@c 
注意:これは通常,ファイル名をユニークにするために短いバージョンでは数字
の後置を使用するので,Windowsでは問題になりません.しかし,レジストリの
設定でこの動作を停止可能です.これで長いファイル名を含むファイルのツリー
を,@sc{sfn}と@sc{lfn}の環境で共有することが可能になりますが,上記の問題
は同様に存在します.

@item 無効な文字
@c Some characters are invalid in @sc{dos} filenames, and should therefore
@c be avoided. In a @sc{lfn} environment, these are @samp{/}, @samp{\},
@c @samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
@c In a @sc{sfn} environment, other characters are also invalid.  These
@c include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
@c 
@sc{dos}ファイル名で無効な文字もあり,そのため避けた方が良いでしょう.
@sc{lfn}の環境では,@samp{/},@samp{\},@samp{?},@samp{*},@samp{:},
@samp{<},@samp{>},@samp{|},そして@samp{"}です.@sc{sfn}環境では,それ
以外にも無効になります.これには,@samp{+},@samp{,},@samp{[},そして
@samp{]}が含まれます.
@end table

@node Shell Substitutions
@section シェルの置換式

@c Contrary to a persistent urban legend, the Bourne shell does not
@c systematically split variables and backquoted expressions, in particular
@c on the right-hand side of assignments and in the argument of @code{case}.
@c For instance, the following code:
@c 
persistent urban legendとは反対に,Bourneシェルは変数とバッククオートさ
れている式が整然と分かれておらず,特に右側の割り当てと@code{case}の引数
がそうです.例えば,以下のコードを考えます.

@example
case "$given_srcdir" in
.)  top_srcdir="`echo "$dots" | sed 's,/$,,'`"
*)  top_srcdir="$dots$given_srcdir" ;;
esac
@end example

@noindent
@c is more readable when written as:
@c 
以下のように書かれているとき,より読みやすくなります.

@example
case $given_srcdir in
.)  top_srcdir=`echo "$dots" | sed 's,/$,,'`
*)  top_srcdir=$dots$given_srcdir ;;
esac
@end example

@noindent
@c and in fact it is even @emph{more} portable: in the first case of the
@c first attempt, the computation of @code{top_srcdir} is not portable,
@c since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"}.
@c Worse yet, not all shells understand @code{"`@dots{}\"@dots{}\"@dots{}`"}
@c the same way.  There is just no portable way to use double-quoted
@c strings inside double-quoted backquoted expressions (pfew!).
@c 
そして,実際それは@emph{より}移植性が高くなります.最初の試みの最初の
caseで,全てのシェルが@code{"`@dots{}"@dots{}"@dots{}`"}を正しく解釈する
わけではないので,@code{top_srcdir}の計算結果は移植性が高くありません.
更に悪いことには,同様に@code{"`@dots{}\"@dots{}\"@dots{}`"}を全てのシェ
ルが解釈するわけではありません.二重引用符でバッククオートされている式の
内部で,二重引用符で囲まれた文字列を使用するための移植性を高める方法は全
くありません(pfew!).

@table @code
@item $@@
@cindex @samp{"$@@"}
@c One of the most famous shell-portability issues is related to
@c @samp{"$@@"}: when there are no positional arguments, it is supposed to
@c be equivalent to nothing.  But some shells, for instance under Digital
@c Unix 4.0 and 5.0, will then replace it with an empty argument.  To be
@c portable, use @samp{$@{1+"$@@"@}}.
@c 
最も有名なシェルの移植性の問題の一つは,@samp{"$@@"}との関連です.位置に
依存する引数が無いとき,それは,何もないことと等価です.しかし,シェルに
よっては,例えばDigital Unix 4.0と5.0では,空の引数で置換されます.移植
性を高めるため,@samp{$@{1+"$@@"@}}を使用してください.

@item $@{@var{var}:-@var{value}@}
@cindex $@{@var{var}:-@var{value}@}
@c Old @sc{bsd} shells, including the Ultrix @code{sh}, don't accept the
@c colon for any shell substitution, and complain and die.
@c 
Ultrix @code{sh}を含め,古い@sc{bsd}シェルはシェルの代入に対してコロンを
受け入れず,文句を言って終了します.

@item $@{@var{var}=@var{literal}@}
@cindex $@{@var{var}=@var{literal}@}
@c Be sure to quote:
@c 
引用符で囲まれていることを確かめてください.

@example
: $@{var='Some words'@}
@end example

@noindent
@c otherwise some shells, such as on Digital Unix V 5.0, will die because
@c of a ``bad substitution''.
@c 
それ以外のDigital Unix V 5.0のようなシェルでは,``bad substitution''のた
めに終了します.

@c Solaris' @command{/bin/sh} has a frightening bug in its interpretation
@c of this.  Imagine you need set a variable to a string containing
@c @samp{@}}.  This @samp{@}} character confuses Solaris' @command{/bin/sh}
@c when the affected variable was already set.  This bug can be exercised
@c by running:
@c 
Solarisの@command{/bin/sh}にはこの解釈に恐ろしいバグがあります.変数を
@samp{@}}を含む文字列に設定する必要があることを想像してください.この
@samp{@}}文字で,影響ある変数が既に設定されているとき,Solarisの
@command{/bin/sh}は混乱します.このバグは,以下のように実行することで作
動されるはずです.

@example
$ @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}に設定し,すなわち,全ての文字
の8番目のビットが設定されるでしょう.@samp{$var}を展開するとき,シェルが
8番目のビットを明示的にリセットするので,単純に@samp{echo $var}を使用し
ている現象が分かりません.このシェルにその違反で混乱させる2つの方法は,
以下のようになります.

@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- },すなわち8ビット目を設定するスペー
スがあるので,IFSによる分離が実行されないのです!!!

@c One piece of good news is that Ultrix works fine with @samp{:
@c $@{list=$default@}}; i.e., if you @emph{don't} quote.  The bad news is
@c then that @sc{qnx} 4.25 then sets @var{list} to the @emph{last} item of
@c @var{default}!
@c 
良いニュースの一つは,Ultrixが@samp{: $@{list=$default@}}で正確に動作す
ることです.すなわち,引用符で囲ま@emph{ない}場合です.悪いニュースとし
ては,@sc{qnx} 4.25は,@var{list}を@var{default}の@emph{最後の}項目に設
定することです!

@c The portable way out consists in using a double assignment, to switch
@c the 8th bit twice on Ultrix:
@c 
移植性の高い方法は,Ultrixで8番目のビットを2回切替えるために,二重(引用
符による)代入を使用することです.

@example
list=$@{list="$default"@}
@end example

@noindent
@c @dots{}but beware of the @samp{@}} bug from Solaris (see above).  For safety,
@c use:
@c 
@dots{}しかし,Solarisの@samp{@}}のバグ(上記を参照してください)には用心
してください.安全にするには,以下を使用してください.

@example
test "$@{var+set@}" = set || var=@var{@{value@}}
@end example


@item `@var{commands}`
@cindex `@var{commands}`
@cindex Command Substitution
@c While in general it makes no sense, do not substitute a single builtin
@c with side effects as Ash 0.2, trying to optimize, does not fork a
@c sub-shell to perform the command.
@c 
一般的には意味がありませんが,Ash 0.2では最適化のためコマンドを実行する
ためサブシェルをforkしないので,副作用のある単一の組み込み物を代入しない
でください.

@c For instance, if you wanted to check that @command{cd} is silent, do not
@c use @samp{test -z "`cd /`"} because the following can happen:
@c 
例えば,@command{cd}が何も出力しないことを調査したい場合,以下のことが生
じるかもしれないので,@samp{test -z "`cd /`"}を使用しないでください.

@example
$ @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
@section 代入

@c When setting several variables in a row, be aware that the order of the
@c evaluation is undefined.  For instance @samp{foo=1 foo=2; echo $foo}
@c gives @samp{1} with sh on Solaris, but @samp{2} with Bash.  You must use
@c @samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
@c 
列にいくつかの変数を設定するとき,評価の順序が定義されていないことを覚え
ておいてください.例えば,@samp{foo=1 foo=2; echo $foo}は,Solarisの
@code{sh}では@samp{1}になりますが,Bashでは@samp{2}になります.順序を強
制するために@samp{;}を使用する必要があります.@samp{foo=1; foo=2; echo
$foo}のようにします.

@c Don't rely on the exit status of an assignment: Ash 0.2 does not change
@c the status and propagates that of the last statement:
@c 
代入の終了ステータスに依存しないようにしてください.Ash 0.2はステータス
を変更せず,最後の文に伝搬します.

@example
$ @kbd{false || foo=bar; echo $?}
1
$ @kbd{false || foo=`:`; echo $?}
0
@end example

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

@example
$ @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
@section 特殊なシェル変数

@c Some shell variables should not be used, since they can have a deep
@c influence on the behavior of the shell.  In order to recover a sane
@c behavior from the shell, some variables should be unset, but
@c @command{unset} is not portable (@pxref{Limitations of Builtins}) and a
@c fallback value is needed.  We list these values below.
@c 
シェルの動作に深く影響するため,使用すべきではないシェル変数もあります.
シェルからまともな動作に戻るため,unsetすべき変数もありますが,
@command{unset}は移植性が無く(@pxref{Limitations of Builtins}),代替値が
必要になります.これらの変数を以下にリストアップします.

@c Alphabetical order, case insensitive, `A' before `a'.
@table @code
@item CDPATH
@evindex CDPATH
@c When this variable is set @code{cd} is verbose, so idioms such as
@c @samp{abs=`cd $rel && pwd`} break because @code{abs} receives the path
@c twice.
@c 
この変数が設定されているとき,@code{cd}は冗長で,そのため@samp{abs=`cd
$rel && pwd`}のような慣用句は,@code{abs}がパスを2回受けとるので駄目にな
ります.

@c FIXME: Which shells?  How do they behave?
@c 
@c Setting @code{CDPATH} to the empty value is not enough for most shells.
@c A simple path separator is enough except for @code{zsh}, which prefers a
@c leading dot:
@c 
@code{CDPATH}を空の値に設定することは,ほとんどのシェルに対して十分では
ありません.単純なパスの分離子は@code{zsh}以外では十分で,そこではドット
の前置が好まれます.

@example
zsh-3.1.6$ @kbd{mkdir foo && (CDPATH=: cd foo)}
/tmp/foo
zsh-3.1.6$ @kbd{(CDPATH=:. cd foo)}
/tmp/foo
zsh-3.1.6$ @kbd{(CDPATH=.: cd foo)}
zsh-3.1.6$
@end example

@noindent
@c (of course we could just @command{unset} @code{CDPATH}, since it also
@c behaves properly if set to the empty string).
@c 
(もちろん,空の文字列を設定した場合正しく動作するので,@code{CDPATH}を
@code{unset}することもできます.)

@c Life wouldn't be so much fun if @command{bash} and @command{zsh} had the
@c same behavior:
@c 
@command{bash}と@command{zsh}が同じ動作をしてくれたら,人生はそんなに楽
しくはなかったでしょうにね.

@example
bash-2.02$ @kbd{mkdir foo && (CDPATH=: cd foo)}
bash-2.02$ @kbd{(CDPATH=:. cd foo)}
bash-2.02$ @kbd{(CDPATH=.: cd foo)}
/tmp/foo
@end example

@c Of course, even better style would be to use @code{PATH_SEPARATOR} instead
@c of a @samp{:}.
@c Therefore, a portable solution to neutralize @code{CDPATH} is
@c 
もちろん,@samp{:}の代わりに@code{PATH_SEPARATOR}を使用する形式の方がよ
り良いでしょう.そのため,@code{CDPATH}を無効にするための移植性の解決方
法は以下のようになります.

@example
CDPATH=$@{ZSH_VERSION+.@}$PATH_SEPARATOR
@end example

@noindent
@c Note that since @command{zsh} supports @command{unset}, you may unset
@c @code{CDPATH} using @code{PATH_SEPARATOR} as a fallback, see
@c @ref{Limitations of Builtins}.
@c 
@command{zsh}は@command{unset}をサポートしているので,代替として
@code{PATH_SEPARATOR}を使用して@samp{CDPATH}をunsetしてもかまいません.
@ref{Limitations of Builtins}を参照してください.

@item IFS
@evindex IFS
@c Don't set the first character of @code{IFS} to backslash.  Indeed,
@c Bourne shells use the first character (backslash) when joining the
@c components in @samp{"$@@"} and some shells then re-interpret (!) the
@c backslash escapes, so you can end up with backspace and other strange
@c characters.
@c 
@code{IFS}の最初の文字をバックスラッシュに設定しないでください.実際,
@samp{"$@@"}で要素を加えるときは,Bourneシェルは最初の文字(バックスラッ
シュ)を使用し,そして,バックスラッシュエスケープをもう一度解釈する(!) 
シェルもあり,そのため,バックスペースとその他の奇妙な文字で終ることが可
能になっています.

@item LANG
@itemx LC_ALL
@itemx LC_COLLATE
@itemx LC_CTYPE
@itemx LC_MESSAGES
@itemx LC_NUMERIC
@itemx LC_TIME
@evindex LANG
@evindex LC_ALL
@evindex LC_COLLATE
@evindex LC_CTYPE
@evindex LC_MESSAGES
@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 @sc{posix} requires that @env{LC_ALL} be set to @samp{C} if the C
@c locale is desired.  However, some older, nonstandard systems (notably
@c @sc{sco}) break if @env{LC_ALL} is set to @samp{C}, so when running on
@c these systems Autoconf-generated scripts first try to unset the
@c variables instead.
@c 
あまりに多くのコンフィグレーションコードがCロケールを仮定し,@sc{posix}
ではCロケールが要求される場合は@env{LC_ALL}を@samp{C}に設定する必要があ
るので,Autoconfが生成したスクリプトは通常,これらのすべての変数を
@samp{C}に設定します.しかし,非標準の古いシステム(特に@sc{sco})では,
@env{LC_ALL}が@samp{C}に設定されている場合は壊れてしまうので,これらのシ
ステムでAutoconfが生成したスクリプトを実行するとき,代わりとして最初に変
数をunsetしてみてください.

@item LANGUAGE
@evindex LANGUAGE

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

@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 the 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}に依存すべきではないことを意味しています.ただし,サブシェ
ルは問題ありません.以下の例では,1行目,6行目,そして9行目は移植性があ
りますが,それ以外の@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} is
@c @samp{:}, while @command{zsh}, even in Bourne shell compatibility mode,
@c sets @code{NULLCMD} to @samp{cat}.  If you forgot to set @code{NULLCMD},
@c your script might be suspended waiting for data on its standard input.
@c 
コマンド@samp{>foo}を実行しているとき,@command{zsh}は@samp{$NULLCMD
>foo}を実行します.Bourneシェルは@code{NULLCMD}が@samp{:}だと考えますが,
@command{zsh}はBourneシェル互換モードでも,@code{NULLCMD}を@samp{cat}に
設定します.@code{NULLCMD}の設定を忘れた場合,スクリプトは標準入力からの
データ待ちのためサスペンド状態になるかもしれません.

@item status
@evindex status
@c This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
@c hence read-only.  Do not use it.
@c 
この変数は,@code{zsh}(少なくとも3.1.6)での@samp{$?}へのエイリアスで,そ
のため読み出し専用になっています.使用しないでください.

@item PATH_SEPARATOR
@evindex PATH_SEPARATOR
@c 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 @sc{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}で標準的な@sc{dos}のパス分離子(@samp{;})を検出したい
ことでしょう.そのため,この変数をunsetするか,@samp{;}に設定してくださ
い.

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


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

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

@c You should always keep in mind that any built-in or command may support
@c options, and therefore have a very different behavior with arguments
@c starting with a dash.  For instance, the innocent @samp{echo "$word"}
@c can give unexpected results when @code{word} starts with a dash.  It is
@c often possible to avoid this problem using @samp{echo "x$word"}, taking
@c the @samp{x} into account later in the pipe.
@c 
全ての組み込みコマンドやコマンドは,オプションをサポートし,そのため,ダッ
シュで始まる引数を用いると,全く異なる動作をすることを覚えておくべきです.
例えば罪の無い@samp{echo "$word"}でも,@code{word}がダッシュで始まるとき
は予期しない結果となるはずです.この問題は,パイプでは@samp{x}を後で評価
するように,@samp{echo "x$word"}を使用することで避けることが可能です.

@table @asis
@item @command{.}
@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}, etcetera, is safe.
@c 
@samp{break 2}の使用などは安全です.


@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 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{-c}.
@c 
オプションを期待しないでください.@code{ECHO_N}などの,@option{-c}をシミュ
レーションする方法は,@xref{Preset Output Variables}.

@c Do not use backslashes in the arguments, as there is no consensus on
@c their handling.  On @samp{echo '\n' | wc -l}, the @command{sh} of
@c Digital Unix 4.0, @sc{mips risc/os} 4.52, answer 2, but the Solaris'
@c @command{sh}, Bash and Zsh (in @command{sh} emulation mode) report 1.
@c Please note that the problem is truly @command{echo}: all the shells
@c understand @samp{'\n'} as the string composed of a backslash and an
@c @samp{n}.
@c 
引数へのバックスラッシュは,処理について同意がとれていないので使用しない
でください.@samp{echo '\n' | wc -l}を用いれば,Digital Unix 4.0と
@sc{mips risc/os} 4.52の@command{sh}では答えは2になりますが,Solarisの
@command{sh},Bash,そしてZsh(の@command{sh}エミュレーションモード)では
答えは1になります.問題が本当に@command{echo}にあることに注意してくださ
い.全てのシェルは,@samp{'\n'}をバックスラッシュと@samp{n}の組み合わせ
であると理解します.

@c Because of these problems, do not pass a string containing arbitrary
@c characters to @command{echo}.  For example, @samp{echo "$foo"} is safe
@c if you know that @var{foo}'s value cannot contain backslashes and cannot
@c start with @samp{-}, but otherwise you should use a here-document like
@c this:
@c 
これらの問題のため,不定の文字を含む文字列を@command{echo}に渡さないでく
ださい.例えば,@var{foo}の値がバックスラッシュを含んでおらず,@samp{-} 
で始まらないことを知っている場合,@samp{echo "$foo"}は安全ですが,それ以
外では以下のようなヒアドキュメントを使用すべきではありません.

@example
cat <<EOF
$foo
EOF
@end example


@item @command{exit}
@c -----------------
@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 status.  In these shells, a trap
@c cannot determine whether it was invoked by plain @code{exit} or by
@c @code{exit 1}.  Instead of calling @code{exit} directly, use the
@c @code{AC_MSG_ERROR} macro that has a workaround for this problem.
@c 
残念ながら,Solaris 8 @command{sh}のように,シェルによっては@code{exit} 
コマンドのステータスを無視する仕掛けが存在するものもあります.これらのシェ
ルでは,その仕掛けで呼び出しがプレーンの@code{exit}によるものなのか,
@code{exit 1}によるものなのか決定できません.@code{exit}を直接呼び出す代
わりに,この問題を回避するために@code{AC_MSG_ERROR}を呼び出してください.


@item @command{export}
@c -------------------
@prindex @command{export}
@c The builtin @command{export} dubs @dfn{environment variable} a shell
@c variable.  Each update of exported variables corresponds to an update of
@c the environment variables.  Conversely, each environment variable
@c received by the shell when it is launched should be imported as a shell
@c variable marked as exported.
@c 
組み込みの@command{export}は,@dfn{環境変数}をシェル変数にダビングします.
変数がエクスポートされて更新される度に,環境変数も更新されます.反対に,
環境変数はがシェルから読み出される度に,開始時にエクスポートされたものと
して印のついたシェル変数をインポートするべきです.

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

@example
#! /bin/sh
echo $FOO
FOO=bar
echo $FOO
exec /bin/sh $0
@end example

@noindent
@c when run with @samp{FOO=foo} in the environment, these shells will print
@c alternately @samp{foo} and @samp{bar}, although it should only print
@c @samp{foo} and then a sequence of @samp{bar}s.
@c 
環境変数で@samp{FOO=foo}として実行した場合,これらのシェルはそれぞれ
@samp{foo}と@samp{bar}を交互に出力しますが,@samp{foo}を出力した後に,続
けて@samp{bar}を出力します.

@c Therefore you should @command{export} again each environment variable
@c that you update.
@c 
このため,それぞれ更新した環境変数を再び@command{export}すべきです.


@item @command{false}
@c ------------------
@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 
シェルによっては,間違ってgrokするので,@code{for}と同じ行に@code{do}を
おいては@emph{いけません}.

@example
for arg; do
  echo "$arg"
done
@end example

@c If you want to explicitly refer to the positional arguments, given the
@c @samp{$@@} bug (@pxref{Shell Substitutions}), use:
@c 
明示的に位置の引数を参照したい場合,@samp{$@@}のバグがあるので,以下のよ
うに使用してください.

@example
for arg in $@{1+"$@@"@}; do
  echo "$arg"
done
@end example

@item @command{if}
@c ---------------
@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{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 parameters,
@c even @samp{-x} for instance), but most shells simply stop the option
@c processing as soon as a non-option argument is found.  Therefore, use
@c @samp{dummy} or simply @samp{x} to end the option processing, and use
@c @command{shift} to pop it out:
@c 
この組み込みコマンドは,一般的なダッシュで始まる引数の問題に直面します.
BashやZshのような現在のシェルでは,オプションの終りを指定する
@option{--}(@option{--}以降の全ての引数は,例えば@samp{-x}であってもパラ
メータです)を理解しますが,ほとんどのシェルは,オプションではない引数が
見つかるとすぐにオプションの処理を単純に停止します.このため,オプション
の処理を終了するために@samp{dummy}や単純に@samp{x}を使用し,それを取り出
すために@command{shift}を使用してください.

@example
set x $my_list; shift
@end example


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


@item @command{source}
@c -------------------
@prindex @command{source}
@c This command is not portable, as @sc{posix} does not require it; use
@c @command{.} instead.
@c 
@sc{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, @sc{posix} does not specify them, so using them
@c is nonportable.  If you combine @samp{&&} and @samp{||} in the same
@c statement, keep in mind that they have equal precedence.
@c 
@code{test}を使用して複数の調査を行う必要がある場合,@code{test}の演算子
の@samp{-a}と@samp{-o}の代わりに,シェル演算子の@samp{&&}と@samp{||}で組
み合わせてください.System Vでは,@samp{-a}と@samp{-o}の優先順位は,単項
演算子とは間違った関係になっています.従って,@sc{posix}はそれらを指定し
ないので,それを使用すると移植性が無くなります.同じ文で@samp{&&}と
@samp{||}を組み合わせる場合,同じ優先順位があることを覚えておいてくださ
い.

@c You may use @samp{!} with @command{test}, but not with @command{if}:
@c @samp{test ! -r foo || exit 1}.
@c 
@command{test}で@samp{!}を使用してもかまいませんが,@command{if}ではでき
ません.@samp{test ! -r foo || exit 1}.


@item @command{test} (files)
@c -------------------------
@c To enable @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 @sc{4.3bsd} does not
@c have it.  Do not use @samp{test -e} either, because Solaris 2.5 does not
@c have it.
@c 
@command{configure}スクリプトでクロスコンパイルのサポートを可能にするた
め,ホストシステムの代わりに,ビルドシステムの特徴のテストは,何もすべき
ではありません.しかし,任意のファイルの存在を調査する必要があることが判
明するかもしれません.そうするために@samp{test -f}や@samp{test -r}を使用
してください.4.3BSDには@samp{test -x}が無いのでを使用しないでください.
また,Solaris 2.5には@samp{test -e}が無いので使用しないでください.

@item @command{test} (strings)
@c ---------------------------
@c Avoid @samp{test "@var{string}"}, in particular if @var{string} might
@c start with a dash, since @code{test} might interpret its argument as an
@c option (e.g., @samp{@var{string} = "-n"}).
@c 
@code{test}は引数をオプションとして解釈するので(例えば,
@samp{@var{string} = "-n"}),特に@var{string}がダッシュで始まる場合,
@samp{test "@var{string}"}を避けてください.

@c Contrary to a common belief, @samp{test -n @var{string}} and @samp{test
@c -z @var{string}} @strong{are} portable, nevertheless many shells (such
@c as Solaris 2.5, AIX 3.2, UNICOS 10.0.0.6, Digital Unix 4 etc.) have
@c bizarre precedence and may be confused if @var{string} looks like an
@c operator:
@c 
一般に信じられていることとは反対に,@samp{test -n @var{string}}と
@samp{test -z @var{string}}は,移植性が@strong{あります}が,それにもかか
わらず,(Solaris 2.5,AIX 3.2,UNICOS 10.0.0.6,Digital Unix 4等の)多く
のシェルには信じられない優先順位があり,@var{string}がオペレータのように
見える場合は混乱するかもしれません.

@example
$ @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 frequent to find variations of the following idiom:
@c 
以下のような慣用句はよく見かけます.

@example
test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
  @var{action}
@end example

@noindent
@c to take an action when a token matches a given pattern.  Such constructs
@c should always be avoided by using:
@c 
与えられているパターンに一致するとき動作します.そのような構文は,常に使
用を避けるべきです.

@example
echo "$ac_feature" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1 &&
  @var{action}
@end example

@noindent
@c Use @code{case} where possible since it is faster, being a shell builtin:
@c 
シェルの組み込みコマンドなのでより速くなっているため,可能な場所では
@code{case}を使用してください.


@example
case $ac_feature in
  *[!-a-zA-Z0-9_]*) @var{action};;
esac
@end example

@c Alas, negated character classes are probably not portable, although no
@c shell is known to not support the @sc{posix.2} syntax @samp{[!@dots{}]}
@c (when in interactive mode, @command{zsh} is confused by the
@c @samp{[!@dots{}]} syntax and looks for an event in its history because of
@c @samp{!}).  Many shells do not support the alternative syntax
@c @samp{[^@dots{}]} (Solaris, Digital Unix, etc.).
@c 
ああ,@sc{posix.2}の構文@samp{[!@dots{}]}をサポートしていないシェルは知
りませんが,文字クラスの否定は移植性が無いかもしれません(対話的モードで
は,@command{zsh}は@samp{[!@dots{}]}の構文で混乱し,@samp{!}のため,ヒス
トリ内のイベントを探します).多くのシェルは,構文@samp{[^@dots{}]}の代替
物をサポートしていません(Solaris,Digital Unix等).

@c One solution can be:
@c 
以下は解決方法の一つです.

@example
expr "$ac_feature" : '.*[^-a-zA-Z0-9_]' >/dev/null &&
  @var{action}
@end example

@noindent
@c or better yet
@c 
以下の方が良いかもしれません.

@example
expr "x$ac_feature" : '.*[^-a-zA-Z0-9_]' >/dev/null &&
  @var{action}
@end example

@c @samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
@c "X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
@c @samp{@var{foo}} contains backslashes.
@c 
@samp{@var{foo}}がバックスラッシュを含んでいるとき問題を回避するので,
@samp{expr "X@var{foo}" : "X@var{bar}"}は,@samp{echo "X@var{foo}" |
grep "^X@var{bar}"}より堅牢です.


@item @command{trap}
@c -----------------
@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 @sc{posix} is not absolutely clear on this point, it is widely
@c admitted that when entering the trap @samp{$?} should be set to the exit
@c status of the last command run before the trap.  The ambiguity can be
@c summarized as: ``when the trap is launched by an @command{exit}, what is
@c the @emph{last} command run: that before @command{exit}, or
@c @command{exit} itself?''
@c 
@sc{posix}では,この点は絶対的に明確ではありませんが,@samp{$?}をトラッ
プするとき,トラップの前の最後に実行されたコマンドの終了ステータスが設定
されるべきだということは,広く認められています.曖昧な部分は以下のように
要約可能です.``トラップが@command{exit}で開始されるとき,実行された
@emph{最後の}コマンドは何でしょう?@command{exit}の直前ですか?それとも
@command{exit}自身ですか?''

@c Bash considers @command{exit} to be the last command, while Zsh and
@c Solaris 8 @command{sh} consider that when the trap is run it is
@c @emph{still} in the @command{exit}, hence it is the previous exit status
@c that the trap receives:
@c 
Bashは@command{exit}を最後のコマンドと考えますが,ZshとSolaris 8
@command{sh}は,トラップが実行されたとき@command{exit}の処理@emph{中}な
ので,トラップを受信する前の終了ステータスだと考えられます.

@example
$ @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の終了ステータスを
設定するために使用され,2番目は,トラップを誘発し,Bashに対して終了ステー
タスとしての42を渡すためです.

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

@example
$ @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}
@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{CDPATH}, you can test for its existence and use
@c it @emph{provided} you give a neutralizing value when @command{unset} is
@c not supported:
@c 
@command{unset}のサポートを仮定することはできませんが,@code{CDPATH}のよ
うな邪魔な変数を利用不可能にすることは非常に役立つので,存在をテストし,
@emph{提供されていれば}それを使用し,@command{unset}がサポートされていな
いときは,無効にする値を与えてください.

@example
if (unset FOO) >/dev/null 2>&1; then
  unset=unset
else
  unset=false
fi
$unset CDPATH || CDPATH=:
@end example

@c @xref{Special Shell Variables}, for some neutralizing values. Also, see
@c @ref{Limitations of Builtins}, documentation of @command{export}, for
@c the case of environment variables.
@c 
無効にする値については,@xref{Special Shell Variables}. また,環境変数の
caseについては@command{export}のドキュメント@ref{Limitations of
Builtins}も参照してください.
@end table

@node Limitations of Usual Tools
@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 @sc{gnu} awk will reject it:
@c 
ユーザ関数呼び出しで,カッコの前に空白を残してはならず,@sc{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のように,内部アンカーに調子が悪いregexエンジ
ンがあるものもあります.

@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}は成功したように見えますが,実際には
何もしません.


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


@item @command{cp}
@c ---------------
@prindex @command{cp}
@c This is thanks to Ian.
@c 
@c SunOS @command{cp} does not support @option{-f}, although its
@c @command{mv} does.  It's possible to deduce why @command{mv} and
@c @command{cp} are different with respect to @option{-f}.  @command{mv}
@c prompts by default before overwriting a read-only file.  @command{cp}
@c does not.  Therefore, @command{mv} requires a @option{-f} option, but
@c @command{cp} does not.  @command{mv} and @command{cp} behave differently
@c with respect to read-only files because the simplest form of
@c @command{cp} cannot overwrite a read-only file, but the simplest form of
@c @command{mv} can.  This is because @command{cp} opens the target for
@c write access, whereas @command{mv} simply calls @code{link} (or, in
@c newer systems, @code{rename}).
@c 
SunOS @command{cp}は@option{-f}をサポートしていませんが,その
@command{mv}はサポートしています.@command{mv}と@command{cp}が
@option{-f}に関して異なっている理由については由来が推測できます.
@command{mv}はデフォルトで,読み込み専用のファイルを上書きする前にプロン
プトを表示します.@command{cp}はそうではありません.そのため,
@command{mv}には@option{-f}オプションが必要ですが,@command{cp}には不要
です.@command{mv}と@command{cp}は,読み込み専用のファイルに対して,動作
が異なり,その理由は,最も簡単な@command{cp}の形式では,読み込み専用のファ
イルを上書きできませんが,最も簡単な@command{mv}形式では,それが可能だと
いうことです.この理由は,@command{cp}はターゲットを書き込みアクセスで開
くのに対し,@command{mv}は単純に@code{link}(または,新しいシステムでは
@code{rename})を呼び出すためです.
@c Ian said: ``I don't think -p or -r are portable''!!! How can you live
@c without -r???


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


@item @command{egrep}
@c ------------------
@prindex @command{egrep}
@c The empty alternative is not portable, use @samp{?} instead. For
@c instance with Digital Unix v5.0:
@c 
空の選択肢は移植性が無く,代わりに@samp{?}を使用してください.例えば,
Digital Unix v5.0では以下のようになります.

@example
> printf "foo\n|foo\n" | egrep '^(|foo|bar)$'
|foo
> printf "bar\nbar|\n" | egrep '^(foo|bar|)$'
bar|
> printf "foo\nfoo|\n|bar\nbar\n" | egrep '^(foo||bar)$'
foo
|bar
@end example

@c @command{egrep} also suffers the limitations of @command{grep}.
@c 
@command{egrep}も@command{grep}の制限で苦しむことになります.


@item @command{expr}
@c -----------------
@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 @sc{posix} does require that @samp{expr
@c ''} return the empty string, it does not specify the result when you
@c @samp{|} together the empty string (or zero) with the empty string.  For
@c example:
@c 
@samp{|}を使用することは可能です.@sc{posix}では,@samp{expr ''}が空の文
字列を返すことを必須としていませんが,空の文字列を用いて空の文字列(また
はゼロ)とともに@samp{|}を用いたときの結果は安全ではありません.例えば以
下を考えます.

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

@c @sc{gnu}/Linux and @sc{posix.2-1992} return the empty string for this
@c case, but traditional Unix returns @samp{0} (Solaris is one such
@c example).  In the latest @sc{posix} draft, the specification has been
@c changed to match traditional Unix's behavior (which is bizarre, but it's
@c too late to fix this).  Please note that the same problem does arise
@c when the empty string results from a computation, as in:
@c 
@sc{gnu}/Linuxと@sc{posix.2-1992}では,この場合は空の文字列を返しますが,
伝統的なUnixでは@samp{0}を返します(Solarisはそのような例の一つです).最
近の@sc{posix}ドラフトでは,その指定は伝統的なUnixの動作に一致するよう変
更されています(信じられないことですが,これを修正するには時すでに遅しで
す).同じ問題が計算結果が空の文字列になるときにも,以下の状態では発生し
ます.

@example
expr bar : foo \| foo : bar
@end example

@noindent
@c Avoid this portability problem by avoiding the empty string.
@c 
空の文字列を避けることで,この移植性の問題を避けてください.


@item @command{expr} (@samp{:})
@c ----------------------------
@prindex @command{expr}
@c Don't use @samp{\?}, @samp{\+} and @samp{\|} in patterns, they are
@c not supported on Solaris.
@c 
Solarisではサポートされていないので,パターン内に,@samp{\?},@samp{\+},
そして@samp{\|}を使用しないでください.

@c The @sc{posix.2-1992} standard is ambiguous as to whether @samp{expr a :
@c b} (and @samp{expr 'a' : '\(b\)'}) output @samp{0} or the empty string.
@c In practice, it outputs the empty string on most platforms, but portable
@c scripts should not assume this.  For instance, the @sc{qnx} 4.25 native
@c @command{expr} returns @samp{0}.
@c 
@sc{posix.2-1992}標準では,@samp{expr a : b}(と@samp{expr 'a' :
'\(b\)'})が@samp{0}を出力するか空の文字列を出力するのかは明確ではありま
せん.実際問題として,それはほとんどのプラットフォームで空の文字列を出力
しますが,移植性の高いスクリプトでは,これを仮定すべきではありません.例
えば,@sc{qnx} 4.25ネイティブの@command{expr}は@samp{0}を返します.

@c You may believe that one means to get a uniform behavior would be to use
@c the empty string as a default value:
@c 
均一な動作を得る手段として,デフォルト値として空の文字列を使用することに
なっていると信じているかもしれません.

@example
expr a : b \| ''
@end example

@noindent
@c unfortunately this behaves exactly as the original expression, see the
@c @samp{@command{expr} (@samp{:})} entry for more information.
@c 
残念ながら,これは元の式として正確に動作します.詳細は,
@samp{@command{expr} (@samp{:})}の項目を参照してください.

@c Older @command{expr} implementations (e.g. SunOS 4 @command{expr} and
@c Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
@c @command{expr} to fail if the matched substring is longer than 120
@c bytes.  In this case, you might want to fall back on @samp{echo|sed} if
@c @command{expr} fails.
@c 
古い@command{expr}の実装(例えば,SunOS 4の@command{expr}とSolaris 8の
@command{/usr/ucb/expr})には,一致したサブ文字列が120バイトより長い場合,
@command{expr}が異常終了するという,思慮の欠けた長さの制限があります.こ
の状況では,@command{expr}が失敗した場合,@samp{echo|sed}に頼りたいと思
うかもしれません.

@c Don't leave, there is some more!
@c 
残っているものはそれだけではありません!

@c The @sc{qnx} 4.25 @command{expr}, in addition of preferring @samp{0} to
@c the empty string, has a funny behavior in its exit status: it's always 1
@c when parentheses are used!
@c 
@sc{qnx} 4.25の@command{expr}には,空の文字列ではなく@samp{0}となること
に加えて,終了ステータスでおかしな動作があります.それはカッコが使用され
ているときには,常に1になるということです!

@example
$ @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}プログラムで異常
終了を捕獲する準備がある場合,結果を2回得る可能性があるので,これは大き
な問題となります.例えば以下を考えます.

@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 @sc{qnx} 4.25.  A
@c simple work around consists in testing @command{expr} and use a variable
@c set to @command{expr} or to @command{false} according to the result.
@c 
ほとんどのホストでは@samp{a}を出力しますが,@sc{qnx} 4.25では@samp{aa}に
なります.単純な回避方法として,@command{expr}でのテストを構成し,結果に
よって@command{expr}や@command{false}で変数を設定する方法を使用します.


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

@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 @sc{gnu} @command{find} reports @samp{./foo-./foo}.
@c 
一方,@sc{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 (eg., IRIX 6.5 and Solaris 2.5.1).  Anyway,
@c Stardent Vistra SVR4 @code{grep} lacks @option{-e}@dots{}  Instead, use
@c alternation and @code{egrep}.
@c 
最後のパターンのみ尊重する@code{grep}(例えば,IRIX 6.5とSolaris 2.5.1)も
あるので,@option{-e}で複数の正規表現を使用しないでください.どちらにし
ろ,Stardent Vistra SVR4の@code{grep}には@option{-e}がありません@dots{} 
その代わりに@code{egrep}を使用してください.


@item @command{ln}
@c ---------------
@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} as a fall back.
@c 
@option{-f}オプションがある@command{ln}に依存しないようにしてください.
古いシステムではシンボリックリンクは利用不可能なので,@samp{ln}に戻して
ください.

@c For versions of the DJGPP before 2.04, @command{ln} emulates soft links
@c for executables by generating a stub that in turn calls the real
@c program.  This feature also works with nonexistent files like in the
@c Unix spec. So @samp{ln -s file link} will generate @file{link.exe},
@c which will attempt to call @file{file.exe} if run. But this feature only
@c works for executables, so @samp{cp -p} is used instead for these
@c systems.  DJGPP versions 2.04 and later have full symlink support.
@c 
2.04以前のバージョンのDJGPPに対して,@command{ln}は実行形式に対するソフ
トリンクを,実際のプログラムを呼び出すスタブを生成することでエミュレート
します.この機能は,Unix独自の実行形式以外のファイルでも動作します.その
ため,@samp{ln -s file link}は@file{link.exe}を生成し,それは実行された
場合に@file{file.exe}の呼び出しを試みます.しかしこの機能は実行形式に対
してのみ動作するので,このシステムでは@samp{cp -p}が代わりに使用されます.
DJGPPの2.04とそれ以降では完全なシンボリックリンクがサポートされています.


@item @command{mv}
@c ---------------
@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 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 @sc{posix}, the Cray
@c @command{sed} will reject @samp{s/[^/]*$//}: use @samp{s,[^/]*$,,}.
@c 
文字クラスの一部の場合でも,パターンに(エスケープされていない)セパレータ
を含めるべきではありません.@sc{posix}準拠では,Crayの@command{sed}は
@samp{s/[^/]*$//}を拒絶します.@samp{s,[^/]*$,,}を使用してください.

@c Sed scripts should not use branch labels longer than 8 characters and
@c should not contain comments.
@c 
Sedのスクリプトは,8文字以上の分岐ラベルを使用すべきではなく,コメントを
含めるべきでもありません.

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

@example
$ @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 @sc{posix}.2 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{\|}の交換は一般的ですが,@sc{posix}.2はそのサポートを要求していな
いので,移植性の高いスクリプトでは避けるべきです.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 helping enforcing indenting as
@c in:
@c 
もちろんオプション@option{-e}には移植性がありますが,それは不要です.ダッ
シュで始まる有効なsedプログラムは無いので,明確にする役には立ちません.
唯一の有効性は,以下のように字下げを強制的に行なうときです.

@example
sed -e @var{instruction-1} \
    -e @var{instruction-2}
@end example

@noindent
@c as opposed to
@c 
これは以下の代わりのものです.

@example
sed @var{instruction-1};@var{instruction-2}
@end example

@c Contrary to yet another urban legend, you may portably use @samp{&} in
@c the replacement part of the @code{s} command to mean ``what was
@c matched''.  All descendents 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}を経験したことはありません)サポートしています.


@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 @sc{mips
@c risc/os}, and on @sc{irix} 5.3, if you run the following @command{sed}
@c script (the line numbers are not actual part of the texts):
@c 
古いシステムには,新しいサイクルと開始するとき,その@samp{t}フラグをリセッ
トすることを``忘れる'' @command{sed}があるシステムもあります.例えば,
@sc{mips risc/os}と@sc{irix} 5.3で,以下の@command{sed}スクリプトを実行
した場合を考えます(行番号は,実際にはテキストの一部ではありません).

@example
s/keep me/kept/g  # a
t end             # b
s/.*/deleted/g    # c
: end             # d
@end example

@noindent
@c on
@c 
ファイルの内容は以下を考えます.

@example
delete me         # 1
delete me         # 2
keep me           # 3
delete me         # 4
@end example

@noindent
@c you get
@c 
以下を得ます.

@example
deleted
delete me
kept
deleted
@end example

@noindent
@c instead of
@c 
これは(本来は)以下のようになります.

@example
deleted
deleted
kept
deleted
@end example

@c Why? When processing 1, a matches, therefore sets the t flag, b jumps to
@c d, and the output is produced.  When processing line 2, the t flag is
@c still set (this is the bug).  Line a fails to match, but @command{sed}
@c is not supposed to clear the t flag when a substitution fails.  Line b
@c sees that the flag is set, therefore it clears it, and jumps to d, hence
@c you get @samp{delete me} instead of @samp{deleted}.  When processing 3 t
@c is clear, a matches, so the flag is set, hence b clears the flags and
@c jumps.  Finally, since the flag is clear, 4 is processed properly.
@c 
なぜでしょう?1行目を処理しているとき,マッチするのでtフラグがセットされ,
b行からd行まで移動し,出力が生成されます.2行目を処理しているとき,tフラ
グはセットされたままです(これはバグです).しかし,a行はマッチに失敗しま
すが,置換が失敗するとき,@command{sed}はtフラグをクリアすることをサポー
トしていません.そのため,フラグがセットされているように見えるb行は,そ
れをクリアし,dへ移動し,その結果,@samp{deleted}の代わりに@samp{delete
me}になります.3行目を処理しているとき,マッチを示すtがクリアされるため,
フラグがセットされ,その結果,b行はフラグをクリアし移動します.最終的に
フラグはクリアになっているので,4行目は正しく処理されます.

@c There are two things one should remind about @samp{t} in @command{sed}.
@c Firstly, always remember that @samp{t} jumps if @emph{some} substitution
@c succeeded, not only the immediately preceding substitution, therefore,
@c always use a fake @samp{t clear; : clear} to reset the t flag where
@c indeed.
@c 
@command{sed}の@samp{t}について覚えておくべきことは2つあります.最初に,
成功した置換に@emph{よっては},置換の直前だけでなく@samp{t}ジャンプする
ことを覚えておき,そのため,tフラグを実際にリセットするために,ごまかし
の@samp{t clear; : clear}を使用してください.

@c Secondly, you cannot rely on @command{sed} to clear the flag at each new
@c cycle.
@c 
2番目は,それぞれの新しいサイクルでフラグをクリアするのを@command{sed}に
依頼することはできません.

@c One portable implementation of the script above is:
@c 
上記のスクリプトの移植性の高い実装の一つは,以下のようになります.

@example
t clear
: clear
s/keep me/kept/g
t end
s/.*/deleted/g
: end
@end example

@item @command{touch}
@c ------------------
@prindex @command{touch}
@c On some old @sc{bsd} systems, @command{touch} or any command that
@c results in an empty file does not update the timestamps, so use a
@c command like @code{echo} as a workaround.
@c 
古い@sc{bsd}システムには,空のファイルに対する@command{touch}のようなコ
マンドで,タイムスタンプを更新しない結果となるものもあるので,回避するた
めに,@code{echo}のようなコマンドを使用してください.

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

@end table


@node Limitations of Make
@section makeの制限

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

@table @asis
@item @code{$<}
@c @sc{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 
@sc{posix}では,@file{makefile}の構成物の@samp{$<}は推測される規則と
@samp{.DEFAULT}規則のみで使用可能だと告げています.通常の規則でのその意
味は明記されていません.例えば,Solaris 8の@command{make}はそれを引数で
置換します.

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

@example
$ @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

@item @code{VPATH}
@cindex @code{VPATH}
@c Don't use it!  For instance any assignment to @code{VPATH} causes Sun
@c @command{make} to only execute the first set of double-colon rules.
@c 
使用しないでください!例えば,@code{VPATH}を割り当てると,Sunの
@command{make}は,二重のコロンの規則のセットを最初に実行するだけになりま
す.
@end table




@c ================================================== Manual Configuration

@node Manual Configuration
@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
@section システムタイプの指定

@c Like other @sc{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 
他の@sc{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}へのコマンドライン引数で,
システムタイプを指定可能です.それはクロスコンパイル時に必要です.クロス
コンパイルで最も複雑な場合,3つのシステムタイプが呼び出されます.指定す
るオプションは以下の通りです.

@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
@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}と,それを識別する3つの
部分@code{build_cpu},@code{build_vendor},そして@code{build_os}を求めま
す.

@c If @option{--build} was specified, then @code{build} is the
@c canonicalization of @code{build_alias} by @command{config.sub},
@c otherwise it is determined by the shell script @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}と,それを識別する3つの部分
@code{host_cpu},@code{host_vendor},そして@code{host_os}を求めます.

@c If @option{--host} was specified, then @code{host} is the
@c canonicalization of @code{host_alias} by @command{config.sub},
@c otherwise it defaults to @code{build}.
@c 
@option{--host}が指定されている場合,@code{host}は@code{host_alias}の
@command{config.sub}で標準化されたものになり,それ以外では,シェルスクリ
プト@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},それを識別する3つの
部分@code{target_cpu},@code{target_vendor},そして@code{target_os}を求
めます.

@c If @option{--target} was specified, then @code{target} is the
@c canonicalization of @code{target_alias} by @command{config.sub},
@c otherwise it defaults to @code{host}.
@c 
@option{--target}が指定されている場合,@code{target}は
@code{target_alias}の@command{config.sub}で標準化されたものになり,それ
以外では,デフォルトで@code{host}になります.
@end defmac

@c Note that there can be artifacts due to the backward compatibility
@c code.  @xref{Hosts and Cross-Compilation}, for more.
@c 
下位互換性のコードのため,人為的なものがあることに注意してください.詳細
は,@xref{Hosts and Cross-Compilation}.

@node Using 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
@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::         Formating 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
@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}のコマンドラインオプション
を与えることが可能です.オプションは以下の形式うちの1つです.

@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 @sc{gnu} linker
@c instead of some other linker.  @option{--with-x} means work with The X
@c Window System.
@c 
例えば,@option{--with-gnu-ld}は,他のリンカの代わりに@sc{gnu}リンカで動
作することを意味します.@option{--with-x}はX Window Systemで動作すること
を意味します.

@c The user can give an argument by following the package name with
@c @samp{=} and the argument.  Giving an argument of @samp{no} is for
@c packages that are used by default; it says to @emph{not} use the
@c package.  An argument that is neither @samp{yes} nor @samp{no} could
@c include a name or number of a version of the other package, to specify
@c more precisely which other package this program is supposed to work
@c with.  If no argument is given, it defaults to @samp{yes}.
@c @option{--without-@var{package}} is equivalent to
@c @option{--with-@var{package}=no}.
@c 
ユーザはパッケージ名に続く引数を,@samp{=}とその引数で与えることが可能で
す.@samp{no}引数を与えるとパッケージはデフォルトを使用します.つまり,
パッケージを使用し@emph{ません}.@samp{yes}も@samp{no}もない引数は,この
プログラムで動作すると予想される他のパッケージをより正確に指定するために,
他のパッケージの名前やバージョンナンバーを含ることが可能です.引数が与え
られていない場合,デフォルトは@samp{yes}です.
@option{--without-@var{package}}は,@option{--with-@var{package}=no}と同
じです.

@c @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}, @@r{[}@var{action-if-given}@r{]}, @@r{[}@var{action-if-not-given}@r{]})
@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 --help}.
@c Avoid tabs in the help string.  You'll need to enclose it in @samp{[}
@c and @samp{]} in order to produce the leading spaces.
@c 
詳細が必要な場合,@var{help-string}は一行以上でもかまいません.
@samp{configure --help}で行が整列していることを確認してください.ヘルプ
文字列でのタブの使用は避けてください.前置するスペースを生成するため
@samp{[}と@samp{]}で囲む必要があるでしょう.

@c You should format your @var{help-string} with the macro
@c @code{AC_HELP_STRING} (@pxref{Pretty Help Strings}).
@c 
@var{help-string}は,マクロ@code{AC_HELP_STRING}で書式化すべきです
(@pxref{Pretty Help Strings}).
@end defmac

@defmac AC_WITH (@var{package}, @var{action-if-given}, @@r{[}@var{action-if-not-given}@r{]})
@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
@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}コマンドライ
ンオプションを与えることが可能です.オプションは以下の書式の1つになりま
す.

@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}, @@r{[}@var{action-if-given}@r{]}, @@r{[}@var{action-if-not-given}@r{]})
@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}, @@r{[}@var{action-if-not-given}@r{]})
@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
@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
@section サイトのコンフィグレーションの詳細

@c Some software packages require complex site-specific information.  Some
@c examples are host names to use for certain services, company names, and
@c email addresses to contact.  Since some configuration scripts generated
@c by Metaconfig ask for such information interactively, people sometimes
@c wonder how to get that information in Autoconf-generated configuration
@c scripts, which aren't interactive.
@c 
複雑なサイト指定の情報が必要となるソフトウェアパッケージもあります.例え
ば,特定のサービスで使用する,ホスト名,会社名,そして連絡先の電子メール
アドレスがあげられます.Metaconfigが生成したコンフィグレーションスクリプ
トには,そのような情報を対話的に尋ねるものもあるので,Autoconfが生成した
対話的でないコンフィグレーションスクリプトが,どうやってその情報を得るの
かと不思議に思うこともあるでしょう.

@c Such site configuration information should be put in a file that is
@c edited @emph{only by users}, not by programs.  The location of the file
@c can either be based on the @code{prefix} variable, or be a standard
@c location such as the user's home directory.  It could even be specified
@c by an environment variable.  The programs should examine that file at
@c run time, rather than at compile time.  Run time configuration is more
@c convenient for users and makes the configuration process simpler than
@c getting the information while configuring.  @xref{Directory Variables,,
@c Variables for Installation Directories, standards, GNU Coding
@c Standards}, for more information on where to put data files.
@c 
そのようなサイトコンフィギュレーション情報は,プログラムではなく
@emph{ユーザだけ}が編集するファイルに書き込むべきです.ファイルの場所は,
@code{prefix}変数に基づくところか,ユーザのホームディレクトリのような,
標準的な場所が可能です.それは環境変数で指定するべきでしょう.プログラム
では,コンパイル時ではなく実行時にファイルを調査するべきです.実行時のコ
ンフィグレーションはユーザにとって便利で,コンフィグレーション時に情報を
得るよりコンフィグレーション処理が簡単になります.データファイルを書き込
む場所の詳細は,@xref{Directory Variables, , Variables for Installation
Directories, standards, GNU Coding Standards}.

@node Transforming Names
@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
@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
@subsection 変換例

@c These transformations are useful with programs that can be part of a
@c cross-compilation development environment.  For example, a
@c cross-assembler running on a Sun 4 configured with
@c @option{--target=i960-vxworks} is normally installed as
@c @file{i960-vxworks-as}, rather than @file{as}, which could be confused
@c with a native Sun 4 assembler.
@c 
これらの変換は,クロスコンパイル開発環境の一部となるプログラムで役に立ち
ます.例えば,@option{--target=i960-vxworks}オプションでコンフィグレーショ
ンされたSun 4でクロスアセンブラの実行では,通常,@file{as}ではなく
@file{i960-vxworks-as}がインストールされるので,ネイティブのSun 4アセン
ブラと混在できます.

@c You can force a program name to begin with @file{g}, if you don't want
@c @sc{gnu} programs installed on your system to shadow other programs with
@c the same name.  For example, if you configure @sc{gnu} @code{diff} with
@c @option{--program-prefix=g}, then when you run @samp{make install} it is
@c installed as @file{/usr/local/bin/gdiff}.
@c 
@sc{gnu}プログラムを,他のプログラムを隠してしまうような同じ名前でシステ
ムにインストールしたくない場合,プログラム名を@file{g}から始めることがで
きます.例えば,@sc{gnu} @code{diff}を@option{--program-prefix=g}でコン
フィグレーションする場合,@samp{make install}時に
@file{/usr/local/bin/gdiff}としてインストールされます.

@c As a more sophisticated example, you could use
@c 
より洗練された例として,以下を使用することができます.

@example
--program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
@end example
@noindent

@c to prepend @samp{g} to most of the program names in a source tree,
@c excepting those like @code{gdb} that already have one and those like
@c @code{less} and @code{lesskey} that aren't @sc{gnu} programs.  (That is
@c assuming that you have a source tree containing those programs that is
@c set up to use this feature.)
@c 
これは,ソースツリーで,@samp{g}をほとんどのプログラム名に前置し, 
@code{gdb}のように既に持っているものと,@code{less}と@code{lesskey}のよ
うに@sc{gnu}プログラムでないものは例外とすることができます.(この機能を
使用するために,セットアップされたプログラムを含むソースツリーを持ってい
ることが前提です.)

@c One way to install multiple versions of some programs simultaneously is
@c to append a version number to the name of one or both.  For example, if
@c you want to keep Autoconf version 1 around for awhile, you can configure
@c Autoconf version 2 using @option{--program-suffix=2} to install the
@c programs as @file{/usr/local/bin/autoconf2},
@c @file{/usr/local/bin/autoheader2}, etc.  Nevertheless, pay attention
@c that only the binaries are renamed, therefore you'd have problems with
@c the library files which might overlap.
@c 
同時にいくつかのプログラムの複数のバージョンをインストールする方法の1つ
として,1つあるいは両方の名前にバージョンナンバーを追加することです.例
えば,しばらくの間Autoconfバージョン1を保持したい場合,Autoconfバージョ
ン2を,@file{/usr/local/bin/autoconf2}や 
@file{/usr/local/bin/autoheader2}等としてプログラムをインストールするた
め,@option{--program-suffix=2}を使用してコンフィグレーションすることが
可能です.それにもかかわらず,バイナリのみ名前が変更されることに注意して
ください.そのため,オーバーラップする可能性のあるライブラリファイルは問
題になるでしょう.

@node 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
@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 @command{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 @command{CONFIG_SITE}
@c environment variable.
@c 
デフォルトでない値を与える必要がある場合,サイトファイルは@code{CFLAGS} 
のような他の出力変数に対しデフォルト値を設定するための良い場所です.通常
コマンドラインで繰り返し行っていることならなんでもできます.@var{prefix} 
や@var{exec_prefix}に対してデフォルト値ではないものを使用したい場合(サイ
トファイルの場所がどこであれ),@code{CONFIG_SITE}を用いて指定すると,サ
イトファイルで設定できます.

@c You can set some cache values in the site file itself.  Doing this is
@c useful if you are cross-compiling, so it is impossible to check features
@c that require running a test program.  You could ``prime the cache'' by
@c setting those values correctly for that system in
@c @file{@var{prefix}/etc/config.site}.  To find out the names of the cache
@c variables you need to set, look for shell variables with @samp{_cv_} in
@c their names in the affected @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 @command{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
@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
@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{実際に作成されるもの}のテンプレートファイルとなる@file{config.status}と
いう名前のファイルを作成します.それは,再コンフィグレーションが必要な状
況でパッケージが前回コンフィグレーションされたときに指定されたコンフィグ
レーションオプションも記録しています.

@c Synopsis:
@c 
構文は以下のとおりです.
@example
./config.status @var{option}@dots{} [@var{file}@dots{}]
@end example

@c It configures the @var{files}, if none are specified, all the templates
@c are instantiated.  The files must be specified without their
@c dependencies, as in
@c 
@var{files}をコンフィグレーションし,何も指定されていない場合は全てのテ
ンプレートが実際に作成されるものになります.ファイルは,依存性無しで指定
する必要があり,以下のようにします.

@example
./config.status foobar
@end example

@noindent
@c not
@c 
以下のようにはしません.

@example
./config.status foobar:foo.in:bar.in
@end example

@c The supported @var{option}s are:
@c 
サポートされている@var{option}は以下のとおりです.

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options, the list of the template
@c files and exit.
@c 
コマンドラインオプションの概要とテンプレートファイルのリストを出力し,終
了します.

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

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

@item --file=@var{file}[:@var{template}]
@c Require that @var{file} be instantiated as if
@c @samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used.  Both
@c @var{file} and @var{template} may be @samp{-} in which case the standard
@c output and/or standard input, respectively, is used.  If a
@c @var{template} filename is relative, it is first looked for in the build
@c tree, and then in the source tree. @xref{Configuration Actions}, for
@c more details.
@c 
@samp{AC_CONFIG_FILES(@var{file}:@var{template})}が使用されているかのよ
うに,実際に作成されるファイルを要求します.@var{file}と@var{template}は
どちらも@samp{-}が可能で,それぞれ標準出力そして/または標準入力が使用さ
れます.@var{template}ファイル名が相対的な場合,最初にビルドツリーで検索
され,次にソースツリーで検索されます.詳細は,@xref{Configuration
Actions}.

@c This option and the following ones provide one way for separately
@c distributed packages to share the values computed by @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
@chapter 時代遅れの構成物

@c Autoconf changes, and throughout the years some constructs are obsoleted.
@c Most of the changes involve the macros, but the tools themselves, or
@c even some concepts, are now considered obsolete.
@c 
Autoconfは変化し,歳月を経て時代遅れになった構成物もあります.変更のほと
んどはマクロの呼び出しですが,ツール自身や,そのコンセプトさえも今では時
代遅れと考えられるものもあります.

@c You may completely skip this chapter if you are new to Autoconf, its
@c intention is mainly to help maintainers updating their packages by
@c understanding how to move to more modern constructs.
@c 
新しいAutoconfを使用する場合は,この章を完全に飛ばしてもかまいません.こ
こでの目的は主に,より新しい構成物に変更する方法を理解することで,パッケー
ジを更新している管理者を助けることです.

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

@node Obsolete config.status Use
@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 @command{CONFIG_HEADERS} in the @code{make} rules, equally
@c for @command{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} copies comments and
@c @code{#define} and @code{#undef} statements from @file{acconfig.h} in
@c the current directory, if present.  This file used to be mandatory if
@c you @code{AC_DEFINE} any additional symbols.
@c 
@file{config.h.in}を生成するため,@command{autoheader}はそれぞれのシンボ
ルに対するテンプレートを構築したり見つたりする必要がありました.現在の
Autoconfのリリースでは,@code{AH_VERBATIM}と@code{AH_TEMPLATE}を使用しま
すが(@pxref{Autoheader Macros}),古いリリースでは,ファイル
@file{acconfig.h}に必要なテンプレートのリストを含めていました.
@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 jurasik versions
@c of Autoconf is to create the files @file{@var{file}.top} (typically
@c @file{config.h.top}) and/or @file{@var{file}.bot} in the current
@c directory.  If they exist, @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 Use only the @code{AH_} macros, @file{configure.ac} should be
@c self-contained, and should not depend upon @file{acconfig.h} etc.
@c 
@code{AH_}マクロだけを使用し,@file{configure.ac}は自己内蔵型にすべきで,
そして,@file{acconfig.h}等に依存すべきではありません.


@node autoupdate Invocation
@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
@section 時代遅れのマクロ

@c Several macros are obsoleted in Autoconf, for various reasons (typically
@c they failed to quote properly, couldn't be extended for more recent
@c issues etc.).  They are still supported, but deprecated: their use
@c should be avoided.
@c 
様々な理由で(通常適切に引用婦で囲むことに失敗していて以前の配布物が拡張
できないなどの理由です),いくつかのマクロがAutoconfで時代遅れになってい
ます.それらはサポートされていますが,止めるようお願いします.それらの使
用は避けた方が良いでしょう.

@c During the jump from Autoconf version 1 to version 2, most of the
@c macros were renamed to use a more uniform and descriptive naming scheme,
@c but their signature did not change.  @xref{Macro Names}, for a
@c description of the new naming scheme.  Below, there is just the mapping
@c from old names to new names for these macros, the reader is invited to
@c refer to the definition of the new macro for the signature and the
@c description.
@c 
Autoconfのバージョン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.  Second, missing types are not
@c @code{typedef}'d, they are @code{#define}'d, which can lead to
@c incompatible code in the case of pointer types.
@c 
2.13までのAutoconfでは,このバージョンの@code{AC_CHECK_TYPE}を提供するた
めに使用されていましたが,問題があり反対されていました.第一に,それは
@code{CHECK}一族のメンバーですが,単一のファミリーに過ぎず,調査以上のこ
とを行なっていました.次に,足りない型は@code{typedef}されず,それらは
@code{#define}されるので,ポインタ型の場合は互換性がなくなってしまうはず
です.

@c This use of @code{AC_CHECK_TYPE} is obsolete and discouraged, see
@c @ref{Generic Types}, for the description of the current macro.
@c 
この@code{AC_CHECK_TYPE}の使用は時代遅れで推奨できません.現在のマクロの
記述は,@ref{Generic Types}を参照してください.

@c If the type @var{type} is not defined, define it to be the C (or C++)
@c builtin type @var{default}; e.g., @samp{short} or @samp{unsigned}.
@c 
型@var{type}が定義されていない場合,それはC(またはC++)の組み込みの型
@var{default}に定義されます.例えば,@samp{short}や@samp{unsigned}です.

@c This macro is equivalent to:
@c 
このマクロは以下と等価です.

@example
AC_CHECK_TYPE([@var{type}],
              [AC_DEFINE([@var{type}], [@var{default}],
                         [Define to `@var{default}' if <sys/types.h>
                          does not define.])])
@end example

@c In order to keep backward compatibility, the two versions of
@c @code{AC_CHECK_TYPE} are implemented, selected by a simple heuristics:
@c 
下位互換性のため,2つのバージョンの@code{AC_CHECK_TYPE}が実装されていて,
単純な発見的手法で選択されます.

@enumerate
@item
@c If there are three or four arguments, the modern version is used.
@c 
引数が3つまたは4つある場合,現在のバージョンが使用されます.

@item
@c If the second argument appears to be a C or C++ type, then the
@c obsolete version is used.  This happens if the argument is a C or C++
@c @emph{builtin} type or a C identifier ending in @samp{_t}, optionally
@c followed by one of @samp{[(* } and then by a string of zero or more
@c characters taken from the set @samp{[]()* _a-zA-Z0-9}.
@c 
2番目の引数にCやC++の型がある場合,時代遅れのバージョンが使用されます.
引数がCやC++に@emph{組み込まれている}型,または@samp{_t}で終るC識別子で,
さらに一つの@samp{[(* }が続き,その後にゼロ以上の@samp{[]()* _a-zA-Z0-9}
以外の文字列が続く場合はこうなります.

@item
@c If the second argument is spelled with the alphabet of valid C and C++
@c types, the user is warned and the modern version is used.
@c 
2番目の引数が有効なCとC++のアルファベットで綴られている型の場合,ユーザ
は警告され,現在のバージョンが使用されます.

@item
@c Otherwise, the modern version is used.
@c 
それ以外では,現在のバージョンが使用されます.
@end enumerate

@noindent
@c You are encouraged either to use a valid builtin type, or to use the
@c equivalent modern code (see above), or better yet, to use
@c @code{AC_CHECK_TYPES} together with
@c 
有効な組み込まれている型を使用する,または,同じ現在のコード(上記参照)を
使用する,もしくはそれより良いものとして,@code{AC_CHECK_TYPES}とともに
使用することをお勧めします.

@example
#if !HAVE_LOFF_T
typedef loff_t off_t;
#endif
@end example
@end defmac
@c end of AC_CHECK_TYPE

@defmac AC_CHECKING (@var{feature-description})
@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}, @@r{[}@var{action-if-not-found}@r{]})
@acindex COMPILE_CHECK
@c This is an obsolete version of @code{AC_TRY_LINK} (@pxref{Examining
@c Libraries}), with the addition that it prints @samp{checking for
@c @var{echo-text}} to the standard output first, if @var{echo-text} is
@c non-empty.  Use @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead
@c to print messages (@pxref{Printing Messages}).
@c 
これは,@code{AC_TRY_LINK}の時代遅れのバージョンで(@pxref{Examining
Libraries}),@var{echo-text}が空の場合は,それは追加として@samp{checking
for @var{echo-text}}を標準出力に最初に出力します.メッセージを出力するた
めには,代わりに@code{AC_MSG_CHECKING}と@code{AC_MSG_RESULT}を使用してく
ださい(@pxref{Printing Messages}).
@end defmac

@defmac AC_CONST
@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_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}}
@item Header            @tab Old Symbol     @tab New Symbol
@item @file{dirent.h}   @tab @code{DIRENT}  @tab @code{HAVE_DIRENT_H}
@item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
@item @file{sys/dir.h}  @tab @code{SYSDIR}  @tab @code{HAVE_SYS_DIR_H}
@item @file{ndir.h}     @tab @code{NDIR}    @tab @code{HAVE_NDIR_H}
@end multitable
@end defmac

@defmac AC_DYNIX_SEQ
@acindex DYNIX_SEQ
@c If on Dynix/PTX (Sequent @sc{unix}), add @option{-lseq} to output variable
@c @code{LIBS}.  This macro used to be defined as
@c 
Dynix/PTX (Sequent @sc{unix})の場合,出力変数@code{LIBS}に@option{-lseq} 
を追加します.このマクロは以下のように定義されるよう使用されていました.

@example
AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS")
@end example

@noindent
@c now it is just @code{AC_FUNC_GETMNTENT}.
@c 
現在では,@code{AC_FUNC_GETMNTENT}で行ないます.
@end defmac

@defmac AC_EXEEXT
@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}が見つかり,第3引数(@samp{struct rusage *})の内容が満たされ
ている場合,HP-UXは違いますが,@code{HAVE_WAIT3}を定義します.

@c These days portable programs should use @code{waitpid}, not
@c @code{wait3}, as @code{wait3} is being removed from the Open Group
@c standards, and will not appear in the next revision of POSIX.
@c 
現在では,@code{wait3}はOpen Groupの標準から削除されていて,次のリビジョ
ンのPOSIXでは無くなるので,移植性の高いプログラムでは@code{wait3}ではな
く@code{waitpid}を使用すべきです.
@end defmac

@defmac AC_GCC_TRADITIONAL
@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}, @@r{[}@var{action-if-found}@r{]}, @@r{[}@var{action-if-not-found}@r{]}, @@r{[}@var{other-libraries}@r{]})
@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 IRIX (Silicon Graphics @sc{unix}), add @option{-lsun} to output
@c @code{LIBS}.  If you were using it to get @code{getmntent}, use
@c @code{AC_FUNC_GETMNTENT} instead.  If you used it for the NIS versions
@c of the password and group functions, use @samp{AC_CHECK_LIB(sun,
@c getpwnam)}.  Up to Autoconf 2.13, it used to be
@c 
IRIX (Silicon Graphics @sc{unix})の場合,出力変数@code{LIBS}に
@option{-lsun}を追加します.@code{getmntent}を取得するためにそれを使用し
ている場合,その代わりに@code{AC_FUNC_GETMNTENT}を使用してください.NIS 
バージョンのパスワードとグループ関数のためにそれを使用している場合.
@samp{AC_CHECK_LIB(sun, getpwnam)}を使用してください.Autoconf 2.13まで
は,以下のように使用されていました.

@example
AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS")
@end example

@noindent
@c now it is defined as
@c 
現在ではそれは以下のように定義されます.

@example
AC_FUNC_GETMNTENT
AC_CHECK_LIB(sun, getpwnam)
@end example
@end defmac

@defmac AC_LANG_C
@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 @xref{Standard
@c Symbols}.
@c 
@code{mem}関数が@file{memory.h}で定義されている場合に
@code{NEED_MEMORY_H}を定義するために使用されます.現在は,
@samp{AC_CHECK_HEADERS(memory.h)}と同じです.コードを
@code{NEED_MEMORY_H}ではなく@code{HAVE_MEMORY_H}に依存するように調整して
ください.@xref{Standard Symbols}.
@end defmac

@defmac AC_MINGW32
@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}, @@r{[}@var{suggestion}@r{]})
@acindex OBSOLETE
@c Make @code{m4} print a message to the standard error output warning that
@c @var{this-macro-name} is obsolete, and giving the file and line number
@c where it was called.  @var{this-macro-name} should be the name of the
@c macro that is calling @code{AC_OBSOLETE}.  If @var{suggestion} is given,
@c it is printed at the end of the warning message; for example, it can be
@c a suggestion for what to use instead of @var{this-macro-name}.
@c 
@code{m4}が標準エラー出力に,@var{this-macro-name}が時代遅れだというメッ
セージをそれが呼び出されているファイルと行とともに出力します.
@var{this-macro-name}は,@code{AC_OBSOLETE}が呼び出しているマクロ名にす
べきです.@var{suggestion}が与えられている場合,それは警告メッセージの終
りに出力されます.例えば,@var{this-macro-name}の代わりに使用するものを
提案することが可能になります.

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

@example
AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
@end example

@c You are encouraged to use @code{AU_DEFUN} instead, since it gives better
@c services to the user.
@c 
ユーザに対するより良いサービスとなるので,代わりに@code{AU_DEFUN}を使用
することを推奨します.
@end defmac

@defmac AC_OFF_T
@acindex OFF_T
@code{AC_TYPE_OFF_T}
@end defmac

@defmac AC_OUTPUT (@@r{[}@var{file}@r{]}@dots{}, @@r{[}@var{extra-cmds}@r{]}, @@r{[}@var{init-cmds}@r{]})
@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}, @@r{[}@var{init-cmds}@r{]})
@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, while
@c @code{AC_CONFIG_COMMANDS}.  This means that @code{AC_CONFIG_COMMANDS}
@c can safely be given macro calls as arguments:
@c 
@code{AC_CONFIG_COMMANDS}が追加のキーを要求する事実以外,重要な差は
@code{AC_OUTPUT_COMMANDS}が引数を2回引用符で囲んでいますが
@code{AC_CONFIG_COMMANDS}はそうではないということです.これは,
@code{AC_CONFIG_COMMANDS}が引数として呼び出されるマクロとして安全に与え
ることが可能だということを意味します.

@example
AC_CONFIG_COMMANDS(foo, [my_FOO()])
@end example

@noindent
@c conversely, where one level of quoting was enough for literal strings
@c with @code{AC_OUTPUT_COMMANDS}, you need two with
@c @code{AC_CONFIG_COMMANDS}.  The following lines are equivalent:
@c 
反対に,1レベルの引用符が@code{AC_OUTPUT_COMMANDS}でのリテラル文字列に対
して十分なところでは,@code{AC_CONFIG_COMMANDS}が2回必要になります.以下
の行は等価です.

@example
@group
AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
@end group
@end example
@end defmac

@defmac AC_PID_T
@acindex PID_T
@code{AC_TYPE_PID_T}
@end defmac

@defmac AC_PREFIX
@acindex PREFIX
@code{AC_PREFIX_PROGRAM}
@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_STRUCT_ST_BLKSIZE}
@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_STRUCT_ST_RDEV}
@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
@code{AC_TRY_CPP}
@end defmac

@defmac AC_TEST_PROGRAM
@acindex TEST_PROGRAM
@code{AC_TRY_RUN}
@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_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 @sc{bsd} string functions are defined in
@c @file{strings.h}.  You should no longer depend upon @code{USG}, but on
@c @code{HAVE_STRING_H}, see @xref{Standard Symbols}.
@c 
@sc{bsd}文字列関数が@file{strings.h}で定義されている場合,@code{USG}を定
義します.これからは@code{USG}ではなく@code{HAVE_STRING_H}に依存するよう
にすべきです.@xref{Standard Symbols}.
@end defmac

@defmac AC_UTIME_NULL
@acindex UTIME_NULL
@code{AC_FUNC_UTIME_NULL}
@end defmac

@defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@@r{[}@var{cmd}@r{]})
@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.
@c 
キャッシュファイルが現在のホスト,ターゲット,そしてビルドシステムのタイ
プで矛盾がある場合,@var{cmd}を実行したりデフォルトのエラーメッセージを
出力したりするために使用されていました.

@c This is now handled by default.
@c 
これは現在デフォルトで処理されます.
@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
@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
@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
@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
@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 it prints about what to replace the obsolete macros with.  In
@c particular, the mechanism for reporting the results of tests has
@c changed.  If you were using @code{echo} or @code{AC_VERBOSE} (perhaps
@c via @code{AC_COMPILE_CHECK}), your @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
@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
@subsection マクロの書き方の変更

@c When defining your own macros, you should now use @code{AC_DEFUN}
@c instead of @code{define}.  @code{AC_DEFUN} automatically calls
@c @code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
@c do not interrupt other macros, to prevent nested @samp{checking@dots{}}
@c messages on the screen.  There's no actual harm in continuing to use the
@c older way, but it's less convenient and attractive.  @xref{Macro
@c Definitions}.
@c 
独自のマクロを定義するとき,現在は@code{define}の代わりに@code{AC_DEFUN} 
を使用すべきです.@code{AC_DEFUN}は@code{AC_PROVIDE}を自動的に呼び出し, 
@code{AC_REQUIRE}のために呼び出されるマクロが,画面上で入れ子状になって
いる@samp{checking@dots{}}メッセージを妨げないように,他のマクロを中断し
ていないことを確かめます.古い方法を使用し続けても実際に害はありませんが,
便利さと美しさが現象します.@xref{Macro Definitions}.

@c You probably looked at the macros that came with Autoconf as a guide for
@c how to do things.  It would be a good idea to take a look at the new
@c versions of them, as the style is somewhat improved and they take
@c advantage of some new features.
@c 
恐らく,Autoconfと共にやってくるマクロを,何かをする方法のガイドとして見
ることになるでしょう.新しいバージョンのものを見ることは,スタイルが改善
されているものもあり,新しい機能も利用しているので,よい考えでしょう.

@c If you were doing tricky things with undocumented Autoconf internals
@c (macros, variables, diversions), check whether you need to change
@c anything to account for changes that have been made.  Perhaps you can
@c even use an officially supported technique in version 2 instead of
@c kludging.  Or perhaps not.
@c 
文書化されていないAutoconfの内部(マクロ,変数,変換)を使用して,トリッキー
なことをしていた場合,なされた変更を考慮するため,変更する必要があるかど
うか調査してください.恐らくkludeする代わりに,バージョン2で公式にサポー
トされたテクニックを使用することができます.そうしなければダメでしょう.

@c To speed up your locally written feature tests, add caching to them.
@c See whether any of your tests are of general enough usefulness to
@c encapsulate into macros that you can share.
@c 
ローカルで書かれた特徴のテストを高速化するため,キャッシュを加えてくださ
い.共有できるマクロをカプセル化するため,テストが一般的に十分役に立つこ
とを確かめてください.


@node Autoconf 2.13
@section バージョン2.13からの更新

@c The introduction of the previous section (@pxref{Autoconf 1}) perfectly
@c suits this section...
@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
@end menu

@node 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... @code{AC_DEFUN} itself!
@c 
多くの多くの(いくらでも続けたい)Autoconfマクロは,少なくとも
@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
@subsection 新しいマクロ

@cindex @code{undefined macro: _m4_divert_diversion}

@c Because Autoconf has been dormant for years, Automake provided
@c Autoconf-like macros for a while.  Autoconf 2.50 now provides better
@c versions of these macros, integrated in the @code{AC_} namespace,
@c instead of @code{AM_}.  But in order to ease the upgrading via
@c @command{autoupdate}, bindings to such @code{AM_} macros are provided.
@c 
Autoconfは何年も休止中だったので,その間AutomakeがAutoconfライクのマクロ
を提供していました.現在は,Autoconf 2.50がこれらのマクロのより良いバー
ジョンを提供していて,@code{AM_}ではなく@code{AC_}の名前空間で統合されて
います.しかし,@command{autoupdate}で容易に更新できるように,そのような
@code{AM_}マクロも結合されて提供されています.

@c Unfortunately Automake did not quote the name of these macros!
@c Therefore, when @command{m4} finds something like
@c @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, ...)} 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, ...)}のようなマ
クロを@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 by 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
@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 to cure).
@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 defaults
@c for build, host and target system types.  The following configure
@c statement will configure a cross toolchain that will run on NetBSD/alpha
@c but generate code for GNU Hurd/sparc, which is also the build platform.
@c 
下位互換性のため,@command{configure}はシステムタイプ自身をオプションと
して受け入れます.そのようなオプションは,ビルド,ホスト,そしてターゲッ
トのシステムタイプのデフォルトに優先されます.以下のコンフィグレーション
命令では,NetBSD/alphaで実行するのですが,ビルドプラットフォームにもなる
GNU Hurd/sparcのコードを生成する一連のクロスツールがコンフィグレーション
されます.

@example
./configure --host=alpha-netbsd sparc-gnu
@end example

@sp 1

@c In Autoconf, the variables @code{build}, @code{host}, and @code{target}
@c had a different semantics before and after the invocation of
@c @code{AC_CANONICAL_BUILD} etc.  Now, the argument of @option{--build} is
@c strictly copied into @code{build_alias}, and is left empty otherwise.
@c After the @code{AC_CANONICAL_BUILD}, @code{build} is set to the
@c canonicalized build type.  To ease the transition, before, its contents
@c is the same as that of @code{build_alias}.  Do @emph{not} rely on this
@c broken feature.
@c 
Autoconf内部の変数@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 by @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
@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 a 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
@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 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 
この変更は,GNU Build Systemの構成要素から要求されました.特に,
@file{configure.ac}のパースで使用される様々な壊れやすいテクニックは,す
べてトレースを使用することで置換されます.結果として,すべての動作をトレー
ス可能にする必要があり,それでクリティカルな変数の代入は時代遅れになりま
す.幸運にも@code{LIBOBJS}だけが問題となっています.

@c At the time this documentation is written, Automake does not rely on
@c traces yet, but this is planed for a near future.  Nevertheless, to
@c ease the transition, and to guarantee this future Automake release will
@c be able to use Autoconf 2.53, using @code{LIBOBJS} directly will make
@c @command{autoconf} fail.  But note that the output, @command{configure},
@c is correct and fully functional: you have some delay to adjust your
@c source.
@c 
このドキュメントが書かれている時点では,Automakeはトレースに依存していま
せんが,近い将来に計画されています.それにもかかわらず,変換を容易にする
ためと,この将来のAutomakeのリリースでAutoconf 2.53を使用することが可能
であることを保証するために,@code{LIBOBJS}を直接使用することで
@command{autoconf}は異常終了します.しかし,@command{configure}の出力は
正しく十分に機能することに注意してください.しばらく待ってソースを調整し
てください.

@c There are 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

@c When asked for automatic de-ANSI-fication, Automake needs
@c @code{LIBOBJS}'ed filenames to have @samp{$U} appended to the
@c base names.   Libtool requires the definition of @code{LTLIBOBJS}, which
@c suffixes are mapped to @samp{.lo}.  Although Autoconf provides them with
@c means to free the user to do that by herself, by the time of this
@c writing, none do.  Therefore, it is common to see @file{configure.ac}
@c end with:
@c 
自動的なde-ANSI-ficationが依頼されたとき,Automakeは,@samp{$U} をベース
ファイル名に追加するために@code{LIBOBJS}されたファイル名が必要です.
Libtoolは,接尾子が@samp{.lo}になっている@code{LTLIBOBJS}の定義が必要で
す.Autoconfはユーザが自由に用いるためにそれらを提供していますが,これを
書いているときは何もしません.そのため,一般的には@file{configure.ac}の
終りで以下のようになっていることが分かります.

@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 First, note that this code is @emph{wrong}, because @samp{.o} is not the
@c only possible extension@footnote{
@c @c
@c Yet another reason why assigning @code{LIBOBJS} directly is discouraged.
@c @c
@c }!  Because the token @code{LIBOBJS} is now
@c forbidden, you will have to replace this snippet with:

最初に,@samp{.o}が拡張子ではない可能性があるので,このコードが@emph{間
違っている}ことに注意してください@footnote{

@code{LIBOBJS}を直接代入するもう一つの理由には反対です.

}! トークン@code{LIBOBJS}は今では禁止されているので,以下の断片で置換す
る必要があるでしょう.

@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

@noindent
@c Unfortunately, @command{autoupdate} cannot help here, since... this is
@c not a macro!  Of course, first make sure your release of Automake and/or
@c Libtool still requires these.
@c 
残念ながら,@command{autoupdate}はここでは役には立たないはずで,それは
@dots{}これがマクロではないためです! もちろん,Automakeそして/または
Libtoolがこれらを要求するリリースだということを,最初に確認してしてくだ
さい.

@c ============================= Generating Test Suites with Autotest

@node Using Autotest
@chapter Autotestで一般的なテストスイートを生成する
@cindex Autotest

@comment @strong{Note: This section describes an experimental feature which will
@comment be part of Autoconf in a forthcoming release.  Although we believe
@comment Autotest is stabilizing, this documentation describes an interface which
@comment might change in the future: do not depend upon Autotest without
@comment subscribing to the Autoconf mailing lists.}

@c @display
@strong{注意:このセクションでは,この次のリリースのAutoconfの一部となっ
ている,実験的な機能を記述しています.我々はAutotestが安定していること
を信じていますが,このドキュメントでは将来変更される可能性があるインター
フェースを記述しています.Autoconfのメーリングリストを購読しないまま
Autotestに依存することはやめてください.}
@c @end display

@c It is paradoxical that portable projects depend on nonportable tools to
@c 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 test
@c suite was using DejaGNU, a rich and complex testing framework, but which
@c is far from being standard on Unix systems.  Worse yet, it was likely to
@c be missing on the most fragile platforms, the very platforms that are
@c most likely to torture Autoconf and exhibit deficiencies.
@c 
移植性の高いプロジェクトで,テストスイートを実行するために移植性のないツー
ルに依存していることは,矛盾しています.Autoconf自身がこの問題の典型です.
2.13までは完全な移植性を目的としていましたが,そのテストスイートは
DejaGNUを使用していて,それは高品質で複雑なテストフレームワークですが,
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, 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,GNU Tar 
といったそれ以外のプロジェクトでは,それぞれ異なるニーズがあり,一般的な
テストフレームワークとしてのAutotestにのんびりと磨きをかけていました.

@c Nonetheless, compared to DejaGNU, Autotest is inadequate for interactive
@c tool testing, which is probably its main limitation.
@c 
それにもかかわらず,DejaGNUと比較して,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
@section Autotestテストスイートを使用する

@menu
* testsuite Scripts::           The concepts of Autotest
* Autotest Logs::               Their contents
@end menu

@node 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 GNU @code{m4} under the scene, to
@c produce a stand-alone Bourne shell script which then gets distributed.
@c Neither @command{autom4te} nor GNU @code{m4} are not needed anymore at
@c the installer end.
@c 
Autotestを使用してテストスイートや評価スイートを生成することは簡単です.
評価スイート全体は,@command{autom4te}で処理されるファイルに保持されてい
て,それ自身は配布物から得られるスタンドアローンのBourneシェルスクリプト
を生成するために,GNU M4の環境下で使用されます.@command{autom4te}もGNU
@code{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{テストグループ}は,通常はグループのテストの一つがデータファイルを作
成し,それ以降のテストで同じグループのテストがそれを読み込むために,お互
いに実行される必要がある混合テストの,連続した手続きになっています.テス
トグループごとの数個のテストのみを維持する方がより良く,テストグループご
とに一つのテストのみを維持することが可能な場合,それは理想的です.

@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
@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 コマンドライン引数
@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でもこの規則が要求
されますが,強制する意味はありません.ログにはユーザが変更した変数の追跡
が含まれています.

@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}の使用方法に依存します.

@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 `...'?  This would help both Autoconf and Autotest.

@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}を参照してください).

@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
@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 (@@r{[}@var{name}@r{]})
@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 @code{m4}
@c expansion.  The contents ought to end with an end of line.
@c 
入力データの@var{file}を,与えられた@var{contents}で初期化します.もちろ
ん,カンマが含まれていることや,見せかけの@code{m4}の展開から保護するた
めに,@var{contents}は適切に角カッコで囲む必要があります.内容は行末
(EOF)で終える必要があります.
@end defmac

@defmac AT_CHECK (@var{commands}, @r{[}@var{status} = @samp{@samp{0}}@r{]}, @@r{[}@var{stdout}@r{]}, @@r{[}@var{stderr}@r{]})
@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
@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
@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 FIXME: This macro should become part of Autoconf.  AC_AUTOTEST_PATH?
@c 
@c Use the @code{AT_CONFIG} macro from within file @file{configure.ac}.
@c This macro accepts one argument, which is the directory, relative to the
@c test directory, where the executables are prepared.
@c 
ファイル@file{configure.ac}で@code{AT_CONFIG}マクロを使用してください.
このマクロは,実行形式が用意されているテストディレクトリへの相対的なディ
レクトリとなっている一つの引数を受け入れます.

@item
@c Still within @file{configure.ac}, ensure that some
@c @code{AC_CONFIG_FILES} command includes substitution for
@c @file{tests/atconfig} and also, as appropriate, @file{tests/atlocal}.
@c 
また,@file{configure.ac}で@file{tests/atconfig}と,適切な
@file{tests/atlocal}の置換を含んでいる@code{AC_CONFIG_FILES}コマンドも含
めてください.

@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 ================================================ Questions About Autoconf.

@node Questions
@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 GNU M4 require each other?
* Why Not Imake::               Why GNU uses @command{configure} instead of Imake
@end menu

@node Distributing
@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 @sc{gnu} General Public License.  We still encourage
@c software authors to distribute their work under terms like those of the
@c GPL, but doing so is not required to use Autoconf.
@c 
Autoconfが生成するコンフィギュレーションスクリプトを,配布したり使用した
りすることに制限はありません.Autoconfバージョン1では,@sc{gnu} General
Public Licenseでカバーされていました.我々はソフトウェア著者に,GPLのよ
うな規則で成果を配布することを奨励しまが,Autoconfを使用するためにそうす
ることは要求していません.

@c Of the other files that might be used with @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
@section なぜGNU M4が必要なのですか?

@display
@c Why does Autoconf require @sc{gnu} M4?
@c 
なぜAutoconfは@sc{gnu} M4を必要とするのですか?
@end display

@c Many M4 implementations have hard-coded limitations on the size and
@c number of macros that Autoconf exceeds.  They also lack several
@c builtin macros that it would be difficult to get along without in a
@c sophisticated application like Autoconf, including:
@c 
M4の実装の多くは,マクロのサイズと数にハードコードされた制限があり,マク
ロ数はAutoconfの方が多くなっています.それらは,Autoconfのような洗練され
たアプリケーション無しでは難しい,以下を含むいくつかの組み込みマクロが足
りません.

@example
m4_builtin
m4_indir
m4_bpatsubst
__file__
__line__
@end example

@c Autoconf requires version 1.4 or above of @sc{gnu} M4 because it uses
@c frozen state files.
@c 
固まった状態のファイルを使用するので,Autoconfでは@sc{gnu} M4のバージョ
ン1.4以上を要求します.

@c Since only software maintainers need to use Autoconf, and since @sc{gnu}
@c M4 is simple to configure and install, it seems reasonable to require
@c @sc{gnu} M4 to be installed also.  Many maintainers of @sc{gnu} and
@c other free software already have most of the @sc{gnu} utilities
@c installed, since they prefer them.
@c 
ソフトウェア管理者はAutoconfを使用する必要があり,@sc{gnu} M4はコンフィ
グレーションとインストールが簡単なので,@sc{gnu} M4のインストールの要求
も妥当だと思われます.@sc{gnu}と他のフリーソフトウェアの管理者の多くは,
ほとんどの@sc{gnu}ユーティリティが好きなので,既にインストールしています.

@node Bootstrapping
@section ブートストラップはどうするのですか?

@display
@c If Autoconf requires @sc{gnu} M4 and @sc{gnu} M4 has an Autoconf
@c @command{configure} script, how do I bootstrap?  It seems like a chicken
@c and egg problem!
@c 
Autoconfが@sc{gnu} M4を要求し,@sc{gnu} M4にAutoconfの
@command{configure}スクリプトがある場合,どうやってブートストラップすれ
ばよいのでしょうか?鶏と卵の問題みたいですね!
@end display

@c This is a misunderstanding.  Although @sc{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 @sc{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 
これは誤解です.@sc{gnu} M4は,Autoconfが生成した@command{configure}スク
リプトと共に配布されていますが,Autoconfは,スクリプトを実行するために
@sc{gnu} M4をインストールすることを要求しません.AutoconfはM4の
@command{configure}スクリプトを変更したいときだけ必要で,(主に管理者以外) 
ほとんどの人が必要ありません.

@node 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 @sc{gnu} tools are not released this way.  Each @sc{gnu} tool has a
@c maintainer; these maintainers are scattered across the world.  Using a
@c common database would be a maintenance nightmare.  Autoconf may appear
@c to be this kind of database, but in fact it is not.  Instead of listing
@c host dependencies, it lists program requirements.
@c 
@sc{gnu}ツールはこの方法でリリースされません.それぞれの@sc{gnu}ツールに
は管理者がいて,管理者は世界中に散らばっています.共通のデータベースを使
用することは,管理するときの悪夢となります.Autoconfはこの種のデータベー
スのように見えますが,実際はそうではありません.ホストの依存性をリストアッ
プする代わりに,プログラムが要求することをリストアップします.

@c If you view the @sc{gnu} suite as a collection of native tools, then the
@c problems are similar.  But the @sc{gnu} development tools can be
@c configured as cross tools in almost any host+target permutation.  All of
@c these configurations can be installed concurrently.  They can even be
@c configured to share host independent files across hosts.  Imake doesn't
@c address these issues.
@c 
@sc{gnu}スイートをネイティブのツールのコレクションだと見なす場合,問題は
似ています.しかし,@sc{gnu}開発ツールは,ほとんどのホスト+ターゲットで,
クロスツールとしてコンフィグレーション可能です.これらのコンフィグレーショ
ンは,同時にインストールも可能です.それらは,ホスト間で共有するホスト非
依存ファイルもコンフィグレーション可能です.Imakeはこれらの問題を扱いま
せん.

@c Imake templates are a form of standardization.  The @sc{gnu} coding
@c standards address the same issues without necessarily imposing the same
@c restrictions.
@c 
Imakeテンプレートは標準化の形式です.@sc{gnu} coding standardsは,同じ制
限を必然的に課さずに,同じ問題を扱います.
@end quotation


@c Here is some further explanation, written by Per Bothner:
@c 
以下はPer Bothnerによって書かれたそれ以上の説明です.

@quotation
@c One of the advantages of Imake is that it easy to generate large
@c Makefiles using @code{cpp}'s @samp{#include} and macro mechanisms.
@c However, @code{cpp} is not programmable: it has limited conditional
@c facilities, and no looping.  And @code{cpp} cannot inspect its
@c environment.
@c 
Imakeの利点の1つは,@code{cpp}の@samp{#include}とマクロのメカニズムを使
用した,大きなMakefilesを簡単に生成することです.しかし,@code{cpp}はプ
ログラム不可能です.それは限定されたファシリティと,ループがないという制
限があります.そして@code{cpp}ではその環境を検査できません.

@c All of these problems are solved by using @code{sh} instead of
@c @code{cpp}.  The shell is fully programmable, has macro substitution,
@c can execute (or source) other shell scripts, and can inspect its
@c environment.
@c 
これらすべての問題は,@code{cpp}の代わりに@code{sh}を使用することで解決
されます.シェルは完全にプログラム可能で,マクロの代入や,他のシェルスク
リプトを実行する(あるいは他のもののソースとなる)ことが可能で,環境変数を
も検査可能です.
@end quotation


@c Paul Eggert elaborates more:
@c 
Paul Eggertはより多く詳述しています.

@quotation
@c With Autoconf, installers need not assume that Imake itself is already
@c installed and working well.  This may not seem like much of an advantage
@c to people who are accustomed to Imake.  But on many hosts Imake is not
@c installed or the default installation is not working well, and requiring
@c Imake to install a package hinders the acceptance of that package on
@c those hosts.  For example, the Imake template and configuration files
@c might not be installed properly on a host, or the Imake build procedure
@c might wrongly assume that all source files are in one big directory
@c tree, or the Imake configuration might assume one compiler whereas the
@c package or the installer needs to use another, or there might be a
@c version mismatch between the Imake expected by the package and the Imake
@c supported by the host.  These problems are much rarer with Autoconf,
@c where each package comes with its own independent configuration
@c processor.
@c 
Autoconfの場合,インストーラは,Imake自身がインストールされていて,うま
く動作していることを想定する必要がありません.これは,Imakeに慣れている
人にとっては,あまり利点とは思わないかもしれません.しかし,多くのホスト
でImakeはインストールされておらず,デフォルトのインストールではうまく動
作せず,Imakeにパッケージのインストールを要求すると,それらのホストでパッ
ケージの受け入れを妨げます.例えば,Imakeテンプレートとコンフィグレーショ
ンファイルは,正確にホストにインストールされていなかったり,Imakeのビル
ドの手続きは,全てのソースファイルが大きなディレクトリにあると誤解したり,
Imakeのコンフィグレーションは,一つのコンパイラを想定しているのに,パッ
ケージやインストーラが他のものを必要としたり,パッケージが期待するImake 
と,ホストがサポートするImakeのバージョンが異なったりする場合があります.
これらの問題は,Autoconfの方がはるかに稀で,それぞれのパッケージは,独自
の独立したコンフィグレーションプロセッサを持ってきます.

@c Also, Imake often suffers from unexpected interactions between
@c @code{make} and the installer's C preprocessor.  The fundamental problem
@c here is that the C preprocessor was designed to preprocess C programs,
@c not @file{Makefile}s.  This is much less of a problem with Autoconf,
@c which uses the general-purpose preprocessor @code{m4}, and where the
@c package's author (rather than the installer) does the preprocessing in a
@c standard way.
@c 
また,Imakeは,@code{make}とインストーラのCプリプロセッサの間の予期せぬ
干渉にもしばしば苦しみます.ここでの基本的な問題は,Cプリプロセッサが,
@file{Makefile}ではなく,Cプログラムのプリプロセスのためにデザインされて
いるということです.これは,Autoconfではほとんど問題にならず,それは汎用
のプリプロセッサ@code{m4}を使用し,そこでは(インストールする人ではなく) 
パッケージの著作者が標準的な方法でプリプロセスを行います.
@end quotation


@c Finally, Mark Eichin notes:
@c 
最後はMark Eichinが書きました.

@quotation
@c Imake isn't all that extensible, either.  In order to add new features to
@c Imake, you need to provide your own project template, and duplicate most
@c of the features of the existing one.  This means that for a sophisticated
@c project, using the vendor-provided Imake templates fails to provide any
@c leverage---since they don't cover anything that your own project needs
@c (unless it is an X11 program).
@c 
Imakeは,それほど拡張可能でもありません.Imakeに新しい特徴を加えるために,
独自のプロジェクトテンプレートを供給して,既存の特徴の大部分を繰り返す必
要があります.洗練されたプロジェクトに対してベンダーが供給したImakeテン
プレートを使用することは,効力の供給に失敗することを意味します.その理由
は,(たとえX11プログラムを使用していなくても) 独自のプロジェクトが必要と
するものを全くサポートしていないからです.

@c On the other side, though:
@c 
しかし,他の面では.

@c The one advantage that Imake has over @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




@c ===================================================== History of Autoconf.

@node History
@chapter Autoconfの歴史

@c You may be wondering, Why was Autoconf originally written?  How did it
@c get into its present form?  (Why does it look like gorilla spit?)  If
@c you're not wondering, then this chapter contains no information useful
@c to you, and you might as well skip it.  If you @emph{are} wondering,
@c then let there be light@dots{}
@c 
以下のことを不思議に思うかもしれません.なぜAutoconfは元々書かれたのです
か?どのようにして現在の形式になったのですか?(なぜそれはゴリラ唾によく
似ているのですか?)不思議に思っていない場合,この章は有用な情報を含んで
いないので,飛ばした方が良いでしょう.不思議に思って@emph{いる}場合,軽
くながしてください@dots{}.

@menu
* Genesis::                     Prehistory and naming of @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 @sc{gnu} utilities for the
@c Free Software Foundation.  As they were ported to more platforms and
@c more programs were added, the number of @option{-D} options that users
@c had to select in the @file{Makefile} (around 20) became burdensome.
@c Especially for me---I had to test each new release on a bunch of
@c different systems.  So I wrote a little shell script to guess some of
@c the correct settings for the fileutils package, and released it as part
@c of fileutils 2.0.  That @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 @sc{gnu} utilities packages.  Brian Berliner
@c also adapted one of my scripts for his @sc{cvs} revision control system.
@c 
1991年6月,私はFree Software Foundationの@sc{gnu}ユーティリティの多くを
保守していました.それらは,より多くのプラットホームに移植され,より多く
のプログラムが追加されたので,ユーザは,@file{Makefile}で多くの 
@samp{-D}オプション(およそ20)を選択する必要があり厄介になりました.特に
私がそうでした---私は異なるシステムでそれぞれの新しいいリリースをテスト
する必要がありました.そして,私はfileutilsパッケージに対する正しい設定
を見つけるため小さなシェルスクリプトを書き,fileutils 2.0の一部としてリ
リースしました.その@command{configure}は,翌月,いくつかの他の@sc{gnu}
ユーティリティパッケージに対する@command{configure}スクリプトを作成する
ため,(手作業で)改造するとうまく動作しました.Brian Berlinerも,私のスク
リプトを,@sc{cvs}リビジョンコントロールシステム用に改造しました.

@c Later that summer, I learned that Richard Stallman and Richard Pixley
@c were developing similar scripts to use in the @sc{gnu} compiler tools;
@c so I adapted my @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が,@sc{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 @sc{gnu} utilities packages to use
@c @command{configure} scripts, updating them all by hand became impractical.
@c Rich Murphey, the maintainer of the @sc{gnu} graphics utilities, sent me
@c mail saying that the @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を使用し,多くの改良点を
組み入れました.私が,@sc{gnu}ユーティリティパッケージに, 
@command{configure}スクリプトを使用するため改造するにつれ,手作業での更
新は,現実的なものではなくなりました.@sc{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.ac}の一部を読み込む一つの 
@command{configure}スクリプトです.しかし,全てのパッケージで全ての特徴
を配布する必要は望まなかったので,プロセッサーによってそれぞれの
@file{configure.ac}から異なる@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 @sc{gnu} extensions to M4.)  Also, some of my friends at the
@c University of Maryland had recently been putting M4 front ends on
@c several programs, including @code{tvtwm}, and I was interested in trying
@c out a new language.
@c 
私は,@command{configure}スクリプトの私のスタイルを生成するため,Perlを
使用することを考えましたが,M4は簡単なテキスト代入の仕事により適していた
ので,それに決めました.出力が暗黙で決まっているので,より小さい手法にな
ると思いました.さらに,みんなは既にそれを所有しています.(最初は,私は
@sc{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@,{c}ois Pinard, who came up
@c with the idea of making an @file{autoconf} shell script to run @code{m4}
@c and check for unresolved macro calls; Richard Pixley, who suggested
@c running the compiler instead of searching the file system to find
@c include files and symbols, for more accurate results; Karl Berry, who
@c got Autoconf to configure @TeX{} and added the macro index to the
@c documentation; and Ian Lance Taylor, who added support for creating a C
@c header file as an alternative to putting @option{-D} options in a
@c @file{Makefile}, so he could use Autoconf for his @sc{uucp} package.
@c The alpha testers cheerfully adjusted their files again and again as the
@c names and calling conventions of the Autoconf macros changed from
@c release to release.  They all contributed many specific checks, great
@c ideas, and bug fixes.
@c 
1991年秋,私は,M4マクロの手書きのスクリプトの部品をカプセル化し,調査時
に使用する特徴と技術の改善を加えることを続けるにつれて,フィードバック
してもらうため,移植性の聖杯にちなんだ探求者たちのグループ(つまり,アル
ファテスター)を呼びました.テスターの間で著明な人は,以下の通りです.
@code{m4}を実行し,未解決のマクロの呼び出しの調査する@file{autoconf}シェ
ルスクリプトを作成するアイディアをもたらしたFrancois Pinard,インクルー
ドファイルやシンボルを探すためファイルシステムを探す代わりに,より正確な
結果を求るためコンパイラの実行を提案したRichard Pixley.Autoconfに,
@TeX{}コンフィグレーションを与え,ドキュメントにマクロインデクッスを加え
たKarl Berry.そして,@samp{-D}オプションを@file{Makefile}に書き込む代わ
りに,Cヘッダファイルを作成するサポートを加え,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 @sc{gnu} packages to use it.  I was surprised by how
@c positive the reaction to it was.  More people started using it than I
@c could keep track of, including people working on software that wasn't
@c part of the @sc{gnu} Project (such as TCL, FSP, and Kerberos V5).
@c Autoconf continued to improve rapidly, as many people using the
@c @command{configure} scripts reported problems they encountered.
@c 
1992年7月,何カ月ものアルファテストの後で,私は Autoconf 1.0をリリースし,
それを使用して多くの@sc{gnu}パッケージを改造しました.私は,それらに対す
るあまりに肯定的な反応に驚きました.私が追跡記録可能な人以上の多くの人々
がそれを使用し始め,それには,@sc{gnu}プロジェクトの一部ではない(TCL,
FSP とKerberos V5のような)ソフトウェアで仕事をしている人も含まれています.
Autoconfは,@command{configure}を使用している多くの人が遭遇した問題を報
告してくれるので,急速に改善され続けました.

@c Autoconf turned out to be a good torture test for M4 implementations.
@c @sc{unix} @code{m4} started to dump core because of the length of the
@c macros that Autoconf defined, and several bugs showed up in @sc{gnu}
@c @code{m4} as well.  Eventually, we realized that we needed to use some
@c features that only @sc{gnu} M4 has.  4.3@sc{bsd} @code{m4}, in
@c particular, has an impoverished set of builtin macros; the System V
@c version is better, but still doesn't provide everything we need.
@c 
Autoconfは,@code{m4}実行の良い耐久テストだということが分かりました.
@sc{unix} @code{m4}は,Autoconfが定義するマクロの長さでコアダンプを吐き
始め,いくつかのバグが@sc{gnu} @code{m4}でも同様に明らかになりました.結
局,私達は@sc{gnu} M4のみが持つ機能が必要だと認識しました.4.3@sc{bsd}
@code{m4}は,特に組み込みマクロの設定が足りず,System Vバージョンはまし
ですが,私達が必要とするもの全てをいまだに供給してくれません.

@c More development occurred as people put Autoconf under more stresses
@c (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
@c david zuhn contributed C++ support.  Fran@,cois Pinard made it diagnose
@c invalid arguments.  Jim Blandy bravely coerced it into configuring
@c @sc{gnu} Emacs, laying the groundwork for several later improvements.
@c Roland McGrath got it to configure the @sc{gnu} C Library, wrote the
@c @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++サポートを寄付してくれました.
Francois Pinardは,無効な引数を診断させるようにしました.Jim Blandyは
勇敢にも,後の改良のためのワークグランドとなるよう,@sc{gnu} Emacsのコン
フィグレーションに強要しました.Roland McGrathは,@sc{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 @sc{gnu} @code{as}, and Rob Savoye to convert DejaGNU, 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は
@sc{gnu} @code{as}を対応し,Rob Savoye はDejaGNUを対応しました.

@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 @sc{gnu} @code{m4}, which he hastily
@c corrected!)  I reorganized the documentation around problems people want
@c to solve.  And I began a test suite, because experience had shown that
@c Autoconf has a pronounced tendency to regress when we change it.
@c 
プログラム品質に不満があり,その他の変更をしました.メッセージに曖昧でな
い調査結果が表示されるようにし,常に結果を出力するようにしました.マクロ
の名前を組織化し,コーディングスタイルの矛盾をきれいにしました.Autoconf 
を使用するソースコードパッケージの改造を助けるため開発した,追加のユーティ
リティを加えました.Francois Pinardの助けで,マクロがお互いのメッセー
ジに干渉しないようにしました.(その機能は,@sc{gnu} @code{m4}のパフォー
マンスのボトルネックを明らかにし,彼はすぐに修正しました!) 人々が解決を
望むドキュメント周りの問題を再編成しました.そして,経験から,Autoconfを
変更したとき,明らかに退化する傾向が分かっているので,テストスイートを始
めました.

@c Again, several alpha testers gave invaluable feedback, especially
@c Fran@,cois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
@c and Mark Eichin.
@c 
再び,貴重なフィードバックをくれたアルファテスターです.特に,Francois
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
@appendix このマニュアルのコピー条件

@menu
* GNU Free Documentation License::  License for copying this manual
@end menu

@include fdl.texi

@node 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
@appendixsec 環境変数の索引

@c This is an alphabetical list of the environment variables that Autoconf
@c checks.
@c 
これは,Autoconfが調査する環境変数のアルファベット順のリストです.

@printindex ev

@node 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が作成するファイルに,通常1つ以上の@file{Makefile}に代入
する変数のアルファベット順のリストです.こうする方法の詳細は, 
@xref{Setting Output Variables}.

@printindex ov

@node 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
@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
@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
@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
@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
@appendixsec 概念の索引

@c This is an alphabetical list of the files, tools, and concepts
@c introduced in this document.
@c 
これは,ファイル,ツール,そしてこのドキュメントで紹介されている概念のア
ルファベット順のリストです.

@printindex cp

@contents
@bye

@c Local Variables:
@c ispell-local-dictionary: "american"
@c End:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>