autotools勉強中 データとヘッダのインストール

実現したいこと

  • fat.hなどを$(MONADIR)/fat_write/にインストール。
  • fat_template.imgを$(PREFIX)/share/fat_write/にインストール

ついでにMONADIRはなくてもデフォルト値をセットするようにしよう。

acinclude.m4

MONADIRがない場合はWARNをだしてデフォルト値をセットする。

AC_DEFUN([AM_CHECK_MONADIR],
 [dnl # 
  dnl # Check env MONADIR exists?
  dnl #
  AC_MSG_CHECKING([MONADIR...])
  if test "$MONADIR" != "" ; then
    AC_MSG_RESULT(yes $MONADIR)
  else
    MONADIR="/usr/local/mona"
    export MONADIR
    AC_MSG_WARN(MONADIR not found. use default $MONADIR)
  fi])

configure.ac

AC_SUBST(MONADIR)とすることでMakefile.amから@MONADIR@で参照することができます。

AM_CHECK_MONADIR

AC_SUBST(MONADIR)

Makefile.am

bin_PROGRAMS = fat_write
fat_write_CXXFLAGS = -g
fat_write_SOURCES  = VirtualFloppy.cpp VirtualFloppy.h fat.cpp fat.h file.h main.cpp types.h

fat_write_datadir = $(datadir)/fat_write
fat_write_data_DATA = fat_template.img

mona_includedir = @MONADIR@/include
mona_include_HEADERS = fat.cpp VirtualFloppy.h fat.h file.h types.h

_HEADERS変数を利用してヘッダをインストールするように指示します。
同様に_DATA変数を利用してインストールを指示します。
このあたりもっときれいに書けそうな気がするんだけれども。

実際に./configure

./configure
略
checking for mkdir... yes
checking MONADIR...... configure: WARNING: MONADIR not found. use default /usr/local/mona
make
略
sudo make install
make[1]: Entering directory `/home/higepon/fat_write'
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
  /usr/bin/install -c 'fat_write' '/usr/local/bin/fat_write'
test -z "/usr/local/share/fat_write" || mkdir -p -- "/usr/local/share/fat_write"
 /usr/bin/install -c -m 644 'fat_template.img' '/usr/local/share/fat_write/fat_template.img'
test -z "/usr/local/mona/include" || mkdir -p -- "/usr/local/mona/include"
 /usr/bin/install -c -m 644 'fat.cpp' '/usr/local/mona/include/fat.cpp'
 /usr/bin/install -c -m 644 'VirtualFloppy.h' '/usr/local/mona/include/VirtualFloppy.h'
 /usr/bin/install -c -m 644 'fat.h' '/usr/local/mona/include/fat.h'
 /usr/bin/install -c -m 644 'file.h' '/usr/local/mona/include/file.h'
 /usr/bin/install -c -m 644 'types.h' '/usr/local/mona/include/types.h'
make[1]: Leaving directory `/home/higepon/fat_write'

うまくいきました。
もっときれいに書けるよとか、間違っているよとかご意見求む。

追記

fat_write_datadir = $(datadir)/fat_write

fat_write_datadir = $(pkgdatadir)

の方がよさげ。

GNU Autoconf/Automake/Libtool

GNU Autoconf/Automake/Libtool