Up: Configuring


5.3.1 AC_PROG_LIBTOOLマクロ

GNU Autoconf(やAutomake)を使用している場合,AC_PROG_LIBTOOLの呼 び出しをconfigure.inに加える必要があります.このマクロは,生成 されたlibtoolスクリプトがホストの特徴を理解できるようにするため,多く の新しいテストをconfigureスクリプトに加えます.

— Macro: AC_PROG_LIBTOOL
— Macro: AM_PROG_LIBTOOL

--enable-shared’と‘--disable-shared’のconfigureフラ グに対するサポートを加えます.1 AM_PROG_LIBTOOLは,このマクロに対する古い名前で, しばらくはサポートされますが,やめた方がいいでしょう.

デフォルトで,このマクロは,利用可能な場合は共有ライブラリを開始し,共 有ライブラリと衝突しない場合はスタティックライブラリも可能とします.こ れらのデフォルトは,AC_DISABLE_SHAREDAC_DISABLE_STATIC マクロのどちらかで修正可能です.

          # Turn off shared libraries during beta-testing, since they
          # make the build process take too long.
          AC_DISABLE_SHARED
          AC_PROG_LIBTOOL

ユーザは,パッケージ名を基にビルドされる,共有またはスタティックライブ ラリを選択するため,‘--enable-shared’と‘--enable-static’を configureへのフラグとして変更を指定してもかまいません.例え ば,共有する‘bfd’ と‘gdb’ライブラリをビルドし,‘libg++’ を共有にしないため,以下のconfigureスクリプトの実行で,三つのこ とのすべて可能となります.

          trick$ ./configure --enable-shared=bfd,gdb

一般的に,‘--enable-shared=pkgs’の指定は,カンマで分けられ たpkgsリストに名前があるすべてのパッケージを ‘--enable-shared’で,それ以外のすべてのパッケージを ‘--disable-shared’でコンフィグレーションすること同じです. ‘--enable-static=pkgs’フラグは,同様に動作しますが,その場 合は‘--enable-static’と‘--disable-static’を使用します.同様 に,‘--enable-fast-install=pkgs’フラグの適用は, ‘--enable-fast-install’と‘--disable-fast-install’を使用しま す.

パッケージ名‘default’は,PACKAGE環境変数に名前が設定されて いない,あらゆるパッケージに一致します.

このマクロは,シェル変数LIBTOOL_DEPSも設定し,それで,libtoolス クリプトが時代遅れになった場合の自動的な更新に使用できるようになります. そうするためにconfigure.inに以下を加えてください.

          AC_PROG_LIBTOOL
          AC_SUBST(LIBTOOL_DEPS)

そして,Makefile.inMakefile.amに,以下を加えてください.

          LIBTOOL_DEPS = @LIBTOOL_DEPS@
          libtool: $(LIBTOOL_DEPS)
                  $(SHELL) ./config.status --recheck

GNU automakeを使用してる場合,automakeが面倒をみるので,指示の省略が可 能です.libtoolでの依存性を明確に作成する必要があります.

— Macro: AC_LIBTOOL_DLOPEN

dlopenサポートの調査を可能にします.パッケージで‘-dlopen’と ‘-dlpreopen’フラグを使用する場合,このマクロ使用すべきで,そうし ない場合,libtoolはシステムがdlopenをサポートしていないと仮定します. マクロはAC_PROG_LIBTOOL前で呼び出す必要があります.

— Macro: AC_LIBTOOL_WIN32_DLL

このマクロは,win32プラットフォームでクリーンなdllをビルドするために移 植する場合,使用する必要があります.通常これは,あらゆるライブラリデー タ項目を__declspec(dllexport)でエクスポートし, __declspec(dllimport)でインポートすることを意味します.このマク ロが使用されていない場合,libtoolはパッケージライブラリがクリーンなdll ではなく,win32ホストでのスタティックライブラリのみをビルドすると仮定 します.

このマクロはAC_PROG_LIBTOOL前で呼び出す必要があり, パッケージのMakefileでのリンクモードでの準備として, libtoolに‘-no-undefined’を渡させる必要があります.通常, ‘-no-undefined’を渡す場合,すべてのライブラリシンボルが,リンク時 には本当に定義されていることを確かめる必要があります!

— Macro: AC_DISABLE_FAST_INSTALL

