写真集

Camera:Panasonic LUMIX DMC-LX3
Vine Linux と Ubuntu の設定方法など

Interix 6.1 で pkgsrc を試す texinfo-4.13

2011-02-09 13:11:20 | Interix6.1

Interix 6.1 (SUA Windows7) で texinfo のビルドがうまくいかない原因を調査しました。

下記の2つの関数が見つからないためです。
mbsinit
mbrtowc

m4-1.4.15 でも上記の関数が使用さてれいますがビルドが成功します。

  • Fedora 14 (Linux)の場合

    configure の結果
    checking for mbsinit... yes
    checking for mbrtowc... yes

    make の結果
    rm -f libm4.a
    ar cru libm4.a gl_avltree_oset.o c-ctype.o c-stack.o clean-temp.o execute.o exitfail.o fatal-signal.o fd-safer-flag.o dup-safer-flag.o freadahead.o freading.o gl_linkedhash_list.o gl_list.o localcharset.o lock.o malloca.o memchr2.o gl_oset.o pipe.o pipe2.o pipe2-safer.o printf-frexp.o printf-frexpl.o progname.o threadlib.o tls.o tmpdir.o verror.o version-etc.o version-etc-fsf.o wait-process.o xalloc-die.o gl_xlist.o xmalloca.o gl_xoset.o xprintf.o xstrndup.o xvasprintf.o xasprintf.o asnprintf.o asprintf.o basename.o basename-lgpl.o cloexec.o close-stream.o closein.o closeout.o dirname.o dirname-lgpl.o dup-safer.o fcntl.o fd-safer.o fflush.o filenamecat.o filenamecat-lgpl.o fopen-safer.o fpurge.o fseeko.o isnanl.o mkstemp-safer.o pipe-safer.o printf-args.o printf-parse.o quotearg.o regex.o stripslash.o strstr.o tempname.o vasnprintf.o vasprintf.o xmalloc.o
    ranlib libm4.a
    ..........
    gcc -std=gnu99   -g -O2   -o m4 m4.o builtin.o debug.o eval.o format.o freeze.o input.o macro.o output.o path.o symtab.o ../lib/libm4.a

  • Interix 6.1 の結果

    configure の結果
    checking for mbsinit... no
    checking for mbrtowc... no

    make の結果
    gcc -std=gnu99  -I.      -D_ALL_SOURCE -O -MT mbrtowc.o -MD -MP -MF .deps/mbrtowc.Tpo -c -o mbrtowc.o mbrtowc.c
    mv -f .deps/mbrtowc.Tpo .deps/mbrtowc.Po
    gcc -std=gnu99  -I.      -D_ALL_SOURCE -O -MT mbsinit.o -MD -MP -MF .deps/mbsinit.Tpo -c -o mbsinit.o mbsinit.c
    mv -f .deps/mbsinit.Tpo .deps/mbsinit.Po
    .....
    rm -f libm4.a
    ar cru libm4.a gl_avltree_oset.o c-ctype.o  c-stack.o clean-temp.o execute.o  exitfail.o fatal-signal.o  fd-safer-flag.o dup-safer-flag.o  freadahead.o freading.o  gl_linkedhash_list.o gl_list.o  localcharset.o lock.o malloca.o  memchr2.o gl_oset.o pipe.o  pipe2.o pipe2-safer.o printf-frexp.o  printf-frexpl.o progname.o threadlib.o  tls.o tmpdir.o verror.o  version-etc.o version-etc-fsf.o  wait-process.o xalloc-die.o gl_xlist.o  xmalloca.o gl_xoset.o xprintf.o  xstrndup.o xvasprintf.o xasprintf.o asnprintf.o asprintf.o basename.o basename-lgpl.o btowc.o cloexec.o close-stream.o closein.o closeout.o dirname.o dirname-lgpl.o dup-safer.o error.o fcntl.o fd-safer.o fflush.o filenamecat.o filenamecat-lgpl.o fopen-safer.o fpending.o fpurge.o frexp.o frexpl.o fseeko.o getopt.o getopt1.o isnanf.o isnanl.o mbrtowc.o mbsinit.o mkdtemp.o mkstemp-safer.o obstack.o pipe-safer.o printf-args.o printf-parse.o quotearg.o rawmemchr.o regex.o rmdir.o signbitd.o signbitf.o signbitl.o spawn_faction_addclose.o spawn_faction_adddup2.o spawn_faction_addopen.o spawn_faction_destroy.o spawn_faction_init.o spawnattr_destroy.o spawnattr_init.o spawnattr_setflags.o spawnattr_setsigmask.o spawni.o spawnp.o strchrnul.o strerror.o stripslash.o strndup.o strnlen.o strstr.o strtod.o tempname.o vasnprintf.o vasprintf.o wcrtomb.o xmalloc.o
    ranlib libm4.a
    .....
    gcc -std=gnu99   -D_ALL_SOURCE -O  -Wl,-R/usr/pkg/lib -o m4 m4.o builtin.o debug.o  eval.o format.o freeze.o  input.o macro.o output.o  path.o symtab.o ../lib/libm4.a   

