<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP">
<META NAME="Description" CONTENT="">
<META NAME="Keywords" CONTENT=""</META>
<META NAME="Author" CONTENT="Hajime Mochizuki">
<META NAME="VERSION" CONTENT=" 2001">
<TITLE>
</TITLE>
</HEAD>
<BODY BGCOLOR="#ffffff" text="#000000" link="#0011ee" alink="#0000ee">


a memo for me!

<UL>
<DT>gnu autotools</DT>
<P>
GNU autoconf と automake を使う，自分(motitools)用の典型的やり方のメモ
</P>
<P>
だから，他の人がどうなるかは知らん．．．
</P>

<OL>
<LI>ディレクトリを作る</LI>
<DD> % mkdir project0</DD>

<LI>サブディレクトリを作る</LI>
<DD> % cd project0</DD>
<DD> % mkdir conf config src</DD>
<DD> conf  : confというファイルを置いて --enable-conffileに備える(自分のやり方)
</DD>
<DD> config: こっちは標準的方法？ mkinstalldirsとか置くところにする</DD>
<DD> src   : プログラムのソースを置く

<LI>まずは，適当にプログラムを書く</LI>

<LI>autoscan を動かして，configure.scanを作る</LI>
<DD> % autoscan </DD>
<DD>(perlのバージョンが合わないと動かなかったりする)</DD>

<LI>configure.scanを編集して，configure.inを作る</LI>

<DD>大体最初はこんな感じにする．．．</DD>
<PRE>
AC_INIT(*)
AC_CONFIG_AUX_DIR(config)
AM_CONFIG_HEADER(config.h)
AM_INIT_AUTOMAKE(PROJECTNAME, VERSION_NO)

AC_PROG_CC
AC_PROG_RANLIB
AC_PATH_PROG(PERL, jperl) 

AC_CHECK_LIB(m, log)
AC_CHECK_LIB(socket, socket)

AC_ARG_ENABLE(conffile,
[ --enable-conffile          use conf file to setup[default no]])
if test "$enable_conffile" = "yes"; then
        AC_MSG_CHECKING(whether there is the conf file);
        if test -f conf/conf; then
                AC_MSG_RESULT(yes);
                . conf/conf;
        else
	        AC_MSG_RESULT(no)
        fi
fi

if test -n "$MOTSROOT"; then
        if test $prefix = NONE; then
	        prefix=$MOTSROOT
        fi
else 
        MOTSROOT=$prefix
fi


dnl AM_CONDITIONALは，条件に応じて，インストール方法をかえたりするのに利用する
dnl ChaSenのincludeファイルがあるディレクトリ CHAINCが定義されているかどうか
AM_CONDITIONAL(USECHA1, test -n "$CHAINC")

dnl ChaSenのlibraryファイルがあるディレクトリ CHALIBが定義されているかどうか
AM_CONDITIONAL(USECHA2, test -n "$CHALIB")

dnl Motitoolsのインストール先, MOTSROOTが定義されているかどうか
AM_CONDITIONAL(SETMTLS, test -n "MOTSROOT")

AC_SUBST(CHALIB)
AC_SUBST(CHAINC)
AC_SUBST(MOTSROOT)

dnl 各変数(っていうの？)は，AC_SUBSTをすることで，configure.inの外でも利用
dnl できるようになる．

dnl この例では，USECHA1, USECHA2, SETMTLSの3つの変数(っていうの？)
dnl をMakefile.am 内の条件文に利用することができる！
dnl ChaSenのライブラリのありかを定義していなければ，chasenの
dnl ライブラリを読み込む必要のあるプログラムはコンパイルしない，とか．


dnl perlのパスも環境により色々なので，installするプログラムにperlの
dnl スクリプトを含むような場合も，@PERL@にしておいて，パスを埋め込めるよう
dnl にすると便利．

AC_SUBST(PERL) 

AC_HEADER_STDC
AC_CHECK_HEADERS(limits.h)

AC_TYPE_SIZE_T
AC_CHECK_FUNCS(strdup)

AC_OUTPUT([Makefile \
        src/Makefile \
        conf/Makefile \
        config/Makefile])

</PRE>

<LI>とりあえず，頑張って Makefile.amを書く</LI>
<LI>bootstrap (初期)を準備</LI>
<PRE>

set -x
aclocal -I config
autoheader
automake --foreign --add-missing --copy
autoconf

</PRE>

<LI>で，bootstrapを実行</LI>
<DD>問題なければ，configure, config.h や 指定先の各ディレクトリに 
Makefile.inができるはず．</DD>

<LI>./configure を実行</LI>
<DD>ただし，自分標準では，--enable-conffileを絶対付ける</DD>
<PRE>
% ./configure --enable-conffile
</PRE>

<DD>そのために，conf/confも編集しておく</DD>
<PRE>
#
# 自分が良く使う conf fileの例：
#
# 自分作成ツールのインストール場所 (MOTSROOT) の指定 
#
#MOTSROOT=
MOTSROOT=/opt/nlp/tools/motitools
#
#--2. GETA を install した場所 (GETAROOT) の指定 
#
#  GETAをinstallしてから，ここを指定する．
#
GETAROOT=
#GETAROOT=/opt/nlp/tools/geta
#
#
#--3. ChaSenによる形態素解析を内部で行なうための設定
#
#  --3.1 includeファイル (chasen.h) のある場所を指定
#CHAINC=
CHAINC=/opt/nlp/include
#
#  --3.2 chasen 2.2.xのライブラリのある場所を指定
#    libchasen.a がある場所です．
#  
#CHALIB=
CHALIB=/opt/nlp/lib
</PRE>

</OL>


</UL>
</BODY>
</HTML>

