2012年4月5日木曜日

netatalk-2.xをCygwinでビルドしますとcat: command not found等を連発する件

Cygwinにて、netatalkのconfigureを実行中、Checking Berkeley DB libraryの辺りから挙動が怪しくなります:

checking Berkeley DB library (-ldb46)...
./configure: line 31862: cat: command not found
./configure: line 31865: cat: command not found
./configure: line 31866: cat: command not found
./configure: line 31889: rm: command not found
./configure: line 31919: sed: command not found


PATHが壊されているものと推測。

追求してみました。次の行で壊れています:

eval export $shlibpath_var=$bdblibdir

このshlibpath_varの出所は:

  dynamic_linker='Win32 ld.exe'
  # FIXME: first we should search . and the directory the executable is in
  shlibpath_var=PATH


ここで壊れる原因を作っているようです。

取り敢えずの回避策につきましては、

aclocal.m4を修正します:

  dynamic_linker='Win32 ld.exe'
  # FIXME: first we should search . and the directory the executable is in
  shlibpath_var=LIBPATH


PATHをLIBPATHに変えただけです。

この後、

autoconf
./configure --with-bdb=/usr/local
make

等でビルドを進めて行きます。

netatalk-3 の場合は、ちょっと下の『shlibpath_varの件は』を参照。

―――

bin/megatron/macbin.cの90行目辺り:

bin.gmtoff = tp->tm_gmtoff;

tm_gmtoffが無い、といわれた場合は、config.hのNO_STRUCT_TM_GMTOFFを定義する必要が有りそうです。

/* Define if the gmtoff member of struct tm is not available */
#define NO_STRUCT_TM_GMTOFF 1

本当は、configure.acを触って、cygwinの場合は、AC_DEFINE(NO_STRUCT_TM_GMTOFF)を加えるのがより良い方法と思いますが、今回はこれで。。。

―――

shlibpath_varの件は、/usr/share/aclocal/libtool.m4を修正した方が根本解決になるかもしれません。:

  # FIXME: first we should search . and the directory the executable is in
  shlibpath_var=LIBPATH


libtool.m4が無い場合は、Cygwinのsetup.exeでlibtoolを入れておきましょう

次に、再構築:

aclocal -I macros
autoconf
./configure --with-bdb=/usr/local
make

―――

NO_STRUCT_TM_GMTOFFの件は、configure.acを修正できます:

1箇所目。前後の文言で探して、太字部分を足す:

dnl --------------------- determine operating system from "target"
case "$host_os" in
...

 *cygwin*)   this_os=cygwin ;;esac

2箇所目。前後の文言で探して、太字部分を足す:

dnl ----- Cygwin specific -----
if test x"$this_os" = "xcygwin"; then
 AC_MSG_RESULT([ * CYGWIN specific configuration])
 AC_DEFINE(NO_STRUCT_TM_GMTOFF, 1, [Define if the gmtoff member of struct tm is not available])
fi

dnl ------ Check for sendfile() --------
次に、再構築:

autoconf
./configure --with-bdb=/usr/local
make

―――

checking whether to enable srvloc (SLP) support... no
./configure: line 15955: syntax error near unexpected token
`AVAHI,'

macros/zeroconf.m4で、PKG_CHECK_MODULESが解決できないために出ている様です。

Cygwinのsetup.exeで、pkg-configを入れましょう。

―――

/bin/sh ../../libtool --tag=CC    --mode=compile gcc -std=gnu99 -DHAVE_CONFIG_H -I. -I../..      -I../../include -D_U_="__attribute__((unused))" -g -O2 -I../../sys -MT cache.lo -MD -MP -MF .deps/cache.Tpo -c -o cache.lo cache.c
../../libtool: line 879: X--tag=CC: command not found
../../libtool: line 912: libtool: ignoring unknown tag : command not found
../../libtool: line 879: X--mode=compile: command not found


netatalk付属のlibtoolの挙動が怪しかったら、/bin/libtoolから持って来ましょう。
―――

4 件のコメント:

  1. うーむ。これは非常に興味深い。

    返信削除
  2. はじめまして。
    コメントありがとうございます! (^^

    返信削除
  3. NTFSで使えない文字はどうするんだろうと思ってましたが、
    Unicodeの私用領域に置換するので大丈夫みたいですね。
    あと、cygwinはlibattrも用意してるので、ちゃんと動く可能性がありますね。
    rootの権限とかはどうなるんでしょうか。
    他のOSでのビルドに影響しないようなパッチを提供して頂ければ、本家に取り込みますが、どうですか。
    ただし、netatalk 2.2.xは収束方向なので、やるとすればnetatalk 3.0になります。

    返信削除
  4. コメントありがとうございます^^

    実は、DHCAST128とDHX2の実装を調べるために(ぱくるために)、netatalkを利用させて頂いています。

    そもそもCygwinで動くかどうかも、未だ判りません。

    これから検証して行こうと思います^^;

    返信削除