[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: nbitools on solaris 2.6/sparc



平松です。

At Tue, 17 Feb 2004 19:27:47 +0900,
ishit <ishit@oak.dti.ne.jp> wrote:
> rm -f *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a  tags TAGS make.log \#*
> rm -f -r Makefile.proto Makefile Makefile.dep bootstrap
> /opt/bsd/bin/bmake   Makefile.boot
> cd ./config/imake && /opt/bsd/bin/bmake   -f Makefile.ini BOOTSTRAPCFLAGS=""
> making imake with BOOTSTRAPCFLAGS= in config/imake
> cc -o ccimake  -O -I../../include -I../../imports/x11/include/X11 ccimake.c
> cc -c  -O -I../../include -I../../imports/x11/include/X11 `./ccimake` imake.c
> imake.c: In function `get_gcc_incdir':
> imake.c:1073: storage size of `sb' isn't known
> imake.c: In function `CleanCppInput':
> imake.c:1223: storage size of `st' isn't known
> imake.c: In function `ReadLine':
> imake.c:1432: storage size of `st' isn't known
> *** Error code 1

nbitoolsのディレクトリで make patch をすると、config/imake/imake.c の
150 行目くらいに

#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
/* This needs to be before _POSIX_SOURCE gets defined */
# include <sys/param.h>
# include <sys/types.h>
# include <sys/sysctl.h>
# include <sys/stat.h>
#endif

というブロックがあるのですが、これを

#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
/* This needs to be before _POSIX_SOURCE gets defined */
# include <sys/param.h>
# include <sys/sysctl.h>
#endif
#include <sys/types.h>
#include <sys/stat.h>

に変更してみるとどうでしょうか?以下のような理由でそう思ったのですが……

1. エラーメッセージを見ると、struct stat を定義したファイルが include されて
   いないのが原因らしい。

2. そこでgoogleで検索してみたところ、Solaris 8 の stat のマニュアルには

#include <sys/types.h> 
#include <sys/stat.h> 

   が書いてあるらしいので、2.6でも同じとすると、imake.cのどこかでこの2つの
   ファイルをincludeする必要がある。

3. 普通(?)に考えると
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
   を
#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__) || defined(SOLARIS)
   にしたいところですが、今のところsys/types.hとsys/stat.hは

NetBSD  -> 要る
FreeBSD -> 要る
Darwin  -> 要る
Solaris -> 要る(少なくとも Solaris 8 では)
Linux   -> 要る(マニュアルにはそう書いてある)

   となっている。

4. そこで、sys/types.hとsys/stat.hは常にincludeしても問題はない


> > 他に対処する方法ですが、nbitools ではなく、x11/imake と x11/XFree86-libs
> > を使って make するとか、あれば OS に付属する imake を使うようにするとか
> > 変更してしまってもよいと思います。
> 
>   x11/imakeは、not availabile on SunOS-5.6-sparc といわれてしまいます。

meta-pkgs/XFree86/Makefile.common には

ONLY_FOR_PLATFORM=      FreeBSD-*-i386 Linux-*-i386

と書いてありました。

-- 
// 平松 祥史
// hiramatu@boreas.dti.ne.jp