試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

autoconf/automakeでビルド時の機能を設定するオプションを付けるための記述に関する覚え書き2

以前に書いた「autoconfで機能の有効/無効を設定するオプションを付けるための記述に関する覚え書き(メモとコード例)」に続いて、ここでは「cpufreqdの手動プロファイル/ モード変更ツールを更新(Vala言語への移植,デーモン制御機能とテストツールの追加)」のcpufreqd-icon(http://kakurasan.ehoh.net/software/cpufreqd-icon/) 1.9.0の中で用いたconfigure.acに関する幾つかの記述を貼り付ける。実際に使っている記述をそのままコピペしているため、設定として完結していない部分もあるが、全体はこのツールのソースツリーをダウンロードして直接ファイルを開くことで確認できる。また、autoconf/automakeをビルドシステムに用いた他の色々なソフトウェアのソースを入手して確認するのも書き方の参考になる。

--with-cpufreqd-confを指定した場合にその値をconfig.hの中でC言語のマクロCPUFREQD_CONFとして定義し、指定しない場合は既定値として「/etc/cpufreqd.conf」を同様に定義するための記述

[引用] ファイル名: cpufreqd-icon-1.9.0/configure.ac より

AC_ARG_WITH([cpufreqd_conf],
 [AC_HELP_STRING(
  [--with-cpufreqd-conf=PATH],
  [set path for cpufreqd.conf [default=/etc/cpufreqd.conf]])
 ],
  [CPUFREQD_CONF=$withval],
  [CPUFREQD_CONF=/etc/cpufreqd.conf]
)
AC_DEFINE_UNQUOTED(CPUFREQD_CONF, "${CPUFREQD_CONF}", [path to cpufreqd.conf])

AC_ARG_WITHの最初の引数の文字列部分(「cpufreqd_conf」)と受け付けるオプション名「--with-cpufreqd-conf」の「--with-」の後ろの部分との対応に注意。ここを合わせないとヘルプと実際に受け付けるオプションとが異なってしまう。

--disable-cpufreqd-test-gtkを指定しない場合にpkg-configで「gthread-2.0」の開発パッケージをチェックし、成功したら各Makefileに「CPUFREQD_TEST_GTK」を定義する記述

[引用] ファイル名: cpufreqd-icon-1.9.0/configure.ac より

GLIB_REQUIRED=2.22

AC_ARG_ENABLE(cpufreqd_test_gtk,
[  --enable-cpufreqd-test-gtk build cpufreqd test tool, require gthread [[default=yes]]],
[\
case "${enableval}" in
 yes) enable_cpufreqd_test_gtk=yes ;;
 no)  enable_cpufreqd_test_gtk=no ;;
 *)   AC_MSG_ERROR(bad value for --enable-cpufreqd-test-gtk) ;;
esac],
enable_cpufreqd_test_gtk=yes)
if test x"${enable_cpufreqd_test_gtk}" = x"yes"; then
PKG_CHECK_MODULES(GTHREAD, [gthread-2.0 >= ${GLIB_REQUIRED}])
fi
AM_CONDITIONAL(CPUFREQD_TEST_GTK, test x"${enable_cpufreqd_test_gtk}" = xyes)

AM_CONDITIONALにより、configureスクリプトの出力する各Makefileの中で「CPUFREQD_TEST_GTK」を定義する。
これを次の見出しの記述と組み合わせて用いている。

Makefileに「CPUFREQD_TEST_GTK」が定義されている場合にターゲット「cpufreqd-test-gtk」をビルドして[インストール先]/sbin/以下にインストールするようにする記述

[引用] ファイル名: cpufreqd-icon-1.9.0/src/Makefile.am より

if CPUFREQD_TEST_GTK
sbin_PROGRAMS = cpufreqd-test-gtk
endif

binディレクトリに入れるプログラムは「bin_PROGRAMS」、sbinディレクトリに入れるプログラムは「sbin_PROGRAMS」にそれぞれターゲットを記述する。
このターゲット「cpufreqd-test-gtk」については

NULL=

cpufreqd_test_gtk_VALASOURCES = \
	cpufreqd-test-gtk-app.vala \
	cpufreqd-test-gtk.vala \
	functions.vala \
	testwindow.vala \
	$(NULL)

cpufreqd_test_gtk_SOURCES = \
	cpufreqd-test-gtk.vala.stamp \
	$(cpufreqd_test_gtk_VALASOURCES:.vala=.c) \
	$(NULL)

cpufreqd_test_gtk_LDFLAGS = \
	-Wl,--export-dynamic \
	$(NULL)

cpufreqd_test_gtk_LDADD = $(GTHREAD_LIBS) $(GTK_LIBS)

のように記述している。

--enable-debugオプションを付けたときにsrcディレクトリの.vala.stampファイルを全て消してvalacに「-D DEBUG」オプションを付けてビルドし直すようにする記述

[引用] ファイル名: cpufreqd-icon-1.9.0/configure.ac より

AC_ARG_ENABLE(debug,
[  --enable-debug          turn on debugging, require valac [[default=no]]],
[\
case "${enableval}" in
 yes) enable_debug=yes ;;
 no)  enable_debug=no ;;
 *)   AC_MSG_ERROR(bad value for --enable-debug) ;;
esac],
enable_debug=no)
if test x"${enable_debug}" = x"yes"; then
  rm src/*.vala.stamp
fi
AM_CONDITIONAL(DEBUG, test x"${enable_debug}" = xyes)

[引用] ファイル名: cpufreqd-icon-1.9.0/src/Makefile.am より

VALAFLAGS = -C --vapidir $(top_srcdir)/vapi

if DEBUG
VALAFLAGS += -D DEBUG
endif

cpufreqd-icon.vala.stamp: $(cpufreqd_icon_VALASOURCES)
	$(VALAC) $(VALAFLAGS) --pkg posix --pkg gio-2.0 --pkg gio-unix-2.0 --pkg gtk+-2.0 --pkg libnotify --pkg config $^
	touch $@

cpufreqd-test_gtk.vala.stamp: $(cpufreqd_test_gtk_VALASOURCES)
	$(VALAC) --thread $(VALAFLAGS) --pkg posix --pkg gtk+-2.0 --pkg config $^
	touch $@

valacコマンドのオプションを入れる場所(VALAFLAGS)を作りつつ、「DEBUG」がMakefileで定義されたときにそこに-D DEBUGオプションを入れるようにしている。

関連記事:

使用したバージョン:

  • autoconf 2.64
  • automake 1.11