File:  [Local Repository] / gnujdoc / autoconf-2.59 / autoconf-ja.texi
Revision 1.2: download - view: text, annotated - select for diffs
Sat Jun 11 10:48:48 2005 UTC (15 years, 4 months ago) by futoshi
Branches: MAIN
CVS tags: HEAD
make rule fix (.texi.info and .texi.dvi to .texinfo.*)

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

@c @ovar(ARG, DEFAULT)
@c -------------------
@c The ARG is an optional argument.  To be used for macro arguments in
@c their documentation (@defmac).
@macro ovar{varname}
@r{[}@var{\varname\}@r{]}
@end macro

@c @dvar(ARG, DEFAULT)
@c -------------------
@c The ARG is an optional argument, defaulting to DEFAULT.  To be used
@c for macro arguments in their documentation (@defmac).
@macro dvar{varname, default}
@r{[}@var{\varname\} = @samp{\default\}@r{]}
@end macro

@c @href(URL, TITLE)
@c -----------------
@c A replacement for @uref that puts the URL in the footnotes when
@c not in HTML.
@ifhtml
@macro href{url, title}
@uref{\url\, \title\}
@end macro
@end ifhtml
@ifnothtml
@macro href{url, title}
\title\@footnote{\title\, @url{\url\}.}
@end macro
@end ifnothtml

@c Handling the indexes with Texinfo yields several different problems.
@c
@c Because we want to drop out the AC_ part of the macro names in the
@c printed manual, but not in the other outputs, we need a layer above
@c the usual @acindex etc.  That's why we first define indexes such as
@c acx meant to become the macro @acindex.  First of all, using ``ac_''
@c does not work with makeinfo, and using ``ac1'' doesn't work with TeX.
@c So use something more regular ``acx''.  Then you finish with a printed
@c index saying ``index is not existent''.  Of course: you ought to use
@c two letters :(  So you use capitals.
@c
@c Second, when defining a macro in the TeX world, following spaces are
@c eaten.  But then, since we embed @acxindex commands that use the end
@c of line as an end marker, the whole things wrecks itself.  So make
@c sure you do *force* an additional end of line, add a ``@c''.
@c
@c Finally, you might want to get rid of TeX expansion, using --expand
@c with texi2dvi.  But then you wake up an old problem: we use macros
@c in @defmac etc. where TeX does perform the expansion, but not makeinfo.

@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 shortindexflag
@c --------------
@c Shall we factor AC_ out of the Autoconf macro index etc.?
@iftex
@set shortindexflag
@end iftex

@c @acindex{MACRO}
@c ---------------
@c Registering an AC_\MACRO\.
@ifset shortindexflag
@macro acindex{macro}
@ACindex \macro\
@c
@end macro
@end ifset
@ifclear shortindexflag
@macro acindex{macro}
@ACindex AC_\macro\
@end macro
@end ifclear

@c @ahindex{MACRO}
@c ---------------
@c Registering an AH_\MACRO\.
@macro ahindex{macro}
@ACindex AH_\macro\
@c
@end macro

@c @asindex{MACRO}
@c ---------------
@c Registering an AS_\MACRO\.
@ifset shortindexflag
@macro asindex{macro}
@MSindex \macro\
@c
@end macro
@end ifset
@ifclear shortindexflag
@macro asindex{macro}
@MSindex AS_\macro\
@end macro
@end ifclear

@c @atindex{MACRO}
@c ---------------
@c Registering an AT_\MACRO\.
@ifset shortindexflag
@macro atindex{macro}
@ATindex \macro\
@c
@end macro
@end ifset
@ifclear shortindexflag
@macro atindex{macro}
@ATindex AT_\macro\
@end macro
@end ifclear

@c @hdrindex{MACRO}
@c ---------------
@c Indexing a header.
@macro hdrindex{macro}
@prindex @file{\macro\}
@c
@end macro

@c @msindex{MACRO}
@c ---------------
@c Registering an m4_\MACRO\.
@ifset shortindexflag
@macro msindex{macro}
@MSindex \macro\
@c
@end macro
@end ifset
@ifclear shortindexflag
@macro msindex{macro}
@MSindex m4_\macro\
@end macro
@end ifclear


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

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

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

@c @documentlanguage ja

@copying

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

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

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

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



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

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

@contents


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

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

@menu
* Introduction::                Autoconf's purpose, strengths, and weaknesses
* The GNU Build System::        A set of tools for portable software packages
* Making configure Scripts::    How to organize and produce Autoconf scripts
* Setup::                       Initialization and output
* Existing Tests::              Macros that check for particular features
* Writing Tests::               How to write new feature checks
* Results::                     What to do with results from feature checks
* Programming in M4::           Layers on top of which Autoconf is written
* Writing Autoconf Macros::     Adding new macros to Autoconf
* Portable Shell::              Shell script portability pitfalls
* Manual Configuration::        Selecting features that can't be guessed
* Site Configuration::          Local defaults for @command{configure}
* Running configure Scripts::   How to use the Autoconf output
* config.status Invocation::    Recreating a configuration
* Obsolete Constructs::         Kept for backward compatibility
* Using Autotest::              Creating portable test suites
* FAQ::                         Frequent Autoconf Questions, with answers
* History::                     History of Autoconf
* Copying This Manual::         How to make copies of this manual
* Indices::                     Indices of symbols, concepts, etc.

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

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

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

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

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

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

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

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

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

@c Substitutions in Makefiles
@c 
Makefileへの代入

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

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

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

@c Existing Tests
@c 
存在の調査

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

@c Common Behavior
@c 
共通の動作

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

@c Alternative Programs
@c 
プログラムの選択

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

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

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

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

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

@c Declarations
@c 
宣言

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

@c Structures
@c 
構造体

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

@c Types
@c 
型

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

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

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

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

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

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

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

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

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

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

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

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

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

@c M4 Quotation
@c 
M4の引用符

* Active Characters::           Characters that change the behavior of M4
* One Macro Call::              Quotation and one macro call
* Quotation and Nested Macros::  Macros calling macros
* Changequote is Evil::         Worse than INTERCAL: M4 + changequote
* Quadrigraphs::                Another way to escape special characters
* Quotation Rule Of Thumb::     One parenthesis, one quote

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

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

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

* Redefined M4 Macros::         M4 builtins changed in M4sugar
* Evaluation Macros::           More quotation and evaluation control
* Forbidden Patterns::          Catching unexpanded macros

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@c Upgrading From Version 1
@c 
バージョン1からの更新

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

@c Upgrading From Version 2.13
@c 
バージョン2.13からの更新

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

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

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

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

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

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

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

@c History of Autoconf
@c 
Autoconfの歴史

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

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

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

@c Indices
@c 
索引

* Environment Variable Index::  Index of environment variables used
* Output Variable Index::       Index of variables set in output files
* Preprocessor Symbol Index::   Index of C preprocessor symbols defined
* Autoconf Macro Index::        Index of Autoconf macros
* M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
* Autotest Macro Index::        Index of Autotest macros
* Program & Function Index::    Index of those with portability problems
* Concept Index::               General index

@end detailmenu
@end menu

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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

@node Automake
@section Automake

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

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

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

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

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

@node Libtool
@section Libtool

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

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

@node Pointers
@c @section Pointers
@section 参考文献

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

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

@itemize @minus

@item Web

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

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

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

@c @item Books
@item 書籍

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

@c @item Tutorials and Examples
@item チュートリアルと例

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

@end itemize

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

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

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

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

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

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

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

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

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

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

@noindent
@c Files used in preparing a software package for distribution:
@c 
ソフトウェアパッケージを配布する準備で使用されるファイルは,以下のように
なっています.
@example
your source files --> [autoscan*] --> [configure.scan] --> configure.ac

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

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

@noindent
@c Files used in configuring a software package:
@c 
ソフトウェアパッケージのコンフィグレーションで使用されるファイルは,以下
のようになっています.
@example
@group
                       .-------------> [config.cache]
configure* ------------+-------------> config.log
                       |
[config.h.in] -.       v            .-> [config.h] -.
               +--> config.status* -+               +--> make*
Makefile.in ---'                    `-> Makefile ---'
@end group
@end example

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

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

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

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

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

@node Shell Script Compiler
@c @subsection A Shell Script Compiler
@subsection シェルスクリプトコンパイラ

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

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

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

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

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

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

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


@node Autoconf Language
@c @subsection The Autoconf Language
@subsection Autoconf言語
@cindex quotation

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@node configure.ac Layout
@c @subsection Standard @file{configure.ac} Layout
@subsection 標準的な@file{configure.ac}のレイアウト

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

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

@display
@group
@c Autoconf requirements
@c @code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
@c information on the package
@c checks for programs
@c checks for libraries
@c checks for header files
@c checks for types
@c checks for structures
@c checks for compiler characteristics
@c checks for library functions
@c checks for system services
@c @code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
@c @code{AC_OUTPUT}
@c 
Autoconfの必要条件
@code{AC_INIT(@var{package}, @var{version}, @var{bug-report-address})}
パッケージの情報
プログラムの調査
ライブラリの調査
ヘッダファイルの調査
型の調査
構造体の調査
コンパイラの特徴の調査
ライブラリ関数の調査
システムサービスの調査
@code{AC_CONFIG_FILES(@r{[}@var{file@dots{}}@r{]})}
@code{AC_OUTPUT}
@end group
@end display


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@node autoconf Invocation
@c @section Using @command{autoconf} to Create @command{configure}
@section @command{configure}を作成するため@command{autoconf}を使用する
@cindex @command{autoconf}

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

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

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

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

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

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

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

@item --force
@itemx -f
@c Remake @file{configure} even if newer than its input files.
@c 
入力ファイルより@file{configure}が新しい場合でも,それを再生成します.

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

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

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

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

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

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

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

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

@c Warnings about @samp{syntax} are enabled by default, and the environment
@c variable @code{WARNINGS}, a comma separated list of categories, is
@c honored.  Passing @samp{-W @var{category}} will actually behave as if
@c you had passed @samp{--warnings=syntax,$WARNINGS,@var{category}}.  If
@c you want to disable the defaults and @code{WARNINGS}, but (for example)
@c enable the warnings about obsolete constructs, you would use @option{-W
@c none,obsolete}.
@c 
@samp{syntax}に関する警告はデフォルトで利用可能で,カンマで分けられたカ
テゴリリストの環境変数@code{WARNINGS}は尊重されます.@samp{-W
@var{category}}を渡すことで,
@samp{--warnings=syntax,$WARNINGS,@var{category}}が渡されたかのように動
作します.デフォルトと@code{WARNINGS}を利用不可能にしたいが,(例えば) 時
代遅れの構成物についての警告は利用可能にしたい場合,@option{-W
none,obsolete}を使用してください.

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

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

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

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


@c It is often necessary to check the content of a @file{configure.ac}
@c file, but parsing it yourself is extremely fragile and error-prone.  It
@c is suggested that you rely upon @option{--trace} to scan
@c @file{configure.ac}.  For instance, to find the list of variables that
@c are substituted, use:
@c 
@file{configure.ac}ファイルの内容を調査する必要があることもよくあります
が,自分で解析することは,非常に脆くエラーを起こしやすいものです.
@file{configure.ac}をスキャンするために,@option{--trace}を信頼してみて
ください.例えば,置換される変数のリストを見つけるため,以下のようにして
みてください.

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

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

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

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

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

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

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

@node autoreconf Invocation
@c @section Using @command{autoreconf} to Update @command{configure} Scripts
@section @command{configure}スクリプトを更新するため@command{autoreconf}を使用する
@cindex @command{autoreconf}

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

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

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

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

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

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

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

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

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

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

@item --install
@itemx -i
@c Install the missing auxiliary files in the package.  By default, files
@c are copied; this can be changed with @option{--symlink}.
@c 
パッケージの足りない補助ファイルをインストールします.デフォルトで,ファ
イルはコピーされます.@option{--symlink}で変更することも可能です.

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

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

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

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

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

@item --warnings=@var{category}
@itemx -W @var{category}
@evindex WARNINGS
@c Report the warnings related to @var{category} (which can actually be a
@c comma separated list).
@c 
(実際にはカンマで分離されているリストになっている)@var{category}に関連す
る警告を報告します.

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

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

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

@item syntax
@c dubious syntactic constructs.
@c 
曖昧な構文の構成物.

@item all
@c report all the warnings
@c 
すべての警告を報告.

@item none
@c report none
@c 
何も報告しない.

@item error
@c treats warnings as errors
@c 
警告をエラーとして処理.

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

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


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

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

@c Autoconf-generated @command{configure} scripts need some information 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 the
@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 on the configuration
* Subdirectories::              Configuring independent packages together
* Default Prefix::              Changing the default installation prefix
@end menu

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

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

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

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

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

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

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

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

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

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

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


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

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

@c FIXME: AC_PREREQ should not be here
@defmac AC_PREREQ (@var{version})
@acindex{PREREQ}
@cindex Version
@c Ensure that a recent enough version of Autoconf is being used.  If the
@c version of Autoconf being used to create @command{configure} is
@c earlier than @var{version}, print an error message to the standard
@c error output and exit with failure (exit status is 63).  For example:
@c 
使用しているAutoconfのバージョンが十分新しいことを保証します. 
@command{configure}の作成に使用されるAutoconfのバージョンが,
@var{version}以前の場合,標準エラー出力にエラーメッセージを出力し,異常
終了します(終了ステータスは63です).例えば以下のようにします.

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

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

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

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


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

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

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

@noindent
@c produces this in @command{configure}:
@c 
これで,@command{configure}は以下のようになります.

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


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


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


@c FIXME: Remove definitively once --install explained.
@c
@c Small packages may store all their macros in @code{aclocal.m4}.  As the
@c set of macros grows, or for maintenance reasons, a maintainer may prefer
@c to split the macros in several files.  In this case, Autoconf must be
@c told which files to load, and in which order.
@c
@c @defmac AC_INCLUDE (@var{file}@dots{})
@c @acindex{INCLUDE}
@c @c FIXME: There is no longer shell globbing.
@c Read the macro definitions that appear in the listed files.  A list of
@c space-separated filenames or shell globbing patterns is expected.  The
@c files will be read in the order they're listed.
@c
@c Because the order of definition of macros is important (only the last
@c definition of a macro is used), beware that it is @code{AC_INIT} that
@c loads @file{acsite.m4} and @file{aclocal.m4}.  Note that
@c @code{AC_INCLUDE}ing a file before @code{AC_INIT} or within
@c @file{aclocal.m4} is different from doing so after @code{AC_INIT}: in
@c the latter case, non-macro lines from included files may end up in the
@c @file{configure} script, whereas in the former case, they'd be discarded
@c just like any text that appear before @code{AC_INIT}.
@c @end defmac
@c 
@c Packages that do manual configuration or use the @code{install} program
@c might need to tell @command{configure} where to find some other shell
@c scripts by calling @code{AC_CONFIG_AUX_DIR}, though the default places
@c it looks are correct for most cases.
@c 
手動でのコンフィグレーションや,@code{install}プログラムを使用するパッケー
ジは,デフォルトの位置でほとんど正しいのですが,@code{AC_CONFIG_AUX_DIR} 
を呼び出して,他のシェルスクリプトを探す場所を@command{configure}に教え
る必要があるかもしれません.

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

@c Similarly, packages that use @command{aclocal} should declare where
@c local macros can be found using @code{AC_CONFIG_MACRO_DIR}.
@c 
同様に,@command{aclocal}を使用しているパッケージでは,ローカルマクロが
見つかる場所を@code{AC_CONFIG_MACRO_DIR}を使用して宣言すべきです.

@defmac AC_CONFIG_MACRO_DIR (@var{dir})
@acindex{CONFIG_MACRO_DIR}
@c Future versions of @command{autopoint}, @command{libtoolize},
@c @command{aclocal} and @command{autoreconf} will use directory
@c @var{dir} as the location of additional local Autoconf macros.  Be
@c sure to call this macro directly from @file{configure.ac} so that
@c tools that install macros for @command{aclocal} can find the
@c declaration before @option{--trace} can be called safely.
@c 
将来のバージョンの@command{autopoint},@command{libtoolize},
@command{aclocal},そして@command{autoreconf}は,ディレクトリ@var{dir}を,
追加のローカルなAutoconfマクロがある場所として使用します.このマクロを,
@command{aclocal}に対してインストールされているマクロがあるツールで,
@option{--trace}が安全に呼び出される前に宣言が見つかるように,直接
@file{configure.ac}から確実に呼び出して下さい.
@end defmac


@node Output
@c @section Outputting Files
@section 出力ファイルを生成する

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

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

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

@c The location of your @code{AC_OUTPUT} invocation is the exact point
@c where configuration actions are taken: any code afterwards will be
@c executed by @code{configure} once @command{config.status} was run.  If
@c you want to bind actions to @command{config.status} itself
@c (independently of whether @command{configure} is being run), see
@c @ref{Configuration Commands, , Running Arbitrary Configuration
@c Commands}.
@c 
@code{AC_OUTPUT}を呼び出す場所が,コンフィグレーションの実行をする場所に
なります.それ以降のコードは,@command{config.status}が実行された後に,
@code{configure}によって一度実行されます.動作を(@command{configure} が
実行されているかどうかに依存しないように)@command{config.status}自身に組
み込みたい場合,@ref{Configuration Commands, , Running Arbitrary
Configuration Commands}を参照して下さい.
@end defmac

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

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

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

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

@example
@@SET_MAKE@@
@end example



@node Configuration Actions
@c @section Performing Configuration Actions
@section コンフィグレーション作業の実行

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

@defmac AC_CONFIG_FILES (@var{file}@dots{}, @ovar{cmds}, @ovar{init-cmds})
@acindex{CONFIG_FILES}
@c Make @code{AC_OUTPUT} create each @file{@var{file}} by copying an input
@c file (by default @file{@var{file}.in}), substituting the output variable
@c values.
@c 
出力変数の値を置換しながら入力ファイル(デフォルトは@file{@var{file}.in})
をコピーすることで,@code{AC_OUTPUT}でそれぞれの@file{@var{file}}を作成
するようにします.
@c
@c Before we used to have this feature, which was later rejected
@c because it complicates the write of Makefiles:
@c If the file would be unchanged, it is left untouched, to preserve
@c timestamp.
@c 
@c This macro is one of the instantiating macros; see @ref{Configuration
@c Actions}.  @xref{Makefile Substitutions}, for more information on using
@c output variables.  @xref{Setting Output Variables}, for more information
@c on creating them.  This macro creates the directory that the file is in
@c if it doesn't exist.  Usually, @file{Makefile}s are created this way,
@c but other files, such as @file{.gdbinit}, can be specified as well.
@c 
このマクロは,実際に何かを作成するマクロの一つです.@ref{Configuration
Actions}を参照してください.出力変数を使用することの詳細な情報は,
@xref{Makefile Substitutions}.  それらを作成するための詳細な情報は,
@xref{Setting Output Variables}.  これらのマクロは,存在しない場合はファ
イルを配置するディレクトリを作成します.通常,@file{Makefile}はこの方法
で作成されますが,@file{.gdbinit}のようなそれ以外のファイルは,指定され
ていることもあります.

@c Typical calls to @code{AC_CONFIG_FILES} look like this:
@c 
一般的な@code{AC_CONFIG_FILES}の呼び出しは,以下のようになります.

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

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

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

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



@node Makefile Substitutions
@c @section Substitutions in Makefiles
@section Makefileへの代入

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

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

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

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

@node Preset Output Variables
@c @subsection Preset Output Variables
@subsection 出力変数のプリセット

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

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

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

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

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

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

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

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

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

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

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

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

@defvar FCFLAGS
@ovindex FCFLAGS
@c Debugging and optimization options for the Fortran 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_FC} (or empty if you don't).
@c @command{configure} uses this variable when compiling programs to test for
@c Fortran features.
@c 
Fortranコンパイラに対するデバッグと最適化のオプションです.
@command{configure}の実行時に環境変数で設定されていない場合,
@code{AC_PROG_FC}の予備出し時デフォルト値が設定されます(またはそうなけれ
ば空になります).@command{configure}は,Fortranの特徴を調査するプログラ
ムをコンパイルするとき,この変数を使用します.
@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 features.
@c 
strip(@samp{-s}),パス(@option{-L}),その他のあらゆる雑多なリンカに対す
るオプションです.@command{configure}を実行するときに環境変数で設定され
ていない場合,デフォルト値は空になります.@command{configure}は,C,C++,
そしてFortranの特徴をテストするプログラムのリンク時に,この変数を使用し
ます.
@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 features.
@c 
リンカに渡す@samp{-l}オプションです.デフォルト値は空ですが,ライブラリ
が見つかり,必要な関数を提供する場合,Autoconfマクロはこの変数に追加のラ
イブラリを前置するかもしれません.@ref{Libraries}を参照してください.
@command{configure}は,C,C++,そしてFortranの特徴をテストするプログラム
のリンク時に,この変数を使用します.
@end defvar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@c Pay attention that @samp{#undef} is in the first column, and there is
@c nothing behind @samp{HAVE_UNISTD_H}, not even white spaces.  You can
@c then decode the configuration header using the preprocessor directives:
@c 
@samp{#undef}が最初の列にあり,@samp{HAVE_UNISTD_H}の後に空白すらないこ
とに注意してください.その後で,プリプロセッサ命令を使用しているコンフィ
グレーションヘッダをデコードすることが可能です.

@example
@group
#include <conf.h>

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@end table



@node Autoheader Macros
@c @subsection Autoheader Macros
@subsection autoheaderのマクロ

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

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

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

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

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


@defmac AH_TEMPLATE (@var{key}, @var{description})
@ahindex{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})
@ahindex{TOP}
@c Include @var{text} at the top of the header template file.
@c 
@var{text}をヘッダテンプレートファイルの最初に含めます.
@end defmac


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


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

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

@defmac AC_CONFIG_COMMANDS (@var{tag}@dots{}, @ovar{cmds}, @ovar{init-cmds})
@acindex{CONFIG_COMMANDS}
@c Specify additional shell commands to run at the end of
@c @file{config.status}, and shell commands to initialize any variables
@c from @command{configure}.  Associate the commands with @var{tag}.
@c Since typically the @var{cmds} create a file, @var{tag} should
@c naturally be the name of that file.  If needed, the directory hosting
@c @var{tag} is created. This macro is one of the instantiating macros;
@c see @ref{Configuration Actions}.
@c 
@file{config.status}の終りに実行するシェルコマンドと,
@command{configure}からのあらゆる変数を初期化するためのシェルコマンドを
を追加します.コマンドを@var{tag}に関連付けます.通常,@var{cmds}はファ
イルを作成するので,@var{tag}は自ずからファイル名にすべきでしょう.実際,
@var{tag}に書かれているディレクトリが作製されます.このマクロは,実際に
ファイルを作成するマクロです.@ref{Configuration Actions}を参照してくだ
さい.

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

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

@defmac AC_CONFIG_COMMANDS_PRE (@var{cmds})
@acindex{OUTPUT_COMMANDS_PRE}
@c Execute the @var{cmds} right before creating @file{config.status}.
@c 
@file{config.status}を作成する直前に@var{cmds}を実行します.
@end defmac

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




@node Configuration Links
@c @section Creating Configuration Links
@section コンフィグレーションのリンクを作成する

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

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

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

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

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

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

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



@node Subdirectories
@c @section Configuring Other Packages in Subdirectories
@section サブディレクトリで他のパッケージをコンフィグレーションする

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

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

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

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

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

@c If a given @var{dir} is not found, an error is reported: if the
@c subdirectory is optional, write:
@c 
該当する@var{dir}が見つからない場合でもエラーを報告しません.サブディレ
クトリがオプションの場合,以下のように書いてください.

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

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

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

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

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

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

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

@c This macro may be called multiple times.
@c 
このマクロは何度呼び出してもかまいません.
@end defmac

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

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

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

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

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

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



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

@node Existing Tests
@c @chapter Existing Tests
@chapter 存在の調査

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

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

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

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

@node Common Behavior
@c @section Common Behavior
@section 共通の動作

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

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

@node Standard Symbols
@c @subsection Standard Symbols
@subsection 標準的なシンボル

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

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

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

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


@node Default Includes
@c @subsection Default Includes
@subsection デフォルトのインクルード
@cindex Includes, default

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

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

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

@c Most generic macros use the following macro to provide the default set
@c of includes:
@c 
最も一般的なマクロは,以下のようなインクルードのデフォルトの組を提供する
マクロを使用しています.

@defmac AC_DEFAULT_INCLUDES (@ovar{include-directives})
@acindex{DEFAULT_INCLUDES}
@c Expand to @var{include-directives} if defined, otherwise to:
@c 
@var{include-directives}が定義されている場合はそれを展開し,そうでなけれ
ば以下のようになります.

@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 check for the presence of these
@c headers and their compatibility, i.e., you don't need to run
@c @code{AC_HEADERS_STDC}, nor check for @file{stdlib.h} etc.
@c 
デフォルトのインクルードが使用される場合,これらのヘッダの存在とその互換
性を調査します.すなわち,@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}は定義されません.
@end defmac

@node Alternative Programs
@c @section Alternative Programs
@section プログラムの選択
@cindex Programs, checking

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

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

@node Particular Programs
@c @subsection Particular Program Checks
@subsection 特定のプログラムの調査

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@c Instead, do:
@c 
その代わりに,以下のようにします.

@example
(cd /x && $(LN_S) foo bar)
@end example
@end defmac

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

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

@node Generic Programs
@c @subsection Generic Program and File Checks
@subsection 一般的なプログラムとファイルの調査

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

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

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

@defmac AC_CHECK_PROG (@var{variable}, @var{prog-to-check-for}, @var{value-if-found}, @ovar{value-if-not-found}, @ovar{path},  @ovar{reject})
@acindex{CHECK_PROG}
@c Check whether program @var{prog-to-check-for} exists in @code{PATH}.  If
@c it is found, set @var{variable} to @var{value-if-found}, otherwise to
@c @var{value-if-not-found}, if given.  Always pass over @var{reject} (an
@c absolute file name) even if it is the first found in the search path; in
@c that case, set @var{variable} using the absolute file name of the
@c @var{prog-to-check-for} found that is not @var{reject}.  If
@c @var{variable} was already set, do nothing.  Calls @code{AC_SUBST} for
@c @var{variable}.
@c 
@code{PATH}に,プログラム@var{prog-to-check-for}が存在するかどうか調査し
ます.見つかった場合,@var{variable}を@var{value-if-found}に設定し,それ
以外で,@var{value-if-not-found}が与えられている場合は,それに設定します.
たとえ@var{reject}(絶対パスのファイル名)が最初のサーチパスで見つかった場
合でも,それは候補から外します.この場合,@var{prog-to-check-for}が見つ
かった@var{reject}ではない絶対パスのファイル名を使用し,@var{variable}を
設定します.@var{variable}が既に設定されている場合,何もしません.
@var{variable}に対して@code{AC_SUBST}を呼び出してください.
@end defmac

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

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

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

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

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

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


@node Files
@c @section Files
@section ファイル
@cindex File, checking

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

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

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


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

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

@defmac AC_CHECK_LIB (@var{library}, @var{function}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
@acindex{CHECK_LIB}
@c Depending on the current language(@pxref{Language Choice}), try to
@c ensure that the C, C++, or Fortran 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の関数@var{function}が利用可能であることを確認します.
@var{library}は,ライブラリのベース名です.例えば,@samp{-lmp}を調査する
ために,@var{library}の引数として@samp{mp}を使用します.

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

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


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

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

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



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

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

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

@node Function Portability
@c @subsection Portability of C Functions
@subsection C関数の移植性

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

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

@item @code{putenv}
@c @fuindex putenv
@prindex @code{putenv}
@c POSIX specifies that @code{putenv} puts the given string directly in
@c @code{environ}, but some systems make a copy of it instead (eg.@:
@c glibc 2.0, or BSD).  And when a copy is made, @code{unsetenv} might
@c not free it, causing a memory leak (eg.@: FreeBSD 4).
@c 
POSIXでは,@code{putenv}は与えられた文字列を直接@code{environ}に書き込む
ように指定していますが,システムによってはその代わりにコピーするものもあ
ります(例えば,glibc 2.0やBSD).そして,コピーが作成されたとき,
@code{unsetenv}はそれを解放し,メモリリークの原因になります(例えば,
FreeBSD 4がそうです).

@c POSIX specifies that @code{putenv("FOO")} removes @samp{FOO} from the
@c environment, but on some systems (eg.@: FreeBSD 4) this is not the
@c case and instead @code{unsetenv} must be used.
@c 
POSIXでは,@code{putenv("FOO")}は@samp{FOO}を環境変数から削除するように
指定していますが,システムによっては(例えばFreeBSD 4),こうならないので,
代わりに@code{unsetenv}を使用して下さい.

@c On MINGW, a call @code{putenv("FOO=")} removes @samp{FOO} from the
@c environment, rather than inserting it with an empty value.
@c 
MINGWでは,@code{putenv("FOO=")}の呼び出しで,空の値を挿入する代わりに,
@samp{FOO}を環境変数から削除します.

@c @item @code{signal} handler
@item @code{signal}ハンドラ
@c @fuindex signal
@prindex @code{signal}
@c Normally @code{signal} takes a handler function with a return type of
@c @code{void}, but some old systems required @code{int} instead.  Any
@c actual @code{int} value returned is not used, this is only a
@c difference in the function prototype demanded.
@c 
通常,@code{signal}は@code{void}の型を返す関数へのハンドルを受け取ります
が,古いシステムには,代わりに@code{int}を要求するものもあります.実際に
返される@code{int}の値を利用しませんが,これは関数のプロトタイプの要求が
異なるだけです.

@c All systems we know of in current use take @code{void}.  Presumably
@c @code{int} was to support K&R C, where of course @code{void} is not
@c available.  @code{AC_TYPE_SIGNAL} (@pxref{Particular Types}) can be
@c used to establish the correct type in all cases.
@c 
現在知っているシステムはすべて@code{void}を受け取ります.おそらく,
@code{int}がK&R Cでサポートされていたのですが,もちろん@code{void}は利用
可能ではありませんでした.@code{AC_TYPE_SIGNAL} (@pxref{Particular
Types})は,すべての状況で正しい型を構築するために使用することが可能です.

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

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

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

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

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

@item @code{sysconf}
@c @fuindex sysconf
@prindex @code{sysconf}
@c @code{_SC_PAGESIZE} is standard, but some older systems (eg.@: HP-UX
@c 9) have @code{_SC_PAGE_SIZE} instead.  This can be tested with
@c @code{#ifdef}.
@c 
@code{_SC_PAGESIZE}は標準ですが,古いシステム(例えばHP-UX 9)には,代わり
に@code{_SC_PAGE_SIZE}が存在します.これは@code{#ifdef}でテスト可能です.

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

@item @code{unsetenv}
@c @fuindex unsetenv
@prindex @code{unsetenv}
@c On MINGW, @code{unsetenv} is not available, but a variable @samp{FOO}
@c can be removed with a call @code{putenv("FOO=")}, as described under
@c @code{putenv} above.
@c 
MINGWでは,@code{unsetenv}が利用不可能ですが,@code{putenv}で上述したよ
うに,変数@samp{FOO}は@code{putenv("FOO=")}の呼び出しで削除可能です.

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

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

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


@node Particular Functions
@c @subsection Particular Function Checks
@subsection 特定の関数の調査
@cindex Function, checking

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

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

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

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

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

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

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


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

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

@defmac AC_FUNC_FNMATCH
@acindex{FUNC_FNMATCH}
@c @fuindex fnmatch
@prindex @code{fnmatch}
@c If the @code{fnmatch} function conforms to @acronym{POSIX}, define
@c @code{HAVE_FNMATCH}.  Detect common implementation bugs, for example,
@c the bugs in Solaris 2.4.
@c 
@code{fnmatch}関数が@acronym{POSIX}準拠の場合,@code{HAVE_FNMATCH}を定義
します.例えば,Solaris 2.4のバグのような,一般的な実装上のバグを検出し
ます.

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

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

@defmac AC_FUNC_FORK
@acindex{FUNC_FORK}
@cvindex HAVE_VFORK_H
@cvindex HAVE_WORKING_FORK
@cvindex HAVE_WORKING_VFORK
@cvindex vfork
@c @fuindex fork
@prindex @code{fork}
@c @fuindex vfork
@prindex @code{vfork}
@hdrindex vfork.h
@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 to make the prototype
@c visible on some systems (e.g. glibc 2.2). Otherwise linkage problems
@c may occur when compiling with @code{AC_SYS_LARGEFILE} on
@c largefile-sensitive systems where @code{off_t} does not default to a
@c 64bit entity.
@c 
@code{fseeko}関数が利用可能な場合,@code{HAVE_FSEEKO}を定義します.必要
があれば,プロトタイプがいくつかのシステム上で(例えばglibc 2.2)見て分か
るように,@code{_LARGEFILE_SOURCE}を定義します.それ以外では,
@code{AC_SYS_LARGEFILE}を用いてコンパイルするとき,@code{off_t}がデフォ
ルトで64bitになっていないラージファイルに問題があるシステム上で,リンク
の問題が発生する可能性があります.
@end defmac

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

@defmac AC_FUNC_GETLOADAVG
@acindex{FUNC_GETLOADAVG}
@cvindex SVR4
@cvindex DGUX
@cvindex UMAX
@cvindex UMAX4_3
@cvindex HAVE_NLIST_H
@cvindex NLIST_NAME_UNION
@cvindex GETLODAVG_PRIVILEGED
@cvindex NEED_SETGID
@cvindex C_GETLOADAVG
@ovindex LIBOBJS
@ovindex NEED_SETGID
@ovindex KMEM_GROUP
@ovindex GETLOADAVG_LIBS
@c @fuindex getloadavg
@prindex @code{getloadavg}
@c Check how to get the system load averages.  To perform its tests
@c properly, this macro needs the file @file{getloadavg.c}; therefore, be
@c sure to set the @code{AC_LIBOBJ} replacement directory properly (see
@c @ref{Generic Functions}, @code{AC_CONFIG_LIBOBJ_DIR}).
@c 
システムのロードアベレージを取得する方法を調査します.適切に調査を実行す
るため,このマクロはファイル@file{getloadavg.c}が必要です.このため,適
切な置換ディレクトリを@code{AC_LIBOBJ}で確実に設定してください
(@ref{Generic Functions}と,@code{AC_CONFIG_LIBOBJ_DIR}を参照してくださ
い).

@c If the system has the @code{getloadavg} function, define
@c @code{HAVE_GETLOADAVG}, and set @code{GETLOADAVG_LIBS} to any libraries
@c needed to get that function.  Also add @code{GETLOADAVG_LIBS} to
@c @code{LIBS}.  Otherwise, require an @code{AC_LIBOBJ} replacement for
@c @samp{getloadavg} with source code in @file{@var{dir}/getloadavg.c}, and
@c possibly define several other C preprocessor macros and output
@c variables:
@c 
システムに@code{getloadavg}関数がある場合,@code{HAVE_GETLOADAVG}を定義
し,その関数の使用に必要な全てのライブラリを@code{GETLOADAVG_LIBS}に設定
します.また,@code{GETLOADAVG_LIBS}を@code{LIBS}に加えます.それ以外の
場合,@code{AC_LIBOBJ}で@samp{getloadavg}を@file{@var{dir}/getloadavg.c} 
のソースコードで置換することを要求し,おそらく以下のようないくつかのCプ
リプロセッサのマクロと出力変数を定義します.

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

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

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

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

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

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

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

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

@c This macro does not check whether
@c @code{getpgrp} exists at all; if you need to work in that situation,
@c first call @code{AC_CHECK_FUNC} for @code{getpgrp}.
@c 
このマクロは@code{getpgrp}が存在するかどうかを全く調査しません.そのよう
な状況で動作する必要がある場合,@code{getpgrp}に対して最初に
@code{AC_CHECK_FUNC}を呼び出してください.
@end defmac

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

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

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

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

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

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

#include <sys/types.h>

void *malloc ();

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

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

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

@defmac AC_FUNC_MBRTOWC
@acindex{FUNC_MBRTOWC}
@cvindex HAVE_MBRTOWC
@c @fuindex mbrtowc
@prindex @code{mbrtowc}
@c Define @code{HAVE_MBRTOWC} to 1 if the function @code{mbrtowc} and the
@c type @code{mbstate_t} are properly declared.
@c 
関数@code{mbrtowc}と型@code{mbstate_t}が正しく宣言されている場合,
@code{HAVE_MBRTOWC}を1に設定します.
@end defmac

@defmac AC_FUNC_MKTIME
@acindex{FUNC_MKTIME}
@ovindex LIBOBJS
@c @fuindex mktime
@prindex @code{mktime}
@c If the @code{mktime} function is not available, or does not work
@c correctly, require an @code{AC_LIBOBJ} replacement for @samp{mktime}.
@c For the purposes of this test, @code{mktime} should conform to the
@c @acronym{POSIX} standard and should be the inverse of
@c @code{localtime}.
@c 
@code{mktime}関数が利用不可能,または正しく動作しない場合,
@code{AC_LIBOBJ}で@samp{mktime}を置換することを要求します.このテストの
目的に対して,@code{mktime}は@acronym{POSIX}に準拠すべきで,
@code{localtime}の反対になっているべきです.
@end defmac

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

@sp 1

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

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

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

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

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

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

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

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

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

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

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

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

@sp 1

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

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

@node Header Files
@c @section Header Files
@section ヘッダファイル
@cindex Header, checking

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

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

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

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

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

@item @file{linux/irda.h}
@hdrindex linux/irda.h
@c It requires @file{linux/types.h} and @file{sys/socket.h}.
@c 
それは,@file{linux/types.h}と@file{sys/socket.h}を要求します.

@item @file{linux/random.h}
@hdrindex linux/random.h
@c It requires @file{linux/types.h}.
@c 
それは,@file{linux/types.h}を要求します.

@item @file{net/if.h}
@hdrindex net/if.h
@c On Darwin, this file requires that @file{sys/socket.h} be included
@c beforehand.  One should run:
@c 
Darwin上では,このファイルは@file{sys/socket.h}がそれ以前にインクルード
されていることを要求します.以下のように実行すべきです.

@example
AC_CHECK_HEADERS([sys/socket.h])
AC_CHECK_HEADERS([net/if.h], [], [],
[#include <stdio.h>
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# if HAVE_STDLIB_H
#  include <stdlib.h>
# endif
#endif
#if HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
])
@end example

@item @file{netinet/if_ether.h}
@hdrindex netinet/if_ether.h
@c On Darwin, this file requires that @file{stdio.h} and
@c @file{sys/socket.h} be included beforehand.  One should run:
@c 
Darwin上では,このファイルは@file{stdio.h}と@file{sys/socket.h}がそれ以
前にインクルードされていることを要求します.以下のように実行すべきです.

@example
AC_CHECK_HEADERS([sys/socket.h])
AC_CHECK_HEADERS([netinet/if_ether.h], [], [],
[#include <stdio.h>
#if STDC_HEADERS
# include <stdlib.h>
# include <stddef.h>
#else
# if HAVE_STDLIB_H
#  include <stdlib.h>
# endif
#endif
#if HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
])
@end example

@item @file{stdint.h}
@c See above, item @file{inttypes.h} vs.@: @file{stdint.h}.
@c 
上記の@file{inttypes.h}対@file{stdint.h}を参照して下さい.

@item @file{stdlib.h}
@hdrindex stdlib.h
@c On many systems (e.g., Darwin), @file{stdio.h} is a prerequisite.
@c 
多くのシステム上で(例えばDarwin),@file{stdio.h}が必須になります.

@item @file{sys/mount.h}
@hdrindex sys/mount.h
@c On FreeBSD 4.8 on ia32 and using gcc version 2.95.4,
@c @file{sys/params.h} is a prerequisite.
@c 
ia32のFreeBSD 4.8と,gccのバージョン2.95.4を使用しているシステムでは,
@file{sys/params.h}が必須になります.

@item @file{sys/socket.h}
@hdrindex sys/socket.h
@c On Darwin, @file{stdlib.h} is a prerequisite.
@c 
Darwin上では,@file{stdlib.h}が必須になります.

@item @file{sys/ucred.h}
@hdrindex sys/ucred.h
@c On HP Tru64 5.1, @file{sys/types.h} is a prerequisite.
@c 
HP Tru64 5.1上では,@file{sys/types.h}が必須になります.

@item @file{X11/extensions/scrnsaver.h}
@hdrindex X11/extensions/scrnsaver.h
@c Using XFree86, this header requires @file{X11/Xlib.h}, which is probably
@c so required that you might not even consider looking for it.
@c 
XFree86を使用している場合は,このヘッダは@file{X11/Xlib.h}を要求し,おそ
らくそれを探すことを考えなくても良いでしょう.

@example
AC_CHECK_HEADERS([X11/extensions/scrnsaver.h], [], [],
[[#include <X11/Xlib.h>
]])
@end example
@end table


@node Particular Headers
@c @subsection Particular Header Checks
@subsection 特定のヘッダの調査

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

@defmac AC_HEADER_DIRENT
@acindex{HEADER_DIRENT}
@cvindex HAVE_DIRENT_H
@cvindex HAVE_NDIR_H
@cvindex HAVE_SYS_DIR_H
@cvindex HAVE_SYS_NDIR_H
@hdrindex dirent.h
@hdrindex sys/ndir.h
@hdrindex sys/dir.h
@hdrindex 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
@hdrindex sys/mkdev.h
@hdrindex sys/sysmacros.h
@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}
@hdrindex sys/stat.h
@c If the macros @code{S_ISDIR}, @code{S_ISREG}, etc.@: defined in
@c @file{sys/stat.h} do not work properly (returning false positives),
@c define @code{STAT_MACROS_BROKEN}.  This is the case on Tektronix UTekV,
@c Amdahl UTS and Motorola System V/88.
@c 
@file{sys/stat.h}で定義されている@code{S_ISDIR},@code{S_ISREG}等のマク
ロが正確に動作しない(間違った正の値を返す)場合,
@code{STAT_MACROS_BROKEN} を定義します.Tektronix UTekV,Amdahl UTS,そ
してMotorola System V/88の場合がそうです.
@end defmac

@defmac AC_HEADER_STDBOOL
@acindex{HEADER_STDBOOL}
@cvindex HAVE_STDBOOL_H
@cvindex HAVE__BOOL
@hdrindex stdbool.h
@hdrindex system.h
@c If @file{stdbool.h} exists and is conformant to C99, define
@c @code{HAVE_STDBOOL_H} to 1; if the type @code{_Bool} is defined, define
@c @code{HAVE__BOOL} to 1.  To fulfill the C99 requirements, your
@c @file{system.h} should contain the following code:
@c 
@file{stdbool.h}が存在し,それがC99に準拠している場合,
@code{HAVE_STDBOOL_H}を1に定義します.型@code{_Bool}が定義されている場合,
@code{HAVE__BOOL}を1に定義します.C99の要求を満たすため,@file{system.h}
には以下のコードを含めるべきです.

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


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

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

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

@example
AC_HEADER_STDC
AC_CHECK_FUNCS(strchr memcpy)
@end example

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

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

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

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

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

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

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

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

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

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

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


@defmac AC_HEADER_TIOCGWINSZ
@acindex{HEADER_TIOCGWINSZ}
@cvindex GWINSZ_IN_SYS_IOCTL
@hdrindex sys/ioctl.h
@hdrindex termios.h
@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
@c @subsection Generic Header Checks
@subsection 一般的なヘッダの調査

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

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

@c For compatibility issues with older versions of Autoconf, please read
@c below.
@c 
古いバージョンのAutoconfとの互換性の問題は,以下を読んでください.
@end defmac

@defmac AC_CHECK_HEADERS (@var{header-file}@dots{}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex{CHECK_HEADERS}
@cvindex HAVE_@var{header}
@c For each given system header file @var{header-file} in the
@c whitespace-separated argument list that exists, define
@c @code{HAVE_@var{header-file}} (in all capitals).  If @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 For compatibility issues with older versions of Autoconf, please read
@c below.
@c 
古いバージョンのAutoconfとの互換性の問題は,以下を読んでください.
@end defmac

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

@node Generic Structures
@c @subsection Generic Structure Checks
@subsection 一般的な構造体の調査

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

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

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

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

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

@defmac AC_CHECK_MEMBERS (@var{members}, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})
@acindex{CHECK_MEMBERS}
@c Check for the existence of each @samp{@var{aggregate}.@var{member}} of
@c @var{members} using the previous macro.  When @var{member} belongs to
@c @var{aggregate}, define @code{HAVE_@var{aggregate}_@var{member}} (in all
@c capitals, with spaces and dots replaced by underscores).  If
@c @var{action-if-found} is given, it is executed for each of the found
@c members.  If @var{action-if-not-found} is given, it is executed for each
@c of the members that could not be found.
@c 
直前のマクロで使用されている@var{members}のそれぞれの
@samp{@var{aggregate}.@var{member}}の存在を調査します.@var{member}が
@var{aggregate}に属しているとき,
@code{HAVE_@var{aggregate}_@var{member}} を(全て大文字で,スペースとドッ
トをアンダースコアで置換しながら)定義します.@var{action-if-found}が与え
られている場合,メンバーが見つかるたびにそれを実行します.
@var{action-if-not-found}が与えられている場合,メンバーが見つからないた
びに実行されます.

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


@node Types
@c @section Types
@section 型

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

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

@node Particular Types
@c @subsection Particular Type Checks
@subsection 特定の型の調査

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

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

@defmac AC_TYPE_MBSTATE_T
@acindex{TYPE_MBSTATE_T}
@cvindex mbstate_t
@hdrindex wchar.h
@c Define @code{HAVE_MBSTATE_T} if @code{<wchar.h>} declares the
@c @code{mbstate_t} type.  Also, define @code{mbstate_t} to be a type if
@c @code{<wchar.h>} does not declare it.
@c 
@code{<wchar.h>}で@code{mbstate_t}型が宣言されている場合,
@code{HAVE_MBSTATE_T}を定義します.また,@code{<wchar.h>}で宣言されてい
ない場合,型として@code{mbstate_t}を定義します.
@end defmac

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

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

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

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

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

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

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

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

@node Generic Types
@c @subsection Generic Type Checks
@subsection 一般的な型の調査

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

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


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

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

@end defmac

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


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

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

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

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

@menu
* Specific Compiler Characteristics::  Some portability issues
* Generic Compiler Characteristics::  Language independent tests and features
* C Compiler::                  Checking its characteristics
* C++ Compiler::                Likewise
* Fortran Compiler::            Likewise
@end menu

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

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

@table @asis
@c @item Static/Dynamic Expressions
@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 
知っている限りでは,このトリックをサポートしないコンパイラは一つです.そ
れはHP-UX 11.00のHPのCコンパイラです(``バンドル''されているものだけでは
なく,実際のものもそうです).

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

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

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

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

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

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

@example
AC_CHECK_SIZEOF(int *)
@end example

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

@defmac AC_LANG_WERROR
@acindex{LANG_WERROR}
@c Normally Autoconf ignores warnings generated by the compiler, linker, and
@c preprocessor.  If this macro is used, warnings will be treated as fatal
@c errors instead for the current language.  This macro is useful when the
@c results of configuration will be used where warnings are unacceptable; for
@c instance, if parts of a program are built with the GCC @samp{-Werror}
@c option.  If the whole program will be built using @samp{-Werror} it is
@c often simpler to put @samp{-Werror} in the compiler flags (@code{CFLAGS}
@c etc.).
@c 
通常,Autoconfはコンパイラ,リンカ,そしてプリプロセッサが生成する警告を
無視します.このマクロが使用されている場合,現在の言語に対し,警告は重大
なエラーとして処理されます.このマクロは,コンフィグレーションの結果が,
予期せぬ警告が生じる場所で使用されるとき役に立ちます.例えば,プログラム
の一部を@samp{-Werror}オプションでビルドしている場合があてはまります.プ
ログラム全体を@samp{-Werror}を使用してビルドしている場合,コンパイラフラ
グに単純に(@code{CFLAGS}などで)@samp{-Werror}を追加したほうがより単純で
しょう.
@end defmac

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

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

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

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

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

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

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

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

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

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

@c @item Don't rely on correct @code{#line} support
@item 正しい@code{#line}のサポートに依存しないで下さい
@c On Solaris 8, @command{c89} (Sun WorkShop 6 update 2 C 5.3 Patch
@c 111679-08 2002/05/09)) rejects @code{#line} directives whose line
@c numbers are greater than 32767.  In addition, nothing in @sc{posix}
@c makes this invalid.  That is the reason why Autoconf stopped issuing
@c @code{#line} directives.
@c 
Solaris 8上で,@command{c89}(Sun WorkShop 6 update 2 C 5.3 Patch
111679-08 2002/05/09))は行番号全体で32767より大きな@code{#line}指示語を
拒絶します.さらに@sc{posix}では,これは有効になっていません.これは,
Autoconfが@code{#line}指示語の生成を停止した理由です.
@end table

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

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

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

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

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

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

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


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

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

@defmac AC_PROG_CPP_WERROR
@acindex{PROG_CPP_WERROR}
@ovindex CPP
@c This acts like @code{AC_PROG_CPP}, except it treats warnings from the
@c preprocessor as errors even if the preprocessor exit status indicates
@c success.  This is useful for avoiding headers that generate mandatory
@c warnings, such as deprecation notices.
@c 
これは@code{AC_PROG_CPP}のように動作しますが,プリプロセッサからの警告を,
プリプロセッサが成功したことを示すステータスで終了した場合でも,エラーが
あったとして処理します.これは,推奨されない注意のような,強制的な警告を
生成するヘッダを避けるときに役に立ちます.
@end defmac


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

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

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

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

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

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

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

@example
const int foo;
@end example

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

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

@defmac AC_C_RESTRICT
@acindex C_RESTRICT
@cvindex restrict
@c If the C compiler recognizes the @code{restrict} keyword, don't do anything.
@c If it recognizes only a variant spelling (@code{__restrict},
@c @code{__restrict__}, or @code{_Restrict}), then define
@c @code{restrict} to that.
@c Otherwise, define @code{restrict} to be empty.
@c Thus, programs may simply use @code{restrict} as if every C compiler
@c supported it; for those that do not, the @file{Makefile}
@c or configuration header defines it away.
@c 
Cコンパイラが@code{restrict}キーワードを認識する場合は何もしません.
(@code{__restrict},@code{__restrict__},または@code{_Restrict})という,
かわったつづりだけを認識する場合,@code{restrict}をそれに定義します.そ
れ以外では,@code{restrict}を空で定義します.このため,プログラムでは
@code{restrict}をすべてのCコンパイラがサポートしているかのように,単純に
使用してかまいません.そうしない人は,@file{Makefile}やコンフィグレーショ
ンヘッダで頑張って定義して下さい.

@c Although support in C++ for the @code{restrict} keyword is not
@c required, several C++ compilers do accept the keyword.
@c This macro works for them, too.
@c 
C++での@code{restrict}キーワードサポートは要求されていませんが,いくつか
のC++コンパイラはそのキーワードを受け入れます.このマクロは,そこでも動
作します.
@end defmac

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

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

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

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

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

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

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

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

@defmac AC_C_PROTOTYPES
@acindex{C_PROTOTYPES}
@cvindex PROTOTYPES
@cvindex __PROTOTYPES
@cvindex PARAMS
@c If function prototypes are understood by the compiler (as determined by
@c @code{AC_PROG_CC}), define @code{PROTOTYPES} and @code{__PROTOTYPES}.
@c In the case the compiler does not handle
@c prototypes, you should use @code{ansi2knr}, which comes with the
@c Automake distribution, to unprotoize function definitions.  For
@c function prototypes, you should first define @code{PARAMS}:
@c 
関数のプロトタイプをコンパイラが理解する場合(@code{AC_PROG_CC}で決定され
ます),@samp{PROTOTYPES}と@code{__PROTOTYPES}を定義します.コンパイラが
プロトタイプを処理しない場合,関数定義のプロトタイプを止めるために,
Automake配布物でインストールされる@code{ansi2knr}を使用すべきです.関数
のプロトタイプに対して,最初に@code{PARAMS}を定義すべきです.

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

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

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

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

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


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


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

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

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

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

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

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

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



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

@c The Autoconf Fortran support is divided into two categories: legacy
@c Fortran 77 macros (@code{F77}), and modern Fortran macros (@code{FC}).
@c The former are intended for traditional Fortran 77 code, and have output
@c variables like @code{F77}, @code{FFLAGS}, and @code{FLIBS}.  The latter
@c are for newer programs that can (or must) compile under the newer
@c Fortran standards, and have output variables like @code{FC},
@c @code{FCFLAGS}, and @code{FCLIBS}.
@c 
AutoconfのFortranサポートは,二つのカテゴリに分けられました.これまでの
Fortran 77マクロ(@code{F77})と,現在のFortramマクロ(@code{FC})です.前者
は伝統的なFortram 77コードを想定していて,@code{F77},@code{FFLAGS},そ
して@code{FLIBS}といった出力変数があります.後者は,より新しいFortranの
標準の元でコンパイル可能(または必須)である,より新しいプログラムを想定し
ていて,@code{FC},@code{FCFLAGS},そして@code{FCLIBS}といった出力変数が
あります.

@c Except for two new macros @code{AC_FC_SRCEXT} and
@c @code{AC_FC_FREEFORM} (see below), the @code{FC} and @code{F77} macros
@c behave almost identically, and so they are documented together in this
@c section.
@c 
二つの新しいマクロ@code{AC_FC_SRCEXT}と@code{AC_FC_FREEFORM}(以下を参照) 
以外では,@code{FC}と@code{F77}のマクロの動作はほとんど同じなので,この
セクションでまとめて説明しています.


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

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

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

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

@defmac AC_PROG_FC (@ovar{compiler-search-list}, @ovar{dialect})
@acindex{PROG_FC}
@ovindex FC
@ovindex FCFLAGS
@c Determine a Fortran compiler to use.  If @code{FC} is not already set in
@c the environment, then @code{dialect} is a hint to indicate what Fortran
@c dialect to search for; the default is to search for the newest available
@c dialect.  Set the output variable @code{FC} to the name of the compiler
@c found.
@c 
使用するFortranコンパイラを決定します.@code{FC}が環境変数でまだ設定され
ていない場合,@code{dialect}が検索しているFortran dialect何かを示すヒン
トになります.デフォルトとして,利用可能なdialectの最も新しいものを検索
します.見つかったコンパイラ名を出力変数@code{FC}に設定します.

@c By default, newer dialects are preferred over older dialects, but if
@c @code{dialect} is specified then older dialects are preferred starting
@c with the specified dialect. @code{dialect} can currently be one of
@c Fortran 77, Fortran 90, or Fortran 95.  However, this is only a hint of
@c which compiler @emph{name} to prefer (e.g. @code{f90} or @code{f95}),
@c and no attempt is made to guarantee that a particular language standard
@c is actually supported.  Thus, it is preferable that you avoid the
@c @code{dialect} option, and use AC_PROG_FC only for code compatible with
@c the latest Fortran standard.
@c 
デフォルトで,より新しいdialectがより古いdialectに代わって選択されますが,
@code{dialect}が指定されている場合,指定されているdialectで始まる,より
古いdialectが選択されます.@code{dialect}は,現在Fortran 77,Fortran 90,
またはFortran 95が可能です.しかし,これは選択されるコンパイラの@emph{名
前}のヒント(例えば,@code{f90}または@code{f95})になるだけで,特定の言語
の標準を実際にサポートしていることへの保証は試みません.このため,
@code{dialect}オプションを避け,@code{AC_PROG_FC}だけを最も新しいFortran 
標準に互換性のあるコード対して使用した方が良いでしょう.

@c This macro may, alternatively, be invoked with an optional first argument
@c which, if specified, must be a space separated list of Fortran
@c compilers to search for, just as in @code{AC_PROG_F77}.
@c 
また,このマクロは,最初のオプション引数を指定して呼び出される場合,それ
は,@code{AC_PROG_F77}と同様に,検索するFortranコンパイラをスペースで分
離したリストにする必要があります.

@c If the output variable @code{FCFLAGS} was not already set in the
@c environment, then set it to @option{-g -02} for GNU @code{g77} (or
@c @option{-O2} where @code{g77} does not accept @option{-g}).  Otherwise,
@c set @code{FCFLAGS} to @option{-g} for all other Fortran compilers.
@c 
出力変数@code{FCFLAGS}が環境変数で設定されていない場合,GNU @code{g77}に
対してはそれを@option{-g -02}に(または,@code{g77}が@option{-g}を受け入
れないところでは@option{-O2}に)設定します.それ以外では,すべてのFortran 
コンパイラに対し,@code{FCFLAGS}を@option{-g}に設定します.
@end defmac

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

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


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

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

@c For example, if object files from a C++ and Fortran 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コンパイラで生成されるオブジェクトファイルを,お互い
にリンクする必要があるとき,リンクにはC++コンパイラ/リンカが使用されるは
ずです(C++特有のものは,リンク時にグローバルコンストラクタ,インスタンス
テンプレート,例外処理等を呼び出す必要が生じるためです).

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

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

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

@c When using Fortran for purely numerical functions (no I/O, etc.)@: often
@c one prefers to provide one's 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} or @code{AC_FC_DUMMY_MAIN}
@c detects whether any such routine is @emph{required} for linking, and
@c what its name is; the shell variable @code{F77_DUMMY_MAIN} or
@c @code{FC_DUMMY_MAIN} holds this name, @code{unknown} when no solution
@c was found, and @code{none} when no such dummy main is needed.
@c 
(I/Oなどではない)純粋な数値関数のためにFortranを使用しているとき,独自の
@code{main}を提供し,Fortranライブラリの初期化を停止したいこともよくあり
ます.しかしこの場合は,いくつかのシステムでのリンクエラーを避けるため,
ダミーの@code{MAIN__}ルーチンを提供する必要があるかもしれません.
@code{AC_F77_DUMMY_MAIN}や@code{AC_FC_DUMMY_MAIN}は,そのようなルーチン
がリンク時に@emph{要求されている}かどうか,そしてその名前が何かを検出し
ます.シェル変数@code{F77_DUMMY_MAIN}や@code{F77_DUMMY_MAIN}は,解決方法
が見つからないときは@code{unknown},そのようなダミーの@code{main}が不要
なときは@code{none}という値を保持します.

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

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

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

@c (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
@c 
(Fortran 77ではなくFortranに対しては,@code{F77}を@code{FC}で置換して下
さい.)

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

@defmac AC_F77_MAIN
@defmacx AC_FC_MAIN
@acindex{F77_MAIN}
@cvindex F77_MAIN
@acindex{FC_MAIN}
@cvindex FC_MAIN
@c As discussed above, many Fortran libraries allow you to provide an entry
@c point called (say) @code{MAIN__} instead of the usual @code{main}, which
@c is then called by a @code{main} function in the Fortran libraries that
@c initializes things like Fortran I/O@.  The
@c @code{AC_F77_MAIN}/@code{AC_FC_MAIN} macro detects whether it is
@c @emph{possible} to utilize such an alternate main function, and defines
@c @code{F77_MAIN}/@code{FC_MAIN} to the name of the function.  (If no
@c alternate main function name is found, @code{F77_MAIN}/@code{FC_MAIN} is
@c simply defined to @code{main}.)
@c 
上で議論したように,Fortranライブラリには,通常の@code{main}の代わりに,
(いわゆる)@code{MAIN__}と呼ばれるエントリーポイントを提供することが可能
なものも多く,それは,Fortran I/Oのようなものを初期化するために,Fortran 
ライブラリの@code{main}関数で呼び出されます.
@code{AC_F77_MAIN}/@code{AC_FC_MAIN}マクロは,そのような代理の
@code{main}関数の利用が@emph{可能か}どうかを検出し,
@code{F77_MAIN}/@code{AC_FC_MAIN}を関数の名前に定義します.(代理の
@code{main}関数の名前が見つからない場合,
@code{F77_MAIN}/@code{AC_FC_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
@c @code{F77_MAIN}/@code{FC_MAIN} instead of @code{main}.
@c 
このため,Fortranルーチンが,I/Oのようなものを実行するためにCから呼び出
されるとき,このマクロを使用し,"main"関数を@code{main}ではなく
@code{F77_MAIN}/@code{FC_MAIN}の名前にすべきです.
@end defmac

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

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

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

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

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

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

@c (Replace @code{F77} with @code{FC} for Fortran instead of Fortran 77.)
@c 
(Fortran 77の代わりに,Fortranに対しては@code{F77}は@code{FC}で置換して
下さい.)

@c Although Autoconf tries to be intelligent about detecting the
@c name-mangling scheme of the Fortran compiler, there may be Fortran
@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}/@code{FC_FUNC} macro is defined.
@c 
AutoconfはFortranコンパイラが名前をmangleする手法を検出するために知的な
手法で試みていますが,Fortranコンパイラはそれをまだサポートしていないか
もしれません.この場合,上記のコードはコンパイル時にエラーとなりますが,
それ以外の動作(例えば,Fortranに関連する機能の停止)は,
@code{F77_FUNC}/@code{FC_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 identifier contains an underscore (e.g., @code{foo_bar}),
@c you should use @code{F77_FUNC_}/@code{FC_FUNC_} instead of
@c @code{F77_FUNC}/@code{FC_FUNC} (with the same arguments).  This is
@c because some Fortran compilers mangle names differently if they contain
@c an underscore.
@c 
Fortran 77の識別子がアンダースコアを含んでいる(例えば@code{foo_bar}の) 
場合,@code{F77_FUNC}/@code{FC_FUNC}の代わりに
@code{F77_FUNC_}/@code{FC_FUNC_}を(同じ引数で)使用すべきです.これは,ア
ンダースコアを含んでいる場合,Fortranコンパイラによっては異なる名前に
mangleするものもあるからです.
@end defmac

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

@defmac AC_FC_SRCEXT (@var{ext}, @ovar{action-if-success}, @ovar{action-if-failure})
@acindex{FC_SRCEXT}
@c By default, the @code{FC} macros perform their tests using a @file{.f}
@c extension for source-code files.  Some compilers, however, only enable
@c newer language features for appropriately named files, e.g. Fortran 90
@c features only for @file{.f90} files.  On the other hand, some other
@c compilers expect all source files to end in @file{.f} and require
@c special flags to support other filename extensions.  The
@c @code{AC_FC_SRCEXT} macro deals with both of these issues.
@c 
デフォルトで,@code{FC}マクロは,ソースコードファイルを@file{.f}の拡張子
を使用しているテストを実行します.しかし,コンパイラによっては,適切なファ
イル名に対してのみ,より新しい言語の機能を利用可能にし,例えば,Fortran
90の機能は@file{.f90}ファイルだけになります.一方,すべてのソースファイ
ルが@file{.f}で終わることを期待していて,他のファイル名の拡張子をサポー
トするためには特殊なフラグが必要になります.@code{AC_FC_SRCEXT}マクロは
両方の問題を扱います.

@c The @code{AC_FC_SRCEXT} tries to get the @code{FC} compiler to accept files
@c ending with the extension .@var{ext} (i.e. @var{ext} does @emph{not}
@c contain the dot).  If any special compiler flags are needed for this, it
@c stores them in the output variable @code{FCFLAGS_}@var{ext}.  This
@c extension and these flags are then used for all subsequent @code{FC} tests
@c (until @code{AC_FC_SRCEXT} is called again).
@c 
@code{AC_FC_SRCEXT}は,拡張子@var{ext}(すなわち,@var{ext}にはドットは含
まれ@emph{ません})で終わるファイルを受け入れる@code{FC}コンパイラの取得
を試みます.こうするために特定のコンパイラフラグが必要な場合,それを出力
変数@code{FCFLAGS_}@var{ext}に保存します.この拡張子とこのフラグは
(@code{AC_FC_SRCEXT}が再び呼び出されるまで),それ以降に呼び出されるすべ
ての@code{FC}で使用されます.

@c For example, you would use @code{AC_FC_SRCEXT(f90)} to employ the
@c @file{.f90} extension in future tests, and it would set a
@c @code{FCFLAGS_f90} output variable with any extra flags that are needed
@c to compile such files.
@c 
例えば,機能テストで@file{.f90}の拡張子を用いるため,
@code{AC_FC_SRCEXT(f90)}を使用し,そのようなファイルをコンパイルするため
に必要な追加フラグがあれば,@code{FCFLAGS_f90}出力変数を設定します.

@c The @code{FCFLAGS_}@var{ext} can @emph{not} be simply absorbed into
@c @code{FCFLAGS}, for two reasons based on the limitations of some
@c compilers.  First, only one @code{FCFLAGS_}@var{ext} can be used at a
@c time, so files with different extensions must be compiled separately.
@c Second, @code{FCFLAGS_}@var{ext} must appear @emph{immediately} before
@c the source-code filename when compiling.  So, continuing the example
@c above, you might compile a @file{foo.f90} file in your Makefile with the
@c command:
@c 
@code{FCFLAGS_}@var{ext}を単純に@code{FCFLAGS}に書き込むことは@emph{不可
能}で,それにはコンパイラの制限に起因する二つの理由があります.最初のも
のは,一度に一つの@code{FCFLAGS_}@var{ext}が使用可能なので,ことなる拡張
子を持つファイルは別々にコンパイルする必要があるためです.二番目のものは,
@code{FCFLAGS_}@var{ext}はコンパイル時のソースコードのファイル名の
@emph{直前}に書く必要があるためです.そのため,上記の例を続けると,以下
のコマンドを持つMakefileで@file{foo.f90}ファイルがコンパイルされるでしょ
う.

@example
foo.o: foo.f90
     $(FC) -c $(FCFLAGS) $(FCFLAGS_f90) foo.f90
@end example

@c If @code{AC_FC_SRCEXT} succeeds in compiling files with the @var{ext}
@c extension, it calls @ovar{action-if-success} (defaults to nothing).  If
@c it fails, and cannot find a way to make the @code{FC} compiler accept such
@c files, it calls @ovar{action-if-failure} (defaults to exiting with an
@c error message).
@c 
@var{ext}の拡張子を持つファイルのコンパイルで@code{AC_FC_SRCEXT}が成功す
る場合,それは@ovar{action-if-success}(デフォルトでは何もしません)を呼び
出します.失敗した場合と,@code{FC}コンパイラにそのようなファイルを受け
入れさせる方法が見つからない場合,@ovar{action-if-failure}(デフォルトは
エラーメッセージとともに終了します)を呼び出します.

@end defmac

@defmac AC_FC_FREEFORM (@ovar{action-if-success}, @ovar{action-if-failure})
@acindex{FC_FREEFORM}

@c The @code{AC_FC_FREEFORM} tries to ensure that the Fortran compiler
@c (@code{$FC}) allows free-format source code (as opposed to the older
@c fixed-format style from Fortran 77).  If necessary, it may add some
@c additional flags to @code{FCFLAGS}.
@c 
@code{AC_FC_FREEFORM}は,Fortranコンパイラ(@code{$FC})でフリーフォーマッ
トのソースコードが可能であることの確認を試みます(逆に,Fortran 77はより
古い固定フォーマット形式です).必要な場合,@code{FCFLAGS}に追加フラグを
加えてもかまいません.

@c This macro is most important if you are using the default @file{.f}
@c extension, since many compilers interpret this extension as indicating
@c fixed-format source unless an additional flag is supplied.  If you
@c specify a different extension with @code{AC_FC_SRCEXT}, such as
@c @file{.f90} or @file{.f95}, then @code{AC_FC_FREEFORM} will ordinarily
@c succeed without modifying @code{FCFLAGS}.
@c 
デフォルトの@file{.f}拡張子を使用している場合,追加のフラグが提供されて
いない限り,多くのコンパイラがこの拡張子を固定フォーマットのソースコード
であると解釈するので,このマクロが最も重要です.@file{.f90}や@file{.f95} 
のように,異なる拡張子を@code{AC_FC_SRCEXT}で指定している場合,
@code{AC_FC_FREEFORM}は,通常,@code{FCFLAGS}を編集することなく成功しま
す.

@c If @code{AC_FC_FREEFORM} succeeds in compiling free-form source, it
@c calls @ovar{action-if-success} (defaults to nothing). If it fails, it
@c calls @ovar{action-if-failure} (defaults to exiting with an error
@c message).
@c 
@code{AC_FC_FREEFORM}はフリーフォームのソースのコンパイルで成功する場合,
それは@ovar{action-if-success}(デフォルトでは何もしません)を呼び出します.
失敗した場合,@ovar{action-if-failure}(デフォルトはエラーメッセージとと
もに終了します)を呼び出します.
@end defmac

@node System Services
@c @section System Services
@section システムサービス

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

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

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

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

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

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

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

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

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

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

@c The LFS introduced the @code{fseeko} and @code{ftello} functions to
@c replace their C counterparts @code{fseek} and @code{ftell} that do not
@c use @code{off_t}. Take care to use @code{AC_FUNC_FSEEKO} to make their
@c prototypes available when using them and large-file support is
@c enabled.
@c 
LFSは@code{fseeko}と@code{ftello}関数を,Cの@code{off_t}を使用していない
@code{fseek}と@code{ftell}に相当するものを置き換えるために導入しました.
それらの関数を使用しているときで,大きなファイルのサポートが利用可能になっ
ているときに,利用可能なプロトタイプを作成するために
@code{AC_FUNC_FSEEKO}を注意して使用して下さい.
@end defmac

@defmac AC_SYS_LONG_FILE_NAMES
@acindex{SYS_LONG_FILE_NAMES}
@cvindex HAVE_LONG_FILE_NAMES
@c If the system supports file names longer than 14 characters, define
@c @code{HAVE_LONG_FILE_NAMES}.
@c 
システムが14文字より長いファイル名をサポートする場合,
@code{HAVE_LONG_FILE_NAMES}を定義します.
@end defmac

@defmac AC_SYS_POSIX_TERMIOS
@acindex{SYS_POSIX_TERMIOS}
@cindex POSIX termios headers
@cindex termios POSIX headers
@c Check to see if the POSIX termios headers and functions are available on the
@c system.  If so, set the shell variable @code{ac_cv_sys_posix_termios} to
@c @samp{yes}.  If not, set the variable to @samp{no}.
@c 
@acronym{POSIX} termiosヘッダと関数がシステムで利用可能かどうかを調査し
ます.その場合は,シェル変数@code{ac_cv_sys_posix_termios}を@samp{yes}に
設定します.それ以外ではその変数を@samp{no}に設定します.
@end defmac

@node UNIX Variants
@c @section UNIX Variants
@section 様々なUNIX

@c The following macros check for certain operating systems that need
@c special treatment for some programs, due to exceptional oddities in
@c their header files or libraries.  These macros are warts; they will be
@c replaced by a more systematic approach, based on the functions they make
@c available or the environments they provide.
@c 
以下のマクロは,ヘッダファイルやライブラリが例外的に特異なため,プログラ
ムに対して特別な処理が必要なオペレーティングシステムを調査します.これら
のマクロは不要なものです.利用可能にする関数や,供給する環境に基づき,よ
り規則正しい手法で置換されるでしょう.

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

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

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

@defmac AC_MINIX
@acindex{MINIX}
@cvindex _MINIX
@cvindex _POSIX_SOURCE
@cvindex _POSIX_1_SOURCE
@c If on Minix, define @code{_MINIX} and @code{_POSIX_SOURCE} and define
@c @code{_POSIX_1_SOURCE} to be 2.  This allows the use of @acronym{POSIX}
@c facilities.  Should be called before any macros that run the C compiler.
@c 
Minixの場合,@code{_MINIX}と@code{_POSIX_SOURCE}を定義し, 
@code{_POSIX_1_SOURCE}を2と定義します.これで@acronym{POSIX}の機能が使用
可能になります.Cコンパイラを実行するあらゆるマクロの前で呼び出すべきで
す.
@end defmac




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

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

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

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

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

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

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

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

@c Autoconf-generated @command{configure} scripts check for the C compiler and
@c its features by default.  Packages that use other programming languages
@c (maybe more than one, e.g., C and C++) need to test features of the
@c compilers for the respective languages.  The following macros determine
@c which programming language is used in the subsequent tests in
@c @file{configure.ac}.
@c 
Autoconfが生成した@command{configure}スクリプトは,Cコンパイラとその特徴
をデフォルトで調査します.他のプログラム言語を使用するパッケージ(一つ以
上で,例えば,CとC++)は,それぞれの言語のコンパイラの特徴をテストする必
要があります.以下のマクロは@file{configure.ac}内のそれ以降のテストで使
用されるプログラミング言語のコンパイラを決定します.

@defmac AC_LANG (@var{language})
@c Do compilation tests using the compiler, preprocessor, and file
@c extensions for the specified @var{language}.
@c 
@var{language}で指定されている,コンパイラ,プリプロセッサ,そしてファイ
ル拡張子をコンパイルテストで使用します.

@c Supported languages are:
@c 
サポートされている言語は以下のとおりです.

@table @samp
@item C
@c Do compilation tests using @code{CC} and @code{CPP} and use extension
@c @file{.c} for test programs.  Use compilation flags: @code{CPPFLAGS} with
@c @code{CPP}, and both @code{CPPFLAGS} and @code{CFLAGS} with @code{CC}.
@c 
@code{CC}と@code{CPP}を使用してコンパイルテストを行ない,テストプログラ
ムでは@file{.c}の拡張子を使用します.コンパイルフラグを使用します.
@code{CPP}では@code{CPPFLAGS},@code{CC}では@code{CPPFLAGS}と
@code{CFLAGS}の両方を使用します.

@item C++
@c Do compilation tests using @code{CXX} and @code{CXXCPP} and use
@c extension @file{.C} for test programs.  Use compilation flags:
@c @code{CPPFLAGS} with @code{CXXPP}, and both @code{CPPFLAGS} and
@c @code{CXXFLAGS} with @code{CXX}.
@c 
@code{CXX}と@code{CXXCPP}を使用してコンパイルテストを行ない,テストプロ
グラムでは@file{.C}の拡張子を使用します.コンパイルフラグを使用します.
@code{CXXPP}では@code{CPPFLAGS},@code{CXX}では@code{CPPFLAGS}と
@code{CXXFLAGS}の両方を使用します.

@item Fortran 77
@c Do compilation tests using @code{F77} and use extension @file{.f} for
@c test programs.  Use compilation flags: @code{FFLAGS}.
@c 
@code{F77}を使用してコンパイルテストを行ない,テストプログラムでは
@file{.f}の拡張子を使用します.コンパイルフラグを使用します.
@code{FFLAGS}です.

@item Fortran
@c Do compilation tests using @code{FC} and use extension @file{.f} (or
@c whatever has been set by @code{AC_FC_SRCEXT}) for test programs.  Use
@c compilation flags: @code{FCFLAGS}.
@c 
@code{FC}を使用してコンパイルテストを行ない,テストプログラムでは
@file{.f}の拡張子(または@code{AC_FC_SRCEXT}で設定されているもの)を使用し
ます.コンパイルフラグを使用します.@code{FCFLAGS}です.
@end table
@end defmac

@defmac AC_LANG_PUSH (@var{language})
@acindex{LANG_PUSH}
@c Remember the current language (as set by @code{AC_LANG}) on a stack, and
@c then select the @var{language}.  Use this macro and @code{AC_LANG_POP}
@c in macros that need to temporarily switch to a particular language.
@c 
現在の言語を(@code{AC_LANG}に設定するように)スタックに記録してから,
@var{language}を選択します.このマクロと@code{AC_LANG_POP}を,一時的に特
定の言語に切替える必要があるマクロで使用してください.
@end defmac

@defmac AC_LANG_POP (@ovar{language})
@acindex{LANG_POP}
@c Select the language that is saved on the top of the stack, as set by
@c @code{AC_LANG_PUSH}, and remove it from the stack.
@c 
@code{AC_LANG_PUSH}で設定するように,スタックのトップに保存されている言
語に選択し,スタックからそれを削除します.

@c If given, @var{language} specifies the language we just @emph{quit}.  It
@c is a good idea to specify it when it's known (which should be the
@c case@dots{}), since Autoconf will detect inconsistencies.
@c 
@var{language}与えられている場合,それは言語を@emph{そのまま}指定します.
分かっているときは,Autoconfが間違いを検出するので(case@dots{}にすべきで
すが),それを指定することは良い考えです.

@example
AC_LANG_PUSH(Fortran 77)
# Perform some tests on Fortran 77.
# @dots{}
AC_LANG_POP(Fortran 77)
@end example
@end defmac

@defmac AC_LANG_ASSERT (@var{language})
@acindex{LANG_ASSERT}
@c Check statically that the current language is
@c @var{language}.  You should use this in your language specific macros
@c to avoid that they be called with an inappropriate language.
@c 
現在の言語が@var{language}であることを十分に調査します.言語指定のマクロ
で不適切な言語での呼び出しを避けるため使用すべきです.

@c This macro runs only at @command{autoconf} time, and incurs no cost at
@c @command{configure} time.  Sadly enough and because Autoconf is a two
@c layer language @footnote{Because M4 is not aware of Sh code,
@c especially conditionals, some optimizations that look nice statically
@c may produce incorrect results at runtime.}, the macros
@c @code{AC_LANG_PUSH}/@code{AC_LANG_POP} cannot be ``optimizing'',
@c therefore as much as possible you ought to avoid using them to wrap
@c your code, rather, require from the user to run the macro with a
@c correct current language, and check it with @code{AC_LANG_ASSERT}.
@c And anyway, that may help the user understand she is running a Fortran
@c macro while expecting a result about her Fortran 77 compiler...
@c 
このマクロは,@command{autoconf}時のみで実行され,@command{configure}時
に時間がかかることはありません.残念ながら,Autoconfは二つのレイヤーの言
語があるため@footnote{M4は特別な条件文となっているShのコードに注目しない
ので,十分に良いと感じられる最適化でも,実行時の結果が間違っているものに
なる可能性があります.},マクロの@code{AC_LANG_PUSH}/@code{AC_LANG_POP} 
は``最適化'' されず,そのため,できるだけコードのラッパーを行なうために
それらを使用することを避け,代わりに,ユーザがマクロを現在の言語で実行す
ることを要求し,@code{AC_LANG_ASSERT}で調査するようにして下さい.いずれ
にせよ,Fortran 77コンパイラの結果を期待している,ユーザが実行している
Fortranマクロを理解する助けとなるでしょう@enddots{}
@end defmac


@defmac AC_REQUIRE_CPP
@acindex{REQUIRE_CPP}
@c Ensure that whichever preprocessor would currently be used for tests has
@c been found.  Calls @code{AC_REQUIRE} (@pxref{Prerequisite Macros}) with an
@c argument of either @code{AC_PROG_CPP} or @code{AC_PROG_CXXCPP},
@c depending on which language is current.
@c 
現在のテストに使用されるプリプロセッサが見つかることを保証します.現在の
言語に依存して,@code{AC_PROG_CPP}または@code{AC_PROG_CXXCPP}のいずれか
の引数を用いて,@code{AC_REQUIRE}(@pxref{Prerequisite Macros})を呼び出し
てください.
@end defmac


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

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

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

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

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

@c @center @emph{Look for realism.}
@center @emph{現実を見つめる.}

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

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

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

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

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

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

@c If a test program needs to use or create a data file, give it a name
@c that starts with @file{conftest}, such as @file{conftest.data}.  The
@c @command{configure} script cleans up by running @samp{rm -rf conftest*}
@c after running test programs and if the script is interrupted.
@c 
テストプログラムでデータファイルを使用したり,作成したりする必要がある場
合, @file{conftest.data}のような,@file{conftest}で始まる名前を与えてく
ださい.@command{configure}スクリプトは,テストプログラム終了後やスクリ
プトが中断された場合,@samp{rm -rf conftest*}を実行しクリーンアップしま
す.

@node Test Functions
@c @subsection Test Functions
@subsection 関数のテスト

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

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

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

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

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

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


@node Generating Sources
@c @subsection Generating Sources
@subsection ソースの生成

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


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

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

@defmac AC_LANG_SOURCE (@var{source})
@acindex{LANG_SOURCE}
@c Expands into the @var{source}, with the definition of
@c all the @code{AC_DEFINE} performed so far.
@c 
すべての@code{AC_DEFINE}で実行されるこれまでの定義を用いて,@var{source} 
に展開します.
@end defmac

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

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

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

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

# 1 "confdefs.h" 1

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

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

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

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

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

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

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

# 1 "confdefs.h" 1

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

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


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

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


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

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

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

@c Sometimes one might need to run the preprocessor on some source file.
@c @emph{Usually it is a bad idea}, as you typically need to @emph{compile}
@c your project, not merely run the preprocessor on it; therefore you
@c certainly want to run the compiler, not the preprocessor.  Resist to the
@c temptation of following the easiest path.
@c 
いくつかのソースファイルでプリプロセッサを実行する必要があるときもありま
す.通常はプロジェクトを@emph{コンパイル}する必要があり,プリプロセッサ
を実行する必要があることは滅多に無いので,@emph{そうすることは,普通は悪
い考えです}.そのため,きっとプリプロセッサではなくコンパイラを実行した
いと思うでしょう.安易な道をたどる誘惑に逆らってください.

@c Nevertheless, if you need to run the preprocessor, then use
@c @code{AC_PREPROC_IFELSE}.
@c 
それにもかかわらず,プリプロセッサを実行する必要がある場合,
@code{AC_PREPROC_IFELSE}を使用してください.

@defmac AC_PREPROC_IFELSE (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
@acindex{PREPROC_IFELSE}
@c Run the preprocessor of the current language (@pxref{Language Choice})
@c on the @var{input}, run the shell commands @var{action-if-true} on
@c success, @var{action-if-false} otherwise.  The @var{input} can be made
@c by @code{AC_LANG_PROGRAM} and friends.
@c 
@var{input}で現在の言語(@pxref{Language Choice})のプリプロセッサを実行し,
成功したらシェルコマンド@var{action-if-true}を実行し,そうでなければ
@var{action-if-false}を実行します.@var{input}は@code{AC_LANG_PROGRAM}と
その仲間で作成することが可能です.

@c This macro uses @code{CPPFLAGS}, but not @code{CFLAGS}, because
@c @option{-g}, @option{-O}, etc.@: are not valid options to many C
@c preprocessors.
@c 
このマクロは@code{CPPFLAGS}を使用しますが,@option{-g},@option{-O}など
は多くのCプリプロセッサで有効なオプションではないので,@code{CFLAGS} は
使用しません.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.
@c 
予期せぬ異常終了は,通常@code{AC_MSG_FAILURE}で報告します.
@end defmac

@c For instance:
@c 
例えば以下のようにします.

@example
AC_INIT(Autoconf Documentation, @value{VERSION}, bug-autoconf@@gnu.org)
AC_DEFINE([HELLO_WORLD], ["Hello, World\n"])
AC_PREPROC_IFELSE(
   [AC_LANG_PROGRAM([[const char hw[] = "Hello, World\n";]],
                    [[fputs (hw, stdout);]])],
   [AC_MSG_RESULT([OK])],
   [AC_MSG_FAILURE([unexpected preprocessor failure])])
@end example

@noindent
@c results in:
@c 
結果は以下のようになります.

@example
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
OK
@end example

@sp 1

@c The macro @code{AC_TRY_CPP} (@pxref{Obsolete Macros}) used to play the
@c role of @code{AC_PREPROC_IFELSE}, but double quotes its argument, making
@c it impossible to use it to elaborate sources.  You are encouraged to
@c get rid of your old use of the macro @code{AC_TRY_CPP} in favor of
@c @code{AC_PREPROC_IFELSE}, but, in the first place, are you sure you need
@c to run the @emph{preprocessor} and not the compiler?
@c 
マクロ@code{AC_TRY_CPP}(@pxref{Obsolete Macros})は,
@code{AC_PREPROC_IFELSE}の役目を果たすために使用されていましたが,その引
数を二重の引用符で囲んでいるので,精巧なソースで使用することが不可能でし
た.マクロ@code{AC_TRY_CPP}の@code{AC_PREPROC_IFELSE}をような古い使い方
を取り除くことも推奨しますが,最初にコンパイラではなく@emph{プリプロセッ
サ}を実行する必要があるのかを確かめることを推奨します.

@defmac AC_EGREP_HEADER (@var{pattern}, @var{header-file}, @var{action-if-found}, @ovar{action-if-not-found})
@acindex{EGREP_HEADER}
@c If the output of running the preprocessor on the system header file
@c @var{header-file} matches the extended regular expression
@c @var{pattern}, execute shell commands @var{action-if-found}, otherwise
@c execute @var{action-if-not-found}.
@c 
システムヘッダファイル@var{header-file}でのプリプロセッサの実行での出力
が拡張正規表現の@var{pattern}にマッチする場合,シェルコマンド
@var{action-if-found}を実行し,それ以外では@var{action-if-not-found}を実
行します.
@end defmac

@defmac AC_EGREP_CPP (@var{pattern}, @var{program}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex{EGREP_CPP}
@c @var{program} is the text of a C or C++ program, on which shell
@c variable, back quote, and backslash substitutions are performed.  If the
@c output of running the preprocessor on @var{program} matches the
@c extended regular expression @var{pattern}, execute shell commands
@c @var{action-if-found}, otherwise execute @var{action-if-not-found}.
@c 
@var{program}がCやC++プログラムのテキストで,そのなかではシェル変数,バッ
ククオート,そしてバックスラッシュの代入が実行されたものになっています.
@var{program}でのプリプロセッサの実行での出力が拡張正規表現の
@var{pattern}にマッチする場合,シェルコマンド@var{action-if-found}を実行
し,それ以外では@var{action-if-not-found}を実行します.
@end defmac



@node Running the Compiler
@c @section Running the Compiler
@section コンパイラの実行

@c To check for a syntax feature of the current language's (@pxref{Language
@c Choice}) compiler, such as whether it recognizes a certain keyword, or
@c simply to try some library feature, use @code{AC_COMPILE_IFELSE} to try
@c to compile a small program that uses that feature.
@c 
特定のキーワードを認識するかどうかといった,現在の言語のコンパイラの構文
の特徴を調査するため,また,単純にいくつかのライブラリの特徴を試すため,
それらの特徴を使用している小さなプログラムのコンパイルを試みる
@code{AC_COMPILE_IFELSE}を使用してください.

@defmac AC_COMPILE_IFELSE (@var{input}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex{COMPILE_IFELSE}
@c Run the compiler and compilation flags of the current language
@c (@pxref{Language Choice}) on the @var{input}, run the shell commands
@c @var{action-if-true} on success, @var{action-if-false} otherwise.  The
@c @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
@c 
現在の言語(@pxref{Language Choice})のコンパイラとコンパイラフラグを
@var{input}で実行し,成功したらシェルコマンド@var{action-if-true}を,そ
れ以外では@var{action-if-false}を実行します.@var{input}は
@code{AC_LANG_PROGRAM}やその仲間で作成することが可能です.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.  This macro does not try to link; use
@c @code{AC_LINK_IFELSE} if you need to do that (@pxref{Running the
@c Linker}).
@c 
慣習的に,予期せぬ異常終了は@code{AC_MSG_FAILURE}で報告します.このマク
ロはリンクを試みません.そうする必要がある場合,@code{AC_LINK_IFELSE}を
使用してください(@pxref{Running the Linker}).
@end defmac

@node Running the Linker
@c @section Running the Linker
@section リンカの実行

@c To check for a library, a function, or a global variable, Autoconf
@c @command{configure} scripts try to compile and link a small program that
@c uses it.  This is unlike Metaconfig, which by default uses @code{nm} or
@c @code{ar} on the C library to try to figure out which functions are
@c available.  Trying to link with the function is usually a more reliable
@c approach because it avoids dealing with the variations in the options
@c and output formats of @code{nm} and @code{ar} and in the location of the
@c standard libraries.  It also allows configuring for cross-compilation or
@c checking a function's run-time behavior if needed.  On the other hand,
@c it can be slower than scanning the libraries once, but accuracy is more
@c important than speed.
@c 
ライブラリ,関数,またはグローバル変数を調査するため,Autoconfの
@command{configure}スクリプトは,それを使用している小さなプログラムのコ
ンパイルとリンクを試みます.これはMetaconfigとは異なり,それはデフォルト
で,C ライブラリで関数が利用可能かどうか判定するために@code{nm}や
@code{ar}を使用します.オプションと@code{nm}と@code{ar}の出力の違いと,
標準ライブラリの位置の違いを処理することを避けるので,関数とのリンクを試
みることは,通常,より信頼性が高い方法になります.クロスコンパイルのコン
フィグレーションや,必要な場合は関数の実行時の動作を調査も可能です.一方,
一度のライブラリスキャンより遅くなるはずですが,正確さは時間より重要です.

@c @code{AC_LINK_IFELSE} is used to compile test programs to test for
@c functions and global variables.  It is also used by @code{AC_CHECK_LIB}
@c to check for libraries (@pxref{Libraries}), by adding the library being
@c checked for to @code{LIBS} temporarily and trying to link a small
@c program.
@c 
@code{AC_LINK_IFELSE}は,関数とグローバル変数に対するテストのため,テス
トプログラムをコンパイルするために使用されます.ライブラリを調査する 
@code{AC_CHECK_LIB}でも,調査しているライブラリを一時的に@code{LIBS}に追
加したり,小さなプログラムのリンクを試みたりすることで,使用されています
(@pxref{Libraries}).


@defmac AC_LINK_IFELSE (@var{input}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex{LINK_IFELSE}
@c Run the compiler (and compilation flags) and the linker of the current
@c language (@pxref{Language Choice}) on the @var{input}, run the shell
@c commands @var{action-if-true} on success, @var{action-if-false}
@c otherwise.  The @var{input} can be made by @code{AC_LANG_PROGRAM} and
@c friends.
@c 
現在の言語(@pxref{Language Choice})のコンパイラ(とコンパイラフラグ)とリ
ンカを@var{input}で実行し,成功したらシェルコマンドの
@var{action-if-true}を,それ以外では@var{action-if-false}を実行します.
@var{input}は@code{AC_LANG_PROGRAM}やその仲間で作成することが可能です.

@c @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
@c current compilation flags.
@c 
リンク時には,現在のコンパイラフラグに加えて,@code{LDFLAGS}と
@code{LIBS}も使用されます.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.  This macro does not try to execute the program;
@c use @code{AC_RUN_IFELSE} if you need to do that (@pxref{Run Time}).
@c 
慣習的に,予期せぬ異常終了は@code{AC_MSG_FAILURE}で報告します.このマク
ロはリンクを試みません.そうする必要がある場合,@code{AC_RUN_IFELSE}を使
用してください(@pxref{Run Time}).
@end defmac



@node Run Time
@c @section Checking Run Time Behavior
@section 実行時の動作の調査

@c Sometimes you need to find out how a system performs at run time, such
@c as whether a given function has a certain capability or bug.  If you
@c can, make such checks when your program runs instead of when it is
@c configured.  You can check for things like the machine's endianness when
@c your program initializes itself.
@c 
当該関数に特定の能力やバグがあるかどうかといった,実行時にシステムがどの
ような動作をするか調べる必要があることもあります.可能であれば,コンフィ
グレーション時ではなくプログラムを実行するときそのような調査をしてくださ
い.マシンのエンディアンのようなものは,プログラムの初期化時に調査するこ
とが可能です.

@c If you really need to test for a run-time behavior while configuring,
@c you can write a test program to determine the result, and compile and
@c run it using @code{AC_RUN_IFELSE}.  Avoid running test programs if
@c possible, because this prevents people from configuring your package for
@c cross-compiling.
@c 
コンフィグレーション時に実行時の動作を調査する必要が本当にある場合,結果
を決定するテストプログラムを書き,コンパイルして@code{AC_RUN_IFELSE} を
使用して実行することも可能です.これは,クロスコンパイルでパッケージをコ
ンフィグレーションする人々の妨げになるので,可能であれば,テストプログラ
ムの実行は避けてください.

@defmac AC_RUN_IFELSE (@var{input}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{action-if-cross-compiling})
@acindex{RUN_IFELSE}
@c If @var{program} compiles and links successfully and returns an exit
@c status of 0 when executed, run shell commands @var{action-if-true}.
@c Otherwise, run shell commands @var{action-if-false}.
@c 
@var{program}のコンパイルとリンクが正常終了し,実行時に0の終了ステータス
が返る場合,シェルコマンド@var{action-if-true}を実行します.それ以外では,
シェルコマンド@var{action-if-false}を実行します.

@c The @var{input} can be made by @code{AC_LANG_PROGRAM} and friends.
@c @code{LDFLAGS} and @code{LIBS} are used for linking, in addition to the
@c compilation flags of the current language (@pxref{Language Choice}).
@c 
@var{input}は,@code{AC_LANG_PROGRAM}とその仲間で作成することが可能です.
現在の言語(@pxref{Language Choice})のコンパイラフラグに加えて,リンク時
には@code{LDFLAGS}と@code{LIBS}も使用します.

@c If the compiler being used does not produce executables that run on the
@c system where @command{configure} is being run, then the test program is
@c not run.  If the optional shell commands @var{action-if-cross-compiling}
@c are given, they are run instead.  Otherwise, @command{configure} prints
@c an error message and exits.
@c 
使用されるコンパイラが,@command{configure}が実行されているシステムで実
行する実行形式を生成しない場合,テストプログラムは実行されません.オプショ
ンのシェルコマンド@var{action-if-cross-compiling}が与えられている場合,
それらが変わりに実行されます.それ以外の場合,@command{configure}はエラー
メッセージを出力し終了します.

@c In the @var{action-if-false} section, the exit status of the program is
@c available in the shell variable @samp{$?}, but be very careful to limit
@c yourself to positive values smaller than 127; bigger values should be
@c saved into a file by the @var{program}.  Note also that you have simply
@c no guarantee that this exit status is issued by the @var{program}, or by
@c the failure of its compilation.  In other words, use this feature if
@c sadist only, it was reestablished because the Autoconf maintainers grew
@c tired of receiving ``bug reports''.
@c 
@var{action-if-false}セクションでは,プログラムの終了ステータスはシェル
変数@samp{$?}で利用可能ですが,127未満の正の値に制限するよう十分注意して
ください.大きな値は,@var{program}でファイルに保存すべきです.また,こ
の終了ステータスが@var{program}で,またはそのコンパイルの異常終了で,生
成されることを保証されていないことに注意してください.言い替えると,苛め
られるのが好きな人だけこの機能を使用してください.それは,Autoconfの管理
者が飽き飽きするほど``バグの報告''を受けとることになったので,元に戻しま
した.

@c It is customary to report unexpected failures with
@c @code{AC_MSG_FAILURE}.
@c 
慣習的に,予期せぬ異常終了は@code{AC_MSG_FAILURE}で報告します.
@end defmac

@c Try to provide a pessimistic default value to use when cross-compiling
@c makes run-time tests impossible.  You do this by passing the optional
@c last argument to @code{AC_RUN_IFELSE}.  @command{autoconf} prints a
@c warning message when creating @command{configure} each time it
@c encounters a call to @code{AC_RUN_IFELSE} with no
@c @var{action-if-cross-compiling} argument given.  You may ignore the
@c warning, though users will not be able to configure your package for
@c cross-compiling.  A few of the macros distributed with Autoconf produce
@c this warning message.
@c 
クロスコンパイルで実行時のテストが不可能な時は,使用する悲観的なデフォル
ト値を提供してみてください.オプションの最後の引数を@code{AC_RUN_IFELSE}
に渡すことでこうします.@command{autoconf}は,
@var{action-if-cross-compiling}引数無しで@code{AC_RUN_IFELSE}を呼び出す
ごとに,@command{configure}を生成するときに警告メッセージを出力します.
警告を無視してもかまいませんが,ユーザはクロスコンパイルでパッケージのコ
ンフィグレーションが不可能になります.Autoconfで配布されるマクロには,こ
の警告メッセージを生成するものもあります.

@c To configure for cross-compiling you can also choose a value for those
@c parameters based on the canonical system name (@pxref{Manual
@c Configuration}).  Alternatively, set up a test results cache file with
@c the correct values for the host system (@pxref{Caching Results}).
@c 
クロスコンパイルでコンフィグレーションするため,これらのパラメータの値を
標準的なシステム名を基に選択することも可能です(@pxref{Manual
Configuration}).または,テスト結果のキャッシュファイルをホストシステム
に対する正しい値で設定してください(@pxref{Caching Results}).

@c To provide a default for calls of @code{AC_RUN_IFELSE} that are embedded
@c in other macros, including a few of the ones that come with Autoconf,
@c you can test whether the shell variable @code{cross_compiling} is set to
@c @samp{yes}, and then use an alternate method to get the results instead
@c of calling the macros.
@c 
Autoconfとともに含まれている他のマクロに埋め込まれている,
@code{AC_RUN_IFELSE}の呼び出しに対するデフォルトを提供するため,シェル変
数@code{cross_compiling}が@samp{yes}に設定されているかどうかを調査し,マ
クロ呼び出しの代わりに結果を取得するため,代わりの手法を使用してください.


@node Systemology
@c @section Systemology
@section システム

@c This section aims at presenting some systems and pointers to
@c documentation.  It may help you addressing particular problems reported
@c by users.
@c 
このセクションは,ドキュメントへのシステムとポインタを紹介することを目的
としています.ユーザが報告する特定の問題を解決するとき役に立つでしょう.

@c The @href{http://bhami.com/rosetta.html, Rosetta Stone for Unix}
@c contains a lot of interesting crossed information on various Unices.
@c 
@href{http://bhami.com/rosetta.html, Rosetta Stone for Unix}には,様々な
Unixの興味深い相互的な情報が大量にあります.

@table @asis
@item Darwin
@cindex Darwin
@c Darwin is also known as Mac OS X@.  Beware that the file system @emph{can} be
@c case-preserving, but case insensitive.  This can cause nasty problems,
@c since for instance the installation attempt for a package having an
@c @file{INSTALL} file can result in @samp{make install} report that
@c nothing was to be done!
@c 
DarwinはMac OS Xとしても知られています.ファイルシステムで大文字小文字の
違いを保存することが@emph{可能}ですが,大文字小文字の区別をしないことに
注意してください.例えば,@file{INSTALL}ファイルがあるパッケージでインス
トールを試みるとき,@samp{make install}で「何もすることが無い!」のよう
な結果が得られ,これは厄介な問題になります.

@c That's all dependent on whether the file system is a UFS (case
@c sensitive) or HFS+ (case preserving).  By default Apple wants you to
@c install the OS on HFS+.  Unfortunately, there are some pieces of
@c software which really need to be built on UFS@.  We may want to rebuild
@c Darwin to have both UFS and HFS+ available (and put the /local/build
@c tree on the UFS).
@c 
それは,ファイルシステムがUFS(大文字小文字を区別する)かHFS+(大文字小文字
の違いを保存する)かに依存します.デフォルトで,AppleはHFS+にOSをインストー
ルして欲しがっています.残念ながら,本当にUFSでビルドする必要があるソフ
トウェアもあります.DarwinをUFSとHFS+の両方で利用可能なように再構築して
(そして/local/buildのツリーに配置して)欲しいと思います.

@item @acronym{QNX} 4.25
@cindex @acronym{QNX} 4.25
@c FIXME: Please, if you feel like writing something more precise,
@c it'd be great.  In particular, I can't understand the difference with
@c QNX Neutrino.
@c 
@c @acronym{QNX} is a realtime operating system running on Intel architecture
@c meant to be scalable from the small embedded systems to the hundred
@c processor super-computer.  It claims to be @acronym{POSIX} certified.  More
@c information is available on the @href{www.qnx.com, @acronym{QNX} home page},
@c including the @href{http://support.qnx.com/support/docs/qnx4/, @acronym{QNX}
@c man pages}.
@c 
@acronym{QNX}は,小さな組み込みシステムから百個のプロセッサを持つスーパー
コンピュータまで幅広く利用できる,Intelアーキテクチャでまで動作するリア
ルタイムオペレーティングシステムです.それは@acronym{POSIX}であることが
証明されていると主張しています.@href{www.qnx.com, @acronym{QNX} home
page} で,より多くの情報が利用可能で,そこには,
@href{http://support.qnx.com/support/docs/qnx4/, @acronym{QNX} man
pages}もあります.

@item Tru64
@cindex Tru64
@c The @href{http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/,
@c documentation of several versions of Tru64} is available in different
@c formats.
@c 
@href{http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/,
documentation of several versions of Tru64}では,様々な書式が利用可能で
す.

@item Unix version 7
@cindex Unix version 7
@cindex V7
@c Documentation is available in the
@c @href{http://plan9.bell-labs.com/7thEdMan/index.html, V7 Manual}.
@c 
@href{http://plan9.bell-labs.com/7thEdMan/index.html, V7 Manual}でドキュ
メントが利用可能です.
@end table


@node Multiple Cases
@c @section Multiple Cases
@section 複数のケース文

@c Some operations are accomplished in several possible ways, depending on
@c the @sc{unix} variant.  Checking for them essentially requires a ``case
@c statement''.  Autoconf does not directly provide one; however, it is
@c easy to simulate by using a shell variable to keep track of whether a
@c way to perform the operation has been found yet.
@c 
処理によっては,それぞれ異なる@sc{unix}に依存して,考えられるいくつかの
方法で達成されるものもあります.それを本質的に調査するためには,``case 
文''が必要です.Autoconfは直接それを提供していません.しかし,実行する処
理が見つかったかどうかの追跡を続けるため,シェル変数を使用することで簡単
にシミュレート可能です.

@c Here is an example that uses the shell variable @code{fstype} to keep
@c track of whether the remaining cases need to be checked.
@c 
残っているcaseを調査する必要があるかどうかに関係なく追跡を続けるために,
シェル変数@code{fstype}を使用する例は,以下のようになります.

@example
@group
AC_MSG_CHECKING([how to get file system type])
fstype=no
# The order of these tests is important.
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statvfs.h>
#include <sys/fstyp.h>]])],
                  [AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4])
if test $fstype = no; then
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
#include <sys/fstyp.h>]])],
                  [AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3])
fi
if test $fstype = no; then
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/statfs.h>
#include <sys/vmount.h>]])]),
                  [AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX])
fi
# (more cases omitted here)
AC_MSG_RESULT([$fstype])
@end group
@end example

@c ====================================================== Results of Tests.

@node Results
@c @chapter Results of Tests
@chapter テストの結果

@c Once @command{configure} has determined whether a feature exists, what can
@c it do to record that information?  There are four sorts of things it can
@c do: define a C preprocessor symbol, set a variable in the output files,
@c save the result in a cache file for future @command{configure} runs, and
@c print a message letting the user know the result of the test.
@c 
一度@command{configure}で特徴の存在を定義すると,その情報を記録するため
に何ができるのでしょうか?そうする方法は四種類あります.Cプリプロセッサ
シンボルの定義,出力ファイルで変数を設定,@command{configure}実行時のキャッ
シュファイルに結果を保存,そして,テスト結果をユーザに知らせるメッセージ
の出力です.

@menu
* Defining Symbols::            Defining C preprocessor symbols
* Setting Output Variables::    Replacing variables in output files
* Caching Results::             Speeding up subsequent @command{configure} runs
* Printing Messages::           Notifying @command{configure} users
@end menu

@node Defining Symbols
@c @section Defining C Preprocessor Symbols
@section Cプリプロセッサシンボルの定義

@c A common action to take in response to a feature test is to define a C
@c preprocessor symbol indicating the results of the test.  That is done by
@c calling @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}.
@c 
特徴テストからの応答を受けとる通常の動作は,テストの結果を示すCプリプロ
セッサシンボルを定義することです.それは@code{AC_DEFINE}や
@code{AC_DEFINE_UNQUOTED}と呼ばれるもので行います.

@c By default, @code{AC_OUTPUT} places the symbols defined by these macros
@c into the output variable @code{DEFS}, which contains an option
@c @option{-D@var{symbol}=@var{value}} for each symbol defined.  Unlike in
@c Autoconf version 1, there is no variable @code{DEFS} defined while
@c @command{configure} is running.  To check whether Autoconf macros have
@c already defined a certain C preprocessor symbol, test the value of the
@c appropriate cache variable, as in this example:
@c 
デフォルトで,@code{AC_OUTPUT}はマクロが定義したシンボルを,出力変数 
@code{DEFS}に配置し,それはそれぞれのシンボルに対する
@option{-D@var{symbol}=@var{value}}を含んでいます.Autoconfバージョン1 
と異なり,@command{configure}が実行中に定義する変数@code{DEFS}はありませ
ん.Autoconfマクロが,あるCプリプロセッサシンボルを既に定義しているかど
うか調査するため,以下の例のように,適切なキャッシュ変数の値をテストして
ください.

@example
AC_CHECK_FUNC(vprintf, [AC_DEFINE(HAVE_VPRINTF)])
if test "$ac_cv_func_vprintf" != yes; then
  AC_CHECK_FUNC(_doprnt, [AC_DEFINE(HAVE_DOPRNT)])
fi
@end example

@c If @code{AC_CONFIG_HEADERS} has been called, then instead of creating
@c @code{DEFS}, @code{AC_OUTPUT} creates a header file by substituting the
@c correct values into @code{#define} statements in a template file.
@c @xref{Configuration Headers}, for more information about this kind of
@c output.
@c 
@code{AC_CONFIG_HEADERS}が呼び出された場合,@code{DEFS}を作成する代わり
に,@code{AC_OUTPUT}でテンプレートファイルに@code{#define}文で正しい値を
代入したヘッダファイルを作成します.この種類の出力の詳細は,
@xref{Configuration Headers}.

@defmac AC_DEFINE (@var{variable}, @var{value}, @ovar{description})
@defmacx AC_DEFINE (@var{variable})
@acindex{DEFINE}
@c Define the C preprocessor variable @var{variable} to @var{value} (verbatim).
@c @var{value} should not contain literal newlines, and if you are not
@c using @code{AC_CONFIG_HEADERS} it should not contain any @samp{#}
@c characters, as @command{make} tends to eat them.  To use a shell variable
@c (which you need to do in order to define a value containing the M4 quote
@c characters @samp{[} or @samp{]}), use @code{AC_DEFINE_UNQUOTED} instead.
@c @var{description} is only useful if you are using
@c @code{AC_CONFIG_HEADERS}.  In this case, @var{description} is put into
@c the generated @file{config.h.in} as the comment before the macro define.
@c The following example defines the C preprocessor variable
@c @code{EQUATION} to be the string constant @samp{"$a > $b"}:
@c 
Cプリプロセッサ変数@var{variable}を@var{value}に(そのまま)定義します.
@var{value}は改行のリテラルを含むべきではなく, @code{AC_CONFIG_HEADERS}
を使用しない場合,@command{make}が処理してしまうので,@samp{#}文字を含め
るべきではありません.シェル変数(M4の引用符文字@samp{[}や@samp{]}を含む
定義値が必要なもの)を使用するために,代わりに@code{AC_DEFINE_UNQUOTED}を
使用してください.@var{description}は, @code{AC_CONFIG_HEADER}を使用す
る場合だけ役に立ちます.この場合, @var{description}は,生成された
@file{config.h.in}に,マクロ定義前のコメントとして書き込まれます.以下の
例は,Cプリプロセッサ変数@code{EQUATION} を文字定数@samp{"$a > $b"}と定
義します.

@example
AC_DEFINE(EQUATION, "$a > $b")
@end example

@c If neither @var{value} nor @var{description} are given, then
@c @var{value} defaults to 1 instead of to the empty string.  This is for
@c backwards compatibility with older versions of Autoconf, but this usage
@c is obsolescent and may be withdrawn in future versions of Autoconf.
@c 
@var{value}も@var{description}も与えられていない場合,@var{value}のデフォ
ルトは空の文字列ではなく1になります.これは古いバージョンのAutoconfの下
位互換性のためですが,この使用方法は時代遅れで,Autoconfの将来のバージョ
ンでは無くなるかもしれません.
@end defmac

@defmac AC_DEFINE_UNQUOTED (@var{variable}, @var{value}, @ovar{description})
@defmacx AC_DEFINE_UNQUOTED (@var{variable})
@acindex{DEFINE_UNQUOTED}
@c Like @code{AC_DEFINE}, but three shell expansions are
@c performed---once---on @var{variable} and @var{value}: variable expansion
@c (@samp{$}), command substitution (@samp{`}), and backslash escaping
@c (@samp{\}).  Single and double quote characters in the value have no
@c special meaning.  Use this macro instead of @code{AC_DEFINE} when
@c @var{variable} or @var{value} is a shell variable.  Examples:
@c 
@code{AC_DEFINE}に似ていますが,@var{variable}と@var{value}で,三つのシェ
ル展開が --- 一度に --- 実行されます.変数の展開(@samp{$}),コマンドの置
換(@samp{`}),そしてバックスラッシュエスケープ(@samp{\})です.値の中のシ
ングルクオートとダブルクオートの文字列,特別な意味を持ちません.
@var{variable}や @var{value}がシェル変数のときは,@code{AC_DEFINE}の代わ
りにこのマクロを使用してください.以下がその例です.

@example
AC_DEFINE_UNQUOTED(config_machfile, "$machfile")
AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)
AC_DEFINE_UNQUOTED($ac_tr_hdr)
@end example
@end defmac

@c Due to a syntactical bizarreness of the Bourne shell, do not use
@c semicolons to separate @code{AC_DEFINE} or @code{AC_DEFINE_UNQUOTED}
@c calls from other macro calls or shell code; that can cause syntax errors
@c in the resulting @command{configure} script.  Use either spaces or
@c newlines.  That is, do this:
@c 
Bourneシェルの構文の特異性のため,他のマクロから呼び出しやシェルコードと
@code{AC_DEFINE}や@code{AC_DEFINE_UNQUOTED}を分けるために,セミコロンを
使用しないでください.そうすると,@command{configure}スクリプトの結果と
して構文エラーの原因となります.以下のようにします.

@example
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4) LIBS="$LIBS -lelf"])
@end example

@noindent
@c or this:
@c 
あるいは以下のようにします.

@example
AC_CHECK_HEADER(elf.h,
 [AC_DEFINE(SVR4)
  LIBS="$LIBS -lelf"])
@end example

@noindent
@c instead of this:
@c 
それらは以下の代わりのものです.

@example
AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4); LIBS="$LIBS -lelf"])
@end example

@node Setting Output Variables
@c @section Setting Output Variables
@section 出力変数の設定

@c Another way to record the results of tests is to set @dfn{output
@c variables}, which are shell variables whose values are substituted into
@c files that @command{configure} outputs.  The two macros below create new
@c output variables.  @xref{Preset Output Variables}, for a list of output
@c variables that are always available.
@c 
テストの結果を記録するもう一つの方法は,@dfn{出力変数(output variables)}
を設定することで,それは,@command{configure}が出力したファイルの中に,
シェル変数の値を代入することです.以下の二つのマクロで新しい出力変数を作
ります.利用可能な出力変数のリストは,@xref{Preset Output Variables}.

@defmac AC_SUBST (@var{variable}, @ovar{value})
@acindex{SUBST}
@c Create an output variable from a shell variable.  Make @code{AC_OUTPUT}
@c substitute the variable @var{variable} into output files (typically one
@c or more @file{Makefile}s).  This means that @code{AC_OUTPUT} will
@c replace instances of @samp{@@@var{variable}@@} in input files with the
@c value that the shell variable @var{variable} has when @code{AC_OUTPUT}
@c is called.  This value of @var{variable} should not contain literal
@c newlines.
@c 
シェル変数から出力変数を作成します.@code{AC_OUTPUT}は,出力ファイルの変
数@var{variable}に代入します(通常,一つ以上の@file{Makefile}です).これ
は,@code{AC_OUTPUT}が呼び出されたとき,入力ファイルの
@samp{@@@var{variable}@@}のインスタンスをシェル変数@var{variable}が持つ
値で@code{AC_OUTPUT}が置換することを意味します.@var{variable}のこの値は
改行のリテラルを含むべきではありません.

@c If @var{value} is given, in addition assign it to @var{variable}.
@c 
@var{value}が与えられている場合,さらにそれも@var{variable}に渡されます.
@end defmac

@defmac AC_SUBST_FILE (@var{variable})
@acindex{SUBST_FILE}
@c Another way to create an output variable from a shell variable.  Make
@c @code{AC_OUTPUT} insert (without substitutions) the contents of the file
@c named by shell variable @var{variable} into output files.  This means
@c that @code{AC_OUTPUT} will replace instances of
@c @samp{@@@var{variable}@@} in output files (such as @file{Makefile.in})
@c with the contents of the file that the shell variable @var{variable}
@c names when @code{AC_OUTPUT} is called.  Set the variable to
@c @file{/dev/null} for cases that do not have a file to insert.
@c 
シェル変数から出力ファイルを作成するもう一つの方法です.@code{AC_OUTPUT}
で,シェル変数@var{variable}で名付けられたファイルの内容を出力ファイルに
挿入します(代入ではありません).これは,@code{AC_OUTPUT}が呼び出されたと
き,シェル変数@var{variable}の名前のファイルの内容で,
(@file{Makefile.in})のような出力ファイルの@samp{@@@var{variable}@@}のイ
ンスタンスを,@code{AC_OUTPUT}が置換することを意味します.挿入するファイ
ルがない場合には,変数@file{/dev/null} に設定します.

@c This macro is useful for inserting @file{Makefile} fragments containing
@c special dependencies or other @code{make} directives for particular host
@c or target types into @file{Makefile}s.  For example, @file{configure.ac}
@c could contain:
@c 
このマクロは,@file{Makefile}に特別な依存を含むフラグを挿入したり,特定
のホストやターゲットのための@code{make}ディレクティブを@file{Makefile}に
挿入するとき役に立ちます.例えば,@file{configure.ac} に以下を含ませます.

@example
AC_SUBST_FILE(host_frag)
host_frag=$srcdir/conf/sun4.mh
@end example

@noindent
@c and then a @file{Makefile.in} could contain:
@c 
そして@file{Makefile.in}に以下を含ませます.

@example
@@host_frag@@
@end example
@end defmac

@cindex Previous Variable
@cindex Variable, Precious
@c Running @command{configure} in varying environments can be extremely
@c dangerous.  If for instance the user runs @samp{CC=bizarre-cc
@c ./configure}, then the cache, @file{config.h}, and many other output
@c files will depend upon @command{bizarre-cc} being the C compiler.  If
@c for some reason the user runs @command{./configure} again, or if it is
@c run via @samp{./config.status --recheck}, (@xref{Automatic Remaking},
@c and @pxref{config.status Invocation}), then the configuration can be
@c inconsistent, composed of results depending upon two different
@c compilers.
@c 
異なる環境変数で@command{configure}を実行することは非常に危険です.例え
ば,ユーザが@samp{CC=bizarre-cc ./configure}を実行した場合,キャッシュ,
@file{config.h},そして多くの出力ファイルは,Cコンパイラが
@command{bizarre-cc}だということに依存します.理由があって,ユーザが再び
@command{./configure}を実行した場合や,@samp{./config.status --recheck}
でそれが実行される場合(@xref{Automatic Remaking}.  @pxref{config.status
Invocation}),コンフィグレーションは矛盾し,二つの異なるコンパイラに依存
した結果で構成されます.

@c Environment variables that affect this situation, such as @samp{CC}
@c above, are called @dfn{precious variables}, and can be declared as such
@c by @code{AC_ARG_VAR}.
@c 
上記の@samp{CC}のように,この状況に影響する環境変数は@dfn{貴重な変数
(precious variables)}と命名されていて,@code{AC_ARG_VAR}のようなもので宣
言することが可能です.

@defmac AC_ARG_VAR (@var{variable}, @var{description})
@acindex{ARG_VAR}
@c Declare @var{variable} is a precious variable, and include its
@c @var{description} in the variable section of @samp{./configure --help}.
@c 
@var{variable}を貴重な変数として宣言し,@samp{./configure --help}の可変
部分にその@var{description}を含めます.

@c Being precious means that
@c 
貴重とは,以下のことを意味します.
@itemize @minus
@item
@c @var{variable} is @code{AC_SUBST}'d.
@c 
@var{variable}が@code{AC_SUBST}されていること.

@item
@c The value of @var{variable} when @command{configure} was launched is
@c saved in the cache, including if it was not specified on the command
@c line but via the environment.  Indeed, while @command{configure} can
@c notice the definition of @code{CC} in @samp{./configure CC=bizarre-cc},
@c it is impossible to notice it in @samp{CC=bizarre-cc ./configure},
@c which, unfortunately, is what most users do.
@c 
@command{configure}が開始されたとき,@var{variable}の値は,コマンドライ
ンで指定されておらず環境変数で指定されている場合も含めて,キャッシュに保
存されません.実際,@command{configure}は@samp{./configure
CC=bizarre-cc}の@code{CC}の定義に注目できますが,@samp{CC=bizarre-cc
./configure}のものには注意できません.そして,残念ながらほとんどのユーザ
がそうしています.

@c We emphasize that it is the @emph{initial} value of @var{variable} which
@c is saved, not that found during the execution of @command{configure}.
@c Indeed, specifying @samp{./configure FOO=foo} and letting
@c @samp{./configure} guess that @code{FOO} is @code{foo} can be two very
@c different runs.
@c 
それは,保存される@var{variable}の@emph{初期}値ですが,
@command{configure}の実行中は見つからないことを強調しておきます.実際,
@samp{./configure FOO=foo}と指定することと,@samp{./configure}に
@code{FOO}が@code{foo}だと分からせることは,かなり違った結果になるはずで
す.

@item
@c @var{variable} is checked for consistency between two
@c @command{configure} runs.  For instance:
@c 
@var{variable}は二回の@command{configure}の実行の間の整合性を調査されま
す.例えば,以下のようにします.

@example
$ @kbd{./configure --silent --config-cache}
$ @kbd{CC=cc ./configure --silent --config-cache}
configure: error: `CC' was not set in the previous run
configure: error: changes in the environment can compromise \
the build
configure: error: run `make distclean' and/or \
`rm config.cache' and start over
@end example

@noindent
@c and similarly if the variable is unset, or if its content is changed.
@c 
そして,それは変数を未設定にする場合や,その内容が変更される場合も似たよ
うなものです.


@item
@c @var{variable} is kept during automatic reconfiguration
@c (@pxref{config.status Invocation}) as if it had been passed as a command
@c line argument, including when no cache is used:
@c 
@var{variable}は,自動的な再コンフィグレーションの間,コマンド引数として
渡されているかのように保存され,キャッシュを使用していないときもそうなり
ます.

@example
$ @kbd{CC=/usr/bin/cc ./configure undeclared_var=raboof --silent}
$ @kbd{./config.status --recheck}
running /bin/sh ./configure undeclared_var=raboof --silent \
  CC=/usr/bin/cc  --no-create --no-recursion
@end example
@end itemize
@end defmac


@node Caching Results
@c @section Caching Results
@section 結果のキャッシュ
@cindex Cache

@c To avoid checking for the same features repeatedly in various
@c @command{configure} scripts (or in repeated runs of one script),
@c @command{configure} can optionally save the results of many checks in a
@c @dfn{cache file} (@pxref{Cache Files}).  If a @command{configure} script
@c runs with caching enabled and finds a cache file, it reads the results
@c of previous runs from the cache and avoids rerunning those checks.  As a
@c result, @command{configure} can then run much faster than if it had to
@c perform all of the checks every time.
@c 
様々な@command{configure}スクリプトで,同じ特徴を繰り返し調査する(あるい
は何度も一つのスクリプトを実行する)ことを避けるため,@command{configure}
は,多くの調査結果を@dfn{キャッシュファイル(cache file)}に保存します
(@pxref{Cache Files}).キャッシュ可能な状態で@command{configure} スクリ
プトを実行していてキャッシュファイルが見つかった場合,前回の実行結果を
キャッシュから読み込み,これらの調査の再実行を避けます.結果として,
@command{configure}は,毎回全ての調査を実行するより早くなります.

@defmac AC_CACHE_VAL (@var{cache-id}, @var{commands-to-set-it})
@acindex{CACHE_VAL}
@c Ensure that the results of the check identified by @var{cache-id} are
@c available.  If the results of the check were in the cache file that was
@c read, and @command{configure} was not given the @option{--quiet} or
@c @option{--silent} option, print a message saying that the result was
@c cached; otherwise, run the shell commands @var{commands-to-set-it}.  If
@c the shell commands are run to determine the value, the value will be
@c saved in the cache file just before @command{configure} creates its output
@c files.  @xref{Cache Variable Names}, for how to choose the name of the
@c @var{cache-id} variable.
@c 
@var{cache-id}で識別した調査結果が,利用可能だということを保証します.調
査結果が読み込まれたキャッシュファイルにあり,@command{configure}に, 
@samp{--quiet}や@samp{--silent}オプションが与えられていない場合,結果が
キャッシュされていることを示すメッセージを出力します.それ以外では,シェ
ルコマンド@var{commands-to-set-it}を実行します.シェルコマンドを値を決定
するために実行する場合,@command{configure}が出力ファイルを作成する直前
に,値をキャッシュファイルに保存します.@var{cache-id}変数の名前を選択す
る方法は,@xref{Cache Variable Names}.

@c The @var{commands-to-set-it} @emph{must have no side effects} except for
@c setting the variable @var{cache-id}, see below.
@c 
@var{commands-to-set-it}は,設定された変数@var{cache-id}以外に@emph{副作
用がないはずです}.以下を参照してください.
@end defmac

@defmac AC_CACHE_CHECK (@var{message}, @var{cache-id}, @var{commands-to-set-it})
@acindex{CACHE_CHECK}
@c A wrapper for @code{AC_CACHE_VAL} that takes care of printing the
@c messages.  This macro provides a convenient shorthand for the most
@c common way to use these macros.  It calls @code{AC_MSG_CHECKING} for
@c @var{message}, then @code{AC_CACHE_VAL} with the @var{cache-id} and
@c @var{commands} arguments, and @code{AC_MSG_RESULT} with @var{cache-id}.
@c 
メッセージ出力に注意が必要な@code{AC_CACHE_VAL}のラッパーです.このマク
ロは,これらのマクロを使用する最も一般的な方法に対して,便利な略記法を提
供します.それは,@var{message}に対して@code{AC_MSG_CHECKING}を呼び出し,
その後で,@var{cache-id}と@var{commands}引数を伴う@code{AC_CACHE_VAL}と,
@var{cache-id}を伴う@code{AC_MSG_RESULT}を呼び出します.

@c The @var{commands-to-set-it} @emph{must have no side effects} except for
@c setting the variable @var{cache-id}, see below.
@c 
@var{commands-to-set-it}は,設定された変数@var{cache-id}以外に@emph{副作
用がないはずです}.以下を参照してください.
@end defmac

@c It is very common to find buggy macros using @code{AC_CACHE_VAL} or
@c @code{AC_CACHE_CHECK}, because people are tempted to call
@c @code{AC_DEFINE} in the @var{commands-to-set-it}.  Instead, the code that
@c @emph{follows} the call to @code{AC_CACHE_VAL} should call
@c @code{AC_DEFINE}, by examining the value of the cache variable.  For
@c instance, the following macro is broken:
@c 
@var{commands-to-set-it}で@code{AC_DEFINE}の呼び出しを試みるため,
@code{AC_CACHE_VAL}や@code{AC_CACHE_CHECK}を使用しているバグの多いマクロ
を発見することはよくあります.その代わりに,@code{AC_CACHE_VAL}を呼び出
している@emph{以下の}ようなコードでは,キャッシュ変数の値を調べることで,
@code{AC_DEFINE}を呼び出すべきです.例えば,以下のマクロは駄目です.

@example
@group
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
                [ac_cv_shell_true_works=no
                 true && ac_cv_shell_true_works=yes
                 if test $ac_cv_shell_true_works = yes; then
                   AC_DEFINE([TRUE_WORKS], 1
                             [Define if `true(1)' works properly.])
                 fi])
])
@end group
@end example

@noindent
@c This fails if the cache is enabled: the second time this macro is run,
@c @code{TRUE_WORKS} @emph{will not be defined}.  The proper implementation
@c is:
@c 
これは,キャッシュが利用可能な場合,失敗します.このマクロの二回目の実行
で,@code{TRUE_WORKS}は@emph{定義されていないでしょう}.適切な実装は以下
のようになります.

@example
@group
AC_DEFUN([AC_SHELL_TRUE],
[AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
                [ac_cv_shell_true_works=no
                 true && ac_cv_shell_true_works=yes])
 if test $ac_cv_shell_true_works = yes; then
   AC_DEFINE([TRUE_WORKS], 1
             [Define if `true(1)' works properly.])
 fi
])
@end group
@end example

@c Also, @var{commands-to-set-it} should not print any messages, for
@c example with @code{AC_MSG_CHECKING}; do that before calling
@c @code{AC_CACHE_VAL}, so the messages are printed regardless of whether
@c the results of the check are retrieved from the cache or determined by
@c running the shell commands.
@c 
また,@var{commands-to-set-it}では,例えば@code{AC_MSG_CHECKING}を用いて
メッセージを出力すべきではありません.調査の結果がキャッシュから取り出さ
れるか,シェルコマンドの実行で決定されるかに依存せずメッセージが出力され
るので,@code{AC_CACHE_VAL}の呼び出しの前にしてください.

@menu
* Cache Variable Names::        Shell variables used in caches
* Cache Files::                 Files @command{configure} uses for caching
* Cache Checkpointing::         Loading and saving the cache file
@end menu

@node Cache Variable Names
@c @subsection Cache Variable Names
@subsection キャッシュ変数名
@cindex Cache variable

@c The names of cache variables should have the following format:
@c 
キャッシュ変数の名前は以下の書式にすべきです.

@example
@var{package-prefix}_cv_@var{value-type}_@var{specific-value}_@ovar{additional-options}
@end example

@noindent
@c for example, @samp{ac_cv_header_stat_broken} or
@c @samp{ac_cv_prog_gcc_traditional}.  The parts of the variable name are:
@c 
例えば,@samp{ac_cv_header_stat_broken}や
@samp{ac_cv_prog_gcc_traditional}です.変数名の一部は以下のようにします.

@table @asis
@item @var{package-prefix}
@c An abbreviation for your package or organization; the same prefix you
@c begin local Autoconf macros with, except lowercase by convention.
@c For cache values used by the distributed Autoconf macros, this value is
@c @samp{ac}.
@c 
パッケージや組織の省略です.小文字の慣習以外は,ローカルなAutoconfマクロ
と同じプレフィクスで開始します.配布されているAutoconfマクロで使用される
キャッシュ値に対して,この値は@samp{ac}になっています.

@item @code{_cv_}
@c Indicates that this shell variable is a cache value.  This string
@c @emph{must} be present in the variable name, including the leading
@c underscore.
@c 
シェル変数がキャッシュ値であることを示します.この文字列は,前置されるア
ンダースコアを含め,変数名に存在する@emph{必要があります}.

@item @var{value-type}
@c A convention for classifying cache values, to produce a rational naming
@c system.  The values used in Autoconf are listed in @ref{Macro Names}.
@c 
合理的な命名システムを生成するため,キャッシュ値の分類のための慣習です.
Autoconfで使用する値は,@ref{Macro Names}にリストがあります.

@item @var{specific-value}
@c Which member of the class of cache values this test applies to.
@c For example, which function (@samp{alloca}), program (@samp{gcc}), or
@c output variable (@samp{INSTALL}).
@c 
このテストが適応しているキャッシュ値のクラスのメンバーです.例えば,関数
(@samp{alloca}),プログラム(@samp{gcc}),または,出力変数
(@samp{INSTALL})です.

@item @var{additional-options}
@c Any particular behavior of the specific member that this test applies to.
@c For example, @samp{broken} or @samp{set}.  This part of the name may
@c be omitted if it does not apply.
@c 
このテストが適応している特定のメンバーの特定の動作です.例えば,
@samp{broken}や@samp{set}です.適応されない場合,名前のこの部分は省略さ
れます.
@end table

@c The values assigned to cache variables may not contain newlines.
@c Usually, their values will be Boolean (@samp{yes} or @samp{no}) or the
@c names of files or functions; so this is not an important restriction.
@c 
キャッシュ変数に割り当てられた値には,改行を含めてはなりません.通常,そ
れらの値は真偽値(@samp{yes}や@samp{no}),あるいはファイルや関数の名前で
す.そのため,これは重要な制限ではありません.

@node Cache Files
@c @subsection Cache Files
@subsection キャッシュファイル

@c A cache file is a shell script that caches the results of configure
@c tests run on one system so they can be shared between configure scripts
@c and configure runs.  It is not useful on other systems.  If its contents
@c are invalid for some reason, the user may delete or edit it.
@c 
キャッシュファイルは,コンフィグレーションスクリプトとコンフィグレーショ
ンの実行の間で結果を共有できるように,一つのシステムでコンフィグレーショ
ンテストの結果をキャッシュしているシェルスクリプトです.他のシステムでは
役に立ちません.その内容が,何らかの理由で無効な場合,ユーザは削除したり
編集したりしてもかまいません.

@c By default, @command{configure} uses no cache file (technically, it uses
@c @option{--cache-file=/dev/null}), to avoid problems caused by accidental
@c use of stale cache files.
@c 
デフォルトでは,古いキャッシュファイルの使用で偶然生じる問題を避けるため,
@command{configure}はキャッシュファイルを使用しません(技術的には,
@option{--cache-file=/dev/null}を使用します).

@c To enable caching, @command{configure} accepts @option{--config-cache} (or
@c @option{-C}) to cache results in the file @file{config.cache}.
@c Alternatively, @option{--cache-file=@var{file}} specifies that
@c @var{file} be the cache file.  The cache file is created if it does not
@c exist already.  When @command{configure} calls @command{configure} scripts in
@c subdirectories, it uses the @option{--cache-file} argument so that they
@c share the same cache.  @xref{Subdirectories}, for information on
@c configuring subdirectories with the @code{AC_CONFIG_SUBDIRS} macro.
@c 
キャッシュを利用可能にするために,@command{configure}は結果をファイル
@file{config.cache}にキャッシュする@option{--config-cache}(または,
@option{-C})を受け入れます.代わり方法として,
@option{--cache-file=@var{file}}で@var{file}キャッシュファイルにを指定し
ます.@command{configure}がサブディレクトリの@command{configure}スクリプ
トを呼び出すとき,同じキャッシュファイルを共有するように,
@option{--cache-file}引数を使用します.@code{AC_CONFIG_SUBDIRS}マクロを
用いてサブディレクトリでコンフィグレーションすることの情報は,
@xref{Subdirectories}.

@c @file{config.status} only pays attention to the cache file if it is
@c given the @option{--recheck} option, which makes it rerun
@c @command{configure}.
@c 
@file{config.status}は,@command{configure}を再実行する
@option{--recheck}オプションが与えられている場合のみ,キャッシュファイル
に注意を払います.

@c It is wrong to try to distribute cache files for particular system types.
@c There is too much room for error in doing that, and too much
@c administrative overhead in maintaining them.  For any features that
@c can't be guessed automatically, use the standard method of the canonical
@c system type and linking files (@pxref{Manual Configuration}).
@c 
特定のシステム形式に対してキャッシュファイルを配布しようとすることは間違
いです.そうすることによるエラーに対する機会が非常に多くなり,メンテナン
ス時の管理上のオーバーヘッドが非常に多くなります.自動的に推測できない特
徴に対して,標準的なシステムの形式とリンクファイルの標準的な方法を使用し
てください (@pxref{Manual Configuration}).

@c The site initialization script can specify a site-wide cache file to
@c use, instead of the usual per-program cache.  In this case, the cache
@c file will gradually accumulate information whenever someone runs a new
@c @command{configure} script.  (Running @command{configure} merges the new cache
@c results with the existing cache file.)  This may cause problems,
@c however, if the system configuration (e.g., the installed libraries or
@c compilers) changes and the stale cache file is not deleted.
@c 
サイトの初期化スクリプトで,通常のプログラムごとのキャッシュの代わりに,
使用するサイト全体のキャッシュファイルを指定することが可能になります.こ
の場合,キャッシュファイルは,新しい@command{configure}スクリプトを実行
する度に,情報がどんどん蓄積されていきます.(@command{configure}を実行す
ると,既存のキャッシュファイルを用いて新しい結果をマージします.) しかし,
システムのコンフィグレーションが(例えば,ライブラリやコンパイラをインス
トールされて)変化し,古いキャッシュファイルが削除されない場合,これは問
題になるかもしれません.

@node Cache Checkpointing
@c @subsection Cache Checkpointing
@subsection キャッシュのチェックポイント方法

@c If your configure script, or a macro called from @file{configure.ac}, happens
@c to abort the configure process, it may be useful to checkpoint the cache
@c a few times at key points using @code{AC_CACHE_SAVE}.  Doing so will
@c reduce the amount of time it takes to re-run the configure script with
@c (hopefully) the error that caused the previous abort corrected.
@c 
@command{configure}スクリプトや@file{configure.ac}から呼び出されるマクロ
がコンフィグレーション処理を中断する場合,二,三回@code{AC_CACHE_SAVE}を
使用して,キーポイントでキャッシュのチェックポイントにすることが役に立ち
ます.そうすると,(おそらく)前に異常終了を引き起こしたエラーを修正するこ
とで,@command{configure}スクリプトを再実行する時間が大幅に削減されます.

@c FIXME: Do we really want to document this guy?
@defmac AC_CACHE_LOAD
@acindex{CACHE_LOAD}
@c Loads values from existing cache file, or creates a new cache file if a
@c cache file is not found.  Called automatically from @code{AC_INIT}.
@c 
既存のキャッシュファイルから値をロードしたり,キャッシュファイルがない場
合は新しいキャッシュファイルを作成したりします.自動的に@code{AC_INIT}か
ら呼び出されます.
@end defmac

@defmac AC_CACHE_SAVE
@acindex{CACHE_SAVE}
@c Flushes all cached values to the cache file.  Called automatically from
@c @code{AC_OUTPUT}, but it can be quite useful to call
@c @code{AC_CACHE_SAVE} at key points in @file{configure.ac}.
@c 
キャッシュファイルに全てのキャッシュ値を書き込みます.自動的に 
@code{AC_OUTPUT}から呼び出されますが,@file{configure.ac}のキーポイント
で@code{AC_CACHE_SAVE}を呼び出すことは,大変役に立つはずです.
@end defmac

@c For instance:
@c 
例えば,以下のようにします.

@example
@r{ @dots{} AC_INIT, etc. @dots{}}
@group
# Checks for programs.
AC_PROG_CC
AC_PROG_GCC_TRADITIONAL
@r{ @dots{} more program checks @dots{}}
AC_CACHE_SAVE
@end group

@group
# Checks for libraries.
AC_CHECK_LIB(nsl, gethostbyname)
AC_CHECK_LIB(socket, connect)
@r{ @dots{} more lib checks @dots{}}
AC_CACHE_SAVE
@end group

@group
# Might abort@dots{}
AM_PATH_GTK(1.0.2,, [AC_MSG_ERROR([GTK not in path])])
AM_PATH_GTKMM(0.9.5,, [AC_MSG_ERROR([GTK not in path])])
@end group
@r{ @dots{} AC_OUTPUT, etc. @dots{}}
@end example

@node Printing Messages
@c @section Printing Messages
@section メッセージの出力
@cindex Messages, from @command{configure}

@c @command{configure} scripts need to give users running them several kinds
@c of information.  The following macros print messages in ways appropriate
@c for each kind.  The arguments to all of them get enclosed in shell
@c double quotes, so the shell performs variable and back-quote
@c substitution on them.
@c 
@command{configure}スクリプトは,それらを実行しているユーザに,何種類か
の情報を与える必要があります.以下のマクロは,それぞれの種類に対して適切
な方法でメッセージを出力します.全ての引数は,シェルのダブルクオートで囲
まれているので,シェルは変数とバッククオートの代入を実行します.

@c These macros are all wrappers around the @code{echo} shell command.
@c @command{configure} scripts should rarely need to run @code{echo} directly
@c to print messages for the user.  Using these macros makes it easy to
@c change how and when each kind of message is printed; such changes need
@c only be made to the macro definitions and all of the callers will change
@c automatically.
@c 
これらのマクロは,@code{echo}シェルコマンドを全てラップします.
@command{configure}スクリプトは,ユーザに対してメッセージを出力するため,
直接@code{echo}を実行する必要は滅多にありません.これらのマクロを使用す
ると,出力されるそれぞれのメッセージの種類を,いつでもどのようにでも簡単
に変更できます.そのような変更にはマクロ定義の変更だけが必要で,呼び出し
側は自動的に変更されます.

@c To diagnose static issues, i.e., when @command{autoconf} is run, see
@c @ref{Reporting Messages}.
@c 
静的な問題を診断するため,例えば@command{autoconf}が実行されるときは,
@ref{Reporting Messages}を参照してください.

@defmac AC_MSG_CHECKING (@var{feature-description})
@acindex{MSG_CHECKING}
@c Notify the user that @command{configure} is checking for a particular
@c feature.  This macro prints a message that starts with @samp{checking }
@c and ends with @samp{...} and no newline.  It must be followed by a call
@c to @code{AC_MSG_RESULT} to print the result of the check and the
@c newline.  The @var{feature-description} should be something like
@c @samp{whether the Fortran compiler accepts C++ comments} or @samp{for
@c c89}.
@c 
@command{configure}が調査している特徴を,ユーザに通知します.このマクロ
は@samp{checking }で始まり@samp{...}で終る,改行無しのメッセージを出力し
ます.調査の結果と改行のため,@code{AC_MSG_RESULT}を続けて呼び出す必要が
あります.@var{feature-description}は@samp{FortranコンパイラがC++のコメ
ントを受け入れるかどうか(whether the Fortran compiler accepts C++
comments)}や@samp{c89の調査(for c89)}のようなものです.

@c This macro prints nothing if @command{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@command{configure}が@samp{--quiet}や@samp{--silent}オプションを用いて実
行されている場合,このマクロは何も出力しません.
@end defmac

@defmac AC_MSG_RESULT (@var{result-description})
@acindex{MSG_RESULT}
@c Notify the user of the results of a check.  @var{result-description} is
@c almost always the value of the cache variable for the check, typically
@c @samp{yes}, @samp{no}, or a file name.  This macro should follow a call
@c to @code{AC_MSG_CHECKING}, and the @var{result-description} should be
@c the completion of the message printed by the call to
@c @code{AC_MSG_CHECKING}.
@c 
調査結果をユーザに通知します.@var{result-description}は,ほとんどいつも
調査に対するキャッシュ変数の値で,普通は@samp{yes},@samp{no},またはファ
イル名になります.このマクロは@code{AC_MSG_CHECKING}の呼び出しに続けるべ
きで,@var{result-description}は,@code{AC_MSG_CHECKING}の呼び出しで出力
されるメッセージを完成するものにするべきです.

@c This macro prints nothing if @command{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@command{configure}が@samp{--quiet}や@samp{--silent}オプションで実行され
る場合,このマクロは何も出力しません.
@end defmac

@defmac AC_MSG_NOTICE (@var{message})
@acindex{MSG_NOTICE}
@c Deliver the @var{message} to the user.  It is useful mainly to print a
@c general description of the overall purpose of a group of feature checks,
@c e.g.,
@c 
@var{message}をユーザに伝えます.特徴を調査しているグループ全体の特徴に
ついて,例えば以下のような,一般的な記述を出力するときに主に役に立ちます.

@example
AC_MSG_NOTICE([checking if stack overflow is detectable])
@end example

@c This macro prints nothing if @command{configure} is run with the
@c @option{--quiet} or @option{--silent} option.
@c 
@command{configure}が@samp{--quiet}や@samp{--silent}オプションで実行され
る場合,このマクロは何も出力しません.
@end defmac

@defmac AC_MSG_ERROR (@var{error-description}, @ovar{exit-status})
@acindex{MSG_ERROR}
@c Notify the user of an error that prevents @command{configure} from
@c completing.  This macro prints an error message to the standard error
@c output and exits @command{configure} with @var{exit-status} (1 by default).
@c @var{error-description} should be something like @samp{invalid value
@c $HOME for \$HOME}.
@c 
@command{configure}の完了を妨げるエラーをユーザに通知します.このマクロ
は,エラーメッセージを標準エラー出力に出力し,@command{configure}は
@var{exit-status}(デフォルトは1)で終了します.@var{error-description} は
@samp{\$HOMEに対し$HOMEは無効な値です(invalid value $HOME for \$HOME)}の
ようにすべきです.

@c The @var{error-description} should start with a lower-case letter, and
@c ``cannot'' is preferred to ``can't''.
@c 
@var{error-description}は小文字で開始すべきで,``can't''より``cannot'' 
のほうが好ましいでしょう.
@end defmac

@defmac AC_MSG_FAILURE (@var{error-description}, @ovar{exit-status})
@acindex{MSG_FAILURE}
@c This @code{AC_MSG_ERROR} wrapper notifies the user of an error that
@c prevents @command{configure} from completing @emph{and} that additional
@c details are provided in @file{config.log}.  This is typically used when
@c abnormal results are found during a compilation.
@c 
これは,@code{AC_MSG_ERROR}のラッパーで,@command{configure}が終了するの
を妨げるエラーをユーザに告知し,@emph{そして}詳細を@file{config.log} に
追加します.これは通常,コンパイル時に異常な結果が見つかったときに使用さ
れます.
@end defmac

@defmac AC_MSG_WARN (@var{problem-description})
@acindex{MSG_WARN}
@c Notify the @command{configure} user of a possible problem.  This macro
@c prints the message to the standard error output; @command{configure}
@c continues running afterward, so macros that call @code{AC_MSG_WARN} should
@c provide a default (back-up) behavior for the situations they warn about.
@c @var{problem-description} should be something like @samp{ln -s seems to
@c make hard links}.
@c 
可能性のある問題を@command{configure}を実行しているユーザに通知します.
このマクロは,標準エラー出力にメッセージを出力します.
@command{configure}はその後も実行を続けるので,@code{AC_MSG_WARN}を呼び
出すマクロでは,警告するような状態に対してデフォルト(バックアップ)の動作
を提供すべきです. @var{problem-description}は@samp{ln -s はハードリンク
されます(ln -s seems to make hard links)}のようなものにすべきです.
@end defmac



@c ====================================================== Programming in M4.

@node Programming in M4
@c @chapter Programming in M4
@chapter M4でのプログラミング

@c Autoconf is written on top of two layers: @dfn{M4sugar}, which provides
@c convenient macros for pure M4 programming, and @dfn{M4sh}, which
@c provides macros dedicated to shell script generation.
@c 
Autoconfは,二つのレイヤーのトップに書かれています.それは,純粋なM4プロ
グラムで便利なマクロを提供している@dfn{M4sugar}と,シェルスクリプトの生
成に専念するマクロを提供する@dfn{M4sh}です.

@c As of this version of Autoconf, these two layers are still experimental,
@c and their interface might change in the future.  As a matter of fact,
@c @emph{anything that is not documented must not be used}.
@c 
このバージョンのAutoconfでは,二つのレイヤーはまだ実験段階で,そのインター
フェースは将来変更される可能性があります.実際問題,@emph{文章化されてい
ないものは使用しないでください}.

@menu
* M4 Quotation::                Protecting macros from unwanted expansion
* Using autom4te::              The Autoconf executables backbone
* Programming in M4sugar::      Convenient pure M4 macros
* Programming in M4sh::         Common shell Constructs
@end menu

@node M4 Quotation
@c @section M4 Quotation
@section M4の引用符
@cindex quotation

@c FIXME: Grmph, yet another quoting myth: quotation has *never*
@c prevented `expansion' of $1.  Unless it refers to the expansion
@c of the value of $1?  Anyway, we need a rewrite here@enddots{}

@c The most common problem with existing macros is an improper quotation.
@c This section, which users of Autoconf can skip, but which macro writers
@c @emph{must} read, first justifies the quotation scheme that was chosen
@c for Autoconf and then ends with a rule of thumb.  Understanding the
@c former helps one to follow the latter.
@c 
既存のマクロの最も一般的な問題は,不適当な引用符です.このセクションでは,
Autoconfのユーザは飛ばすことができますが,マクロを書く人は読む@emph{必要
があり},最初にAutoconfで採択された引用符を利用する方法を正当化し,最後
に経験則を述べます.前者を理解すると後者で役立ちます.

@menu
* Active Characters::           Characters that change the behavior of M4
* One Macro Call::              Quotation and one macro call
* Quotation and Nested Macros::  Macros calling macros
* Changequote is Evil::         Worse than INTERCAL: M4 + changequote
* Quadrigraphs::                Another way to escape special characters
* Quotation Rule Of Thumb::     One parenthesis, one quote
@end menu

@node Active Characters
@c @subsection Active Characters
@subsection アクティブな文字

@c To fully understand where proper quotation is important, you first need
@c to know what the special characters are in Autoconf: @samp{#} introduces
@c a comment inside which no macro expansion is performed, @samp{,}
@c separates arguments, @samp{[} and @samp{]} are the quotes themselves,
@c and finally @samp{(} and @samp{)} (which M4 tries to match by
@c pairs).
@c 
適切な引用符の重要性を完全に理解するため,最初にAutoconfでの特殊な文字が
何かを知る必要があります.@samp{#}はマクロ展開が実行されない内部コメント
の導入で,@samp{,}は引数のセパレータ,@samp{[}と@samp{]}はそれらの引用符,
そして最後は,(M4が対の一致を試みる)@samp{(}と@samp{)}です.

@c In order to understand the delicate case of macro calls, we first have
@c to present some obvious failures.  Below they are ``obvious-ified'',
@c but when you find them in real life, they are usually in disguise.
@c 
マクロ呼び出しの微妙な状況を理解するために,最初に明らかな失敗を紹介しな
ければならないでしょう.以下で``明確にされ''ていて,実生活でも見つかるで
しょうが,それらは通常ごまかしです.

@c Comments, introduced by a hash and running up to the newline, are opaque
@c tokens to the top level: active characters are turned off, and there is
@c no macro expansion:
@c 
ハッシュと改行まで実行することで導入されるコメントは,トップレベルへの不
明瞭なトークンです.アクティブな文字はそうではなくなり,マクロの展開もあ
りません.

@example
# define([def], ine)
@result{}# define([def], ine)
@end example

@c Each time there can be a macro expansion, there is a quotation
@c expansion, i.e., one level of quotes is stripped:
@c 
マクロの展開があるごとに,引用符も展開されます.すなわち,第一レベルの引
用符は削除されます.

@example
int tab[10];
@result{}int tab10;
[int tab[10];]
@result{}int tab[10];
@end example

@c Without this in mind, the reader will try hopelessly to use her macro
@c @code{array}:
@c 
これを覚えていなければ,読者は絶望しながらもマクロの@code{array}を使用し
てみるでしょう.

@example
define([array], [int tab[10];])
array
@result{}int tab10;
[array]
@result{}array
@end example

@noindent
@c How can you correctly output the intended results@footnote{Using
@c @code{defn}.}?
@c 
期待する結果を正しく出力するにはどうすれば良いでしょうか
@footnote{@code{defn}を使用します.}?


@node One Macro Call
@c @subsection One Macro Call
@subsection 一つのマクロの呼び出し

@c Let's proceed on the interaction between active characters and macros
@c with this small macro, which just returns its first argument:
@c 
さて,アクティブな文字と以下の単に最初の引数を返す小さなマクロを用いたマ
クロで,対話的に進めていきましょう.

@example
define([car], [$1])
@end example

@noindent
@c The two pairs of quotes above are not part of the arguments of
@c @code{define}; rather, they are understood by the top level when it
@c tries to find the arguments of @code{define}.  Therefore, it is
@c equivalent to write:
@c 
上記の二組の引用符は@code{define}の引数の一部ではありません.そうではな
く,@code{define}の引数の検索が試みられるときに,それらはトップレベルで
理解されます.そのため,それは以下のように書くことと等価です.

@example
define(car, $1)
@end example

@noindent
@c But, while it is acceptable for a @file{configure.ac} to avoid unnecessary
@c quotes, it is bad practice for Autoconf macros which must both be more
@c robust and also advocate perfect style.
@c 
しかし,@file{configure.ac}が不必要な引用符を避けることは受け入れてもか
まいませんが,より強固で,完全な形式を提案する必要もあるAutoconfマクロに
とっては悪い慣習です.

@c At the top level, there are only two possibilities: either you
@c quote or you don't:
@c 
トップレベルでは,二つの可能性があります.引用符で囲む,または囲まないで
の二つです.

@example
car(foo, bar, baz)
@result{}foo
[car(foo, bar, baz)]
@result{}car(foo, bar, baz)
@end example

@c Let's pay attention to the special characters:
@c 
特殊文字に注目してみましょう.

@example
car(#)
@error{}EOF in argument list
@end example

@c The closing parenthesis is hidden in the comment; with a hypothetical
@c quoting, the top level understood it this way:
@c 
閉じカッコはコメント内に隠れてしまいます.引用符を推測することで,トップ
レベルでは以下のように理解します.

@example
car([#)]
@end example

@noindent
@c Proper quotation, of course, fixes the problem:
@c 
適切な引用符は,もちろんこの問題を修正します.

@example
car([#])
@result{}#
@end example

@c The reader will easily understand the following examples:
@c 
読者は,以下の例の方が理解しやすいかもしれません.

@example
car(foo, bar)
@result{}foo
car([foo, bar])
@result{}foo, bar
car((foo, bar))
@result{}(foo, bar)
car([(foo], [bar)])
@result{}(foo
car([], [])
@result{}
car([[]], [[]])
@result{}[]
@end example

@c With this in mind, we can explore the cases where macros invoke
@c macros@enddots{}
@c 
これを覚えていると,マクロがマクロを呼び出し,マクロがマクロを呼び出し
@dots{}となっているような状況も調査することが可能です.


@node Quotation and Nested Macros
@c @subsection Quotation and Nested Macros
@subsection 引用符と入れ子状のマクロ

@c The examples below use the following macros:
@c 
これ以降の例では,以下のマクロを使用しています.

@example
define([car], [$1])
define([active], [ACT, IVE])
define([array], [int tab[10]])
@end example

@c Each additional embedded macro call introduces other possible
@c interesting quotations:
@c 
追加の埋め込まれたマクロ呼び出しは,それぞれ興味深い引用符について,その
他の可能性を導き出します.

@example
car(active)
@result{}ACT
car([active])
@result{}ACT, IVE
car([[active]])
@result{}active
@end example

@c In the first case, the top level looks for the arguments of @code{car},
@c and finds @samp{active}.  Because M4 evaluates its arguments
@c before applying the macro, @samp{active} is expanded, which results in:
@c 
最初の状況では,トップレベルでは@code{car}の引数を探し,@samp{active} が
見つかります.M4はマクロを適用する前のその引数と等価なので,
@samp{active}は展開され,結果として以下のようになります.

@example
car(ACT, IVE)
@result{}ACT
@end example

@noindent
@c In the second case, the top level gives @samp{active} as first and only
@c argument of @code{car}, which results in:
@c 
二番目の状況では,トップレベルは@code{car}の最初で唯一の引数として
@samp{active}を与えるので,結果として以下のようになります.

@example
active
@result{}ACT, IVE
@end example

@noindent
@c i.e., the argument is evaluated @emph{after} the macro that invokes it.
@c In the third case, @code{car} receives @samp{[active]}, which results in:
@c 
すなわち,マクロが呼び出された@emph{後で},引数が評価されます.三番目の
状況では,@code{car}は@samp{[active]}を受けとり,結果として以下のように
なります.

@example
[active]
@result{}active
@end example

@noindent
@c exactly as we already saw above.
@c 
上記で見たものと同じですね.

@c The example above, applied to a more realistic example, gives:
@c 
より現実的な例を適用して,上記の例に与えてみましょう.

@example
car(int tab[10];)
@result{}int tab10;
car([int tab[10];])
@result{}int tab10;
car([[int tab[10];]])
@result{}int tab[10];
@end example

@noindent
@c Huh?  The first case is easily understood, but why is the second wrong,
@c and the third right?  To understand that, you must know that after
@c M4 expands a macro, the resulting text is immediately subjected
@c to macro expansion and quote removal.  This means that the quote removal
@c occurs twice---first before the argument is passed to the @code{car}
@c macro, and second after the @code{car} macro expands to the first
@c argument.
@c 
う〜ん? 最初の状況は簡単に理解できますが,なぜ二番目が間違っていて,三
番目は正しいのでしょうか?それを理解するために,M4がマクロを展開した後,
結果として生じるテキストがすぐにマクロを展開に従って引用符が取り除かれる
ことを知っておく必要があります.これは,引用符の削除が二回行なわれること
を意味します --- 最初に引数として@code{car}マクロに渡されるとき,二回目
は@code{car}マクロが最初の引数を展開するときです.

@c As the author of the Autoconf macro @code{car}, you then consider it to
@c be incorrect that your users have to double-quote the arguments of
@c @code{car}, so you ``fix'' your macro.  Let's call it @code{qar} for
@c quoted car:
@c 
Autoconfマクロ@code{car}の作者として,ユーザが@code{car}の引数を二重の引
用符にする必要があることは間違っていると考えるようにし,マクロを@emph{修
正}してください.引用符で囲まれている@code{car}に対して,それを
@code{qar}と呼ぶことにしましょう.

@example
define([qar], [[$1]])
@end example

@noindent
@c and check that @code{qar} is properly fixed:
@c 
そして,@code{qar}が適切に修正されていることを調査してみます.

@example
qar([int tab[10];])
@result{}int tab[10];
@end example

@noindent
@c Ahhh!  That's much better.
@c 
あぁ!そうした方が良さそうですね.

@c But note what you've done: now that the arguments are literal strings,
@c if the user wants to use the results of expansions as arguments, she has
@c to use an @emph{unquoted} macro call:
@c 
しかし,自分が行なったことに注意してください.現在その引数はリテラル文字
列ですが,引数を展開した結果をユーザが使用したい場合,@emph{引用符で囲ま
れていない}マクロを使用する必要があります.

@example
qar(active)
@result{}ACT
@end example

@noindent
@c where she wanted to reproduce what she used to do with @code{car}:
@c 
@code{car}を用いて行なっていたことを再生成したい状況を考えます.

@example
car([active])
@result{}ACT, IVE
@end example

@noindent
@c Worse yet: she wants to use a macro that produces a set of @code{cpp}
@c macros:
@c 
まだ駄目ですね.@code{cpp}マクロの組を生成するマクロを使用したい状況を考
えてみましょう.

@example
define([my_includes], [#include <stdio.h>])
car([my_includes])
@result{}#include <stdio.h>
qar(my_includes)
@error{}EOF in argument list
@end example

@c This macro, @code{qar}, because it double quotes its arguments, forces
@c its users to leave their macro calls unquoted, which is dangerous.
@c Commas and other active symbols are interpreted by M4 before
@c they are given to the macro, often not in the way the users expect.
@c Also, because @code{qar} behaves differently from the other macros,
@c it's an exception that should be avoided in Autoconf.
@c 
このマクロ@code{qar}は,引数を二重に引用符で囲むので,ユーザはマクロの呼
び出しを引用符で囲まないままにしておくよう強制されるので,それは危険です.
カンマとその他のアクティブなシンボルは,マクロに渡される前にM4で解釈され,
それはユーザが期待している手法ではないことが多いものです.また,
@code{qar}は,他のマクロとは異なる動作をするので,Autoconfでは避けるべき
例外になります.

@node Changequote is Evil
@c @subsection @code{changequote} is Evil
@subsection @code{changequote}の弊害

@c The temptation is often high to bypass proper quotation, in particular
@c when it's late at night.  Then, many experienced Autoconf hackers
@c finally surrender to the dark side of the force and use the ultimate
@c weapon: @code{changequote}.
@c 
特に夜も遅くなると,適切な引用符をバイパスする誘惑が大きくなることも多い
ものです.そして,経験豊富なAutoconfのハッカーの多くは,最終的に暗黒の力
に支配され,最終兵器を持ち出します.それは@code{changequote}です.

@c The M4 builtin @code{changequote} belongs to a set of primitives that
@c allow one to adjust the syntax of the language to adjust it to one's
@c needs.  For instance, by default M4 uses @samp{`} and @samp{'} as
@c quotes, but in the context of shell programming (and actually of most
@c programming languages), that's about the worst choice one can make:
@c because of strings and back-quoted expressions in shell code (such as
@c @samp{'this'} and @samp{`that`}), because of literal characters in usual
@c programming languages (as in @samp{'0'}), there are many unbalanced
@c @samp{`} and @samp{'}.  Proper M4 quotation then becomes a nightmare, if
@c not impossible.  In order to make M4 useful in such a context, its
@c designers have equipped it with @code{changequote}, which makes it
@c possible to choose another pair of quotes.  M4sugar, M4sh, Autoconf, and
@c Autotest all have chosen to use @samp{[} and @samp{]}.  Not especially
@c because they are unlikely characters, but @emph{because they are
@c characters unlikely to be unbalanced}.
@c 
M4組み込みの@code{changequote}は,言語の構文を必要に応じて調整することを
可能にするプリミティブの組に属しています.例えば,M4では引用符としてデフォ
ルトで@samp{`}と@samp{'}を使用しますが,シェルプログラムの文脈(そして,
ほとんどの実際のプログラミング言語)では,それは利用可能なものの中での最
悪の選択です.シェルコードでの(@samp{'this'}と@samp{`that`} のような)文
字列とバッククオートされた式と,通常のプログラミング言語で使用される
(@samp{'0'}のような)リテラル文字のため,多くの対にならない@samp{`}と
@samp{'}が存在します.そのような文脈での厳密なM4の引用符が(変更)不可能な
場合は,悪夢になります.そのような文脈でM4を役立たせるため,それを設計し
た人は別の引用符の組の選択を可能にする@code{changequote}を装備しました.
M4sugar,M4sh,Autoconf,そしてAutotestでは,すべてのものが@samp{[}と
@samp{]}の使用を選択しています.それらが滅多に使用されない文字という理由
だけでなく,@emph{対にならないことも滅多に無い文字という理由もあります}.

@c There are other magic primitives, such as @code{changecom} to specify
@c what syntactic forms are comments (it is common to see
@c @samp{changecom(<!--, -->)} when M4 is used to produce HTML pages),
@c @code{changeword} and @code{changesyntax} to change other syntactic
@c details (such as the character to denote the n-th argument, @samp{$} by
@c default, the parenthesis around arguments etc.).
@c 
構文形式がコメントだということを指定するため(M4がHTMLページを生成するた
めに使用されるとき,@samp{changecom(<!--, -->)}が一般的だと分かるでしょ
う)の@code{changecom}と,それ以外の構文の詳細を変更するための
@code{changeword}と@code{changesyntax}(n番目の引数を示す,デフォルトで
@samp{$}となっている文字や,引数の周りを囲むカッコなど)のような,それ以
外のマジックプリミティブもあります.

@c These primitives are really meant to make M4 more useful for specific
@c domains: they should be considered like command line options:
@c @option{--quotes}, @option{--comments}, @option{--words}, and
@c @code{--syntax}.  Nevertheless, they are implemented as M4 builtins, as
@c it makes M4 libraries self contained (no need for additional options).
@c 
これらのプリミティブは,特定の分野に対してM4がより役に立つようにするため,
本当に意味があるものです.それらはコマンドラインオプションのように考える
べきです.それらは,@option{--quotes},@option{--comments},
@option{--words},そして@code{--syntax}のようなものです.それにもかかわ
らず,M4ライブラリ自身が含まれる(追加のオプションが必要無い)ように,M4の
組み込みとして実装されています.

@c There lies the problem@enddots{}
@c 
そこに問題があります@enddots{}

@sp 1

@c The problem is that it is then tempting to use them in the middle of an
@c M4 script, as opposed to its initialization.  This, if not carefully
@c thought out, can lead to disastrous effects: @emph{you are changing the
@c language in the middle of the execution}.  Changing and restoring the
@c syntax is often not enough: if you happened to invoke macros in between,
@c these macros will be lost, as the current syntax will probably not be
@c the one they were implemented with.
@c 
問題は,M4スクリプトの途中で,その初期化を目的としてそれを使用するときに
発生します.これは,あまり注意していない場合,甚大な影響があるはずです.
@emph{実行の途中で言語を変更しているようなものです}.構文の変更とそれか
らの復帰が十分でないことが多いものです.その間でマクロの呼び出しを行なっ
た場合,現在の構文はおそらくマクロを実装していないので,これらのマクロは
失われることになります.

@c FIXME: I've been looking for a short, real case example, but I
@c lost them all :(


@node Quadrigraphs
@c @subsection Quadrigraphs
@subsection 四文字表記
@cindex quadrigraphs
@cindex @samp{@@S|@@}
@cindex @samp{@@&t@@}
@c Info cannot handle `:' in index entries.
@c @cindex @samp{@@<:@@}
@c @cindex @samp{@@:>@@}
@c @cindex @samp{@@%:@@}

@c When writing an Autoconf macro you may occasionally need to generate
@c special characters that are difficult to express with the standard
@c Autoconf quoting rules.  For example, you may need to output the regular
@c expression @samp{[^[]}, which matches any character other than @samp{[}.
@c This expression contains unbalanced brackets so it cannot be put easily
@c into an M4 macro.
@c 
Autoconfマクロを書いているとき,標準的なAutoconfの引用符の規則で表現する
ことが難しい,特殊な文字を生成する必要が生じるかもしれません.例えば,
@samp{[}以外の全ての文字に一致する正規表現@samp{[^[]}を出力する必要があ
るかもしれません.この表現は,対称ではないカッコを含んでいるので,M4 マ
クロの中に簡単に書き込むことはできません.

@c You can work around this problem by using one of the following
@c @dfn{quadrigraphs}:
@c 
以下の@dfn{四文字表記(quadrigraph)}の一つを使用することで,この問題を解
決することが可能です.

@table @samp
@item @@<:@@
@samp{[}
@item @@:>@@
@samp{]}
@item @@S|@@
@samp{$}
@item @@%:@@
@samp{#}
@item @@&t@@
@c Expands to nothing.
@c 
何にも展開されません.
@end table

@c Quadrigraphs are replaced at a late stage of the translation process,
@c after @command{m4} is run, so they do not get in the way of M4 quoting.
@c For example, the string @samp{^@@<:@@}, independently of its quotation,
@c will appear as @samp{^[} in the output.
@c 
四文字表記は,@command{m4}が実行された後,変換処理の終りの段階で置換され
るので,M4の引用符の邪魔になりません.例えば,文字列@samp{[^@@<:@@]} は,
その引用符で囲まれている状態に依存せず,出力では@samp{[^[]}として現れま
す.

@c The empty quadrigraph can be used:
@c 
空の四文字表記を使用することも可能です.

@itemize @minus
@c @item to mark trailing spaces explicitly
@item 明示的に後置されるスペースに印を付けるため

@c Trailing spaces are smashed by @command{autom4te}.  This is a feature.
@c 
後置される空白は@command{autom4te}で壊されます.これは仕様です.

@c @item to produce other quadrigraphs
@item その他の四文字表記を生成するため

@c For instance @samp{@@<@@&t@@:@@} produces @samp{@@<:@@}.
@c 
例えば,@samp{@@<@@&t@@:@@}は@samp{@@<:@@}を生成します.

@c @item to escape @emph{occurrences} of forbidden patterns
@item 禁止されているパターンの@emph{発生}をエスケープするため

@c For instance you might want to mention @code{AC_FOO} in a comment, while
@c still being sure that @command{autom4te} will still catch unexpanded
@c @samp{AC_*}.  Then write @samp{AC@@&t@@_FOO}.
@c 
例えば,@code{AC_FOO}をコメントとして書きたいかもしれませんが,
@command{autom4te}は展開されていない@samp{AC_*}を確実に受けとります.そ
のときは,@samp{AC@@&t@@_FOO}と書いてください.
@end itemize

@c The name @samp{@@&t@@} was suggested by Paul Eggert:
@c 
@samp{@@&t@@}の名前はPaul Eggertの提案です.

@quotation
@c I should give some credit to the @samp{@@&t@@} pun.  The @samp{&} is my
@c own invention, but the @samp{t} came from the source code of the
@c @sc{algol68c} compiler, written by Steve Bourne (of Bourne shell fame),
@c and which used @samp{mt} to denote the empty string.  In C, it would
@c have looked like something like:
@c 
私は,@samp{@@&t@@}の語呂合わせに称賛を与えるべきでしょう.@samp{&}は私
自身の発明ですが,@samp{t}はSteve Bourne(Bourneシェルで有名です)によって
書かれた@sc{algol68c}コンパイラのソースコードが由来となっていて,そこで
は空の文字列を示すために@samp{mt}を使用しています.Cでは,それは以下のよ
うなものになるでしょう.

@example
char const mt[] = "";
@end example

@noindent
@c but of course the source code was written in Algol 68.
@c 
しかし,ソースコードは当然Algol 68で書かれています.

@c I don't know where he got @samp{mt} from: it could have been his own
@c invention, and I suppose it could have been a common pun around the
@c Cambridge University computer lab at the time.
@c 
彼が@samp{mt}を得た場所を,私は知りません.それは独自の発明かもしれませ
んし,当時のケンブリッジ大学のコンピュータ研究所で,一般的な語呂合わせだっ
たのかもしれません.
@end quotation

@node Quotation Rule Of Thumb
@c @subsection Quotation Rule Of Thumb
@subsection 引用符の経験則

@c To conclude, the quotation rule of thumb is:
@c 
終りに引用符の経験則を述べます.

@c @center @emph{One pair of quotes per pair of parentheses.}
@center @emph{カッコの組ごとに引用符の組}

@c Never over-quote, never under-quote, in particular in the definition of
@c macros.  In the few places where the macros need to use brackets
@c (usually in C program text or regular expressions), properly quote
@c @emph{the arguments}!
@c 
特にマクロ定義では,多過ぎる引用符もだめ,少な過ぎる引用符も駄目です.カッ
コを使用する必要があるマクロ(通常Cのプログラム文や正規表現の中)では,適
切に@emph{引数を}引用符で囲んでください!

@c It is common to read Autoconf programs with snippets like:
@c 
以下のような断片を用いたAutoconfプログラムを読むことはよくあります.

@example
AC_TRY_LINK(
changequote(<<, >>)dnl
<<#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif>>,
changequote([, ])dnl
[atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
@end example

@noindent
@c which is incredibly useless since @code{AC_TRY_LINK} is @emph{already}
@c double quoting, so you just need:
@c 
それは,@code{AC_TRY_LINK}は@emph{すでに}二重に引用符で囲まれているので, 
全く無駄になり,実際は以下のようにするだけで十分です.

@example
AC_TRY_LINK(
[#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif],
            [atoi (*tzname);],
            [ac_cv_var_tzname=yes],
            [ac_cv_var_tzname=no])
@end example

@noindent
@c The M4-fluent reader will note that these two examples are rigorously
@c equivalent, since M4 swallows both the @samp{changequote(<<, >>)}
@c and @samp{<<} @samp{>>} when it @dfn{collects} the arguments: these
@c quotes are not part of the arguments!
@c 
M4に親しんでいる読者は,M4が引数を@dfn{まとめる(collect)}ときに
@samp{changequote(<<, >>)}と@samp{<<} @samp{>>}の両方を飲み込むので,こ
れら二つの例が厳密に等価であることに注意してください.これらの引用符は引
数の一部ではありません!

@c Simplified, the example above is just doing this:
@c 
単純にしてみると,上記の例は以下のようになります.

@example
changequote(<<, >>)dnl
<<[]>>
changequote([, ])dnl
@end example

@noindent
@c instead of simply:
@c 
その代わりに単純に以下のようにします.

@example
[[]]
@end example


@c With macros that do not double quote their arguments (which is the
@c rule), double-quote the (risky) literals:
@c 
引数を(規則で)二重に引用符で囲まないマクロを用いると,二重の引用は(危険
な)文字列になります.

@example
AC_LINK_IFELSE([AC_LANG_PROGRAM(
[[#include <time.h>
#ifndef tzname /* For SGI.  */
extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
#endif]],
                                [atoi (*tzname);])],
               [ac_cv_var_tzname=yes],
               [ac_cv_var_tzname=no])
@end example

@c @xref{Quadrigraphs}, for what to do if you run into a hopeless case
@c where quoting does not suffice.
@c 
引用符が十分でない状況で望みがなくなった場合どうすればいいかということに
ついては,@xref{Quadrigraphs}.

@c When you create a @command{configure} script using newly written macros,
@c examine it carefully to check whether you need to add more quotes in
@c your macros.  If one or more words have disappeared in the M4
@c output, you need more quotes.  When in doubt, quote.
@c 
新たに書かれたマクロを用いて@command{configure}スクリプトを作成するとき,
マクロにより多くの引用符を加える必要があるかどうかの調査は,気を付けて吟
味してください.一つ以上の単語がM4の出力に現れない場合,より多くの引用符
が必要になります.迷ったときは引用符です.

@c However, it's also possible to put on too many layers of quotes.  If
@c this happens, the resulting @command{configure} script will contain
@c unexpanded macros.  The @command{autoconf} program checks for this problem
@c by doing @samp{grep AC_ configure}.
@c 
しかし,引用符のレイヤーが多過ぎる可能性もあります.この場合は,結果とし
て得られる@command{configure}スクリプトは,展開されていないマクロが含ま
れているでしょう.@command{autoconf}プログラムは,@samp{grep AC_
configure}を行なうことでこの問題を調査します.


@c ---------------------------------------- Using autom4te

@node Using autom4te
@c @section Using @command{autom4te}
@section @command{autom4te}の呼び出し

@c The Autoconf suite, including M4sugar, M4sh, and Autotest, in addition
@c to Autoconf per se, heavily rely on M4.  All these different uses
@c revealed common needs factored into a layer over @command{m4}:
@c @command{autom4te}@footnote{
@c @c
@c Yet another great name from Lars J. Aas.
@c @c
@c }.
@c 
Autoconf自身のものに加え,M4sugar,M4sh,そしてAutotestを含めた
Autoconfスイートは,M4にかなり依存しています.使い方が異なるこれらはす
べて,@command{m4}の上のレイヤーに集約したいという共通の要求を具体化し
ました.それは@command{autom4te}@footnote{
@c
Lars J. Aasのもう一つの偉大な名前です.
@c
}です.

@c @command{autom4te} is a preprocessor that is like @command{m4}.
@c It supports M4 extensions designed for use in tools like Autoconf.
@c 
@command{autom4te}は,@command{m4}のようなプリプロセッサです.それは
Autoconfのようなツールで使用するために設計された,M4の拡張をサポートして
います.

@menu
* autom4te Invocation::         A @acronym{GNU} M4 wrapper
* Customizing autom4te::        Customizing the Autoconf package
@end menu

@node autom4te Invocation
@c @subsection Invoking @command{autom4te}
@subsection @command{autom4te}の呼び出し

@c The command line arguments are modeled after M4's:
@c 
コマンドライン引数は,M4のものをモデルにしています.

@example
autom4te @var{options} @var{files}
@end example

@noindent
@c where the @var{files} are directly passed to @command{m4}.  In addition
@c to the regular expansion, it handles the replacement of the quadrigraphs
@c (@pxref{Quadrigraphs}), and of @samp{__oline__}, the current line in the
@c output.  It supports an extended syntax for the @var{files}:
@c 
ここでの@var{files}は,直接@command{m4}に渡すものです.正規の展開に加え,
それは四文字表記(@pxref{Quadrigraphs})と,出力の現在の行の
@samp{__oline__}の置換を処理します.それは,@var{files}に対して拡張され
た構文もサポートしています.

@table @file
@item @var{file}.m4f
@c This file is an M4 frozen file.  Note that @emph{all the previous files
@c are ignored}.  See the option @option{--melt} for the rationale.
@c 
このファイルは,M4を固めたファイルです.@emph{以前のファイルはすべて無視
されることに}注意してください.正当性については,オプション
@option{--melt}を参照してください.

@item @var{file}?
@c If found in the library path, the @var{file} is included for expansion,
@c otherwise it is ignored instead of triggering a failure.
@c 
ライブラリパスで見つかった場合,@var{file}は展開に含められ,それ以外では,
異常終了を発生する代わりに無視されます.
@end table

@sp 1

@c Of course, it supports the Autoconf common subset of options:
@c 
もちろん,それはAutoconfの一般的のオプションのサブセットをサポートしてい
ます.

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力し,終了します.

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力し,終了します.

@item --verbose
@itemx -v
@c Report processing steps.
@c 
処理しているステップを報告します.

@item --debug
@itemx -d
@c Don't remove the temporary files and be even more verbose.
@c 
一時的なファイルを削除せず,さらに冗長になります.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Also look for input files in @var{dir}.  Multiple invocations
@c accumulate.
@c 
入力ファイルを@var{dir}でも探します.複数回の呼び出しは累積されます.

@item --output=@var{file}
@itemx -o @var{file}
@c Save output (script or trace) to @var{file}.  The file @option{-} stands
@c for the standard output.
@c 
(スクリプトやトレースの)出力を@var{file}に保存します.ファイル@option{-}
は標準出力を意味します.
@end table

@sp 1

@c As an extension of @command{m4}, it includes the following options:
@c 
@command{m4}の拡張として,それらは以下のオプションが含まれます.

@table @option
@item --warnings=@var{category}
@itemx -W @var{category}
@evindex WARNINGS
@c FIXME: Point to the M4sugar macros, not Autoconf's.
@c 
@c Report the warnings related to @var{category} (which can actually be a
@c comma separated list).  @xref{Reporting Messages}, macro
@c @code{AC_DIAGNOSE}, for a comprehensive list of categories.  Special
@c values include:
@c 
(実際にはカンマで分けられたリストになっている)@var{category}に関連する警
告を報告します.カテゴリの包括的なリストは,マクロ@code{AC_DIAGNOSE} の
@xref{Reporting Messages}.  以下の特殊な値が含まれます.

@table @samp
@item all
@c report all the warnings
@c 
すべての警告を報告します.

@item none
@c report none
@c 
何も報告しません.

@item error
@c treats warnings as errors
@c 
警告をエラーとして扱います.

@item no-@var{category}
@c disable warnings falling into @var{category}
@c 
@var{category}に分類される警告を利用不可能にします.
@end table

@c Warnings about @samp{syntax} are enabled by default, and the environment
@c variable @code{WARNINGS}, a comma separated list of categories, is
@c honored.  @command{autom4te -W @var{category}} will actually
@c behave as if you had run:
@c 
@samp{syntax}に関する警告は,デフォルトで利用可能で,カテゴリのカンマで
分離されたリストの環境変数@code{WARNINGS}は尊重されます.
@command{autom4te -W @var{category}}は,実際に悪いことを実行したかのよう
に動作します.

@example
autom4te --warnings=syntax,$WARNINGS,@var{category}
@end example

@noindent
@c If you want to disable @command{autom4te}'s defaults and
@c @code{WARNINGS}, but (for example) enable the warnings about obsolete
@c constructs, you would use @option{-W none,obsolete}.
@c 
@command{autom4te}のデフォルトと@code{WARNINGS}を利用不可能にしたいけれ
ども,(例えば)時代遅れの構成物に関する警告は利用可能にしたい場合,
@option{-W none,obsolete}を使用するべきでしょう.

@cindex Back trace
@cindex Macro invocation stack
@c @command{autom4te} displays a back trace for errors, but not for
@c warnings; if you want them, just pass @option{-W error}.  For instance,
@c on this @file{configure.ac}:
@c 
@command{autom4te}はエラーのバックトレースを表示しますが,警告は表示しま
せん.警告も表示したい場合,@option{-W error}を渡してください.例えば以
下のような@file{configure.ac}を考えます.

@example
AC_DEFUN([INNER],
[AC_RUN_IFELSE([AC_LANG_PROGRAM([exit (0)])])])

AC_DEFUN([OUTER],
[INNER])

AC_INIT
OUTER
@end example

@noindent
@c you get:
@c 
以下のようになるでしょう.

@example
$ @kbd{autom4te -l autoconf -Wcross}
configure.ac:8: warning: AC_RUN_IFELSE called without default \
to allow cross compiling
$ @kbd{autom4te -l autoconf -Wcross,error -f}
configure.ac:8: error: AC_RUN_IFELSE called without default \
to allow cross compiling
acgeneral.m4:3044: AC_RUN_IFELSE is expanded from...
configure.ac:2: INNER is expanded from...
configure.ac:5: OUTER is expanded from...
configure.ac:8: the top level
@end example


@item --melt
@itemx -m
@c Do not use frozen files.  Any argument @code{@var{file}.m4f} will be
@c replaced with @code{@var{file}.m4}.  This helps tracing the macros which
@c are executed only when the files are frozen, typically
@c @code{m4_define}.  For instance, running:
@c 
固められたファイルを使用しません.すべての引数@code{@var{file}.m4f}は
@code{@var{file}.m4}で置換されます.これは,ファイルが固められているとき
だけに実行されるマクロ,通常は@code{m4_define}の追跡で役に立ちます.例え
ば以下のように実行します.

@example
autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
@end example

@noindent
@c is roughly equivalent to running:
@c 
これは以下を実行したのと等価です.

@example
m4 1.m4 2.m4 3.m4 4.m4 input.m4
@end example

@noindent
@c while
@c 
一方,以下を実行した場合を考えます.

@example
autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
@end example

@noindent
@c is equivalent to:
@c 
これは以下と等価です.

@example
m4 --reload-state=4.m4f input.m4
@end example

@item --freeze
@itemx -f
@c Produce a frozen state file.  @command{autom4te} freezing is stricter
@c than M4's: it must produce no warnings, and no output other than empty
@c lines (a line with whitespace is @emph{not} empty) and comments
@c (starting with @samp{#}).  Please, note that contrary to @command{m4},
@c this options takes no argument:
@c 
固まった状態のファイルを生成します.@command{autom4te}の固め方は,M4より
厳密です.警告を生成させたり,空の行(空白行は空の行では@emph{ありません}) 
とコメント(@samp{#}で始まります)以外の出力を生成してはいけません.
@command{m4}とは異なり,このオプションは以下のように引数をとらないことに
注意してください.

@example
autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
@end example

@noindent
@c corresponds to
@c 
これは以下に対応します.

@example
m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
@end example

@item --mode=@var{octal-mode}
@itemx -m @var{octal-mode}
@c Set the mode of the non-traces output to @var{octal-mode}; by default
@c @samp{0666}.
@c 
@var{octal-mode}にトレース出力以外のモードを設定します.デフォルトは
@samp{0666}です.
@end table

@sp 1

@cindex @file{autom4te.cache}
@c As another additional feature over @command{m4}, @command{autom4te}
@c caches its results.  @acronym{GNU} M4 is able to produce a regular
@c output and traces at the same time.  Traces are heavily used in the
@c @acronym{GNU} Build System: @command{autoheader} uses them to build
@c @file{config.h.in}, @command{autoreconf} to determine what
@c @acronym{GNU} Build System components are used, @command{automake} to
@c ``parse'' @file{configure.ac} etc.  To save the long runs of
@c @command{m4}, traces are cached while performing regular expansion,
@c and conversely.  This cache is (actually, the caches are) stored in
@c the directory @file{autom4te.cache}.  @emph{It can safely be removed}
@c at any moment (especially if for some reason @command{autom4te}
@c considers it is trashed).
@c 
それ以外の@command{m4}上の追加機能として,@command{autom4te}がその結果を
キャッシュするというものがあります.@acronym{GNU} M4は,標準出力を生成す
ると同時にトレースすることが可能です.トレースは@acronym{GNU}ビルドシス
テムで重点的に使用されています.@command{autoheader}は,
@file{config.h.in}をビルドするために,@command{autoreconf}は,使用されて
いる@acronym{GNU}ビルドシステムの構成要素を決定するために,
@command{automake}は@file{configure.ac}をパースするため等として使用して
います.@command{m4}の長い実行結果を保存するために,通常の展開を実行して
いる間,トレースはキャッシュされます@footnote{訳注:原文にある``and
conversely''が何を指すのか分かりません.}.このキャッシュ(実際には複数あ
る) は,ディレクトリ@file{autom4te.cache}に保存されます.いつでも
@emph{削除して大丈夫です}(特に,理由があれば@command{autom4te}はそれが捨
てられてしまったと考えます).

@table @option
@item --cache=@var{directory}
@itemx -C @var{directory}
@c Specify the name of the directory where the result should be cached.
@c Passing an empty value disables caching.  Be sure to pass a relative
@c path name, as for the time being, global caches are not supported.
@c 
結果をキャッシュするディレクトリの名前を指定します.空の値を渡すことで
キャッシュが利用不可能になります.グローバルキャッシュがサポートされると
きまで,相対パスで渡してください.

@item --no-cache
@c Don't cache the results.
@c 
結果をキャッシュしません.

@item --force
@itemx -f
@c If a cache is used, consider it obsolete (but update it anyway).
@c 
キャッシュが使用されている場合,時代遅れだと考えません(しかし,それはい
ずれにせよ更新されます).
@end table

@sp 1

@c Because traces are so important to the @acronym{GNU} Build System,
@c @command{autom4te} provides high level tracing features as compared to
@c M4, and helps exploiting the cache:
@c 
トレースは@acronym{GNU}ビルドシステムに重きをおいて実装されているので,
@command{autom4te}は,M4と比較して高度なトレース機能を提供していて,キャッ
シュを利用する手助けとなります.

@table @option
@item --trace=@var{macro}[:@var{format}]
@itemx -t @var{macro}[:@var{format}]
@c Trace the invocations of @var{macro} according to the @var{format}.
@c Multiple @option{--trace} arguments can be used to list several macros.
@c Multiple @option{--trace} arguments for a single macro are not
@c cumulative; instead, you should just make @var{format} as long as
@c needed.
@c 
@var{format}によって,@var{macro}の呼び出しをトレースします.複数の
@option{--trace}引数は,いくつかのマクロリストを使用するために使用可能で
す.単一マクロに対する複数の@option{--trace}引数は累積されません.その代
わりに,必要な長さの@var{format}にすべきです.

@c The @var{format} is a regular string, with newlines if desired, and
@c several special escape codes.  It defaults to @samp{$f:$l:$n:$%}.  It can
@c use the following special escapes:
@c 
@var{format}は,必要なときは改行を用いていて,特殊なエスケープコードをも
用いている通常の文字列です.デフォルトは@samp{$f:$l:$n:$%}です.以下の特
殊なエスケープ文字が使用可能です.

@table @samp
@item $$
@c The character @samp{$}.
@c 
文字@samp{$}.

@item $f
@c The filename from which @var{macro} is called.
@c 
@var{macro}が呼び出されているファイル名.

@item $l
@c The line number from which @var{macro} is called.
@c 
@var{macro}が呼び出されている行番号.

@item $d
@c The depth of the @var{macro} call.  This is an M4 technical detail that
@c you probably don't want to know about.
@c 
@var{macro}呼び出しの深さ.これはM4の技術的な詳細で,特に知りたいとは思
わないでしょう.

@item $n
@c The name of the @var{macro}.
@c 
@var{macro}の名前.

@item $@var{num}
@c The @var{num}th argument of the call to @var{macro}.
@c 
@var{macro}呼び出しの@var{num}番目の引数.

@item $@@
@itemx $@var{sep}@@
@itemx $@{@var{separator}@}@@
@c All the arguments passed to @var{macro}, separated by the character
@c @var{sep} or the string @var{separator} (@samp{,} by default).  Each
@c argument is quoted, i.e., enclosed in a pair of square brackets.
@c 
文字@var{sep}または文字列@var{separator}で分離されている,マクロに渡され
ているすべての引数(デフォルトは@samp{,}).それぞれの引数は引用符で囲まれ
ています.すなわち,角カッコの組で囲まれています.

@item $*
@itemx $@var{sep}*
@itemx $@{@var{separator}@}*
@c As above, but the arguments are not quoted.
@c 
上と同じですが,引数は引用符で囲まれていません.

@item $%
@itemx $@var{sep}%
@itemx $@{@var{separator}@}%
@c As above, but the arguments are not quoted, all new line characters in
@c the arguments are smashed, and the default separator is @samp{:}.
@c 
上と同じですが,引数は引用符で囲まれておらず,引数内部のすべての改行文字
は取り除かれていて,そして,デフォルトの分離子は@samp{:}です.

@c The escape @samp{$%} produces single-line trace outputs (unless you put
@c newlines in the @samp{separator}), while @samp{$@@} and @samp{$*} do
@c not.
@c 
エスケープの@samp{$%}は,(@samp{separator}に改行を書き込まない限り)一行
のトレース出力を生成しますが,@samp{$@@}と@samp{$*}はそうではありません.
@end table

@c @xref{autoconf Invocation}, for examples of trace uses.
@c 
トレースの使用例は@xref{autoconf Invocation}.

@item --preselect=@var{macro}
@itemx -p @var{macro}
@c Cache the traces of @var{macro}, but do not enable traces.  This is
@c especially important to save CPU cycles in the future.  For instance,
@c when invoked, @command{autoconf} preselects all the macros that
@c @command{autoheader}, @command{automake}, @command{autoreconf} etc.@: will
@c trace, so that running @command{m4} is not needed to trace them: the
@c cache suffices.  This results in a huge speed-up.
@c 
@var{macro}のトレースをキャッシュしますが,キャッシュを利用可能にしませ
ん.これは特に,将来のCPUサイクルを無駄にしないために重要です.例えば呼
び出し時に,@command{m4}の実行でトレースする必要が無いように,
@command{autoconf}は@command{autoheader},@command{automake},
@command{autoreconf}などがトレースするすべてのマクロを前もって選択します.
キャッシュは十分です.これは結果として非常に高速になります.
@end table

@sp 1

@cindex Autom4te Library
@c Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
@c libraries}.  They consists in a powerful yet extremely simple feature:
@c sets of combined command line arguments:
@c 
最後に,@command{autom4te}は@dfn{Autom4teライブラリ(Autom4te libraries)}
の概念を導入します.それらは,強力ですが非常にシンプルな機能から成り立っ
ています.コマンドライン引数の組み合わせの組です.

@table @option
@item --language=@var{language}
@itemx -l =@var{language}
@c Use the @var{language} Autom4te library.  Current languages include:
@c 
@var{language}をAutom4teライブラリで使用します.現在の言語は以下のものが
含まれています.

@table @code
@item M4sugar
@c create M4sugar output.
@c 
M4sugar出力を作成します.

@item M4sh
@c create M4sh executable shell scripts.
@c 
M4shの実行可能なシェルスクリプトを作成します.

@item Autotest
@c create Autotest executable test suites.
@c 
Autotestの実行可能なテストスイートを作成します.

@item Autoconf
@c create Autoconf executable configure scripts.
@c 
Autoconfの実行可能なコンフィグレーションスクリプトを作成します.

@item Autoconf-without-aclocal-m4
@c create Autoconf executable configure scripts without
@c reading @file{aclocal.m4}.
@c 
@file{aclocal.m4}を読み込まずに,Autoconfの実行可能なコンフィグレーショ
ンスクリプトを作成します.
@end table

@item --prepend-include=@var{dir}
@item -B @var{dir}
@c Prepend directory @var{dir} to the search path.  This is used to include
@c the language-specific files before any third-party macros.
@c 
検索パスにディレクトリ@var{dir}を前置します.これは,サードパーティーの
マクロの前に,言語指定ファイルを含めるために使用します.

@end table

@cindex @file{autom4te.cfg}
@c As an example, if Autoconf is installed in its default location,
@c @file{/usr/local}, running @samp{autom4te -l m4sugar foo.m4} is
@c strictly equivalent to running @samp{autom4te --prepend-include
@c /usr/local/share/autoconf m4sugar/m4sugar.m4f --warnings syntax foo.m4}.
@c Recursive expansion applies: running @samp{autom4te -l m4sh foo.m4}
@c is the same as @samp{autom4te --language M4sugar m4sugar/m4sh.m4f
@c foo.m4}, i.e., @samp{autom4te --prepend-include /usr/local/share/autoconf
@c m4sugar/m4sugar.m4f m4sugar/m4sh.m4f --mode 777 foo.m4}.  The definition
@c of the languages is stored in @file{autom4te.cfg}.
@c 
例として,Autoconfがデフォルトの場所@file{/usr/local}にインストールされ
ている場合,@samp{autom4te -l m4sugar foo.m4}を実行することは,
@samp{autom4te --prepend-include /usr/local/share/autoconf
m4sugar/m4sugar.m4f --warning syntax foo.m4}を実行することと厳密に等価と
なります.再帰的な展開も適用します.@samp{autom4te --language m4sh
foo.m4}を実行することは,@samp{autom4te --language M4sugar
m4sugar/m4sh.m4f foo.m4}と同じで,すなわち,@samp{autom4te
--prepend-include /usr/local/share/autoconf m4sugar/m4sugar.m4f
m4sugar/m4sh.m4f --mode 777 foo.m4}と同じになります.言語の定義は,
@file{autom4te.cfg}に保存されます.

@node Customizing autom4te
@c @subsection Customizing @command{autom4te}
@subsection @command{autom4te}のカスタマイズ

@c One can customize @command{autom4te} via @file{~/.autom4te.cfg} (i.e.,
@c as found in the user home directory), and @file{./.autom4te.cfg} (i.e.,
@c as found in the directory from which @command{autom4te} is run).  The
@c order is first reading @file{autom4te.cfg}, then @file{~/.autom4te.cfg},
@c then @file{./.autom4te.cfg}, and finally the command line arguments.
@c 
@file{~/.autom4te.cfg} (すなわち,ユーザのホームディレクトリにあるとき) 
と,@file{./.autom4te.cfg} (すなわち,@command{autom4te}が実行されるディ
レクトリにあるとき)で,@command{autom4te}をカスタマイズすることが可能で
す.順番として,最初に@file{autom4te.cfg}を読み込み,そして
@file{~/.autom4te.cfg},そして@file{./.autom4te.cfg},そして最後にコマン
ドライン引数を読み込みます.

@c In these text files, comments are introduced with @code{#}, and empty
@c lines are ignored.  Customization is performed on a per-language basis,
@c wrapped in between a @samp{begin-language: "@var{language}"},
@c @samp{end-language: "@var{language}"} pair.
@c 
これらのテキストファイルでは,コメントは@code{#}ではじまり,空の行は無視
されます.カスタマイズは,言語ごとを基本に実行され,
@samp{begin-language: "@var{language}"}と@samp{end-language:
"@var{language}"}の組みで囲まれます.

@c Customizing a language stands for appending options (@pxref{autom4te
@c Invocation}) to the current definition of the language.  Options, and
@c more generally arguments, are introduced by @samp{args:
@c @var{arguments}}.  You may use the traditional shell syntax to quote the
@c @var{arguments}.
@c 
言語のカスタマイズとは,現在の言語の定義にオプションを追加すること
(@pxref{autom4te Invocation})を意味します.オプションと一般的な引数は,
@samp{args: @var{arguments}}で始まります.@var{arguments}を引用符で囲む
ことによって伝統的なシェルの構文を使用してもかまいません.

@c As an example, to disable Autoconf caches (@file{autom4te.cache})
@c globally, include the following lines in @file{~/.autom4te.cfg}:
@c 
例として,Autoconfのキャッシュ(@file{autom4te.cache})を大域的に利用不可
能にするため,以下の行を@file{~/.autom4te.cfg}に含めます.

@verbatim
## ------------------ ##
## User Preferences.  ##
## ------------------ ##

begin-language: "Autoconf"
args: --no-cache
end-language: "Autoconf"
@end verbatim


@node Programming in M4sugar
@c @section Programming in M4sugar
@section M4sugarでのプログラミング

@cindex M4sugar
@c M4 by itself provides only a small, but sufficient, set of all-purpose
@c macros.  M4sugar introduces additional generic macros.  Its name was
@c coined by Lars J. Aas: ``Readability And Greater Understanding Stands 4
@c M4sugar''.
@c 
M4自身は非常に小さいけれど十分な,汎用マクロの組を提供しています.
M4sugarは,追加の一般的なマクロを導入しています.その名前は,Lars J. Aas 
によってつくり出されました:``Readability And Greater Understanding
Stands 4 M4sugar''.

@menu
* Redefined M4 Macros::         M4 builtins changed in M4sugar
* Evaluation Macros::           More quotation and evaluation control
* Forbidden Patterns::          Catching unexpanded macros
@end menu

@node Redefined M4 Macros
@c @subsection Redefined M4 Macros
@subsection M4マクロの再定義

@c With a few exceptions, all the M4 native macros are moved in the
@c @samp{m4_} pseudo-namespace, e.g., M4sugar renames @code{define} as
@c @code{m4_define} etc.
@c 
いくつか例外がありますが,全てのM4ネイティブなマクロは,@samp{m4_}疑似名
前空間に移動されていて,例えば,M4sugarでは@code{define}を
@code{m4_define}に名前を変えるなどのようになっています.

@c Some M4 macros are redefined, and are slightly incompatible with their
@c native equivalent.
@c 
M4マクロには再定義されているものもあり,ネイティブな同義語とわずかに互換
性がなくなっています.

@defmac dnl
@msindex{dnl}
@c This macro kept its original name: no @code{m4_dnl} is defined.
@c 
このマクロは,もともとの名前を維持しています.@code{m4_dnl}は定義されて
いません.
@end defmac

@defmac m4_defn (@var{macro})
@msindex{defn}
@c Contrary to the M4 builtin, this macro fails if @var{macro} is not
@c defined.  See @code{m4_undefine}.
@c 
M4組み込みのものと比較して,このマクロは,@var{macro}が定義されていない
場合は失敗します.@code{m4_undefine}を参照してください.
@end defmac

@defmac m4_exit (@var{exit-status})
@msindex{exit}
@c This macro corresponds to @code{m4exit}.
@c 
このマクロは@code{m4exit}に対応します.
@end defmac

@defmac m4_if (@var{comment})
@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @ovar{not-equal})
@defmacx m4_if (@var{string-1}, @var{string-2}, @var{equal}, @dots{})
@msindex{if}
@c This macro corresponds to @code{ifelse}.
@c 
このマクロは@code{ifelse}に対応します.
@end defmac

@defmac m4_undefine (@var{macro})
@msindex{undefine}
@c Contrary to the M4 builtin, this macro fails if @var{macro} is not
@c defined.  Use
@c 
M4組み込みのものとは異なり,このマクロは@var{macro}が定義されていない場
合は失敗します.以下のように使用してください.

@example
m4_ifdef([@var{macro}], [m4_undefine([@var{macro}])])
@end example

@noindent
@c to recover the behavior of the builtin.
@c 
それで,組み込みのものの動作に復旧します.
@end defmac

@defmac m4_bpatsubst (@var{string}, @var{regexp}, @ovar{replacement})
@msindex{bpatsubst}
@c This macro corresponds to @code{patsubst}.  The name @code{m4_patsubst}
@c is kept for future versions of M4sh, on top of @acronym{GNU} M4 which will
@c provide extended regular expression syntax via @code{epatsubst}.
@c 
このマクロは@code{patsubst}に対応します.@code{m4_patsubst}の名前は,
@code{epatsubst}で拡張した正規表現の構文を提供する,@acronym{GNU} M4の最
上位のM4shの将来のバージョンに対して残されています.
@end defmac

@defmac m4_popdef (@var{macro})
@msindex{popdef}
@c Contrary to the M4 builtin, this macro fails if @var{macro} is not
@c defined.  See @code{m4_undefine}.
@c 
M4組み込みのものとは異なり,このマクロは@var{macro}が定義されていない場
合は失敗します.@code{m4_undefine}を参照してください.
@end defmac

@defmac m4_bregexp (@var{string}, @var{regexp}, @ovar{replacement})
@msindex{bregexp}
@c This macro corresponds to @code{regexp}.  The name @code{m4_regexp}
@c is kept for future versions of M4sh, on top of @acronym{GNU} M4 which will
@c provide extended regular expression syntax via @code{eregexp}.
@c 
このマクロは@code{regexp}に対応しています.@code{m4_regexp}の名前は,
@code{eregexp}で拡張した正規表現の構文を提供する,@acronym{GNU} M4の最上
位のM4shの将来のバージョンに対して残されています.
@end defmac

@defmac m4_wrap (@var{text})
@msindex{wrap}
@c This macro corresponds to @code{m4wrap}.
@c 
このマクロは@code{m4wrap}に対応しています.

@c You are encouraged to end @var{text} with @samp{[]}, so that there are
@c no risks that two consecutive invocations of @code{m4_wrap} result in an
@c unexpected pasting of tokens, as in
@c 
二つの連続して呼び出される@code{m4_wrap}が,そのままトークンとして渡され
るという予期しない結果となる危険が無いように,@var{text}を@samp{[]} で終
えることが推奨されます.

@example
m4_define([foo], [Foo])
m4_define([bar], [Bar])
m4_define([foobar], [FOOBAR])
m4_wrap([bar])
m4_wrap([foo])
@result{}FOOBAR
@end example
@end defmac

@node Evaluation Macros
@c @subsection Evaluation Macros
@subsection マクロの評価

@c The following macros give some control over the order of the evaluation
@c by adding or removing levels of quotes.  They are meant for hard-core M4
@c programmers.
@c 
以下のマクロは,引用符のレベルを追加したり削除したりすることで,評価の順
序全体を制御するものです.それらは,ハードコアなM4プログラマに対して意味
があります.

@defmac m4_dquote (@var{arg1}, @dots{})
@msindex{dquote}
@c Return the arguments as a quoted list of quoted arguments.
@c 
引用符で囲まれたリストを引用符で囲んだ引数を返します.
@end defmac

@defmac m4_quote (@var{arg1}, @dots{})
@msindex{quote}
@c Return the arguments as a single entity, i.e., wrap them into a pair of
@c quotes.
@c 
単一の要素として引数を返し,すなわち,一つの引用符の組でそれらを囲みます.
@end defmac

@c The following example aims at emphasizing the difference between (i), not
@c using these macros, (ii), using @code{m4_quote}, and (iii), using
@c @code{m4_dquote}.
@c 
以下の例は,(i)これらの例を使用していない,(ii)@code{m4_quote}を使用して
いる,(iii)@code{m4_dquote}を使用している,といったそれぞれの間の差を強
調することを目的としています.

@example
$ @kbd{cat example.m4}
# Overquote, so that quotes are visible.
m4_define([show], [$[]1 = [$1], $[]@@ = [$@@]])
m4_divert(0)dnl
show(a, b)
show(m4_quote(a, b))
show(m4_dquote(a, b))
$ @kbd{autom4te -l m4sugar example.m4}
$1 = a, $@@ = [a],[b]
$1 = a,b, $@@ = [a,b]
$1 = [a],[b], $@@ = [[a],[b]]
@end example



@node Forbidden Patterns
@c @subsection Forbidden Patterns
@subsection 禁止されているパターン

@c M4sugar provides a means to define suspicious patterns, patterns
@c describing tokens which should not be found in the output.  For
@c instance, if an Autoconf @file{configure} script includes tokens such as
@c @samp{AC_DEFINE}, or @samp{dnl}, then most probably something went
@c wrong (typically a macro was not evaluated because of overquotation).
@c 
M4sugar提供の目的は,怪しげはパターン,つまり出力に現れるべきではないトー
クンを記述しているパターンを定義するためです.例えば,Autoconf
@file{configure}スクリプトに@samp{AC_DEFINE}や@samp{dnl}のようなトークン
が含められている場合,おそらく何か問題が発生するでしょう(通常は,余分な
引用符のためにマクロが評価されていないためです).

@c M4sugar forbids all the tokens matching @samp{^m4_} and @samp{^dnl$}.
@c 
M4sugarは,@samp{^m4_}と@samp{^dnl$}に一致する全てのトークンを禁止します.

@defmac m4_pattern_forbid (@var{pattern})
@msindex{pattern_forbid}
@c Declare that no token matching @var{pattern} must be found in the output.
@c Comments are not checked; this can be a problem if, for instance, you
@c have some macro left unexpanded after an @samp{#include}.  No consensus
@c is currently found in the Autoconf community, as some people consider it
@c should be valid to name macros in comments (which doesn't makes sense to
@c the author of this documentation, as @samp{#}-comments should document
@c the output, not the input, documented by @samp{dnl} comments).
@c 
出力で見つかる必要のある@var{pattern}にマッチするトークンを宣言しません.
コメントは調査されません.これは,例えば,@samp{#include}より後に展開さ
れないまま残っているマクロがある場合に問題になるはずです.現在,Autoconf 
コミュニティでは合意がとおらず,コメント内で指名されているマクロを有効に
すべきだと考えている人もいるからです(@samp{#}のコメントは出力を説明する
べきで,@samp{dnl}コメントのように入力を説明するのではないため,このドキュ
メントの著者には意味がありません).
@end defmac

@c Of course, you might encounter exceptions to these generic rules, for
@c instance you might have to refer to @samp{$m4_flags}.
@c 
もちろん,これらの一般的な規則の例外に遭遇する可能性もあり,例えば,
@samp{$m4_flags}を参照する必要があるかもしれません.

@defmac m4_pattern_allow (@var{pattern})
@msindex{pattern_allow}
@c Any token matching @var{pattern} is allowed, including if it matches an
@c @code{m4_pattern_forbid} pattern.
@c 
@var{pattern}に一致している全てのトークンが可能で,それには
@code{m4_pattern_forbid}パターンに一致しているものも含まれます.
@end defmac

@node Programming in M4sh
@c @section Programming in M4sh
@section M4shでのプログラミング

@c FIXME: Eventually will become a chapter, as it is not related to
@c programming in M4 per se.

@c M4sh, pronounced ``mash'', is aiming at producing portable Bourne shell
@c scripts.  This name was coined by Lars J. Aas, who notes that,
@c according to the Webster's Revised Unabridged Dictionary (1913):
@c 
M4shは,``mash''と発音し,移植性の高いBourneシェルスクリプトを生成するこ
とが狙いです.この名前はLars J. Aasが発明し,Webster's Revised
Unabridged Dictionary (1913)にメモがあります.

@quotation
Mash \Mash\, n.  [Akin to G. meisch, maisch, meische, maische, mash,
wash, and prob.@: to AS.@: miscian to mix.  See ``Mix''.]

@enumerate 1
@item
@c A mass of mixed ingredients reduced to a soft pulpy state by beating or
@c pressure@enddots{}
@c 
混合成分の塊を,こう解や圧搾でパルプ状に軟らかくして絞った@enddots{}

@item
@c A mixture of meal or bran and water fed to animals.
@c 
動物に与える粉餌やぬかと水を混ぜたもの.

@item
@c A mess; trouble.  [Obs.] --Beau.@: & Fl.
@c 
混乱.トラブル.  [Obs.] --Beau.@: & Fl.
@end enumerate
@end quotation


@c For the time being, it is not mature enough to be widely used.
@c 
今しばらくは,広範囲の使用に十分なほど熟していません.

@c M4sh provides portable alternatives for some common shell constructs
@c that unfortunately are not portable in practice.
@c 
M4shは,実験してみると残念ながら移植性が無い,一般的なシェルの構成に対す
る移植性の高い代替物を提供しています.

@defmac AS_DIRNAME (@var{pathname})
@asindex{DIRNAME}
@c Return the directory portion of @var{pathname}, using the algorithm
@c required by @acronym{POSIX}.  @xref{Limitations of Usual Tools}, for more
@c details about what this returns and why it is more portable than the
@c @command{dirname} command.
@c 
@acronym{POSIX}で要求されるアルゴリズムを使用しながら,@var{pathname} の
ディレクトリ部分を返します.これが返すものと,それが@command{dirname}コ
マンドより移植性が高い理由の詳細は,@xref{Limitations of Usual Tools}.
@end defmac

@defmac AS_IF (@var{test}, @ovar{RUN-IF-TRUE}, @ovar{RUN-IF-FALSE})
@asindex{IF}
@c Run shell code TEST.  If TEST exits with a zero status then run shell code
@c RUN-IF-TRUE, else run shell code RUN-IF-FALSE, with simplifications if either
@c RUN-IF-TRUE or RUN-IF-FALSE is empty.
@c 
シェルコード@var{test}を実行します.@var{TEST}がゼロのステータスで終了し
た場合,シェルコードの@var{RUN-IF-TRUE}を実行し,それ以外ではシェルコー
ドの@var{RUN-IF-FALSE}を実行し,@var{RUN-IF-TRUE}や@var{RUN-IF-FALSE}が
空の場合は何もしません.
@end defmac

@defmac AS_MKDIR_P (@var{filename})
@asindex{MKDIR_P}
@c Make the directory @var{filename}, including intervening directories
@c as necessary.  This is equivalent to @samp{mkdir -p @var{filename}},
@c except that it is portable to older versions of @command{mkdir} that
@c lack support for the @option{-p} option.
@c 
間に入る必要なディレクトリを含め,ディレクトリ@var{filename}を作成します.
これは@samp{mkdir -p @var{filename}}と等価ですが,@option{-p}オプション
が無い古いバージョンの@command{mkdir}に移植性を持たせます.
@end defmac

@defmac AS_SET_CATFILE (@var{var}, @var{dir}, @var{file})
@asindex{SET_CATFILE}
@c Set the shell variable @var{var} to @var{dir}/@var{file}, but
@c optimizing the common cases (@var{dir} or @var{file} is @samp{.},
@c @var{file} is absolute etc.).
@c 
シェル変数@var{var}を@var{dir}/@var{file}に設定しますが,一般的に最適な
ものにします(@var{dir}や@var{file}が@samp{.}のときは@var{file}は絶対パス
になるなどです).
@end defmac



@c=================================================== Writing Autoconf Macros.

@node Writing Autoconf Macros
@c @chapter Writing Autoconf Macros
@chapter Autoconfマクロを書く

@c When you write a feature test that could be applicable to more than one
@c software package, the best thing to do is encapsulate it in a new macro.
@c Here are some instructions and guidelines for writing Autoconf macros.
@c 
一つ以上のソフトウェアパッケージに適用する特徴テストを書くとき,新しいマ
クロの中にそれをカプセル化することが最も良い方法です.Autoconfマクロを書
くための説明とガイドラインは以下のようになります.

@menu
* Macro Definitions::           Basic format of an Autoconf macro
* Macro Names::                 What to call your new macros
* Reporting Messages::          Notifying @command{autoconf} users
* Dependencies Between Macros::  What to do when macros depend on other macros
* Obsoleting Macros::           Warning about old ways of doing things
* Coding Style::                Writing Autoconf macros @`a la Autoconf
@end menu

@node Macro Definitions
@c @section Macro Definitions
@section マクロの定義

@acindex{DEFUN}
@c Autoconf macros are defined using the @code{AC_DEFUN} macro, which is
@c similar to the M4 builtin @code{m4_define} macro.  In addition to
@c defining a macro, @code{AC_DEFUN} adds to it some code that is used to
@c constrain the order in which macros are called (@pxref{Prerequisite
@c Macros}).
@c 
Autoconfマクロは,M4組み込みの@code{m4_define}マクロに似た
@code{AC_DEFUN}マクロを使用して定義されています.マクロ定義に加える際,
@code{AC_DEFUN}は,マクロを呼び出す順番を制限するために使用されるコード
を加えます(@pxref{Prerequisite Macros}).

@c An Autoconf macro definition looks like this:
@c 
Autoconfマクロ定義は以下のようになります.

@example
AC_DEFUN(@var{macro-name}, @var{macro-body})
@end example

@c You can refer to any arguments passed to the macro as @samp{$1},
@c @samp{$2}, etc.  @xref{Definitions,, How to define new macros, m4.info,
@c @acronym{GNU} m4}, for more complete information on writing M4 macros.
@c 
マクロに渡す引数は,@samp{$1},@samp{$2}等のように参照することが可能です.
M4マクロを書く際の完全な情報は,@xref{Definitions, , How to define new
macros, m4.info, @acronym{GNU} m4}.

@c Be sure to properly quote both the @var{macro-body} @emph{and} the
@c @var{macro-name} to avoid any problems if the macro happens to have
@c been previously defined.
@c 
マクロが偶然前に定義されている場合の問題を避けるために,
@var{macro-body}@emph{と}@var{macro-name}の両方を,適切に引用符で囲んで
いることを確かめてください.

@c Each macro should have a header comment that gives its prototype, and a
@c brief description.  When arguments have default values, display them in
@c the prototype.  For example:
@c 
それぞれのマクロには,そのプロトタイプと短い説明を付与するため,ヘッダの
コメントを書くべきです.引数がデフォルト値の場合,そのプロトタイプを表示
してください.例えば以下のようにします.

@example
# AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
# --------------------------------------
m4_define([AC_MSG_ERROR],
[@{ _AC_ECHO([configure: error: $1], 2); exit m4_default([$2], 1); @}])
@end example

@c Comments about the macro should be left in the header comment.  Most
@c other comments will make their way into @file{configure}, so just keep
@c using @samp{#} to introduce comments.
@c 
マクロに関するコメントは,ヘッダコメントに残すべきです.その他のほとんど
のコメントは,勝手に@file{configure}に入るので,コメントを導入するために
@samp{#}を使用し続けるだけで結構です.

@cindex @code{dnl}
@c If you have some very special comments about pure M4 code, comments
@c that make no sense in @file{configure} and in the header comment, then
@c use the builtin @code{dnl}: it causes M4 to discard the text
@c through the next newline.
@c 
ピュアなM4コードに関して,非常に特殊なコメントがある場合は,コメントを
@file{configure}とヘッダコメントに入れる意味がないので,組み込みの
@code{dnl}を使用してください.それでM4は,次の改行までのテキストを廃棄し
ます.

@c Keep in mind that @code{dnl} is rarely needed to introduce comments;
@c @code{dnl} is more useful to get rid of the newlines following macros
@c that produce no output, such as @code{AC_REQUIRE}.
@c 
@code{dnl}がコメントの導入に必要になることは滅多にないということを覚えて
おいてください.@code{dnl}は,@code{AC_REQUIRE}のような,出力を生成しな
いマクロに続く改行を除去するときに,より役に立ちます.


@node Macro Names
@c @section Macro Names
@section マクロ名

@c All of the Autoconf macros have all-uppercase names starting with
@c @samp{AC_} to prevent them from accidentally conflicting with other
@c text.  All shell variables that they use for internal purposes have
@c mostly-lowercase names starting with @samp{ac_}.  To ensure that your
@c macros don't conflict with present or future Autoconf macros, you should
@c prefix your own macro names and any shell variables they use with some
@c other sequence.  Possibilities include your initials, or an abbreviation
@c for the name of your organization or software package.
@c 
全てのAutoconfマクロは,他のテキストと偶然衝突することを避けるため 
@samp{AC_}で始まる全て大文字の名前になっています.内部目的で使用する全て
のシェル変数は,@samp{ac_}で始まるほとんど小文字の名前になっています.マ
クロが,現在または将来のAutoconfマクロと衝突しないことを保証するため,マ
クロ名と他の手続きで使用するシェル変数に,独自の接頭辞を付けてください.
可能性としては,イニシャルや組織やソフトウェアパッケージの名前の省略を含
めることになるでしょう.

@c Most of the Autoconf macros' names follow a structured naming convention
@c that indicates the kind of feature check by the name.  The macro names
@c consist of several words, separated by underscores, going from most
@c general to most specific.  The names of their cache variables use the
@c same convention (@pxref{Cache Variable Names}, for more information on
@c them).
@c 
ほとんどのAutoconfマクロ名は,名前によって調査している特徴の種類を示す,
構造化された命名則に続きます.複数の単語から成り立つマクロ名は,アンダー
スコアで分けられ,最も一般的なものから最も特殊なものへとなっています.
キャッシュ変数の名前も,同じ規則を使用しています(詳細は@pxref{Cache
Variable Names}).

@c The first word of the name after @samp{AC_} usually tells the category
@c of the feature being tested.  Here are the categories used in Autoconf for
@c specific test macros, the kind of macro that you are more likely to
@c write.  They are also used for cache variables, in all-lowercase.  Use
@c them where applicable; where they're not, invent your own categories.
@c 
@samp{AC_}の後の名前の最初の単語は,通常テストしている特徴のカテゴリを伝
えるものです.よく書くマクロの種類のテストマクロを指定するため,Autoconf 
が使用するカテゴリは以下のようになっています.それらはキャッシュ変数でも
全て小文字で使用されます.適用可能なものを使用してください.無ければ独自
のカテゴリを考え出してください.

@table @code
@item C
@c C language builtin features.
@c 
C言語組み込み特徴.
@item DECL
@c Declarations of C variables in header files.
@c 
ヘッダファイルでのC変数の宣言.
@item FUNC
@c Functions in libraries.
@c 
ライブラリの関数.
@item GROUP
@c @sc{unix} group owners of files.
@c 
ファイルの@sc{unix}グループオーナー.
@item HEADER
@c Header files.
@c 
ヘッダファイル.
@item LIB
@c C libraries.
@c 
Cライブラリ.
@item PATH
@c The full path names to files, including programs.
@c 
プログラムを含むファイルのフルパス名.
@item PROG
@c The base names of programs.
@c 
プログラムのベース名.
@item MEMBER
@c Members of aggregates.
@c 
集合体のメンバ.
@item SYS
@c Operating system features.
@c 
オペレーティングシステムの特徴.
@item TYPE
@c C builtin or declared types.
@c 
C組み込みや宣言されている型.
@item VAR
@c C variables in libraries.
@c 
ライブラリのC変数.
@end table

@c After the category comes the name of the particular feature being
@c tested.  Any further words in the macro name indicate particular aspects
@c of the feature.  For example, @code{AC_FUNC_UTIME_NULL} checks the
@c behavior of the @code{utime} function when called with a @code{NULL}
@c pointer.
@c 
カテゴリの後には,特定の特徴をテストしている名前が来ます.マクロ名のそれ
以外の単語は,特徴の特定の側面を示します.例えば,
@code{AC_FUNC_UTIME_NULL}は,@code{NULL}ポインタで呼び出されたときの 
@code{utime}関数の動作を調査します.

@c An internal macro should have a name that starts with an underscore;
@c Autoconf internals should therefore start with @samp{_AC_}.
@c Additionally, a macro that is an internal subroutine of another macro
@c should have a name that starts with an underscore and the name of that
@c other macro, followed by one or more words saying what the internal
@c macro does.  For example, @code{AC_PATH_X} has internal macros
@c @code{_AC_PATH_X_XMKMF} and @code{_AC_PATH_X_DIRECT}.
@c 
内部マクロは,アンダースコアで始まる名前にすべきです.そのため,Autoconf 
内部のものは@samp{_AC_}で始まります.さらに,他のマクロ内部のサブルーチ
ンとなるマクロは,アンダースコアと他のマクロ名ではじまり,内部マクロが行
うことを伝える一つ以上の単語が続きます.例えば, @code{AC_PATH_X}は,内
部マクロに@code{_AC_PATH_X_XMKMF}と@code{_AC_PATH_X_DIRECT}があります.


@node Reporting Messages
@c @section Reporting Messages
@section メッセージの報告
@cindex Messages, from @command{autoconf}

@c When macros statically diagnose abnormal situations, benign or fatal,
@c they should report them using these macros.  For dynamic issues, i.e.,
@c when @command{configure} is run, see @ref{Printing Messages}.
@c 
マクロが良性または悪性の異常な状況を静的に診断しているとき,以下のマクロ
を使用してそれを報告すべきです.動的な発行,すなわち@command{configure} 
が実行されているときは,@ref{Printing Messages}を参照してください.

@defmac AC_DIAGNOSE (@var{category}, @var{message})
@acindex{DIAGNOSE}
@c Report @var{message} as a warning (or as an error if requested by the
@c user) if warnings of the @var{category} are turned on.  You are
@c encouraged to use standard categories, which currently include:
@c 
@var{category}の警告をオンにしている場合,@var{message}を警告として(また
はユーザが要求する場合はエラーとして)報告します.以下の現在含められてい
る標準的なカテゴリを使用することを勧めます.

@table @samp
@item all
@c messages that don't fall into one of the following categories.  Use of an
@c empty @var{category} is equivalent.
@c 
以下のカテゴリの一つに分類されないメッセージです.空の@var{category}を使
用することと等価です.

@item cross
@c related to cross compilation issues.
@c 
クロスコンパイルに関連する問題です.

@item obsolete
@c use of an obsolete construct.
@c 
時代遅れの構成の使用です.

@item syntax
@c dubious syntactic constructs, incorrectly ordered macro calls.
@c 
曖昧な構文構成,間違った順序のマクロ呼び出しです.
@end table
@end defmac

@defmac AC_WARNING (@var{message})
@acindex{WARNING}
@c Equivalent to @samp{AC_DIAGNOSE([syntax], @var{message})}, but you are
@c strongly encouraged to use a finer grained category.
@c 
@samp{AC_DIAGNOSE([syntax], @var{message})}と等価ですが,より良く分類さ
れているカテゴリを使用することを推奨します.
@end defmac

@defmac AC_FATAL (@var{message})
@acindex{FATAL}
@c Report a severe error @var{message}, and have @command{autoconf} die.
@c 
ひどいエラー@var{message}を報告し,@command{autoconf}は終了します.
@end defmac

@c When the user runs @samp{autoconf -W error}, warnings from
@c @code{AC_DIAGNOSE} and @code{AC_WARNING} are reported as error, see
@c @ref{autoconf Invocation}.
@c 
ユーザが@samp{autoconf -W error}を実行しているとき,@code{AC_DIAGNOSE} 
と@code{AC_WARNING}からの警告はエラーとして報告されます.@ref{autoconf
Invocation}を参照してください.

@node Dependencies Between Macros
@c @section Dependencies Between Macros
@section マクロ間の依存性

@c Some Autoconf macros depend on other macros having been called first in
@c order to work correctly.  Autoconf provides a way to ensure that certain
@c macros are called if needed and a way to warn the user if macros are
@c called in an order that might cause incorrect operation.
@c 
正確に動作するために,最初に他のマクロが呼び出されていることに依存する
Autoconfマクロもあります.Autoconfは,必要な場合はある特定のマクロが呼び
出されていることを保証する方法と,マクロが間違った処理を引き起こす順序で
呼び出された場合に警告する方法を供給します.

@menu
* Prerequisite Macros::         Ensuring required information
* Suggested Ordering::          Warning about possible ordering problems
@end menu

@node Prerequisite Macros
@c @subsection Prerequisite Macros
@subsection マクロの必要条件

@c A macro that you write might need to use values that have previously
@c been computed by other macros.  For example, @code{AC_DECL_YYTEXT}
@c examines the output of @code{flex} or @code{lex}, so it depends on
@c @code{AC_PROG_LEX} having been called first to set the shell variable
@c @code{LEX}.
@c 
書いているマクロが,以前に他のマクロが計算した値を使用する必要があるかも
しれません.例えば,@code{AC_DECL_YYTEXT}は,@code{flex}や@code{lex} の
出力を調査するので,シェル変数 @code{LEX}を設定するために,
@code{AC_PROG_LEX}が最初に呼び出されていることに依存します.

@c Rather than forcing the user of the macros to keep track of the
@c dependencies between them, you can use the @code{AC_REQUIRE} macro to do
@c it automatically.  @code{AC_REQUIRE} can ensure that a macro is only
@c called if it is needed, and only called once.
@c 
マクロのユーザにそれら間の依存性を追跡させるより,自動的にするために 
@code{AC_REQUIRE}を使用することが可能です.@code{AC_REQUIRE}は,必要な
場合のみマクロが呼び出され,そして一度だけ呼び出されることを保証します.

@defmac AC_REQUIRE (@var{macro-name})
@acindex{REQUIRE}
@c If the M4 macro @var{macro-name} has not already been called, call it
@c (without any arguments).  Make sure to quote @var{macro-name} with
@c square brackets.  @var{macro-name} must have been defined using
@c @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
@c that it has been called.
@c 
M4マクロ@var{macro-name}がまだ呼び出されていない場合,それを(引数無しで)
呼び出します.角カッコで@var{macro-name}を囲んでいることを確認してくださ
い.@var{macro-name}は,@code{AC_DEFUN}を使用して定義されている,または
呼び出されていることを示す@code{AC_PROVIDE}の呼び出しを含んでいる必要が
あります.

@c @code{AC_REQUIRE} must be used inside an @code{AC_DEFUN}'d macro; it
@c must not be called from the top level.
@c 
@code{AC_REQUIRE}は@code{AC_DEFUN}マクロの内部で使用する必要があります.
それはトップレベルから呼び出してはいけません.
@end defmac

@c @code{AC_REQUIRE} is often misunderstood.  It really implements
@c dependencies between macros in the sense that if one macro depends upon
@c another, the latter will be expanded @emph{before} the body of the
@c former.  In particular, @samp{AC_REQUIRE(FOO)} is not replaced with the
@c body of @code{FOO}.  For instance, this definition of macros:
@c 
@code{AC_REQUIRE}はよく誤解されます.一つのマクロが他のものに依存してい
る場合,後者は前者の本体の@emph{前に}展開されるように,それはマクロ間の
依存性を実装しています.特に,@samp{AC_REQUIRE(FOO)}は,@code{FOO} の本
体では置換されません.例えば,マクロを以下のように定義したとします.

@example
@group
AC_DEFUN([TRAVOLTA],
[test "$body_temperature_in_celsius" -gt "38" &&
  dance_floor=occupied])
AC_DEFUN([NEWTON_JOHN],
[test "$hair_style" = "curly" &&
  dance_floor=occupied])
@end group

@group
AC_DEFUN([RESERVE_DANCE_FLOOR],
[if date | grep '^Sat.*pm' >/dev/null 2>&1; then
  AC_REQUIRE([TRAVOLTA])
  AC_REQUIRE([NEWTON_JOHN])
fi])
@end group
@end example

@noindent
@c with this @file{configure.ac}
@c 
これを@file{configure.ac}で使用します.

@example
AC_INIT
RESERVE_DANCE_FLOOR
if test "$dance_floor" = occupied; then
  AC_MSG_ERROR([cannot pick up here, let's move])
fi
@end example

@noindent
@c will not leave you with a better chance to meet a kindred soul at
@c other times than Saturday night since it expands into:
@c 
それは以下のように展開されるので,土曜日の夜以外に仲間に会う機会が残って
いません.

@example
@group
test "$body_temperature_in_Celsius" -gt "38" &&
  dance_floor=occupied
test "$hair_style" = "curly" &&
  dance_floor=occupied
fi
if date | grep '^Sat.*pm' >/dev/null 2>&1; then


fi
@end group
@end example

@c This behavior was chosen on purpose: (i) it prevents messages in
@c required macros from interrupting the messages in the requiring macros;
@c (ii) it avoids bad surprises when shell conditionals are used, as in:
@c 
この動作は意図的に選択されました.(i) それは要求されるマクロのメッセージ
が,要求しているマクロのメッセージとして解釈されることを妨げます.(ii) 
それは,シェルの条件文が使用されるときひどく驚くことを妨げます.以下のよ
うになります.

@example
@group
if @dots{}; then
  AC_REQUIRE([SOME_CHECK])
fi
@dots{}
SOME_CHECK
@end group
@end example


@c You are encouraged to put all @code{AC_REQUIRE}s at the beginning of a
@c macro.  You can use @code{dnl} to avoid the empty lines they leave.
@c 
マクロの最初に全ての@code{AC_REQUIRE}を書き込むことを推奨します.空の行
が残ることを避けるため,@code{dnl}を使用することが可能です.

@node Suggested Ordering
@c @subsection Suggested Ordering
@subsection 推奨される順序

@c Some macros should be run before another macro if both are called, but
@c neither @emph{requires} that the other be called.  For example, a macro
@c that changes the behavior of the C compiler should be called before any
@c macros that run the C compiler.  Many of these dependencies are noted in
@c the documentation.
@c 
両方が呼び出されても,片方がもう一方が呼び出されることを@emph{要求}しな
い場合,もう一方のマクロの前に実行するすべきマクロもあります.例えば,C
コンパイラの動作を変更するマクロは,Cコンパイラを実行するあらゆるマクロ
の前に呼び出されるべきです.これらの依存性の多くはドキュメントに記されて
います.

@c Autoconf provides the @code{AC_BEFORE} macro to warn users when macros
@c with this kind of dependency appear out of order in a
@c @file{configure.ac} file.  The warning occurs when creating
@c @command{configure} from @file{configure.ac}, not when running
@c @command{configure}.
@c 
Autoconfは,これらの依存性を持つマクロが@file{configure.ac}ファイルで順
序が間違って現れるとき,ユーザに警告する@code{AC_BEFORE}を提供しています.
警告は,@file{configure.ac}から@command{configure}を作成するときに発生し
ますが,@command{configure}実行時には発生しません.

@c For example, @code{AC_PROG_CPP} checks whether the C compiler
@c can run the C preprocessor when given the @option{-E} option.  It should
@c therefore be called after any macros that change which C compiler is
@c being used, such as @code{AC_PROG_CC}.  So @code{AC_PROG_CC} contains:
@c 
例えば@code{AC_PROG_CPP}は,Cコンパイラに@samp{-E}オプションが与えられて
いるとき,Cプリプロセッサが実行可能かどうか調査します.従って,使用され
るCコンパイラが変更される@code{AC_PROG_CC}のようなマクロの後で,それは呼
び出すべきです.そのため,@code{AC_PROG_CC}は以下を含んでいます.

@example
AC_BEFORE([$0], [AC_PROG_CPP])dnl
@end example

@noindent
@c This warns the user if a call to @code{AC_PROG_CPP} has already occurred
@c when @code{AC_PROG_CC} is called.
@c 
これで,@code{AC_PROG_CC}が呼び出されたとき,@code{AC_PROG_CPP}が既に呼
び出されている場合,ユーザに警告します.

@defmac AC_BEFORE (@var{this-macro-name}, @var{called-macro-name})
@acindex{BEFORE}
@c Make M4 print a warning message to the standard error output if
@c @var{called-macro-name} has already been called.  @var{this-macro-name}
@c should be the name of the macro that is calling @code{AC_BEFORE}.  The
@c macro @var{called-macro-name} must have been defined using
@c @code{AC_DEFUN} or else contain a call to @code{AC_PROVIDE} to indicate
@c that it has been called.
@c 
@var{called-macro-name}が既に呼び出されている場合,M4は標準エラー出力に
警告メッセージを出力します.@var{this-macro-name}は,@code{AC_BEFORE}を
呼び出すマクロの名前にすべきです.マクロ@var{called-macro-name}は,
@code{AC_DEFUN}を使用して定義されている,または呼び出されていることを示
す@code{AC_PROVIDE}の呼び出しを含んでいる必要があります.
@end defmac

@node Obsoleting Macros
@c @section Obsoleting Macros
@section 時代遅れのマクロ

@c Configuration and portability technology has evolved over the years.
@c Often better ways of solving a particular problem are developed, or
@c ad-hoc approaches are systematized.  This process has occurred in many
@c parts of Autoconf.  One result is that some of the macros are now
@c considered @dfn{obsolete}; they still work, but are no longer considered
@c the best thing to do, hence they should be replaced with more modern
@c macros.  Ideally, @command{autoupdate} should replace the old macro calls
@c with their modern implementation.
@c 
コンフィグレーションと移植性の技術は,何年もかかって進展しました.特定の
問題を解決するより良い方法が開発されたり,特別なアプローチが体系化される
ことはよくあります.この過程はAutoconfの数多くの部分で発生しました.一つ
の結果は,今では@dfn{時代遅れ(obsolete)}と思われるマクロの存在です.まだ
動作しますが,すでにそれが最善の方法ではなくなっていて,より近代的なマク
ロで置換すべきでしょう.理想的には,@command{autoupdate}が古いマクロの呼
び出しを現在のマクロに置換すべきでしょう.

@c Autoconf provides a simple means to obsolete a macro.
@c 
Autoconfは,マクロが時代遅れだということを意味する単純なものを提供してい
ます.

@defmac AU_DEFUN (@var{old-macro}, @var{implementation}, @ovar{message})
@acindex{DEFUN}
@acindex{AU_DEFUN}
@c Define @var{old-macro} as @var{implementation}.  The only difference
@c with @code{AC_DEFUN} is that the user will be warned that
@c @var{old-macro} is now obsolete.
@c 
@var{implementation}として@var{old-macro}を定義します.@code{AC_DEFUN} 
を用いたものとは,@var{old-macro}が現在は時代遅れだという警告をユーザが
受けるところだけが異なります.

@c If she then uses @command{autoupdate}, the call to @var{old-macro} will be
@c replaced by the modern @var{implementation}.  The additional
@c @var{message} is then printed.
@c 
@command{autoupdate}を使用する場合,@var{old-macro}の呼び出しは現在の
@var{implementation}で置換されます.更に,@var{message}が出力されます.
@end defmac

@node Coding Style
@c @section Coding Style
@section コーディングスタイル

@c The Autoconf macros follow a strict coding style.  You are encouraged to
@c follow this style, especially if you intend to distribute your macro,
@c either by contributing it to Autoconf itself, or via other means.
@c 
Autoconfマクロはスクリプトコーディングスタイルに従います.以下のスタイル
に従うように推奨し,特に,Autoconf自身に寄稿したり,その他の目的で,マク
ロを配布する目的がある場合はそうしてください.

@c The first requirement is to pay great attention to the quotation.  For
@c more details, see @ref{Autoconf Language}, and @ref{M4 Quotation}.
@c 
最初に必要なことは,引用符に大きく注意を払うことです.詳細は,
@ref{Autoconf Language}と@ref{M4 Quotation}を参照してください.

@c Do not try to invent new interfaces.  It is likely that there is a macro
@c in Autoconf that resembles the macro you are defining: try to stick to
@c this existing interface (order of arguments, default values, etc.).  We
@c @emph{are} conscious that some of these interfaces are not perfect;
@c nevertheless, when harmless, homogeneity should be preferred over
@c creativity.
@c 
新たなインターフェースの発明は試みないでください.定義しているマクロに似
ているAutoconfマクロが存在することはよくあります.この既存のインターフェー
スに従ってみてください(引数の順序,デフォルト値,等々).我々は,これらの
インターフェースに完全でないものがあることは,意識@emph{しています}.そ
れにもかかわらず,無害なときは,創造性より均質性が好まれるでしょう.

@c Be careful about clashes both between M4 symbols and between shell
@c variables.
@c 
M4シンボル間とシェル変数間の両方の衝突に注意してください.

@c If you stick to the suggested M4 naming scheme (@pxref{Macro Names}),
@c you are unlikely to generate conflicts.  Nevertheless, when you need to
@c set a special value, @emph{avoid using a regular macro name}; rather,
@c use an ``impossible'' name.  For instance, up to version 2.13, the macro
@c @code{AC_SUBST} used to remember what @var{symbol}s were already defined
@c by setting @code{AC_SUBST_@var{symbol}}, which is a regular macro name.
@c But since there is a macro named @code{AC_SUBST_FILE}, it was just
@c impossible to @samp{AC_SUBST(FILE)}!  In this case,
@c @code{AC_SUBST(@var{symbol})} or @code{_AC_SUBST(@var{symbol})} should
@c have been used (yes, with the parentheses)@dots{}or better yet, high-level
@c macros such as @code{AC_EXPAND_ONCE}.
@c 
推奨されるM4命名規則(@pxref{Macro Names})に従う場合,衝突が生じることは
あまりないでしょう.それにもかかわらず,特殊な値を設定する必要があるとき,
@emph{通常のマクロ名を使用することを避けてください}.``信じられない''名
前を使用する代わりです.例えば,バージョン2.13までは,通常のマクロ名
@code{AC_SUBST_@var{symbol}}を設定することで既に定義されている
@var{symbol}を記憶するため,マクロ@code{AC_SUBST}を使用していました.し
かし,@code{AC_SUBST_FILE}と命名されているマクロが存在するので,
@samp{AC_SUBST(FILE)}を使用することはできませんでした!この場合,
@code{AC_SUBST(@var{symbol})}や@code{_AC_SUBST(@var{symbol})}が使用され
るべきでした(そうです,カッコは使用します)@dots{}または,より良い方法と
して,@code{AC_EXPAND_ONCE}のようなハイレベルのマクロを使用すべきでした.

@c No Autoconf macro should ever enter the user-variable name space; i.e.,
@c except for the variables that are the actual result of running the
@c macro, all shell variables should start with @code{ac_}.  In
@c addition, small macros or any macro that is likely to be embedded in
@c other macros should be careful not to use obvious names.
@c 
Autoconfマクロは,ユーザ変数の名前空間に入るべきではありません.すなわち,
実際のマクロの実行結果となる変数以外の,全てシェル変数は@code{ac_} で始
めるべきです.さらに,小さなマクロや他のマクロに埋め込まれるようなマクロ
は,明示的な名前を使用しないように注意すべきです.

@cindex @code{dnl}
@c Do not use @code{dnl} to introduce comments: most of the comments you
@c are likely to write are either header comments which are not output
@c anyway, or comments that should make their way into @file{configure}.
@c There are exceptional cases where you do want to comment special M4
@c constructs, in which case @code{dnl} is right, but keep in mind that it
@c is unlikely.
@c 
コメントを導入するために,@code{dnl}を使用しないでください.書こうとして
いるコメントのほとんどは,出力されないヘッダコメント,または,
@file{configure}に書かれるべきコメントです.特殊なM4の構成のコメントが欲
しい場合は例外があり,その場合は@code{dnl}が正しいのですが,あまりないこ
とだということを覚えておいてください.

@c M4 ignores the leading spaces before each argument, use this feature to
@c indent in such a way that arguments are (more or less) aligned with the
@c opening parenthesis of the macro being called.  For instance, instead of
@c 
M4は,引数に前置されるスペースを無視します.呼び出されているマクロの開カッ
コに,引数が整列するように字下げするために,この特徴を使用してください.
例えば,以下の代わりを考えます.

@example
AC_CACHE_CHECK(for EMX OS/2 environment,
ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
[ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
@end example

@noindent
@c write
@c 
以下のように書いてください.

@example
AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])
@end example

@noindent
@c or even
@c 
または,以下のようにしてください.

@example
AC_CACHE_CHECK([for EMX OS/2 environment],
               [ac_cv_emxos2],
               [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
                                                   [return __EMX__;])],
                                  [ac_cv_emxos2=yes],
                                  [ac_cv_emxos2=no])])
@end example

@c When using @code{AC_RUN_IFELSE} or any macro that cannot work when
@c cross-compiling, provide a pessimistic value (typically @samp{no}).
@c 
@code{AC_RUN_IFELSE}や,クロスコンパイルで動作不可能なマクロを使用してい
るとき,悲観的な値(通常は@samp{no})を提供してください.

@c Feel free to use various tricks to prevent auxiliary tools, such as
@c syntax-highlighting editors, from behaving improperly.  For instance,
@c instead of:
@c 
構文をハイライト表示するエディタのような,補助ツールが不適切に動作するこ
とを避けるため,様々な手段を自由に使用してください.例えば以下を考えます.

@example
m4_bpatsubst([$1], [$"])
@end example

@noindent
@c use
@c 
以下を使用してください.

@example
m4_bpatsubst([$1], [$""])
@end example

@noindent
@c so that Emacsen do not open an endless ``string'' at the first quote.
@c For the same reasons, avoid:
@c 
それは,Emacsenが最初の引用符で終りのない``文字列''を開いたままにしない
ようにするためです.同じ理由から以下のようなことは避けてください.

@example
test $[#] != 0
@end example

@noindent
@c and use:
@c 
以下を使用してください.

@example
test $[@@%:@@] != 0
@end example

@noindent
@c Otherwise, the closing bracket would be hidden inside a @samp{#}-comment,
@c breaking the bracket-matching highlighting from Emacsen.  Note the
@c preferred style to escape from M4: @samp{$[1]}, @samp{$[@@]}, etc.  Do
@c not escape when it is unnecessary.  Common examples of useless quotation
@c are @samp{[$]$1} (write @samp{$$1}), @samp{[$]var} (use @samp{$var}),
@c etc.  If you add portability issues to the picture, you'll prefer
@c @samp{$@{1+"$[@@]"@}} to @samp{"[$]@@"}, and you'll prefer do something
@c better than hacking Autoconf @code{:-)}.
@c 
そうしない場合,閉カッコは@samp{#}コメント内に隠され,Emacsenのカッコ一
致のハイライト表示を破壊します.好ましいスタイルは,M4からエスケープされ
るように注意してください.@samp{$[1]},@samp{$[@@]},等です.不必要なと
きにエスケープしないようにしてください.意味のない引用符の一般的な例は,
@samp{[$]$1}(@samp{$$1}と書いてください),@samp{[$]var}(@samp{$var}を使
用してください),等です.移植性の問題をこの状態に加える場合,
@samp{"[$]@@"}より@samp{$@{1+"$[@@]"@}}にした方が良く,Autoconfをハッキ
ングするより何か他のことをした方が良いでしょう@code{:-)}.

@c When using @command{sed}, don't use @option{-e} except for indenting
@c purpose.  With the @code{s} command, the preferred separator is @samp{/}
@c unless @samp{/} itself is used in the command, in which case you should
@c use @samp{,}.
@c 
@command{sed}を使用しているとき,字下げの目的以外で@option{-e}を使用しな
いでください.@code{s}コマンドを用いた場合,@samp{/}自身がコマンドで使用
されない限り,優先されるセパレータは@samp{/}にし,コマンドで使用される場
合は@samp{,}を使用すべきです.

@c @xref{Macro Definitions}, for details on how to define a macro.  If a
@c macro doesn't use @code{AC_REQUIRE} and it is expected to never be the
@c object of an @code{AC_REQUIRE} directive, then use @code{m4_define}.  In
@c case of doubt, use @code{AC_DEFUN}.  All the @code{AC_REQUIRE}
@c statements should be at the beginning of the macro, @code{dnl}'ed.
@c 
マクロ定義の方法の詳細は,@xref{Macro Definitions}.  マクロで
@code{AC_REQUIRE}を使用しておらず,@code{AC_REQUIRE}ディレクティブのオブ
ジェクトがないことを期待する場合,@code{m4_define}を使用してください.疑
わしい場合は,@code{AC_DEFUN}を使用してください.全ての@code{AC_REQUIRE} 
文は,@code{dnl}されているマクロの最初に書くべきです.

@c You should not rely on the number of arguments: instead of checking
@c whether an argument is missing, test that it is not empty.  It provides
@c both a simpler and a more predictable interface to the user, and saves
@c room for further arguments.
@c 
引数の数に依存すべきではありません.引数が足りないことを調査する代わりに,
空でないことをテストしてください.より簡単でより予測可能なインターフェー
スをユーザに提供し,余分な引数に対する余地を節約してください.

@c Unless the macro is short, try to leave the closing @samp{])} at the
@c beginning of a line, followed by a comment that repeats the name of the
@c macro being defined.  This introduces an additional newline in
@c @command{configure}; normally, that is not a problem, but if you want to
@c remove it you can use @samp{[]dnl} on the last line.  You can similarly
@c use @samp{[]dnl} after a macro call to remove its newline.  @samp{[]dnl}
@c is recommended instead of @samp{dnl} to ensure that M4 does not
@c interpret the @samp{dnl} as being attached to the preceding text or
@c macro output.  For example, instead of:
@c 
マクロが短くない場合は,行の最初に@samp{])}を残し,定義されているマクロ
の名前を繰り返すコメントを続けてください.これは,@command{configure}に
余分な改行を導入します.通常は問題ありませんが,削除したい場合は,行の最
後に@samp{[]dnl}を使用することが可能です.同様に,マクロ呼び出しの後に,
改行を削除するため,@samp{[]dnl}を使用することも可能です.M4が@samp{dnl} 
をテキストやマクロ出力の前に付けられているものとして解釈しないことを確実
にするため,@samp{[]dnl}は@samp{dnl}の代わりとして推奨されています.例え
ば以下の代わりを考えます.

@example
AC_DEFUN([AC_PATH_X],
[AC_MSG_CHECKING([for X])
AC_REQUIRE_CPP()
@r{# @dots{}omitted@dots{}}
  AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
fi])
@end example

@noindent
@c you would write:
@c 
以下のように書くべきです.

@example
AC_DEFUN([AC_PATH_X],
[AC_REQUIRE_CPP()[]dnl
AC_MSG_CHECKING([for X])
@r{# @dots{}omitted@dots{}}
  AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
fi[]dnl
])# AC_PATH_X
@end example

@c If the macro is long, try to split it into logical chunks.  Typically,
@c macros that check for a bug in a function and prepare its
@c @code{AC_LIBOBJ} replacement should have an auxiliary macro to perform
@c this setup.  Do not hesitate to introduce auxiliary macros to factor
@c your code.
@c 
マクロが長い場合,論理的な塊に分けてみてください.通常マクロは,関数のバ
グを調査し,このセットアップを実行するための補助マクロがある
@code{AC_LIBOBJ}の置換を準備します.コードの要素に補助マクロを導入するこ
とをためらわないでください.

@c In order to highlight the recommended coding style, here is a macro
@c written the old way:
@c 
推奨されるコーディングスタイルを強調するために,古い手法で書かれているマ
クロを紹介します.

@example
dnl Check for EMX on OS/2.
dnl _AC_EMXOS2
AC_DEFUN(_AC_EMXOS2,
[AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
ac_cv_emxos2=yes, ac_cv_emxos2=no)])
test "$ac_cv_emxos2" = yes && EMXOS2=yes])
@end example

@noindent
@c and the new way:
@c 
新しい方法は以下のようにします.

@example
# _AC_EMXOS2
# ----------
# Check for EMX on OS/2.
m4_define([_AC_EMXOS2],
[AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
                   [ac_cv_emxos2=yes],
                   [ac_cv_emxos2=no])])
test "$ac_cv_emxos2" = yes && EMXOS2=yes[]dnl
])# _AC_EMXOS2
@end example




@c ============================================= Portable Shell Programming

@node Portable Shell
@c @chapter Portable Shell Programming
@chapter 移植性のあるシェルプログラミング

@c When writing your own checks, there are some shell-script programming
@c techniques you should avoid in order to make your code portable.  The
@c Bourne shell and upward-compatible shells like the Korn shell and Bash
@c have evolved over the years, but to prevent trouble, do not take
@c advantage of features that were added after @sc{unix} version 7, circa
@c 1977 (@pxref{Systemology}).
@c 
独自の調査を書いているとき,コードを移植性の高いものにするため,使用を避
けるべきシェルスクリプトプログラムのテクニックもあります.Bourneシェルと, 
BashとKornシェルのような上位互換性があるシェルは,何年もかけて進展しまし
たが,問題を避けるために,@sc{unix}バージョン7の以降の1977年頃に加えられ
た機能を利用しないでください(@pxref{Systemology}).

@c You should not use shell functions, aliases, negated character
@c classes, or other features that are not found in all Bourne-compatible
@c shells; restrict yourself to the lowest common denominator.  Even
@c @code{unset} is not supported by all shells!  Also, include a space
@c after the exclamation point in interpreter specifications, like this:
@c 
シェル関数,エイリアス,無効な文字クラスや,Bourneシェル互換のものでは見
つからないすべての機能を使用するべきではありません.最小公倍数に制限され
てます.@code{unset}さえ,全てのシェルではサポートしていません!また,以
下のように,インタプリタ仕様として,感嘆符の後にスペースを含めてください.

@example
#! /usr/bin/perl
@end example

@noindent
@c If you omit the space before the path, then 4.2@acronym{BSD} based systems
@c (such as DYNIX) will ignore the line, because they interpret
@c @samp{#! /} as a 4-byte magic number.  Some old systems have quite
@c small limits on the length of the @samp{#!} line too, for instance 32
@c bytes (not including the newline) on SunOS 4.
@c 
パスの前のスペースを省略する場合,(DYNIXのような)4.2@acronym{BSD}を基本
とするシステムは,@samp{#! /}は4バイトのマジックナンバーとして解釈される
ので,その行を無視します.古いシステムでは,@samp{#!}行の長さにも小さな
制限があり,例えばSunOS 4では,(改行を含めず)32バイトになります.

@c The set of external programs you should run in a @command{configure} script
@c is fairly small.  @xref{Utilities in Makefiles,, Utilities in
@c Makefiles, standards, @acronym{GNU} Coding Standards}, for the list.  This
@c restriction allows users to start out with a fairly small set of
@c programs and build the rest, avoiding too many interdependencies between
@c packages.
@c 
@command{configure}スクリプトで実行すべき外部プログラムの設定は,かなり
小さくなっています.リストは,@xref{Utilities in Makefiles, , Utilities
in Makefiles, standards, @acronym{GNU} Coding Standards}.  この制限で,
ユーザは,かなり小さいプログラム設定から残りをビルドすることが可能になっ
ていて,パッケージ間の独立部分を多くし過ぎることを避けることができます.

@c Some of these external utilities have a portable subset of features; see
@c @ref{Limitations of Usual Tools}.
@c 
これらの外部ユーティリティには,移植性の高い機能のサブセットがあります.
@ref{Limitations of Usual Tools}を参照してください.

@c There are other sources of documentation about shells.  See for instance
@c @href{http://www.faqs.org/faqs/unix-faq/shell/, the Shell FAQs}.
@c 
シェルに関するドキュメントのソースは他にもあります.例えば,
@href{http://www.faqs.org/faqs/unix-faq/shell/, the Shell FAQs}を参照し
てください.

@menu
* Shellology::                  A zoology of shells
* Here-Documents::              Quirks and tricks
* File Descriptors::            FDs and redirections
* File System Conventions::     File- and pathnames
* Shell Substitutions::         Variable and command expansions
* Assignments::                 Varying side effects of assignments
* Parentheses::                 Parentheses in shell scripts
* Special Shell Variables::     Variables you should not change
* Limitations of Builtins::     Portable use of not so portable /bin/sh
* Limitations of Usual Tools::  Portable use of portable tools
* Limitations of Make::         Portable Makefiles
@end menu

@node Shellology
@c @section Shellology
@section シェル

@c There are several families of shells, most prominently the Bourne family
@c and the C shell family which are deeply incompatible.  If you want to
@c write portable shell scripts, avoid members of the C shell family.  The
@c @href{http://www.faqs.org/faqs/unix-faq/shell/shell-differences/, the
@c Shell difference FAQ} includes a small history of Unix shells, and a
@c comparison between several of them.
@c 
いくつかのシェルのファミリーがあり,最も重要なものは,Bourneファミリーと
Cシェルファミリーで,それらは全く互換性がありません.移植性の高いシェル
スクリプトを書きたい場合,Cシェルファミリーのメンバーは避けてください.
@href{http://www.faqs.org/faqs/unix-faq/shell/shell-differences/, the
Shell difference FAQ}には,Unixシェルの小さな歴史と,それらの間の比較が
書かれています.

@c Below we describe some of the members of the Bourne shell family.
@c 
以下で,Bourneシェルファミリーのメンバーを,いくつか説明していきます.

@table @asis
@item Ash
@cindex Ash
@c @command{ash} is often used on @acronym{GNU}/Linux and @acronym{BSD}
@c systems as a light-weight Bourne-compatible shell.  Ash 0.2 has some
@c bugs that are fixed in the 0.3.x series, but portable shell scripts
@c should work around them, since version 0.2 is still shipped with many
@c @acronym{GNU}/Linux distributions.
@c 
@command{ash}は,動作の軽いBourne互換シェルとして@acronym{GNU}/Linuxと
@acronym{BSD}システムでよく使用されています.Ash 0.2には0.3.xシリーズで
修正されているバグがいくつかありますが,バージョン0.2は多くの
@acronym{GNU}/Linux 配布物で配布されているので,移植性の高いシェルスクリ
プトではそれを回避すべきです.

@c To be compatible with Ash 0.2:
@c 
Ash 0.2での互換性のため以下のようにしてください.

@itemize @minus
@item
@c don't use @samp{$?} after expanding empty or unset variables:
@c 
空や設定されていない変数を展開した後で,@samp{$?}を使用しないでください.

@example
foo=
false
$foo
echo "Don't use it: $?"
@end example

@item
@c don't use command substitution within variable expansion:
@c 
変数の展開でコマンドの代入を使用しないでください.

@example
cat $@{FOO=`bar`@}
@end example

@item
@c beware that single builtin substitutions are not performed by a
@c subshell, hence their effect applies to the current shell!  @xref{Shell
@c Substitutions}, item ``Command Substitution''.
@c 
単一の組み込みの代入は,その効果が現在のシェルに適用されるため,サブシェ
ルで実行されないことに注意してください.アイテム``コマンドの代入''につい
ては,@xref{Shell Substitutions}.
@end itemize

@item Bash
@cindex Bash
@c To detect whether you are running @command{bash}, test if
@c @code{BASH_VERSION} is set.  To disable its extensions and require
@c @acronym{POSIX} compatibility, run @samp{set -o posix}.  @xref{Bash POSIX
@c Mode,, Bash @acronym{POSIX} Mode, bash, The @acronym{GNU} Bash Reference
@c Manual}, for details.
@c 
@command{bash}を実行しているかどうかを検出するために,
@code{BASH_VERSION}が設定されているかどうかをテストしてください.その拡
張を利用不可能にし,@acronym{POSIX}互換性を要求するため,@samp{set -o
posix} を実行してください.詳細は,@xref{Bash POSIX Mode,, Bash
@acronym{POSIX} Mode, bash, The @acronym{GNU} Bash Reference Manual}.

@c @item Bash 2.05 and later
@item Bash 2.05とそれ以降
@cindex Bash 2.05 and later
@c Versions 2.05 and later of @command{bash} use a different format for the
@c output of the @command{set} builtin, designed to make evaluating its
@c output easier.  However, this output is not compatible with earlier
@c versions of @command{bash} (or with many other shells, probably).  So if
@c you use @command{bash} 2.05 or higher to execute @command{configure},
@c you'll need to use @command{bash} 2.05 for all other build tasks as well.
@c 
バージョン2.05とそれ以降の@command{bash}は,@command{set}組み込みコマン
ドの出力に対して,その出力をより容易に評価できるように設計されているので,
異なる書式を使用しています.しかし,この出力はそれ以前のバージョンの
@command{bash}(や,おそらくそれ以外の多くのシェル)と互換性がありません.
そのため,@command{bash} 2.05やそれ以上のものを@command{configure}の実行
に使用している場合,それ以外のすべてのビルドの作業に対しても,同じように
@command{bash} 2.05を使用する必要があるでしょう.

@item Ksh
@prindex Ksh
@prindex Korn shell
@prindex @samp{ksh88}
@prindex @samp{ksh93}
@c The Korn shell is compatible with the Bourne family and it mostly
@c conforms to @acronym{POSIX}.  It has two major variants commonly
@c called @samp{ksh88} and @samp{ksh93}, named after the years of initial
@c release.  It is usually called @command{ksh}, but Solaris systems have
@c three variants:
@c 
KornシェルはBourneファミリーと互換性があり,@acronym{POSIX}にほとんど準
拠しています.一般的に@samp{ksh88}と@samp{ksh93}という二つの有名な変種が
あり,最初のリリースの年で後から命名されました.それらは通常
@command{ksh}と呼ばれていますが,Solarisシステムには三つの変種があります.
@c @prindex @command{/usr/bin/ksh} on Solaris
@prindex Solaris上の@command{/usr/bin/ksh}
@c @command{/usr/bin/ksh} is @samp{ksh88},
@c 
@command{/usr/bin/ksh}は@samp{ksh88}です.
@c @prindex @command{/usr/xpg4/bin/sh} on Solaris
@prindex Solaris上の@command{/usr/xpg4/bin/sh}
@c @command{/usr/xpg4/bin/sh} is a @acronym{POSIX}-compliant variant of
@c @samp{ksh88}, and
@c 
@command{/usr/xpg4/bin/sh}は@acronym{POSIX}準拠の@samp{ksh88}の類似物で
す.
@c @prindex @command{/usr/dt/bin/dtksh} on Solaris
@prindex Solaris上の@command{/usr/dt/bin/dtksh}
@c @command{/usr/dt/bin/dtksh} is @samp{ksh93}.  @command{/usr/bin/ksh}
@c is standard on Solaris; the other variants are parts of optional
@c packages.  There is no extra charge for these packages, but they are
@c not part of a minimal OS install and therefore some installations may
@c not have it.
@c 
@command{/usr/dt/bin/dtksh}は@samp{ksh93}です.@command{/usr/bin/ksh}が
Soralisの標準です.それ以外の類似物はオプションパッケージの一部です.こ
れらのパッケージには追加の変更はありませんが.それらは最小限のOSのインス
トールの一部ではないので,インストール状況によっては無いかもしれません.
@prindex @samp{pdksh}
@c A public-domain clone of the Korn shell called @samp{pdksh} is also
@c widely available: it has most of the @samp{ksh88} features along with
@c a few of its own.
@c 
パブリックドメインの@samp{pdksh}と呼ばれているKornシェルのクローンも広く
利用可能になっています.それは,いくつか独自のものがありますが
@samp{ksh88}の機能のほとんどがあります.

@item Zsh
@cindex Zsh
@c To detect whether you are running @command{zsh}, test if
@c @code{ZSH_VERSION} is set.  By default @command{zsh} is @emph{not}
@c compatible with the Bourne shell: you have to run @samp{emulate sh} and
@c set @code{NULLCMD} to @samp{:}.  @xref{Compatibility,, Compatibility,
@c zsh, The Z Shell Manual}, for details.
@c 
@command{zsh}が実行されているかどうかを検出するために,
@code{ZSH_VERSION}が設定されているかどうかをテストしてください.デフォル
トで,@command{zsh}はBourneと互換性はあり@emph{ません}.@samp{emulate
sh}を実行し,@code{NULLCMD}を@samp{:}に設定する必要があります.詳細は,
@xref{Compatibility,, Compatibility, zsh, The Z Shell Manual}.

@c Zsh 3.0.8 is the native @command{/bin/sh} on Mac OS X 10.0.3.
@c 
Zsh 3.0.8は,Mac OS X 10.0.3でのネイティブな@command{/bin/sh}です.
@end table

@c The following discussion between Russ Allbery and Robert Lipe is worth
@c reading:
@c 
Russ AllberyとRobert Lipeの間でなされた,以下の議論は読む価値があります.

@noindent
Russ Allbery:

@quotation
@c The @acronym{GNU} assumption that @command{/bin/sh} is the one and only shell
@c leads to a permanent deadlock.  Vendors don't want to break users'
@c existing shell scripts, and there are some corner cases in the Bourne
@c shell that are not completely compatible with a @acronym{POSIX} shell.  Thus,
@c vendors who have taken this route will @emph{never} (OK@dots{}``never say
@c never'') replace the Bourne shell (as @command{/bin/sh}) with a
@c @acronym{POSIX} shell.
@c 
@command{/bin/sh}が唯一のシェルであるという@acronym{GNU}仮定では,永久に
行き詰まってしまいます.ベンダーは,ユーザの既存のシェルスクリプトを壊し
たくはありませんし,Bourneシェルには@acronym{POSIX}シェルと完全に互換で
はない部分もあります.このため,この方法を採用するベンダーは,@emph{決し
て} (OK@dots{}``決して,決してとは言わないよ'')Bourneシェルを
(@command{/bin/sh}として)@acronym{POSIX}シェルで置き換えないでしょう.
@end quotation

@noindent
Robert Lipe:

@quotation
@c This is exactly the problem.  While most (at least most System V's) do
@c have a Bourne shell that accepts shell functions most vendor
@c @command{/bin/sh} programs are not the @acronym{POSIX} shell.
@c 
これは本当に問題です.ほとんどのもの(少なくともほとんどのSystem V)はシェ
ル関数を受け入れるBourneシェルがあるのですが,ほとんどのベンダーの
@command{/bin/sh}は@acronym{POSIX}シェルではありません.

@c So while most modern systems do have a shell @emph{somewhere} that meets the
@c @acronym{POSIX} standard, the challenge is to find it.
@c 
そのため,ほとんど現在のシステムは@acronym{POSIX}標準に適合しているシェ
ルが@emph{どこかに}あるのですが,問題はそれを見つけることです.
@end quotation

@node Here-Documents
@c @section Here-Documents
@section ヒアドキュメント

@c Don't rely on @samp{\} being preserved just because it has no special
@c meaning together with the next symbol.  In the native @command{/bin/sh}
@c on Open@acronym{BSD} 2.7 @samp{\"} expands to @samp{"} in here-documents with
@c unquoted delimiter.  As a general rule, if @samp{\\} expands to @samp{\}
@c use @samp{\\} to get @samp{\}.
@c 
@samp{\}は,次のシンボルと一緒になって特別の意味を持たないので,維持され
る@samp{\}に依存しないでください.Open@acronym{BSD} 2.7のネイティブな
@command{/bin/sh}では,@samp{\"}は@samp{"}に展開され,ヒアドキュメントで
は引用符で囲まれていない分離子として用いられます.一般的な規則として,
@samp{\\}が@samp{\}に展開される場合,@samp{\}を得るために@samp{\\} を使
用してください.

@c With Open@acronym{BSD} 2.7's @command{/bin/sh}
@c 
Open@acronym{BSD} 2.7の@command{/bin/sh}では,以下のようになります.

@example
@group
$ @kbd{cat <<EOF
> \" \\
> EOF}
" \
@end group
@end example

@noindent
@c and with Bash:
@c 
そして,Bashでは以下のようになります.

@example
@group
bash-2.04$ @kbd{cat <<EOF
> \" \\
> EOF}
\" \
@end group
@end example


@c Many older shells (including the Bourne shell) implement here-documents
@c inefficiently.  And some shells mishandle large here-documents: for
@c example, Solaris 8 @command{dtksh}, which is derived from
@c @command{ksh} M-12/28/93d, mishandles variable expansion that occurs
@c on 1024-byte buffer boundaries within a here-document.  Users can
@c generally fix these problems by using a faster or more reliable
@c shell, e.g., by using the command @samp{bash ./configure} rather than
@c plain @samp{./configure}.
@c 
多くの古い(Bourneシェルを含む)シェルでは,ヒアドキュメントは非効率に実装
されています.大きなヒアドキュメントを間違って扱うシェルもあります.例え
ば,Solaris 8 @command{dtksh}は@command{ksh} M-12/28/93dで提供されていて,
ヒアドキュメントを1024バイトのバッファの境界で間違った変数の展開を生じま
す.ユーザは一般的に,より速くより信頼性の高いシェルを使用して,これらの
問題を修正することが可能で,例えば,そのまま@samp{./configure}するのでは
なく,コマンド@samp{bash ./configure}を使用します.

@c Some shells can be extremely inefficient when there are a lot of
@c here-documents inside a single statement.  For instance if your
@c @file{configure.ac} includes something like:
@c 
シェルによっては,単一の文の中にヒアドキュメントが多過ぎるとき,非常に非
効率になるものもあります.例えば,@file{configure.ac}に以下のようなもの
含めたとします.

@example
@group
if <cross_compiling>; then
  assume this and that
else
  check this
  check that
  check something else
  @dots{}
  on and on forever
  @dots{}
fi
@end group
@end example

@c A shell parses the whole @code{if}/@code{fi} construct, creating
@c temporary files for each here document in it.  Some shells create links
@c for such here-documents on every @code{fork}, so that the clean-up code
@c they had installed correctly removes them.  It is creating the links
@c that can take the shell forever.
@c 
シェルは,その中のそれぞれのヒアドキュメントに対して一時ファイルを作成し
ながら,@code{if}/@code{fi}の文脈全体をパースします.@code{fork}ごとにそ
のようなヒアドキュメントに対してリンクを作成するシェルもあり,インストー
ルされた後のクリーンアップコードで正しく削除されます.それは,シェルが永
久に受け入れられるリンクを作成しているのです.

@c Moving the tests out of the @code{if}/@code{fi}, or creating multiple
@c @code{if}/@code{fi} constructs, would improve the performance
@c significantly.  Anyway, this kind of construct is not exactly the
@c typical use of Autoconf.  In fact, it's even not recommended, because M4
@c macros can't look into shell conditionals, so we may fail to expand a
@c macro when it was expanded before in a conditional path, and the
@c condition turned out to be false at run-time, and we end up not
@c executing the macro at all.
@c 
@code{if}/@code{fi}の外部のテストを移動したり,複数の@code{if}/@code{fi}
の文脈を作成したりすることで,かなり動作が改善されるでしょう.とにかく,
こういった構成は,典型的なAutoconfの使用では正しくありません.実際,M4マ
クロは,シェルの条件文を見ることができないので,それは推奨されておらず,
条件分岐の前にそれが展開され,実行時に条件文が失敗だと分かるとき,マクロ
展開に失敗するかもしれず,マクロの実行を完全に終了できないでしょう.

@node File Descriptors
@c @section File Descriptors
@section ファイルディスクリプタ

@c Some file descriptors shall not be used, since some systems, admittedly
@c arcane, use them for special purpose:
@c 
システムによっては,明らかに不可解なのですが,特殊な目的で使用しているた
め,ファイルディスクリプタには使用すべきではないものもあります.

@display
@c 3 --- some systems may open it to @samp{/dev/tty}.
@c 4 --- used on the Kubota Titan.
@c 
3 --- それを@samp{/dev/tty}として開くシステムもあります.
4 --- Kubota Titanで使用されています.
@end display

@c Don't redirect the same file descriptor several times, as you are doomed
@c to failure under Ultrix.
@c 
Ultrixでは異常終了だと告げられるので,同じファイルディスクリプタに複数回
同じファイルをリダイレクトしないでください.

@example
ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
UWS V4.4 (Rev. 11)
$ @kbd{eval 'echo matter >fullness' >void}
illegal io
$ @kbd{eval '(echo matter >fullness)' >void}
illegal io
$ @kbd{(eval '(echo matter >fullness)') >void}
Ambiguous output redirect.
@end example

@noindent
@c In each case the expected result is of course @file{fullness} containing
@c @samp{matter} and @file{void} being empty.
@c 
それぞれの場合で,期待される結果はもちろん,@samp{matter}を含んでいる
@file{fullness}と,空の@file{void}です.

@c Don't try to redirect the standard error of a command substitution: it
@c must be done @emph{inside} the command substitution: when running
@c @samp{: `cd /zorglub` 2>/dev/null} expect the error message to
@c escape, while @samp{: `cd /zorglub 2>/dev/null`} works properly.
@c 
コマンドの代入のリダイレクトを標準エラー出力にしないでください.それは,
コマンドの代入の@emph{内部で}行なう必要があります.エラーメッセージを削
除することを期待して@samp{: `cd /zorglub` 2>/dev/null}を実行しているとき,
@samp{: `cd /zorglub 2>/dev/null`}は正しく動作します.

@c It is worth noting that Zsh (but not Ash nor Bash) makes it possible
@c in assignments though: @samp{foo=`cd /zorglub` 2>/dev/null}.
@c 
(AshでもBashでもない)Zshが割当を可能にすることに注意する価値はあります.
@samp{foo=`cd /zorglub` 2>/dev/null}.

@c Most shells, if not all (including Bash, Zsh, Ash), output traces on
@c stderr, even for sub-shells.  This might result in undesirable content
@c if you meant to capture the standard-error output of the inner command:
@c 
ほとんどのシェルでは,(Bash,Zsh,Ashを含め)全てではありませんが,標準エ
ラー出力を,サブシェルに対しても追跡しています.内部コマンドの標準エラー
出力を得る目的がある場合,これでは結果が望まない内容になるかもしれません.

@example
$ @kbd{ash -x -c '(eval "echo foo >&2") 2>stderr'}
$ @kbd{cat stderr}
+ eval echo foo >&2
+ echo foo
foo
$ @kbd{bash -x -c '(eval "echo foo >&2") 2>stderr'}
$ @kbd{cat stderr}
+ eval 'echo foo >&2'
++ echo foo
foo
$ @kbd{zsh -x -c '(eval "echo foo >&2") 2>stderr'}
@i{# Traces on startup files deleted here.}
$ @kbd{cat stderr}
+zsh:1> eval echo foo >&2
+zsh:1> echo foo
foo
@end example

@noindent
@c You'll appreciate the various levels of detail@enddots{}
@c 
様々なレベルの詳細が分かるでしょう@enddots{}

@c One workaround is to grep out uninteresting lines, hoping not to remove
@c good ones@enddots{}
@c 
一つの回避方法は,興味がない行をgrepで削除することで,良い行は削除しない
ことを期待しつつ@enddots{}

@c Don't try to move/delete open files, such as in @samp{exec >foo; mv foo
@c bar}; see @ref{Limitations of Builtins}, @command{mv} for more details.
@c 
@samp{exec >foo; mv foo bar}のように,開いているファイルの移動/削除の試
みはしないようにしてください.@command{mv}の詳細は,@ref{Limitations of
Builtins}を参照してください.

@node File System Conventions
@c @section File System Conventions
@section ファイルシステムの条件

@c While @command{autoconf} and friends will usually be run on some Unix
@c variety, it can and will be used on other systems, most notably @acronym{DOS}
@c variants.  This impacts several assumptions regarding file and
@c path names.
@c 
@command{autoconf}とその仲間達は,通常様々なUnixで実行されますが,それは
その他のシステムでも使用され,最も顕著なものとしては@acronym{DOS}の仲間
があげられます.このことは,ファイルとパス名に関する仮定に衝突します.

@noindent
@c For example, the following code:
@c 
例えば,以下のようなコードを考えます.

@example
case $foo_dir in
  /*) # Absolute
     ;;
  *)
     foo_dir=$dots$foo_dir ;;
esac
@end example

@noindent
@c will fail to properly detect absolute paths on those systems, because
@c they can use a drivespec, and will usually use a backslash as directory
@c separator.  The canonical way to check for absolute paths is:
@c 
それらのシステムではドライブスペックを使用していて,通常はディレクトリの
分離子としてバックスラッシュを使用しているため,絶対パスを正しく検出する
ことに失敗するでしょう.絶対パスに対する調査の標準的な方法は以下のとおり
です.

@example
case $foo_dir in
  [\\/]* | ?:[\\/]* ) # Absolute
     ;;
  *)
     foo_dir=$dots$foo_dir ;;
esac
@end example

@noindent
@c Make sure you quote the brackets if appropriate and keep the backslash as
@c first character (@pxref{Limitations of Builtins}).
@c 
適切な場合は角カッコの引用符で囲み,最初の文字としてのバックスラッシュを
保持していることを確認してください(@pxref{Limitations of Builtins}).

@c Also, because the colon is used as part of a drivespec, these systems don't
@c use it as path separator.  When creating or accessing paths, use the
@c @code{PATH_SEPARATOR} output variable instead.  @command{configure} sets this
@c to the appropriate value (@samp{:} or @samp{;}) when it starts up.
@c 
また,コロンがデバイス指定の一部として使用されているので,これらのシステ
ムではそれをパスの分離子として使用していません.パスを作成しているときや
パスにアクセスしているときは,代わりに@code{PATH_SEPARATOR}出力変数を使
用してください.@command{configure}は,開始時にこれを適切な値(@samp{:} 
または@samp{;})に設定します.

@c File names need extra care as well.  While @acronym{DOS}-based environments
@c that are Unixy enough to run @command{autoconf} (such as DJGPP) will
@c usually be able to handle long file names properly, there are still
@c limitations that can seriously break packages.  Several of these issues
@c can be easily detected by the
@c @href{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk}
@c package.
@c 
ファイル名にも余計な注意が必要になります.(DJGPPのような)
@command{autoconf}を十分に実行できるUnixのような@acronym{DOS}ベースの環
境では,通常長いファイル名を適切に扱うことが可能ですが,パッケージを壊し
てしまう深刻な制限も残っています.これらの問題のいくつかは,
@href{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk} パッ
ケージで容易に検出することが可能です.

@c A short overview follows; problems are marked with @sc{sfn}/@sc{lfn} to
@c indicate where they apply: @sc{sfn} means the issues are only relevant to
@c plain @acronym{DOS}, not to @acronym{DOS} boxes under Windows, while @sc{lfn}
@c identifies problems that exist even under Windows.
@c 
以下は簡単な全体像です.問題には,適用を示すため@sc{sfn}/@sc{lfn}で印が
ついています.@sc{sfn}は,Windows下の@acronym{DOS}窓ではなく,プレーンな
@acronym{DOS}にのみ関連する問題を意味し,一方@sc{lfn}は,Windowsでも存在
する問題を意味しています.

@table @asis
@c @item No multiple dots (@sc{sfn})
@item 複数のドットの禁止 (@sc{sfn})
@c @acronym{DOS} cannot handle multiple dots in filenames.  This is an especially
@c important thing to remember when building a portable configure script,
@c as @command{autoconf} uses a .in suffix for template files.
@c 
@acronym{DOS}はファイル名に複数のドットがあるものを扱うことが不可能です.
これは,@command{autoconf}は@file{.in}をテンプレートファイルの接尾子に使
用するので,移植性の高いconfigureスクリプトを構築しているときに覚えてお
く必要がある,特に重要なことです.

@c This is perfectly OK on Unices:
@c 
以下はUnix上では完全にOKです.

@example
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([source.c foo.bar])
AC_OUTPUT
@end example

@noindent
@c but it causes problems on @acronym{DOS}, as it requires @samp{config.h.in},
@c @samp{source.c.in} and @samp{foo.bar.in}.  To make your package more portable
@c to @acronym{DOS}-based environments, you should use this instead:
@c 
しかし,それは@samp{config.h.in},@samp{source.c.in},そして
@samp{foo.bar.in}が必要になるので,@acronym{DOS}では問題があります.パッ
ケージを@acronym{DOS}ベースの環境でより移植性を高くするため,その代わり
に以下を使用すべきです.

@example
AC_CONFIG_HEADERS([config.h:config.hin])
AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
AC_OUTPUT
@end example

@c @item No leading dot (@sc{sfn})
@item ドットの前置の禁止 (@sc{sfn})
@c @acronym{DOS} cannot handle filenames that start with a dot.  This is usually
@c not a very important issue for @command{autoconf}.
@c 
@acronym{DOS}はドットで始まるファイル名を扱うことが不可能です.これは通
常,@command{autoconf}に対してはあまり重要ではない問題です.

@c @item Case insensitivity (@sc{lfn})
@item 大文字小文字を区別しない (@sc{lfn})
@c @acronym{DOS} is case insensitive, so you cannot, for example, have both a
@c file called @samp{INSTALL} and a directory called @samp{install}.  This
@c also affects @command{make}; if there's a file called @samp{INSTALL} in
@c the directory, @samp{make install} will do nothing (unless the
@c @samp{install} target is marked as PHONY).
@c 
@acronym{DOS}は大文字小文字を区別しないので,例えば,@samp{INSTALL}とい
う名のファイルと@samp{install}という名のディレクトリの両方を持つことがで
きません.これは,@command{make}にも影響します.ディレクトリに
@samp{INSTALL}という名のファイルがある場合,@samp{make install}は
(@samp{install}がPHONY として印がついていないとき)何もしません.

@c @item The 8+3 limit (@sc{sfn})
@item 8+3の制限 (@sc{sfn})
@c Because the @acronym{DOS} file system only stores the first 8 characters of
@c the filename and the first 3 of the extension, those must be unique.
@c That means that @file{foobar-part1.c}, @file{foobar-part2.c} and
@c @file{foobar-prettybird.c} all resolve to the same filename
@c (@file{FOOBAR-P.C}).  The same goes for @file{foo.bar} and
@c @file{foo.bartender}.
@c 
@acronym{DOS}ファイルシステムでは,ファイル名の最初の8文字と最初の3文字
の拡張子のみ保存され,それらはユニークである必要があります.それは,
@file{foobar-part1.c},@file{foobar-part2.c},そして
@file{foobar-prettybird.c}の全ては同じ名前(@file{FOOBAR-P.C})になります.
@file{foo.bar}と@file{foo.bartender}も同じものになります.

@c Note: This is not usually a problem under Windows, as it uses numeric
@c tails in the short version of filenames to make them unique.  However, a
@c registry setting can turn this behavior off.  While this makes it
@c possible to share file trees containing long file names between @sc{sfn}
@c and @sc{lfn} environments, it also means the above problem applies there
@c as well.
@c 
注意:これは通常,ファイル名をユニークにするために短いバージョンでは数字
の後置を使用するので,Windowsでは問題になりません.しかし,レジストリの
設定でこの動作を停止可能です.これで長いファイル名を含むファイルのツリー
を,@sc{sfn}と@sc{lfn}の環境で共有することが可能になりますが,上記の問題
は同様に存在します.

@c @item Invalid characters
@item 無効な文字
@c Some characters are invalid in @acronym{DOS} filenames, and should therefore
@c be avoided.  In a @sc{lfn} environment, these are @samp{/}, @samp{\},
@c @samp{?}, @samp{*}, @samp{:}, @samp{<}, @samp{>}, @samp{|} and @samp{"}.
@c In a @sc{sfn} environment, other characters are also invalid.  These
@c include @samp{+}, @samp{,}, @samp{[} and @samp{]}.
@c 
@acronym{DOS}ファイル名で無効な文字もあり,そのため避けた方が良いでしょ
う.@sc{lfn}の環境では,@samp{/},@samp{\},@samp{?},@samp{*},@samp{:},
@samp{<},@samp{>},@samp{|},そして@samp{"}です.@sc{sfn}環境では,それ
以外にも無効になります.これには,@samp{+},@samp{,},@samp{[},そして
@samp{]}が含まれます.
@end table

@node Shell Substitutions
@c @section Shell Substitutions
@section シェルの代入

@c Contrary to a persistent urban legend, the Bourne shell does not
@c systematically split variables and back-quoted expressions, in particular
@c on the right-hand side of assignments and in the argument of @code{case}.
@c For instance, the following code:
@c 
persistent urban legendとは反対に,Bourneシェルは変数とバッククオートさ
れている式が整然と分かれておらず,特に右側の割り当てと@code{case}の引数
がそうです.例えば,以下のコードを考えます.

@example
case "$given_srcdir" in
.)  top_srcdir="`echo "$dots" | sed 's,/$,,'`"
*)  top_srcdir="$dots$given_srcdir" ;;
esac
@end example

@noindent
@c is more readable when written as:
@c 
以下のように書くと,より読みやすくなります.

@example
case $given_srcdir in
.)  top_srcdir=`echo "$dots" | sed 's,/$,,'`
*)  top_srcdir=$dots$given_srcdir ;;
esac
@end example

@noindent
@c and in fact it is even @emph{more} portable: in the first case of the
@c first attempt, the computation of @code{top_srcdir} is not portable,
@c since not all shells properly understand @code{"`@dots{}"@dots{}"@dots{}`"}.
@c Worse yet, not all shells understand @code{"`@dots{}\"@dots{}\"@dots{}`"}
@c the same way.  There is just no portable way to use double-quoted
@c strings inside double-quoted back-quoted expressions (pfew!).
@c 
そして,実際それは@emph{より}移植性が高くなります.最初の試みの最初の
caseで,全てのシェルが@code{"`@dots{}"@dots{}"@dots{}`"}を正しく解釈する
わけではないので,@code{top_srcdir}の計算結果は移植性が高くありません.
更に悪いことには,同様に@code{"`@dots{}\"@dots{}\"@dots{}`"}を全てのシェ
ルが解釈するわけではありません.二重引用符でバッククオートされている式の
内部で,二重引用符で囲まれた文字列を使用するための移植性を高める方法は全
くありません(pfew!).

@table @code
@item $@@
@cindex @samp{"$@@"}
@c One of the most famous shell-portability issues is related to
@c @samp{"$@@"}.  When there are no positional arguments, @acronym{POSIX} says
@c that @samp{"$@@"} is supposed to be equivalent to nothing, but the
@c original Unix Version 7 Bourne shell treated it as equivalent to
@c @samp{""} instead, and this behavior survives in later implementations
@c like Digital Unix 5.0.
@c 
最も有名なシェルの移植性の問題の一つは,@samp{"$@@"}との関連です.位置に
依存する引数が無いとき,@acronym{POSIX}では@samp{"$@@"}を何もないことと
等価になっていますが,オリジナルのUnixバージョン7のBourneシェルはその代
わりに@samp{""}として扱い,この動作はDigital Unix 5.0のようにそれ以降の
実装でも提供されています.

@c The traditional way to work around this portability problem is to use
@c @samp{$@{1+"$@@"@}}.  Unfortunately this method does not work with
@c Zsh (3.x and 4.x), which is used on Mac OS X@.  When emulating
@c the Bourne shell, Zsh performs word splitting on @samp{$@{1+"$@@"@}}:
@c 
この移植性の問題を回避する伝統的な方法は,@samp{$@{1+"$@@"@}}を使用する
ことです.残念ながら,この手法はMac OS Xでも使用されている,Zsh (3.x と
4.x)では動作しません.Bourneシェルをエミュレートしているとき,Zshは
@samp{$@{1+"$@@"@}}で単語の分離を実行します.

@example
zsh $ @kbd{emulate sh}
zsh $ @kbd{for i in "$@@"; do echo $i; done}
Hello World
!
zsh $ @kbd{for i in $@{1+"$@@"@}; do echo $i; done}
Hello
World
!
@end example

@noindent
@c Zsh handles plain @samp{"$@@"} properly, but we can't use plain
@c @samp{"$@@"} because of the portability problems mentioned above.
@c One workaround relies on Zsh's ``global aliases'' to convert
@c @samp{$@{1+"$@@"@}} into @samp{"$@@"} by itself:
@c 
Zshは,プレーンの@samp{"$@@"}をおそらく処理しますが,上記の移植性の問題
のため,プレーンの@samp{"$@@"}を使用することはできません.回避する方法の
一つは,@samp{$@{1+"$@@"@}}を@samp{"$@@"}に変換するZshの``global
aliases''に依存します.

@example
test "$@{ZSH_VERSION+set@}" = set && alias -g '$@{1+"$@@"@}'='"$@@"'
@end example

@c A more conservative workaround is to avoid @samp{"$@@"} if it is
@c possible that there may be no positional arguments.  For example,
@c instead of:
@c 
より保守的な回避方法は,位置に依存する引数を用いなくても良い限り,
@samp{"$@@"}を避けることです.例えば,以下の代わりを考えます.

@example
cat conftest.c "$@@"
@end example

@c you can use this instead:
@c 
この代わりに以下を使用することが可能です.

@example
case $# in
0) cat conftest.c;;
*) cat conftest.c "$@@";;
esac
@end example

@item $@{@var{var}:-@var{value}@}
@c Info cannot handle `:' in index entries.
@c @cindex $@{@var{var}:-@var{value}@}
@c 
@c Old @acronym{BSD} shells, including the Ultrix @code{sh}, don't accept the
@c colon for any shell substitution, and complain and die.
@c 
Ultrix @code{sh}を含め,古い@acronym{BSD}シェルはシェルの代入に対してコ
ロンを受け入れず,文句を言って終了します.

@item $@{@var{var}=@var{literal}@}
@cindex $@{@var{var}=@var{literal}@}
@c Be sure to quote:
@c 
引用符で囲まれていることを確かめてください.

@example
: $@{var='Some words'@}
@end example

@noindent
@c otherwise some shells, such as on Digital Unix V 5.0, will die because
@c of a ``bad substitution''.
@c 
それ以外のDigital Unix V 5.0のようなシェルでは,``bad substitution''のた
めに終了します.

@sp 1

@c Solaris' @command{/bin/sh} has a frightening bug in its interpretation
@c of this.  Imagine you need set a variable to a string containing
@c @samp{@}}.  This @samp{@}} character confuses Solaris' @command{/bin/sh}
@c when the affected variable was already set.  This bug can be exercised
@c by running:
@c 
Solarisの@command{/bin/sh}にはこの解釈に恐ろしいバグがあります.変数を
@samp{@}}を含む文字列に設定する必要があることを想像してください.この
@samp{@}}文字で,影響ある変数が既に設定されているとき,Solarisの
@command{/bin/sh}は混乱します.このバグは,以下のように実行することで作
動されるはずです.

@example
$ @kbd{unset foo}
$ @kbd{foo=$@{foo='@}'@}}
$ @kbd{echo $foo}
@}
$ @kbd{foo=$@{foo='@}'   # no error; this hints to what the bug is}
$ @kbd{echo $foo}
@}
$ @kbd{foo=$@{foo='@}'@}}
$ @kbd{echo $foo}
@}@}
 ^ ugh!
@end example

@c It seems that @samp{@}} is interpreted as matching @samp{$@{}, even
@c though it is enclosed in single quotes.  The problem doesn't happen
@c using double quotes.
@c 
@samp{@}}は,シングル引用符で囲まれている場合でも,@samp{$@{}に一致する
ものとして解釈されているようです.二重引用符を使用すると問題は生じません.

@item $@{@var{var}=@var{expanded-value}@}
@cindex $@{@var{var}=@var{expanded-value}@}
@c On Ultrix,
@c running
@c 
Ultrixで,以下を実行したとします.

@example
default="yu,yaa"
: $@{var="$default"@}
@end example

@noindent
@c will set @var{var} to @samp{M-yM-uM-,M-yM-aM-a}, i.e., the 8th bit of
@c each char will be set.  You won't observe the phenomenon using a simple
@c @samp{echo $var} since apparently the shell resets the 8th bit when it
@c expands $var.  Here are two means to make this shell confess its sins:
@c 
それは@var{var}を@samp{M-yM-uM-,M-yM-aM-a}に設定し,すなわち,全ての文字
の八番目のビットがセットされるでしょう.@samp{$var}を展開するとき,シェ
ルが八番目のビットを明示的にリセットするので,単純に@samp{echo $var}を使
用している現象が分かりません.このシェルにその違反で混乱させる二つの方法
は,以下のようになります.

@example
$ @kbd{cat -v <<EOF
$var
EOF}
@end example

@noindent
@c and
@c 
それと以下です.

@example
$ @kbd{set | grep '^var=' | cat -v}
@end example

@c One classic incarnation of this bug is:
@c 
このバグの古典的で典型的なものの一つは以下のものです.

@example
default="a b c"
: $@{list="$default"@}
for c in $list; do
  echo $c
done
@end example

@noindent
@c You'll get @samp{a b c} on a single line.  Why?  Because there are no
@c spaces in @samp{$list}: there are @samp{M- }, i.e., spaces with the 8th
@c bit set, hence no IFS splitting is performed!!!
@c 
単一行に@samp{a b c}を得るでしょう.なぜでしょうか?それは,@samp{$list}
にスペースが無いためです.@samp{M- },すなわち八ビット目を設定するスペー
スがあるので,IFSによる分離が実行されないのです!!!

@c One piece of good news is that Ultrix works fine with @samp{:
@c $@{list=$default@}}; i.e., if you @emph{don't} quote.  The bad news is
@c then that @acronym{QNX} 4.25 then sets @var{list} to the @emph{last} item of
@c @var{default}!
@c 
良いニュースの一つは,Ultrixが@samp{: $@{list=$default@}}で正確に動作す
ることです.すなわち,引用符で囲ま@emph{ない}場合です.悪いニュースとし
ては,@acronym{QNX} 4.25は,@var{list}を@var{default}の@emph{最後の}項目
に設定することです!

@c The portable way out consists in using a double assignment, to switch
@c the 8th bit twice on Ultrix:
@c 
移植性の高い方法は,Ultrixで八番目のビットを二回切替えるために,二重(引
用符による)代入を使用することです.

@example
list=$@{list="$default"@}
@end example

@noindent
@c @dots{}but beware of the @samp{@}} bug from Solaris (see above).  For safety,
@c use:
@c 
@dots{}しかし,Solarisの@samp{@}}のバグ(上記を参照してください)には用心
してください.安全にするには,以下を使用してください.

@example
test "$@{var+set@}" = set || var=@var{@{value@}}
@end example


@item `@var{commands}`
@cindex `@var{commands}`
@cindex Command Substitution
@c While in general it makes no sense, do not substitute a single builtin
@c with side effects, becauase Ash 0.2, trying to optimize, does not fork a
@c subshell to perform the command.
@c 
一般的には意味がありませんが,Ash 0.2では最適化のためコマンドを実行する
ためサブシェルをforkしないので,副作用のある単一の組み込み物を代入しない
でください.

@c For instance, if you wanted to check that @command{cd} is silent, do not
@c use @samp{test -z "`cd /`"} because the following can happen:
@c 
例えば,@command{cd}が何も出力しないことを調査したい場合,以下のことが生
じるかもしれないので,@samp{test -z "`cd /`"}を使用しないでください.

@example
$ @kbd{pwd}
/tmp
$ @kbd{test -z "`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

@c If you do use @samp{$(@var{commands})}, make sure that the commands
@c do not start with a parenthesis, as that would cause confusion with
@c a different notation @samp{$((@var{expression}))} that in modern
@c shells is an arithmetic expression not a command.  To avoid the
@c confusion, insert a space between the two opening parentheses.
@c 
@samp{$(@var{commands})}を使用する場合,異なる表記方法
@samp{$((@var{expression}))}は現在のシェルではコマンドではなく数式だと勘
違いするので,コマンドがカッコで始まらないように確かめて下さい.この勘違
いを避けるため,二つの開カッコの間にはスペースを挿入して下さい.

@end table


@node Assignments
@c @section Assignments
@section 代入

@c When setting several variables in a row, be aware that the order of the
@c evaluation is undefined.  For instance @samp{foo=1 foo=2; echo $foo}
@c gives @samp{1} with sh on Solaris, but @samp{2} with Bash.  You must use
@c @samp{;} to enforce the order: @samp{foo=1; foo=2; echo $foo}.
@c 
列にいくつかの変数を設定するとき,評価の順序が定義されていないことを覚え
ておいてください.例えば,@samp{foo=1 foo=2; echo $foo}は,Solarisの
@code{sh}では@samp{1}になりますが,Bashでは@samp{2}になります.順序を強
制するために@samp{;}を使用する必要があります.@samp{foo=1; foo=2; echo
$foo}のようにします.

@c Don't rely on the following to find @file{subdir/program}:
@c 
@file{subdir/program}を見つけるために,以下に依存しないようにしてくださ
い.

@example
PATH=subdir$PATH_SEPARATOR$PATH program
@end example

@noindent
@c as this does not work with Zsh 3.0.6.  Use something like this
@c instead:
@c 
これはZsh 3.0.6では動作しません.代わりに以下のようなものを使用してくだ
さい.

@example
(PATH=subdir$PATH_SEPARATOR$PATH; export PATH; exec program)
@end example

@c Don't rely on the exit status of an assignment: Ash 0.2 does not change
@c the status and propagates that of the last statement:
@c 
代入の終了ステータスに依存しないようにしてください.Ash 0.2はステータス
を変更せず,最後の文に伝搬します.

@example
$ @kbd{false || foo=bar; echo $?}
1
$ @kbd{false || foo=`:`; echo $?}
0
@end example

@noindent
@c and to make things even worse, @acronym{QNX} 4.25 just sets the exit status
@c to 0 in any case:
@c 
そして,更に悪いことに,@acronym{QNX} 4.25はあらゆる場合で終了ステータス
を0に設定します.

@example
$ @kbd{foo=`exit 1`; echo $?}
0
@end example

@c To assign default values, follow this algorithm:
@c 
デフォルト値を代入するために,以下のアルゴリズムを使用してください.

@enumerate
@item
@c If the default value is a literal and does not contain any closing
@c brace, use:
@c 
デフォルト値がリテラルで閉じカッコを含まない場合は以下を使用してください.

@example
: $@{var='my literal'@}
@end example

@item
@c If the default value contains no closing brace, has to be expanded, and
@c the variable being initialized will never be IFS-split (i.e., it's not a
@c list), then use:
@c 
デフォルト値が閉じカッコを含まず,展開されず,初期化されている変数がIFS 
で分けられていない(すなわち,リストでない)場合,以下を使用してください.

@example
: $@{var="$default"@}
@end example

@item
@c If the default value contains no closing brace, has to be expanded, and
@c the variable being initialized will be IFS-split (i.e., it's a list),
@c then use:
@c 
デフォルト値が閉じカッコを含まず,展開されず,初期化されている変数がIFS 
で分けられる(すなわち,リストの)場合,以下を使用してください.

@example
var=$@{var="$default"@}
@end example

@item
@c If the default value contains a closing brace, then use:
@c 
デフォルト値が閉じカッコを含む場合,以下を使用してください.

@example
test "$@{var+set@}" = set || var='$@{indirection@}'
@end example
@end enumerate

@c In most cases @samp{var=$@{var="$default"@}} is fine, but in case of
@c doubt, just use the latter.  @xref{Shell Substitutions}, items
@c @samp{$@{@var{var}:-@var{value}@}} and @samp{$@{@var{var}=@var{value}@}}
@c for the rationale.
@c 
ほとんどの場合,@samp{var=$@{var="$default"@}}で良いのですが,駄目なとき
は後者を使用してください.正当性のための,
@samp{$@{@var{var}:-@var{value}@}}と@samp{$@{@var{var}=@var{value}@}} の
項目は,@xref{Shell Substitutions}.

@node Parentheses
@c @section Parentheses in Shell Scripts
@section シェルスクリプト内のカッコ

@c Beware of two opening parentheses in a row, as some shell
@c implementations mishandle them.  For example, @samp{pdksh} 5.2.14
@c misparses the following code:
@c 
一列にある二つの開カッコは,シェルの実装によっては間違って処理されること
を覚えておいて下さい.例えば,@samp{pdksh} 5.2.14では以下のコードのパー
スを失敗します.

@example
if ((true) || false); then
  echo ok
fi
@end example

@noindent
@c To work around this problem, insert a space between the two opening
@c parentheses.  There is a similar problem and workaround with
@c @samp{$((}; see @ref{Shell Substitutions}.
@c 
この問題を回避するため,二つの開カッコの間にスペースを挿入して下さい.
@samp{$((}に関する同様な問題と回避方法があります.@ref{Shell
Substitutions}を参照して下さい.

@c @acronym{POSIX} requires support for @code{case} patterns with opening
@c parentheses like this:
@c 
@acronym{POSIX}では,以下のような開カッコを用いた@code{case}パターンのサ
ポートを要求しています.

@example
case $filename in
(*.c) echo "C source code";;
esac
@end example

@noindent
@c but the @code{(} in this example is not portable to many older Bourne
@c shell implementations.  It can be omitted safely.
@c 
しかし,この例の@code{(}には古いBourneシェルの実装で移植性がないものもた
くさんあります.安全のため削除すべきでしょう.

@node Special Shell Variables
@c @section Special Shell Variables
@section 特殊なシェル変数

@c Some shell variables should not be used, since they can have a deep
@c influence on the behavior of the shell.  In order to recover a sane
@c behavior from the shell, some variables should be unset, but
@c @command{unset} is not portable (@pxref{Limitations of Builtins}) and a
@c fallback value is needed.  We list these values below.
@c 
シェルの動作に深く影響するため,使用すべきではないシェル変数もあります.
シェルからまともな動作に戻るため,unsetすべき変数もありますが,
@command{unset}は移植性が無く(@pxref{Limitations of Builtins}),代替値が
必要になります.これらの変数を以下にリストアップします.

@c Alphabetical order, case insensitive, `A' before `a'.
@table @code
@item CDPATH
@evindex CDPATH
@c When this variable is set it specifies a list of directories to search
@c when invoking @code{cd} with a relative filename.  @acronym{POSIX}
@c 1003.1-2001 says that if a nonempty directory name from @code{CDPATH}
@c is used successfully, @code{cd} prints the resulting absolute
@c filename.  Unfortunately this output can break idioms like
@c @samp{abs=`cd src && pwd`} because @code{abs} receives the path twice.
@c Also, many shells do not conform to this part of @acronym{POSIX}; for
@c example, @command{zsh} prints the result only if a directory name
@c other than @file{.} was chosen from @code{CDPATH}.
@c 
この変数が設定されているとき,それは@code{cd}が相対的なファイル名で呼び
出されるときに検索するディレクトリのリストを設定します.@acronym{POSIX}
1003.1-2001では,@code{CDPATH}で空ではないディレクトリ名が正しく使用され
ている場合,@code{cd}は絶対的なファイル名を結果として出力することになっ
ています.残念ながらこの出力では,@code{abs}がパスを二回受けとるので,
@samp{abs=`cd src && pwd`}のような慣用句が駄目になります.また,多くのシェ
ルは,この部分の@acronym{POSIX}に準拠していません.例えば,@command{zsh} 
は,@file{.}以外のディレクトリ名が@code{CDPATH}で選択されている場合以外,
結果を出力しません.

@c In practice the shells that have this problem also support
@c @command{unset}, so you can work around the problem as follows:
@c 
実際,この問題があるシェルは@command{unset}もサポートしているので,以下
のようにしてその問題を回避することが可能です.

@example
(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
@end example

@c Autoconf-generated scripts automatically unset @code{CDPATH} if
@c possible, so you need not worry about this problem in those scripts.
@c 
Autoconfが生成したスクリプトは自動的に@code{CDPATH}をunsetするので,これ
らのスクリプトのこの問題を心配する必要はありません.

@item IFS
@evindex IFS
@c Don't set the first character of @code{IFS} to backslash.  Indeed,
@c Bourne shells use the first character (backslash) when joining the
@c components in @samp{"$@@"} and some shells then re-interpret (!) the
@c backslash escapes, so you can end up with backspace and other strange
@c characters.
@c 
@code{IFS}の最初の文字をバックスラッシュに設定しないでください.実際,
@samp{"$@@"}で要素を加えるときは,Bourneシェルは最初の文字(バックスラッ
シュ)を使用し,そして,バックスラッシュエスケープをもう一度解釈する(!) 
シェルもあり,そのため,バックスペースとその他の奇妙な文字で終ることが可
能になっています.

@c The proper value for @code{IFS} (in regular code, not when performing
@c splits) is @samp{@key{SPC}@key{TAB}@key{RET}}.  The first character is
@c especially important, as it is used to join the arguments in @samp{@@*}.
@c 
(splitを実行していないとき,標準的なコードの)@code{IFS}の適切な値は,
@samp{@key{SPC}@key{TAB}@key{RET}}です.@samp{@@*}の引数を連結するために
使用するので,最初の文字は特に重要です.

@item LANG
@itemx LC_ALL
@itemx LC_COLLATE
@itemx LC_CTYPE
@itemx LC_MESSAGES
@itemx LC_MONETARY
@itemx LC_NUMERIC
@itemx LC_TIME
@evindex LANG
@evindex LC_ALL
@evindex LC_COLLATE
@evindex LC_CTYPE
@evindex LC_MESSAGES
@evindex LC_MONETARY
@evindex LC_NUMERIC
@evindex LC_TIME

@c Autoconf-generated scripts normally set all these variables to
@c @samp{C} because so much configuration code assumes the C locale and
@c @acronym{POSIX} requires that locale environment variables be set to
@c @samp{C} if the C locale is desired.  However, some older, nonstandard
@c systems (notably @acronym{SCO}) break if locale environment variables
@c are set to @samp{C}, so when running on these systems
@c Autoconf-generated scripts unset the variables instead.
@c 
あまりに多くのコンフィグレーションコードがCロケールを仮定していて,
@acronym{POSIX}ではCロケールが要求される場合はロケールの環境変数を
@samp{C}に設定する必要があるので,Autoconfが生成したスクリプトは通常,こ
れらのすべての変数を@samp{C}に設定します.しかし,非標準の古いシステム
(特に@acronym{SCO})では,ロケールの環境変数が@samp{C}に設定されている場
合は壊れてしまうので,これらのシステムでAutoconfが生成したスクリプトを実
行するとき,代わりに変数を未設定(unset)にしてください.

@item LANGUAGE
@evindex LANGUAGE

@c @env{LANGUAGE} is not specified by @acronym{POSIX}, but it is a @acronym{GNU}
@c extension that overrides @env{LC_ALL} in some cases, so
@c Autoconf-generated scripts set it too.
@c 
@env{LANGUAGE}は@acronym{POSIX}で指定されていませんが,それは場合によっ
ては@env{LC_ALL}に優先させる@acronym{GNU}の拡張なので,Autoconfが生成し
たスクリプトはそれも設定します.

@item LC_ADDRESS
@itemx LC_IDENTIFICATION
@itemx LC_MEASUREMENT
@itemx LC_NAME
@itemx LC_PAPER
@itemx LC_TELEPHONE
@evindex LC_ADDRESS
@evindex LC_IDENTIFICATION
@evindex LC_MEASUREMENT
@evindex LC_NAME
@evindex LC_PAPER
@evindex LC_TELEPHONE

@c These locale environment variables are @acronym{GNU} extensions.  They
@c are treated like their @acronym{POSIX} brethren (@env{LC_COLLATE},
@c etc.)@: as described above.
@c 
これらのロケール環境変数は@acronym{GNU}の拡張です.それらは,上記の
@acronym{POSIX}の仲間(@env{LC_COLLATE}など)のように扱われます.

@item LINENO
@evindex LINENO
@c Most modern shells provide the current line number in @code{LINENO}.
@c Its value is the line number of the beginning of the current command.
@c Autoconf attempts to execute @command{configure} with a modern shell.
@c If no such shell is available, it attempts to implement @code{LINENO}
@c with a Sed prepass that replaces each instance of the string
@c @code{$LINENO} (not followed by an alphanumeric character) with the
@c line's number.
@c 
ほとんどの近代的なシェルは,現在の行番号を@code{LINENO}で提供しています.
その値は,現在のコマンドの最初の行番号です.Autoconfは近代的なシェルで
@command{configure}の実行を試みます.利用可能なそのようなシェルが無い場
合,それぞれの文字列@code{$LINENO}(英数文字が続かない)をインスタンスを行
番号で置換するために,Sedに前もって渡す手法を用いて,@code{LINENO}の実装
を試みます.

@c You should not rely on @code{LINENO} within @command{eval}, as the
@c behavior differs in practice.  Also, the possibility of the Sed
@c prepass means that you should not rely on @code{$LINENO} when quoted,
@c when in here-documents, or when in long commands that cross line
@c boundaries.  Subshells should be OK, though.  In the following
@c example, lines 1, 6, and 9 are portable, but the other instances of
@c @code{LINENO} are not:
@c 
実行時の動作が異なるので,@command{eval}で@code{LINENO}に依存すべきでは
ありません.また,Sedに前もって渡す手法を用いる可能性は,引用符で囲んで
いるとき,ヒアドキュメントのとき,または行を跨るほど長いコマンドのとき,
@code{$LINENO}に依存すべきではないことを意味しています.ただし,サブシェ
ルは問題ありません.以下の例では,一行目,六行目,そして九行目は移植性が
ありますが,それ以外の@code{LINENO}のインスタンスは移植性がありません.

@example
@group
$ @kbd{cat lineno}
echo 1. $LINENO
cat <<EOF
3. $LINENO
4. $LINENO
EOF
( echo 6. $LINENO )
eval 'echo 7. $LINENO'
echo 8. '$LINENO'
echo 9. $LINENO '
10.' $LINENO
@end group
@group
$ @kbd{bash-2.05 lineno}
1. 1
3. 2
4. 2
6. 6
7. 1
8. $LINENO
9. 9
10. 9
@end group
@group
$ @kbd{zsh-3.0.6 lineno}
1. 1
3. 2
4. 2
6. 6
7. 7
8. $LINENO
9. 9
10. 9
@end group
@group
$ @kbd{pdksh-5.2.14 lineno}
1. 1
3. 2
4. 2
6. 6
7. 0
8. $LINENO
9. 9
10. 9
@end group
@group
$ @kbd{sed '=' <lineno |}
> @kbd{  sed '}
> @kbd{    N}
> @kbd{    s,$,-,}
> @kbd{    : loop}
> @kbd{    s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,}
> @kbd{    t loop}
> @kbd{    s,-$,,}
> @kbd{    s,^[0-9]*\n,,}
> @kbd{  ' |}
> @kbd{  sh}
1. 1
3. 3
4. 4
6. 6
7. 7
8. 8
9. 9
10. 10
@end group
@end example


@item NULLCMD
@evindex NULLCMD
@c When executing the command @samp{>foo}, @command{zsh} executes
@c @samp{$NULLCMD >foo}.  The Bourne shell considers @code{NULLCMD} to be
@c @samp{:}, while @command{zsh}, even in Bourne shell compatibility mode,
@c sets @code{NULLCMD} to @samp{cat}.  If you forgot to set @code{NULLCMD},
@c your script might be suspended waiting for data on its standard input.
@c 
コマンド@samp{>foo}を実行しているとき,@command{zsh}は@samp{$NULLCMD
>foo}を実行します.Bourneシェルは@code{NULLCMD}が@samp{:}だと考えますが,
@command{zsh}はBourneシェル互換モードでも,@code{NULLCMD}を@samp{cat}に
設定します.@code{NULLCMD}の設定を忘れた場合,スクリプトは標準入力からの
データ待ちのためサスペンド状態になるかもしれません.

@item ENV
@itemx MAIL
@itemx MAILPATH
@itemx PS1
@itemx PS2
@itemx PS4
@evindex ENV
@evindex MAIL
@evindex MAILPATH
@evindex PS1
@evindex PS2
@evindex PS4
@c These variables should not matter for shell scripts, since they are
@c supposed to affect only interactive shells.  However, at least one
@c shell (the pre-3.0 @sc{uwin} @command{ksh}) gets confused about
@c whether it is interactive, which means that (for example) a @env{PS1}
@c with a side effect can unexpectedly modify @samp{$?}.  To work around
@c this bug, Autoconf-generated scripts do something like this:
@c 
これらの変数は,対話的なシェルに対してのみ影響すると考えられるので,シェ
ルスクリプトに対して問題はありません.しかし,少なくとも一つのシェル
(pre-3.0 @sc{uwin} @command{ksh})はそれが対話的かどうかを混同し,つまり
(例えば)@env{PS1}の副作用として,@samp{$?}を予期せず変更するはずです.こ
のバグを回避するために,Autoconfが生成したスクリプトは以下のようなことを
します.

@example
(unset ENV) >/dev/null 2>&1 && unset ENV MAIL MAILPATH
PS1='$ '
PS2='> '
PS4='+ '
@end example

@item PWD
@evindex PWD
@c @acronym{POSIX} 1003.1-2001 requires that @command{cd} and
@c @command{pwd} must update the @env{PWD} environment variable to point
@c to the logical path to the current directory, but traditional shells
@c do not support this.  This can cause confusion if one shell instance
@c maintains @env{PWD} but a subsidiary and different shell does not know
@c about @env{PWD} and executes @command{cd}; in this case @env{PWD} will
@c point to the wrong directory.  Use @samp{`pwd`} rather than
@c @samp{$PWD}.
@c 
@acronym{POSIX} 1003.1-2001は,@command{cd}と@command{pwd}が現在のディレ
クトリの論理的なパスを示す@env{PWD}環境変数を必ず更新することを要求して
いますが,伝統的なシェルはこれをサポートしていません.一つのシェルの実体
が@env{PWD}を管理していて,サブディレクトリと別のシェルは@env{PWD}を知ら
ずに@command{cd}を実行する場合,これで混乱するはずです.この状況では,
@env{PWD}は間違ったディレクトリを示します.@samp{$PWD}の代わりに
@samp{`pwd`}を使用してください.

@item status
@evindex status
@c This variable is an alias to @samp{$?} for @code{zsh} (at least 3.1.6),
@c hence read-only.  Do not use it.
@c 
この変数は,@code{zsh}(少なくとも3.1.6)での@samp{$?}へのエイリアスで,そ
のため読み出し専用になっています.使用しないでください.

@item PATH_SEPARATOR
@evindex PATH_SEPARATOR
@c If it is not set, @command{configure} will detect the appropriate path
@c separator for the build system and set the @code{PATH_SEPARATOR} output
@c variable accordingly.
@c 
設定されていない場合,@command{configure}はビルドシステムに対する適切な
パスの分離子を検出し,@code{PATH_SEPARATOR}出力変数をそれに応じて設定し
ます.

@c On DJGPP systems, the @code{PATH_SEPARATOR} environment variable can be
@c set to either @samp{:} or @samp{;} to control the path separator
@c @command{bash} uses to set up certain environment variables (such as
@c @code{PATH}).  Since this only works inside @command{bash}, you want
@c @command{configure} to detect the regular @acronym{DOS} path separator
@c (@samp{;}), so it can be safely substituted in files that may not support
@c @samp{;} as path separator.  So it is recommended to either unset this
@c variable or set it to @samp{;}.
@c 
DJGPPシステムでは,パス分離子を制御するために,@code{PATH_SEPARATOR}環境
変数を@command{bash}が(@code{PATH}のような)特定の環境変数を設定するため
に使用している@samp{:}または@samp{;}のいずれかに設定することが可能です.
これは@command{bash}内部でのみ動作するので,パス分離子として@samp{;}がサ
ポートされていないファイル内で代入する方が安全だろうという理由から,
@command{configure}で標準的な@acronym{DOS}のパス分離子(@samp{;})を検出し
たいことでしょう.そのため,この変数をunsetするか,@samp{;}に設定してく
ださい.

@item RANDOM
@evindex RANDOM
@c Many shells provide @code{RANDOM}, a variable that returns a different
@c integer each time it is used.  Most of the time, its value does not
@c change when it is not used, but on @sc{irix} 6.5 the value changes all
@c the time.  This can be observed by using @command{set}.
@c 
@code{RANDOM}を提供するシェルも多くあり,その変数は使用するたびに異なる
整数を返します.その値が使用されていないとき,変更さることはほとんどあり
ませんが,@sc{irixq} 6.5では毎回値が変更されます.これは,@command{set}
を使用して監視すべきです.
@end table


@node Limitations of Builtins
@c @section Limitations of Shell Builtins
@section シェル組み込みの制限

@c No, no, we are serious: some shells do have limitations!  :)
@c 
だめだよ全く,我々は本気なのに.制限のあるシェルもあるんです! :)

@c You should always keep in mind that any builtin or command may support
@c options, and therefore have a very different behavior with arguments
@c starting with a dash.  For instance, the innocent @samp{echo "$word"}
@c can give unexpected results when @code{word} starts with a dash.  It is
@c often possible to avoid this problem using @samp{echo "x$word"}, taking
@c the @samp{x} into account later in the pipe.
@c 
全ての組み込みコマンドやコマンドは,オプションをサポートし,そのため,ダッ
シュで始まる引数を用いると,全く異なる動作をすることを覚えておくべきです.
例えば罪の無い@samp{echo "$word"}でも,@code{word}がダッシュで始まるとき
は予期しない結果となるはずです.この問題は,パイプでは@samp{x}を後で評価
するように,@samp{echo "x$word"}を使用することで避けることが可能です.

@table @asis
@item @command{.}
@prindex @command{.}
@c Use @command{.} only with regular files (use @samp{test -f}).  Bash
@c 2.03, for instance, chokes on @samp{. /dev/null}.  Also, remember that
@c @command{.} uses @env{PATH} if its argument contains no slashes, so if
@c you want to use @command{.} on a file @file{foo} in the current
@c directory, you must use @samp{. ./foo}.
@c 
通常のファイル(@samp{test -f}を使用してください)を用いるときだけ
@command{.}コマンドを使用してください.例えば,Bash 2.03は,
@samp{. /dev/null}で固まります.また,引数にスラッシュを含まない場合は
@command{.}は@env{PATH}を使用するので,現在のディレクトリのファイル
@file{foo}で@command{.}を使用したい場合,@samp{. ./foo}を使用する必要が
あることを覚えておいてください.

@item @command{!}
@prindex @command{!}
@c You can't use @command{!}; you'll have to rewrite your code.
@c 
@command{!}を使用することは不可能です.コードを書き換える必要があります.


@item @command{break}
@c ------------------
@prindex @command{break}
@c The use of @samp{break 2} etc.@: is safe.
@c 
@samp{break 2}の使用などは安全です.


@item @command{cd}
@c ---------------------------------
@prindex @command{cd}
@c @acronym{POSIX} 1003.1-2001 requires that @command{cd} must support
@c the @option{-L} (``logical'') and @option{-P} (``physical'') options,
@c with @option{-L} being the default.  However, traditional shells do
@c not support these options, and their @command{cd} command has the
@c @option{-P} behavior.
@c 
@acronym{POSIX} 1003.1-2001では,@command{cd}が@option{-L} (``論理的'') 
と@option{-P} (``物理的'')オプションをサポートし,@option{-L}がデフォル
トであることを要求しています.しかし,伝統的なシェルはこれらのオプション
をサポートしておらず,@command{cd}コマンドは@option{-P}のように動作しま
す.

@c Portable scripts should assume neither option is supported, and should
@c assume neither behavior is the default.  This can be a bit tricky,
@c since the @acronym{POSIX} default behavior means that, for example,
@c @samp{ls ..} and @samp{cd ..} may refer to different directories if
@c the current logical directory is a symbolic link.  It is safe to use
@c @command{cd @var{dir}} if @var{dir} contains no @file{..} components.
@c Also, Autoconf-generated scripts check for this problem when computing
@c variables like @code{ac_top_srcdir} (@pxref{Configuration Actions}),
@c so it is safe to @command{cd} to these variables.
@c 
移植性の高いスクリプトは,どちらのオプションもサポートしていると仮定すべ
きではなく,どちらの動作もデフォルトと仮定すべきではありません.これは
ちょっとトリッキーで,例えば,@acronym{POSIX}のデフォルトの動作では,現
在の論理的なディレクトリがシンボリックリンクの場合,@samp{ls ..}と
@samp{cd ..}では異なるディレクトリを参照している可能性があります.
@var{dir}に@file{..}の要素が無い場合,@command{cd @var{dir}}を使用しても
安全です.また,Autoconfが生成するスクリプトは,@code{ac_top_srcdir} の
ような変数を計算するとき,この問題を調査するので(@pxref{Configuration
Actions}),これらの変数で@command{cd}しても安全です.

@c Also please see the discussion of the @command{pwd} command.
@c 
@command{pwd}コマンドの議論も参照してください.


@item @command{case}
@c -----------------
@prindex @command{case}
@c You don't need to quote the argument; no splitting is performed.
@c 
引数を引用符で囲む必要はありません.分離は実行されません.

@c You don't need the final @samp{;;}, but you should use it.
@c 
最後の@samp{;;}は不要ですが,使用した方が良いでしょう.

@c Because of a bug in its @code{fnmatch}, @command{bash} fails to properly
@c handle backslashes in character classes:
@c 
@code{fnmatch}のバグのため,@command{bash}はバックススラッシュを文字クラ
スとして正しく処理することに失敗します.

@example
bash-2.02$ @kbd{case /tmp in [/\\]*) echo OK;; esac}
bash-2.02$
@end example

@noindent
@c This is extremely unfortunate, since you are likely to use this code to
@c handle @sc{unix} or @sc{ms-dos} absolute paths.  To work around this
@c bug, always put the backslash first:
@c 
このコードを@sc{unix}や@sc{ms-dos}の絶対パスとして使用したいとき,非常に
残念なことになります.このバグを回避するために,常にバックスラッシュを最
初に書いてください.

@example
bash-2.02$ @kbd{case '\TMP' in [\\/]*) echo OK;; esac}
OK
bash-2.02$ @kbd{case /tmp in [\\/]*) echo OK;; esac}
OK
@end example

@c Some shells, such as Ash 0.3.8, are confused by an empty
@c @code{case}/@code{esac}:
@c 
Ash 0.3.8のように,シェルによっては空の@code{case}/@code{esac}で混乱する
ものもあります.

@example
ash-0.3.8 $ @kbd{case foo in esac;}
@error{}Syntax error: ";" unexpected (expecting ")")
@end example

@c Many shells still do not support parenthesized cases, which is a pity
@c for those of us using tools that rely on balanced parentheses.  For
@c instance, Solaris 8's Bourne shell:
@c 
多くのシェルでは,カッコで囲まれているケース文をサポートしておらず,それ
は,対になっているカッコに依存しているツールを使用している我々のような人
間にとっては残念なことです.例えば,Solaris 8のBourneシェルがそうです.

@example
$ @kbd{case foo in (foo) echo foo;; esac}
@error{}syntax error: `(' unexpected
@end example


@item @command{echo}
@c -----------------
@prindex @command{echo}
@c The simple @code{echo} is probably the most surprising source of
@c portability troubles.  It is not possible to use @samp{echo} portably
@c unless both options and escape sequences are omitted.  New applications
@c which are not aiming at portability should use @samp{printf} instead of
@c @samp{echo}.
@c 
単純な@code{echo}ですが,移植性の問題の根源として最も驚くべきものかもし
れません.移植性の高い@samp{echo}を使用することは,オプションとエスケー
プシーケンスを削除しない限り不可能です.移植性を目標とする新しいアプリケー
ションでは,@samp{echo}の代わりに@samp{printf}を使用すべきです.

@c Don't expect any option.  @xref{Preset Output Variables}, @code{ECHO_N}
@c etc.@: for a means to simulate @option{-n}.
@c 
オプションを期待しないでください.@code{ECHO_N}などの,@option{-c}をシミュ
レーションする方法は,@xref{Preset Output Variables}.

@c Do not use backslashes in the arguments, as there is no consensus on
@c their handling.  On @samp{echo '\n' | wc -l}, the @command{sh} of
@c Digital Unix 4.0 and @acronym{MIPS RISC/OS} 4.52, answer 2, but the Solaris'
@c @command{sh}, Bash, and Zsh (in @command{sh} emulation mode) report 1.
@c Please note that the problem is truly @command{echo}: all the shells
@c understand @samp{'\n'} as the string composed of a backslash and an
@c @samp{n}.
@c 
引数へのバックスラッシュは,処理について同意がとれていないので使用しない
でください.@samp{echo '\n' | wc -l}を用いれば,Digital Unix 4.0と
@acronym{MIPS RISC/OS} 4.52の@command{sh}では答えは2になりますが,
Solarisの@command{sh},Bash,そしてZsh(の@command{sh}エミュレーションモー
ド)では答えは1になります.問題が本当に@command{echo}にあることに注意して
ください.全てのシェルは,@samp{'\n'}をバックスラッシュと@samp{n}の組み
合わせであると解釈します.

@c Because of these problems, do not pass a string containing arbitrary
@c characters to @command{echo}.  For example, @samp{echo "$foo"} is safe
@c if you know that @var{foo}'s value cannot contain backslashes and cannot
@c start with @samp{-}, but otherwise you should use a here-document like
@c this:
@c 
これらの問題のため,不定の文字を含む文字列を@command{echo}に渡さないでく
ださい.例えば,@var{foo}の値がバックスラッシュを含んでおらず,@samp{-} 
で始まらないことを知っている場合,@samp{echo "$foo"}は安全ですが,それ以
外では以下のようなヒアドキュメントを使用すべきではありません.

@example
cat <<EOF
$foo
EOF
@end example


@item @command{exit}
@c -----------------
@prindex @command{exit}
@c The default value of @command{exit} is supposed to be @code{$?};
@c unfortunately, some shells, such as the DJGPP port of Bash 2.04, just
@c perform @samp{exit 0}.
@c 
@command{exit}のデフォルト値は@code{$?}を想定しています.残念ながらBash
2.04を移植したDJGPPのように,シェルによっては@samp{exit 0}を実行します.

@example
bash-2.04$ @kbd{foo=`exit 1` || echo fail}
fail
bash-2.04$ @kbd{foo=`(exit 1)` || echo fail}
fail
bash-2.04$ @kbd{foo=`(exit 1); exit` || echo fail}
bash-2.04$
@end example

@c Using @samp{exit $?} restores the expected behavior.
@c 
@samp{exit $?}を使用すると期待される動作に復帰します.

@c Some shell scripts, such as those generated by @command{autoconf}, use a
@c trap to clean up before exiting.  If the last shell command exited with
@c nonzero status, the trap also exits with nonzero status so that the
@c invoker can tell that an error occurred.
@c 
@command{autoconf}が生成するようなシェルスクリプトなどには,以前の終了状
態をクリーンアップする仕掛けを使用しているものもあります.シェルの最後の
コマンドがゼロではないステータスで終了した場合も,呼び出し側がエラーの発
生を報告できるように,ゼロでないステータスで終了する仕掛けがあります.

@c Unfortunately, in some shells, such as Solaris 8 @command{sh}, an exit
@c trap ignores the @code{exit} command's argument.  In these shells, a trap
@c cannot determine whether it was invoked by plain @code{exit} or by
@c @code{exit 1}.  Instead of calling @code{exit} directly, use the
@c @code{AC_MSG_ERROR} macro that has a workaround for this problem.
@c 
残念ながら,Solaris 8 @command{sh}のように,シェルによっては@code{exit}
コマンドの引数を無視する仕掛けが存在するものもあります.これらのシェルで
は,その仕掛けで呼び出しがプレーンの@code{exit}によるものなのか,
@code{exit 1}によるものなのか決定できません.@code{exit}を直接呼び出す代
わりに,この問題を回避するために@code{AC_MSG_ERROR}を呼び出してください.


@item @command{export}
@c -------------------
@prindex @command{export}
@c The builtin @command{export} dubs a shell variable @dfn{environment
@c variable}.  Each update of exported variables corresponds to an update
@c of the environment variables.  Conversely, each environment variable
@c received by the shell when it is launched should be imported as a shell
@c variable marked as exported.
@c 
組み込みの@command{export}は,シェル変数を@dfn{環境変数(environment
variable)}に複製します.変数がエクスポートされて更新される度に,環境変数
も更新されます.反対に,環境変数はがシェルから読み出される度に,開始時に
エクスポートされたものとして印のついたシェル変数をインポートするべきです.

@c Alas, many shells, such as Solaris 2.5, @sc{irix} 6.3, @sc{irix} 5.2,
@c @acronym{AIX} 4.1.5, and Digital @sc{unix} 4.0, forget to
@c @command{export} the environment variables they receive.  As a result,
@c two variables coexist: the environment variable and the shell
@c variable.  The following code demonstrates this failure:
@c 
ああ,Solaris 2.5,@sc{irix} 6.3,@sc{irix} 5.2,@acronym{AIX} 4.1.5,そ
してDigital @sc{unix} 4.0のような多くのシェルは,受けとった環境変数を
@command{export}することを忘れています.結果として,二つの変数は共存して
います.環境変数とシェル変数の二つです.以下のコードは,この失敗を説明す
るものです.

@example
#! /bin/sh
echo $FOO
FOO=bar
echo $FOO
exec /bin/sh $0
@end example

@noindent
@c when run with @samp{FOO=foo} in the environment, these shells will print
@c alternately @samp{foo} and @samp{bar}, although it should only print
@c @samp{foo} and then a sequence of @samp{bar}s.
@c 
環境変数で@samp{FOO=foo}として実行した場合,これらのシェルはそれぞれ
@samp{foo}と@samp{bar}を交互に出力しますが,@samp{foo}を出力した後に,続
けて@samp{bar}を出力します.

@c Therefore you should @command{export} again each environment variable
@c that you update.
@c 
このため,それぞれ更新した環境変数を再び@command{export}すべきです.


@item @command{false}
@c ------------------
@prindex @command{false}
@c Don't expect @command{false} to exit with status 1: in the native Bourne
@c shell of Solaris 8 it exits with status 255.
@c 
@command{false}がステータス1で終了することを期待してはいけません.
Solaris 8のネイティブなBourneシェルは,ステータス255で終了します.


@item @command{for}
@c ----------------
@prindex @command{for}
@c To loop over positional arguments, use:
@c 
位置の引数までループするため,以下のように使用したとします.

@example
for arg
do
  echo "$arg"
done
@end example

@noindent
@c You may @emph{not} leave the @code{do} on the same line as @code{for},
@c since some shells improperly grok:
@c 
シェルによっては,間違って解釈するので,@code{for}と同じ行に@code{do} を
書いては@emph{いけません}.

@example
for arg; do
  echo "$arg"
done
@end example

@c If you want to explicitly refer to the positional arguments, given the
@c @samp{$@@} bug (@pxref{Shell Substitutions}), use:
@c 
明示的に位置に依存する引数を参照したい場合,@samp{$@@}のバグがあるので,
以下のように使用してください.

@example
for arg in $@{1+"$@@"@}; do
  echo "$arg"
done
@end example

@noindent
@c But keep in mind that Zsh, even in Bourne shell emulation mode, performs
@c word splitting on @samp{$@{1+"$@@"@}}; see @ref{Shell Substitutions},
@c item @samp{$@@}, for more.
@c 
しかし,ZshはBourneシェルエミュレーションモードでも,@samp{$@{1+"$@@"@}}
で単語の分離を試みるのことを覚えておいてください.@samp{$@@}の詳細は,
@ref{Shell Substitutions}を参照してください.


@item @command{if}
@c ---------------
@prindex @command{if}
@c Using @samp{!} is not portable.  Instead of:
@c 
@samp{!}の使用は移植性がありません.以下の例を考えます.

@example
if ! cmp -s file file.new; then
  mv file.new file
fi
@end example

@noindent
@c use:
@c 
その代わりに以下を使用してください.

@example
if cmp -s file file.new; then :; else
  mv file.new file
fi
@end example

@c There are shells that do not reset the exit status from an @command{if}:
@c 
@command{if}の終了ステータスをリセットしないシェルもあります.

@example
$ @kbd{if (exit 42); then true; fi; echo $?}
42
@end example

@noindent
@c whereas a proper shell should have printed @samp{0}.  This is especially
@c bad in Makefiles since it produces false failures.  This is why properly
@c written Makefiles, such as Automake's, have such hairy constructs:
@c 
そこでは,適切なシェルなら@samp{0}を出力すべきです.これは,異常終了とな
るので,@file{Makefile}では特に問題です.これが,Automakeが生成するよう
な適切に書かれている@file{Makefile}がごちゃごちゃした構成になっている理
由です.

@example
if test -f "$file"; then
  install "$file" "$dest"
else
  :
fi
@end example


@item @command{printf}
@c ------------------
@prindex @command{printf}
@c A format string starting with a @samp{-} can cause problems.
@c @command{bash} (eg. 2.05b) will interpret it as an options string and
@c give an error.  And @samp{--} to mark the end of options is not good
@c in the NetBSD Almquist shell (eg. 0.4.6) which will take that
@c literally as the format string.  Putting the @samp{-} in a @samp{%c}
@c or @samp{%s} is probably the easiest way to avoid doubt,
@c 
@samp{-}で始まる書式化文字列は問題になります.@command{bash}(例えば
2.05b)では,それをオプション文字と解釈しエラーとなるでしょう.オプション
の終りの印となる@samp{--}は,書式化文字列をそのまま受けとるNetBSD
Almquist shell (例えば0.4.6)ではよいとは言えません.@samp{-}を@samp{%c} 
や@samp{%s}に書くのが,間違いを避ける最も簡単な方法でしょう.

@example
printf %s -foo
@end example


@item @command{pwd}
@c ----------------
@prindex @command{pwd}
@c With modern shells, plain @command{pwd} outputs a ``logical''
@c directory name, some of whose components may be symbolic links.  These
@c directory names are in contrast to ``physical'' directory names, whose
@c components are all directories.
@c 
最近のシェルを用いると,@command{pwd}は``論理的な''ディレクトリ名を出力
し,その構成要素にはシンボリックリンクがある可能性があります.これらのディ
レクトリ名は,構成要素はすべてディレクトリとなっている``物理的な'' ディ
レクトリ名とは異なります.

@c @acronym{POSIX} 1003.1-2001 requires that @command{pwd} must support
@c the @option{-L} (``logical'') and @option{-P} (``physical'') options,
@c with @option{-L} being the default.  However, traditional shells do
@c not support these options, and their @command{pwd} command has the
@c @option{-P} behavior.
@c 
@acronym{POSIX} 1003.1-2001では,@command{pwd}は,@option{-L} (``論理的'') 
と@option{-P} (``物理的'')オプションをサポートし,@option{-L}がデフォル
トになっている必要があります.しかし,伝統的なシェルはこれらのオプション
をサポートしておらず,@command{pwd}コマンドは@option{-P}のように動作しま
す.

@c Portable scripts should assume neither option is supported, and should
@c assume neither behavior is the default.  Also, on many hosts
@c @samp{/bin/pwd} is equivalent to @samp{pwd -P}, but @acronym{POSIX}
@c does not require this behavior and portable scripts should not rely on
@c it.
@c 
移植性の高いスクリプトでは,どちらのオプションもサポートしていると仮定す
べきではなく,どちらの動作もデフォルトと仮定すべきではありません.また,
多くのホストは@samp{/bin/pwd}が@samp{pwd -P}と同じですが,
@acronym{POSIX} はこの動作を要求しておらず,移植性の高いシェルではそれに
依存すべきではありません.

@c Typically it's best to use plain @command{pwd}.  On modern hosts this
@c outputs logical directory names, which have the following advantages:
@c 
通常,そのまま@command{pwd}を使用するのが最善でしょう.最近のホストでは,
これで論理的なディレクトリ名を出力し,以下の利点があります.

@itemize @bullet
@item
@c Logical names are what the user specified.
@c 
論理的な名前はユーザが指定するものです.
@item
@c Physical names may not be portable from one installation
@c host to another due to network filesystem gymnastics.
@c 
物理的な名前は,インストールしたホストと,それ以外のネットワークファイル
システムとで移植性が無いかもしれません.
@item
@c On modern hosts @samp{pwd -P} may fail due to lack of permissions to
@c some parent directory, but plain @command{pwd} cannot fail for this
@c reason.
@c 
最近のホストでは,親ディレクトリに許可が無いと@samp{pwd -P}は失敗するか
もしれませんが,@command{pwd}をそのまま使うと,この理由で失敗するはずは
ありません.
@end itemize

@c Also please see the discussion of the @command{cd} command.
@c 
@command{cd}コマンドでの議論も参照してください.


@item @command{set}
@c ----------------
@prindex @command{set}
@c This builtin faces the usual problem with arguments starting with a
@c dash.  Modern shells such as Bash or Zsh understand @option{--} to specify
@c the end of the options (any argument after @option{--} is a parameter,
@c even @samp{-x} for instance), but most shells simply stop the option
@c processing as soon as a non-option argument is found.  Therefore, use
@c @samp{dummy} or simply @samp{x} to end the option processing, and use
@c @command{shift} to pop it out:
@c 
この組み込みコマンドは,一般的なダッシュで始まる引数の問題に直面します.
BashやZshのような現在のシェルでは,オプションの終りを指定する
@option{--}(@option{--}以降の全ての引数は,例えば@samp{-x}であってもパラ
メータです)を理解しますが,ほとんどのシェルは,オプションではない引数が
見つかるとすぐにオプションの処理を単純に停止します.このため,オプション
の処理を終了するために@samp{dummy}や単純に@samp{x}を使用し,それを取り出
すために@command{shift}を使用してください.

@example
set x $my_list; shift
@end example

@c Some shells have the "opposite" problem of not recognizing all options
@c (e.g., @samp{set -e -x} assigns @samp{-x} to the command line).  It is
@c better to elide these:
@c 
すべてのオプションを認識しないこととは"反対"の問題(例えば,@samp{set -e
-x}で@samp{-x}をコマンドラインに割り当てるといった問題)があるシェルもあ
ります.以下のように省略した方が良いでしょう.

@example
set -ex
@end example


@item @command{shift}
@c ------------------
@prindex @command{shift}
@c Not only is @command{shift}ing a bad idea when there is nothing left to
@c shift, but in addition it is not portable: the shell of @acronym{MIPS
@c RISC/OS} 4.52 refuses to do it.
@c 
@command{shift}するものが無いとき,@command{shift}を使用することは悪い考
え方であるだけでなく,移植性が無くなってしまいことも追加されてしまいます.
@acronym{MIPS RISC/OS} 4.52のシェルは,それを廃棄してしまいます.


@item @command{source}
@c -------------------
@prindex @command{source}
@c This command is not portable, as @acronym{POSIX} does not require it; use
@c @command{.} instead.
@c 
@acronym{POSIX}が要求していないので,このコマンドは移植性がありません.
代わりに@command{.}を使用してください.


@item @command{test}
@c -----------------
@prindex @command{test}
@c The @code{test} program is the way to perform many file and string
@c tests.  It is often invoked by the alternate name @samp{[}, but using
@c that name in Autoconf code is asking for trouble since it is an M4 quote
@c character.
@c 
@code{test}プログラムは,多くのファイルと文字列のテストを実行する方法で
す.それは別名の@samp{[}で呼び出されることも多いのですが,M4の引用符文字
という問題から,Autoconfのコードではその名前を使用することが要求されてい
ます.

@c If you need to make multiple checks using @code{test}, combine them with
@c the shell operators @samp{&&} and @samp{||} instead of using the
@c @code{test} operators @option{-a} and @option{-o}.  On System V, the
@c precedence of @option{-a} and @option{-o} is wrong relative to the unary
@c operators; consequently, @acronym{POSIX} does not specify them, so using them
@c is nonportable.  If you combine @samp{&&} and @samp{||} in the same
@c statement, keep in mind that they have equal precedence.
@c 
@code{test}を使用して複数の調査を行う必要がある場合,@code{test}の演算子
の@samp{-a}と@samp{-o}の代わりに,シェル演算子の@samp{&&}と@samp{||} で
組み合わせてください.System Vでは,@samp{-a}と@samp{-o}の優先順位は,単
項演算子とは間違った関係になっています.従って,@acronym{POSIX}はそれら
を指定しないので,それを使用すると移植性が無くなります.同じ文で
@samp{&&}と@samp{||}を組み合わせる場合,同じ優先順位があることを覚えてお
いてください.

@c You may use @samp{!} with @command{test}, but not with @command{if}:
@c @samp{test ! -r foo || exit 1}.
@c 
@command{test}で@samp{!}を使用してもかまいませんが,@command{if}ではでき
ません.@samp{test ! -r foo || exit 1}.


@item @command{test} (files)
@c -------------------------
@c To enable @command{configure} scripts to support cross-compilation, they
@c shouldn't do anything that tests features of the build system instead of
@c the host system.  But occasionally you may find it necessary to check
@c whether some arbitrary file exists.  To do so, use @samp{test -f} or
@c @samp{test -r}.  Do not use @samp{test -x}, because 4.3@acronym{BSD} does not
@c have it.  Do not use @samp{test -e} either, because Solaris 2.5 does not
@c have it.  To test for symbolic links on systems that have them, use
@c @samp{test -h} rather than @samp{test -L}; either form conforms to
@c @acronym{POSIX} 1003.1-2001, but older shells like Solaris 8
@c @code{/bin/sh} support only @option{-h}.
@c 
@command{configure}スクリプトでクロスコンパイルのサポートを可能にするた
め,ホストシステムの代わりに,ビルドシステムの特徴のテストは,何もすべき
ではありません.しかし,任意のファイルの存在を調査する必要があることが判
明するかもしれません.そうするために@samp{test -f}や@samp{test -r}を使用
してください.4.3@acronym{BSD}には@samp{test -x}が無いので使用しないでく
ださい.また,Solaris 2.5には@samp{test -e}が無いので使用しないでくださ
い.システム上にシンボリックリンクがあることをテストするためには,
@samp{test -L}ではなく@samp{test -h}を使用して下さい.いずれも
@acronym{POSIX} 1003.1-2001に準拠した様式ですが,Solaris 8の
@code{/bin/sh}のような古いシェルでは,@option{-h}だけをサポートしていま
す.

@item @command{test} (strings)
@c ---------------------------
@c Avoid @samp{test "@var{string}"}, in particular if @var{string} might
@c start with a dash, since @code{test} might interpret its argument as an
@c option (e.g., @samp{@var{string} = "-n"}).
@c 
@code{test}は引数をオプションとして解釈するので(例えば,
@samp{@var{string} = "-n"}),特に@var{string}がダッシュで始まる場合,
@samp{test "@var{string}"}を避けてください.

@c Contrary to a common belief, @samp{test -n @var{string}} and
@c @samp{test -z @var{string}} @strong{are} portable.  Nevertheless many
@c shells (such as Solaris 2.5, @acronym{AIX} 3.2, @sc{unicos} 10.0.0.6,
@c Digital Unix 4 etc.) have bizarre precedence and may be confused if
@c @var{string} looks like an operator:
@c 
一般に信じられていることとは反対に,@samp{test -n @var{string}}と
@samp{test -z @var{string}}は,移植性が@strong{あります}.それにもかかわ
らず,(Solaris 2.5,@acronym{AIX} 3.2,@sc{unicos} 10.0.0.6,Digital
@sc{unix} 4等の)多くのシェルには信じられない優先順位があり,@var{string}
がオペレータのように見える場合は混乱するかもしれません.

@example
$ @kbd{test -n =}
test: argument expected
@end example

@c If there are risks, use @samp{test "x@var{string}" = x} or @samp{test
@c "x@var{string}" != x} instead.
@c 
危険はありますが,代わりに@samp{test "x@var{string}" = x}や@samp{test
"x@var{string}" != x}を使用してください.

@c It is common to find variations of the following idiom:
@c 
以下のような慣用句はのバリエーションは普通に見つかります.

@example
test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &&
  @var{action}
@end example

@noindent
@c to take an action when a token matches a given pattern.  Such constructs
@c should always be avoided by using:
@c 
与えられているパターンに一致するとき動作します.そのような構文は,常に使
用を避けるべきです.

@example
echo "$ac_feature" | grep '[^-a-zA-Z0-9_]' >/dev/null 2>&1 &&
  @var{action}
@end example

@noindent
@c Use @code{case} where possible since it is faster, being a shell builtin:
@c 
シェルの組み込みコマンドなのでより速くなっているため,可能な場所では
@code{case}を使用してください.

@example
case $ac_feature in
  *[!-a-zA-Z0-9_]*) @var{action};;
esac
@end example

@c Alas, negated character classes are probably not portable, although no
@c shell is known to not support the @acronym{POSIX} syntax @samp{[!@dots{}]}
@c (when in interactive mode, @command{zsh} is confused by the
@c @samp{[!@dots{}]} syntax and looks for an event in its history because of
@c @samp{!}).  Many shells do not support the alternative syntax
@c @samp{[^@dots{}]} (Solaris, Digital Unix, etc.).
@c 
ああ,@acronym{POSIX}の構文@samp{[!@dots{}]}をサポートしていないシェルは
知りませんが,文字クラスの否定は移植性が無いかもしれません(対話的モード
では,@command{zsh}は@samp{[!@dots{}]}の構文で混乱し,@samp{!}のため,ヒ
ストリ内のイベントを探します).多くのシェルは,構文@samp{[^@dots{}]} の
代替物をサポートしていません(Solaris,Digital Unix等).

@c One solution can be:
@c 
以下は解決方法の一つです.

@example
expr "$ac_feature" : '.*[^-a-zA-Z0-9_]' >/dev/null &&
  @var{action}
@end example

@noindent
@c or better yet
@c 
以下の方が良いかもしれません.

@example
expr "x$ac_feature" : '.*[^-a-zA-Z0-9_]' >/dev/null &&
  @var{action}
@end example

@c @samp{expr "X@var{foo}" : "X@var{bar}"} is more robust than @samp{echo
@c "X@var{foo}" | grep "^X@var{bar}"}, because it avoids problems when
@c @samp{@var{foo}} contains backslashes.
@c 
@samp{@var{foo}}がバックスラッシュを含んでいるとき問題を回避するので,
@samp{expr "X@var{foo}" : "X@var{bar}"}は,@samp{echo "X@var{foo}" |
grep "^X@var{bar}"}より堅牢です.


@item @command{trap}
@c -----------------
@prindex @command{trap}
@c It is safe to trap at least the signals 1, 2, 13, and 15.  You can also
@c trap 0, i.e., have the @command{trap} run when the script ends (either via an
@c explicit @command{exit}, or the end of the script).
@c 
少なくとも,シグナルの1,2,13,そして15をトラップすることは安全です.ま
た,0のトラップも可能で,すなわち,スクリプトが終るとき(明示的な
@command{exit}やスクリプトの終り)に@command{trap}を実行するということで
す.

@c Although @acronym{POSIX} is not absolutely clear on this point, it is widely
@c admitted that when entering the trap @samp{$?} should be set to the exit
@c status of the last command run before the trap.  The ambiguity can be
@c summarized as: ``when the trap is launched by an @command{exit}, what is
@c the @emph{last} command run: that before @command{exit}, or
@c @command{exit} itself?''
@c 
@acronym{POSIX}では,この点は絶対的に明確ではありませんが,@samp{$?}をト
ラップするとき,トラップの前の最後に実行されたコマンドの終了ステータスが
設定されるべきだということは,広く認められています.曖昧な部分は以下のよ
うに要約可能です.``トラップが@command{exit}で開始されるとき,実行された
@emph{最後の}コマンドは何でしょう?@command{exit}の直前ですか?それとも
@command{exit}自身ですか?''

@c Bash considers @command{exit} to be the last command, while Zsh and
@c Solaris 8 @command{sh} consider that when the trap is run it is
@c @emph{still} in the @command{exit}, hence it is the previous exit status
@c that the trap receives:
@c 
Bashは@command{exit}を最後のコマンドと考えますが,ZshとSolaris 8
@command{sh}は,トラップが実行されたとき@command{exit}の処理@emph{中} な
ので,トラップを受信する前の終了ステータスだと考えられます.

@example
$ @kbd{cat trap.sh}
trap 'echo $?' 0
(exit 42); exit 0
$ @kbd{zsh trap.sh}
42
$ @kbd{bash trap.sh}
0
@end example

@c The portable solution is then simple: when you want to @samp{exit 42},
@c run @samp{(exit 42); exit 42}, the first @command{exit} being used to
@c set the exit status to 42 for Zsh, and the second to trigger the trap
@c and pass 42 as exit status for Bash.
@c 
移植性の解決方法は簡単です.@samp{exit 42}にしたいとき,@samp{(exit 42);
exit 42}を実行し,最初の@command{exit}はZshに対する42の終了ステータスを
設定するために使用され,二番目は,トラップを誘発し,Bashに対して終了ステー
タスとしての42を渡すためです.

@c The shell in Free@acronym{BSD} 4.0 has the following bug: @samp{$?} is
@c reset to 0 by empty lines if the code is inside @command{trap}.
@c 
Free@acronym{BSD} 4.0のシェルには,以下のバグがあります.コードが内部
@command{trap}の場合,空行で@samp{$?}が0にリセットされます.

@example
$ @kbd{trap 'false}

echo $?' 0
$ @kbd{exit}
0
@end example

@noindent
@c Fortunately, this bug only affects @command{trap}.
@c 
幸運にもこのバグは@command{trap}のみに影響します.

@item @command{true}
@c -----------------
@prindex @command{true}
@c Info cannot handle `:' in index entries.
@c @prindex @command{:}
@c Don't worry: as far as we know @command{true} is portable.
@c Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
@c portable shell community tends to prefer using @command{:}.  This has a
@c funny side effect: when asked whether @command{false} is more portable
@c than @command{true} Alexandre Oliva answered:
@c 
心配しないでください.我々が知っている限り@command{true}には移植性があり
ます.それにもかかわらず,常に組み込みコマンドというわけではなく(例えば
Bash 1.x),移植性の高いシェルのコミュニティは,@command{:}の使用を好みが
ちです.これには副作用があります.@command{false}が@command{true}より移
植性が高いかどうか尋ねてみたときのAlexandre Oliva の回答です.

@quotation
@c In a sense, yes, because if it doesn't exist, the shell will produce an
@c exit status of failure, which is correct for @command{false}, but not
@c for @command{true}.
@c 
それらが存在しない場合,シェルは,@command{false}に対しては正しく,
@command{true}に対しては正しくない,異常終了のステータスを生成するので,
ある意味ではそのとおりです.
@end quotation


@item @command{unset}
@c ------------------
@prindex @command{unset}
@c You cannot assume the support of @command{unset}.  Nevertheless, because
@c it is extremely useful to disable embarrassing variables such as
@c @code{PS1}, you can test for its existence and use
@c it @emph{provided} you give a neutralizing value when @command{unset} is
@c not supported:
@c 
@command{unset}のサポートを仮定することはできません.それにもかかわらず,
@code{PS1}のような邪魔な変数を利用不可能にすることは非常に役立つので,存
在をテストし,@emph{提供されていれば}それを使用し,@command{unset}がサポー
トされていないときは,無効にする値を与えてください.

@example
if (unset FOO) >/dev/null 2>&1; then
  unset=unset
else
  unset=false
fi
$unset PS1 || PS1='$ '
@end example

@c @xref{Special Shell Variables}, for some neutralizing values.  Also, see
@c @ref{Limitations of Builtins}, documentation of @command{export}, for
@c the case of environment variables.
@c 
無効にする値については,@xref{Special Shell Variables}. また,環境変数の
caseについては@command{export}のドキュメント@ref{Limitations of
Builtins}も参照してください.
@end table

@node Limitations of Usual Tools
@c @section Limitations of Usual Tools
@section 通常のツールの制限

@c The small set of tools you can expect to find on any machine can still
@c include some limitations you should be aware of.
@c 
あらゆるマシンで見つかることが期待できる小さなツールセットには,知ってお
くべき制限がいくつか含まれているはずです.

@table @asis
@item @command{awk}
@c ----------------
@prindex @command{awk}
@c Don't leave white spaces before the parentheses in user functions calls;
@c @acronym{GNU} awk will reject it:
@c 
ユーザ関数呼び出しで,カッコの前に空白を残さないでください.
@acronym{GNU} awkはそれを拒絶します.

@example
$ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
        BEGIN @{ die () @}'}
gawk: cmd. line:2:         BEGIN @{ die () @}
gawk: cmd. line:2:                      ^ parse error
$ @kbd{gawk 'function die () @{ print "Aaaaarg!"  @}
        BEGIN @{ die() @}'}
Aaaaarg!
@end example

@c If you want your program to be deterministic, don't depend on @code{for}
@c on arrays:
@c 
プログラムを決定的にしたい場合,配列上の@code{for}に依存しないでください.

@example
$ @kbd{cat for.awk}
END @{
  arr["foo"] = 1
  arr["bar"] = 1
  for (i in arr)
    print i
@}
$ @kbd{gawk -f for.awk </dev/null}
foo
bar
$ @kbd{nawk -f for.awk </dev/null}
bar
foo
@end example

@c Some AWK, such as HPUX 11.0's native one, have regex engines fragile to
@c inner anchors:
@c 
HP-UX 11.0のネイティブのAWKのように,内部アンカーに調子が悪い正規表現の
エンジンがあるものもあります.

@example
$ @kbd{echo xfoo | $AWK '/foo|^bar/ @{ print @}'}
$ @kbd{echo bar | $AWK '/foo|^bar/ @{ print @}'}
bar
$ @kbd{echo xfoo | $AWK '/^bar|foo/ @{ print @}'}
xfoo
$ @kbd{echo bar | $AWK '/^bar|foo/ @{ print @}'}
bar
@end example

@noindent
@c Either do not depend on such patterns (i.e., use @samp{/^(.*foo|bar)/},
@c or use a simple test to reject such AWK@.
@c 
そのようなパターンに依存したり(すなわち,@samp{/^(.*foo|bar)/}を使用する),
そのようなAWKを拒絶する単純なテストを使用したりしないでください.


@item @command{cat}
@c ----------------
@prindex @command{cat}
@c Don't rely on any option.  The option @option{-v}, which displays
@c non-printing characters, @emph{seems} portable, though.
@c 
オプションに依存しないようにしてください.しかし,表示不可能な文字を表示
するオプション@option{-v}は,移植性が@emph{ありそうです}.


@item @command{cc}
@c ---------------
@c When a compilation such as @samp{cc foo.c -o foo} fails, some compilers
@c (such as @sc{cds} on Reliant @sc{unix}) leave a @file{foo.o}.
@c 
@samp{cc foo.c -o foo}のようなコンパイルが失敗したとき,(Reliant
@sc{unix}の@sc{cds}のように)@file{foo.o}を残すコンパイラもあります.

@c HP-UX @command{cc} doesn't accept @file{.S} files to preprocess and
@c assemble.  @samp{cc -c foo.S} will appear to succeed, but in fact does
@c nothing.
@c 
HP-UX @command{cc}は,プリプロセスとアセンブラを行なう@file{.S}ファイル
を受け入れません.@samp{cc -c foo.S}は成功したように見えますが,実際には
何もしません.

@c The default executable, produced by @samp{cc foo.c}, can be
@c 
@samp{cc foo.c}で生成されるデフォルトの実行形式は,以下のようになるはず
です.

@itemize
@c @item @file{a.out} --- usual Unix convention.
@c @item @file{b.out} --- i960 compilers (including @command{gcc}).
@c @item @file{a.exe} --- DJGPP port of @command{gcc}.
@c @item @file{a_out.exe} --- GNV @command{cc} wrapper for DEC C on OpenVMS.
@c @item @file{foo.exe} --- various MS-DOS compilers.
@c 
@item @file{a.out} --- 通常のUnixの慣習です.
@item @file{b.out} --- i960 コンパイラ(@command{gcc}を含む).
@item @file{a.exe} --- @command{gcc}が移植されたDJGPP.
@item @file{a_out.exe} --- OpenVMS上のDEC Cに対するGNV @command{cc}ラッパー.
@item @file{foo.exe} --- 様々なMS-DOSのコンパイラ.
@end itemize


@item @command{cmp}
@c ----------------
@prindex @command{cmp}
@c @command{cmp} performs a raw data comparison of two files, while
@c @command{diff} compares two text files.  Therefore, if you might compare
@c DOS files, even if only checking whether two files are different, use
@c @command{diff} to avoid spurious differences due to differences of
@c newline encoding.
@c 
@command{cmp}は,二つのファイルの生のデータの比較を実行しますが,
@command{diff}は二つのテキストファイルを比較します.そのため,
@acronym{DOS}のファイルを比較する場合,二つのファイルが異なっているかど
うかを調査するだけの場合でも改行のエンコードの違いで見せかけの差が発生す
ることを避けるため,@command{diff}を使用してください.


@item @command{cp}
@c ---------------
@prindex @command{cp}
@cindex timestamp resolution
@c Traditionally, file timestamps had 1-second resolution, and @samp{cp
@c -p} copied the timestamps exactly.  However, many modern filesystems
@c have timestamps with 1-nanosecond resolution.  Unfortunately, @samp{cp
@c -p} implementations truncate timestamps when copying files, so this
@c can result in the destination file appearing to be older than the
@c source.  The exact amount of truncation depends on the resolution of
@c the system calls that @command{cp} uses; traditionally this was
@c @code{utime}, which has 1-second resolution, but some newer
@c @command{cp} implementations use @code{utimes}, which has
@c 1-microsecond resolution.  These newer implementations include GNU
@c coreutils 5.0.91 or later, and Solaris 8 (sparc) patch 109933-02 or
@c later.  Unfortunately as of September 2003 there is still no system
@c call to set time stamps to the full nanosecond resolution.
@c 
伝統的に,ファイルのタイムスタンプの分解能は一秒になっていて,@samp{cp
-p}ではタイムスタンプをそのままコピーします.しかし,最近のファイルシス
テムには分解能が1ナノ秒のタイムスタンプになっているものもたくさんありま
す.残念ながら,@samp{cp -p}の実装ではファイルのコピー時にタイムスタンプ
を切り詰めるので,このためコピーされたファイルが結果としてソースよりも古
くなってしまいます.切り詰めの正確な量は@command{cp}が使用するシステムコー
ルの分解能に依存します.伝統的に,これは@code{utime}で,それは分解能が1 
秒になっていますが,新しい@command{cp}の実装では@code{utimes}を使用して
いて,それは分解能が1マイクロ秒になっています.これらの新しい実装には,
GNU coreutils 5.0.91やそれ以降,そしてSolaris 8 (sparc)のパッチ109933-02 
やそれ以降が含まれます.残念ながら,2003年9月の段階では,完全なナノ秒の
分解能を持つタイムスタンプを設定するシステムコールはありません.

@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???

@c Bob Proulx notes that @samp{cp -p} always @emph{tries} to copy
@c ownerships.  But whether it actually does copy ownerships or not is a
@c system dependent policy decision implemented by the kernel.  If the
@c kernel allows it then it happens.  If the kernel does not allow it then
@c it does not happen.  It is not something @command{cp} itself has control
@c over.
@c 
Bob Proulxは,@samp{cp -p}は常に所有権のコピーを@emph{試みる}とメモして
います.しかし,実際に所有権をコピーするかどうかは,カーネルで実装されて
いるシステムポリシーの決定に依存します.カーネルが許可している場合はそう
なります.カーネルが許可していない場合は,そうなりません.@command{cp}自
身が制御しているものではありません.

@c In SysV any user can chown files to any other user, and SysV also had a
@c non-sticky @file{/tmp}.  That undoubtedly derives from the heritage of
@c SysV in a business environment without hostile users.  BSD changed this
@c to be a more secure model where only root can @command{chown} files and
@c a sticky @file{/tmp} is used.  That undoubtedly derives from the heritage
@c of BSD in a campus environment.
@c 
SysVでは,ユーザはファイルを別のユーザにchown可能で,SysVにはstickyでは
ない@file{/tmp}もあります.それは疑い無く,敵意のあるユーザのいないビジ
ネス環境のSysVの遺産に由来しています.@acronym{BSD}は,rootだけがファイ
ルを@command{chown}可能にし,stickyな@file{/tmp}を使用して,これをより安
全なモデルに変更しました.それは疑い無く,キャンパス環境の@acronym{BSD}
の遺産に由来します.

@c Linux by default follows BSD, but it can be configured to allow
@c @command{chown}.  HP-UX as an alternate example follows SysV, but it can
@c be configured to use the modern security model and disallow
@c @command{chown}.  Since it is an administrator configurable parameter
@c you can't use the name of the kernel as an indicator of the behavior.
@c 
Linuxはデフォルトで@acronym{BSD}に準拠していますが,@command{chown}可能
に設定することも可能です.別の例として,HP-UXはSysVに準拠していますが,
最近のセキュリティモデルを使用するよう設定し,@command{chown}できなくす
ることが可能です.それは管理者が設定可能なパラメータなので,動作を示すた
めにカーネル名を使用することは不可能です.



@item @command{date}
@c -----------------
@prindex @command{date}
@c Some versions of @command{date} do not recognize special % directives,
@c and unfortunately, instead of complaining, they just pass them through,
@c and exit with success:
@c 
@command{date}のバージョンによっては,特殊な%による指示語を理解しないも
のもあり,残念ながら警告をする代わりに,それをそのまま通過させ,正しく終
了します.

@example
$ @kbd{uname -a}
OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
$ @kbd{date "+%s"}
%s
@end example


@item @command{diff}
@c -----------------
@prindex @command{diff}
@c Option @option{-u} is nonportable.
@c 
@option{-u}には移植性がありません.

@c Some implementations, such as Tru64's, fail when comparing to
@c @file{/dev/null}.  Use an empty file instead.
@c 
Tru64のように,実装によっては@file{/dev/null}の比較で失敗するものもあり
ます.その代わりに空のファイルを使用してください.


@item @command{dirname}
@c --------------------
@prindex @command{dirname}
@c Not all hosts have a working @command{dirname}, and you should instead
@c use @code{AS_DIRNAME} (@pxref{Programming in M4sh}).  For example:
@c 
全てのホストに動作する@command{dirname}があるわけではなく,その代わりに
@code{AS_DIRNAME}を使用すべきです(@pxref{Programming in M4sh}).例えば以
下のようにします.

@example
dir=`dirname "$file"`       # This is not portable.
dir=`AS_DIRNAME(["$file"])` # This is more portable.
@end example

@noindent
@c This handles a few subtleties in the standard way required by
@c @acronym{POSIX}.  For example, under UN*X, should @samp{dirname //1} give
@c @samp{/}?  Paul Eggert answers:
@c 
これは,@acronym{POSIX}で要求されている標準では,幾分微妙な扱いです.例
えばUN*Xでは@samp{//1}は@samp{/}になるのでしょうか?以下はPaul Eggertの
回答です.

@quotation
@c No, under some older flavors of Unix, leading @samp{//} is a special
@c path name: it refers to a ``super-root'' and is used to access other
@c machines' files.  Leading @samp{///}, @samp{////}, etc.@: are equivalent
@c to @samp{/}; but leading @samp{//} is special.  I think this tradition
@c started with Apollo Domain/OS, an OS that is still in use on some older
@c hosts.
@c 
古いUnixライクのものではそうはならず,前置される@samp{//}は特殊なパス名
になります.それは``スーパールート''を参照し,他のマシンのファイルをアク
セスするために使用されます.前置される@samp{///},@samp{////}などは,
@samp{/}と等価です.しかし,前置される@samp{//}は特殊です.この伝統的は
Apollo Domain/OSで始まったと考えていて,古いホストではまだそのOS を使用
しています.

@c @acronym{POSIX} allows but does not require the special treatment for
@c @samp{//}.  It says that the behavior of dirname on path names of the
@c form @samp{//([^/]+/*)?}  is implementation defined.  In these cases,
@c @acronym{GNU} @command{dirname} returns @samp{/}, but it's more
@c portable to return @samp{//} as this works even on those older flavors
@c of Unix.
@c 
@acronym{POSIX}では可能ですが,@samp{//}に対する特別扱いは要求されていま
せん.そこでは,形式@samp{//([^/]+/*)?}のパス名でのdirnameの動作は,実装
で定義されると告げています.これらの場合,@acronym{GNU}
@command{dirname}は@samp{/}を返しますが,古いUnixライクのものでも動作す
るように@samp{//}を返した方が移植性が高いでしょう.
@end quotation


@item @command{egrep}
@c ------------------
@prindex @command{egrep}
@c @acronym{POSIX} 1003.1-2001 no longer requires @command{egrep},
@c but many older hosts do not yet support the @acronym{POSIX}
@c replacement @code{grep -E}.  To work around this problem, invoke
@c @code{AC_PROG_EGREP} and then use @code{$EGREP}.
@c 
@acronym{POSIX} 1003.1-2001では,もはや@command{egrep}を要求していません
が,より古いホストの多くはまだ@acronym{POSIX}の@code{grep -E}での置換を
サポートしていません.この問題を回避するため,@code{AC_PROG_EGREP} を呼
び出し,@code{$EGREP}を使用してください.

@c The empty alternative is not portable, use @samp{?} instead.  For
@c instance with Digital Unix v5.0:
@c 
空の代入は移植性が無く,代わりに@samp{?}を使用してください.例えば,
Digital Unix v5.0では以下のようになります.

@example
> printf "foo\n|foo\n" | $EGREP '^(|foo|bar)$'
|foo
> printf "bar\nbar|\n" | $EGREP '^(foo|bar|)$'
bar|
> printf "foo\nfoo|\n|bar\nbar\n" | $EGREP '^(foo||bar)$'
foo
|bar
@end example

@c @command{$EGREP} also suffers the limitations of @command{grep}.
@c 
@command{$EGREP}も@command{grep}の制限で苦しむことになります.

@item @command{expr}
@c -----------------
@prindex @command{expr}
@c No @command{expr} keyword starts with @samp{x}, so use @samp{expr
@c x"@var{word}" : 'x@var{regex}'} to keep @command{expr} from
@c misinterpreting @var{word}.
@c 
@samp{x}で始まる@command{expr}キーワードはないので,@command{expr}が
@var{word}を間違って解釈しないように,@samp{expr x"@var{word}" :
'x@var{regex}'}を使用してください.

@c Don't use @code{length}, @code{substr}, @code{match} and @code{index}.
@c 
@code{length},@code{substr},@code{match},そして@code{index}は使用し
ないでください.

@item @command{expr} (@samp{|})
@prindex @command{expr} (@samp{|})
@c You can use @samp{|}.  Although @acronym{POSIX} does require that @samp{expr
@c ''} return the empty string, it does not specify the result when you
@c @samp{|} together the empty string (or zero) with the empty string.  For
@c example:
@c 
@samp{|}を使用することは可能です.@acronym{POSIX}では,@samp{expr ''} が
空の文字列を返すことを必須としていませんが,空の文字列を用いて空の文字列
(またはゼロ)とともに@samp{|}を用いたときの結果は安全ではありません.例え
ば以下を考えます.

@example
expr '' \| ''
@end example

@c @acronym{GNU}/Linux and @acronym{POSIX}.2-1992 return the empty string
@c for this case, but traditional @sc{unix} returns @samp{0} (Solaris is
@c one such example).  In @acronym{POSIX}.1-2001, the specification has
@c been changed to match traditional @sc{unix}'s behavior (which is
@c bizarre, but it's too late to fix this).  Please note that the same
@c problem does arise when the empty string results from a computation,
@c as in:
@c 
@acronym{GNU}/Linuxと@acronym{POSIX}.2-1992では,この場合は空の文字列を
返しますが,伝統的な@sc{unix}では@samp{0}を返します(Solarisはそのような
例の一つです).最近の@acronym{POSIX}.1-2001ドラフトでは,その指定は伝統
的な@sc{unix}の動作に一致するよう変更されています(信じられないことですが,
これを修正するには時すでに遅しです).同じ問題が,計算結果が空の文字列に
なるときにも,以下の状態では発生します.

@example
expr bar : foo \| foo : bar
@end example

@noindent
@c Avoid this portability problem by avoiding the empty string.
@c 
空の文字列を避けることで,この移植性の問題を避けてください.


@item @command{expr} (@samp{:})
@c ----------------------------
@prindex @command{expr}
@c Don't use @samp{\?}, @samp{\+} and @samp{\|} in patterns, as they are
@c not supported on Solaris.
@c 
Solarisではサポートされていないので,パターン内に,@samp{\?},@samp{\+},
そして@samp{\|}を使用しないでください.

@c The @acronym{POSIX} standard is ambiguous as to whether
@c @samp{expr 'a' : '\(b\)'} outputs @samp{0} or the empty string.
@c In practice, it outputs the empty string on most platforms, but portable
@c scripts should not assume this.  For instance, the @acronym{QNX} 4.25 native
@c @command{expr} returns @samp{0}.
@c 
@acronym{POSIX}標準では,@samp{expr 'a' : '\(b\)'}が@samp{0}を出力するか
空の文字列を出力するのかは明確ではありません.実際問題として,それはほと
んどのプラットフォームで空の文字列を出力しますが,移植性の高いスクリプト
では,これを仮定すべきではありません.例えば,@acronym{QNX} 4.25 ネイティ
ブの@command{expr}は@samp{0}を返します.

@c One might think that a way to get a uniform behavior would be to use
@c the empty string as a default value:
@c 
均一な動作を得る手段として,デフォルト値として空の文字列を使用することに
なっていると信じているかもしれません.

@example
expr a : '\(b\)' \| ''
@end example

@noindent
@c Unfortunately this behaves exactly as the original expression; see the
@c @samp{@command{expr} (@samp{:})} entry for more information.
@c 
残念ながら,これは元の式として正確に動作します.詳細は,
@samp{@command{expr} (@samp{:})}の項目を参照してください.

@c Older @command{expr} implementations (e.g., SunOS 4 @command{expr} and
@c Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
@c @command{expr} to fail if the matched substring is longer than 120
@c bytes.  In this case, you might want to fall back on @samp{echo|sed} if
@c @command{expr} fails.
@c 
古い@command{expr}の実装(例えば,SunOS 4の@command{expr}とSolaris 8の
@command{/usr/ucb/expr})には,一致したサブ文字列が120バイトより長い場合,
@command{expr}が異常終了するという,思慮の欠けた長さの制限があります.こ
の状況では,@command{expr}が失敗した場合,@samp{echo|sed}に頼りたいと思
うかもしれません.

@c Don't leave, there is some more!
@c 
残っているものはそれだけではありません!

@c The @acronym{QNX} 4.25 @command{expr}, in addition of preferring @samp{0} to
@c the empty string, has a funny behavior in its exit status: it's always 1
@c when parentheses are used!
@c 
@acronym{QNX} 4.25の@command{expr}には,空の文字列ではなく@samp{0}となる
ことに加えて,終了ステータスでおかしな動作があります.それはカッコが使用
されているときには,常に1になるということです!

@example
$ @kbd{val=`expr 'a' : 'a'`; echo "$?: $val"}
0: 1
$ @kbd{val=`expr 'a' : 'b'`; echo "$?: $val"}
1: 0

$ @kbd{val=`expr 'a' : '\(a\)'`; echo "?: $val"}
1: a
$ @kbd{val=`expr 'a' : '\(b\)'`; echo "?: $val"}
1: 0
@end example

@noindent
@c In practice this can be a big problem if you are ready to catch failures
@c of @command{expr} programs with some other method (such as using
@c @command{sed}), since you may get twice the result.  For instance
@c 
実際に,(@command{sed}のような)他の手法で@command{expr}プログラムで異常
終了を捕獲する準備がある場合,結果を二回得る可能性があるので,これは大き
な問題となります.例えば以下を考えます.

@example
$ @kbd{expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'}
@end example

@noindent
@c will output @samp{a} on most hosts, but @samp{aa} on @acronym{QNX} 4.25.  A
@c simple workaround consists in testing @command{expr} and use a variable
@c set to @command{expr} or to @command{false} according to the result.
@c 
ほとんどのホストでは@samp{a}を出力しますが,@acronym{QNX} 4.25では
@samp{aa}になります.単純な回避方法として,@command{expr}でのテストを構
成し,結果によって@command{expr}や@command{false}で変数を設定する方法を
使用します.


@item @command{fgrep}
@c ------------------
@prindex @command{fgrep}
@c @acronym{POSIX} 1003.1-2001 no longer requires @command{fgrep},
@c but many older hosts do not yet support the @acronym{POSIX}
@c replacement @code{grep -F}.  To work around this problem, invoke
@c @code{AC_PROG_FGREP} and then use @code{$FGREP}.
@c 
@acronym{POSIX} 1003.1-2001では,もはや@command{fgrep}を要求していません
が,より古いホストの多くはまだ@acronym{POSIX}の@code{grep -F}での置換を
サポートしていません.この問題を回避するため,@code{AC_PROG_FGREP} を呼
び出し,@code{$FGREP}を使用してください.


@item @command{find}
@c -----------------
@c The option @option{-maxdepth} seems to be @acronym{GNU} specific.
@c Tru64 v5.1, Net@acronym{BSD} 1.5 and Solaris 2.5 @command{find}
@c commands do not understand it.
@c 
オプション@option{-maxdepth}は@acronym{GNU}特有のようです.Tru64 v5.1,
Net@acronym{BSD} 1.5,そしてSolaris 2.5の@command{find}コマンドはそれを
理解しません.

@c The replacement of @samp{@{@}} is guaranteed only if the argument is
@c exactly @emph{@{@}}, not if it's only a part of an argument.  For
@c instance on DU, and HP-UX 10.20 and HP-UX 11:
@c 
@samp{@{@}}の置換は,引数が正確に@emph{@{@}}の場合のみ保証され,それが引
数の一部の場合は保証されません.例えば,DUとHP-UX 10.20とHP-UX 11では保
証されません.

@example
$ @kbd{touch foo}
$ @kbd{find . -name foo -exec echo "@{@}-@{@}" \;}
@{@}-@{@}
@end example

@noindent
@c while @acronym{GNU} @command{find} reports @samp{./foo-./foo}.
@c 
一方,@acronym{GNU} @command{find}は@samp{./foo-./foo}を報告します.


@item @command{grep}
@c -----------------
@prindex @command{grep}
@c Don't use @samp{grep -s} to suppress output, because @samp{grep -s} on
@c System V does not suppress output, only error messages.  Instead,
@c redirect the standard output and standard error (in case the file
@c doesn't exist) of @code{grep} to @file{/dev/null}.  Check the exit
@c status of @code{grep} to determine whether it found a match.
@c 
System Vの@samp{grep -s}はエラーメッセージのみ抑制し,出力を抑制しないの
で,出力を抑制するために@samp{grep -s}を使用しないでください.その代わり
に(ファイルが存在しない場合) @code{grep}の標準出力と標準エラー出力を
@file{/dev/null}へリダイレクトしてください.一致が見つかったかどうかを決
定するために,@code{grep}の終了ステータスを調査してください.

@c Don't use multiple regexps with @option{-e}, as some @code{grep} will only
@c honor the last pattern (e.g., @sc{irix} 6.5 and Solaris 2.5.1).  Anyway,
@c Stardent Vistra SVR4 @code{grep} lacks @option{-e}@dots{}  Instead, use
@c extended regular expressions and alternation.
@c 
最後のパターンのみ尊重する@code{grep}(例えば,@acronym{AIX} 6.5とSolaris
2.5.1)もあるので,@option{-e}で複数の正規表現を使用しないでください.ど
ちらにしろ,Stardent Vistra SVR4の@code{grep}には@option{-e} がありませ
ん@enddots{} その代わりに拡張した正規表現と代入を使用してください.

@c Don't rely on @option{-w}, as Irix 6.5.16m's @command{grep} does not
@c support it.
@c 
Irix 6.5.16mの@command{grep}は,それをサポートしていないので,
@option{-w}に依存しないようにしてください.


@item @command{ln}
@c ---------------
@prindex @command{ln}
@cindex Symbolic links
@c Don't rely on @command{ln} having a @option{-f} option.  Symbolic links
@c are not available on old systems; use @samp{$(LN_S)} as a portable substitute.
@c 
@option{-f}オプションがある@command{ln}に依存しないようにしてください.
古いシステムではシンボリックリンクは利用不可能です.移植性のある代替物
@samp{$(LN_S)}を使用してください.

@c For versions of the DJGPP before 2.04, @command{ln} emulates soft links
@c to executables by generating a stub that in turn calls the real
@c program.  This feature also works with nonexistent files like in the
@c Unix spec.  So @samp{ln -s file link} will generate @file{link.exe},
@c which will attempt to call @file{file.exe} if run.  But this feature only
@c works for executables, so @samp{cp -p} is used instead for these
@c systems.  DJGPP versions 2.04 and later have full symlink support.
@c 
2.04以前のバージョンのDJGPPに対して,@command{ln}は実行形式へのソフトリ
ンクを,実際のプログラムを呼び出すスタブを生成することでエミュレートしま
す.この機能は,Unix独自の実行形式以外のファイルでも動作します.そのため,
@samp{ln -s file link}は@file{link.exe}を生成し,それは実行された場合に
@file{file.exe}の呼び出しを試みます.しかしこの機能は実行形式に対しての
み動作するので,このシステムでは@samp{cp -p}が代わりに使用されます.
DJGPPの2.04とそれ以降では完全なシンボリックリンクがサポートされています.


@item @command{ls}
@c ---------------
@prindex @command{ls}
@cindex Listing directories
@c The portable options are @option{-acdilrtu}.  Modern practice is for
@c @option{-l} to output both owner and group, but traditional
@c @command{ls} omits the group.
@c 
移植性のあるオプションは@option{-acdilrtu}です.最近では,@option{-l} で
所有者とグループを出力しますが,伝統的な@command{ls}はグループを省略しま
す.

@c From Bruce Lilly:
@c
@c # telnet dim
@c [...]
@c   UNIX System V (TWG-TCP/IP) (dim.blilly.com)
@c [...]
@c $ mkdir foo
@c $ cd foo
@c $ /bin/ls a.exe 2>/dev/null
@c a.exe not found
@c $ what /bin/ls
@c /bin/ls:
@c           fndcmd:fndcmd.sl 1.68
@c $ uname -a
@c UNIX dim SYSTEM5 3.51m mc68k
@c
@c It's an AT&T 3B1.  See http://www.faqs.org/faqs/3b1-faq/ or any
@c mirror of the 3B1 FAQ.  It's actually SVR2.2.
@c 
@c Modern practice is for all diagnostics to go to standard error, but
@c traditional @samp{ls foo} prints the message @samp{foo not found} to
@c standard output if @file{foo} does not exist.  Be careful when writing
@c shell commands like @samp{sources=`ls *.c 2>/dev/null`}, since with
@c traditional @command{ls} this is equivalent to @samp{sources="*.c not
@c found"} if there are no @samp{.c} files.
@c 
最近では,すべての診断結果は標準エラー出力に出てきますが,伝統的な
@samp{ls foo}は,@file{foo}が存在しない場合,メッセージ@samp{foo not
found}を標準出力に出力します.伝統的な@command{ls}では,@samp{.c}ファイ
ルが無い場合,@samp{sources=`ls *.c 2>/dev/null`}は@samp{sources="*.c
not found"}と等価なので,そのようなシェルコマンドを書くときに注意してく
ださい.


@item @command{mkdir}
@c ------------------
@prindex @command{mkdir}
@cindex Making directories
@c None of @command{mkdir}'s options are portable.  Instead of
@c @samp{mkdir -p @var{filename}}, you should use use
@c @code{AS_MKDIR_P(@var{filename})} (@pxref{Programming in M4sh}).
@c 
@command{mkdir}のオプションには移植性はありません.@samp{mkdir -p
@var{filename}}の代わりに@code{AS_MKDIR_P(@var{filename})}を使用すべきで
す(@pxref{Programming in M4sh}).

@item @command{mv}
@c ---------------
@prindex @command{mv}
@cindex Moving open files
@c The only portable options are @option{-f} and @option{-i}.
@c 
移植性のあるオプションは,@option{-f}と@option{-i}のみです.

@c Moving individual files between file systems is portable (it was in V6),
@c but it is not always atomic: when doing @samp{mv new existing}, there's
@c a critical section where neither the old nor the new version of
@c @file{existing} actually exists.
@c 
ファイルシステム間で個別にファイルを移動することは(V6では)移植性がありま
すが,常に強力でははありません.@samp{mv new existing}をするとき,
@file{existing}の古いものも新しいものも実際には存在していないという危険
な状態が存在します.

@c Be aware that moving files from @file{/tmp} can sometimes cause
@c undesirable (but perfectly valid) warnings, even if you created these
@c files.  On some systems, creating the file in @file{/tmp} is setting a
@c guid @code{wheel} which you may not be part of.  So the file is copied,
@c and then the @code{chgrp} fails:
@c 
ファイルを@file{/tmp}から移動することで,これらのファイルを作成していた
としても,好ましくない(が,まったく有効な)警告を発生することがあることを
覚えておいてください.システムによっては,@file{/tmp}にファイルを作成す
ると,guidを自分が所属していない@code{wheel}に設定するものもあります.そ
のためファイルがコピーされると,@code{chgrp}で失敗します.

@example
$ @kbd{touch /tmp/foo}
$ @kbd{mv /tmp/foo .}
@error{}mv: ./foo: set owner/group (was: 3830/0): Operation not permitted
$ @kbd{echo $?}
0
$ @kbd{ls foo}
foo
@end example

@noindent
@c This behavior conforms to @acronym{POSIX}:
@c 
この動作は,@acronym{POSIX}に準拠しています.

@quotation
@c If the duplication of the file characteristics fails for any reason, mv
@c shall write a diagnostic message to standard error, but this failure
@c shall not cause mv to modify its exit status.''
@c 
何らかの理由でファイル属性の複製に失敗する場合,@command{mv}は診断メッセー
ジを標準エラー出力に書き出しますが,この異常終了で,@command{mv}は終了ス
テータスを変更しません.
@end quotation

@c Moving directories across mount points is not portable, use @command{cp}
@c and @command{rm}.
@c 
マウントポイントをまたがってディレクトリを移動することは移植性が無いので,
@command{cp}と@command{rm}を使用してください.

@c Moving/Deleting open files isn't portable.  The following can't be done
@c on DOS/WIN32:
@c 
開いているファイルの移動/削除は移植性がありません.以下の例はDOS/WIN32 
では実行不可能です.

@example
exec > foo
mv foo bar
@end example

@noindent
@c nor can
@c 
以下も実行不可能です.

@example
exec > foo
rm -f foo
@end example

@item @command{sed}
@c ----------------
@prindex @command{sed}
@c Patterns should not include the separator (unless escaped), even as part
@c of a character class.  In conformance with @acronym{POSIX}, the Cray
@c @command{sed} will reject @samp{s/[^/]*$//}: use @samp{s,[^/]*$,,}.
@c 
文字クラスの一部の場合でも,パターンに(エスケープされていない)セパレータ
を含めるべきではありません.@acronym{POSIX}準拠では,Crayの@command{sed}
は@samp{s/[^/]*$//}を拒絶します.@samp{s,[^/]*$,,}を使用してください.

@c Sed scripts should not use branch labels longer than 8 characters and
@c should not contain comments.
@c 
sedのスクリプトは,八文字以上の分岐ラベルを使用すべきではなく,コメント
を含めるべきでもありません.

@c Don't include extra @samp{;}, as some @command{sed}, such as Net@acronym{BSD}
@c 1.4.2's, try to interpret the second as a command:
@c 
Net@acronym{BSD} 1.4.2では,二番目のものをコマンドとして解釈しようと試み
るので,@command{sed}によっては,余分な@samp{;}を含めてはなりません.

@example
$ @kbd{echo a | sed 's/x/x/;;s/x/x/'}
sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
@end example

@c Input should have reasonably long lines, since some @command{sed} have
@c an input buffer limited to 4000 bytes.
@c 
@command{sed}によっては,入力バッファに4000バイトの制限があるものもある
ので,入力は妥当な長さの行にすべきです.

@c Alternation, @samp{\|}, is common but @acronym{POSIX} does not require its
@c support, so it should be avoided in portable scripts.  Solaris 8
@c @command{sed} does not support alternation; e.g., @samp{sed '/a\|b/d'}
@c deletes only lines that contain the literal string @samp{a|b}.
@c 
@samp{\|}の交換は一般的ですが,@acronym{POSIX}はそのサポートを要求してい
ないので,移植性の高いスクリプトでは避けるべきです.Solaris 8の
@command{sed}は交換をサポートしていません.例えば,@samp{sed '/a\|b/d'} 
は,リテラル文字列@samp{a|b}を含んでいる行のみ検出します.

@c Anchors (@samp{^} and @samp{$}) inside groups are not portable.
@c 
グループ内のアンカー(@samp{^}と@samp{$})は移植性がありません.

@c Nested parenthesization in patterns (e.g., @samp{\(\(a*\)b*)\)}) is
@c quite portable to modern hosts, but is not supported by some older
@c @command{sed} implementations like SVR3.
@c 
パターン内の入れ子状のカッコは,現在のホストでは完全に移植性あるものなの
ですが,SVR3のように古い@command{sed}の実装ではサポートされていません.

@c Of course the option @option{-e} is portable, but it is not needed.  No
@c valid Sed program can start with a dash, so it does not help
@c disambiguating.  Its sole usefulness is to help enforcing indentation as
@c in:
@c 
もちろんオプション@option{-e}には移植性がありますが,それは不要です.ダッ
シュで始まる有効なsedプログラムは無いので,明確にする役には立ちません.
唯一の有効性は,以下のように字下げを強制的に行なうときです.

@example
sed -e @var{instruction-1} \
    -e @var{instruction-2}
@end example

@noindent
@c as opposed to
@c 
これは以下の代わりのものです.

@example
sed @var{instruction-1};@var{instruction-2}
@end example

@c Contrary to yet another urban legend, you may portably use @samp{&} in
@c the replacement part of the @code{s} command to mean ``what was
@c matched''.  All descendants of Bell Lab's V7 @command{sed} (at least; we
@c don't have first hand experience with older @command{sed}s) have
@c supported it.
@c 
もう一つの垢抜けた伝説として,``マッチしたもの''を意味する@code{s}コマン
ドの一部を置換するとき,@samp{&}を使用しても移植性はあるでしょう.すべて
のベル研究所のV7 @command{sed}の子孫は(少なくとも,我々はそれより古い
@command{sed}を経験したことはありません)サポートしています.

@c @acronym{POSIX} requires that you must not have any white space between
@c @samp{!}  and the following command.  It is OK to have blanks between
@c the address and the @samp{!}.  For instance, on Solaris 8:
@c 
@acronym{POSIX}では,@samp{!}とそれ以降のコマンドの間に空白があってはい
けません.アドレスと@samp{!}の間の空白はOKです.例えば,Solaris 8では以
下のようになります.

@example
$ @kbd{echo "foo" | sed -n '/bar/ ! p'}
@error{}Unrecognized command: /bar/ ! p
$ @kbd{echo "foo" | sed -n '/bar/! p'}
@error{}Unrecognized command: /bar/! p
$ @kbd{echo "foo" | sed -n '/bar/ !p'}
foo
@end example

@item @command{sed} (@samp{t})
@c ---------------------------
@prindex @command{sed} (@samp{t})
@c Some old systems have @command{sed} that ``forget'' to reset their
@c @samp{t} flag when starting a new cycle.  For instance on @acronym{MIPS
@c RISC/OS}, and on @sc{irix} 5.3, if you run the following @command{sed}
@c script (the line numbers are not actual part of the texts):
@c 
古いシステムには,新しいサイクルと開始するとき,その@samp{t}フラグをリセッ
トすることを``忘れる'' @command{sed}があるシステムもあります.例えば,
@acronym{MIPS RISC/OS}と@sc{irix} 5.3で,以下の@command{sed}スクリプトを
実行した場合を考えます(行番号は,実際にはテキストの一部ではありません).

@example
s/keep me/kept/g  # a
t end             # b
s/.*/deleted/g    # c
: end             # d
@end example

@noindent
@c on
@c 
ファイルの内容は以下を考えます.

@example
delete me         # 1
delete me         # 2
keep me           # 3
delete me         # 4
@end example

@noindent
@c you get
@c 
以下のようになります.

@example
deleted
delete me
kept
deleted
@end example

@noindent
@c instead of
@c 
以下のようにはなりません.

@example
deleted
deleted
kept
deleted
@end example

@c Why?  When processing 1, a matches, therefore sets the t flag, b jumps to
@c d, and the output is produced.  When processing line 2, the t flag is
@c still set (this is the bug).  Line a fails to match, but @command{sed}
@c is not supposed to clear the t flag when a substitution fails.  Line b
@c sees that the flag is set, therefore it clears it, and jumps to d, hence
@c you get @samp{delete me} instead of @samp{deleted}.  When processing 3, t
@c is clear, a matches, so the flag is set, hence b clears the flags and
@c jumps.  Finally, since the flag is clear, 4 is processed properly.
@c 
なぜでしょう?一行目を処理しているとき,マッチするのでtフラグがセットさ
れ,b行からd行まで移動し,出力が生成されます.二行目を処理しているとき,
tフラグはセットされたままです(これはバグです).しかし,a行はマッチに失敗
しますが,置換が失敗するとき,@command{sed}はtフラグをクリアすることをサ
ポートしていません.そのため,フラグがセットされているように見えるb行は,
それをクリアし,dへ移動し,その結果,@samp{deleted}の代わりに
@samp{delete me}になります.三行目を処理しているとき,マッチを示すt がク
リアされるため,フラグがセットされ,その結果,b行はフラグをクリアし移動
します.最終的にフラグはクリアになっているので,四行目は正しく処理されま
す.

@c There are two things one should remember about @samp{t} in @command{sed}.
@c Firstly, always remember that @samp{t} jumps if @emph{some} substitution
@c succeeded, not only the immediately preceding substitution.  Therefore,
@c always use a fake @samp{t clear; : clear} to reset the t flag where
@c indeed.
@c 
@command{sed}の@samp{t}について覚えておくべきことは二つあります.最初に,
成功した置換に@emph{よっては},置換の直前だけでなく@samp{t}ジャンプする
ことを覚えておいてください.そのため,tフラグを実際にリセットするために,
ごまかしの@samp{t clear; : clear}を使用してください.

@c Secondly, you cannot rely on @command{sed} to clear the flag at each new
@c cycle.
@c 
二番目は,それぞれの新しいサイクルでフラグをクリアするのを@command{sed}
に依頼することはできません.

@c One portable implementation of the script above is:
@c 
上記のスクリプトの移植性の高い実装の一つは,以下のようになります.

@example
t clear
: clear
s/keep me/kept/g
t end
s/.*/deleted/g
: end
@end example

@item @command{touch}
@c ------------------
@prindex @command{touch}
@cindex timestamp resolution
@c If you specify the desired timestamp (e.g., with the @option{-r}
@c option), @command{touch} typically uses the @code{utime} or
@c @code{utimes} system call, which can result in the same kind of
@c timestamp truncation problems that @samp{cp -p} has.
@c 
要求されるタイムスタンプ(例えば@option{-r}オプション)を指定する場合,
@command{touch}は通常,@code{utime}や@code{utimes}システムコールを使用し,
結果として,@samp{cp -p}に存在するタイムスタンプの切り詰めの問題と同様の
結果になるはずです.

@c On some old @acronym{BSD} systems, @command{touch} or any command that
@c results in an empty file does not update the timestamps, so use a
@c command like @code{echo} as a workaround.
@c 
古い@acronym{BSD}システムには,空のファイルに対する@command{touch}のよう
なコマンドで,タイムスタンプを更新しない結果となるものもあるので,回避す
るために,@code{echo}のようなコマンドを使用してください.

@c @acronym{GNU} @command{touch} 3.16r (and presumably all before that)
@c fails to work on SunOS 4.1.3 when the empty file is on an
@c @acronym{NFS}-mounted 4.2 volume.
@c 
@acronym{GNU} @command{touch} 3.16r(とそれ以前の全て)は,空のファイルが
@acronym{NFS}でマウントされている4.2のボリュームのとき,SunOS 4.1.3 での
動作で異常終了します.

@end table


@node Limitations of Make
@c @section Limitations of Make
@section Makeの制限

@c @command{make} itself suffers a great number of limitations, only a few
@c of which are listed here.  First of all, remember that since commands
@c are executed by the shell, all its weaknesses are inherited@enddots{}
@c 
@command{make}自身には非常に多くの制限があるので苦労します,ここではわず
かですが紹介します.とにかく,シェルによってコマンドが実行されるので,そ
の弱い部分の全てが継承されていくということを覚えておいてください
@enddots{}

@table @asis
@item @code{$<}
@c @acronym{POSIX} says that the @samp{$<} construct in makefiles can be used
@c only in inference rules and in the @samp{.DEFAULT} rule; its meaning in
@c ordinary rules is unspecified.  Solaris 8's @command{make} for instance
@c will replace it with the argument.
@c 
@acronym{POSIX}では,@file{makefile}の構成物の@samp{$<}は推測される規則
と@samp{.DEFAULT}ルールのみで使用可能だと告げています.通常のルールでの
その意味は明記されていません.例えば,Solaris 8の@command{make}はそれを
引数で置換します.

@c @item Leading underscore in macro names
@item マクロ名へのアンダースコアの前置
@c Some @command{make}s don't support leading underscores in macro names,
@c such as on NEWS-OS 4.2R.
@c 
NEWS-OS 4.2Rのように,マクロ名にアンダースコアを前置することをサポートし
ていない@command{make}もあります.

@example
$ @kbd{cat Makefile}
_am_include = #
_am_quote =
all:; @@echo this is test
$ @kbd{make}
Make: Must be a separator on rules line 2.  Stop.
$ @kbd{cat Makefile2}
am_include = #
am_quote =
all:; @@echo this is test
$ @kbd{make -f Makefile2}
this is test
@end example

@c @item Trailing backslash in macro
@item マクロへのバックスラッシュの後置
@c  This has been seen on ia64 hpux 11.20, and on one hppa hpux 10.20,
@c  but another hppa hpux 10.20 didn't have it.  Bob Proulx
@c  <bob@proulx.com> thinks it was in hpux 8.0 too.
@c 
@c On some versions of HP-UX, @command{make} will read multiple newlines
@c following a backslash, continuing to the next non-empty line.  For
@c example,
@c 
HP-UXのバージョンによっては,@command{make}には,バックスラッシュ以降の
複数の改行を,空ではない行も含めて読み込むものもあります.例えば以下のよ
うにします.

@example
FOO = one \

BAR = two

test:
        : FOO is "$(FOO)"
        : BAR is "$(BAR)"
@end example

@noindent
@c shows @code{FOO} equal to @code{one BAR = two}.  Other @command{make}s
@c sensibly let a backslash continue only to the immediately following
@c line.
@c 
@code{FOO}は@code{one BAR = two}と等価です.それ以外の@command{make}では,
バックスラッシュは直後の行だけを含みます.

@c @item Escaped newline in comments
@item コメント内のエスケープされた改行

@c According to @acronym{POSIX}, @file{Makefile} comments start with @code{#}
@c and continue until an unescaped newline is reached.
@c 
@acronym{POSIX}によると,@file{Makefile}のコメントは@code{#}ではじまり,
エスケープされていない改行まで続きます.

@example
% @kbd{cat Makefile}
# A = foo \
      bar \
      baz

all:
        @@echo ok
% @kbd{make}   # GNU make
ok
@end example

@noindent
@c However in Real World this is not always the case.  Some implementations
@c discards anything from @code{#} up to the end of line, ignoring any
@c trailing backslash.
@c 
しかし現実では,これは常にそうではありません.実装によっては,@code{#} 
から行末までを廃棄し,後置されるバックスラッシュを無視するものもあります.

@example
% @kbd{pmake}  # BSD make
"Makefile", line 3: Need an operator
Fatal errors encountered -- cannot continue
@end example

@noindent
@c Therefore, if you want to comment out a multi-line definition, prefix each
@c line with @code{#}, not only the first.
@c 
このため,複数行の定義をコメントアウトしたい場合,最初の行だけでなく,そ
れぞれの行に@code{#} を前置してください.

@example
# A = foo \
#     bar \
#     baz
@end example

@c @item @code{make macro=value} and sub-@command{make}s.
@item @code{make macro=value}とサブ呼び出しの@command{make}

@c A command-line variable definition such as @code{foo=bar} overrides any
@c definition of @code{foo} in the @file{Makefile}.  Some @command{make}
@c implementations (such as @acronym{GNU} @command{make}) will propagate this
@c override to sub-invocations of @command{make}.  Some other implementation
@c will not pass the substitution along to sub-@command{make}s.
@c 
コマンドライン変数の@code{foo=bar}のような定義は,@file{Makefile}の
@code{foo}の定義に優先します.(@acronym{GNU} @command{make}のような)
@command{make}の実装によっては,この優先はサブ呼び出しの@command{make} 
に伝搬します.古い実装によっては,それ以下の@command{make}に代入を渡さな
いものもあります.

@example
% @kbd{cat Makefile}
foo = foo
one:
        @@echo $(foo)
        $(MAKE) two
two:
        @@echo $(foo)
% @kbd{make foo=bar}            # GNU make 3.79.1
bar
make two
make[1]: Entering directory `/home/adl'
bar
make[1]: Leaving directory `/home/adl'
% @kbd{pmake foo=bar}           # BSD make
bar
pmake two
foo
@end example

@c You have a few possibilities if you do want the @code{foo=bar} override
@c to propagate to sub-@command{make}s.  One is to use the @code{-e}
@c option, which causes all environment variables to have precedence over
@c the @file{Makefile} macro definitions, and declare foo as an environment
@c variable:
@c 
サブ呼び出しの@command{make}に@code{foo=bar}の優先を伝搬したい場合,移植
性を持たせる方法が無いわけではありません.その一つは,すべての環境変数を
@file{Makefile}マクロ定義に優先させる@code{-e}オプションを使用し,
@var{foo}を環境変数として定義する方法です.

@example
% @kbd{env foo=bar make -e}
@end example

@c The @code{-e} option is propagated to sub-@command{make}s automatically,
@c and since the environment is inherited between @command{make}
@c invocations, the @code{foo} macro will be overridden in
@c sub-@code{make}s as expected.
@c 
@code{-e}オプションは,自動的にサブ呼び出しの@command{make}に伝搬し,環
境変数は@command{make}の呼び出し間で継承されるので,@code{foo}マクロはサ
ブ呼び出しの@code{make}で期待したように優先されます.

@c This syntax (@code{foo=bar make -e}) is portable only when used
@c outside a @file{Makefile}, for instance from a script or from the
@c command line.  When run inside a @command{make} rule, GNU
@c @command{make} 3.80 and prior versions forget to propagate the
@c @code{-e} option to sub-@command{make}s.
@c 
この構文(@code{foo=bar make -e})は,@file{Makefile}の外で使用するときだ
け,例えば,スクリプトやコマンドラインのときだけ移植性があります.
@command{make}ルール内で実行するとき,GNU @command{make} 3.80とそれ以前
のバージョンは,それ以下での@command{make}に@code{-e}オプションを伝搬さ
せることを忘れています.

@c Moreover, using @code{-e} could have unexpected side-effects if your
@c environment contains some other macros usually defined by the
@c Makefile.  (See also the note about @code{make -e} and @code{SHELL}
@c below.)
@c 
更に@code{-e}を使用することで,@file{Makefile}で通常定義されるその他のマ
クロが環境変数に含まれている場合,予期しない副作用があるかもしれません.
(以下の@code{make -e}と@code{SHELL}の注意も参照してください.)

@c Another way to propagate overrides to sub-@command{make}s is to do it
@c manually, from your @file{Makefile}:
@c 
サブ呼び出しの@command{make}に優先物を伝搬させるもう一つの方法は,
@file{Makefile}に手動で行なうことです.

@example
foo = foo
one:
        @@echo $(foo)
        $(MAKE) foo=$(foo) two
two:
        @@echo $(foo)
@end example

@c You need to foresee all macros that a user might want to override if
@c you do that.
@c 
そうする場合,ユーザが優先したいと思われるすべてのマクロを予測する必要が
あります.

@c @item The @code{SHELL} macro
@item @code{SHELL}マクロ
@cindex @code{SHELL} and @command{make}
@cindex @command{make} and @code{SHELL}

@c @acronym{POSIX}-compliant @command{make}s internally use the @code{$(SHELL)}
@c macro to spawn shell processes and execute @file{Makefile} rules.  This
@c is a builtin macro supplied by @command{make}, but it can be modified
@c from the @file{Makefile} or a command-line argument.
@c 
@acronym{POSIX}準拠の@command{make}では,シェルプロセスを起動したり,
@file{Makefile}ルールを実行するために,内部で@code{$(SHELL)}マクロを使用
します.これは@command{make}で提供される組み込みマクロですが,
@file{Makefile}やコマンドライン引数で変更することが可能です.

@c Not all @command{make}s will define this @code{SHELL} macro.  OSF/Tru64
@c @command{make} is an example; this implementation will always use
@c @code{/bin/sh}.  So it's a good idea to always define @code{SHELL} in
@c your @file{Makefile}s.  If you use Autoconf, do
@c 
すべての@command{make}が,この@code{SHELL}マクロを定義するわけではありま
せん.例えば,OSF/Tru64 @command{make}がそうです.この実装では,常に
@code{/bin/sh}を使用します.そのため,@file{Makefile}で常に@code{SHELL} 
を定義するのは良い考えです.Autoconfを使用している場合,以下のようにして
ください.

@example
SHELL = @@SHELL@@
@end example

@c @acronym{POSIX}-compliant @command{make}s should never acquire the value of
@c $(SHELL) from the environment, even when @code{make -e} is used
@c (otherwise, think about what would happen to your rules if
@c @code{SHELL=/bin/tcsh}).
@c 
@acronym{POSIX}準拠の@command{make}では,@code{make -e}が使用されている
場合でも,環境変数から$(SHELL)の値を入手してはなりません(そうでない場合,
@code{SHELL=/bin/tcsh}の状況でルールによって何が起こるのか考えてみてくだ
さい).

@c However not all @command{make} implementations will make this exception.
@c For instance it's not surprising that OSF/Tru64 @command{make} doesn't
@c protect @code{SHELL}, since it doesn't use it.
@c 
しかし,すべての@command{make}がこのような例外を実装しているわけではあり
ません.例えば,OSF/Tru64 @command{make}は@code{SHELL}を使用しないので,
保護していなくても不思議ではありません.

@example
% @kbd{cat Makefile}
SHELL = /bin/sh
FOO = foo
all:
        @@echo $(SHELL)
        @@echo $(FOO)
% @kbd{env SHELL=/bin/tcsh FOO=bar make -e}   # OSF1 V4.0 Make
/bin/tcsh
bar
% @kbd{env SHELL=/bin/tcsh FOO=bar gmake -e}  # GNU make
/bin/sh
bar
@end example

@c @item Comments in rules
@item ルール内のコメント
@cindex Comments in @file{Makefile} rules
@cindex @file{Makefile} rules and comments

@c Never put comments in a rule.
@c 
コメントをルールに書き込まないでください.

@c Some @command{make} treat anything starting with a tab as a command for
@c the current rule, even if the tab is immediately followed by a @code{#}.
@c The @command{make} from Tru64 Unix V5.1 is one of them.  The following
@c @file{Makefile} will run @code{# foo} through the shell.
@c 
タブで始まるものは,タブの直後に@code{#}が続いていても,すべて現在のルー
ルのコマンドとして扱う@command{make}もあります.Tru64 Unix V5.1の
@command{make}はその一つです.以下の@file{Makefile}で,シェルで@code{#
foo}を実行します.

@example
all:
        # foo
@end example

@c @item The @file{obj/} subdirectory.
@item @file{obj/}サブディレクトリ
@cindex @file{obj/}, subdirectory
@cindex BSD @command{make} and @file{obj/}

@c Never name one of your subdirectories @file{obj/} if you don't like
@c surprises.
@c 
びっくりしたくなければ,サブディレクトリを@file{obj/}と命名しないでくだ
さい.

@c If an @file{obj/} directory exists, BSD @command{make} will enter it
@c before reading @file{Makefile}.  Hence the @file{Makefile} in the
@c current directory will not be read.
@c 
@file{obj/}ディレクトリが存在する場合,@acronym{BSD} @command{make}は
@file{Makefile}を読み込む前に,そのなかに入ります.このため,現在のディ
レクトリの@file{Makefile}は読み込まれません.

@example
% @kbd{cat Makefile}
all:
        echo Hello
% @kbd{cat obj/Makefile}
all:
        echo World
% @kbd{make}      # GNU make
echo Hello
Hello
% @kbd{pmake}     # BSD make
echo World
World
@end example

@item @code{make -k}
@cindex @code{make -k}

@c Do not rely on the exit status of @code{make -k}.  Some implementations
@c reflect whether they encountered an error in their exit status; other
@c implementations always succeed.
@c 
@code{make -k}の終了ステータスに依存しないようにしてください.終了ステー
タスがエラーかどうかを反映する実装もあります.それ以外の実装では,常に成
功します.

@example
% @kbd{cat Makefile}
all:
        false
% @kbd{make -k; echo exit status: $?}    # GNU make
false
make: *** [all] Error 1
exit status: 2
% @kbd{pmake -k; echo exit status: $?}   # BSD make
false
*** Error code 1 (continuing)
exit status: 0
@end example

@item @code{VPATH}
@cindex @code{VPATH}

@c There is no @code{VPATH} support specified in @acronym{POSIX}.  Many
@c @command{make}s have a form of @code{VPATH} support, but its
@c implementation is not consistent amongst @command{make}s.
@c 
@acronym{POSIX}では,@code{VPATH}サポートを指定していません.多くの
@command{make}は@code{VPATH}サポートの形式がありますが,その実装は,
@command{make}間で一貫していません.

@c Maybe the best suggestion to give to people who need the @code{VPATH}
@c feature is to choose a @command{make} implementation and stick to it.
@c Since the resulting @file{Makefile}s are not portable anyway, better
@c choose a portable @command{make} (hint, hint).
@c 
@code{VPATH}機能を必要としている人々への最高の提案は,@command{make}の実
装を選択しそれに固執するようにと言うことかもしれません.@file{Makefile} 
の結果は常に移植性があるとは限らないので,移植性の高い@command{make}を選
択するのが良いでしょう(ヒント,ヒント).

@c Here are a couple of known issues with some @code{VPATH}
@c implementations.
@c 
@code{VPATH}の実装の既知の問題には以下のものがあります.

@table @asis

@c @item @code{VPATH} and double-colon rules
@item @code{VPATH}と二重のコロンのルール
@cindex @code{VPATH} and double-colon rules
@cindex double-colon rules and @code{VPATH}

@c Any assignment to @code{VPATH} causes Sun @command{make} to only execute
@c the first set of double-colon rules.  (This comment has been here since
@c 1994 and the context has been lost.  It's probably about SunOS 4.  If
@c you can reproduce this, please send us a test case for illustration.)
@c 
@code{VPATH}への代入で,Sunの@command{make}は最初の二重コロンのルールの
組だけを実行します.(このコメントは,1994年からで,現在は無くなっていま
す.SunOS 4では移植性があります.これが再生成された場合,それを説明する
テストケースを送ってください.)

@c @item @code{$<} not supported in explicit rules
@item 明示的なルールで@code{$<}がサポートされていない
@cindex explicit rules, @code{$<}, and @code{VPATH}
@cindex @code{$<}, explicit rules, and @code{VPATH}
@cindex @code{VPATH}, explicit rules, and @code{$<}

@c As said elsewhere, using @code{$<} in explicit rules is not portable.
@c The prerequisite file must be named explicitly in the rule.  If you want
@c to find the prerequisite via a @code{VPATH} search, you have to code the
@c whole thing manually.  For instance, using the following pattern:
@c 
他でも述べたように,明示的なルールで@code{$<}を使用するのは移植性があり
ません.必要条件のファイルは,ルール内で明示的な名前にすべきです.
@code{VPATH}の検索で必要条件を見つけたい場合,手動でコード全体を書く必要
があります.例えば,以下のようなパターンを使用します.

@example
VPATH = ../src
foo.o: foo.c
        cc -c `test -f foo.c || echo ../src/`foo.c -o foo.o
@end example

@c @item Automatic rule rewriting
@item 自動的なルールの再書き込み
@cindex @code{VPATH} and automatic rule rewriting
@cindex automatic rule rewriting and @code{VPATH}

@c Some @command{make} implementations, such as SunOS @command{make}, will
@c search prerequisites in @code{VPATH} and rewrite all their occurrences
@c in the rule appropriately.
@c 
SunOS @command{make}のように,@code{VPATH}で必要条件を探し,出現するたび
に適切なルールにを再書き込みする@command{make}の実装もあります.

@c For instance
@c 
例えば,以下を考えます.

@example
VPATH = ../src
foo.o: foo.c
        cc -c foo.c -o foo.o
@end example

@noindent
@c would execute @code{cc -c ../src/foo.c -o foo.o} if @file{foo.c} was
@c found in @file{../src}.  That sounds great.
@c 
@file{foo.c}が@file{../src}で見つかった場合,@code{cc -c ../src/foo.c -o
foo.o}を実行します.素晴らしいと思います.

@c However, for the sake of other @command{make} implementations, we can't
@c rely on this, and we have to search @code{VPATH} manually:
@c 
しかし,それ以外の@command{make}の実装では,これに依存することは不可能で,
@code{VPATH}を手動で検索する必要があります.

@example
VPATH = ../src
foo.o: foo.c
        cc -c `test -f foo.c || echo ../src/`foo.c -o foo.o
@end example

@noindent
@c However the "prerequisite rewriting" still applies here.  So if
@c @file{foo.c} is in @file{../src}, SunOS @command{make} will execute
@c 
しかし"必要条件の再書き込み"はこれに適用されます.そのため,
@file{../src}に@file{foo.c}がある場合,SunOSの@command{make}は以下を実行
します.

@example
@code{cc -c `test -f ../src/foo.c || echo ../src/`foo.c -o foo.o}
@end example

@noindent
@c which reduces to
@c 
以下を生成します.

@example
cc -c foo.c -o foo.o
@end example

@noindent
@c and thus fails.  Oops.
@c 
そしてこのために失敗します.あぁ.

@c One workaround is to make sure that foo.c never appears as a plain word
@c in the rule.  For instance these three rules would be safe.
@c 
回避策の一つは,ルールのなかに@file{foo.c}をそのまま書いていないことを確
かめることです.例えば,以下の三つのルールは安全です.

@example
VPATH = ../src
foo.o: foo.c
        cc -c `test -f ./foo.c || echo ../src/`foo.c -o foo.o
foo2.o: foo2.c
        cc -c `test -f 'foo2.c' || echo ../src/`foo2.c -o foo2.o
foo3.o: foo3.c
        cc -c `test -f "foo3.c" || echo ../src/`foo3.c -o foo3.o
@end example

@c Things get worse when your prerequisites are in a macro.
@c 
必要条件がマクロ内にあるとき,事態はより悪くなります.

@example
VPATH = ../src
HEADERS = foo.h foo2.h foo3.h
install-HEADERS: $(HEADERS)
        for i in $(HEADERS); do \
          $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \
            $(DESTDIR)$(includedir)/$$i; \
        done
@end example

@c The above @code{install-HEADERS} rule is not SunOS-proof because @code{for
@c i in $(HEADERS);} will be expanded as @code{for i in foo.h foo2.h foo3.h;}
@c where @code{foo.h} and @code{foo2.h} are plain words and are hence
@c subject to @code{VPATH} adjustments.
@c 
上記の@code{install-HEADERS}ルールは,@code{for i in $(HEADERS);}は
@code{for i in foo.h foo2.h foo3.h;}に展開され,@code{foo.h}と
@code{foo2.h}はそのまま単語となり,このためサブジェクトは@code{VPATH} に
調整されるので,SunOSでは信頼できません.

@c If the three files are in @file{../src}, the rule is run as:
@c 
三つのファイルが@file{../src}にある場合,このルールは以下のように実行さ
れます.

@example
for i in ../src/foo.h ../src/foo2.h foo3.h; do \
  install -m 644 `test -f $i || echo ../src/`$i \
     /usr/local/include/$i; \
done
@end example

@c where the two first @command{install} calls will fail.  For instance,
@c consider the @code{foo.h} installation:
@c 
最初の二つの@command{install}の呼び出しは失敗します.例えば,
@code{foo.h}をインストールする事を考えます.

@example
install -m 644 `test -f ../src/foo.h || echo ../src/`../src/foo.h \
  /usr/local/include/../src/foo.h;
@end example
@noindent
@c It reduces to:
@c 
以下を生成します.

@example
install -m 644 ../src/foo.h /usr/local/include/../src/foo.h;
@end example

@c Note that the manual @code{VPATH} search did not cause any problems here;
@c however this command installs @file{foo.h} in an incorrect directory.
@c 
手動の@code{VPATH}の検索には問題が無いことに注意してください.しかし,こ
のコマンドは,間違ったディレクトリに@file{foo.h}をインストールします.

@c Trying to quote @code{$(HEADERS)} in some way, as we did for
@c @code{foo.c} a few @file{Makefile}s ago, does not help:
@c 
ここまで,いくつかの@file{Makefile}で@code{foo.c}に対して行なってきた,
@code{$(HEADERS)}をどうにかして引用符で囲むことは役に立ちません.

@example
install-HEADERS: $(HEADERS)
        headers='$(HEADERS)'; for i in $$headers; do \
          $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \
            $(DESTDIR)$(includedir)/$$i; \
        done
@end example

@c Indeed, @code{headers='$(HEADERS)'} expands to @code{headers='foo.h
@c foo2.h foo3.h'} where @code{foo2.h} is still a plain word.  (Aside: the
@c @code{headers='$(HEADERS)'; for i in $$headers;} idiom is a good
@c idea if @code{$(HEADERS)} can be empty, because some shell produce a
@c syntax error on @code{for i in;}.)
@c 
実際,@code{headers='$(HEADERS)'}は@code{headers='foo.h foo2.h foo3.h'} 
に展開され,@code{foo2.h}はそのまま単語になります.(一方,
@code{headers='$(HEADERS)'; for i in $$headers;}の慣用句は,@code{for i
in;}で構文エラーになるシェルもあるので,@code{$(HEADERS)}が空の場合は良
い考えです.)

@c One workaround is to strip this unwanted @file{../src/} prefix manually:
@c 
回避方法の一つは,不要な@file{../src/}の接頭辞を手動で削除する事です.
@example
VPATH = ../src
HEADERS = foo.h foo2.h foo3.h
install-HEADERS: $(HEADERS)
        headers='$(HEADERS)'; for i in $$headers; do \
          i=`expr "$$i" : '../src/\(.*\)'`;
          $(INSTALL) -m 644 `test -f $$i || echo ../src/`$$i \
            $(DESTDIR)$(includedir)/$$i; \
        done
@end example

@c Automake does something similar.
@c 
Automakeも同様なことを行ないます.

@c @item OSF/Tru64 @command{make} creates prerequisite directories magically
@item OSF/Tru64 @command{make}の@command{make}は,不思議なディレクトリの必要条件を作成する
@cindex @code{VPATH} and prerequisite directories
@cindex prerequisite directories and @code{VPATH}

@c When a prerequisite is a sub-directory of @code{VPATH}, Tru64
@c @command{make} will create it in the current directory.
@c 
必要条件が@code{VPATH}のサブディレクトリにある場合,Tru64 @command{make} 
はそれを現在のディレクトリに作成します.

@example
% @kbd{mkdir -p foo/bar build}
% @kbd{cd build}
% @kbd{cat >Makefile <<END
VPATH = ..
all: foo/bar
END}
% @kbd{make}
mkdir foo
mkdir foo/bar
@end example

@c This can yield unexpected results if a rule uses a manual @code{VPATH}
@c search as presented before.
@c 
ルールは,前に存在している手動の@code{VPATH}検索を使用するので,これは予
想外の結果になるはずです.

@example
VPATH = ..
all : foo/bar
        command `test -d foo/bar || echo ../`foo/bar
@end example

@c The above @command{command} will be run on the empty @file{foo/bar}
@c directory that was created in the current directory.
@c 
上記の@command{command}は,現在のディレクトリに作成された,空の
@file{foo/bar}ディレクトリで実行されます.

@c @item target lookup
@item ターゲットの探索
@cindex @code{VPATH}, resolving target pathnames

@c @acronym{GNU} @command{make} uses a rather complex algorithm to decide when it
@c should use files found via a @code{VPATH} search.  @xref{Search
@c Algorithm,, How Directory Searches are Performed, make, The @acronym{GNU} Make
@c Manual}.
@c 
@acronym{GNU} @command{make}は,@code{VPATH}で見つかったファイルを使用す
べきとき決定するアルゴリズムは幾分複雑です.@xref{Search Algorithm,, How
Directory Searches are Performed, make, The @acronym{GNU} Make Manual}.

@c If a target needs to be rebuilt, @acronym{GNU} @command{make} discards the
@c filename found during the @code{VPATH} search for this target, and
@c builds the file locally using the filename given in the @file{Makefile}.
@c If a target does not need to be rebuilt, @acronym{GNU} @command{make} uses the
@c filename found during the @code{VPATH} search.
@c 
ターゲットのリビルドが必要な場合,@acronym{GNU} @command{make}は,このター
ゲットを@code{VPATH}で検索している間に見つかったファイル名を廃棄し,
@file{Makefile}で与えられたファイル名を使用して,ローカルなファイルをビ
ルドします.ターゲットをリビルドする必要が無い場合は,@acronym{GNU}
@command{make}は@code{VPATH}で検索している間に見つかったファイル名を使用
します.

@c Other @command{make} implementations, like NetBSD @command{make}, are
@c easier to describe: the filename found during the @code{VPATH} search
@c will be used whether the target needs to be rebuilt or not.  Therefore
@c new files are created locally, but existing files are updated at their
@c @code{VPATH} location.
@c 
NetBSD @command{make}のような,その他の@command{make}の実装は,より簡単
に記述できます.@code{VPATH}で検索している間に見つかったファイル名は,ター
ゲットがリビルドを必要としているかどうかにかかわらず使用されます.このた
め<新しいファイルはローカルに作成されますが,@code{VPATH}に位置する既存
のファイルは更新されます.

@c OpenBSD and FreeBSD @command{make}s, however, will never perform a
@c @code{VPATH} search for a dependency which has an explicit rule.
@c This is extremely annoying.
@c 
しかし,OpenBSDとFreeBSDの@command{make}は,明示的なルールを持つ依存性を
探すために@code{VPATH}を実行しません.これは非常にイライラします.

@c When attempting a @code{VPATH} build for an autoconfiscated package
@c (e.g,, @code{mkdir build && cd build && ../configure}), this means the
@c @acronym{GNU}
@c @command{make} will build everything locally in the @file{build}
@c directory, while BSD @command{make} will build new files locally and
@c update existing files in the source directory.
@c 
@code{VPATH}で,autoconfパッケージのビルドを試みるとき(例えば,
@code{mkdir build && cd build && ../configure}),@acronym{GNU}
@command{make} @command{make}は@file{build}ディレクトリですべてのローカ
ルにビルドしますが,@acronym{BSD} @command{make}はローカルな新しいファイ
ルをビルドし,ソースディレクトリの既存のファイルを更新する事を意味します.

@example
% @kbd{cat Makefile}
VPATH = ..
all: foo.x bar.x
foo.x bar.x: newer.x
        @@echo Building $@@
% @kbd{touch ../bar.x}
% @kbd{touch ../newer.x}
% @kbd{make}        # GNU make
Building foo.x
Building bar.x
% @kbd{pmake}       # NetBSD make
Building foo.x
Building ../bar.x
% @kbd{fmake}       # FreeBSD make, OpenBSD make
Building foo.x
Building bar.x
% @kbd{tmake}       # Tru64 make
Building foo.x
Building bar.x
% @kbd{touch ../bar.x}
% @kbd{make}        # GNU make
Building foo.x
% @kbd{pmake}       # NetBSD make
Building foo.x
% @kbd{fmake}       # FreeBSD make, OpenBSD make
Building foo.x
Building bar.x
% @kbd{tmake}       # Tru64 make
Building foo.x
Building bar.x
@end example

@c Note how NetBSD @command{make} updates @file{../bar.x} in its VPATH
@c location, and how FreeBSD, OpenBSD, and Tru64 @command{make} always
@c update @file{bar.x}, even when @file{../bar.x} is up to date.
@c 
NetBSDの@command{make}が@file{../bar.x}をVPATHのある場所で更新し,
FreeBSD,OpenBSD,そしてTru64の@command{make}は,@file{../bar.x}が最新の
ときでも,常に@file{bar.x}を更新することに注意して下さい.

@c Another point worth mentioning is that once @acronym{GNU} @command{make} has
@c decided to ignore a @code{VPATH} filename (e.g., it ignored
@c @file{../bar.x} in the above example) it will continue to ignore it when
@c the target occurs as a prerequisite of another rule.
@c 
言及する価値のあるもう一つの点は,@acronym{GNU} @command{make}が一度
@code{VPATH}のファイル名を無視する事に決めると(例えば,上記の例の
@file{../bar.x}を無視する),ターゲットが他のルールの必要条件になったとき,
それを無視し続けます.

@c The following example shows that @acronym{GNU} @command{make} does not look up
@c @file{bar.x} in @code{VPATH} before performing the @code{.x.y} rule,
@c because it ignored the @code{VPATH} result of @file{bar.x} while running
@c the @code{bar.x: newer.x} rule.
@c 
以下の例では,@code{bar.x: newer.x}のルールを実行している間に
@file{bar.x} の@code{VPATH}の結果を無視するので,@code{.x.y}のルールを実
行する前に,@acronym{GNU} @command{make}は@code{VPATH}の@file{bar.x}を探
さない事を示しています.

@example
% @kbd{cat Makefile}
VPATH = ..
all: bar.y
bar.x: newer.x
        @@echo Building $@@
.SUFFIXES: .x .y
.x.y:
        cp $< $@@
% @kbd{touch ../bar.x}
% @kbd{touch ../newer.x}
% @kbd{make}        # GNU make
Building bar.x
cp bar.x bar.y
cp: cannot stat `bar.x': No such file or directory
make: *** [bar.y] Error 1
% @kbd{pmake}       # NetBSD make
Building ../bar.x
cp ../bar.x bar.y
% @kbd{rm bar.y}
% @kbd{fmake}       # FreeBSD make, OpenBSD make
echo Building bar.x
cp bar.x bar.y
cp: cannot stat `bar.x': No such file or directory
*** Error code 1
% @kbd{tmake}       # Tru64 make
Building bar.x
cp: bar.x: No such file or directory
*** Exit 1
@end example

@c Note that if you drop away the command from the @code{bar.x: newer.x}
@c rule, @acronym{GNU} @command{make} will magically start to work: it
@c knows that @code{bar.x} hasn't been updated, therefore it doesn't
@c discard the result from @code{VPATH} (@file{../bar.x}) in succeeding
@c uses.  Tru64 will also work, but FreeBSD and OpenBSD still don't.
@c 
@code{bar.x: newer.x}ルールからコマンドを削除した場合,@acronym{GNU}
@command{make}では手品のように動作し始める事に注意してください.それは,
@code{bar.x}が更新されていない事を知っているので,@code{VPATH}
(@file{../bar.x})の結果がうまく使用できるという結果を廃棄しません.Tru64 
でも動作しますが,FreeBSDとOpenBSDではまだそうではありません.

@example
% @kbd{cat Makefile}
VPATH = ..
all: bar.y
bar.x: newer.x
.SUFFIXES: .x .y
.x.y:
        cp $< $@@
% @kbd{touch ../bar.x}
% @kbd{touch ../newer.x}
% @kbd{make}        # GNU make
cp ../bar.x bar.y
% @kbd{rm bar.y}
% @kbd{pmake}       # NetBSD make
cp ../bar.x bar.y
% @kbd{rm bar.y}
% @kbd{fmake}       # FreeBSD make, OpenBSD make
cp bar.x bar.y
cp: cannot stat `bar.x': No such file or directory
*** Error code 1
% @kbd{tmake}       # True64 make
cp ../bar.x bar.y
@end example

@c It seems the sole solution that would please every @command{make}
@c implementation is to never rely on @code{VPATH} searches for targets.
@c In other words, @code{VPATH} should be reserved to unbuilt sources.
@c 
すべての@command{make}の実装が@code{VPATH}によるダーゲットの検索に依存し
ないようにお願いするのが,唯一の解決方法だと思います.言い替えると,
@code{VPATH}はビルドされていないソースへの予約にすべきです.

@end table
@c end item about VPATH

@c @item Single Suffix Rules and Separated Dependencies
@item 単一のサフィックスルールと分離された依存性
@cindex Single Suffix Inference Rule
@cindex Rule, Single Suffix Inference
@c A @dfn{Single Suffix Rule} is basically a usual suffix (inference) rule
@c (@samp{.from.to:}), but which @emph{destination} suffix is empty
@c (@samp{.from:}).
@c 
@dfn{単一のサフィックスルール(Single Suffix Rule)}は,基本的に(推測され
る)通常のサフィックスルール(@samp{.from.to:})ですが,@emph{ディスティネー
ション(destination)}サフィックスは空(@samp{.from:})です.

@cindex Separated Dependencies
@c @dfn{Separated dependencies} simply refers to listing the prerequisite
@c of a target, without defining a rule.  Usually one can list on the one
@c hand side, the rules, and on the other hand side, the dependencies.
@c 
@dfn{分離された依存性(Separated dependencies)}は,ルールを定義すること無
く,ターゲットの必要条件のリストを単純に参照します.通常,一方ではルール
を,もう一方で依存性をリストアップすることが可能です.

@c Solaris @command{make} does not support separated dependencies for
@c targets defined by single suffix rules:
@c 
Solarisの@command{make}は,単一のサフィックスルールで定義されたターゲッ
トに対する,分離された依存性をサポートしていません.

@example
$ @kbd{cat Makefile}
.SUFFIXES: .in
foo: foo.in
.in:
        cp $< $@
$ @kbd{touch foo.in}
$ @kbd{make}
$ @kbd{ls}
Makefile  foo.in
@end example

@noindent
@c while @acronym{GNU} Make does:
@c 
一方@acronym{GNU} Makeはサポートしています.

@example
$ @kbd{gmake}
cp foo.in foo
$ @kbd{ls}
Makefile  foo       foo.in
@end example

@c Note it works without the @samp{foo: foo.in} dependency.
@c 
それは@samp{foo: foo.in}の依存性無しで動作することに注意してください.

@example
$ @kbd{cat Makefile}
.SUFFIXES: .in
.in:
        cp $< $@
$ @kbd{make foo}
cp foo.in foo
@end example

@noindent
@c and it works with double suffix inference rules:
@c 
そして,それは二重のサフィックスの継承ルールで動作することにも注意してく
ださい.

@example
$ @kbd{cat Makefile}
foo.out: foo.in
.SUFFIXES: .in .out
.in.out:
        cp $< $@
$ @kbd{make}
cp foo.in foo.out
@end example

@c As a result, in such a case, you have to write target rules.
@c 
結果として,そのような状況では,ターゲットルールを書く必要があります.

@c @item Timestamp Resolution
@item タイムスタンプの分解能
@cindex timestamp resolution
@c Traditionally, file timestamps had 1-second resolution, and
@c @command{make} used those timestamps to determine whether one file was
@c newer than the other.  However, many modern filesystems have
@c timestamps with 1-nanosecond resolution.  Some @command{make}
@c implementations look at the entire timestamp; others ignore the
@c fractional part, which can lead to incorrect results.  Normally this
@c is not a problem, but in some extreme cases you may need to use tricks
@c like @samp{sleep 1} to work around timestamp truncation bugs.
@c 
伝統的に,ファイルのタイムスタンプの分解能は1秒になっていて,
@command{make}はファイルがそれ以外のものより新しいかどうかを決定するため
これらのタイムスタンプを使用していました.しかし,最近のファイルシステム
には分解能が1ナノ秒のタイムスタンプになっているものもたくさんあります.
@command{make}の実装には,タイムスタンプ全体を見るものもあります.それ以
外では,分数部分を無視し,結果として間違ったものとなるはずです.通常,こ
れは問題ありませんが,非常に稀な状況では,タイムスタンプの切り詰めのバグ
を回避するため,@samp{sleep 1}のような手法を使用する必要があるかもしれま
せん.

@c Commands like @samp{cp -p} and @samp{touch -r} typically do not copy
@c file timestamps to their full resolutions (@pxref{Limitations of Usual
@c Tools}).  Hence you should be wary of rules like this:
@c 
@samp{cp -p}と @samp{touch -r}のようなコマンドでは,通常はファイルのタイ
ムスタンプを完全な分解能でコピーしません(@pxref{Limitations of Usual
Tools}).このため,以下のようなルールは気を付けるべきです.

@example
dest: src
        cp -p src dest
@end example

@c as @file{dest} will often appear to be older than @file{src} after the
@c timestamp is truncated, and this can cause @command{make} to do
@c needless rework the next time it is invoked.  To work around this
@c problem, you can use a timestamp file, e.g.:
@c 
それは,タイムスタンプの切り詰め後では,@file{src}よりも@file{dest}が古
くなり,このため@command{make}は次回も不必要な仕事を再び行なうはずです.
この問題を回避するため,タイムスタンプファイルを使用することが可能です.
例えば以下のようにします.

@example
dest-stamp: src
        cp -p src dest
        date >dest-stamp
@end example

@end table




@c ================================================== Manual Configuration

@node Manual Configuration
@c @chapter Manual Configuration
@chapter 手動のコンフィグレーション

@c A few kinds of features can't be guessed automatically by running test
@c programs.  For example, the details of the object-file format, or
@c special options that need to be passed to the compiler or linker.  You
@c can check for such features using ad-hoc means, such as having
@c @command{configure} check the output of the @code{uname} program, or
@c looking for libraries that are unique to particular systems.  However,
@c Autoconf provides a uniform method for handling unguessable features.
@c 
数種類の特徴については,テストプログラムを実行するだけでは自動的に推測で
きません.例えば,オブジェクトファイルのフォーマットの詳細や,コンパイラ
やリンカに渡す必要がある特別なオプションもあります.そのように,
@command{configure}に@code{uname}プログラムの出力を調査させたり,特定の
システムの特有のライブラリを探すといった,特別な手法を使用して特徴を調査
することが可能です.しかし,Autoconfは,推測できない特徴を扱うための一様
な形式の手法を提供しています.

@menu
* Specifying Names::            Specifying the system type
* Canonicalizing::              Getting the canonical system type
* Using System Type::           What to do with the system type
@end menu

@node Specifying Names
@c @section Specifying the System Type
@section システムタイプの指定

@c Like other @acronym{GNU} @command{configure} scripts, Autoconf-generated
@c @command{configure} scripts can make decisions based on a canonical name
@c for the system type, which has the form:
@c @samp{@var{cpu}-@var{vendor}-@var{os}}, where @var{os} can be
@c @samp{@var{system}} or @samp{@var{kernel}-@var{system}}
@c 
他の@acronym{GNU} @command{configure}スクリプトのように,Autoconfが生成
した @command{configure}スクリプトでは,システムタイプの標準名に基づいて
決定することが可能で,それは以下のような形式になります.
@samp{@var{cpu}-@var{vendor}-@var{os}}で,@var{os}は,
@samp{@var{system}}や@samp{@var{kernel}-@var{system}}が可能です.

@c @command{configure} can usually guess the canonical name for the type of
@c system it's running on.  To do so it runs a script called
@c @command{config.guess}, which infers the name using the @code{uname}
@c command or symbols predefined by the C preprocessor.
@c 
@command{configure}は,通常,実行しているシステムタイプの標準名を推測す
ることが可能です.そうするために,@command{config.guess}と呼ばれるスクリ
プトを呼び出し,それは,@code{uname}コマンドや,Cプリプロセッサが前もっ
て定義したシンボルを使用して推測します.

@c Alternately, the user can specify the system type with command line
@c arguments to @command{configure}.  Doing so is necessary when
@c cross-compiling.  In the most complex case of cross-compiling, three
@c system types are involved.  The options to specify them are:
@c 
その代わりとして,ユーザは@command{configure}へのコマンドライン引数で,
システムタイプを指定可能です.それはクロスコンパイル時に必要です.クロス
コンパイルで最も複雑な場合,三つのシステムタイプが呼び出されます.指定す
るオプションは以下の通りです.

@table @option
@item --build=@var{build-type}
@c the type of system on which the package is being configured and
@c compiled.  It defaults to the result of running @command{config.guess}.
@c 
パッケージがコンフィグレーションされコンパイルされるシステムのタイプです.
デフォルトは,@command{config.guess}の実行結果になります.

@item --host=@var{host-type}
@ovindex cross_compiling
@c the type of system on which the package will run.  By default it is the
@c same as the build machine.  Specifying it enables the cross-compilation
@c mode.
@c 
パッケージが実行されるシステムタイプです.デフォルトで,それはビルドマシ
ンと同じになります.それを指定することでクロスコンパイルモードが使用可能
になります.

@item --target=@var{target-type}
@c the type of system for which any compiler tools in the package will
@c produce code (rarely needed).  By default, it is the same as host.
@c 
コードを生成するパッケージ中のコンパイラツールに対するシステムのタイプで
す(必要になることは滅多にありません).デフォルトはホストと同じです.
@end table

@c If you mean to override the result of @command{config.guess}, use
@c @option{--build}, not @option{--host}, since the latter enables
@c cross-compilation.  For historical reasons, passing @option{--host} also
@c changes the build type.  Therefore, whenever you specify @code{--host},
@c be sure to specify @code{--build} too.  This will be fixed in the
@c future.
@c 
@command{config.guess}の結果に優先することを意図した場合,
@option{--host}はクロスコンパイルを利用可能にするものなので,
@option{--host}ではなく@option{--build}を使用してください.歴史的な理由
から,@option{--host}を渡してもビルド形式を変更します.そのため,
@code{--host}を指定するときは常に@code{--build}も確実に指定してください.
これは将来,修正されるでしょう.

@example
./configure --build=i686-pc-linux-gnu --host=m68k-coff
@end example

@noindent
@c will enter cross-compilation mode, but @command{configure} will fail if it
@c can't run the code generated by the specified compiler if you configure
@c as follows:
@c 
上記でクロスコンパイルモードになりますが,以下のようなコンフィグレーショ
ンでは,指定されているコンパイラで生成されるコートが実行不可能なので,
@command{configure}は失敗するでしょう.

@example
./configure CC=m68k-coff-gcc
@end example

@cindex @command{config.sub}
@c @command{configure} recognizes short aliases for many system types; for
@c example, @samp{decstation} can be used instead of
@c @samp{mips-dec-ultrix4.2}.  @command{configure} runs a script called
@c @command{config.sub} to canonicalize system type aliases.
@c 
@command{configure}は,多くのシステムタイプに対する短い別名を認識します.
例えば,@samp{decstation}は@samp{mips-dec-ultrix4.2}の代わりに使用するこ
とが可能です. @command{configure}は,システムタイプの別名を標準化するた
めに@command{config.sub}と呼ばれるスクリプトを実行します.

@c This section deliberately omits the description of the obsolete
@c interface; see @ref{Hosts and Cross-Compilation}.
@c 
このセクションでは,故意に時代遅れのインターフェースの記述を省略してきま
した.@ref{Hosts and Cross-Compilation}を参照してください.


@node Canonicalizing
@c @section Getting the Canonical System Type
@section 標準的なシステムタイプの取得

@c The following macros make the system type available to @command{configure}
@c scripts.
@c 
以下のマクロで,システムタイプが@command{configure}スクリプトで利用可能
になります.

@ovindex build_alias
@ovindex host_alias
@ovindex target_alias

@c The variables @samp{build_alias}, @samp{host_alias}, and
@c @samp{target_alias} are always exactly the arguments of @option{--build},
@c @option{--host}, and @option{--target}; in particular, they are left empty
@c if the user did not use them, even if the corresponding
@c @code{AC_CANONICAL} macro was run.  Any configure script may use these
@c variables anywhere.  These are the variables that should be used when in
@c interaction with the user.
@c 
変数@samp{build_alias},@samp{host_alias},そして@samp{target_alias}は,
常に厳密な@option{--build},@option{--host},そして@option{--target}への
引数となります.特に,対応する@code{AC_CANONICAL}マクロが実行されていて
も,ユーザが使用していない場合は空のままになります.すべてのconfigureス
クリプトは,これらの変数をどこででも使用可能です.これらは,ユーザとの対
話処理で使用されるべき変数です.

@c If you need to recognize some special environments based on their system
@c type, run the following macros to get canonical system names.  These
@c variables are not set before the macro call.
@c 
システムタイプを元にした特殊な環境を認識する必要がある場合,標準的なシス
テム名を取得するために以下のマクロを実行してください.これらの変数はマク
ロ呼び出しの前で設定されません.

@c If you use these macros, you must distribute @command{config.guess} and
@c @command{config.sub} along with your source code.  @xref{Output}, for
@c information about the @code{AC_CONFIG_AUX_DIR} macro which you can use
@c to control in which directory @command{configure} looks for those scripts.
@c 
これらのマクロを使用する場合,ソースコードと一緒に@command{config.guess} 
と@command{config.sub}を配布する必要があります.@command{configure}がこ
れらのスクリプトを探すディレクトリを制御するために使用可能な
@code{AC_CONFIG_AUX_DIR}マクロに関する情報は,@xref{Output}.


@defmac AC_CANONICAL_BUILD
@acindex{CANONICAL_BUILD}
@ovindex build
@ovindex build_cpu
@ovindex build_vendor
@ovindex build_os
@c Compute the canonical build-system type variable, @code{build}, and its
@c three individual parts @code{build_cpu}, @code{build_vendor}, and
@c @code{build_os}.
@c 
標準的なビルドシステムタイプの変数の@code{build}と,それを識別する三つの
部分@code{build_cpu},@code{build_vendor},そして@code{build_os}を求めま
す.

@c If @option{--build} was specified, then @code{build} is the
@c canonicalization of @code{build_alias} by @command{config.sub},
@c otherwise it is determined by the shell script @command{config.guess}.
@c 
@option{--build}が指定されている場合,@code{build}は@code{build_alias} 
の@command{config.sub}で標準化されたものになり,それ以外では,シェルスク
リプト@command{config.guess}で決定されます.
@end defmac

@defmac AC_CANONICAL_HOST
@acindex{CANONICAL_HOST}
@ovindex host
@ovindex host_cpu
@ovindex host_vendor
@ovindex host_os
@c Compute the canonical host-system type variable, @code{host}, and its
@c three individual parts @code{host_cpu}, @code{host_vendor}, and
@c @code{host_os}.
@c 
標準的なホストシステムタイプ変数の@code{host}と,それを識別する三つの部
分@code{host_cpu},@code{host_vendor},そして@code{host_os}を求めます.

@c If @option{--host} was specified, then @code{host} is the
@c canonicalization of @code{host_alias} by @command{config.sub},
@c otherwise it defaults to @code{build}.
@c 
@option{--host}が指定されている場合,@code{host}は@code{host_alias}の
@command{config.sub}で標準化されたものになり,それ以外では,シェルスクリ
プト@command{config.guess}で決定されます.
@end defmac

@defmac AC_CANONICAL_TARGET
@acindex{CANONICAL_TARGET}
@ovindex target
@ovindex target_cpu
@ovindex target_vendor
@ovindex target_os
@c Compute the canonical target-system type variable, @code{target}, and its
@c three individual parts @code{target_cpu}, @code{target_vendor}, and
@c @code{target_os}.
@c 
標準的なターゲットシステムタイプ変数の@code{target},それを識別する三つ
の部分@code{target_cpu},@code{target_vendor},そして@code{target_os} を
求めます.

@c If @option{--target} was specified, then @code{target} is the
@c canonicalization of @code{target_alias} by @command{config.sub},
@c otherwise it defaults to @code{host}.
@c 
@option{--target}が指定されている場合,@code{target}は
@code{target_alias}の@command{config.sub}で標準化されたものになり,それ
以外では,デフォルトで@code{host}になります.
@end defmac

@c Note that there can be artifacts due to the backward compatibility
@c code.  See @xref{Hosts and Cross-Compilation}, for more.
@c 
下位互換性のコードのため,人為的なものがあることに注意してください.詳細
は,@xref{Hosts and Cross-Compilation}.

@node Using System Type
@c @section Using the System Type
@section システムタイプを使用する

@c How do you use a canonical system type?  Usually, you use it in one or
@c more @code{case} statements in @file{configure.ac} to select
@c system-specific C files.  Then, using @code{AC_CONFIG_LINKS}, link those
@c files which have names based on the system name, to generic names, such
@c as @file{host.h} or @file{target.c} (@pxref{Configuration Links}).  The
@c @code{case} statement patterns can use shell wild cards to group several
@c cases together, like in this fragment:
@c 
どのようにして標準的なシステムタイプを使用するのでしょう?通常,システム
特有のCファイルを選択するために@file{configure.ac}で,一つ以上の
@code{case}文を使用します.@code{AC_CONFIG_LINKS}を使用し,システム名に
基づくこれらのファイルを,@file{host.h}や@file{target.c}のような一般的な
名前にリンクしてください(@pxref{Configuration Links}).@code{case} 文の
パターンでは,以下の断片部分のように,複数の状態を分類するためシェルのワ
イルドカードを使用することが可能です.

@example
case $target in
i386-*-mach* | i386-*-gnu*)
             obj_format=aout emulation=mach bfd_gas=yes ;;
i960-*-bout) obj_format=bout ;;
esac
@end example

@noindent
@c and later in @file{configure.ac}, use:
@c 
そして,その後で@file{configure.ac}では以下のように使用します.

@example
AC_CONFIG_LINKS(host.h:config/$machine.h
                object.h:config/$obj_format.h)
@end example

@c Note that the above example uses @code{$target} because it's taken from
@c a tool which can be built on some architecture (@code{$build}), run on
@c another (@code{$host}), but yet handle data for a third architecture
@c (@code{$target}).  Such tools are usually part of a compiler suite, they
@c generate code for a specific @code{$target}.
@c 
上記の例では,いくつかのアーキテクチャ(@code{$build})でビルドされ,別の
もの(@code{$host})で実行することが可能なツールから持ってこられているため,
@code{$target}を使用していて,第三のアーキテクチャ(@code{$target})に対す
るデータを扱っていることにに注意してください.そのようなツールは,通常コ
ンパイラスイートの一部で,それは特殊な@code{$target}に対するコードを生成
します.

@c However @code{$target} should be meaningless for most packages.  If you
@c want to base a decision on the system where your program will be run,
@c make sure you use the @code{$host} variable, as in the following
@c excerpt:
@c 
しかし,@code{$target}はほとんどのパッケージで意味が無いようにすべきです.
プログラムを実行するシステムを決定の基本にしたい場合,以下の抜粋部分のよ
うに,@code{$host}変数を使用していることを確かめてください.

@example
case $host in
  *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
    MUMBLE_INIT="mumble.ini"
    ;;
  *)
    MUMBLE_INIT=".mumbleinit"
    ;;
esac
AC_SUBST([MUMBLE_INIT])
@end example

@c You can also use the host system type to find cross-compilation tools.
@c @xref{Generic Programs}, for information about the @code{AC_CHECK_TOOL}
@c macro which does that.
@c 
クロスコンパイルツールを探すため,ホストシステムタイプを使用することも可
能です.そうするための@code{AC_CHECK_TOOL}マクロの情報は,@xref{Generic
Programs}.


@c ===================================================== Site Configuration.

@node Site Configuration
@c @chapter Site Configuration
@chapter サイトのコンフィグレーション

@c @command{configure} scripts support several kinds of local configuration
@c decisions.  There are ways for users to specify where external software
@c packages are, include or exclude optional features, install programs
@c under modified names, and set default values for @command{configure}
@c options.
@c 
@command{configure}スクリプトは,何種類かのローカルコンフィグレーション
の宣言をサポートします.ユーザが外部ソフトウェアパッケージの場所を指定し
たり,追加の特徴を含めたり排除したり,編集された名前でプログラムをインス
トールしたり,@command{configure}オプションに対してデフォルト値を設定し
たりする方法があります.

@menu
* External Software::           Working with other optional software
* Package Options::             Selecting optional features
* Pretty Help Strings::         Formatting help string
* Site Details::                Configuring site details
* Transforming Names::          Changing program names when installing
* Site Defaults::               Giving @command{configure} local defaults
@end menu

@node External Software
@c @section Working With External Software
@section 外部ソフトウェアとともに動作する

@c Some packages require, or can optionally use, other software packages
@c that are already installed.  The user can give @command{configure}
@c command line options to specify which such external software to use.
@c The options have one of these forms:
@c 
既にインストールしてある他のソフトウェアパッケージを要求したり,追加で使
用していたりしているパッケージもあります.ユーザは,使用するそのような外
部ソフトの指定するために,@command{configure}のコマンドラインオプション
を与えることが可能です.オプションは以下の形式うちの一つです.

@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
@c awful.
@example
--with-@var{package}[=@var{arg}]
--without-@var{package}
@end example

@c For example, @option{--with-gnu-ld} means work with the @acronym{GNU} linker
@c instead of some other linker.  @option{--with-x} means work with The X
@c Window System.
@c 
例えば,@option{--with-gnu-ld}は,他のリンカの代わりに@acronym{GNU}リン
カで動作することを意味します.@option{--with-x}はX Window Systemで動作す
ることを意味します.

@c The user can give an argument by following the package name with
@c @samp{=} and the argument.  Giving an argument of @samp{no} is for
@c packages that are used by default; it says to @emph{not} use the
@c package.  An argument that is neither @samp{yes} nor @samp{no} could
@c include a name or number of a version of the other package, to specify
@c more precisely which other package this program is supposed to work
@c with.  If no argument is given, it defaults to @samp{yes}.
@c @option{--without-@var{package}} is equivalent to
@c @option{--with-@var{package}=no}.
@c 
ユーザはパッケージ名に続く引数を,@samp{=}とその引数で与えることが可能で
す.@samp{no}引数を与えるとパッケージはデフォルトを使用します.つまり,
パッケージを使用し@emph{ません}.@samp{yes}も@samp{no}もない引数は,この
プログラムで動作すると予想される他のパッケージをより正確に指定するために,
他のパッケージの名前やバージョンナンバーを含ることが可能です.引数が与え
られていない場合,デフォルトは@samp{yes}です.
@option{--without-@var{package}}は,@option{--with-@var{package}=no}と同
じです.

@c @command{configure} scripts do not complain about
@c @option{--with-@var{package}} options that they do not support.  This
@c behavior permits configuring a source tree containing multiple packages
@c with a top-level @command{configure} script when the packages support
@c different options, without spurious error messages about options that
@c some of the packages support.  An unfortunate side effect is that option
@c spelling errors are not diagnosed.  No better approach to this problem
@c has been suggested so far.
@c 
@command{configure}スクリプトは,サポートしていない
@option{--with-@var{package}}オプションに文句を言いません.これにより,
複数のパッケージを含むソースツリーにおいて,パッケージが異なるオプション
をサポートするとき,パッケージによってはサポートするものもあるオプション
で深刻なエラーメッセージを出力すること無く,トップレベルの
@command{configure}スクリプトでのコンフィグレーションが可能になります.
残念な副作用として,オプションのスペルエラーは診断されません.この問題の
より良い手法はまだ提案されていません.

@c For each external software package that may be used, @file{configure.ac}
@c should call @code{AC_ARG_WITH} to detect whether the @command{configure}
@c user asked to use it.  Whether each package is used or not by default,
@c and which arguments are valid, is up to you.
@c 
使用される可能性のあるそれぞれの外部ソフトウェアパッケージに対して,
@command{configure}のユーザがそれの使用を依頼したかどうかを検出するため,
@file{configure.ac}で@code{AC_ARG_WITH}を呼び出すべきです.それぞれのパッ
ケージでデフォルトで使用するかどうかと,有効な引数については,好きにして
ください.

@defmac AC_ARG_WITH (@var{package}, @var{help-string}, @ovar{action-if-given}, @ovar{action-if-not-given})
@acindex{ARG_WITH}
@c If the user gave @command{configure} the option @option{--with-@var{package}}
@c or @option{--without-@var{package}}, run shell commands
@c @var{action-if-given}.  If neither option was given, run shell commands
@c @var{action-if-not-given}.  The name @var{package} indicates another
@c software package that this program should work with.  It should consist
@c only of alphanumeric characters and dashes.
@c 
ユーザが@command{configure}に,オプション@option{--with-@var{package}} 
や@option{--without-@var{package}}を与えた場合,シェルコマンド 
@var{action-if-given}を実行します.どちらも与えられていない場合は,シェ
ルコマンド@var{action-if-not-given}を実行します.名前@var{package}は,こ
のプログラムとともに動作する,他のソフトウェアパッケージを示します.それ
は,英数字とダッシュだけから構成されるべきです.

@c The option's argument is available to the shell commands
@c @var{action-if-given} in the shell variable @code{withval}, which is
@c actually just the value of the shell variable @code{with_@var{package}},
@c with any @option{-} characters changed into @samp{_}.  You may use that
@c variable instead, if you wish.
@c 
オプションの引数は,@samp{-}文字を@samp{_}に変更したシェル変数 
@code{with_@var{package}}の実際の値となる,シェル変数@code{withval}内の
シェルコマンド@var{action-if-given}が利用可能です.望むなら,変わりにそ
の値を使用してもかまいません.

@c The argument @var{help-string} is a description of the option that
@c looks like this:
@c 
引数@var{help-string}は以下のような,オプションの説明です.
@example
  --with-readline         support fancy command line editing
@end example

@noindent
@c @var{help-string} may be more than one line long, if more detail is
@c needed.  Just make sure the columns line up in @samp{configure
@c --help}.  Avoid tabs in the help string.  You'll need to enclose the
@c help string in @samp{[} and @samp{]} in order to produce the leading
@c spaces.
@c 
詳細が必要な場合,@var{help-string}は一行以上でもかまいません.
@samp{configure --help}で行が整列していることを確認してください.ヘルプ
文字列でのタブの使用は避けてください.前置するスペースを生成するため,ヘ
ルプ文字列を@samp{[}と@samp{]}で囲む必要があるでしょう.

@c You should format your @var{help-string} with the macro
@c @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
@c 
@var{help-string}は,マクロ@code{AS_HELP_STRING}で書式化すべきです
(@pxref{Pretty Help Strings}).
@end defmac

@defmac AC_WITH (@var{package}, @var{action-if-given}, @ovar{action-if-not-given})
@acindex{WITH}
@c This is an obsolete version of @code{AC_ARG_WITH} that does not
@c support providing a help string.
@c 
これはヘルプ文字列の提供をサポートしていない,@code{AC_ARG_WITH}の時代遅
れのバージョンです.
@end defmac

@node Package Options
@c @section Choosing Package Options
@section パッケージオプションの選択

@c If a software package has optional compile-time features, the user can
@c give @command{configure} command line options to specify whether to
@c compile them.  The options have one of these forms:
@c 
ソフトウェアパッケージに追加のコンパイル時の特徴がある場合,それらをコン
パイルするかどうか指定するため,ユーザは@command{configure}コマンドライ
ンオプションを与えることが可能です.オプションは以下の書式の一つになりま
す.

@c FIXME: Can't use @ovar here, Texinfo 4.0 goes lunatic and emits something
@c awful.
@example
--enable-@var{feature}[=@var{arg}]
--disable-@var{feature}
@end example

@c These options allow users to choose which optional features to build and
@c install.  @option{--enable-@var{feature}} options should never make a
@c feature behave differently or cause one feature to replace another.
@c They should only cause parts of the program to be built rather than left
@c out.
@c 
これらのオプションで,ビルドしインストールする追加の機能を,ユーザが選択
することが可能になります.@option{--enable-@var{feature}}オプションで,
ある機能に異なる動作をさせたり,ある機能を他の機能で置換させたりするべき
ではありません.それらは,プログラムの部分をビルドする,または削除するた
めだけにすべきです.

@c The user can give an argument by following the feature name with
@c @samp{=} and the argument.  Giving an argument of @samp{no} requests
@c that the feature @emph{not} be made available.  A feature with an
@c argument looks like @option{--enable-debug=stabs}.  If no argument is
@c given, it defaults to @samp{yes}.  @option{--disable-@var{feature}} is
@c equivalent to @option{--enable-@var{feature}=no}.
@c 
ユーザは,機能の名前に続く引数を@samp{=}とその引数で与えることが可能です.
@samp{no}引数を与えるとその機能は利用でき@emph{ません}.機能とは,
@option{--enable-debug=stabs}のような引数です.引数が与えられていない場
合は,デフォルトで@samp{yes}です.@option{--disable-@var{feature}}は, 
@option{--enable-@var{feature}=no}と同じです.

@c @command{configure} scripts do not complain about
@c @option{--enable-@var{feature}} options that they do not support.
@c This behavior permits configuring a source tree containing multiple
@c packages with a top-level @command{configure} script when the packages
@c support different options, without spurious error messages about options
@c that some of the packages support.
@c An unfortunate side effect is that option spelling errors are not diagnosed.
@c No better approach to this problem has been suggested so far.
@c 
@command{configure}スクリプトは,サポートしていない 
@option{--enable-@var{feature}}オプションに文句を言いません.これにより,
複数のパッケージを含むソースツリーにおいて,パッケージが異なるオプション
をサポートするとき,パッケージによってはサポートするものもあるオプション
で深刻なエラーメッセージを出力すること無く,トップレベルの
@command{configure} スクリプトでのコンフィグレーションが可能になります.
残念な副作用として,オプションのスペルエラーは診断されません.この問題の
より良い手法はまだ提案されていません.

@c For each optional feature, @file{configure.ac} should call
@c @code{AC_ARG_ENABLE} to detect whether the @command{configure} user asked
@c to include it.  Whether each feature is included or not by default, and
@c which arguments are valid, is up to you.
@c 
使用される可能性のあるそれぞれの追加の機能に対して,@command{configure} 
のユーザがそれを含めることを依頼したかどうかを検出するため,
@file{configure.ac}で@code{AC_ARG_ENABLE}を呼び出すべきです.それぞれの
機能をデフォルトで使用するかどうかと,有効な引数については,好きにしてく
ださい.

@defmac AC_ARG_ENABLE (@var{feature}, @var{help-string}, @ovar{action-if-given}, @ovar{action-if-not-given})
@acindex{ARG_ENABLE}
@c If the user gave @command{configure} the option
@c @option{--enable-@var{feature}} or @option{--disable-@var{feature}}, run
@c shell commands @var{action-if-given}.  If neither option was given, run
@c shell commands @var{action-if-not-given}.  The name @var{feature}
@c indicates an optional user-level facility.  It should consist only of
@c alphanumeric characters and dashes.
@c 
ユーザが,@command{configure}にオプション@option{--enable-@var{feature}} 
や@option{--disable-@var{feature}}を与えた場合,シェルコマンド 
@var{action-if-given}を実行します.どちらも与えられない場合は,シェルコ
マンド@var{action-if-not-given}を実行します.名前@var{feature}はオプショ
ンのユーザレベルの機能を示します.それは,英数字とダッシュだけで構成すべ
きです.

@c The option's argument is available to the shell commands
@c @var{action-if-given} in the shell variable @code{enableval}, which is
@c actually just the value of the shell variable
@c @code{enable_@var{feature}}, with any @option{-} characters changed into
@c @samp{_}.  You may use that variable instead, if you wish.  The
@c @var{help-string} argument is like that of @code{AC_ARG_WITH}
@c (@pxref{External Software}).
@c 
オプションの引数は,@samp{-}文字を@samp{_}に変更したシェル変数 
@code{enable_@var{package}}の実際の値となる,シェル変数@code{enableval} 
内のシェルコマンド@var{action-if-given}が利用可能です.望むなら,変わり
にその値を使用してもかまいません.@var{help-string}引数は,
@code{AC_ARG_WITH}と同様にしてください(@pxref{External Software}).

@c You should format your @var{help-string} with the macro
@c @code{AS_HELP_STRING} (@pxref{Pretty Help Strings}).
@c 
@var{help-string}は,マクロ@code{AS_HELP_STRING}で書式化すべきです
(@pxref{Pretty Help Strings}).
@end defmac

@defmac AC_ENABLE (@var{feature}, @var{action-if-given}, @ovar{action-if-not-given})
@acindex{ENABLE}
@c This is an obsolete version of @code{AC_ARG_ENABLE} that does not
@c support providing a help string.
@c 
これはヘルプ文字列の供給をサポートしない@code{AC_ARG_ENABLE}の時代遅れの
バージョンです.
@end defmac


@node Pretty Help Strings
@c @section Making Your Help Strings Look Pretty
@section ヘルプ文字列を小奇麗にする

@c Properly formatting the @samp{help strings} which are used in
@c @code{AC_ARG_WITH} (@pxref{External Software}) and @code{AC_ARG_ENABLE}
@c (@pxref{Package Options}) can be challenging.  Specifically, you want
@c your own @samp{help strings} to line up in the appropriate columns of
@c @samp{configure --help} just like the standard Autoconf @samp{help
@c strings} do.  This is the purpose of the @code{AS_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{AS_HELP_STRING}マクロの目
的はここにあります.

@defmac AS_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],
             AS_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{AS_HELP_STRING} is @strong{unquoted}.
@c Then the last few lines of @samp{configure --help} will appear like
@c this:
@c 
@code{AS_HELP_STRING}の呼び出しは@strong{引用符で囲まない}ことに注意して
ください.@samp{configure --help}の最後の数行に,以下のような行が現れま
す.

@example
--enable and --with options recognized:
  --with-foo              use foo (default is NO)
@end example

@c The @code{AS_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{AS_HELP_STRING}マクロは,以下の例のように,@var{left-hand-side} そ
して/または@var{right-hand-side}がマクロ引数で構成される時,特に役に立ち
ます.

@example
AC_DEFUN(MY_ARG_WITH,
[AC_ARG_WITH([$1],
             AS_HELP_STRING([--with-$1], [use $1 (default is $2)]),
             ac_cv_use_$1=$withval, ac_cv_use_$1=no),
AC_CACHE_CHECK(whether to use $1, ac_cv_use_$1, ac_cv_use_$1=$2)])
@end example
@end defmac


@node Site Details
@c @section Configuring Site Details
@section サイトのコンフィグレーションの詳細

@c Some software packages require complex site-specific information.  Some
@c examples are host names to use for certain services, company names, and
@c email addresses to contact.  Since some configuration scripts generated
@c by Metaconfig ask for such information interactively, people sometimes
@c wonder how to get that information in Autoconf-generated configuration
@c scripts, which aren't interactive.
@c 
複雑なサイト指定の情報が必要となるソフトウェアパッケージもあります.例え
ば,特定のサービスで使用する,ホスト名,会社名,そして連絡先の電子メール
アドレスがあげられます.Metaconfigが生成したコンフィグレーションスクリプ
トには,そのような情報を対話的に尋ねるものもあるので,Autoconfが生成した
対話的でないコンフィグレーションスクリプトが,どうやってその情報を得るの
かと不思議に思うこともあるでしょう.

@c Such site configuration information should be put in a file that is
@c edited @emph{only by users}, not by programs.  The location of the file
@c can either be based on the @code{prefix} variable, or be a standard
@c location such as the user's home directory.  It could even be specified
@c by an environment variable.  The programs should examine that file at
@c run time, rather than at compile time.  Run-time configuration is more
@c convenient for users and makes the configuration process simpler than
@c getting the information while configuring.  @xref{Directory Variables,,
@c Variables for Installation Directories, standards, @acronym{GNU} Coding
@c Standards}, for more information on where to put data files.
@c 
そのようなサイトコンフィギュレーション情報は,プログラムではなく@emph{ユー
ザだけ}が編集するファイルに書き込むべきです.ファイルの場所は,
@code{prefix}変数に基づくところか,ユーザのホームディレクトリのような,
標準的な場所が可能です.それは環境変数で指定するべきでしょう.プログラム
では,コンパイル時ではなく実行時にファイルを調査するべきです.実行時のコ
ンフィグレーションはユーザにとって便利で,コンフィグレーション時に情報を
得るよりコンフィグレーション処理が簡単になります.データファイルを書き込
む場所の詳細は,@xref{Directory Variables, , Variables for Installation
Directories, standards, @acronym{GNU} Coding Standards}.

@node Transforming Names
@c @section Transforming Program Names When Installing
@section インストール時のプログラム名の変換

@c Autoconf supports changing the names of programs when installing them.
@c In order to use these transformations, @file{configure.ac} must call the
@c macro @code{AC_ARG_PROGRAM}.
@c 
Autoconfは,インストール時にプログラム名を変更することをサポートします.
これらの変換を使用するため,@file{configure.ac}でマクロ
@code{AC_ARG_PROGRAM}を呼び出す必要があります.

@defmac AC_ARG_PROGRAM
@acindex{ARG_PROGRAM}
@ovindex program_transform_name
@c Place in output variable @code{program_transform_name} a sequence of
@c @code{sed} commands for changing the names of installed programs.
@c 
出力変数@code{program_transform_name}に,インストールするプログラムの名
前を変更するため,@code{sed}コマンドのシーケンスを配置します.

@c If any of the options described below are given to @command{configure},
@c program names are transformed accordingly.  Otherwise, if
@c @code{AC_CANONICAL_TARGET} has been called and a @option{--target} value
@c is given, the target type followed by a dash is used as a prefix.
@c Otherwise, no program name transformation is done.
@c 
下記のオプションのいずれかが@command{configure}に与えれらている場合,プ
ログラム名は適宜変換されます.それ以外では,@code{AC_CANONICAL_SYSTEM} 
が呼び出されて,@samp{--target}の値が与えられている場合,ダッシュが続い
ているターゲットタイプがプレフィクスとして使用されます.それ以外ではプロ
グラム名は変換されません.
@end defmac

@menu
* Transformation Options::      @command{configure} options to transform names
* Transformation Examples::     Sample uses of transforming names
* Transformation Rules::        @file{Makefile} uses of transforming names
@end menu

@node Transformation Options
@c @subsection Transformation Options
@subsection 変換オプション

@c You can specify name transformations by giving @command{configure} these
@c command line options:
@c 
@command{configure}に以下のコマンドラインオプションを与えることで,名前
変換を指定することが可能です.

@table @option
@item --program-prefix=@var{prefix}
@c prepend @var{prefix} to the names;
@c 
@var{prefix}を名前に前置します.

@item --program-suffix=@var{suffix}
@c append @var{suffix} to the names;
@c 
@var{suffix}を名前に後置します.

@item --program-transform-name=@var{expression}
@c perform @code{sed} substitution @var{expression} on the names.
@c 
@code{sed}の@var{expression}で名前への代入を実行します.
@end table

@node Transformation Examples
@c @subsection Transformation Examples
@subsection 変換例

@c These transformations are useful with programs that can be part of a
@c cross-compilation development environment.  For example, a
@c cross-assembler running on a Sun 4 configured with
@c @option{--target=i960-vxworks} is normally installed as
@c @file{i960-vxworks-as}, rather than @file{as}, which could be confused
@c with a native Sun 4 assembler.
@c 
これらの変換は,クロスコンパイル開発環境の一部となるプログラムで役に立ち
ます.例えば,@option{--target=i960-vxworks}オプションでコンフィグレーショ
ンされたSun 4でクロスアセンブラの実行では,通常,@file{as}ではなく
@file{i960-vxworks-as}がインストールされるので,ネイティブのSun 4アセン
ブラと混在できます.

@c You can force a program name to begin with @file{g}, if you don't want
@c @acronym{GNU} programs installed on your system to shadow other programs with
@c the same name.  For example, if you configure @acronym{GNU} @code{diff} with
@c @option{--program-prefix=g}, then when you run @samp{make install} it is
@c installed as @file{/usr/local/bin/gdiff}.
@c 
@acronym{GNU}プログラムを,他のプログラムを隠してしまうような同じ名前で
システムにインストールしたくない場合,プログラム名を@file{g}から始めるこ
とができます.例えば,@acronym{GNU} @code{diff}を
@option{--program-prefix=g}でコンフィグレーションする場合,@samp{make
install}時に@file{/usr/local/bin/gdiff}としてインストールされます.

@c As a more sophisticated example, you could use
@c 
より洗練された例として,以下を使用することができます.

@example
--program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
@end example
@noindent

@c to prepend @samp{g} to most of the program names in a source tree,
@c excepting those like @code{gdb} that already have one and those like
@c @code{less} and @code{lesskey} that aren't @acronym{GNU} programs.  (That is
@c assuming that you have a source tree containing those programs that is
@c set up to use this feature.)
@c 
これは,ソースツリーで,@samp{g}をほとんどのプログラム名に前置し, 
@code{gdb}のように既に持っているものと,@code{less}と@code{lesskey}のよ
うに@acronym{GNU}プログラムでないものは例外とすることができます.(この機
能を使用するために,セットアップされたプログラムを含むソースツリーを持っ
ていることが仮定されます.)

@c One way to install multiple versions of some programs simultaneously is
@c to append a version number to the name of one or both.  For example, if
@c you want to keep Autoconf version 1 around for awhile, you can configure
@c Autoconf version 2 using @option{--program-suffix=2} to install the
@c programs as @file{/usr/local/bin/autoconf2},
@c @file{/usr/local/bin/autoheader2}, etc.  Nevertheless, pay attention
@c that only the binaries are renamed, therefore you'd have problems with
@c the library files which might overlap.
@c 
同時にいくつかのプログラムの複数のバージョンをインストールする方法の一つ
として,一つあるいは両方の名前にバージョンナンバーを追加することです.例
えば,しばらくの間Autoconfバージョン1を保持したい場合,Autoconfバージョ
ン2を,@file{/usr/local/bin/autoconf2}や 
@file{/usr/local/bin/autoheader2}等としてプログラムをインストールするた
め,@option{--program-suffix=2}を使用してコンフィグレーションすることが
可能です.それにもかかわらず,バイナリのみ名前が変更されることに注意して
ください.そのため,オーバーラップする可能性のあるライブラリファイルは問
題になるでしょう.

@node Transformation Rules
@c @subsection Transformation Rules
@subsection 変換規則

@c Here is how to use the variable @code{program_transform_name} in a
@c @file{Makefile.in}:
@c 
@file{Makefile.in}で変数@code{program_transform_name}を使用する方法は以
下のようになります.


@example
PROGRAMS = cp ls rm
transform = @@program_transform_name@@
install:
        for p in $(PROGRAMS); do \
          $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
                                              sed '$(transform)'`; \
        done

uninstall:
        for p in $(PROGRAMS); do \
          rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
        done
@end example

@c It is guaranteed that @code{program_transform_name} is never empty, and
@c that there are no useless separators.  Therefore you may safely embed
@c @code{program_transform_name} within a sed program using @samp{;}:
@c 
@code{program_transform_name}が空ではなく,無意味なセパレータがないこと
が保証されます.そのため,@samp{;}使用している@code{sed}プログラムに
@code{program_transform_name}を安全に埋め込むことができます.

@example
transform = @@program_transform_name@@
transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
@end example

@c Whether to do the transformations on documentation files (Texinfo or
@c @code{man}) is a tricky question; there seems to be no perfect answer,
@c due to the several reasons for name transforming.  Documentation is not
@c usually particular to a specific architecture, and Texinfo files do not
@c conflict with system documentation.  But they might conflict with
@c earlier versions of the same files, and @code{man} pages sometimes do
@c conflict with system documentation.  As a compromise, it is probably
@c best to do name transformations on @code{man} pages but not on Texinfo
@c manuals.
@c 
ドキュメントファイル(Texinfoや@code{man})で変換するどうかは,慎重を要す
る質問です.名前を変える理由がいくつかあるため,完全な答えがあるとは思わ
れません.ドキュメントは通常,特定のアーキテクチャ特有のものではなく,
Texinfoファイルはシステムドキュメントと衝突しません.しかし,それらは同
じファイルの前のバージョンと衝突したり,@code{man}ページはシステムドキュ
メントと衝突することがあるかもしれません.妥協案として,@code{man}ページ
は名前を変換してTexinfoマニュアルは変換しないのがおそらく最善でしょう.

@node Site Defaults
@c @section Setting Site Defaults
@section サイトのデフォルトの設定

@c Autoconf-generated @command{configure} scripts allow your site to provide
@c default values for some configuration values.  You do this by creating
@c site- and system-wide initialization files.
@c 
Autoconfが生成した@command{configure}スクリプトで,コンフィグレーション
の値に対して,サイトのデフォルト値を供給できるものもあります.これは,サ
イト全体と システム全体の初期化ファイルを作成することで可能となります.

@evindex CONFIG_SITE
@c If the environment variable @code{CONFIG_SITE} is set, @command{configure}
@c uses its value as the name of a shell script to read.  Otherwise, it
@c reads the shell script @file{@var{prefix}/share/config.site} if it exists,
@c then @file{@var{prefix}/etc/config.site} if it exists.  Thus,
@c settings in machine-specific files override those in machine-independent
@c ones in case of conflict.
@c 
環境変数@code{CONFIG_SITE}が設定されている場合,@command{configure}は,
その値を読み込むシェルスクリプトの名前として使用します.それ以外では,シェ
ルスクリプト@file{@var{prefix}/share/config.site}があればそれを読み込み, 
次に@file{@var{prefix}/etc/config.site}があればそれを読み込みます.この
ため,それらが衝突する状況では,マシン特有のファイルでの設定がマシン非依
存の設定に優先します.

@c Site files can be arbitrary shell scripts, but only certain kinds of
@c code are really appropriate to be in them.  Because @command{configure}
@c reads any cache file after it has read any site files, a site file can
@c define a default cache file to be shared between all Autoconf-generated
@c @command{configure} scripts run on that system (@pxref{Cache Files}).  If
@c you set a default cache file in a site file, it is a good idea to also
@c set the output variable @code{CC} in that site file, because the cache
@c file is only valid for a particular compiler, but many systems have
@c several available.
@c 
サイトファイルは任意のシェルスクリプトが可能ですが,本来なら特定の種類の
コードだけがその中にあるのが適切です.@command{configure}はサイトファイ
ルを読み込んだ後でキャッシュファイルを読み込むので,サイトファイルは,そ
のシステムで実行されるAutoconfが生成した全ての@command{configure}スクリ
プト間で,デフォルトのキャッシュファイルを共有することが可能になっていま
す(@pxref{Cache Files}).キャッシュファイルは特定のコンパイラに対しての
みで有効ですが,システムの多くは複数の利用可能なコンパイラがあるので,デ
フォルトのキャッシュファイルをサイトファイルに設定した場合,サイトファイ
ルで出力変数@code{CC}を設定するのは良い考えです.

@c You can examine or override the value set by a command line option to
@c @command{configure} in a site file; options set shell variables that have
@c the same names as the options, with any dashes turned into underscores.
@c The exceptions are that @option{--without-} and @option{--disable-} options
@c are like giving the corresponding @option{--with-} or @option{--enable-}
@c option and the value @samp{no}.  Thus, @option{--cache-file=localcache}
@c sets the variable @code{cache_file} to the value @samp{localcache};
@c @option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
@c @code{enable_warnings} to the value @samp{no}; @option{--prefix=/usr} sets the
@c variable @code{prefix} to the value @samp{/usr}; etc.
@c 
@command{configure}へのコマンドラインオプションで,サイトファイルで設定
された値を調査したり優先したりすることが可能です.オプションは,ダッシュ
をアンダースコアに変更した,オプションと同じ名前のシェル変数を設定します.
例外は,@samp{--without-}と@samp{--disable-}オプションが,対応する
@samp{--with-}や@samp{--enable-}オプションに値@samp{no}を与えたものに似
ていることです.このため,@option{--cache-file=localcache}は,変数 
@code{cache_file}を値@samp{localcache}に設定し,
@option{--enable-warnings=no}や@option{--disable-warnings}は,変数 
@code{enable_warnings}を値@samp{no}に設定しします.
@option{--prefix=/usr}は,変数@code{prefix}を値@samp{/usr}に設定します.
といったようになっています.

@c Site files are also good places to set default values for other output
@c variables, such as @code{CFLAGS}, if you need to give them non-default
@c values: anything you would normally do, repetitively, on the command
@c line.  If you use non-default values for @var{prefix} or
@c @var{exec_prefix} (wherever you locate the site file), you can set them
@c in the site file if you specify it with the @code{CONFIG_SITE}
@c environment variable.
@c 
デフォルトでない値を与える必要がある場合,サイトファイルは@code{CFLAGS} 
のような他の出力変数に対しデフォルト値を設定するための良い場所です.通常
コマンドラインで繰り返し行っていることならなんでもできます.@var{prefix} 
や@var{exec_prefix}に対してデフォルト値ではないものを使用したい場合(サイ
トファイルの場所がどこであれ),@code{CONFIG_SITE} を用いて指定すると,サ
イトファイルで設定できます.

@c You can set some cache values in the site file itself.  Doing this is
@c useful if you are cross-compiling, where it is impossible to check features
@c that require running a test program.  You could ``prime the cache'' by
@c setting those values correctly for that system in
@c @file{@var{prefix}/etc/config.site}.  To find out the names of the cache
@c variables you need to set, look for shell variables with @samp{_cv_} in
@c their names in the affected @command{configure} scripts, or in the Autoconf
@c M4 source code for those macros.
@c 
サイトファイル自身でキャッシュ値を設定することもできます.こうすることで,
テストプログラムの実行が必要な特徴の調査が不可能なクロスコンパイルで役に
立ちます.システムに対して@file{@var{prefix}/etc/config.site} でこれらの
値を正しく設定することで,``キャッシュの用意''が可能です.設定する必要が
あるキャッシュ変数名を見つけるため,影響を受けた@command{configure}スク
リプトやこれらのマクロに対するAutoconf M4ソースコードで,名前に
@samp{_cv_}を伴うシェル変数を探してください.

@c The cache file is careful to not override any variables set in the site
@c files.  Similarly, you should not override command-line options in the
@c site files.  Your code should check that variables such as @code{prefix}
@c and @code{cache_file} have their default values (as set near the top of
@c @command{configure}) before changing them.
@c 
キャッシュファイルは,サイトファイルで設定した変数を無効にしないよう注意
深く実行します.また,サイトファイルでコマンドラインオプションを無効にす
るべきではありません.コードでは,@code{prefix}と@code{cache_file} のよ
うな変数を変更する前に,(@command{configure}の最初の方で設定される) デフォ
ルト値をがあるかどうかを調査するべきです.

@c Here is a sample file @file{/usr/share/local/gnu/share/config.site}.  The
@c command @samp{configure --prefix=/usr/share/local/gnu} would read this
@c file (if @code{CONFIG_SITE} is not set to a different file).
@c 
サンプルファイル@file{/usr/share/local/gnu/share/config.site}が以下のよ
うになります.コマンド@samp{configure --prefix=/usr/share/local/gnu} は,
(@code{CONFIG_SITE}で異なるファイルを設定していない場合)このファイルを読
み込みます.

@example
# config.site for configure
#
# Change some defaults.
test "$prefix" = NONE && prefix=/usr/share/local/gnu
test "$exec_prefix" = NONE && exec_prefix=/usr/local/gnu
test "$sharedstatedir" = '$prefix/com' && sharedstatedir=/var
test "$localstatedir" = '$prefix/var' && localstatedir=/var

# Give Autoconf 2.x generated configure scripts a shared default
# cache file for feature test results, architecture-specific.
if test "$cache_file" = /dev/null; then
  cache_file="$prefix/var/config.cache"
  # A cache file is only valid for one C compiler.
  CC=gcc
fi
@end example


@c ============================================== Running configure Scripts.

@node Running configure Scripts
@c @chapter Running @command{configure} Scripts
@chapter @command{configure}スクリプトの実行
@cindex @command{configure}

@c Below are instructions on how to configure a package that uses a
@c @command{configure} script, suitable for inclusion as an @file{INSTALL}
@c file in the package.  A plain-text version of @file{INSTALL} which you
@c may use comes with Autoconf.
@c 
以下は,@command{configure}スクリプトを使用したパッケージのコンフィグレー
ション方法の説明書で,パッケージの@file{INSTALL}ファイルに含めるのに適切
なものです.使用可能なプレーンテキストバージョンの@file{INSTALL} は,
Autoconfに付属しています.

@menu
* Basic Installation::          Instructions for typical cases
* Compilers and Options::       Selecting compilers and optimization
* Multiple Architectures::      Compiling for multiple architectures at once
* Installation Names::          Installing in different directories
* Optional Features::           Selecting optional features
* System Type::                 Specifying the system type
* Sharing Defaults::            Setting site-wide defaults for @command{configure}
* Defining Variables::          Specifying the compiler etc.
* configure Invocation::        Changing how @command{configure} runs
@end menu

@set autoconf
@include install-ja.texi


@c ============================================== Recreating a Configuration

@node config.status Invocation
@c @chapter Recreating a Configuration
@chapter コンフィグレーションの再生成
@cindex @command{config.status}

@c The @command{configure} script creates a file named @file{config.status},
@c which actually configures, @dfn{instantiates}, the template files.  It
@c also records the configuration options that were specified when the
@c package was last configured in case reconfiguring is needed.
@c 
@command{configure}スクリプトは,実際にコンフィグレーションを行なう
@dfn{実際に作成されるもの(instantiates)}のテンプレートファイルとなる
@file{config.status}という名前のファイルを作成します.それは,再コンフィ
グレーションが必要な状況でパッケージが前回コンフィグレーションされたとき
に指定されたコンフィグレーションオプションも記録しています.

@c Synopsis:
@c 
概要です.
@example
./config.status @var{option}@dots{} [@var{file}@dots{}]
@end example

@c It configures the @var{files}; if none are specified, all the templates
@c are instantiated.  The files must be specified without their
@c dependencies, as in
@c 
@var{files}をコンフィグレーションします.何も指定されていない場合は全て
のテンプレートの実体が作成されます.ファイルは,依存性無しで指定する必要
があり,以下のようにします.

@example
./config.status foobar
@end example

@noindent
@c not
@c 
以下のようにはしません.

@example
./config.status foobar:foo.in:bar.in
@end example

@c The supported @var{option}s are:
@c 
サポートされている@var{option}は以下のとおりです.

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options, the list of the template
@c files, and exit.
@c 
コマンドラインオプションの概要とテンプレートファイルのリストを出力し,終
了します.

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力し終了します.

@item --silent
@itemx --quiet
@itemx -q
@c Do not print progress messages.
@c 
処理中のメッセージを出力しません.

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時ファイルを削除しません.

@item --file=@var{file}[:@var{template}]
@c Require that @var{file} be instantiated as if
@c @samp{AC_CONFIG_FILES(@var{file}:@var{template})} was used.  Both
@c @var{file} and @var{template} may be @samp{-} in which case the standard
@c output and/or standard input, respectively, is used.  If a
@c @var{template} filename is relative, it is first looked for in the build
@c tree, and then in the source tree.  @xref{Configuration Actions}, for
@c more details.
@c 
@samp{AC_CONFIG_FILES(@var{file}:@var{template})}が使用されているかのよ
うに,実際に作成されるファイルを要求します.@var{file}と@var{template}は
どちらも@samp{-}が可能で,それぞれ標準出力そして/または標準入力が使用さ
れます.@var{template}ファイル名が相対的な場合,最初にビルドツリーで検索
され,次にソースツリーで検索されます.詳細は,@xref{Configuration
Actions}.

@c This option and the following ones provide one way for separately
@c distributed packages to share the values computed by @command{configure}.
@c Doing so can be useful if some of the packages need a superset of the
@c features that one of them, perhaps a common library, does.  These
@c options allow a @file{config.status} file to create files other than the
@c ones that its @file{configure.ac} specifies, so it can be used for a
@c different package.
@c 
このオプションと以下のものは,個別に配布されているパッケージで
@command{configure}が計算した値を共有する方法を提供します.そうすること
は,複数のパッケージがそれらのスーパーセット,おそらく共通のライブラリを
必要とする場合に役に立つはずです.これらのオプションで,
@file{config.status} ファイルが@file{configure.ac}で指定しているもの以外
のファイルも作成可能になるので,異なるパッケージで使用可能になります.

@item --header=@var{file}[:@var{template}]
@c Same as @option{--file} above, but with @samp{AC_CONFIG_HEADERS}.
@c 
@option{--file}と同じですが,@samp{AC_CONFIG_HEADERS}を使用します.

@item --recheck
@c Ask @file{config.status} to update itself and exit (no instantiation).
@c This option is useful if you change @command{configure}, so that the
@c results of some tests might be different from the previous run.  The
@c @option{--recheck} option re-runs @command{configure} with the same arguments
@c you used before, plus the @option{--no-create} option, which prevents
@c @command{configure} from running @file{config.status} and creating
@c @file{Makefile} and other files, and the @option{--no-recursion} option,
@c which prevents @command{configure} from running other @command{configure}
@c scripts in subdirectories.  (This is so other @file{Makefile} rules can
@c run @file{config.status} when it changes; @pxref{Automatic Remaking},
@c for an example).
@c 
@file{config.status}にそれ自身を更新するかどうか尋ねて終了します(実際に
作成しません).いくつかのテストの結果が前回のもの異なる可能性があるので,
このオプションは@command{configure}を変更した場合に役に立ちます.
@option{--recheck}では,前回使用したものと同じ引数に加え,
@command{configure}が@file{config.status}を実行したり@file{Makefile}とそ
の他のファイルを作成したりしないようにする@option{--no-create}オプション
と,@command{configure}がサブディレクトリでその他の@command{configure}ス
クリプトを実行しないようにする@option{--no-recursion}を用いて再実行しま
す.(@file{config.status}が変更された時に,他の@file{Makefile}のルールで
実行可能なようにするため,これは存在しています.例は,@pxref{Automatic
Remaking}).
@end table

@c @file{config.status} checks several optional environment variables that
@c can alter its behavior:
@c 
@file{config.status}は,その動作を変更するいくつかのオプションの環境変数
を調査します.

@defvar CONFIG_SHELL
@evindex CONFIG_SHELL
@c The shell with which to run @command{configure} for the @option{--recheck}
@c option.  It must be Bourne-compatible.  The default is a shell that
@c supports @env{LINENO} if available, and @file{/bin/sh} otherwise.
@c 
@option{--recheck}オプションで@command{configure}が実行されるシェルです.
Bourne互換にする必要があります.デフォルトは,利用可能な場合は
@env{LINENO}をサポートするシェルで,それ以外では@file{/bin/sh}になります.
@end defvar

@defvar CONFIG_STATUS
@evindex CONFIG_STATUS
@c The file name to use for the shell script that records the
@c configuration.  The default is @file{./config.status}.  This variable is
@c useful when one package uses parts of another and the @command{configure}
@c scripts shouldn't be merged because they are maintained separately.
@c 
コンフィグレーションを記録するシェルスクリプトのファイル名です.デフォル
トは@file{./config.status}です.この変数は,他のパッケージの一部を使用し
たり,@command{configure}スクリプトが別々に管理されていて,マージされて
いないとき役に立ちます.
@end defvar

@c You can use @file{./config.status} in your Makefiles.  For example, in
@c the dependencies given above (@pxref{Automatic Remaking}),
@c @file{config.status} is run twice when @file{configure.ac} has changed.
@c If that bothers you, you can make each run only regenerate the files for
@c that rule:
@c 
Makefileで@file{./config.status}を使用することも可能です.例えば,上記
(@pxref{Automatic Remaking})のような依存がある状況では,
@file{configure.ac}が変更された時,@file{config.status}は2回実行されます.
それがうるさい場合,以下のようなルールで,ファイルを再生成するためだけに
それぞれ実行させることが可能です.
@example
@group
config.h: stamp-h
stamp-h: config.h.in config.status
        ./config.status config.h
        echo > stamp-h

Makefile: Makefile.in config.status
        ./config.status Makefile
@end group
@end example

@c The calling convention of @file{config.status} has changed; see
@c @ref{Obsolete config.status Use}, for details.
@c 
@file{config.status}の呼び出しの慣習は変更されました.詳細は,
@ref{Obsolete config.status Use}を参照してください.


@c =================================================== Obsolete Constructs

@node Obsolete Constructs
@c @chapter Obsolete Constructs
@chapter 時代遅れの構成物

@c Autoconf changes, and throughout the years some constructs have been
@c obsoleted.  Most of the changes involve the macros, but in some cases
@c the tools themselves, or even some concepts, are now considered
@c obsolete.
@c 
Autoconfは変化し,歳月を経て時代遅れになった構成物もあります.変更のほと
んどはマクロの呼び出しですが,状況によっては,ツール自身やそのコンセプト
さえも,今では時代遅れと考えられるものもあります.

@c You may completely skip this chapter if you are new to Autoconf.  Its
@c intention is mainly to help maintainers updating their packages by
@c understanding how to move to more modern constructs.
@c 
新しいAutoconfを使用する場合は,この章を完全に飛ばしてもかまいません.こ
こでの目的は主に,より新しい構成物に変更する方法を理解することで,パッケー
ジを更新している管理者を助けることです.

@menu
* Obsolete config.status Use::  Different calling convention
* acconfig.h::                  Additional entries in @file{config.h.in}
* autoupdate Invocation::       Automatic update of @file{configure.ac}
* Obsolete Macros::             Backward compatibility macros
* Autoconf 1::                  Tips for upgrading your files
* Autoconf 2.13::               Some fresher tips
@end menu

@node Obsolete config.status Use
@c @section Obsolete @file{config.status} Invocation
@section 時代遅れの@file{config.status}の呼び出し

@c @file{config.status} now supports arguments to specify the files to
@c instantiate; see @ref{config.status Invocation}, for more details.
@c Before, environment variables had to be used.
@c 
@file{config.status}は現在,実際に作成されるファイルを指定するための引数
をサポートしています.詳細は,@ref{config.status Invocation}を参照してく
ださい.以前は環境変数の使用が必要でした.

@defvar CONFIG_COMMANDS
@evindex CONFIG_COMMANDS
@c The tags of the commands to execute.  The default is the arguments given
@c to @code{AC_OUTPUT} and @code{AC_CONFIG_COMMANDS} in
@c @file{configure.ac}.
@c 
実行するコマンドのタグです.デフォルトは,@file{configure.ac}内の
@code{AC_OUTPUT}と@code{AC_CONFIG_COMMANDS}に与える引数です.
@end defvar

@defvar CONFIG_FILES
@evindex CONFIG_FILES
@c The files in which to perform @samp{@@@var{variable}@@} substitutions.
@c The default is the arguments given to @code{AC_OUTPUT} and
@c @code{AC_CONFIG_FILES} in @file{configure.ac}.
@c 
@samp{@@@var{variable}@@}の置換を実行するファイルです.デフォルトは,
@file{configure.ac}内の@code{AC_OUTPUT}と@code{AC_CONFIG_COMMANDS}に与え
る引数です.
@end defvar

@defvar CONFIG_HEADERS
@evindex CONFIG_HEADERS
@c The files in which to substitute C @code{#define} statements.  The
@c default is the arguments given to @code{AC_CONFIG_HEADERS}; if that
@c macro was not called, @file{config.status} ignores this variable.
@c 
Cの@code{#define}文の置換を行なうファイルです.デフォルトは
@code{AC_CONFIG_HEADERS}に与える引数です.そのマクロが呼び出されていない
場合,@file{config.status}はこの値を無視します.
@end defvar

@defvar CONFIG_LINKS
@evindex CONFIG_LINKS
@c The symbolic links to establish.  The default is the arguments given to
@c @code{AC_CONFIG_LINKS}; if that macro was not called,
@c @file{config.status} ignores this variable.
@c 
作成されるシンボリックリンクです.デフォルトは,@code{AC_CONFIG_LINKS} 
に与える引数です.そのマクロが呼び出されていない場合,
@file{config.status}はこの値を無視します.
@end defvar

@c In @ref{config.status Invocation}, using this old interface, the example
@c would be:
@c 
@ref{config.status Invocation}で古いインターフェースを使用する例は,以下
のようになります.

@example
@group
config.h: stamp-h
stamp-h: config.h.in config.status
        CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
          CONFIG_HEADERS=config.h ./config.status
        echo > stamp-h

Makefile: Makefile.in config.status
        CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
          CONFIG_FILES=Makefile ./config.status
@end group
@end example

@noindent
@c (If @file{configure.ac} does not call @code{AC_CONFIG_HEADERS}, there is
@c no need to set @code{CONFIG_HEADERS} in the @code{make} rules.  Equally
@c for @code{CONFIG_COMMANDS} etc.)
@c 
(@file{configure.ac}で@code{AC_CONFIG_HEADERS}を呼び出さない場合,
@code{make}ルールに@code{CONFIG_HEADERS}を設定する必要はありません.
@code{CONFIG_COMMANDS}等に対しても同様です.)


@node acconfig.h
@section @file{acconfig.h}

@cindex @file{acconfig.h}
@cindex @file{config.h.top}
@cindex @file{config.h.bot}

@c In order to produce @file{config.h.in}, @command{autoheader} needs to
@c build or to find templates for each symbol.  Modern releases of Autoconf
@c use @code{AH_VERBATIM} and @code{AH_TEMPLATE} (@pxref{Autoheader
@c Macros}), but in older releases a file, @file{acconfig.h}, contained the
@c list of needed templates.  @command{autoheader} copied comments and
@c @code{#define} and @code{#undef} statements from @file{acconfig.h} in
@c the current directory, if present.  This file used to be mandatory if
@c you @code{AC_DEFINE} any additional symbols.
@c 
@file{config.h.in}を生成するため,@command{autoheader}はそれぞれのシンボ
ルに対するテンプレートを構築したり探したりする必要がありました.現在の
Autoconfのリリースでは,@code{AH_VERBATIM}と@code{AH_TEMPLATE}を使用しま
すが(@pxref{Autoheader Macros}),古いリリースでは,ファイル
@file{acconfig.h}に必要なテンプレートのリストを含めていました.
@command{autoheader}は,コメントと@code{#define}と@code{#undef}の文を,
@file{acconfig.h} がカレントディレクトリに存在する場合はそこからコピーし
ます.追加のシンボルを@code{AC_DEFINE}する場合,このファイルを使用する必
要がありました.

@c Modern releases of Autoconf also provide @code{AH_TOP} and
@c @code{AH_BOTTOM} if you need to prepend/append some information to
@c @file{config.h.in}.  Ancient versions of Autoconf had a similar feature:
@c if @file{./acconfig.h} contains the string @samp{@@TOP@@},
@c @command{autoheader} copies the lines before the line containing
@c @samp{@@TOP@@} into the top of the file that it generates.  Similarly,
@c if @file{./acconfig.h} contains the string @samp{@@BOTTOM@@},
@c @command{autoheader} copies the lines after that line to the end of the
@c file it generates.  Either or both of those strings may be omitted.  An
@c even older alternate way to produce the same effect in ancient versions
@c of Autoconf is to create the files @file{@var{file}.top} (typically
@c @file{config.h.top}) and/or @file{@var{file}.bot} in the current
@c directory.  If they exist, @command{autoheader} copies them to the
@c beginning and end, respectively, of its output.
@c 
@file{config.h.in}に情報を前置/後置したい場合,現在のAutoconfのリリース
でも,@code{AH_TOP}と@code{AH_BOTTOM}を提供しています.昔のバージョンの
Autoconfにはよく似た機能がありました.@file{./acconfig.h}に文字列
@samp{@@TOP@@}が含まれている場合,@command{autoheader}は@samp{@@TOP@@} 
が含まれている行の前の行を生成するファイルの先頭にコピーします.同様に,
@file{./acconfig.h}に文字列@samp{@@BOTTOM@@}が含まれている場合,
@command{autoheader}はその行の後の行を生成するファイルの末尾にコピーしま
す.これらの文字列のいずれかまたは両方とも省略できます.古いバージョンの
Autoconfで同じ効果を生成するための,さらに古い代替方法は,カレントディレ
クトリにファイル@file{@var{file}.top}(通常は@file{config.h.top}) や
@file{@var{file}.bot}を作成することです.それらが存在する場合,
@command{autoheader}はその出力の最初と終りに,それぞれその内容をコピーし
ます.

@c In former versions of Autoconf, the files used in preparing a software
@c package for distribution were:
@c 
以前のバージョンのAutoconfでは,配布するソフトウエアパッケージの準備で使
用するファイルは以下のようになっています.
@example
@group
configure.ac --.   .------> autoconf* -----> configure
               +---+
[aclocal.m4] --+   `---.
[acsite.m4] ---'       |
                       +--> [autoheader*] -> [config.h.in]
[acconfig.h] ----.     |
                 +-----'
[config.h.top] --+
[config.h.bot] --'
@end group
@end example

@c Using only the @code{AH_} macros, @file{configure.ac} should be
@c self-contained, and should not depend upon @file{acconfig.h} etc.
@c 
@code{AH_}マクロだけを使用する際は,@file{configure.ac}は自己内蔵型にす
べきで,そして,@file{acconfig.h}等に依存すべきではありません.


@node autoupdate Invocation
@c @section Using @command{autoupdate} to Modernize @file{configure.ac}
@section @file{configure.ac}を現代風にするために@command{autoupdate}を使用する
@cindex @command{autoupdate}

@c The @command{autoupdate} program updates a @file{configure.ac} file that
@c calls Autoconf macros by their old names to use the current macro names.
@c In version 2 of Autoconf, most of the macros were renamed to use a more
@c uniform and descriptive naming scheme.  @xref{Macro Names}, for a
@c description of the new scheme.  Although the old names still work
@c (@pxref{Obsolete Macros}, for a list of the old macros and the corresponding
@c new names), you can make your @file{configure.ac} files more readable
@c and make it easier to use the current Autoconf documentation if you
@c update them to use the new macro names.
@c 
@command{autoupdate}プログラムは,Autoconfマクロを古い名前で呼び出してい
る@file{configure.ac}ファイルを,現在のマクロ名に更新します.バージョン2
のAutoconfでは,ほとんどのマクロが,より一様で記述的な命名法で名前が変更
されています.新しい方法の記述は@xref{Macro Names}. 古い名前も動作します
が(古いマクロとそれに対応する新しいマクロのリストは@pxref{Obsolete
Macros}),新しいマクロ名を使用するために更新した場合,
@file{configure.ac}はより可読性の高いものになり,現在のAutoconfマクロを
使用することがより簡単になります.

@evindex SIMPLE_BACKUP_SUFFIX
@c If given no arguments, @command{autoupdate} updates @file{configure.ac},
@c backing up the original version with the suffix @file{~} (or the value
@c of the environment variable @code{SIMPLE_BACKUP_SUFFIX}, if that is
@c set).  If you give @command{autoupdate} an argument, it reads that file
@c instead of @file{configure.ac} and writes the updated file to the
@c standard output.
@c 
引数が与えられていない場合,@command{autoupdate}は@file{configure.ac} を
更新し,元のバージョンを接尾子@file{~}でバックアップします(または,環境
変数@code{SIMPLE_BACKUP_SUFFIX}が設定されている場合はその値になります).
@command{autoupdate}に引数を与えた場合,@file{configure.ac}の代わりにそ
のファイルを読み込み,更新されたファイルを標準出力に出力します.

@noindent
@c @command{autoupdate} accepts the following options:
@c 
@command{autoupdate}は以下のオプションを受け入れます.

@table @option
@item --help
@itemx -h
@c Print a summary of the command line options and exit.
@c 
コマンドラインオプションの概要を出力して終了します.

@item --version
@itemx -V
@c Print the version number of Autoconf and exit.
@c 
Autoconfのバージョンナンバーを出力して終了します.

@item --verbose
@itemx -v
@c Report processing steps.
@c 
処理している段階を報告します.

@item --debug
@itemx -d
@c Don't remove the temporary files.
@c 
一時的なファイルを削除しません.

@item --force
@itemx -f
@c Force the update even if the file has not changed.  Disregard the cache.
@c 
ファイルが変更されていない場合でも強制的に更新します.キャッシュは無視さ
れます.

@item --include=@var{dir}
@itemx -I @var{dir}
@c Also look for input files in @var{dir}.  Multiple invocations accumulate.
@c Directories are browsed from last to first.
@c 
入力ファイルを@var{dir}でも探します.複数回の呼び出しは累積されます.ディ
レクトリは最後のものから最初のものという順序で見ていきます.
@end table

@node Obsolete Macros
@c @section Obsolete Macros
@section 時代遅れのマクロ

@c Several macros are obsoleted in Autoconf, for various reasons (typically
@c they failed to quote properly, couldn't be extended for more recent
@c issues etc.).  They are still supported, but deprecated: their use
@c should be avoided.
@c 
様々な理由で(通常適切に引用婦で囲むことに失敗していて以前の配布物が拡張
できないなどの理由です),いくつかのマクロがAutoconfで時代遅れになってい
ます.それらはサポートされていますが,使用を止めるようお願いします.それ
らの使用は避けた方が良いでしょう.

@c During the jump from Autoconf version 1 to version 2, most of the
@c macros were renamed to use a more uniform and descriptive naming scheme,
@c but their signature did not change.  @xref{Macro Names}, for a
@c description of the new naming scheme.  Below, if there is just the mapping
@c from old names to new names for these macros, the reader is invited to
@c refer to the definition of the new macro for the signature and the
@c description.
@c 
Autoconfのバージョン1からバージョン2へ移行している間,より一般的でより記
述的な命名法を使用するために,ほとんどのマクロの名前が変更されましたが,
そのシグニチャは変更されていません.以下で,これらのマクロの古い名前と新
しい名前の対応付けがあるものは,署名と記述に対する新しいマクロの定義へ参
照するよう読者を招待します.

@defmac AC_ALLOCA
@acindex{ALLOCA}
@code{AC_FUNC_ALLOCA}
@end defmac

@defmac AC_ARG_ARRAY
@acindex{ARG_ARRAY}
@c removed because of limited usefulness
@c 
有用性の制限のため削除.
@end defmac

@defmac AC_C_CROSS
@acindex{C_CROSS}
@c This macro is obsolete; it does nothing.
@c 
このマクロは時代遅れです.何もしません.
@end defmac

@defmac AC_CANONICAL_SYSTEM
@acindex{CANONICAL_SYSTEM}
@c Determine the system type and set output variables to the names of the
@c canonical system types.  @xref{Canonicalizing}, for details about the
@c variables this macro sets.
@c 
システムタイプを決定し,出力変数を標準的なシステムタイプ名に設定します.
このマクロが設定する変数の詳細は@xref{Canonicalizing}.

@c The user is encouraged to use either @code{AC_CANONICAL_BUILD}, or
@c @code{AC_CANONICAL_HOST}, or @code{AC_CANONICAL_TARGET}, depending on
@c the needs.  Using @code{AC_CANONICAL_TARGET} is enough to run the two
@c other macros.
@c 
ユーザは必要なものに依存して,@code{AC_CANONICAL_BUILD}または
@code{AC_CANONICAL_HOST}のいずれか,または@code{AC_CANONICAL_TARGET}を使
用することを推奨します.@code{AC_CANONICAL_TARGET}を実行することで,必ず
それ以外の二つのマクロが実行されます.
@end defmac

@defmac AC_CHAR_UNSIGNED
@acindex{CHAR_UNSIGNED}
@code{AC_C_CHAR_UNSIGNED}
@end defmac

@defmac AC_CHECK_TYPE (@var{type}, @var{default})
@acindex{CHECK_TYPE}
@c Autoconf, up to 2.13, used to provide this version of
@c @code{AC_CHECK_TYPE}, deprecated because of its flaws.  Firstly, although
@c it is a member of the @code{CHECK} clan, singular sub-family, it does
@c more than just checking.  Secondly, missing types are not
@c @code{typedef}'d, they are @code{#define}'d, which can lead to
@c incompatible code in the case of pointer types.
@c 
2.13までのAutoconfでは,このバージョンの@code{AC_CHECK_TYPE}を提供するた
めに使用されていましたが,問題があり反対されていました.第一に,それは
@code{CHECK}一族のメンバーですが,単一のファミリーに過ぎず,調査以上のこ
とを行なっていました.次に,足りない型は@code{typedef}されず,それらは
@code{#define}されるので,ポインタ型の場合は互換性がなくなってしまうはず
です.

@c This use of @code{AC_CHECK_TYPE} is obsolete and discouraged; see
@c @ref{Generic Types}, for the description of the current macro.
@c 
この@code{AC_CHECK_TYPE}の使用は時代遅れで推奨できません.現在のマクロの
記述は,@ref{Generic Types}を参照してください.

@c If the type @var{type} is not defined, define it to be the C (or C++)
@c builtin type @var{default}, e.g., @samp{short} or @samp{unsigned}.
@c 
型@var{type}が定義されていない場合,それはC(またはC++)の組み込みの型
@var{default}に定義されます.例えば,@samp{short}や@samp{unsigned}です.

@c This macro is equivalent to:
@c 
このマクロは以下と等価です.

@example
AC_CHECK_TYPE([@var{type}],,
              [AC_DEFINE_UNQUOTED([@var{type}], [@var{default}],
                                  [Define to `@var{default}' if
                                   <sys/types.h> does not define.])])
@end example

@c In order to keep backward compatibility, the two versions of
@c @code{AC_CHECK_TYPE} are implemented, selected by a simple heuristics:
@c 
下位互換性のため,二つのバージョンの@code{AC_CHECK_TYPE}が実装されていて,
単純な発見的手法で選択されます.

@enumerate
@item
@c If there are three or four arguments, the modern version is used.
@c 
引数が三つまたは四つある場合,現在のバージョンが使用されます.

@item
@c If the second argument appears to be a C or C++ type, then the
@c obsolete version is used.  This happens if the argument is a C or C++
@c @emph{builtin} type or a C identifier ending in @samp{_t}, optionally
@c followed by one of @samp{[(* } and then by a string of zero or more
@c characters taken from the set @samp{[]()* _a-zA-Z0-9}.
@c 
二番目の引数にCやC++の型がある場合,時代遅れのバージョンが使用されます.
引数がCやC++に@emph{組み込まれている}型,または@samp{_t}で終るC識別子で,
さらに一つの@samp{[(* }が続き,その後にゼロ以上の@samp{[]()* _a-zA-Z0-9}
以外の文字列が続く場合はこうなります.

@item
@c If the second argument is spelled with the alphabet of valid C and C++
@c types, the user is warned and the modern version is used.
@c 
二番目の引数が有効なCとC++のアルファベットで綴られている型の場合,ユーザ
は警告され,現在のバージョンが使用されます.

@item
@c Otherwise, the modern version is used.
@c 
それ以外では,現在のバージョンが使用されます.
@end enumerate

@noindent
@c You are encouraged either to use a valid builtin type, or to use the
@c equivalent modern code (see above), or better yet, to use
@c @code{AC_CHECK_TYPES} together with
@c 
有効な組み込みの型を使用する,または,同じ現在のコード(上記参照)を使用す
る,もしくはそれより良いものとして,@code{AC_CHECK_TYPES}とともに使用す
ることをお勧めします.

@example
#if !HAVE_LOFF_T
typedef loff_t off_t;
#endif
@end example
@end defmac
@c end of AC_CHECK_TYPE

@defmac AC_CHECKING (@var{feature-description})
@acindex{CHECKING}
@c Same as @samp{AC_MSG_NOTICE([checking @var{feature-description}@dots{}]}.
@c 
@samp{AC_MSG_NOTICE([checking @var{feature-description}@dots{}]}と同じで
す.
@end defmac

@defmac AC_COMPILE_CHECK (@var{echo-text}, @var{includes}, @var{function-body}, @var{action-if-found}, @ovar{action-if-not-found})
@acindex{COMPILE_CHECK}
@c This is an obsolete version of @code{AC_TRY_COMPILE} itself replaced by
@c @code{AC_COMPILE_IFELSE} (@pxref{Running the Compiler}), with the
@c addition that it prints @samp{checking for @var{echo-text}} to the
@c standard output first, if @var{echo-text} is non-empty.  Use
@c @code{AC_MSG_CHECKING} and @code{AC_MSG_RESULT} instead to print
@c messages (@pxref{Printing Messages}).
@c 
これは,@code{AC_TRY_COMPILE}の時代遅れのバージョンで,それ自身も
@code{AC_COMPILE_IFELSE}で置換され(@pxref{Running the Compiler}),それは
@var{echo-text}が空ではない場合,@samp{checking for @var{echo-text}} を
標準出力の最初に追加出力します.メッセージを出力するためには,代わりに
@code{AC_MSG_CHECKING}と@code{AC_MSG_RESULT}を使用してください
(@pxref{Printing Messages}).
@end defmac

@defmac AC_CONST
@acindex{CONST}
@code{AC_C_CONST}
@end defmac

@defmac AC_CROSS_CHECK
@acindex{CROSS_CHECK}
@c Same as @code{AC_C_CROSS}, which is obsolete too, and does nothing
@c @code{:-)}.
@c 
@code{AC_C_CROSS}と同じで,さらにそれも時代遅れになっていて,何もしませ
ん@code{:-)}.
@end defmac

@defmac AC_CYGWIN
@acindex{CYGWIN}
@c Check for the Cygwin environment in which case the shell variable
@c @code{CYGWIN} is set to @samp{yes}.  Don't use this macro, the dignified
@c means to check the nature of the host is using
@c @code{AC_CANONICAL_HOST}.  As a matter of fact this macro is defined as:
@c 
Cygwin環境を調査し,その状況ではシェル変数@code{CYGWIN}を@samp{yes}に設
定します.このマクロを使用せず,権威のあるホストの調査手法
@code{AC_CANONICAL_HOST}が使用されています.実際問題として,このマクロは
以下のように定義されています.

@example
AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
case $host_os in
  *cygwin* ) CYGWIN=yes;;
         * ) CYGWIN=no;;
esac
@end example

@c Beware that the variable @code{CYGWIN} has a very special meaning when
@c running CygWin32, and should not be changed.  That's yet another reason
@c not to use this macro.
@c 
変数@code{CYGWIN}には,CygWin32を実行しているときは非常に特殊な意味があ
ることに注意し,変更すべきではありません.それはこのマクロを使用しないも
う一つの理由です.
@end defmac

@defmac AC_DECL_SYS_SIGLIST
@acindex{DECL_SYS_SIGLIST}
@cvindex SYS_SIGLIST_DECLARED
@c Same as:
@c 
以下と同じです.

@example
AC_CHECK_DECLS([sys_siglist],,,
[#include <signal.h>
/* NetBSD declares sys_siglist in unistd.h.  */
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
])
@end example
@end defmac

@defmac AC_DECL_YYTEXT
@acindex{DECL_YYTEXT}
@c Does nothing, now integrated in @code{AC_PROG_LEX}.
@c 
何もせず,現在は@code{AC_PROG_LEX}に統合されています.
@end defmac

@defmac AC_DIR_HEADER
@acindex{DIR_HEADER}
@cvindex DIRENT
@cvindex SYSNDIR
@cvindex SYSDIR
@cvindex NDIR
@c Like calling @code{AC_FUNC_CLOSEDIR_VOID} and@code{AC_HEADER_DIRENT},
@c but defines a different set of C preprocessor macros to indicate which
@c header file is found:
@c 
@code{AC_FUNC_CLOSEDIR_VOID}と@code{AC_HEADER_DIRENT}の呼び出しに似てい
ますが,ヘッダファイルが見つかったことを示すため,異なるCプリプロセッサ
マクロの組を定義します.

@multitable {@file{sys/ndir.h}} {Old Symbol} {@code{HAVE_SYS_NDIR_H}}
@c @item Header            @tab Old Symbol     @tab New Symbol
@item ヘッダ            @tab 古いシンボル   @tab 新しいシンボル
@item @file{dirent.h}   @tab @code{DIRENT}  @tab @code{HAVE_DIRENT_H}
@item @file{sys/ndir.h} @tab @code{SYSNDIR} @tab @code{HAVE_SYS_NDIR_H}
@item @file{sys/dir.h}  @tab @code{SYSDIR}  @tab @code{HAVE_SYS_DIR_H}
@item @file{ndir.h}     @tab @code{NDIR}    @tab @code{HAVE_NDIR_H}
@end multitable
@end defmac

@defmac AC_DYNIX_SEQ
@acindex{DYNIX_SEQ}
@c If on DYNIX/ptx, add @option{-lseq} to output variable
@c @code{LIBS}.  This macro used to be defined as
@c 
DYNIX/ptxの場合,出力変数@code{LIBS}に@option{-lseq} を追加します.この
マクロは以下のように定義されるように使用されていました.

@example
AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS")
@end example

@noindent
@c now it is just @code{AC_FUNC_GETMNTENT}.
@c 
現在では,@code{AC_FUNC_GETMNTENT}で行ないます.
@end defmac

@defmac AC_EXEEXT
@acindex{EXEEXT}
@ovindex EXEEXT
@c Defined the output variable @code{EXEEXT} based on the output of the
@c compiler, which is now done automatically.  Typically set to empty
@c string if Unix and @samp{.exe} if Win32 or OS/2.
@c 
コンパイラの出力を元に出力変数@code{EXEEXT}を定義し,それは現在では自動
的に行なわれます.通常,Unixでは空の文字列で,Win32やOS/2では@samp{.exe} 
に設定します.
@end defmac

@defmac AC_EMXOS2
@acindex{EMXOS2}
@c Similar to @code{AC_CYGWIN} but checks for the EMX environment on OS/2
@c and sets @code{EMXOS2}.
@c 
@code{AC_CYGWIN}に似ていますが,OS/2のEMX環境変数を調査し@code{EMXOS2} 
を設定します.
@end defmac

@defmac AC_ERROR
@acindex{ERROR}
@code{AC_MSG_ERROR}
@end defmac

@defmac AC_FIND_X
@acindex{FIND_X}
@code{AC_PATH_X}
@end defmac

@defmac AC_FIND_XTRA
@acindex{FIND_XTRA}
@code{AC_PATH_XTRA}
@end defmac

@defmac AC_FUNC_CHECK
@acindex{FUNC_CHECK}
@code{AC_CHECK_FUNC}
@end defmac

@defmac AC_FUNC_WAIT3
@acindex{FUNC_WAIT3}
@cvindex HAVE_WAIT3
@c If @code{wait3} is found and fills in the contents of its third argument
@c (a @samp{struct rusage *}), which HP-UX does not do, define
@c @code{HAVE_WAIT3}.
@c 
@code{wait3}が見つかり,第三引数(@samp{struct rusage *})の内容が満たされ
ている場合,HP-UXは違いますが,@code{HAVE_WAIT3}を定義します.

@c These days portable programs should use @code{waitpid}, not
@c @code{wait3}, as @code{wait3} is being removed from the Open Group
@c standards, and will not appear in the next revision of POSIX@.
@c 
現在では,@code{wait3}はOpen Groupの標準から削除されていて,次のリビジョ
ンの@acronym{POSIX}では無くなるので,移植性の高いプログラムでは
@code{wait3}ではなく@code{waitpid}を使用すべきです.
@end defmac

@defmac AC_GCC_TRADITIONAL
@acindex{GCC_TRADITIONAL}
@code{AC_PROG_GCC_TRADITIONAL}
@end defmac

@defmac AC_GETGROUPS_T
@acindex{GETGROUPS_T}
@code{AC_TYPE_GETGROUPS}
@end defmac

@defmac AC_GETLOADAVG
@acindex{GETLOADAVG}
@code{AC_FUNC_GETLOADAVG}
@end defmac

@defmac AC_HAVE_FUNCS
@acindex{HAVE_FUNCS}
@code{AC_CHECK_FUNCS}
@end defmac

@defmac AC_HAVE_HEADERS
@acindex{HAVE_HEADERS}
@code{AC_CHECK_HEADERS}
@end defmac

@defmac AC_HAVE_LIBRARY (@var{library}, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})
@acindex{HAVE_LIBRARY}
@c This macro is equivalent to calling @code{AC_CHECK_LIB} with a
@c @var{function} argument of @code{main}.  In addition, @var{library} can
@c be written as any of @samp{foo}, @option{-lfoo}, or @samp{libfoo.a}.  In
@c all of those cases, the compiler is passed @option{-lfoo}.  However,
@c @var{library} cannot be a shell variable; it must be a literal name.
@c 
このマクロは,@var{function}引数を@code{main}にした@code{AC_CHECK_LIB} 
の呼び出しと同じです.さらに,@var{library}は,@samp{foo},
@option{-lfoo},または@samp{libfoo.a}のいずれで書くことも可能です.これ
ら全ての状況で,コンパイラに@option{-lfoo}が渡されます.しかし,
@var{library}をシェル変数することは不可能です.リテラル名にする必要があ
ります.
@end defmac

@defmac AC_HAVE_POUNDBANG
@acindex{HAVE_POUNDBANG}
@c @code{AC_SYS_INTERPRETER} (different calling convention)
@c 
@code{AC_SYS_INTERPRETER} (呼び出し規則が異なります)
@end defmac

@defmac AC_HEADER_CHECK
@acindex{HEADER_CHECK}
@code{AC_CHECK_HEADER}
@end defmac

@defmac AC_HEADER_EGREP
@acindex{HEADER_EGREP}
@code{AC_EGREP_HEADER}
@end defmac

@defmac AC_HELP_STRING
@acindex{HELP_STRING}
@code{AS_HELP_STRING}
@end defmac

@defmac AC_INIT (@var{unique-file-in-source-dir})
@acindex{INIT}
@c Formerly @code{AC_INIT} used to have a single argument, and was
@c equivalent to:
@c 
以前の@code{AC_INIT}は単一の引数のみで使用され,それは以下と同じです.

@example
AC_INIT
AC_CONFIG_SRCDIR(@var{unique-file-in-source-dir})
@end example
@end defmac

@defmac AC_INLINE
@acindex{INLINE}
@code{AC_C_INLINE}
@end defmac

@defmac AC_INT_16_BITS
@acindex{INT_16_BITS}
@cvindex INT_16_BITS
@c If the C type @code{int} is 16 bits wide, define @code{INT_16_BITS}.
@c Use @samp{AC_CHECK_SIZEOF(int)} instead.
@c 
Cの型@code{int}が16ビット幅の場合,@code{INT_16_BITS}を定義します.代わ
りに@samp{AC_CHECK_SIZEOF(int)}を使用してください.
@end defmac

@defmac AC_IRIX_SUN
@acindex{IRIX_SUN}
@c If on @sc{irix} (Silicon Graphics @sc{unix}), add @option{-lsun} to output
@c @code{LIBS}.  If you were using it to get @code{getmntent}, use
@c @code{AC_FUNC_GETMNTENT} instead.  If you used it for the NIS versions
@c of the password and group functions, use @samp{AC_CHECK_LIB(sun,
@c getpwnam)}.  Up to Autoconf 2.13, it used to be
@c 
@acronym{AIX} (Silicon Graphics @sc{unix})の場合,出力変数@code{LIBS} に
@option{-lsun}を追加します.@code{getmntent}を取得するためにそれを使用し
ている場合,その代わりに@code{AC_FUNC_GETMNTENT}を使用してください.NIS 
バージョンのパスワードとグループ関数のためにそれを使用している場合.
@samp{AC_CHECK_LIB(sun, getpwnam)}を使用してください.Autoconf 2.13まで
は,以下のように使用されていました.

@example
AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS")
@end example

@noindent
@c now it is defined as
@c 
現在ではそれは以下のように定義されます.

@example
AC_FUNC_GETMNTENT
AC_CHECK_LIB(sun, getpwnam)
@end example
@end defmac

@defmac AC_LANG_C
@acindex{LANG_C}
@c Same as @samp{AC_LANG(C)}.
@c 
@samp{AC_LANG(C)}と同じです.
@end defmac

@defmac AC_LANG_CPLUSPLUS
@acindex{LANG_CPLUSPLUS}
@c Same as @samp{AC_LANG(C++)}.
@c 
@samp{AC_LANG(C++)}と同じです.
@end defmac

@defmac AC_LANG_FORTRAN77
@acindex{LANG_FORTRAN77}
@c Same as @samp{AC_LANG(Fortran 77)}.
@c 
@samp{AC_LANG(Fortran 77)}と同じです.
@end defmac

@defmac AC_LANG_RESTORE
@acindex{LANG_RESTORE}
@c Select the @var{language} that is saved on the top of the stack, as set
@c by @code{AC_LANG_SAVE}, remove it from the stack, and call
@c @code{AC_LANG(@var{language})}.
@c 
@code{AC_LANG_SAVE}で設定されるように,スタックのトップに保存される
@var{language}を選択し,スタックから削除し,
@code{AC_LANG(@var{language})}を呼び出します.
@end defmac

@defmac AC_LANG_SAVE
@acindex{LANG_SAVE}
@c Remember the current language (as set by @code{AC_LANG}) on a stack.
@c The current language does not change.  @code{AC_LANG_PUSH} is preferred.
@c 
現在の言語を(@code{AC_LANG}で設定されるように)スタックに記憶します.現在
の言語は変更されません.@code{AC_LANG_PUSH}が好まれます.
@end defmac

@defmac AC_LINK_FILES (@var{source}@dots{}, @var{dest}@dots{})
@acindex{LINK_FILES}
@c This is an obsolete version of @code{AC_CONFIG_LINKS}.  An updated
@c version of:
@c 
これは,@code{AC_CONFIG_LINKS}の時代遅れのバージョンです.以下を更新した
バージョンにします.

@example
AC_LINK_FILES(config/$machine.h config/$obj_format.h,
              host.h            object.h)
@end example

@noindent
@c is:
@c 
それは,以下のようになります.

@example
AC_CONFIG_LINKS(host.h:config/$machine.h
                object.h:config/$obj_format.h)
@end example
@end defmac

@defmac AC_LN_S
@acindex{LN_S}
@code{AC_PROG_LN_S}
@end defmac

@defmac AC_LONG_64_BITS
@acindex{LONG_64_BITS}
@cvindex LONG_64_BITS
@c Define @code{LONG_64_BITS} if the C type @code{long int} is 64 bits wide.
@c Use the generic macro @samp{AC_CHECK_SIZEOF([long int])} instead.
@c 
Cの型@code{long int}が64ビット幅の場合,@code{LONG_64_BITS}を定義します.
その代わりに,一般的なマクロ@samp{AC_CHECK_SIZEOF([long int])}を使用して
ください.
@end defmac

@defmac AC_LONG_DOUBLE
@acindex{LONG_DOUBLE}
@code{AC_C_LONG_DOUBLE}
@end defmac

@defmac AC_LONG_FILE_NAMES
@acindex{LONG_FILE_NAMES}
@code{AC_SYS_LONG_FILE_NAMES}
@end defmac

@defmac AC_MAJOR_HEADER
@acindex{MAJOR_HEADER}
@code{AC_HEADER_MAJOR}
@end defmac

@defmac AC_MEMORY_H
@acindex{MEMORY_H}
@cvindex NEED_MEMORY_H
@c Used to define @code{NEED_MEMORY_H} if the @code{mem} functions were
@c defined in @file{memory.h}.  Today it is equivalent to
@c @samp{AC_CHECK_HEADERS(memory.h)}.  Adjust your code to depend upon
@c @code{HAVE_MEMORY_H}, not @code{NEED_MEMORY_H}; see @ref{Standard
@c Symbols}.
@c 
@code{mem}関数が@file{memory.h}で定義されている場合に
@code{NEED_MEMORY_H}を定義するために使用されます.現在は,
@samp{AC_CHECK_HEADERS(memory.h)}と同じです.コードを
@code{NEED_MEMORY_H}ではなく@code{HAVE_MEMORY_H}に依存するように調整して
ください.@xref{Standard Symbols}.
@end defmac

@defmac AC_MINGW32
@acindex{MINGW32}
@c Similar to @code{AC_CYGWIN} but checks for the MingW32 compiler
@c environment and sets @code{MINGW32}.
@c 
@code{AC_CYGWIN}に似ていますが,それはMingW32コンパイラの環境を調査し
@code{MINGW32}を設定します.
@end defmac

@defmac AC_MINUS_C_MINUS_O
@acindex{MINUS_C_MINUS_O}
@code{AC_PROG_CC_C_O}
@end defmac

@defmac AC_MMAP
@acindex{MMAP}
@code{AC_FUNC_MMAP}
@end defmac

@defmac AC_MODE_T
@acindex{MODE_T}
@code{AC_TYPE_MODE_T}
@end defmac

@defmac AC_OBJEXT
@acindex{OBJEXT}
@ovindex OBJEXT
@c Defined the output variable @code{OBJEXT} based on the output of the
@c compiler, after .c files have been excluded.  Typically set to @samp{o}
@c if Unix, @samp{obj} if Win32.  Now the compiler checking macros handle
@c this automatically.
@c 
@file{.c}ファイルが除外された後,コンパイラの出力に基づいて,出力変数 
@code{OBJEXT}を定義します.通常,Unixでは@samp{o}で,Win32では 
@samp{obj}に設定します.現在はコンパイラの調査マクロがこれを自動的に処理
します.
@end defmac

@defmac AC_OBSOLETE (@var{this-macro-name}, @ovar{suggestion})
@acindex{OBSOLETE}
@c Make M4 print a message to the standard error output warning that
@c @var{this-macro-name} is obsolete, and giving the file and line number
@c where it was called.  @var{this-macro-name} should be the name of the
@c macro that is calling @code{AC_OBSOLETE}.  If @var{suggestion} is given,
@c it is printed at the end of the warning message; for example, it can be
@c a suggestion for what to use instead of @var{this-macro-name}.
@c 
M4が標準エラー出力に,@var{this-macro-name}が時代遅れだというメッセージ
をそれが呼び出されているファイルと行とともに出力します.
@var{this-macro-name}は,@code{AC_OBSOLETE}が呼び出しているマクロ名にす
べきです.@var{suggestion}が与えられている場合,それは警告メッセージの終
りに出力されます.例えば,@var{this-macro-name}の代わりに使用するものを
提案することが可能になります.

@c For instance
@c 
例えば以下のようにします.

@example
AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
@end example

@c You are encouraged to use @code{AU_DEFUN} instead, since it gives better
@c services to the user.
@c 
ユーザに対するより良いサービスとなるので,代わりに@code{AU_DEFUN}を使用
することを推奨します.
@end defmac

@defmac AC_OFF_T
@acindex{OFF_T}
@code{AC_TYPE_OFF_T}
@end defmac

@defmac AC_OUTPUT (@ovar{file}@dots{}, @ovar{extra-cmds}, @ovar{init-cmds})
@acindex{OUTPUT}
@c The use of @code{AC_OUTPUT} with argument is deprecated.  This obsoleted
@c interface is equivalent to:
@c 
引数を用いた@code{AC_OUTPUT}の使用は反対されます.これは以下と同じものの
時代遅れのインターフェースです.

@example
@group
AC_CONFIG_FILES(@var{file}@dots{})
AC_CONFIG_COMMANDS([default],
                   @var{extra-cmds}, @var{init-cmds})
AC_OUTPUT
@end group
@end example
@end defmac

@defmac AC_OUTPUT_COMMANDS (@var{extra-cmds}, @ovar{init-cmds})
@acindex{OUTPUT_COMMANDS}
@c Specify additional shell commands to run at the end of
@c @file{config.status}, and shell commands to initialize any variables
@c from @command{configure}.  This macro may be called multiple times.  It is
@c obsolete, replaced by @code{AC_CONFIG_COMMANDS}.
@c 
@file{config.status}の終りに実行する追加のシェルコマンドと,
@command{configure}で変数を初期化するためのシェルコマンドをを指定します.
このマクロは複数回呼び出し可能です.それは時代遅れで,
@code{AC_CONFIG_COMMANDS}で置換されました.

@c Here is an unrealistic example:
@c 
以下は現実的ではない例です.

@example
fubar=27
AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
                   [fubar=$fubar])
AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
                   [echo init bit])
@end example

@c Aside from the fact that @code{AC_CONFIG_COMMANDS} requires an
@c additional key, an important difference is that
@c @code{AC_OUTPUT_COMMANDS} is quoting its arguments twice, unlike
@c @code{AC_CONFIG_COMMANDS}.  This means that @code{AC_CONFIG_COMMANDS}
@c can safely be given macro calls as arguments:
@c 
@code{AC_CONFIG_COMMANDS}が追加のキーを要求する事実以外,重要な差は
@code{AC_OUTPUT_COMMANDS}が引数を二回引用符で囲んでいますが
@code{AC_CONFIG_COMMANDS}はそうではないということです.これは,
@code{AC_CONFIG_COMMANDS}では引数を用いてマクロを安全に呼び出すことが可
能だということを意味します.

@example
AC_CONFIG_COMMANDS(foo, [my_FOO()])
@end example

@noindent
@c Conversely, where one level of quoting was enough for literal strings
@c with @code{AC_OUTPUT_COMMANDS}, you need two with
@c @code{AC_CONFIG_COMMANDS}.  The following lines are equivalent:
@c 
反対に,1レベルの引用符が@code{AC_OUTPUT_COMMANDS}でのリテラル文字列に対
して十分なところでは,@code{AC_CONFIG_COMMANDS}が二回必要になります.以
下の行は等価です.

@example
@group
AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
@end group
@end example
@end defmac

@defmac AC_PID_T
@acindex{PID_T}
@code{AC_TYPE_PID_T}
@end defmac

@defmac AC_PREFIX
@acindex{PREFIX}
@code{AC_PREFIX_PROGRAM}
@end defmac

@defmac AC_PROG_CC_STDC
@acindex{PROG_CC_STDC}
@c This macro has been integrated into @code{AC_PROG_CC}.
@c 
このマクロは,@code{AC_PROG_CC}に統合されました.
@end defmac

@defmac AC_PROGRAMS_CHECK
@acindex{PROGRAMS_CHECK}
@code{AC_CHECK_PROGS}
@end defmac

@defmac AC_PROGRAMS_PATH
@acindex{PROGRAMS_PATH}
@code{AC_PATH_PROGS}
@end defmac

@defmac AC_PROGRAM_CHECK
@acindex{PROGRAM_CHECK}
@code{AC_CHECK_PROG}
@end defmac

@defmac AC_PROGRAM_EGREP
@acindex{PROGRAM_EGREP}
@code{AC_EGREP_CPP}
@end defmac

@defmac AC_PROGRAM_PATH
@acindex{PROGRAM_PATH}
@code{AC_PATH_PROG}
@end defmac

@defmac AC_REMOTE_TAPE
@acindex{REMOTE_TAPE}
@c removed because of limited usefulness
@c 
有用性の制限のため削除されました.
@end defmac

@defmac AC_RESTARTABLE_SYSCALLS
@acindex{RESTARTABLE_SYSCALLS}
@code{AC_SYS_RESTARTABLE_SYSCALLS}
@end defmac

@defmac AC_RETSIGTYPE
@acindex{RETSIGTYPE}
@code{AC_TYPE_SIGNAL}
@end defmac

@defmac AC_RSH
@acindex{RSH}
@c removed because of limited usefulness
@c 
有用性の制限のため削除されました.
@end defmac

@defmac AC_SCO_INTL
@acindex{SCO_INTL}
@ovindex LIBS
@c If on SCO UNIX, add @option{-lintl} to output variable @code{LIBS}.  This
@c macro used to
@c 
SCO UNIXの場合,出力変数@code{LIBS}に@option{-lintl}を加えます.このマク
ロは以下を使用していました.

@example
AC_CHECK_LIB(intl, strftime, LIBS="-lintl $LIBS")
@end example

@noindent
@c Now it just calls @code{AC_FUNC_STRFTIME} instead.
@c 
現在は,代わりに@code{AC_FUNC_STRFTIME}を呼び出します.
@end defmac

@defmac AC_SETVBUF_REVERSED
@acindex{SETVBUF_REVERSED}
@code{AC_FUNC_SETVBUF_REVERSED}
@end defmac

@defmac AC_SET_MAKE
@acindex{SET_MAKE}
@code{AC_PROG_MAKE_SET}
@end defmac

@defmac AC_SIZEOF_TYPE
@acindex{SIZEOF_TYPE}
@code{AC_CHECK_SIZEOF}
@end defmac

@defmac AC_SIZE_T
@acindex{SIZE_T}
@code{AC_TYPE_SIZE_T}
@end defmac

@defmac AC_STAT_MACROS_BROKEN
@acindex{STAT_MACROS_BROKEN}
@code{AC_HEADER_STAT}
@end defmac

@defmac AC_STDC_HEADERS
@acindex{STDC_HEADERS}
@code{AC_HEADER_STDC}
@end defmac

@defmac AC_STRCOLL
@acindex{STRCOLL}
@code{AC_FUNC_STRCOLL}
@end defmac

@defmac AC_ST_BLKSIZE
@acindex{ST_BLKSIZE}
@code{AC_CHECK_MEMBERS}
@end defmac

@defmac AC_ST_BLOCKS
@acindex{ST_BLOCKS}
@code{AC_STRUCT_ST_BLOCKS}
@end defmac

@defmac AC_ST_RDEV
@acindex{ST_RDEV}
@code{AC_CHECK_MEMBERS}
@end defmac

@defmac AC_SYS_RESTARTABLE_SYSCALLS
@acindex{SYS_RESTARTABLE_SYSCALLS}
@cvindex HAVE_RESTARTABLE_SYSCALLS
@c If the system automatically restarts a system call that is interrupted
@c by a signal, define @code{HAVE_RESTARTABLE_SYSCALLS}.  This macro does
@c not check if system calls are restarted in general--it tests whether a
@c signal handler installed with @code{signal} (but not @code{sigaction})
@c causes system calls to be restarted.  It does not test if system calls
@c can be restarted when interrupted by signals that have no handler.
@c 
システムが自動的にシグナルで中断されたシステムコールを再スタートする場合,
@code{HAVE_RESTARTABLE_SYSCALLS}を定義します.このマクロは,システムが一
般的に再スタートするかどうかを調査しません -- それは,(@code{sigaction}
ではなく)@code{signal}でインストールされているシグナルハンドラが再スター
トするためのシステムコールを呼び出すかどうかをテストします.ハンドラの無
いシグナルで中断されたときにシステムコールが再スタートされる場合,テスト
しません.

@c These days portable programs should use @code{sigaction} with
@c @code{SA_RESTART} if they want restartable system calls.  They should
@c not rely on @code{HAVE_RESTARTABLE_SYSCALLS}, since nowadays whether a
@c system call is restartable is a dynamic issue, not a configuration-time
@c issue.
@c 
今日の移植性の高いプログラムでは,システムコールを再スタートしたい場合,
@code{SA_RESTART}を用いて@code{sigaction}を使用すべきです.現在では,シ
ステムコールが再スタート可能かどうかは,コンフィグレーション時の問題では
なく動的な問題なので,@code{HAVE_RESTARTABLE_SYSCALLS}に依存すべきではあ
りません.
@end defmac

@defmac AC_SYS_SIGLIST_DECLARED
@acindex{SYS_SIGLIST_DECLARED}
@code{AC_DECL_SYS_SIGLIST}
@end defmac

@defmac AC_TEST_CPP
@acindex{TEST_CPP}
@c @code{AC_TRY_CPP}, replaced by @code{AC_PREPROC_IFELSE}.
@c 
@code{AC_TRY_CPP}になり,それも@code{AC_PREPROC_IFELSE}で置き換えられま
した.
@end defmac

@defmac AC_TEST_PROGRAM
@acindex{TEST_PROGRAM}
@c @code{AC_TRY_RUN}, replaced by @code{AC_RUN_IFELSE}.
@c 
@code{AC_TRY_RUN}になり,それも@code{AC_RUN_IFELSE}で置き換えられました.
@end defmac

@defmac AC_TIMEZONE
@acindex{TIMEZONE}
@code{AC_STRUCT_TIMEZONE}
@end defmac

@defmac AC_TIME_WITH_SYS_TIME
@acindex{TIME_WITH_SYS_TIME}
@code{AC_HEADER_TIME}
@end defmac

@defmac AC_TRY_COMPILE (@var{includes}, @var{function-body}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex{TRY_COMPILE}
@c Same as @samp{AC_COMPILE_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
@c [[@var{function-body}]])], [@var{action-if-true}],
@c [@var{action-if-false}])} (@pxref{Running the Compiler}).
@c 
@samp{AC_COMPILE_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
[[@var{function-body}]])], [@var{action-if-true}],
[@var{action-if-false}])}と同じです(@pxref{Running the Compiler}).

@c This macro double quotes both @var{includes} and @var{function-body}.
@c 
このマクロは,@var{includes}と@var{function-body}の両方を二重に引用符で
囲みます.

@c For C and C++, @var{includes} is any @code{#include} statements needed
@c by the code in @var{function-body} (@var{includes} will be ignored if
@c the currently selected language is Fortran or Fortran 77).  The compiler
@c and compilation flags are determined by the current language
@c (@pxref{Language Choice}).
@c 
CとC++に対して,@var{includes}は@var{function-body}にあるコードが必要と
するすべての@code{#include}文です(現在選択されている言語がFortranや
Fortran 77 の場合,@var{includes}は無視されます).コンパイラやコンパイル
フラグは,現在の言語(@pxref{Language Choice})によって決定されます.
@end defmac

@defmac AC_TRY_CPP (@var{input}, @ovar{action-if-true}, @ovar{action-if-false})
@acindex{TRY_CPP}
@c Same as @samp{AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@var{input}]])],
@c [@var{action-if-true}], [@var{action-if-false}])} (@pxref{Running the
@c Preprocessor}).
@c 
@samp{AC_PREPROC_IFELSE([AC_LANG_SOURCE([[@var{input}]])],
[@var{action-if-true}], [@var{action-if-false}])}と同じです
(@pxref{Running the Preprocessor}).

@c This macro double quotes the @var{input}.
@c 
このマクロは@var{input}を二重に引用符で囲みます.
@end defmac

@defmac AC_TRY_LINK (@var{includes}, @var{function-body}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex{TRY_LINK}
@c Same as @samp{AC_LINK_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
@c [[@var{function-body}]])], [@var{action-if-true}],
@c [@var{action-if-false}])} (@pxref{Running the Compiler}).
@c 
@samp{AC_LINK_IFELSE([AC_LANG_SOURCE([[@var{includes}]],
[[@var{function-body}]])], [@var{action-if-true}],
[@var{action-if-false}])}と同じです(@pxref{Running the Compiler}).

@c This macro double quotes both @var{includes} and @var{function-body}.
@c 
このマクロは,@var{includes}と@var{function-body}の両方を二重に引用符で
囲みます.

@c Depending on the current language (@pxref{Language Choice}), create a
@c test program to see whether a function whose body consists of
@c @var{function-body} can be compiled and linked.  If the file compiles
@c and links successfully, run shell commands @var{action-if-found},
@c otherwise run @var{action-if-not-found}.
@c 
現在の言語に依存して(@pxref{Language Choice}),@var{function-body}の中身
にある関数をコンパイルしリンクすることが可能かどうかを調べるテストプログ
ラムを作成します.ファイルのコンパイルとリンクが成功する場合,シェルコマ
ンド@var{action-if-found}を実行し,それ以外では@var{action-if-not-found}
を実行します.

@c This macro double quotes both @var{includes} and @var{function-body}.
@c 
このマクロは,@var{includes}と@var{function-body}の両方を二重に引用符で
囲みます.

@c For C and C++, @var{includes} is any @code{#include} statements needed
@c by the code in @var{function-body} (@var{includes} will be ignored if
@c the currently selected language is Fortran or Fortran 77).  The compiler
@c and compilation flags are determined by the current language
@c (@pxref{Language Choice}), and in addition @code{LDFLAGS} and
@c @code{LIBS} are used for linking.
@c 
CとC++に対して,@var{includes}は@var{function-body}にあるコードが必要と
するすべての@code{#include}文です(現在選択されている言語がFortran 77 の
場合,@var{includes}は無視されます).コンパイラとコンパイルフラグは現在
の言語(@pxref{Language Choice})で決定され,リンクでは@code{LDFLAGS}と
@code{LIBS}が追加で使用されます.
@end defmac

@defmac AC_TRY_LINK_FUNC (@var{function}, @ovar{action-if-found}, @ovar{action-if-not-found})
@acindex{TRY_LINK_FUNC}
@c This macro is equivalent to
@c @samp{AC_LINK_IFELSE([AC_LANG_CALL([[@var{includes}]],
@c [[@var{function-body}]])], [@var{action-if-true}],
@c [@var{action-if-false}])}.
@c 
このマクロは,@samp{AC_LINK_IFELSE([AC_LANG_CALL([[@var{includes}]],
[[@var{function-body}]])], [@var{action-if-true}],
[@var{action-if-false}])}と同じです.
@end defmac

@defmac AC_TRY_RUN (@var{program}, @ovar{action-if-true}, @ovar{action-if-false}, @ovar{action-if-cross-compiling})
@acindex{TRY_RUN}
@c Same as @samp{AC_RUN_IFELSE([AC_LANG_SOURCE([[@var{program}]],
@c [@var{action-if-true}], [@var{action-if-false}],
@c [@var{action-if-cross-compiling}])} (@pxref{Run Time}).
@c 
@samp{AC_RUN_IFELSE([AC_LANG_SOURCE([[@var{program}]],
[@var{action-if-true}], [@var{action-if-false}],
[@var{action-if-cross-compiling}])}と同じです(@pxref{Run Time}).
@end defmac


@defmac AC_UID_T
@acindex{UID_T}
@code{AC_TYPE_UID_T}
@end defmac

@defmac AC_UNISTD_H
@acindex{UNISTD_H}
@c Same as @samp{AC_CHECK_HEADERS(unistd.h)}.
@c 
@samp{AC_CHECK_HEADERS(unistd.h)}と同じです.
@end defmac

@defmac AC_USG
@acindex{USG}
@cvindex USG
@c Define @code{USG} if the @acronym{BSD} string functions are defined in
@c @file{strings.h}.  You should no longer depend upon @code{USG}, but on
@c @code{HAVE_STRING_H}; see @ref{Standard Symbols}.
@c 
@acronym{BSD}文字列関数が@file{strings.h}で定義されている場合,
@code{USG}を定義します.これからは@code{USG}ではなく@code{HAVE_STRING_H}
に依存するようにすべきです.@xref{Standard Symbols}.
@end defmac

@defmac AC_UTIME_NULL
@acindex{UTIME_NULL}
@code{AC_FUNC_UTIME_NULL}
@end defmac

@defmac AC_VALIDATE_CACHED_SYSTEM_TUPLE (@ovar{cmd})
@acindex{VALIDATE_CACHED_SYSTEM_TUPLE}
@c If the cache file is inconsistent with the current host, target and
@c build system types, it used to execute @var{cmd} or print a default
@c error message.  This is now handled by default.
@c 
キャッシュファイルが現在のホスト,ターゲット,そしてビルドシステムのタイ
プで矛盾がある場合,@var{cmd}を実行したりデフォルトのエラーメッセージを
出力したりするために使用されていました.これは現在デフォルトで処理されま
す.
@end defmac

@defmac AC_VERBOSE (@var{result-description})
@acindex{VERBOSE}
@code{AC_MSG_RESULT}.
@end defmac

@defmac AC_VFORK
@acindex{VFORK}
@code{AC_FUNC_VFORK}
@end defmac

@defmac AC_VPRINTF
@acindex{VPRINTF}
@code{AC_FUNC_VPRINTF}
@end defmac

@defmac AC_WAIT3
@acindex{WAIT3}
@code{AC_FUNC_WAIT3}
@end defmac

@defmac AC_WARN
@acindex{WARN}
@code{AC_MSG_WARN}
@end defmac

@defmac AC_WORDS_BIGENDIAN
@acindex{WORDS_BIGENDIAN}
@code{AC_C_BIGENDIAN}
@end defmac

@defmac AC_XENIX_DIR
@acindex{XENIX_DIR}
@ovindex LIBS
@c This macro used to add @option{-lx} to output variable @code{LIBS} if on
@c Xenix.  Also, if @file{dirent.h} is being checked for, added
@c @option{-ldir} to @code{LIBS}.  Now it is merely an alias of
@c @code{AC_HEADER_DIRENT} instead, plus some code to detect whether
@c running @sc{xenix} on which you should not depend:
@c 
このマクロは,Xenixの場合に出力変数@code{LIBS}に@option{-lx}を追加するた
めに使用されていました.また,@file{dirent.h}が調査され,@code{LIBS} を
@option{-ldir}に追加していました.現在では,@code{AC_HEADER_DIRENT} の代
わりの別名となっていることも滅多に無く,依存すべきではありませんが,
@sc{xenix}で実行されているかどうかを検出するコートが追加されています.

@example
AC_MSG_CHECKING([for Xenix])
AC_EGREP_CPP(yes,
[#if defined M_XENIX && !defined M_UNIX
  yes
#endif],
             [AC_MSG_RESULT([yes]); XENIX=yes],
             [AC_MSG_RESULT([no]); XENIX=])
@end example
@end defmac

@defmac AC_YYTEXT_POINTER
@acindex{YYTEXT_POINTER}
@code{AC_DECL_YYTEXT}
@end defmac

@node Autoconf 1
@c @section Upgrading From Version 1
@section バージョン1からの更新

@c Autoconf version 2 is mostly backward compatible with version 1.
@c However, it introduces better ways to do some things, and doesn't
@c support some of the ugly things in version 1.  So, depending on how
@c sophisticated your @file{configure.ac} files are, you might have to do
@c some manual work in order to upgrade to version 2.  This chapter points
@c out some problems to watch for when upgrading.  Also, perhaps your
@c @command{configure} scripts could benefit from some of the new features in
@c version 2; the changes are summarized in the file @file{NEWS} in the
@c Autoconf distribution.
@c 
Autoconfバージョン2は,バージョン1とほとんど下位互換性があります.しかし,
何かをするときにより良くなる方法も導入していますし,バージョン1の醜いも
のにはサポートしなくなったものもあります.そのため,@file{configure.ac}
の洗練具合に依存して,バージョン2に更新するための手作業が必要になります.
この章は,更新時に見るべき問題点も示します.また,@command{configure}ス
クリプトは,バージョン2の新しい機能でより良くなります.変更点は,
Autoconf配布物のファイル@file{NEWS}に概要が書かれています.

@menu
* Changed File Names::          Files you might rename
* Changed Makefiles::           New things to put in @file{Makefile.in}
* Changed Macros::              Macro calls you might replace
* Changed Results::             Changes in how to check test results
* Changed Macro Writing::       Better ways to write your own macros
@end menu

@node Changed File Names
@c @subsection Changed File Names
@subsection ファイル名の変更

@c If you have an @file{aclocal.m4} installed with Autoconf (as opposed to
@c in a particular package's source directory), you must rename it to
@c @file{acsite.m4}.  @xref{autoconf Invocation}.
@c 
Autoconfでインストールされた@file{aclocal.m4}がある場合,(特定のパッケー
ジのソースディレクトリと対立するので),それを@file{acsite.m4}に名前を変
更する必要があります.@xref{autoconf Invocation}.

@c If you distribute @file{install.sh} with your package, rename it to
@c @file{install-sh} so @code{make} builtin rules won't inadvertently
@c create a file called @file{install} from it.  @code{AC_PROG_INSTALL}
@c looks for the script under both names, but it is best to use the new name.
@c 
パッケージで@file{install.sh}を配布する場合,@code{make}組み込みルールが,
@file{install}と呼ばれる意図しないファイルを作成するので,
@file{install-sh}に名前を変更してください.@code{AC_PROG_INSTALL}は両方
の名前でスクリプトを探しますが,新しい名前を使用するのが最善です.

@c If you were using @file{config.h.top}, @file{config.h.bot}, or
@c @file{acconfig.h}, you still can, but you will have less clutter if you
@c use the @code{AH_} macros.  @xref{Autoheader Macros}.
@c 
@file{config.h.top},@file{config.h.bot},または@file{acconfig.h}を使用
している場合,そのまま使用することは可能ですが,@code{AH_}マクロを使用す
るとバラバラになりません.@xref{Autoheader Macros}.

@node Changed Makefiles
@c @subsection Changed Makefiles
@subsection Makefileの変更

@c Add @samp{@@CFLAGS@@}, @samp{@@CPPFLAGS@@}, and @samp{@@LDFLAGS@@} in
@c your @file{Makefile.in} files, so they can take advantage of the values
@c of those variables in the environment when @command{configure} is run.
@c Doing this isn't necessary, but it's a convenience for users.
@c 
@file{Makefile.in}ファイルに@samp{@@CFLAGS@@},@samp{@@CPPFLAGS@@},そし
て@samp{@@LDFLAGS@@}を,@command{configure}実行時に,環境変数としてこれ
らの変数の値を利用できるので,それらを加えてください.必要ではありません
が,ユーザにとって便利です.

@c Also add @samp{@@configure_input@@} in a comment to each input file for
@c @code{AC_OUTPUT}, so that the output files will contain a comment saying
@c they were produced by @command{configure}.  Automatically selecting the
@c right comment syntax for all the kinds of files that people call
@c @code{AC_OUTPUT} on became too much work.
@c 
出力ファイルに,@command{configure}で生成されたというコメントを含めるた
めに,@code{AC_OUTPUT}に対する@file{Makefile}以外の入力ファイルのそれそ
れのコメントに,@samp{@@configure_input@@}を加えてください.
@code{AC_OUTPUT}で呼び出す全ての種類のファイルに対し,自動的に正しいコメ
ント文を選択するには,作業が非常に多くなります.

@c Add @file{config.log} and @file{config.cache} to the list of files you
@c remove in @code{distclean} targets.
@c 
@code{distclean}ターゲットで削除するファイルリストに, @file{config.log}
と@file{config.cache}を加えてください.

@c If you have the following in @file{Makefile.in}:
@c 
以下のような@file{Makefile.in}がある場合を考えます.

@example
prefix = /usr/local
exec_prefix = $(prefix)
@end example

@noindent
@c you must change it to:
@c 
以下のように変更する必要があります.

@example
prefix = @@prefix@@
exec_prefix = @@exec_prefix@@
@end example

@noindent
@c The old behavior of replacing those variables without @samp{@@}
@c characters around them has been removed.
@c 
周りに@samp{@@}が無い変数の置換をする古い動作は削除されました.

@node Changed Macros
@c @subsection Changed Macros
@subsection 変更されたマクロ

@c Many of the macros were renamed in Autoconf version 2.  You can still
@c use the old names, but the new ones are clearer, and it's easier to find
@c the documentation for them.  @xref{Obsolete Macros}, for a table showing the
@c new names for the old macros.  Use the @command{autoupdate} program to
@c convert your @file{configure.ac} to using the new macro names.
@c @xref{autoupdate Invocation}.
@c 
Autoconfバージョン2でマクロの多くは名前が変更されました.まだ古い名前を
使用することも可能ですが,新しいものはより明確で,それらのドキュメントは
簡単に見つかります.古いマクロに対する新しい名前の表は,@xref{Obsolete
Macros}.  新しいマクロを使用するように@file{configure.ac}を変換するため,
@command{autoupdate}プログラムを使用してください.@xref{autoupdate
Invocation}.

@c Some macros have been superseded by similar ones that do the job better,
@c but are not call-compatible.  If you get warnings about calling obsolete
@c macros while running @command{autoconf}, you may safely ignore them, but
@c your @command{configure} script will generally work better if you follow
@c the advice that is printed about what to replace the obsolete macros with.  In
@c particular, the mechanism for reporting the results of tests has
@c changed.  If you were using @code{echo} or @code{AC_VERBOSE} (perhaps
@c via @code{AC_COMPILE_CHECK}), your @command{configure} script's output will
@c look better if you switch to @code{AC_MSG_CHECKING} and
@c @code{AC_MSG_RESULT}.  @xref{Printing Messages}.  Those macros work best
@c in conjunction with cache variables.  @xref{Caching Results}.
@c 
マクロには,より良い仕事をする似たものに置き換えられたものもありますが,
呼び出しに互換性がありません.@command{autoconf}実行中に,時代遅れのマク
ロの呼び出しに関する警告がある場合,無視しても大丈夫ですが,時代遅れのマ
クロの置換に関して出力されるアドバイスに従う場合,@command{configure}ス
クリプトはより良い仕事をします.特に,テストの結果を報告するメカニズムが
変化しました.(おそらく@code{AC_COMPILE_CHECK} によって)@code{echo}や
@code{AC_VERBOSE}を使用していた場合,@command{configure}スクリプトの出力
は,@code{AC_MSG_CHECKING}と@code{AC_MSG_RESULT}に変えた方が良く見えるで
しょう.@xref{Printing Messages}. これらのマクロは,キャッシュ変数に関連
して最高の仕事をします.@xref{Caching Results}.



@node Changed Results
@c @subsection Changed Results
@subsection 変更された結果

@c If you were checking the results of previous tests by examining the
@c shell variable @code{DEFS}, you need to switch to checking the values of
@c the cache variables for those tests.  @code{DEFS} no longer exists while
@c @command{configure} is running; it is only created when generating output
@c files.  This difference from version 1 is because properly quoting the
@c contents of that variable turned out to be too cumbersome and
@c inefficient to do every time @code{AC_DEFINE} is called.  @xref{Cache
@c Variable Names}.
@c 
シェル変数の@code{DEFS}を調査することで,前のテストの結果を調査していた
場合,それらのテストに対するキャッシュ変数の値を調査することに切り替える
必要があります.@code{DEFS}は@command{configure}実行中にも存在しません.
それは出力ファイルを生成するときのみ作成されます.バージョン1からのこの
違いは,正確にその変数を引用符で囲むことが,あまりに厄介で, 
@code{AC_DEFINE}を毎回呼び出すことは,非効率だと分かったためです. 
@xref{Cache Variable Names}.

@c For example, here is a @file{configure.ac} fragment written for Autoconf
@c version 1:
@c 
例えば,Autoconfバージョン1に対して書かれた,@file{configure.ac}の一部は
以下のようになります.

@example
AC_HAVE_FUNCS(syslog)
case "$DEFS" in
*-DHAVE_SYSLOG*) ;;
*) # syslog is not in the default libraries.  See if it's in some other.
  saved_LIBS="$LIBS"
  for lib in bsd socket inet; do
    AC_CHECKING(for syslog in -l$lib)
    LIBS="$saved_LIBS -l$lib"
    AC_HAVE_FUNCS(syslog)
    case "$DEFS" in
    *-DHAVE_SYSLOG*) break ;;
    *) ;;
    esac
    LIBS="$saved_LIBS"
  done ;;
esac
@end example

@c Here is a way to write it for version 2:
@c 
バージョン2に対する書き方は以下のようになります.

@example
AC_CHECK_FUNCS(syslog)
if test $ac_cv_func_syslog = no; then
  # syslog is not in the default libraries.  See if it's in some other.
  for lib in bsd socket inet; do
    AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG)
      LIBS="$LIBS -l$lib"; break])
  done
fi
@end example

@c If you were working around bugs in @code{AC_DEFINE_UNQUOTED} by adding
@c backslashes before quotes, you need to remove them.  It now works
@c predictably, and does not treat quotes (except back quotes) specially.
@c @xref{Setting Output Variables}.
@c 
引用符の前にバックスラッシュを加えることで,@code{AC_DEFINE_UNQUOTED} で
バグが生じる場合,それを削除する必要があります.今は予想通りに動作し,
(バックスラッシュ以外の)引用符を特別扱いしません.@xref{Setting Output
Variables}.

@c All of the Boolean shell variables set by Autoconf macros now use
@c @samp{yes} for the true value.  Most of them use @samp{no} for false,
@c though for backward compatibility some use the empty string instead.  If
@c you were relying on a shell variable being set to something like 1 or
@c @samp{t} for true, you need to change your tests.
@c 
現在,Autoconfマクロが設定した真偽値のシェル変数のすべては,真の値に対し
て@samp{yes}が使用され.偽に対してはほとんど@samp{no}を使用しますが,下
位互換性のため,代わりに空の文字列を使用するものもあります.真に対して1
や@samp{t}にシェル変数が設定されることを期待する場合,テストを変更する必
要があります.

@node Changed Macro Writing
@c @subsection Changed Macro Writing
@subsection マクロの書き方の変更

@c When defining your own macros, you should now use @code{AC_DEFUN}
@c instead of @code{define}.  @code{AC_DEFUN} automatically calls
@c @code{AC_PROVIDE} and ensures that macros called via @code{AC_REQUIRE}
@c do not interrupt other macros, to prevent nested @samp{checking@dots{}}
@c messages on the screen.  There's no actual harm in continuing to use the
@c older way, but it's less convenient and attractive.  @xref{Macro
@c Definitions}.
@c 
独自のマクロを定義するとき,現在は@code{define}の代わりに@code{AC_DEFUN}
を使用すべきです.@code{AC_DEFUN}は@code{AC_PROVIDE}を自動的に呼び出し, 
@code{AC_REQUIRE}のために呼び出されるマクロが,画面上で入れ子状になって
いる@samp{checking@dots{}}メッセージを妨げないように,他のマクロを中断し
ていないことを確かめます.古い方法を使用し続けても実際に害はありませんが,
便利さと美しさが現象します.@xref{Macro Definitions}.

@c You probably looked at the macros that came with Autoconf as a guide for
@c how to do things.  It would be a good idea to take a look at the new
@c versions of them, as the style is somewhat improved and they take
@c advantage of some new features.
@c 
恐らく,Autoconfと共にやってくるマクロを,何かをする方法のガイドとして見
ることになるでしょう.新しいバージョンのものを見ることは,スタイルが改善
されているものもあり,新しい機能も利用しているので,よい考えでしょう.

@c If you were doing tricky things with undocumented Autoconf internals
@c (macros, variables, diversions), check whether you need to change
@c anything to account for changes that have been made.  Perhaps you can
@c even use an officially supported technique in version 2 instead of
@c kludging.  Or perhaps not.
@c 
文書化されていないAutoconfの内部(マクロ,変数,変換)を使用して,トリッキー
なことをしていた場合,なされた変更を考慮するため,変更する必要があるかど
うか調査してください.恐らくkludeする代わりに,バージョン2で公式にサポー
トされたテクニックを使用することができます.そうしなければダメでしょう.

@c To speed up your locally written feature tests, add caching to them.
@c See whether any of your tests are of general enough usefulness to
@c encapsulate them into macros that you can share.
@c 
ローカルで書かれた特徴のテストを高速化するため,キャッシュを加えてくださ
い.共有可能なマクロをカプセル化するため,テストが一般的に十分役に立つこ
とを確かめてください.


@node Autoconf 2.13
@c @section Upgrading From Version 2.13
@section バージョン2.13からの更新

@c The introduction of the previous section (@pxref{Autoconf 1}) perfectly
@c suits this section@enddots{}
@c 
前のセクション(@pxref{Autoconf 1})の導入は,このセクションにも全く適して
いるなあ@enddots{}

@quotation
@c Autoconf version 2.50 is mostly backward compatible with version 2.13.
@c However, it introduces better ways to do some things, and doesn't
@c support some of the ugly things in version 2.13.  So, depending on how
@c sophisticated your @file{configure.ac} files are, you might have to do
@c some manual work in order to upgrade to version 2.50.  This chapter
@c points out some problems to watch for when upgrading.  Also, perhaps
@c your @command{configure} scripts could benefit from some of the new
@c features in version 2.50; the changes are summarized in the file
@c @file{NEWS} in the Autoconf distribution.
@c 
Autoconfバージョン2.50は,バージョン2.13とほとんど下位互換性があります.
しかし,何かをするときより良くする方法も導入し,バージョン2.13の醜いもの
にはサポートしなくなったものもあります.そのため,@file{configure.ac}の
洗練具合に依存して,バージョン2.50に更新するための手作業が必要になります.
この章は,更新時に見るべき問題点も示します.また,@command{configure}ス
クリプトは,バージョン2.50の新しい機能でより良くなります.変更点は,
Autoconf 配布物のファイル@file{NEWS}に概要が書かれています.
@end quotation

@menu
* Changed Quotation::           Broken code which used to work
* New Macros::                  Interaction with foreign macros
* Hosts and Cross-Compilation::  Bugward compatibility kludges
* AC_LIBOBJ vs LIBOBJS::        LIBOBJS is a forbidden token
* AC_FOO_IFELSE vs AC_TRY_FOO::  A more generic scheme for testing sources
@end menu

@node Changed Quotation
@c @subsection Changed Quotation
@subsection 引用符で囲むことの変更

@c The most important changes are invisible to you: the implementation of
@c most macros have completely changed.  This allowed more factorization of
@c the code, better error messages, a higher uniformity of the user's
@c interface etc.  Unfortunately, as a side effect, some construct which
@c used to (miraculously) work might break starting with Autoconf 2.50.
@c The most common culprit is bad quotation.
@c 
紹介すべき最も重要な変更です.ほとんどのマクロの実装は完全に変更されまし
た.コードの分解,エラーメッセージの改善,ユーザインターフェースの一貫性
などが,このことで可能になりました.残念ながら副作用として,これまで(奇
跡的に)動作していた構成物には,Autoconf 2.50でおかしくなり始めるものもあ
ります.

@c For instance, in the following example, the message is not properly
@c quoted:
@c 
例えば,以下の例では,メッセージが適切に引用符で囲まれていません.

@example
AC_INIT
AC_CHECK_HEADERS(foo.h,,
AC_MSG_ERROR(cannot find foo.h, bailing out))
AC_OUTPUT
@end example

@noindent
@c Autoconf 2.13 simply ignores it:
@c 
Autoconf 2.13は,単純にそれを無視していました.

@example
$ @kbd{autoconf-2.13; ./configure --silent}
creating cache ./config.cache
configure: error: cannot find foo.h
$
@end example

@noindent
@c while Autoconf 2.50 will produce a broken @file{configure}:
@c 
しかしAutoconf 2.50では,壊れた@file{configure}を生成します.

@example
$ @kbd{autoconf-2.50; ./configure --silent}
configure: error: cannot find foo.h
./configure: exit: bad non-numeric arg `bailing'
./configure: exit: bad non-numeric arg `bailing'
$
@end example

@c The message needs to be quoted, and the @code{AC_MSG_ERROR} invocation
@c too!
@c 
メッセージは引用符で囲む必要があり,@code{AC_MSG_ERROR}の呼び出しもそう
です!

@example
AC_INIT
AC_CHECK_HEADERS(foo.h,,
                 [AC_MSG_ERROR([cannot find foo.h, bailing out])])
AC_OUTPUT
@end example

@c Many many (and many more) Autoconf macros were lacking proper quotation,
@c including no less than@dots{} @code{AC_DEFUN} itself!
@c 
多くの多くの(いくらでも続けたい)Autoconfマクロには@dots{}少なくとも
@code{AC_DEFUN}自身も含めて,適切な引用符がありませんでした!

@example
$ @kbd{cat configure.in}
AC_DEFUN([AC_PROG_INSTALL],
[# My own much better version
])
AC_INIT
AC_PROG_INSTALL
AC_OUTPUT
$ @kbd{autoconf-2.13}
autoconf: Undefined macros:
***BUG in Autoconf--please report*** AC_FD_MSG
***BUG in Autoconf--please report*** AC_EPI
configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
configure.in:5:AC_PROG_INSTALL
$ @kbd{autoconf-2.50}
$
@end example


@node New Macros
@c @subsection New Macros
@subsection 新しいマクロ

@cindex undefined macro
@cindex @code{_m4_divert_diversion}

@c Because Autoconf has been dormant for years, Automake provided
@c Autoconf-like macros for a while.  Autoconf 2.50 now provides better
@c versions of these macros, integrated in the @code{AC_} namespace,
@c instead of @code{AM_}.  But in order to ease the upgrading via
@c @command{autoupdate}, bindings to such @code{AM_} macros are provided.
@c 
Autoconfは何年も休止中だったので,その間AutomakeがAutoconfのようなマクロ
を提供していました.現在は,Autoconf 2.50がこれらのマクロのより良いバー
ジョンを提供していて,@code{AM_}ではなく@code{AC_}の名前空間で統合されて
います.しかし,@command{autoupdate}で容易に更新できるように,そのような
@code{AM_}マクロも結合されて提供されています.

@c Unfortunately Automake did not quote the names of these macros!
@c Therefore, when @command{m4} finds something like
@c @samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})} in @file{aclocal.m4},
@c @code{AM_TYPE_PTRDIFF_T} is
@c expanded, replaced with its Autoconf definition.
@c 
残念ながら,Automakeはこれらのマクロ名を引用符で囲んでいませんでした.そ
のため,@command{m4}が@samp{AC_DEFUN(AM_TYPE_PTRDIFF_T, @dots{})}のよう
なマクロを@file{aclocal.m4}で見つけたとき,@code{AM_TYPE_PTRDIFF_T}は展
開され,そのAutoconfの定義で置換されていました.

@c Fortunately Autoconf catches pre-@code{AC_INIT} expansions, and will
@c complain, in its own words:
@c 
幸い,Autoconfは前置される@code{AC_INIT}の展開を受けて,それが所有する単
語で文句をいいます.

@example
$ @kbd{cat configure.in}
AC_INIT
AM_TYPE_PTRDIFF_T
$ @kbd{aclocal-1.4}
$ @kbd{autoconf}
./aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
actypes.m4:289: AM_TYPE_PTRDIFF_T is expanded from...
./aclocal.m4:17: the top level
$
@end example

@c Future versions of Automake will simply no longer define most of these
@c macros, and will properly quote the names of the remaining macros.
@c But you don't have to wait for it to happen to do the right thing right
@c now: do not depend upon macros from Automake as it is simply not its job
@c to provide macros (but the one it requires itself):
@c 
将来のAutomakeのバージョンは,単純にこれらのマクロをこれ以上定義せず,お
そらく残りのマクロ名を引用符で囲むでしょう.しかし,全てがうまくいくまで
じっと待っている必要はありません.(単独で要求されるものもありますが)マク
ロを提供するための仕事は単純ではないので,Automakeのマクロに依存しないで
ください.

@example
$ @kbd{cat configure.in}
AC_INIT
AM_TYPE_PTRDIFF_T
$ @kbd{rm aclocal.m4}
$ @kbd{autoupdate}
autoupdate: `configure.in' is updated
$ @kbd{cat configure.in}
AC_INIT
AC_CHECK_TYPES([ptrdiff_t])
$ @kbd{aclocal-1.4}
$ @kbd{autoconf}
$
@end example


@node Hosts and Cross-Compilation
@c @subsection Hosts and Cross-Compilation
@subsection ホストとクロスコンパイル

@c Based on the experience of compiler writers, and after long public
@c debates, many aspects of the cross-compilation chain have changed:
@c 
コンパイラ作者の経験とそれ以降の長期にわたる公開討論を基にして,一連のク
ロスコンパイルの多くの面が変更されました.

@itemize @minus
@item
@c the relationship between the build, host, and target architecture types,
@c 
ビルド,ホスト,そしてターゲットアーキテクチャタイプの違いに関連すること.

@item
@c the command line interface for specifying them to @command{configure},
@c 
@command{configure}でそれらを指定するコマンドラインインターフェース.

@item
@c the variables defined in @command{configure},
@c 
@command{configure}で定義される変数.

@item
@c the enabling of cross-compilation mode.
@c 
クロスコンパイルモードを利用可能にすること.
@end itemize

@sp 1

@c The relationship between build, host, and target have been cleaned up:
@c the chain of default is now simply: target defaults to host, host to
@c build, and build to the result of @command{config.guess}.  Nevertheless,
@c in order to ease the transition from 2.13 to 2.50, the following
@c transition scheme is implemented.  @emph{Do not rely on it}, as it will
@c be completely disabled in a couple of releases (we cannot keep it, as it
@c proves to cause more problems than it cures).
@c 
ビルド,ホスト,そしてターゲットアーキテクチャタイプの違いに関連すること
は解決しています.一連のデフォルトは,現在は単純です.ターゲットのデフォ
ルトはホスト,ホストはビルド,そしてビルドは@command{config.guess} の結
果となっています.それにもかかわらず,2.13から2.50へ容易に変換するために,
以下の変換手法が実装されています.それは,リリースの組を完全に利用不可能
にすることはできないので,@emph{それに依存しないでください} (直すより問
題が生じることが多いので,我々はそれを維持することは不可能です).

@c They all default to the result of running @command{config.guess}, unless
@c you specify either @option{--build} or @option{--host}.  In this case,
@c the default becomes the system type you specified.  If you specify both,
@c and they're different, @command{configure} will enter cross compilation
@c mode, so it won't run any tests that require execution.
@c 
@option{--build}または@option{--host}で指定しない限り,すべてのデフォル
トは@command{config.guess}の実行結果になります.指定する場合は,デフォル
トは指定したシステムタイプになります.両方を指定していて異なっている場合,
テストと要求された実行物をの実行しないように,@command{configure}はクロ
スコンパイルモードになります.

@c Hint: if you mean to override the result of @command{config.guess},
@c prefer @option{--build} over @option{--host}.  In the future,
@c @option{--host} will not override the name of the build system type.
@c Whenever you specify @code{--host}, be sure to specify @code{--build}
@c too.
@c 
ヒント:@command{config.guess}の結果に優先させたい場合は,
@option{--host}ではなく@option{--build}の方が好ましくなっています.将来
は,@option{--host}でビルドシステムタイプを優先しなくなるでしょう.
@code{--host}を指定する場合も,確実に@code{--build}も指定してください.

@sp 1

@c For backward compatibility, @command{configure} will accept a system
@c type as an option by itself.  Such an option will override the
@c defaults for build, host, and target system types.  The following
@c configure statement will configure a cross toolchain that will run on
@c Net@acronym{BSD}/alpha but generate code for @acronym{GNU} Hurd/sparc, which is
@c also the build platform.
@c 
下位互換性のため,@command{configure}はシステムタイプ自身をオプションと
して受け入れます.そのようなオプションは,ビルド,ホスト,そしてターゲッ
トのシステムタイプのデフォルトに優先されます.以下のコンフィグレーション
命令では,Net@acronym{BSD}/alphaで実行するのですが,ビルドプラットフォー
ムにもなる@acronym{GNU} Hurd/sparcのコードを生成する一連のクロスツールが
コンフィグレーションされます.

@example
./configure --host=alpha-netbsd sparc-gnu
@end example

@sp 1

@c In Autoconf 2.13 and before, the variables @code{build}, @code{host},
@c and @code{target} had a different semantics before and after the
@c invocation of @code{AC_CANONICAL_BUILD} etc.  Now, the argument of
@c @option{--build} is strictly copied into @code{build_alias}, and is left
@c empty otherwise.  After the @code{AC_CANONICAL_BUILD}, @code{build} is
@c set to the canonicalized build type.  To ease the transition, before,
@c its contents is the same as that of @code{build_alias}.  Do @emph{not}
@c rely on this broken feature.
@c 
Autoconf 2.13とそれ以前では,変数@code{build},@code{host},そして
@code{target}は,@code{AC_CANONICAL_BUILD}の呼び出しの前後で異なる意味を
持っていました.現在は,@option{--build}の引数を指定することで,それは厳
密な意味で@code{build_alias}にコピーされ,それ以外では空のままになります.
@code{AC_CANONICAL_BUILD}の後で,@code{build}は標準的なビルドタイプに設
定されます.変換を容易にするため,以前の内容は,@code{build_alias}と同じ
です.この壊れた機能に依存@emph{しないように} してください.

@c For consistency with the backward compatibility scheme exposed above,
@c when @option{--host} is specified but @option{--build} isn't, the build
@c system will be assumed to be the same as @option{--host}, and
@c @samp{build_alias} will be set to that value.  Eventually, this
@c historically incorrect behavior will go away.
@c 
下位互換性を考慮した手法は上のようになり,@option{--host}が指定されてい
て,@option{--build}指定されていないときは,ビルドシステムは
@option{--host}と同じだと仮定され,@samp{build_alias}がその値として設定
されます.最終的には,この歴史的に間違っている動作はなくなるでしょう.

@sp 1

@c The former scheme to enable cross-compilation proved to cause more harm
@c than good, in particular, it used to be triggered too easily, leaving
@c regular end users puzzled in front of cryptic error messages.
@c @command{configure} could even enter cross-compilation mode only
@c because the compiler was not functional.  This is mainly because
@c @command{configure} used to try to detect cross-compilation, instead of
@c waiting for an explicit flag from the user.
@c 
クロスコンパイルを利用可能にするための前者の方法はあまり良くなく,特に,
それが安易に使用されると,通常のエンドユーザが不可解なエラーメッセージを
前にして困ってしまいます.コンパイラが汎用的でないときだけのために,
@command{configure}はクロスコンパイルモードに入ることが可能です.これは
主に,ユーザからの明示的なフラグを待つ代わりに,@command{configure} をク
ロスコンパイルの検出を試みるために使用されるためです.

@c Now, @command{configure} enters cross-compilation mode if and only if
@c @option{--host} is passed.
@c 
現在は,@option{--host}が渡されている場合,そしてその状況でだけ,
@command{configure}はクロスコンパイルモードに入ります.

@c That's the short documentation.  To ease the transition between 2.13 and
@c its successors, a more complicated scheme is implemented.  @emph{Do not
@c rely on the following}, as it will be removed in the near future.
@c 
以下は,短いドキュメントです.2.13とその後のものの間で簡単に変換するため,
より複雑な手法が実行されています.以下は将来削除されるので,@emph{以下の
内容に依存しないでください}.

@c If you specify @option{--host}, but not @option{--build}, when
@c @command{configure} performs the first compiler test it will try to run
@c an executable produced by the compiler.  If the execution fails, it will
@c enter cross-compilation mode.  This is fragile.  Moreover, by the time
@c the compiler test is performed, it may be too late to modify the
@c build-system type: other tests may have already been performed.
@c Therefore, whenever you specify @code{--host}, be sure to specify
@c @code{--build} too.
@c 
@option{--host}を指定していて@option{--build}を指定していない場合,
@command{configure}が最初のコンパイルテストを実行するときに,コンパイラ
で実行形式が生成されることを実行することで調査してみます.実行が失敗する
場合,クロスコンパイルモードに入ります.これは壊れやすいものです.さらに,
コンパイラテストを実行する頃には,ビルドシステムのタイプを修正するには遅
過ぎるかもしれません.そのため,@code{--host}を指定するときには,確実に
@code{--build}も指定してください.

@example
./configure --build=i686-pc-linux-gnu --host=m68k-coff
@end example

@noindent
@c will enter cross-compilation mode.  The former interface, which
@c consisted in setting the compiler to a cross-compiler without informing
@c @command{configure} is obsolete.  For instance, @command{configure} will
@c fail if it can't run the code generated by the specified compiler if you
@c configure as follows:
@c 
これでクロスコンパイルモードに入ります.コンパイラに@command{configure} 
の情報を渡すことなくクロスコンパイルする設定から成り立っている前者のイン
ターフェースは時代遅れです.例えば,以下のようなコンフィグレーションを行
なっていて,指定されたコンパイラで生成されたコードが実行できない場合,
@command{configure}は失敗します.

@example
./configure CC=m68k-coff-gcc
@end example


@node AC_LIBOBJ vs LIBOBJS
@c @subsection @code{AC_LIBOBJ} vs.@: @code{LIBOBJS}
@subsection @code{AC_LIBOBJ}対@code{LIBOBJS}

@c Up to Autoconf 2.13, the replacement of functions was triggered via the
@c variable @code{LIBOBJS}.  Since Autoconf 2.50, the macro
@c @code{AC_LIBOBJ} should be used instead (@pxref{Generic Functions}).
@c Starting at Autoconf 2.53, the use of @code{LIBOBJS} is an error.
@c 
Autoconf 2.13までは,関数の置換は変数@code{LIBOBJS}で開始されていました.
Autoconf 2.50からは,マクロ@code{AC_LIBOBJ}を代わりに使用すべきです
(@pxref{Generic Functions}).Autoconf 2.53からは,@code{LIBOBJS}の使用は
エラーになります.

@c This change is mandated by the unification of the @acronym{GNU} Build System
@c components.  In particular, the various fragile techniques used to parse
@c a @file{configure.ac} are all replaced with the use of traces.  As a
@c consequence, any action must be traceable, which obsoletes critical
@c variable assignments.  Fortunately, @code{LIBOBJS} was the only problem,
@c and it can even be handled gracefully (read, ``without your having to
@c change something'').
@c 
この変更は,@acronym{GNU}ビルドシステムの構成要素から要求されました.特
に,@file{configure.ac}のパースで使用される様々な壊れやすいテクニックは,
すべてトレースを使用することで置換されます.結果として,すべての動作をト
レース可能にする必要があり,それでクリティカルな変数の代入は時代遅れにな
ります.幸運にも@code{LIBOBJS}だけが問題となっていて,それは美しく処理す
ることが可能です(``何も変更する必要はない''ということです).

@c There were two typical uses of @code{LIBOBJS}: asking for a replacement
@c function, and adjusting @code{LIBOBJS} for Automake and/or Libtool.
@c 
典型的な@code{LIBOBJS}の使用方法は二つありました.関数の置換を依頼するこ
とと,Automakeそして/またはLibtoolに対する@code{LIBOBJS}を調整することで
す.

@sp 1

@c As for function replacement, the fix is immediate: use
@c @code{AC_LIBOBJ}.  For instance:
@c 
関数の置換に対しては,修正はすぐにできます.@code{AC_LIBOBJ}を使用してく
ださい.例えば,以下を考えます.

@example
LIBOBJS="$LIBOBJS fnmatch.o"
LIBOBJS="$LIBOBJS malloc.$ac_objext"
@end example

@noindent
@c should be replaced with:
@c 
以下で置換すべきです.

@example
AC_LIBOBJ([fnmatch])
AC_LIBOBJ([malloc])
@end example

@sp 1

@ovindex U
@cindex @code{$U}
@c When asked for automatic de-ANSI-fication, Automake needs
@c @code{LIBOBJS}'ed filenames to have @samp{$U} appended to the base
@c names.  Libtool requires the definition of @code{LTLIBOBJS}, whose
@c suffixes are mapped to @samp{.lo}.  People used to run snippets such as:
@c 
自動的なde-ANSI-ficationが依頼されたとき,Automakeは,@samp{$U}をベース
ファイル名に追加するために@code{LIBOBJS}されたファイル名が必要です.
Libtoolは,接尾子が@samp{.lo}になっている@code{LTLIBOBJS}の定義が必要で
す.人々は,以下のような断片を実行していました.

@example
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIBOBJS=`echo "$LIBOBJS" | sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/\.lo/g'`
AC_SUBST(LTLIBOBJS)
@end example

@noindent
@c Note that this code is @emph{wrong}, because @samp{.o} is not the only
@c possible extension@footnote{
@c @c
@c Yet another reason why assigning @code{LIBOBJS} directly is discouraged.
@c @c
@c }!  It should have read:
@c 
@samp{.o}が拡張子ではない可能性があるので,このコードが@emph{間違ってい
る}ことに注意してください@footnote{
@c
もう一つの理由として,@code{LIBOBJS}を直接代入するのは反対です.
@c
}! 以下のように読み換えてください.

@example
# This is necessary so that .o files in LIBOBJS are also built via
# the ANSI2KNR-filtering rules.
LIB@@&t@@OBJS=`echo "$LIB@@&t@@OBJS" |
             sed 's,\.[[^.]]* ,$U&,g;s,\.[[^.]]*$,$U&,'`
LTLIBOBJS=`echo "$LIB@@&t@@OBJS" |
           sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
AC_SUBST(LTLIBOBJS)
@end example

@sp 1

@c You no longer have to use this: @code{AC_OUTPUT} normalizes
@c @code{LIBOBJS} and @code{LTLIBOBJS} (hence it works with any version of
@c Automake and Libtool).  Just remove these lines (@command{autoupdate}
@c cannot handle this task, since this is not a macro).
@c 
もやはこれを使用する必要がありません.@code{AC_OUTPUT}は@code{LIBOBJS} 
と@code{LTLIBOBJS}を正規化します(そのため,あらゆるバージョンのAutomake
とLibtoolで動作します).この行を削除してください(これはマクロではないの
で,@command{autoupdate}でこの作業を行なうことは不可能です).

@c Note that @code{U} must not be used in your Makefiles.
@c 
@code{U}を@file{Makefile}で使用する必要はありません.


@node AC_FOO_IFELSE vs AC_TRY_FOO
@c @subsection @code{AC_FOO_IFELSE} vs.@: @code{AC_TRY_FOO}
@subsection @code{AC_FOO_IFELSE}対@code{AC_TRY_FOO}

@c Since Autoconf 2.50, internal codes uses @code{AC_PREPROC_IFELSE},
@c @code{AC_COMPILE_IFELSE}, @code{AC_LINK_IFELSE}, and
@c @code{AC_RUN_IFELSE} on one hand and @code{AC_LANG_SOURCES},
@c and @code{AC_LANG_PROGRAM} on the other hand instead of the deprecated
@c @code{AC_TRY_CPP}, @code{AC_TRY_COMPILE}, @code{AC_TRY_LINK}, and
@c @code{AC_TRY_RUN}.  The motivations where:
@c 
Autoconf 2.50以来,内部コードでは,一方では@code{AC_PREPROC_IFELSE},
@code{AC_COMPILE_IFELSE},@code{AC_LINK_IFELSE},そして
@code{AC_RUN_IFELSE}を使用し,もう一方では反対されている
@code{AC_TRY_CPP},@code{AC_TRY_COMPILE},@code{AC_TRY_LINK},そして
@code{AC_TRY_RUN}の代わりに@code{AC_LANG_SOURCES}と
@code{AC_LANG_PROGRAM}を使用しています.その動機は以下にあります.
@itemize @minus
@item
@c a more consistent interface: @code{AC_TRY_COMPILE} etc.@: were double
@c quoting their arguments;
@c 
より矛盾のないインターフェース.@code{AC_TRY_COMPILE}などは,その引数を
二重の引用符で囲みます.

@item
@c the combinatoric explosion is solved by decomposing on the one hand the
@c generation of sources, and on the other hand executing the program;
@c 
一方ではソースを生成し,もう一方ではプログラムを実行するように,組合せが
増加しても分解することで解決します.

@item
@c this scheme helps supporting more languages than plain C and C++.
@c 
この手法はプレーンのCとC++より多くの言語をサポートする助けとなります.
@end itemize

@c In addition to the change of syntax, the philosphy has changed too:
@c while emphasis was put on speed at the expense of accuracy, today's
@c Autoconf promotes accuracy of the testing framework at, ahem..., the
@c expense of speed.
@c 
構文の変更だけでなく,哲学的な変更もなされました.正確さの代償として速度
を用いたことを強調しておきますが,今日のAutoconfは,テスティングフレーム
ワークの正確さを進展させていて,う〜ん@dots{}速度の代償になっています.


@c As a perfect example of what is @emph{not} to be done, here is how to
@c find out whether a header file contains a particular declaration, such
@c as a typedef, a structure, a structure member, or a function.  Use
@c @code{AC_EGREP_HEADER} instead of running @code{grep} directly on the
@c header file; on some systems the symbol might be defined in another
@c header file that the file you are checking @samp{#include}s.
@c 
なされては@emph{いない}完全な例として,ヘッダファイルが,型,構造体,構
造体のメンバー,または関数といった特定の宣言を含んでいるかどうかを調べる
方法が以下にあります.ヘッダファイルで直接@code{grep}を実行する代わりに,
@code{AC_EGREP_HEADER}を使用してください.調査している@samp{#include} 以
外のヘッダファイルでシンボルを定義しているシステムもあるでしょう.

@c As a (bad) example, here is how you should not check for C preprocessor
@c symbols, either defined by header files or predefined by the C
@c preprocessor: using @code{AC_EGREP_CPP}:
@c 
(悪い)例として,シンボルが,ヘッダファイルで定義されているか,またはC プ
リプロセッサで定義されているかを,Cプリプロセッサを調査すべきではない理
由がは以下にあります.

@example
@group
AC_EGREP_CPP(yes,
[#ifdef _AIX
  yes
#endif
], is_aix=yes, is_aix=no)
@end group
@end example

@c The above example, properly written would (i) use
@c @code{AC_LANG_PROGRAM}, and (ii) run the compiler:
@c 
上記の例では,適切に書かれている(i)@code{AC_LANG_PROGRAM}を使用し,(ii)
コンパイラを実行すべきです.

@example
@group
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#if !defined _AIX
# error _AIX not defined
#endif
]])],
                   [is_aix=yes],
                   [is_aix=no])
@end group
@end example


@c ============================= Generating Test Suites with Autotest

@node Using Autotest
@c @chapter Generating Test Suites with Autotest
@chapter Autotestで一般的なテストスイートを生成する

@cindex Autotest

@display
@c @strong{N.B.: This section describes an experimental feature which will
@c be part of Autoconf in a forthcoming release.  Although we believe
@c Autotest is stabilizing, this documentation describes an interface which
@c might change in the future: do not depend upon Autotest without
@c subscribing to the Autoconf mailing lists.}
@c 
@strong{厳重注意:このセクションでは,この次のリリースのAutoconfの一部と
なっている,実験的な機能を記述しています.我々はAutotestが安定しているこ
とを信じていますが,このドキュメントでは将来変更される可能性があるインター
フェースを記述しています.Autoconfのメーリングリストを購読しないまま
Autotestに依存することはやめてください.}
@end display

@c It is paradoxical that portable projects depend on nonportable tools
@c to run their test suite.  Autoconf by itself is the paragon of this
@c problem: although it aims at perfectly portability, up to 2.13, its
@c test suite was using Deja@acronym{GNU}, a rich and complex testing
@c framework, but which is far from being standard on Unix systems.
@c Worse yet, it was likely to be missing on the most fragile platforms,
@c the very platforms that are most likely to torture Autoconf and
@c exhibit deficiencies.
@c 
移植性の高いプロジェクトで,テストスイートを実行するために移植性のないツー
ルに依存していることは,矛盾しています.Autoconf自身がこの問題の典型です.
2.13までは完全な移植性を目的としていましたが,そのテストスイートは
Deja@acronym{GNU}を使用していて,それは高品質で複雑なテストフレームワー
クですが,Unixシステムの標準からかけ離れていました.悪いことに,ほとんど
の壊れやすいプラットフォームが無いことがよくあり,そのプラットフォームが
Autoconfを苦しめ,欠陥を提示していることがほとんどでした.

@c To circumvent this problem many package maintainers have developed their
@c own testing framework, based on simple shell scripts whose sole output
@c are their exit status: the test succeeded, or failed.  In addition, most
@c of these tests share some common patterns, what results in lots of
@c duplicated code, tedious maintenance etc.
@c 
この問題を回避するために,パッケージ管理者の多くは,その出力が終了ステー
タスとなる,つまりテストが成功するまたは失敗するといった,単純なシェルス
クリプトをベースに,独自のテストフレームワークを開発してきました.さらに,
これらのテストのほとんどは,共通のパターン,重複している大量のコードの結
果,退屈な管理などを共有しています.

@c Following exactly the same reasoning that yielded to the inception of
@c Autoconf, Autotest provides a test suite generation frame work, based on
@c M4 macros, building a portable shell script.  The suite itself is
@c equipped with automatic logging and tracing facilities which greatly
@c diminish the interaction with bug reporters, and simple timing reports.
@c 
以下はAutoconfが生まれた理由と全く同じですが,Autotestは,M4マクロを基本
として移植性の高いシェルスクリプトを構築するテストスイートを生成するフレー
ムワークを提供しています.スイート自身は,バグの報告で中断することを限り
なく少なくし,自動的なログ生成と追跡機能を備えていて,単純なタイミングで
バグは報告されます.

@c Autoconf itself has been using Autotest for years, and we do attest that
@c it has considerably improved the strength of the test suite, and the
@c quality of bug reports.  Other projects are known to use some generation
@c of Autotest, such as Bison, Free Recode, Free Wdiff, @acronym{GNU} Tar, each of
@c them having different needs, what slowly polishes Autotest as a general
@c testing framework.
@c 
Autoconf自身はAutotestを何年も使用していて,テストスイートとバグの報告の
強さをかなり改善している@dfn{attest}を実行しています.Autotestの生成物を
使用していることが知られている,Bison,Free Recode,Free Wdiff,
@acronym{GNU} Tar といったそれ以外のプロジェクトでは,それぞれ異なるニー
ズがあり,一般的なテストフレームワークとしてのAutotestにのんびりと磨きを
かけていました.

@c Nonetheless, compared to Deja@acronym{GNU}, Autotest is inadequate for
@c interactive tool testing, which is probably its main limitation.
@c 
それにもかかわらず,Deja@acronym{GNU}と比較して,Autotestは対話的なテス
トツールとしては不十分で,それがおそらく主な制限事項となっています.

@menu
* Using an Autotest Test Suite::  Autotest and the user
* Writing testsuite.at::        Autotest macros
* testsuite Invocation::        Running @command{testsuite} scripts
* Making testsuite Scripts::    Using autom4te to create @command{testsuite}
@end menu

@node Using an Autotest Test Suite
@c @section Using an Autotest Test Suite
@section Autotestテストスイートを使用する

@menu
* testsuite Scripts::           The concepts of Autotest
* Autotest Logs::               Their contents
@end menu

@node testsuite Scripts
@c @subsection @command{testsuite} Scripts
@subsection @command{testsuite}スクリプト

@cindex @command{testsuite}

@c Generating testing or validation suites using Autotest is rather easy.
@c The whole validation suite is held in a file to be processed through
@c @command{autom4te}, itself using @acronym{GNU} M4 under the scene, to
@c produce a stand-alone Bourne shell script which then gets distributed.
@c Neither @command{autom4te} nor @acronym{GNU} M4 are not needed anymore at
@c the installer end.
@c 
Autotestを使用してテストスイートや評価スイートを生成することは簡単です.
評価スイート全体は,@command{autom4te}で処理されるファイルに保持されてい
て,それ自身は配布物から得られるスタンドアローンのBourneシェルスクリプト
を生成するために,@acronym{GNU} M4の環境下で使用されます.
@command{autom4te}も@acronym{GNU} M4もインストールしているエンドユーザは
不要です.

@cindex test group
@c Each test of the validation suite should be part of some test group.  A
@c @dfn{test group} is a sequence of interwoven tests that ought to be
@c executed together, usually because one test in the group creates data
@c files than a later test in the same group needs to read.  Complex test
@c groups make later debugging more tedious.  It is much better keeping
@c keep only a few tests per test group, and if you can put only one test
@c per test group, this is just ideal.
@c 
評価スイートのそれぞれのテストは,テストグループの一部にすべきです.
@dfn{テストグループ(test group)}は,通常はグループのテストの一つがデータ
ファイルを作成し,それ以降のテストで同じグループのテストがそれを読み込む
ために,お互いに実行される必要がある混合テストの,連続した手続きになって
います.テストグループごとの数個のテストのみを維持する方がより良く,テス
トグループごとに一つのテストのみを維持することが可能な場合,それは理想的
です.

@c For all but the simplest packages, some file such as @file{testsuite.at}
@c does not fully hold all test sources, as these are often easier to
@c maintain in separate files.  Each of these separate files holds a single
@c test group, or a sequence of test groups all addressing some common
@c functionality in the package.  In such cases, file @file{testsuite.at}
@c only initializes the whole validation suite, and sometimes do elementary
@c health checking, before listing include statements for all other test
@c files.  The special file @file{package.m4}, containing the
@c identification of the package, is automatically included if found.
@c 
最も単純なパッケージ以外のすべてのものに対して,@file{testsuite.at}のよ
うなファイルは,別々のファイルにした方が管理しやすいことも多いので,すべ
てのテストのソースを完全に保持しているわけではありません.これらの個別の
ファイルのそれぞれは,単一のテストグループや,パッケージの共通の機能をす
べて提示しているテストグループの連続したものを維持しています.そのような
場合は,ファイル@file{testsuite.at}は評価スイート全体の初期化のみを行な
い,他のすべてのテストファイルに対して含める文をリストアップする前に,要
素が健全かどうかを調査するときもあります.特殊なファイル
@file{package.m4}はパッケージの識別子を含んでいて,見つかった場合は自動
的にインクルードされます.

@c A convenient alternative consists in moving all the global issues
@c (local Autotest macros, elementary health checking, and @code{AT_INIT}
@c invocation) into the file @code{local.at}, and making
@c @file{testsuite.at} be a simple list of @code{m4_include} of sub test
@c suites.  In such case, generating the whole test suite or pieces of it
@c is only a matter of choosing the @command{autom4te} command line
@c arguments.
@c 
便利な代替品は,すべての大域的な呼び出しをファイル@code{local.at}に移動
し(ローカルなAutotestマクロは基本的な状態を調査し,@code{AT_INIT}を呼び
出します),@file{testsuite.at}をサブテストスイートを@code{m4_include}す
る単純なリストにすることです.そのような状況では,テストスイート全体また
は一部を生成すると,@command{autom4te}コマンドライン引数の選択が問題にな
ります.

@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.  One debugging directory is left for each test
@c group which failed, if any: such directories are named
@c @file{testsuite.dir/@var{nn}}, where @var{nn} is the sequence number of
@c the test group, and they include:
@c 
Autotestが生成する評価スクリプトは,慣習で@command{testsuite}から呼び出
されます.実行時には,@command{testsuite}はそれぞれのテストグループを順
番に実行し,テストごとにその特定のテストが成功したか失敗したかを告げる概
要を表示する一行を生成します.すべてのテストの終りに,数を集約して出力し
ます.デバッグディレクトリには,それぞれのテストのグループで失敗したもの
があれば,それが残ります.そのようなディレクトリは
@file{testsuite.dir/@var{nn}}と命名され,@var{nn}はテストグループの順番
になり,以下のものが含まれています.

@itemize @bullet
@c @item a debugging script named @file{run} which reruns the test in
@c @dfn{debug mode} (@pxref{testsuite Invocation}).  The automatic generation
@c of debugging scripts has the purpose of easing the chase for bugs.
@c 
@c @item all the files created with @code{AT_DATA}
@c 
@c @item a log of the run, named @file{testsuite.log}
@c 
@item
デバッグスクリプトは@file{run}と命名され,@dfn{デバッグモード(debug
mode)}でテストの結果を返します(@pxref{testsuite Invocation}).自動的に生
成されるデバッグスクリプトは,バグの調査を簡単にする目的があります.

@item
すべてのファイルは@code{AT_DATA}で生成されます.

@item
実行時のログは,@file{testsuite.log}と命名されます.
@end itemize

@c In the ideal situation, none of the tests fail, and consequently, no
@c debugging directory is left out of validation.
@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
                [package.m4] -->.
                                 \
subfile-1.at ->.  [local.at] ---->+
    ...         \                  \
subfile-i.at ---->-- testsuite.at -->-- autom4te* -->testsuite
    ...         /
subfile-n.at ->'
@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.dir]
@end example


@node Autotest Logs
@c @subsection Autotest Logs
@subsection Autotestのログ

@c When run, the test suite creates a log file named after itself, e.g., a
@c test suite named @command{testsuite} creates @file{testsuite.log}.  It
@c contains a lot of information, usually more than maintainers actually
@c need, but therefore most of the time it contains all that is needed:
@c 
実行時に,テストスイートはそれ自身の名前に@file{.log}が後置されているロ
グファイルを作成し,例えば,@command{testsuite}という名前のテストスイー
トは@file{testsuite.log}を作成します.それには多くの情報が含まれ,通常は
管理者が実際に必要とするもの以上ですが,そのためほとんどの場合で必要とさ
れるすべてのものが含まれます.

@table @asis
@c @item command line arguments
@item コマンドライン引数
@c akim s/to consist in/to consist of/
@c 
@c A very bad Unix habit which is unfortunately wide spread consists of
@c setting environment variables before the command, such as in
@c @samp{CC=my-home-grown-cc ./testsuite}.  This results in the test suite
@c not knowing this change, hence (i) it can't report it to you, and (ii)
@c it cannot preserve the value of @code{CC} for subsequent runs.
@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} の値を
保存することができません.Autoconfは全く同じ問題に直面していて,コマンド
ライン引数での変数定義を渡すようユーザに依頼することで解決しました.
Autotestでもこの規則が要求されますが,強制する意味はありません.ログには
ユーザが変更した変数の追跡が含まれています.

@c @item @file{ChangeLog} excerpts
@item @file{ChangeLog}の抜粋
@c The topmost lines of all the @file{ChangeLog}s found in the source
@c hierarchy.  This is especially useful when bugs are reported against
@c development versions of the package, since the version string does not
@c provide sufficient information to know the exact state of the sources
@c the user compiled.  Of course this relies on the use of a
@c @file{ChangeLog}.
@c 
ソースの階層で見つかるすべての@file{ChangeLog}の先頭の行です.バグがパッ
ケージの開発バージョンで報告されるとき,バージョン文字列はユーザがコンパ
イルしたソースの正確な状態を知るための情報としては十分ではないので,これ
は特に役に立ちます.もちろんこれは@file{ChangeLog}の使用方法に依存します.

@c @item build machine
@item ビルドマシン
@c Running a test suite in a cross-compile environment is not an easy task,
@c since it would mean having the test suite run on a machine @var{build},
@c while running programs on a machine @var{host}.  It is much simpler to
@c run both the test suite and the programs on @var{host}, but then, from
@c the point of view of the test suite, there remains a single environment,
@c @var{host} = @var{build}.  The log contains relevant information on the
@c state of the build machine, including some important environment
@c variables.
@c 
クロスコンパイル環境でテストスイートを実行するということは,テストスイー
トはマシン@var{build}で実行されますがプログラムはマシン@var{host}で実行
されるという意味があり,簡単な作業ではありません.テストスイートとプログ
ラムの両方を@var{host}で実行するのはより簡単ですが,テストスイートの観点
からすると,単一の環境変数@var{host} = @var{build}は残ります.ログにはビ
ルドマシンに関連する情報が含まれていて,それには重要な環境変数も含まれて
います.
@c FIXME: How about having an M4sh macro to say `hey, log the value
@c of `@dots{}'?  This would help both Autoconf and Autotest.

@c @item tested programs
@item テストされたプログラム
@c The absolute path and answers to @option{--version} of the tested
@c programs (see @ref{Writing testsuite.at}, @code{AT_TESTED}).
@c 
テストされたプログラムの絶対バスと@option{--version}の答えです
(@ref{Writing testsuite.at},@code{AT_TESTED}を参照してください).

@c @item configuration log
@item コンフィグレーションのログ
@c The contents of @file{config.log}, as created by @command{configure},
@c are appended.  It contains the configuration flags and a detailed report
@c on the configuration itself.
@c 
@command{configure}で生成される@file{config.log}の内容が後置されます.そ
れにはコンフィグレーションフラグとコンフィグレーション自身の詳細な報告が
含まれます.
@end table


@node Writing testsuite.at
@c @section Writing @file{testsuite.at}
@section @file{testsuite.at}を書く

@c The @file{testsuite.at} is a Bourne shell script making use of special
@c Autotest M4 macros.  It often contains a call to @code{AT_INIT} nears
@c its beginning followed by one call to @code{m4_include} per source file
@c for tests.  Each such included file, or the remainder of
@c @file{testsuite.at} if include files are not used, contain a sequence of
@c test groups.  Each test group begins with one call to @code{AT_SETUP},
@c it contains an arbitrary number of shell commands or calls to
@c @code{AT_CHECK}, and it completes with one call to @code{AT_CLEANUP}.
@c 
@file{testsuite.at}はBourneシェルスクリプトで,特殊なAutotest M4マクロを
使用して作成します.それは,最初の方で@code{AT_INIT}の呼び出しを含んでい
て,それにテストのためのソースファイルごとに@code{m4_include}の呼び出し
が続きます.それぞれのインクルードファイルや,インクルードファイルが使用
されていない場合は@file{testsuite.at}の残りは,テストグループの連続した
手続きが含まれています.それぞれのテストグループは@code{AT_SETUP}の呼び
出しで始まり,それは任意の数のシェルコマンドや@code{AT_CHECK}の呼び出し
が含まれていて,@code{AT_CLEANUP}の呼び出しで完結します.

@defmac AT_INIT (@ovar{name})
@atindex INIT
@c FIXME: Not clear, plus duplication of the information.
@c 
@c Initialize Autotest.  Giving a @var{name} to the test suite is
@c encouraged if your package includes several test suites.  In any case,
@c the test suite always displays the package name and version.  It also
@c inherits the package bug report address.
@c 
Autotestを初期化します.パッケージに複数のテストスイートを含める場合,テ
ストスイートに@var{name}を与えることが推奨されます.すべての状況で,テス
トスイートは常にパッケージ名とバージョンを表示します.それはパッケージの
バグを報告する(メール)アドレスも継承します.
@end defmac

@defmac AT_TESTED (@var{executables})
@atindex TESTED
@c Log the path and answer to @option{--version} of each program in
@c space-separated list @var{executables}.  Several invocations register
@c new executables, in other words, don't fear registering one program
@c several times.
@c 
それぞれのプログラムのパスと@option{--version}の答を,スペースで分離され
ているリスト@var{executables}にログをとります.複数回呼び出されると新し
い実行が登録され,言い替えると,一つのプログラムの複数回の登録を危惧する
必要はありません.
@end defmac

@c Autotest test suites rely on the @code{PATH} to find the tested program.
@c This saves from generating the absolute paths to the various tools, and
@c makes it possible to test installed programs.  Therefore, knowing what
@c programs are being exercised is crucial to understand some problems in
@c the test suite itself, or its occasional misuses.  It is a good idea to
@c also subscribe foreign programs you depend upon, to ease incompatibility
@c diagnostics.
@c 
Autotestテストスイートは,テストされるプログラムを見つける際に
@code{PATH}に依存します.これは様々なツールの絶対パスから生成されるもの
から保存され,インストールされているプログラムのテストを可能にします.そ
のため,動作しているプログラムを知ることは,テストスイート自身やその偶発
的な誤使用の問題を理解するために重要です.互換性の問題を簡単に診断するた
めに,依存している外部のプログラムを登録することも重要です.

@sp 1

@defmac AT_SETUP (@var{test-group-name})
@atindex SETUP
@c This macro starts a group of related tests, all to be executed in the
@c same subshell.  It accepts a single argument, which holds a few words
@c (no more than about 30 or 40 characters) quickly describing the purpose
@c of the test group being started.
@c 
このマクロは関連するテストのグループがすべて同じサブシェルで実行されるよ
うに開始します.それは,開始されるテストグループの目的を手短に記述した数
語の単語(30から40文字以下)を保持している,単一の引数を受け入れます.
@end defmac

@defmac AT_KEYWORDS (@var{keywords})
@atindex KEYWORDS
@c Associate the space-separated list of @var{keywords} to the enclosing
@c test group.  This makes it possible to run ``slices'' of the test suite.
@c For instance if some of your test groups exercise some @samp{foo}
@c feature, then using @samp{AT_KEYWORDS(foo)} lets you run
@c @samp{./testsuite -k foo} to run exclusively these test groups.  The
@c @var{title} of the test group is automatically recorded to
@c @code{AT_KEYWORDS}.
@c 
まとまっているテストグループに関連する,スペースで分離されている
@var{keywords}のリストです.これでテストスイートの``slices''を実行するこ
とが可能になります.例えばテストグループの@samp{foo}の機能を行使している
場合,@samp{AT_KEYWORDS(foo)}を使用することで,これらのテストグループを
排他的に実行するために@samp{./testsuite -k foo}を実行します.テストグルー
プの@var{title}は,@code{AT_KEYWORDS}に自動的に保存されます.

@c Several invocations within a test group accumulate new keywords.  In
@c other words, don't fear registering several times the same keyword in a
@c test group.
@c 
テストグループ内で複数回呼び出すことで新しいキーワードを累積します.言い
替えると,テストグループで同じキーワードを複数回登録することを危惧する必
要はありません.
@end defmac

@defmac AT_XFAIL_IF (@var{shell-condition})
@atindex XFAIL_IF
@c Determine whether the test is expected to fail because it is a known
@c bug (for unsupported features, you should skip the test).
@c @var{shell-condition} is a shell expression such as a @code{test}
@c command; you can instantiate this macro many times from within the
@c same test group, and one of the conditions will be enough to turn
@c the test into an expected failure.
@c 
テストが,既知のバグで期待されたように失敗するかどうかを決定します(サポー
トされていない機能に対してはテストを省略するべきです).
@var{shell-condition}は@code{test}コマンドのようなシェルの式です.同じテ
ストグループから,このマクロを何回でも利用することが可能で,テストが期待
した異常終了になるには,条件の一つで十分でしょう.
@end defmac

@defmac AT_CLEANUP
@atindex CLEANUP
@c End the current test group.
@c 
現在のテストグループを終了します.
@end defmac

@sp 1

@defmac AT_DATA (@var{file}, @var{contents})
@atindex DATA
@c Initialize an input data @var{file} with given @var{contents}.  Of
@c course, the @var{contents} have to be properly quoted between square
@c brackets to protect against included commas or spurious M4
@c expansion.  The contents ought to end with an end of line.
@c 
入力データの@var{file}を,与えられた@var{contents}で初期化します.もちろ
ん,カンマが含まれていることや,見せかけのM4の展開から保護するために,
@var{contents}は適切に角カッコで囲む必要があります.内容は行末(EOF)で終
える必要があります.
@end defmac

@defmac AT_CHECK (@var{commands}, @dvar{status, @samp{0}}, @dvar{stdout, @samp{}}, @dvar{stderr, @samp{}}, @ovar{run-if-fail}, @ovar{run-if-pass})
@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.  Otherwise, if this test
@c fails, run shell commands @var{run-if-fail} or, if this test passes, run shell
@c commands @var{run-if-pass}.
@c 
与えられたシェルコマンド@var{commands}を実行することでテストを実行します.
これらのコマンドは,期待される@var{stdout}と@var{stderr}の内容を生成しな
がら,通常の@var{status}で終えるべきです.@var{commands}が77のステータス
で終了する場合,テストグループ全体が省略されます.それ以外で,このテスト
が失敗する場合はシェルコマンド@var{run-if-fail}を実行し,このテストがパ
スした場合はシェルコマンド@var{run-if-pass}を実行します.

@c The @var{commands} @emph{must not} redirect the standard output, nor the
@c standard error.
@c 
@var{commands}を標準出力にも標準エラー出力にもリダイレクトしては@emph{い
けません}.

@c If @var{status}, or @var{stdout}, or @var{stderr} is @samp{ignore}, then
@c the corresponding value is not checked.
@c 
@var{status},または@var{stdout},または@var{stderr}が@samp{ignore}の場
合,対応する値は調査されません.

@c The special value @samp{expout} for @var{stdout} means the expected
@c output of the @var{commands} is the content of the file @file{expout}.
@c If @var{stdout} is @samp{stdout}, then the standard output of the
@c @var{commands} is available for further tests in the file @file{stdout}.
@c Similarly for @var{stderr} with @samp{expout} and @samp{stderr}.
@c 
@var{stdout}に対する特殊な値@samp{expout}は,@var{commands}の出力がファ
イル@file{expout}の内容であることを期待するという意味があります.
@var{stdout}が@samp{stdout}の場合,@var{commands}の標準出力はファイル
@file{stdout}のテスト以外でも利用可能です.@samp{expout}と@samp{stderr} 
を用いている@var{stderr}も同様です.
@end defmac


@node testsuite Invocation
@c @section Running @command{testsuite} Scripts
@section @command{testsuite}スクリプトの実行
@cindex @command{testsuite}

@c Autotest test suites support the following arguments:
@c 
Autotestテストスイートは以下の引数をサポートしています.

@table @option
@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, but it can also be useful to debug
@c the testsuite itself.
@c 
テストグループを実行した後でファイルを削除しません --- しかし,それらは
実行前には削除され,そのためこのオプションの使用は,複数のテストグループ
を実行するとき問題ありません.デバッグスクリプトを作成しません.ログは行
なわれません(おそらく存在している既存の完全なログファイルを保持するため
です).これはデバッグスクリプトに対してデフォルトですが,それはテストス
イート自身のデバッグでも役に立つはずです.

@item --trace
@itemx -x
@c Trigger shell tracing of the test groups.
@c 
テストグループのシェルの追跡を開始します.
@end table


@node Making testsuite Scripts
@c @section Making @command{testsuite} Scripts
@section @command{testsuite}スクリプトの作成

@c For putting Autotest into movement, you need some configuration and
@c Makefile machinery.  We recommend, at least if your package uses deep or
@c shallow hierarchies, that you use @file{tests/} as the name of the
@c directory holding all your tests and their @file{Makefile}.  Here is a
@c check list of things to do.
@c 
Autotestを動作に入れるため,コンフィグレーションと@file{Makefile}のから
くりで必要になるものもあります.少なくともパッケージで深いまたは浅い階層
を使用している場合,すべてのテストとその@file{Makefile}を格納するディレ
クトリの名前として,@file{tests/}を使用することを推奨します.行なうこと
の調査リストは以下のようになります.

@itemize @minus

@item
@cindex @file{package.m4}
@c Make sure to create the file @file{package.m4}, which defines the
@c identity of the package.  It must define @code{AT_PACKAGE_STRING}, the
@c full signature of the package, and @code{AT_PACKAGE_BUGREPORT}, the
@c address to which bug reports should be sent.  For sake of completeness,
@c we suggest that you also define @code{AT_PACKAGE_NAME},
@c @code{AT_PACKAGE_TARNAME}, and @code{AT_PACKAGE_VERSION}.
@c @xref{Initializing configure}, for a description of these variables.  We
@c suggest the following Makefile excerpt:
@c 
パッケージ固有の定義を行なうファイル@file{package.m4}を必ず作成してくだ
さい.それは,パッケージの完全な署名となる@code{AT_PACKAGE_STRING}と,バ
グレポートを送るアドレス@code{AT_PACKAGE_BUGREPORT}を定義する必要があり
ます.完全性の目的で,@code{AT_PACKAGE_NAME},@code{AT_PACKAGE_TARNAME},
そして@code{AT_PACKAGE_VERSION}を定義することも提案します.これらの変数
の記述は@xref{Initializing configure}.  我々は以下のようなMakefileの断片
を提案します.

@smallexample
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
        @{                                      \
          echo '# Signature of the current package.'; \
          echo 'm4_define([AT_PACKAGE_NAME],      [@@PACKAGE_NAME@@])'; \
          echo 'm4_define([AT_PACKAGE_TARNAME],   [@@PACKAGE_TARNAME@@])'; \
          echo 'm4_define([AT_PACKAGE_VERSION],   [@@PACKAGE_VERSION@@])'; \
          echo 'm4_define([AT_PACKAGE_STRING],    [@@PACKAGE_STRING@@])'; \
          echo 'm4_define([AT_PACKAGE_BUGREPORT], [@@PACKAGE_BUGREPORT@@])'; \
        @} >$(srcdir)/package.m4
@end smallexample

@noindent
@c Be sure to distribute @file{package.m4} and to put it into the source
@c hierarchy: the test suite ought to be shipped!
@c 
@file{package.m4}を配布していることと,それをソースの階層に書いているこ
とを確かめてください.テストスイートは配布する必要があります!

@item
@c Invoke @code{AC_CONFIG_TESTDIR}.
@c 
@code{AC_CONFIG_TESTDIR}の呼び出し.

@defmac AC_CONFIG_TESTDIR (@var{directory}, @dvar{test-path, @var{directory}})
@acindex{CONFIG_TESTDIR}
@c An Autotest test suite is to be configured in @var{directory}.  This
@c macro requires the instantiation of @file{@var{directory}/atconfig} from
@c @file{@var{directory}/atconfig.in}, and sets the default
@c @code{AUTOTEST_PATH} to @var{test-path} (@pxref{testsuite Invocation}).
@c 
Autotestテストスイートは,@var{directory}でコンフィグレーションされます.
このマクロは,@file{@var{directory}/atconfig.in}からの
@file{@var{directory}/atconfig}の実体を必要とし,デフォルトの
@code{AUTOTEST_PATH}を@var{test-path}に設定します(@pxref{testsuite
Invocation}).
@end defmac

@item
@c Still within @file{configure.ac}, as appropriate, ensure that some
@c @code{AC_CONFIG_FILES} command includes substitution for
@c @file{tests/atlocal}.
@c 
しかし,@file{configure.ac}に,@code{AC_CONFIG_FILES}コマンドが
@file{tests/atlocal}での代入を確実に含むよう,適切に@file{configure.ac} 
に書いてください.

@item
@c The @file{tests/Makefile.in} should be modified so the validation in
@c your package is triggered by @samp{make check}.  An example is provided
@c below.
@c 
@samp{make check}でパッケージの評価を開始するように,
@file{tests/Makefile.in}を修正すべきです.例は以下で提供しています.
@end itemize

@c With Automake, here is a minimal example about how to link @samp{make
@c check} with a validation suite.
@c 
Automakeを用いると,評価スイートで@samp{make check}をリンクする方法の最
小限の例は以下のようになります.

@example
EXTRA_DIST = testsuite.at testsuite
TESTSUITE = $(srcdir)/testsuite
check-local: atconfig atlocal $(TESTSUITE)
        $(SHELL) $(TESTSUITE)

AUTOTEST = $(AUTOM4TE) --language=autotest
$(TESTSUITE): $(srcdir)/testsuite.at
        $(AUTOTEST) -I $(srcdir) $@@.at -o $@@.tmp
        mv $@@.tmp $@@
@end example

@c You might want to list explicitly the dependencies, i.e., the list of
@c the files @file{testsuite.at} includes.
@c 
依存性,すなわち@file{testsuite.at}を含んでいるファイルのリストを,明示
的にリストアップしたいかもしれません.

@c With strict Autoconf, you might need to add lines inspired from the
@c following:
@c 
厳密にAutoconfを用いると,以下のような行を追加する必要があるかもしれま
せん.

@example
subdir = tests

atconfig: $(top_builddir)/config.status
        cd $(top_builddir) && \
           $(SHELL) ./config.status $(subdir)/$@@

atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
        cd $(top_builddir) && \
           $(SHELL) ./config.status $(subdir)/$@@
@end example

@noindent
@c and manage to have @file{atconfig.in} and @code{$(EXTRA_DIST)}
@c distributed.
@c 
そして,@file{atconfig.in}と@code{$(EXTRA_DIST)}を配布物されるように管理
する必要があるかもしれません.



@c =============================== Frequent Autoconf Questions, with answers

@node FAQ
@c @chapter Frequent Autoconf Questions, with answers
@chapter Autoconfのよくある質問と答え

@c Several questions about Autoconf come up occasionally.  Here some of them
@c are addressed.
@c 
Autoconfに関するいくつかの質問が,時々発生します.ここではそれらを扱いま
す.

@menu
* Distributing::                Distributing @command{configure} scripts
* Why GNU m4::                  Why not use the standard M4?
* Bootstrapping::               Autoconf and @acronym{GNU} M4 require each other?
* Why Not Imake::               Why @acronym{GNU} uses @command{configure} instead of Imake
* Defining Directories::        Passing @code{datadir} to program
* autom4te.cache::              What is it?  Can I remove it?
* Present But Cannot Be Compiled::  Compiler and Preprocessor Disagree
@end menu

@node Distributing
@c @section Distributing @command{configure} Scripts
@section @command{configure}スクリプトの配布

@display
@c What are the restrictions on distributing @command{configure}
@c scripts that Autoconf generates?  How does that affect my
@c programs that use them?
@c 
Autoconfが生成した@command{configure}スクリプトの配布の際,制限はありま
すか?それは,それを利用する私のプログラムに影響しますか?
@end display

@c There are no restrictions on how the configuration scripts that Autoconf
@c produces may be distributed or used.  In Autoconf version 1, they were
@c covered by the @acronym{GNU} General Public License.  We still encourage
@c software authors to distribute their work under terms like those of the
@c GPL, but doing so is not required to use Autoconf.
@c 
Autoconfが生成するコンフィギュレーションスクリプトを,配布したり使用した
りすることに制限はありません.Autoconfバージョン1では,@acronym{GNU}
General Public Licenseでカバーされていました.我々はソフトウェア著者に,
GPLのような規則で成果を配布することを奨励していましたが,Autoconfを使用
するためにそうすることは要求していません.

@c Of the other files that might be used with @command{configure},
@c @file{config.h.in} is under whatever copyright you use for your
@c @file{configure.ac}.  @file{config.sub} and @file{config.guess} have an
@c exception to the GPL when they are used with an Autoconf-generated
@c @command{configure} script, which permits you to distribute them under the
@c same terms as the rest of your package.  @file{install-sh} is from the X
@c Consortium and is not copyrighted.
@c 
@command{configure}と一緒に使用するファイルの@file{config.h.in}は, 
@file{configure.ac}に対して使用した著作権に従います.@file{config.sub} 
と@file{config.guess}は,Autoconfが生成する@command{configure}スクリプト
と一緒に使用するとき,GPLの例外とされ,他のパッケージと同じ規則で配布で
きます.@file{install-sh}はXコンソーシアムからのもので,著作権保護はあり
ません.

@node Why GNU m4
@c @section Why Require @acronym{GNU} M4?
@section なぜ@acronym{GNU} M4が必要なのですか?

@display
@c Why does Autoconf require @acronym{GNU} M4?
@c 
なぜAutoconfは@acronym{GNU} M4を必要とするのですか?
@end display

@c Many M4 implementations have hard-coded limitations on the size and
@c number of macros that Autoconf exceeds.  They also lack several
@c builtin macros that it would be difficult to get along without in a
@c sophisticated application like Autoconf, including:
@c 
M4の実装の多くは,マクロのサイズと数にハードコードされた制限があり,マク
ロ数はAutoconfの方が多くなっています.それらは,Autoconfのような洗練され
たアプリケーション無しでは難しい,以下を含むいくつかの組み込みマクロが足
りません.

@example
m4_builtin
m4_indir
m4_bpatsubst
__file__
__line__
@end example

@c Autoconf requires version 1.4 or above of @acronym{GNU} M4 because it uses
@c frozen state files.
@c 
固まった状態のファイルを使用するので,Autoconfでは@acronym{GNU} M4のバー
ジョン1.4以上を要求します.

@c Since only software maintainers need to use Autoconf, and since @acronym{GNU}
@c M4 is simple to configure and install, it seems reasonable to require
@c @acronym{GNU} M4 to be installed also.  Many maintainers of @acronym{GNU} and
@c other free software already have most of the @acronym{GNU} utilities
@c installed, since they prefer them.
@c 
ソフトウェア管理者はAutoconfを使用する必要があり,@acronym{GNU} M4はコン
フィグレーションとインストールが簡単なので,@acronym{GNU} M4のインストー
ルの要求も妥当だと思われます.@acronym{GNU}と他のフリーソフトウェアの管
理者の多くは,@acronym{GNU}ユーティリティが好きなので,既にインストール
しています.

@node Bootstrapping
@c @section How Can I Bootstrap?
@section ブートストラップはどうするのですか?

@display
@c If Autoconf requires @acronym{GNU} M4 and @acronym{GNU} M4 has an Autoconf
@c @command{configure} script, how do I bootstrap?  It seems like a chicken
@c and egg problem!
@c 
Autoconfが@acronym{GNU} M4を要求し,@acronym{GNU} M4にAutoconfの
@command{configure}スクリプトがある場合,どうやってブートストラップすれ
ばよいのでしょうか?鶏と卵の問題みたいですね!
@end display

@c This is a misunderstanding.  Although @acronym{GNU} M4 does come with a
@c @command{configure} script produced by Autoconf, Autoconf is not required
@c in order to run the script and install @acronym{GNU} M4.  Autoconf is only
@c required if you want to change the M4 @command{configure} script, which few
@c people have to do (mainly its maintainer).
@c 
これは誤解です.@acronym{GNU} M4は,Autoconfが生成した
@command{configure}スクリプトと共に配布されていますが,Autoconfは,スク
リプトを実行するために@acronym{GNU} M4をインストールすることを要求しませ
ん.AutoconfはM4の@command{configure}スクリプトを変更したいときだけ必要
で,(主に管理者以外) ほとんどの人が必要ありません.

@node Why Not Imake
@c @section Why Not Imake?
@section なぜImakeではないのですか?

@display
@c Why not use Imake instead of @command{configure} scripts?
@c 
なぜ@command{configure}スクリプトの代わりにImakeを使用しないのですか?
@end display

@c Several people have written addressing this question, so I include
@c adaptations of their explanations here.
@c 
何人かがこの質問を扱って書いてきたので,私はここでそれらの説明に脚色しま
す.

@c The following answer is based on one written by Richard Pixley:
@c 
以下の答えは,Richard Pixleyが書いたものに基づきます.

@quotation
@c Autoconf generated scripts frequently work on machines that it has
@c never been set up to handle before.  That is, it does a good job of
@c inferring a configuration for a new system.  Imake cannot do this.
@c 
Autoconfが生成したスクリプトは,処理するために一度もセットアップされたこ
とがないマシンでも動作することがよくあります.すなわち,新しいシステムに
対するコンフィグレーションの推測によってきちんと動作します.Imake ではこ
れは不可能です.

@c Imake uses a common database of host specific data.  For X11, this makes
@c sense because the distribution is made as a collection of tools, by one
@c central authority who has control over the database.
@c 
Imakeは,ホスト特定のデータの共通のデータベースを使用します.データベー
スを制御している一つの中央の権威によって,配布物はツールのコレクションと
して作成されるので,X11に対してはこれは意味があります.

@c @acronym{GNU} tools are not released this way.  Each @acronym{GNU} tool has a
@c maintainer; these maintainers are scattered across the world.  Using a
@c common database would be a maintenance nightmare.  Autoconf may appear
@c to be this kind of database, but in fact it is not.  Instead of listing
@c host dependencies, it lists program requirements.
@c 
@acronym{GNU}ツールはこの方法でリリースされません.それぞれの
@acronym{GNU}ツールには管理者がいて,管理者は世界中に散らばっています.
共通のデータベースを使用することは,管理するときの悪夢となります.
Autoconfはこの種のデータベースのように見えますが,実際はそうではありませ
ん.ホストの依存性をリストアップする代わりに,プログラムが要求することを
リストアップします.

@c If you view the @acronym{GNU} suite as a collection of native tools, then the
@c problems are similar.  But the @acronym{GNU} development tools can be
@c configured as cross tools in almost any host+target permutation.  All of
@c these configurations can be installed concurrently.  They can even be
@c configured to share host independent files across hosts.  Imake doesn't
@c address these issues.
@c 
@acronym{GNU}スイートをネイティブのツールのコレクションだと見なす場合,
問題は似ています.しかし,@acronym{GNU}開発ツールは,ほとんどのホスト+ 
ターゲットで,クロスツールとしてコンフィグレーション可能です.これらのコ
ンフィグレーションは,同時にインストールも可能です.それらは,ホスト間で
共有するホスト非依存ファイルもコンフィグレーション可能です.Imake はこれ
らの問題を扱いません.

@c Imake templates are a form of standardization.  The @acronym{GNU} coding
@c standards address the same issues without necessarily imposing the same
@c restrictions.
@c 
Imakeテンプレートは標準化の形式です.@acronym{GNU} coding standardsは,
同じ制限を必然的に課さずに,同じ問題を扱います.
@end quotation


@c Here is some further explanation, written by Per Bothner:
@c 
以下はPer Bothnerによって書かれたそれ以上の説明です.

@quotation
@c One of the advantages of Imake is that it easy to generate large
@c Makefiles using @code{cpp}'s @samp{#include} and macro mechanisms.
@c However, @code{cpp} is not programmable: it has limited conditional
@c facilities, and no looping.  And @code{cpp} cannot inspect its
@c environment.
@c 
Imakeの利点の一つは,@code{cpp}の@samp{#include}とマクロのメカニズムを使
用した,大きなMakefilesを簡単に生成することです.しかし,@code{cpp} はプ
ログラム不可能です.それは限定されたファシリティと,ループがないという制
限があります.そして@code{cpp}ではその環境を検査できません.

@c All of these problems are solved by using @code{sh} instead of
@c @code{cpp}.  The shell is fully programmable, has macro substitution,
@c can execute (or source) other shell scripts, and can inspect its
@c environment.
@c 
これらすべての問題は,@code{cpp}の代わりに@code{sh}を使用することで解決
されます.シェルは完全にプログラム可能で,マクロの代入や,他のシェルスク
リプトを実行する(あるいは他のもののソースとなる)ことが可能で,環境変数を
も検査可能です.
@end quotation


@c Paul Eggert elaborates more:
@c 
Paul Eggertはより多く詳述しています.

@quotation
@c With Autoconf, installers need not assume that Imake itself is already
@c installed and working well.  This may not seem like much of an advantage
@c to people who are accustomed to Imake.  But on many hosts Imake is not
@c installed or the default installation is not working well, and requiring
@c Imake to install a package hinders the acceptance of that package on
@c those hosts.  For example, the Imake template and configuration files
@c might not be installed properly on a host, or the Imake build procedure
@c might wrongly assume that all source files are in one big directory
@c tree, or the Imake configuration might assume one compiler whereas the
@c package or the installer needs to use another, or there might be a
@c version mismatch between the Imake expected by the package and the Imake
@c supported by the host.  These problems are much rarer with Autoconf,
@c where each package comes with its own independent configuration
@c processor.
@c 
Autoconfの場合,インストーラは,Imake自身がインストールされていて,うま
く動作していることを想定する必要がありません.これは,Imakeに慣れている
人にとっては,あまり利点とは思わないかもしれません.しかし,多くのホスト
でImakeはインストールされておらず,デフォルトのインストールではうまく動
作せず,Imakeにパッケージのインストールを要求すると,それらのホストでパッ
ケージの受け入れを妨げます.例えば,Imakeテンプレートとコンフィグレーショ
ンファイルは,正確にホストにインストールされていなかったり,Imakeのビル
ドの手続きは,全てのソースファイルが大きなディレクトリにあると誤解したり,
Imakeのコンフィグレーションは,一つのコンパイラを想定しているのに,パッ
ケージやインストーラが他のものを必要としたり,パッケージが期待するImake 
と,ホストがサポートするImakeのバージョンが異なったりする場合があります.
これらの問題は,Autoconfの方がはるかに稀で,それぞれのパッケージは,独自
の独立したコンフィグレーションプロセッサを持ってきます.

@c Also, Imake often suffers from unexpected interactions between
@c @command{make} and the installer's C preprocessor.  The fundamental problem
@c here is that the C preprocessor was designed to preprocess C programs,
@c not @file{Makefile}s.  This is much less of a problem with Autoconf,
@c which uses the general-purpose preprocessor M4, and where the
@c package's author (rather than the installer) does the preprocessing in a
@c standard way.
@c 
また,Imakeは,@code{make}とインストーラのCプリプロセッサの間の予期せぬ
干渉にもしばしば苦しみます.ここでの基本的な問題は,Cプリプロセッサが,
@file{Makefile}ではなく,Cプログラムのプリプロセスのためにデザインされて
いるということです.これは,Autoconfではほとんど問題にならず,それは汎用
のプリプロセッサM4を使用し,そこでは(インストールする人ではなく) パッケー
ジの著作者が標準的な方法でプリプロセスを行います.
@end quotation


@c Finally, Mark Eichin notes:
@c 
最後はMark Eichinのメモです.

@quotation
@c Imake isn't all that extensible, either.  In order to add new features to
@c Imake, you need to provide your own project template, and duplicate most
@c of the features of the existing one.  This means that for a sophisticated
@c project, using the vendor-provided Imake templates fails to provide any
@c leverage---since they don't cover anything that your own project needs
@c (unless it is an X11 program).
@c 
Imakeは,それほど拡張可能でもありません.Imakeに新しい特徴を加えるために,
独自のプロジェクトテンプレートを供給して,既存の特徴の大部分を繰り返す必
要があります.洗練されたプロジェクトに対してベンダーが供給したImakeテン
プレートを使用することは,効力の供給に失敗することを意味します.その理由
は,(たとえX11プログラムを使用していなくても) 独自のプロジェクトが必要と
するものを全くサポートしていないからです.

@c On the other side, though:
@c 
しかし,他の面では.

@c The one advantage that Imake has over @command{configure}:
@c @file{Imakefile}s tend to be much shorter (likewise, less redundant)
@c than @file{Makefile.in}s.  There is a fix to this, however---at least
@c for the Kerberos V5 tree, we've modified things to call in common
@c @file{post.in} and @file{pre.in} @file{Makefile} fragments for the
@c entire tree.  This means that a lot of common things don't have to be
@c duplicated, even though they normally are in @command{configure} setups.
@c 
一つの利点として,Imakeは@command{configure}以上のものを持っています. 
@file{Imakefile}は,@file{Makefile.in}より(同じか,かなり)短い傾向にあり
ます.これは修正されています.---しかし,少なくともKerberos V5のツリーに
対し,共通の@file{post.in}と@file{pre.in}を呼び出すため, 
@file{Makefile}の一部をツリー全体で修正しました.これは,多くの共通のも
のが,通常の@command{configure}セットアップにあるものさえ,繰りさえされ
ることを意味します.
@end quotation


@node Defining Directories
@c @section How Do I @code{#define} Installation Directories?
@section インストールディレクトリを@code{#define}で定義する方法は?

@display
@c My program needs library files, installed in @code{datadir} and
@c similar.  If I use
@c 
プログラムは,@code{datadir}やそれに似た場所にインストールされているライ
ブラリファイルが必要です.以下を使用した場合です.

@example
AC_DEFINE_UNQUOTED([DATADIR], [$datadir],
                   [Define to the read-only architecture-independent
                    data directory.])
@end example

@noindent
@c I get
@c 
以下のようになりました.

@example
#define DATADIR "$@{prefix@}/share"
@end example
@end display

@c As already explained, this behavior is on purpose, mandated by the
@c @acronym{GNU} Coding Standards, see @ref{Installation Directory
@c Variables}.  There are several means to achieve a similar goal:
@c 
既に説明しているので,この動作は目的通りで,@acronym{GNU} Coding
Standardsでも強制されています.@ref{Installation Directory Variables} を
参照してください.同様の目的を達成するため,いくつかの手段があります.

@itemize @minus
@item
@c Do not use @code{AC_DEFINE} but use your @file{Makefile} to pass the
@c actual value of @code{datadir} via compilation flags, see
@c @ref{Installation Directory Variables}, for the details.
@c 
@code{AC_DEFINE}を使用せず,コンパイルフラグで@code{datadir}の実際の値を
渡す@file{Makefile}を使用してください.詳細は,@ref{Installation
Directory Variables}を参照してください.

@item
@c This solution can be simplified when compiling a program: you may either
@c extend the @code{CPPFLAGS}:
@c 
プログラムのコンパイル時では,この解決方法は単純になります.
@code{CPPFLAGS}を拡張してもかまいません.

@example
CPPFLAGS = -DDATADIR=\"$(datadir)\" @@CPPFLAGS@@
@end example

@noindent
@c or create a dedicated header file:
@c 
または,そのためのヘッダファイルを作成します.

@example
DISTCLEANFILES = datadir.h
datadir.h: Makefile
        echo '#define DATADIR "$(datadir)"' >$@@
@end example

@item
@c Use @code{AC_DEFINE} but have @command{configure} compute the literal
@c value of @code{datadir} and others.  Many people have wrapped macros to
@c automate this task.  For instance, the macro @code{AC_DEFINE_DIR} from
@c the @href{http://www.gnu.org/software/ac-archive/, Autoconf Macro
@c Archive}.
@c 
@code{AC_DEFINE}を使用しますが,@command{configure}に@code{datadir}とそ
の他のリテラル値を計算させます.多くの人々は,ラッパーマクロでこの作業を
自動的に実行させています.例えば,
@href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive} 
のマクロ@code{AC_DEFINE_DIR}です.

@c This solution does not conform to the @acronym{GNU} Coding Standards.
@c 
この解決方法は,@acronym{GNU} Coding Standardsに準拠していません.

@item
@c Note that all the previous solutions hard wire the absolute path to
@c these directories in the executables, which is not a good property.  You
@c may try to compute the paths relatively to @code{prefix}, and try to
@c find @code{prefix} at runtime, this way your package is relocatable.
@c Some macros are already available to address this issue: see
@c @code{adl_COMPUTE_RELATIVE_PATHS} and
@c @code{adl_COMPUTE_STANDARD_RELATIVE_PATHS} on the
@c @href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive}.
@c 
これまでのすべての解決方法は,これらのディレクトリの絶対パスが,実行形式
に強く結び付いていて,あまり良くないことに注意してください.
@code{prefix}からの相対パスを計算し,実行時に@code{prefix}を見つけてもよ
く,こうするとパッケージが移動可能になります.この問題を解決するために既
に利用可能なマクロもあります.
@href{http://www.gnu.org/software/ac-archive/, Autoconf Macro Archive} 
の@code{adl_COMPUTE_RELATIVE_PATHS}と
@code{adl_COMPUTE_STANDARD_RELATIVE_PATHS}を参照してください.
@end itemize


@node autom4te.cache
@c @section What is @file{autom4te.cache}?
@section @file{autom4te.cache}はなんですか?

@display
@c What is this directory @file{autom4te.cache}?  Can I safely remove it?
@c 
このディレクトリ@file{autom4te.cache}は何ですか?削除しても大丈夫ですか?
@end display

@c In the @acronym{GNU} Build System, @file{configure.ac} plays a central
@c role and is read by many tools: @command{autoconf} to create
@c @file{configure}, @command{autoheader} to create @file{config.h.in},
@c @command{automake} to create @file{Makefile.in}, @command{autoscan} to
@c check the completeness of @file{configure.ac}, @command{autoreconf} to
@c check the @acronym{GNU} Build System components that are used.  To
@c ``read @file{configure.ac}'' actually means to compile it with M4,
@c which can be a very long process for complex @file{configure.ac}.
@c 
@acronym{GNU}ビルドシステムでは,@file{configure.ac}が中心的な役割を果た
し,多くのツールから読み込まれます.@command{autoconf}は@file{configure}
を作成するため,@command{autoheader}は@file{config.h.in}を作成するため,
@command{automake}は@file{Makefile.in}を作成するため,@command{autoscan}
は@file{configure.ac}が完全であるかを調査するため,@command{autoreconf} 
はそれらを利用する@acronym{GNU}ビルドシステムの構成物を調査するために読
み込みます.``@file{configure.ac}を読み込む''本当の意味は,それをM4 でコ
ンパイルするということで,複雑な@file{configure.ac}では,それは非常に長
い処理になり得ます.

@c This is why all these tools, instead of running directly M4, invoke
@c @command{autom4te} (@pxref{autom4te Invocation}) which, while answering to
@c a specific demand, stores additional information in
@c @file{autom4te.cache} for future runs.  For instance, if you run
@c @command{autoconf}, behind the scenes, @command{autom4te} will also
@c store information for the other tools, so that when you invoke
@c @command{autoheader} or @command{automake} etc., re-processing
@c @file{configure.ac} is not needed.  The speed up is frequently of 30,
@c and is increasing with the size of @file{configure.ac}.
@c 
これが,直接M4を実行する代わりに,これらすべてのツールが
@command{autom4te} (@pxref{autom4te Invocation})を呼び出す理由で,特別な
要求に答えている間,将来実行するために@file{autom4te.cache}に追加情報を
保存しています.例えば,@command{autoconf}を実行する場合,その影では
@command{autoheader}や@command{automake}などを呼び出すとき,
@file{configure.ac}を再び処理する必要が無いように,@command{autom4te} は
それ以外のツールのための情報を保存しています.速度の向上は30倍ぐらいで,
@file{configure.ac}の大きさにより更に大きくなります.

@c But it is and remains being simply a cache: you can safely remove it.
@c 
しかし,それは単純なキャッシュです.削除しても問題ありません.

@sp 1

@display
@c Can I permanently get rid of it?
@c 
永久に削除することは可能ですか?
@end display

@c The creation of this cache can be disabled from
@c @file{~/.autom4te.cfg}, see @ref{Customizing autom4te}, for more
@c details.  You should be aware that disabling the cache slows down the
@c Autoconf test suite by 40%.  The more @acronym{GNU} Build System
@c components are used, the more the cache is useful; for instance
@c running @samp{autoreconf -f} on the Coreutils is twice slower without
@c the cache @emph{although @option{--force} implies that the cache is
@c not fully exploited}, and eight times slower than without
@c @option{--force}.
@c 
このキャッシュの生成は,@file{~/.autom4te.cfg}で利用不可能にすることが可
能で,詳細は@ref{Customizing autom4te}を参照してください.キャッシュを利
用不可能にするとAutoconfのテストスイートが40%遅くなることを覚えておいて
ください.それ以外の@acronym{GNU}ビルドシステムの構成物を使用している場
合,キャッシュはより役に立ちます.例えば,Coreutilsで@samp{autoreconf
-f}を実行すると,@emph{たとえ@option{--force}を暗黙に指定していてもキャッ
シュを完全に利用することができないので}キャッシュが無ければ二倍遅くなり,
@option{--force}がなければ八倍遅くなります.


@node Present But Cannot Be Compiled
@c @section Header Present But Cannot Be Compiled
@section ヘッダが存在するのにコンパイルされません

@c The most important guideline to bear in mind when checking for
@c features is to mimic as much as possible the intended use.
@c Unfortunately, old versions of @code{AC_CHECK_HEADER} and
@c @code{AC_CHECK_HEADERS} failed to follow this idea, and called
@c the preprocessor, instead of the compiler, to check for headers.  As a
@c result, incompatibilities between headers went unnoticed during
@c configuration, and maintainers finally had to deal with this issue
@c elsewhere.
@c 
機能の調査時に覚えておくべき最も重要なガイドラインは,使いたいものをでき
るだけ真似てみるということです.残念ながら,古いバージョンの
@code{AC_CHECK_HEADER}と@code{AC_CHECK_HEADERS}はこの考えに従うと失敗し,
そして,ヘッダの調査のためコンパイラの代わりにプリプロセッサを呼び出しま
す.結果として,ヘッダ間での非互換性はコンフィグレーション時に注目されず,
管理者は結局,この問題を別の場所で処理する必要があります.

@c As of Autoconf 2.56 both checks are performed, and @code{configure}
@c complains loudly if the compiler and the preprocessor do not agree.
@c For the time being the result used is that of the preprocessor, to give
@c maintainers time to adjust their @file{configure.ac}, but in the near
@c future, only the compiler will be considered.
@c 
Autoconf 2.56では両方の調査を実行するので,コンパイラとプリプロセッサが
受け入れない場合,@code{configure}派手に文句を言います.プリプロセッサの
結果を利用するときは,@file{configure.ac}を修正する時間が管理者に与えら
れます.しかし,将来はコンパイラだけ考慮されるでしょう.

@c Consider the following example:
@c 
以下の例を考えて下さい.

@example
$ @kbd{cat number.h}
typedef int number;
$ @kbd{cat pi.h}
const number pi = 3;
$ @kbd{cat configure.ac}
AC_INIT
AC_CHECK_HEADERS(pi.h)
$ @kbd{autoconf -Wall}
$ @kbd{./configure}
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking how to run the C preprocessor... gcc -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking pi.h usability... no
checking pi.h presence... yes
configure: WARNING: pi.h: present but cannot be compiled
configure: WARNING: pi.h: check for missing prerequisite headers?
configure: WARNING: pi.h: proceeding with the preprocessor's result
configure: WARNING:     ## ------------------------------------ ##
configure: WARNING:     ## Report this to bug-autoconf@@gnu.org. ##
configure: WARNING:     ## ------------------------------------ ##
checking for pi.h... yes
@end example

@noindent
@c The proper way the handle this case is using the fourth argument
@c (@pxref{Generic Headers}):
@c 
この状況での正しい方法は,四番目の引数を使用することです(@pxref{Generic
Headers}).

@example
$ @kbd{cat configure.ac}
AC_INIT
AC_CHECK_HEADERS(number.h pi.h,,,
[[#if HAVE_NUMBER_H
# include <number.h>
#endif
]])
$ @kbd{autoconf -Wall}
$ @kbd{./configure}
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for number.h... yes
checking for pi.h... yes
@end example

@c See @ref{Particular Headers}, for a list of headers with their
@c prerequisite.
@c 
必要条件となるヘッダのリストは@ref{Particular Headers}.

@c ===================================================== History of Autoconf.

@node History
@c @chapter History of Autoconf
@chapter Autoconfの歴史

@c You may be wondering, Why was Autoconf originally written?  How did it
@c get into its present form?  (Why does it look like gorilla spit?)  If
@c you're not wondering, then this chapter contains no information useful
@c to you, and you might as well skip it.  If you @emph{are} wondering,
@c then let there be light@enddots{}
@c 
以下のことを不思議に思うかもしれません.なぜAutoconfは元々書かれたのです
か?どのようにして現在の形式になったのですか?(なぜそれはゴリラの唾によ
く似ているのですか?)不思議に思っていない場合,この章は有用な情報を含ん
でいないので,飛ばした方が良いでしょう.不思議に思って@emph{いる} 場合,
軽くながしてください@enddots{}

@menu
* Genesis::                     Prehistory and naming of @command{configure}
* Exodus::                      The plagues of M4 and Perl
* Leviticus::                   The priestly code of portability arrives
* Numbers::                     Growth and contributors
* Deuteronomy::                 Approaching the promises of easy configuration
@end menu

@node Genesis
@section Genesis

@c In June 1991 I was maintaining many of the @acronym{GNU} utilities for the
@c Free Software Foundation.  As they were ported to more platforms and
@c more programs were added, the number of @option{-D} options that users
@c had to select in the @file{Makefile} (around 20) became burdensome.
@c Especially for me---I had to test each new release on a bunch of
@c different systems.  So I wrote a little shell script to guess some of
@c the correct settings for the fileutils package, and released it as part
@c of fileutils 2.0.  That @command{configure} script worked well enough that
@c the next month I adapted it (by hand) to create similar @command{configure}
@c scripts for several other @acronym{GNU} utilities packages.  Brian Berliner
@c also adapted one of my scripts for his @acronym{CVS} revision control system.
@c 
1991年6月,私はFree Software Foundationの@acronym{GNU}ユーティリティの多
くを保守していました.それらは,より多くのプラットホームに移植され,より
多くのプログラムが追加されたので,ユーザは,@file{Makefile}で多くの 
@samp{-D}オプション(およそ20)を選択する必要があり厄介になりました.特に
私がそうでした---私は異なるシステムでそれぞれの新しいリリースをテストす
る必要がありました.そして,私はfileutilsパッケージに対する正しい設定を
見つけるため小さなシェルスクリプトを書き,fileutils 2.0の一部としてリリー
スしました.その@command{configure}は,翌月,いくつかの他の@acronym{GNU} 
ユーティリティパッケージに対する@command{configure} スクリプトを作成する
ため,(手作業で)改造するとうまく動作しました.Brian Berlinerも,私のスク
リプトを,@acronym{CVS}リビジョンコントロールシステム用に改造しました.

@c Later that summer, I learned that Richard Stallman and Richard Pixley
@c were developing similar scripts to use in the @acronym{GNU} compiler tools;
@c so I adapted my @command{configure} scripts to support their evolving
@c interface: using the file name @file{Makefile.in} as the templates;
@c adding @samp{+srcdir}, the first option (of many); and creating
@c @file{config.status} files.
@c 
その夏の後,私はRichard StallmanとRichard Pixleyが,@acronym{GNU}コンパ
イラツールで使用する,類似のスクリプトを開発していたことを知りました.そ
れで私は,@command{configure}スクリプトが発展するインタフェースをサポー
トするように改造しました.テンプレートとして,@file{Makefile.in}という名
前のファイルを使用し,(たくさんの中から)最初のオプション@samp{+srcdir}を
追加し, @file{config.status}ファイルを作成しました.

@node Exodus
@section Exodus

@c As I got feedback from users, I incorporated many improvements, using
@c Emacs to search and replace, cut and paste, similar changes in each of
@c the scripts.  As I adapted more @acronym{GNU} utilities packages to use
@c @command{configure} scripts, updating them all by hand became impractical.
@c Rich Murphey, the maintainer of the @acronym{GNU} graphics utilities, sent me
@c mail saying that the @command{configure} scripts were great, and asking if
@c I had a tool for generating them that I could send him.  No, I thought,
@c but I should!  So I started to work out how to generate them.  And the
@c journey from the slavery of hand-written @command{configure} scripts to the
@c abundance and ease of Autoconf began.
@c 
ユーザからのフィードバックを得るにつれ,私は,検索と置換,カットアンドペー
スト,それぞれのスクリプトの良く似た変更でEmacsを使用し,多くの改良点を
組み入れました.私が,@acronym{GNU}ユーティリティパッケージに, 
@command{configure}スクリプトを使用するため改造するにつれ,手作業での更
新は,現実的なものではなくなりました.@acronym{GNU}グラフィックユーティ
リティの管理者Rich Murpheyは,@command{configure}スクリプトは素晴らしい
というメールを送ってくれ,それらを生成するツールを持っているなら送って欲
しいという依頼がありました.持ってはいませんでしたが,そうするべきだと思
いました!それで,私はそれらを生成する仕事を始めました.手書きの
@command{configure}スクリプトの奴隷から,Autoconfで簡単に始める裕福で簡
単な旅が始まりました.

@c Cygnus @command{configure}, which was being developed at around that time,
@c is table driven; it is meant to deal mainly with a discrete number of
@c system types with a small number of mainly unguessable features (such as
@c details of the object file format).  The automatic configuration system
@c that Brian Fox had developed for Bash takes a similar approach.  For
@c general use, it seems to me a hopeless cause to try to maintain an
@c up-to-date database of which features each variant of each operating
@c system has.  It's easier and more reliable to check for most features on
@c the fly---especially on hybrid systems that people have hacked on
@c locally or that have patches from vendors installed.
@c 
Cygnus @command{configure}は,そのころには開発されていて,表を基に動作し
ていました.それは,主に推測しにくい(オブジェクトファイルのフォーマット
の詳細のような)特徴を,小さな数字を使用して,システムタイプを不連続な数
字で,扱う手法を主に用いていました.Brian Foxが,Bashのために開発してい
た自動的なコンフィグレーションシステムは,類似のアプローチをとっています.
一般的に使用するため,それぞれのオペレーティングシステムが持つそれぞれ異
なる特徴の最新のデータベースを管理しようとすることは,望みがないように思
われました.その場その場でほとんどの機能を調査するため,より容易でより信
頼性が高いものが必要です --- 特に,人々がローカルでハックしたり,ベンダー
がインストールしたパッチがある,ハイブリッドなシステムではそうなります.

@c I considered using an architecture similar to that of Cygnus
@c @command{configure}, where there is a single @command{configure} script that
@c reads pieces of @file{configure.in} when run.  But I didn't want to have
@c to distribute all of the feature tests with every package, so I settled
@c on having a different @command{configure} made from each
@c @file{configure.in} by a preprocessor.  That approach also offered more
@c control and flexibility.
@c 
私は Cygnus @command{configure}に類似のアーキテクチャを使おうと考え,そ
れは実行時に@file{configure.in}の一部を読み込む一つの 
@command{configure}スクリプトです.しかし,全てのパッケージで全ての特徴
を配布する必要は望まなかったので,プロセッサーによってそれぞれの
@file{configure.in}から異なる@command{configure}を作成する処理にしました.
そのアプローチは,多くの制御と柔軟性をもたらしました.

@c I looked briefly into using the Metaconfig package, by Larry Wall,
@c Harlan Stenn, and Raphael Manfredi, but I decided not to for several
@c reasons.  The @command{Configure} scripts it produces are interactive,
@c which I find quite inconvenient; I didn't like the ways it checked for
@c some features (such as library functions); I didn't know that it was
@c still being maintained, and the @command{Configure} scripts I had
@c seen didn't work on many modern systems (such as System V R4 and NeXT);
@c it wasn't very flexible in what it could do in response to a feature's
@c presence or absence; I found it confusing to learn; and it was too big
@c and complex for my needs (I didn't realize then how much Autoconf would
@c eventually have to grow).
@c 
私は,Larry Wall,Harlan Stennと,Raphael Manfrediによる,Metaconfigを使
用してみようとしましたが,いくつかの理由でやめました.それが生成する
@command{configure}スクリプトは対話的で,それが非常に不都合だと分かりま
した.私は,それが行う(ライブラリ関数のような)特徴の調査方法が,好きであ
りませんでした.さらに,いまだ管理されているかどうか分かりませんでした.
@command{configure}スクリプトは,(System V R4とNeXTのような)近代的なシス
テムでは動作しないように思えました.特徴の有無の反応で,できることがあま
り柔軟ではありませんでした.学ぶことが難しいと思いました.そして,必要以
上にあまりに大きく複雑でした(私は,そのとき,Autoconfが結局どれくらい成
長するのか,理解していませんでした).

@c I considered using Perl to generate my style of @command{configure}
@c scripts, but decided that M4 was better suited to the job of simple
@c textual substitutions: it gets in the way less, because output is
@c implicit.  Plus, everyone already has it.  (Initially I didn't rely on
@c the @acronym{GNU} extensions to M4.)  Also, some of my friends at the
@c University of Maryland had recently been putting M4 front ends on
@c several programs, including @code{tvtwm}, and I was interested in trying
@c out a new language.
@c 
私は,@command{configure}スクリプトの私のスタイルを生成するため,Perl を
使用することを考えましたが,簡単なテキスト代入の仕事により適しているM4に
決めました.出力が暗黙で決まっているので,より小さい手法になると思いまし
た.さらに,みんなは既にそれを所有しています.(最初は,私は@acronym{GNU}
が拡張したM4に依存しませんでした.)また,Maryland大学の私の友達は最近,
M4を@code{tvtwm}を含むいくつかのプログラムのフロントエンドとして位置付け
ていて,私は新しい言語への挑戦に興味が湧きました.

@node Leviticus
@section Leviticus

@c Since my @command{configure} scripts determine the system's capabilities
@c automatically, with no interactive user intervention, I decided to call
@c the program that generates them Autoconfig.  But with a version number
@c tacked on, that name would be too long for old @sc{unix} file systems,
@c so I shortened it to Autoconf.
@c 
私の@command{configure}スクリプトは,ユーザの対話的な干渉無しでシステム
の能力を自動的に決定するので,それを生成するプログラムをAutoconfigと呼ぶ
ことに決定しました.しかし,バージョンナンバーを付けると,@sc{unix}ファ
イルシステムとしてはあまりに長い名前なので,短くしてAutoconfとしました.

@c In the fall of 1991 I called together a group of fellow questers after
@c the Holy Grail of portability (er, that is, alpha testers) to give me
@c feedback as I encapsulated pieces of my handwritten scripts in M4 macros
@c and continued to add features and improve the techniques used in the
@c checks.  Prominent among the testers were Fran@,cois Pinard, who came up
@c with the idea of making an Autoconf shell script to run M4
@c and check for unresolved macro calls; Richard Pixley, who suggested
@c running the compiler instead of searching the file system to find
@c include files and symbols, for more accurate results; Karl Berry, who
@c got Autoconf to configure @TeX{} and added the macro index to the
@c documentation; and Ian Lance Taylor, who added support for creating a C
@c header file as an alternative to putting @option{-D} options in a
@c @file{Makefile}, so he could use Autoconf for his @acronym{UUCP} package.
@c The alpha testers cheerfully adjusted their files again and again as the
@c names and calling conventions of the Autoconf macros changed from
@c release to release.  They all contributed many specific checks, great
@c ideas, and bug fixes.
@c 
1991年秋,私は,M4マクロの手書きのスクリプトの部品をカプセル化し,調査時
に使用する特徴と技術の改善を加えることを続けるにつれて,フィードバックし
てもらうため,移植性の聖杯にちなんだ探求者たちのグループ(つまり,アルファ
テスター)を呼びました.テスターの間で著明な人は,以下の通りです.M4を実
行し,未解決のマクロの呼び出しの調査するAautoconfシェルスクリプトを作成
するアイディアをもたらしたFran@,{c}ois Pinard,インクルードファイルやシ
ンボルを探すためファイルシステムを探す代わりに,より正確な結果を求るため
コンパイラの実行を提案したRichard Pixley.Autoconfに,@TeX{}コンフィグレー
ションを与え,ドキュメントにマクロインデクッスを加えたKarl Berry.そして,
@samp{-D}オプションを@file{Makefile}に書き込む代わりに,Cヘッダファイル
を作成するサポートを加え,@acronym{UUCP}パッケージでAutoconfが使えるよう
にしたIan Taylor.アルファテスターは,リリースごとに変化するAutoconfマク
ロの名前と呼び出し方法に対して,何度も何度もファイルを機嫌良く調整してく
れました.彼らは皆,多くの特定の調査,偉大なアイディア,そしてバグフィク
スを提供してくれました.

@node Numbers
@section Numbers

@c In July 1992, after months of alpha testing, I released Autoconf 1.0,
@c and converted many @acronym{GNU} packages to use it.  I was surprised by how
@c positive the reaction to it was.  More people started using it than I
@c could keep track of, including people working on software that wasn't
@c part of the @acronym{GNU} Project (such as TCL, FSP, and Kerberos V5).
@c Autoconf continued to improve rapidly, as many people using the
@c @command{configure} scripts reported problems they encountered.
@c 
1992年7月,何カ月ものアルファテストの後で,私は Autoconf 1.0をリリースし,
それを使用して多くの@acronym{GNU}パッケージを改造しました.私は,それら
に対するあまりに肯定的な反応に驚きました.私が追跡記録可能な人以上の多く
の人々がそれを使用し始め,それには,@acronym{GNU}プロジェクトの一部では
ない(TCL,FSP とKerberos V5のような)ソフトウェアで仕事をしている人も含ま
れています.Autoconfは,@command{configure}を使用している多くの人が遭遇
した問題を報告してくれるので,急速に改善され続けました.

@c Autoconf turned out to be a good torture test for M4 implementations.
@c @sc{unix} M4 started to dump core because of the length of the
@c macros that Autoconf defined, and several bugs showed up in @acronym{GNU}
@c M4 as well.  Eventually, we realized that we needed to use some
@c features that only @acronym{GNU} M4 has.  4.3@acronym{BSD} M4, in
@c particular, has an impoverished set of builtin macros; the System V
@c version is better, but still doesn't provide everything we need.
@c 
Autoconfは,M4実行の良い耐久テストだということが分かりました.@sc{unix}
M4は,Autoconfが定義するマクロの長さでコアダンプを吐き始め,いくつかのバ
グが@acronym{GNU} M4でも同様に明らかになりました.結局,私達は
@acronym{GNU} M4のみが持つ機能が必要だと認識しました.4.3@acronym{BSD}
M4は,特に組み込みマクロの設定が足りず,System Vバージョンはましですが,
私達が必要とするもの全てをいまだに供給してくれません.

@c More development occurred as people put Autoconf under more stresses
@c (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
@c david zuhn contributed C++ support.  Fran@,cois Pinard made it diagnose
@c invalid arguments.  Jim Blandy bravely coerced it into configuring
@c @acronym{GNU} Emacs, laying the groundwork for several later improvements.
@c Roland McGrath got it to configure the @acronym{GNU} C Library, wrote the
@c @command{autoheader} script to automate the creation of C header file
@c templates, and added a @option{--verbose} option to @command{configure}.
@c Noah Friedman added the @option{--autoconf-dir} option and
@c @code{AC_MACRODIR} environment variable.  (He also coined the term
@c @dfn{autoconfiscate} to mean ``adapt a software package to use
@c Autoconf''.)  Roland and Noah improved the quoting protection in
@c @code{AC_DEFINE} and fixed many bugs, especially when I got sick of
@c dealing with portability problems from February through June, 1993.
@c 
人々が,Autoconfをより強い圧力の下(そして,私が予想していなかった使用方
法の下)で利用するにつれ,更なる開発事項が生じました.Karl BerryはX11 に
対する調査を加えました.david zuhnはC++サポートを寄付してくれました.
Fran@,cois Pinardは,無効な引数を診断させるようにしました.Jim Blandy は
勇敢にも,後の改良のためのワークグランドとなるよう,@acronym{GNU} Emacs
のコンフィグレーションに強要しました.Roland McGrathは,@acronym{GNU} C
ライブラリのコンフィグレーションに使用し,Cヘッダテンプレートファイルを
自動的に作成する,@command{autoheader}スクリプトを書き,
@command{configure}に,@samp{--verbose}オプションを加えました.Noah
Friedmanは,@samp{--macrodir}オプションと @code{AC_MACRODIR}環境変数を加
えました.(彼は,``ソフトウェアパッケージを,Autoconfを使用するものに改
造してください''と言うことを意味する @dfn{autoconfiscate}という言葉も作
り出しました.)RolandとNoahは,@code{AC_DEFINE}での引用の保護を改善し,
特に私が1993年の2月から6月まで移植性の問題にうんざりしているときに多くの
バグを直しました.

@node Deuteronomy
@section Deuteronomy

@c A long wish list for major features had accumulated, and the effect of
@c several years of patching by various people had left some residual
@c cruft.  In April 1994, while working for Cygnus Support, I began a major
@c revision of Autoconf.  I added most of the features of the Cygnus
@c @command{configure} that Autoconf had lacked, largely by adapting the
@c relevant parts of Cygnus @command{configure} with the help of david zuhn
@c and Ken Raeburn.  These features include support for using
@c @file{config.sub}, @file{config.guess}, @option{--host}, and
@c @option{--target}; making links to files; and running @command{configure}
@c scripts in subdirectories.  Adding these features enabled Ken to convert
@c @acronym{GNU} @code{as}, and Rob Savoye to convert Deja@acronym{GNU}, to using
@c Autoconf.
@c 
長い間望まれていた主な特徴のリストが蓄積され,様々な人々のパッチの数年間
の効果は,残りのcruftを残したままでした.1994年4月のCygnus Supportに対す
る仕事中に,私はautoconfの主な修正を始めました.Cygnus
@command{configure}が関連した部分がほとんどですが,david zuhnとKen
Raeburnの助けで,Autoconfに欠けているCygnus @command{configure}のほとん
どの機能を追加しました.これらの機能は,@file{config.sub},
@file{config.guess},@samp{--host}と@samp{--target}を使用するサポート,
ファイルをリンクさせること,サブディレクトリで@command{configure}を実行
することを含みます.これらの機能に加え,Autoconfを使用するように,Kenは
@acronym{GNU} @code{as}を対応し,Rob Savoye はDeja@acronym{GNU}を対応し
ました.

@c I added more features in response to other peoples' requests.  Many
@c people had asked for @command{configure} scripts to share the results of
@c the checks between runs, because (particularly when configuring a large
@c source tree, like Cygnus does) they were frustratingly slow.  Mike
@c Haertel suggested adding site-specific initialization scripts.  People
@c distributing software that had to unpack on MS-DOS asked for a way to
@c override the @file{.in} extension on the file names, which produced file
@c names like @file{config.h.in} containing two dots.  Jim Avera did an
@c extensive examination of the problems with quoting in @code{AC_DEFINE}
@c and @code{AC_SUBST}; his insights led to significant improvements.
@c Richard Stallman asked that compiler output be sent to @file{config.log}
@c instead of @file{/dev/null}, to help people debug the Emacs
@c @command{configure} script.
@c 
私は,他の人々の要求に答えより多くの機能を加えました.多くの人々は, 
@command{configure}スクリプトが実行時の調査結果を共有できるよう求め,そ
れは(特に,Cygnusのような,大きなソースツリーのコンフィグレーション時に)
イライラする程遅かったためです.Mike Haertelは,サイト特定の初期化スクリ
プトを加えることを提案しました.MS-DOSでアンパックが必要なものを配布して
いる人々は,生成されるファイル名が@file{config.h.in}のように二つのドット
を含むので,ファイル名の@file{.in}拡張子に優先するよう求めました.Jim
Avera は,@code{AC_DEFINE}と@code{AC_SUBST}の引用を使用する問題の拡張試
験を行い,彼の洞察は重要な改良につながりました.Richard Stallmanは,
Emacsの@command{configure}スクリプトをデバッグする人々を助けるため, 
@file{/dev/null}の代わりに@file{config.log}にコンパイラ出力を送るよう頼
みました.

@c I made some other changes because of my dissatisfaction with the quality
@c of the program.  I made the messages showing results of the checks less
@c ambiguous, always printing a result.  I regularized the names of the
@c macros and cleaned up coding style inconsistencies.  I added some
@c auxiliary utilities that I had developed to help convert source code
@c packages to use Autoconf.  With the help of Fran@,cois Pinard, I made
@c the macros not interrupt each others' messages.  (That feature revealed
@c some performance bottlenecks in @acronym{GNU} M4, which he hastily
@c corrected!)  I reorganized the documentation around problems people want
@c to solve.  And I began a test suite, because experience had shown that
@c Autoconf has a pronounced tendency to regress when we change it.
@c 
プログラム品質に不満があり,その他の変更をしました.メッセージに曖昧でな
い調査結果が表示されるようにし,常に結果を出力するようにしました.マクロ
の名前を組織化し,コーディングスタイルの矛盾をきれいにしました.Autoconf
を使用するソースコードパッケージの改造を助けるため開発した,追加のユーティ
リティを加えました.Fran@,cois Pinardの助けで,マクロがお互いのメッセー
ジに干渉しないようにしました.(その機能は,@acronym{GNU} M4のパフォーマ
ンスのボトルネックを明らかにし,彼はすぐに修正しました!) 人々が解決を望
むドキュメント周りの問題を再編成しました.そして,経験から,Autoconfを変
更したとき,明らかに退化する傾向が分かっているので,テストスイートを始め
ました.

@c Again, several alpha testers gave invaluable feedback, especially
@c Fran@,cois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
@c and Mark Eichin.
@c 
再び,貴重なフィードバックをくれたアルファテスターです.特に,Fran@,cois
Pinard,Jim Meyering,Karl Berry,Rob Savoye,Ken Raeburnと,Mark Eichin 
です.

@c Finally, version 2.0 was ready.  And there was much rejoicing.  (And I
@c have free time again.  I think.  Yeah, right.)
@c 
最終的に,バージョン2.0が用意できました.そしてたくさんの喜びがありまし
た.(そして私は再び自由な時間を持ちます.私は考えます.これは正当な権利
だ.)


@c ========================================================== Appendices

@node Copying This Manual
@c @appendix Copying This Manual
@appendix このマニュアルのコピー条件

@menu
* GNU Free Documentation License::  License for copying this manual
@end menu

@include fdl.texi

@node Indices
@c @appendix Indices
@appendix 索引

@menu
* Environment Variable Index::  Index of environment variables used
* Output Variable Index::       Index of variables set in output files
* Preprocessor Symbol Index::   Index of C preprocessor symbols defined
* Autoconf Macro Index::        Index of Autoconf macros
* M4 Macro Index::              Index of M4, M4sugar, and M4sh macros
* Autotest Macro Index::        Index of Autotest macros
* Program & Function Index::    Index of those with portability problems
* Concept Index::               General index
@end menu

@node Environment Variable Index
@c @appendixsec Environment Variable Index
@appendixsec 環境変数の索引

@c This is an alphabetical list of the environment variables that Autoconf
@c checks.
@c 
以下は,Autoconfが調査する環境変数のアルファベット順のリストです.

@printindex ev

@node Output Variable Index
@c @appendixsec Output Variable Index
@appendixsec 出力変数の索引

@c This is an alphabetical list of the variables that Autoconf can
@c substitute into files that it creates, typically one or more
@c @file{Makefile}s.  @xref{Setting Output Variables}, for more information
@c on how this is done.
@c 
以下は,Autoconfが作成するファイルに,通常は一つ以上の@file{Makefile} に
代入する変数のアルファベット順のリストです.こうする方法の詳細は, 
@xref{Setting Output Variables}.

@printindex ov

@node Preprocessor Symbol Index
@c @appendixsec Preprocessor Symbol Index
@appendixsec プリプロセッサシンボルの索引

@c This is an alphabetical list of the C preprocessor symbols that the
@c Autoconf macros define.  To work with Autoconf, C source code needs to
@c use these names in @code{#if} directives.
@c 
以下は,Autoconfマクロが定義するCプリプロセッサシンボルのアルファベット
順のリストです.Autoconfと共に動作するため,Cソースコードでは,
@code{#if}ディレクティブにこれらの名前を使用する必要があります.

@printindex cv

@node Autoconf Macro Index
@c @appendixsec Autoconf Macro Index
@appendixsec Autoconfマクロの索引

@c This is an alphabetical list of the Autoconf macros.
@c 
以下は,Autoconfマクロのアルファベット順のリストです.
@ifset shortindexflag
@c To make the list easier to use, the macros are listed without their
@c preceding @samp{AC_}.
@c 
リストの使用を容易にするため,マクロは前置される@samp{AC_}をとった形でリ
ストアップされています.
@end ifset

@printindex AC

@node M4 Macro Index
@c @appendixsec M4 Macro Index
@appendixsec M4マクロの索引

@c This is an alphabetical list of the M4, M4sugar, and M4sh macros.
@c 
以下は,M4,M4sugar,そしてM4shマクロのアルファベット順のリストです.
@ifset shortindexflag
@c To make the list easier to use, the macros are listed without their
@c preceding @samp{m4_} or @samp{AS_}.
@c 
リストの使用を容易にするため,マクロは前置される@samp{m4_}や@samp{AS_} 
をとった形でリストアップされています.
@end ifset

@printindex MS

@node Autotest Macro Index
@c @appendixsec Autotest Macro Index
@appendixsec Autotestマクロの索引

@c This is an alphabetical list of the Autotest macros.
@c 
以下は,Autotestマクロのアルファベット順のリストです.
@ifset shortindexflag
@c To make the list easier to use, the macros are listed without their
@c preceding @samp{AT_}.
@c 
リストの利用がより容易になるよう,マクロは前置される@samp{AT_}を用いずに
リストアップされています.
@end ifset

@printindex AT

@node Program & Function Index
@c @appendixsec Program and Function Index
@appendixsec プログラムと関数の索引

@c This is an alphabetical list of the programs and functions which
@c portability is discussed in this document.
@c 
以下は,このドキュメントで移植性を検討しているプログラムと関数のアルファ
ベット順のリストです.

@printindex pr

@node Concept Index
@c @appendixsec Concept Index
@appendixsec 概念の索引

@c This is an alphabetical list of the files, tools, and concepts
@c introduced in this document.
@c 
以下は,ファイル,ツール,そしてこのドキュメントで紹介されている概念のア
ルファベット順のリストです.

@printindex cp

@bye

@c Local Variables:
@c fill-column: 72
@c ispell-local-dictionary: "american"
@c End:

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>