のぴぴのメモ

自分用のLinuxとかの技術メモ

configureの作り方(autotoolsの使い方)

はじめに

オープンソースでよくある、configure → make → make installというセットアップの流れ。これはGNUのautotoolsというツール&フレームワーク群により実現されている。
本記事ではそのautotoolsによりconfigureを作成する手順を説明する。

作成の流れ

  1. 必要ファイルの作成(automake時に必要)
  2. Makefile.am作成(後の作成/修正も可)
  3. autoscanコマンドの実行
  4. configure.acファイルの作成&編集
  5. aclocal実行
  6. autoheader実行
  7. automake実行
  8. autoconf実行

ユーザが編集するファイルは、configure.acとMakefile.am。これらファイルを修正した時は、aclocalコマンド以降を都度実行してファイルを再生性する。なので、aclocalコマンド以降をシェル化して一気に実行するようにしておくと便利である。

f:id:nopipi:20130109013829p:plain

手順詳細

必要ファイルの作成

automakeコマンド実行時に求められるファイルを作成する。とりあえずファイルがあればよいので、空ファイルを作成する。(内容は必要に応じ別途修正する)

$ touch INSTALL NEWS README LICENSE AUTHORS ChangeLog

Makefile.am作成(後の作成/修正も可)

次のautoscanコマンドで、AC_CONFIG_FILESを自動生成するため、とりあえずMakefile.amを作成する。とりあえずこの段階では空ファイルでもかまわない。(automake実行時に中身があればOK)

 -> Makefile.amのつくり方(別途作成予定)

autoscanコマンドの実行

configure.scanを作成し、それをRenameしてconfigure.acを作成する。

$ autoscan
$ mv configure.scan configure.ac

configure.acファイルの作成&編集

configure.acを修正する。詳細は別途作成

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

sAC_PREREQ([2.63])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) <== パッケージ&バージョン&連絡先を記入
AC_CONFIG_SRCDIR([src/uplog_util.c])
AC_CONFIG_HEADERS([config.h])

# Checks for programs.
AC_PROG_CC

# Checks for libraries.

# Checks for header files.
AC_CHECK_HEADERS([fcntl.h limits.h locale.h stdlib.h string.h sys/socket.h syslog.h unistd.h])

# Checks for typedefs, structures, and compiler characteristics.
AC_TYPE_PID_T

# Checks for library functions.
AC_FUNC_FORK
AC_FUNC_MALLOC
AC_FUNC_STRNLEN
AC_CHECK_FUNCS([dup2 getcwd gethostname gettimeofday memset realpath select setlocale socket strerror])

AC_CONFIG_FILES([Makefile
                 conf/Makefile
                 src/Makefile]) <==Makefile.amを増やしたらここに追加
AC_OUTPUT

aclocal実行以降

以後はシェル化し、Makefile.amやconfigure.ac修正時に都度実行すると楽。

echo aclocal
aclocal
echo autoheader
autoheader
echo automake
automake --add-missing --copy
echo autoconf
autoconf