configure.acに自前のライブラリを追加する

google先生に聞いてみても今一ピンとこなかったので書いてみた。

configure.ac編集

AC_ARG_WITH([xxx], AC_HELP_STRING([--with-xxx@<:@=PATH@:>@], [PATH is path to 'xxx']), [WITH_XXX=$withval], [WITH_XXX=yes])

xxxって自前のライブラリを追加する。必須ライブラリと見なすので、指定されていない場合でも定義値に yes を入れる。引数に値が設定されていなくても yes 。

if test "$WITH_XXX" = "yes"; then
	AC_CHECK_LIB([xxx], [main], , [AC_MSG_ERROR([Need A Xxx Library.])])
else
	AC_MSG_CHECKING([xxx])
	for xxx_include in $WITH_XXX/include $WITH_XXX; do
		if test -d $xxx_include -a -f $xxx_include/xxx/xxx.hpp; then
			XXX_INCLUDE="-I$xxx_include"
		fi
	done
	for xxx_lib in $WITH_XXX/lib $WITH_XXX/Xxx; do
		if test -d $xxx_lib -a -f $xxx_lib/libxxx.a; then
			XXX_LIB="-L$xxx_lib"
		fi
	done
	if test -n "$XXX_INCLUDE" -a -n "$XXX_LIB"; then
		HAVE_LIBXXX=1
		AC_SUBST(HAVE_LIBXXX)
		CFLAGS="$XXX_INCLUDE $CFLAGS"
		CPPFLAGS="$XXX_INCLUDE $CFLAGS"
		LDFLAGS="$XXX_LIB $LDFLAGS"
		LIBS="-lxxx $LIBS"
		AC_MSG_RESULT([$CFLAGS $CPPFLAGS $LDFLAGS $LIBS])
	else
		AC_MSG_RESULT([no])
		AC_MSG_ERROR([Need A Xxx Library.])
	fi
fi

指定されていない場合、引数なしで指定されて場合は、標準の組み込みマクロを利用する。

--prefix= で、インストール先を指定した場合 ( --prefix=/usr/local 等 ) と、ソースのままで開発を続けている場合は引数に場所を絶対パスで指定する。

--prefix= で既にインストールされている場合は、例えば /usr/local/xxx/bin,include,lib となっているはずなのでその場所を検索。

開発状態でのソース検索には、パッケージ名と同じ名前でディレクトリが作成されているはずなので検索して値をセットする。

むむ

m4 マクロ作って中で書くのが筋なんやろうけれど、mac、win、linux、と移動中に aclocal したりするといろいろあれなので今は configure.ac に書いてる。もうちょっとちゃんとします orz。