色々configure.acをいじったので、こちらのオプションについてまとめてみました。
中々癖のあるconfigureなので、既存OSSを見ていると非常に参考になります。
今回は個人的に見慣れているlighttpdを参考にしました。
他にも何か面白いものがあったら追記してきます。
##通常Make系
通常のMakefileで使用するようなビルドオプション関連
###gccオプション
通常のMakefileと同様のgcc compile option時に利用されるオプションです。
一般的なライブラリの追加
AC_CHECK_LIB([rt], [main])
既存のビルドオプション更新 (LIBSやCFLAGS, CPPFLAGS等が該当します)
CPPFLAGS="${CPPFLAGS} -D_REENTRANT"
こんな追加方法もあるようです。(未確認)
AS_VAR_APPEND([CFLAGS], [" -Werror"])
新しいビルドオプションの追加
GCOV_OPT="-fprofile-arcs -ftest-coverage"
AC_SUBST([GCOV_OPT])
#=>各Makefile.am内で、GCOV_OPTが定義された変数として使用できます。
##define
AC_DEFINE([HAVE_SENDFILE_BROKEN], [1], [broken sendfile])
ちなみにここで定義されるdefineは、config.hの中に含まれる模様。
###defineでprefix等の文字列を利用したい
configure.ac内にconfigureの処理を書くと、そのまま反映されます。
その際、一度AC_DEFINE
でdummyの定義する必要があります。
#add CommandServicePath
AC_DEFINE([CGI_COMMAND_SERVICE_PATH], ["dummy"], ["Define CGI CommandService path"])
case ${prefix} in
NONE) $as_echo "#define CGI_COMMAND_SERVICE_PATH \"${ac_default_prefix}/sbin\"" >>confdefs.h;;
*) $as_echo "#define CGI_COMMAND_SERVICE_PATH \"${prefix}/sbin\"" >>confdefs.h;;
esac
##configure独自機能系
configureやMakefile.amといったconfigure機能の中で使える設定関連
##Makefile.am設定
Makefile.am向けdefine
Makefile.am自体の切り替えに使える面白いやつ。
#AM_CONDITIONAL([渡すMakefile.am利用define], [条件分])
AM_CONDITIONAL([USE_BUILDER], [test "$enable_builder" = yes])
例えば上記を色々書いておいて、Makefile.amをこのようにくくってあげると、フォルダ内のモジュールごとビルドをスキップ出来ます。
SUBDIRS=design_pattern_util
if USE_BUILDER
SUBDIRS+= builder
endif
##configureオプション追加
有効無効切り替え: enable
-
--enable-XXX
=> enableval=yes -
--disable-XXX
=> enableval=no
とyes/noのケースが変わります。
#AC_ARG_ENABLEの引数は4つ。option, help, スクリプト, 初期値
#AC_HELP_STRINGはヘルプを綺麗に出力するためのコマンドです。
AC_ARG_ENABLE(threadsafe,
[AC_HELP_STRING([--enable-threadsafe],[説明分を追加])],,
[\
#enablevalはyes or no. --disable-threadsafeでno側のケースになる。
case "${enableval}" in
yes) enable_threadsafe=yes ;;
no) enable_threadsafe=no;;
esac],
enable_threadsafe=no)
#例えば上記の結果でdefine値を切り替え、コンパイルスイッチにすることが出来ます。
if test x"${enable_threadsafe}" = x"yes"; then
AC_DEFINE(THREAD_SAFE, 1, [Define to 1 if you want to ensure thread safe])
else
echo "libnotify is disabled"
fi
有効無効切り替え: with
-
--with-XXX
=> withval=yes -
--without-XXX
=> withval=no
とyes/noのケースが変わります。
enableとの違い?ないけど--with-http2とか--with-h265とか、withの方がなんかわかりやすい/かっこいいです。
AC_ARG_WITH([builder],
[AC_HELP_STRING([--without-builder],
[exclude builder pattern library]
)],
[with_builder=$withval],
[with_builder=yes]
)
#AM_CONDITIONALと組み合わせて丸ごと無効化みたいな使い方も便利です。
AM_CONDITIONAL([USE_BUILDER], [test "$with_builder" = yes])
##configureログ系
#エラーにならないログが出せます。
AC_MSG_NOTICE([----------------------------------------])
#こっちはエラーログ。configureもエラーになります。
AC_MSG_ERROR([bad value ${enableval} for --enable-ipv6])
##参考
lighttpd
最新コードのconfigure.acの内容