関数が存在しないときはソースからライブラリ(libm4.a)を作成して組み込んでいるようです。
別の場所でmakeファイル等を直して、無いときはソースから作成するように変更してみました。
ソースはm4と同じものを使用しました。
------------------------------------------
gcc  -g -O2   -o ginfo dir.o display.o dribble.o echo-area.o filesys.o footnotes.o gc.o indices.o info-utils.o info.o infodoc.o infomap.o m-x.o man.o nodemenu.o nodes.o search.o session.o signals.o terminal.o tilde.o variables.o window.o doc.o ../lib/libtxi.a ../gnulib/lib/libgnu.a -lncurses 
display.o(.text+0xa1f): In function `mbiter_multi_next':
unix/src/gnu/texinfo-4.13/info/../gnulib/lib/mbiter.h:137: undefined reference to `_mbrtowc'
session.o(.text+0x6f0f): In function `mbiter_multi_next':
unix/src/gnu/texinfo-4.13/info/../gnulib/lib/mbiter.h:137: undefined reference to `_mbrtowc'
window.o(.text+0x26ff): In function `mbiter_multi_next':
unix/src/gnu/texinfo-4.13/info/../gnulib/lib/mbiter.h:137: undefined reference to `_mbrtowc'
collect2: ld returned 1 exit status
gmake[3]: *** [ginfo] Error 1
------------------------------------------
ビルドに失敗しました。mbsinitは消えましたがmbrtowcが残っています。
glibc-2.12.2のソースを見ると最後にエイリアスが仕込まれていますね。

libc_hidden_def (__mbrtowc)
weak_alias (__mbrtowc, mbrtowc)
libc_hidden_weak (mbrtowc)

ソースをglibc-2.12.2のに代えてビルドしてみます。

Interix は BSD と System V からの移行に対応で Linux にするよりいいですよってことみみたいですね。
GNU C Library (glibc) とBSD C Library は対応しています。
Interix の C Library は、System V よりなのかな。
----------------------------------------------------------

Gnulib module: mbsinit

Portability problems fixed by Gnulib:

  • This function is missing on some platforms: HP-UX 11.00, IRIX 6.5, Solaris 2.6, Interix 3.5.

----------------------------------------------------------


関数の詳細
http://www.gnu.org/software/hello/manual/gnulib/mbsinit.html
http://www.gnu.org/software/hello/manual/gnulib/mbrtowc.html

Interix についての参考
http://technet.microsoft.com/ja-jp/library/bb463202.aspx
http://technet.microsoft.com/ja-jp/interopmigration/bb380242.aspx
http://msdn.microsoft.com/ja-jp/library/bb463206.aspx