14. 自動設定用の変数と関数

OMakeの標準ライブラリでは、異なったビルド環境下でのビルドを調整するための、自動設定(autoconfiguring)用のコードを書くことを手助けする、数多くの関数や変数を提供しています。

14.1 汎用的な自動設定関数

以下にリストしてある汎用的な関数では、あなたの『ビルド環境(the properties of your build environment)』について調べることができます。これらの関数の中には、恐らくあなたがよく知っているであろうGNU autoconfツールによく似ているものも含まれています。また、これらの関数は適切な static. ブロックで使うことを推奨しています(詳細は “4.15 static.” を参照してください)。

以下の汎用的な関数を使うためには、まずあなたの OMakeroot あるいは OMakefile ファイルに、以下の一行を追加してください。

open configure/Configure

14.1.1 ConfMsgChecking, ConfMsgResult

ConfMsgChecking(<msg>)
...
ConfMsgResult(<msg>)

ConfMsgChecking 関数は --- Checking <msg>... のような形のメッセージを 改行なしで 出力します。 ConfMsgChecking が実行されて、後にテストが終わったときには、 ConfMsgResult 関数を使って結果を出力すべきです。

これらの関数を再定義したいという場合があるかもしれません。例えば、出力の形式を異なったものにしたいという場合や、メッセージをログファイルにコピーしたいというような場合です。

例:

static. =
   ConfMsgChecking(which foo to use)
   foo = ...
   ConfMsgResult($(foo))

14.1.2 ConfMsgWarn, ConfMsgError

ConfMsgWarn(<msg>)
ConfMsgError(<msg>)

警告やエラーメッセージをそれぞれ表示します。 ConfMsgError はOMakeを中断させます。

14.1.3 ConfMsgYesNo, ConfMsgFound

flag = $(ConfMsgYesNo <bool expr>)
flag = $(ConfMsgFound <bool expr>)

ConfMsgFound 関数を使う前にまず ConfMsgChecking 関数を用いて「コマンドが使用できるかどうか調べます」ということをユーザに伝えます。その後、その結果を真偽値で ConfMsgFound 関数に渡します。 ConfMsgFound は結果を適切な形(“found”あるいは”NOT found”)に直し、 ConfMsgResult 関数を使って出力します。また引数として渡された結果を、加工しないでそのまま返します。

ConfMsgYesNo 関数は ConfMsgFound と似ていますが、出力がシンプルです(“yes”あるいは”NO”)。

14.1.4 TryCompileC, TryLinkC, TryRunC

success = $(TryCompileC <prog_text>)
success = $(TryLinkC <prog_text>)
success = $(TryRunC <prog_text>)

Cプログラムの コード を引数として渡します。 TryCompileC , TryLinkC , TryRunC 関数は与えられた引数を『コンパイル/コンパイルとリンク/コンパイルとリンクと実行』できるかどうか試します。テストが成功した場合、この関数は真を返します。一方で、失敗した場合は偽を返します。

TryCompileC はCコンパイラを実行するときに CC , CFLAGS , INCLUDES 変数を使用します。 TryLinkCTryRunC はそれに加えて LDFLAGS 変数を、Cコンパイラとリンカを実行するときに使用します。しかし、 /WX , -Werror , -warn-error のようなフラグは、たとえ CFLAGS 変数に含まれていたとしても、コンパイラに渡されることはありません。

これらの関数は結果を表示しません。また、通常の場合は適切な ConfMsgCheckingConfMsgResult 間で使用すべきです。

14.1.5 RunCProg

output = $(RunCProg <prog>)

RunCProg 関数は TryRunC 関数と似ていますが、この関数はプログラムの出力を返します(プログラムのコンパイルや実行に失敗した場合は false が返されます)。

ノート

訳注: 原文では “RunCProg is similar to the RunCProg function, ...” となっていましたが、恐らくこれはTryRunCの間違いではないかと思われます

14.1.6 CheckCHeader, VerboseCheckCHeader

success = $(CheckCHeader <files>)
success = $(VerboseCheckCHeader <files>)

TryCompileC 関数を用いることで、あなたのCコンパイラが指定したヘッダファイルの位置をつきとめ、さらに処理できるかどうか調べることができます。 TryCompileC 関数はヘッダファイルをインクルードする前に <stdio.h> をインクルードします。

両方の関数は真偽値を返します。 CheckCHeader 関数は結果を表示しません。 VerboseCheckCHeader 関数はテストと結果を表示するのに ConfMsgCheckingConfMsgResult 関数を使います。

例:

static. =
   NCURSES_H_AVAILABLE = $(VerboseCheckCHeader ncurses.h)

