autoscanツールで生成したconfigure.scan(ac)の雛形をアプリケーションに対応させるよう修正していきます。まずconfigure.acに必須のマクロ定義からみていきます。
AC_INITマクロはconfigure.acでは必須のマクロです。アプリケーションの名称・バージョン・バグレポートの送信先メールアドレス・tarアーカイブ名を指定します。当コンテンツのサンプルではtarアーカイブ名称は省略してます。
AC_INIT([sample],[1.0.0],[bugs@example.com])
ここでの指定した内容は、configureスクリプトによって下記のプリプロセッサとして展開されます。
例えばアプリケーションで次のコード実装をしておけばバージョンを表示することができます。
if (argc == 2 && strcmp(argv[1],"--version")==0)
{
#ifdef PACKAGE_STRING
cout << PACKAGE_STRING << end;
#else
cout "sorry. version unknown." << endl;
#endif
exit(0);
}
AC_CONFIG_FILESもconfigure.acの必須マクロですが、自動生成されていませんので手動で追加します。このマクロではconfigureマクロに生成させるファイルを指定します。多くの場合、makefileの作成を指示することになると思います。
本コンテンツのサンプルでは、カレントディレクトリにアプリケーション本体用のmakefileを作成するよう指定します。(アプリケーション用ライブラリとしてlibcsvも作成しますがそれについては後述しますのでここでは本体のみのmakefile作成だけを指定します。)
AC_CONFIG_FILES([makefile])
このマクロはconfigure.acの最後に配置します。特に引数はありません。configureの生成すべきファイル(ここでは、AC_CONFIG_FILESで指定したmakefile)をこのマクロが生成します。
その他autoscanによって自動生成されたマクロについて簡単に説明します。
サンプルパッケージをautoscanした結果出力されたconfigure.scan(ac)はこれだけでした。これくらいであれば手動で記述してもかまわないように感じますがアプリケーションパッケージが大きくなればなるほどautoscanは有用なツールとなると思います。
ところで上のversionを表示するサンプルコードはPACKAGE_STRINGというプリプロセッサマクロを使用して実装されているわけですが、この定義を行っているのがAC_CONFIG_HEADERマクロです。このマクロはconfigu.h.inというヘッダテンプレートをもとにconfig.hというファイルを生成します。このヘッダには、configureスクリプトで定義されたプリプロセッサやチェック結果などが反映されておりプログラムはこのヘッダをincludeすることでconfigureスクリプトの実行結果を参照することができるわけです。したがってconfigureの結果をハンドルしてなにか操作をしたい場合はプログラムにこのヘッダをincludeする必要があります。
ところで、このconfig.hをconfigureスクリプトが作成するにはテンプレートファイルが必要となるわけですが、このテンプレートを生成するのがautoheaderツールです。このツールは編集したconfigure.acをスキャンし必要なプリプロセッサマクロをヘッダテンプレートとして作成します。したがってこのツールを使えば必要なマクロ定義を意識することはあまりないと言えます。