AC_PROG_LIBTOOLのデフォルトの動作を,高速インストールに対する最 適化を不可能にするよう変更します.ユーザはこのデフォルトを,プラット フォームのサポートに依存して,‘--enable-fast-install’を指定するこ とで優先させることができます.

— Macro: AC_DISABLE_SHARED
— Macro: AM_DISABLE_SHARED

AC_PROG_LIBTOOLのデフォルトの動作を,共有ライブラリを利用不可能 に変更します.ユーザはこのデフォルトを,‘--enable-shared’を指定す ることで優先させることができます.

— Macro: AC_DISABLE_STATIC
— Macro: AM_DISABLE_STATIC

AC_PROG_LIBTOOLのデフォルトの動作を,スタティックライブラリを利 用不可能に変更します.ユーザはこのデフォルトを,‘--enable-static’ を指定することで優先させることができます.

AC_PROG_LIBTOOL内のテストは,以下の環境変数も認識します.

— Variable: CC

生成されたlibtoolが使用するCコンパイラです.これが設定されてい ない場合,AC_PROG_LIBTOOLgccccを探します.

— Variable: CFLAGS

標準的なオブジェクトファイルを生成するために使用するコンパイラフラグで す.これが設定されていない場合,AC_PROG_LIBTOOLはそのようなフラ グを全く使用しません.それは,AC_PROG_LIBTOOLがテストを実行する 方法にのみ効果があり,生成されたlibtoolには効果はありません.

— Variable: CPPFLAGS

Cプリプロセッサフラグです.これが設定されていない場合, AC_PROG_LIBTOOLはそのようなフラグを全く使用しません.それは, AC_PROG_LIBTOOLがテストを実行する方法にのみ効果があり,生成され たlibtoolには効果はありません.

— Variable: LD

(生成されたlibtoolが要求する場合は)システムリンカです.これが設 定されていない場合,AC_PROG_LIBTOOLは,CCで使用されるリン カが何かを判別しようとします.

— Variable: LDFLAGS

プログラムをリンクするとき,libtoolが使用するフラグです.これが 設定されていない場合,AC_PROG_LIBTOOLはそのようなフラグを全く使 用しません.それは,AC_PROG_LIBTOOLがテストを実行する方法にのみ 効果があり,生成されたlibtoolには効果はありません.

— Variable: LIBS

プログラムのリンクとき,AC_PROG_LIBTOOLが使用するライブラリです. これが設定されていない場合,AC_PROG_LIBTOOLはそのようなフラグを 使用しません.それはAC_PROG_LIBTOOLが実行するテストにのみに効果 があり,生成されたlibtoolには効果はありません.

— Variable: NM

使用するプログラムで,nmの調査ではありません.

— Variable: RANLIB

使用するプログラムで,ranlibの調査ではありません.

— Variable: LN_S

プログラムのリンクを作成するコマンドで,可能な場合はソフトリンク,それ 以外ではハードリンクです.この変数が設定されていない場合, AC_PROG_LIBTOOLは適切なプログラムを調査します.

— Variable: DLLTOOL

使用するプログラムで,dlltoolの調査ではありません. Cygwin/MS-Windowsでのみ意味があります.

— Variable: OBJDUMP

使用するプログラムで,objdumpの調査ではありません. Cygwin/MS-Windowsでのみ意味があります.

— Variable: AS

使用するプログラムで,asの調査ではありません.しばらくは, Cygwin/MS-Windows でのみ使用されます.

libtoolizeプログラムを呼び出すとき(see Invoking libtoolize), それはAC_PROG_LIBTOOLの定義が見つかる場所を伝えます.Automakeを 使用している場合,aclocalプログラムは自動的に,configure スクリプトにAC_PROG_LIBTOOLサポートをconfigureスクリプト に加えます.

それにもかかわらず,acinclude.m4libtool.m4のコピーを含 めることは賢明で,そのため,aclocal.m4configureがなん らかの理由で再びビルドされた場合も,適切なlibtoolマクロが使用されます. 代わりに,ユーザがlibtool.m4の互換バージョンをインストールして いて,aclocalにアクセス可能なことを期待します.これは,バージョ ンが一致しない場合,不運なエラーを導くかもしれません.


脚注

[1] AC_PROG_LIBTOOLは, Makefile.inでのMakefile変数のtop_builddirの定義を 要求します.Automakeはこれを自動的に行いますが,Autoconfユーザは,ビル ドディレクトリのトップへの相対パス(例えば,../..)を設定する必要 があります.