14.1.7 CheckCLib, VerboseCheckCLib

success = $(CheckCLib <libs>, <functions>)
success = $(VerboseCheckCLib <libs>, <functions>)

TryLinkC 関数を用いることで、与えられたライブラリのリンク時に、あなたのCコンパイラとリンカが、与えられた関数を見つけられるかどうか調べることができます。 TryLinkC 関数は -l フラグを使ってコンパイラに <libs> を渡します。

両方の関数は真偽値を返します。 CheckCLib 関数は結果を表示しません。 VerboseCheckCLib 関数はテストと結果を表示するのに ConfMsgCheckingConfMsgResult 関数を使います。

例:

static. =
    NCURSES_LIB_AVAILABLE = $(VerboseCheckCLib ncurses, initscr setupterm tigetstr)

14.1.8 CheckProg

success = $(CheckProg <prog>)

あなたのパス中に <prog> が存在しているかどうかを調べます。この関数はテストと結果を表示するのに ConfMsgCheckingConfMsgResult 関数を使います。

14.2 autoconf スクリプトをOMake用に翻訳する

上の関数のいくつかは、 autoconf に存在しているものと非常に似ています。以下はそのような関数のための簡単な翻訳テーブルです。

  • AC_MSG_CHECKINGConfMsgChecking 関数と非常に似ています。
  • AC_MSG_RESULTConfMsgResult 関数と非常に似ています。
  • AC_MSG_WARNConfMsgWarn 関数と非常に似ています。
  • AC_MSG_ERRORCOnfMsgError 関数と非常に似ています。
  • AC_TRY_COMPILETryCompileC 関数といくらか似ています。ただし、 TryCompileC 関数は真偽値を返し、 C 言語のみに機能するという点が異なります。
  • AC_TRY_LINKTryLinkC 関数と似ています。
  • AC_TRY_RUNTryRunC 関数と似ています。

14.3 事前に用意された設定テスト

OMakeでは数多くの設定テスト(configuration tests)が標準ライブラリに含まれています。あなたのプロジェクトでこれらを使うためには、単純に対象の OMakefile に、設定テストを記述したビルドファイルを『 open (詳細は “4.8 ファイルのインクルード” を参照してください)』するだけです。そうすれば、OMakeを初めて実行した時点で設定テストが実行されます。これは、あなたのプロジェクト上で二回以上設定テストが open されるわけではない点に注意してください。たとえ二回以上呼び出したとしても、このテストは一回だけしか実行されません。

14.3.1 NCursesライブラリの設定

あなたの OMakefileopen configure/ncurses を加えることで、以下の自動設定変数を利用できます。

  • NCURSES_AVAILABLE

    curses.h , term.h ヘッダファイルと ncurses ライブラリが見つかった場合に真となる真偽値

  • NCURSES_TERMH_IN_NCURSES

    term.h<term.h> の代わりに <ncurses/term.h> としてインクルードされていた場合に真となる真偽値

  • NCURSES_CFLAGS

    ncursesコードをコンパイルする際に用いる CFLAGS の値。 NCURSES_AVAILABLENCURSES_TERMH_IN_NCURSES がそれぞれ真である場合には -DNCURSES-DTERMH_IN_NCURSES が含まれます。

  • NCURSES_CLIBS

    ncursesコードをリンクする際に用いる LDFLAGS の値。ncursesが見つかって、それ以外が空のままである場合には通常 -lncurses が含まれます。

14.3.2 ReadLineライブラリの設定

あなたの OMakefileopen configure/readline を加えることで、以下の自動設定変数を利用できます。

  • READLINE_AVAILABLE

    readline/readline.h , readline/history.h ヘッダと readline ライブラリが見つかった場合に真となる真偽値

  • READLINE_GNU

    readlineライブラリのGNUバージョン(BSDバージョンではなく)が見つかった場合に真となる真偽値

  • READLINE_CFLAGS

    readlineコードをコンパイルする際に用いる CFLAGS の値。 READLINE_AVAILABLEREADLINE_GNU がそれぞれ真である場合には -DREADLINE_ENABLED-DREADLINE_GNU が含まれます。

  • READLINE_CLIBS

    readlineコードをリンクする際に用いる LDFLAGS の値。readlineが見つかって、それ以外が空である場合には通常 -lncurses -lreadline が含まれます。

14.3.3 Snprintfの設定

あなたの OMakefileopen configure/snprintf を加えることで、以下の自動設定変数を利用できます。

  • SNPRINTF_AVAILABLE

    標準Cライブラリでsnprintf関数が利用可能であるかどうかを示す真偽値