#complexity or complication でしょうか?
#src/system.c
#あっそうですね。その二つの単語が混ざっちゃったみたいです。complexionという単語もあるのでまぎらわしい。
#IPv6をdisableにしてconfigureすると、gauche.netモジュールがビルドできない(on NetBSD 3.1_STABLE)
#まぁ、NetBSD 3.1自体がobsoleteだから、今さら追求しても仕方ないんだけど
#neneを上げなきゃいけないんかなぁ
#netlib.stub: In function `Scm_Init_netlib':
netlib.stub:1080: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1087: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1094: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1101: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1108: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1115: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1157: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1164: error: invalid application of `sizeof' to an incomplete type
netlib.stub:1185: error: invalid application of `sizeof' to an incomplete type
gmake[2]: *** [netlib.o] Error 1
#これって、実際にはどこの行が対象になるんだろうか...
#netlib.c の最後の #line nnn "netlib.stub" の行から、(1080 - nnn) 行目くらいかな
#IPv6は全く関係ないっぽい
#単にNetBSDが古いのが問題なのかな
#1080-481=599
#header file のinclude が足りていないとかじゃないかな
#ふむ
#scm__rc.d1305[0] = Scm_Intern(SCM_STRING(SCM_OBJ(&scm__sc.d1306[0]))); /* SIOCSIFFLAGS */
#これなのかなぁ
#コメントアウトしてもエラーになる行が変わらないから違うっぽいな
#コマンドラインオプションはないんだけど、
#SIOCSIFFLAGS だとして、それを実際に使っているところだと思います。その行では使ってない。
#genstubの中でcgen-genstubを呼ぶ周囲を(parameterize ((cise-emit-source-line #f)) ...) でかこったら#lineが出なくならないかな。
#(use gauche.cgen.cise)も必要かも。
#{int r;#if defined(GAUCHE_WINDOWS)
#こんなコードが生成されてビルドできません(@syslib.stub)
##lineが挿入されることに依存している部分があるのかな?
##line の行が改行を出力してくれているとおもって#ifの行はそれに頼ってるのかな
#make -n netlib.o で cc のコマンドラインがでるなら、-E つけてcc実行して出来た netlib.o から #line の行を削って cc1 に直接食わすのが(自分なら)手っ取り早い。
#Scm_DefineConst(mod, SCM_SYMBOL(scm__rc.d1303[0]), Scm_MakeInteger(SIOCGIFFLAGS));
#とりあえずこれらしい
#わかった
#HAVE_NET_IF_Hが定義されてないんだ
#何でだろ
#net/if.h あるのに
#ってか、なんか同じような現象に遭遇したようなかすかな記憶が...
#net/pfil.hをインクルードしないとだめっぽいが
#さすがに無条件にさせるわけにはいかんよなぁ...
#net/if.h で net/pfil.h を include してません?
#1.103 ですよね?
#はい
#あら
#してますね
#どこ見てんだ >俺
#よく見たら netbsd 4 でも configure は net/if.h こそ見つけているものの、 struct ifreq はないっていってるな。
#--- ext/net/net.ac (revision 6821)
+++ ext/net/net.ac (working copy)
@@ -49,8 +49,12 @@
dnl
dnl Check if net/if.h and struct ifreq
dnl
-AC_CHECK_HEADERS(net/if.h,,,[#include <sys/socket.h>])
+AC_CHECK_HEADERS(net/if.h,,,[
+#include <sys/types.h>
+#include <sys/socket.h>
+])
AC_CHECK_TYPES([struct ifreq],,,[
+#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
])
#これで一応通る
#sys/types.hなら、無条件でインクルードしても許されるんじゃないかな
#そう >ifreq
#にもかかわらず、result: yesになってるのがなぞ
#あれれ、configure.acの方でAC_CHECK_HEADERSやってるからsys/types.hは存在すればテストに#includeされると思ったんだけどな
#ああ、単にHAVE_SYS_TYPES_Hが#defineされるだけなのか。
#ってことはテストの#include <sys/types.h>を#ifdef HAVE_SYS_TYPES_Hで囲ってやれば安全かな。
#DIST gen したら netbsd-4 でも net/if.h みつからなくなった。
#そうですね、多分その方が安全だと思う >shiro
#AC_CHECK_HEADERS は第四引数が空かどうかで動作が変わるみたい。
#net.acの上の方でunconditionalにテストに#include <sys/types.h>してたりする
#Index: ext/net/net.ac
===================================================================
--- ext/net/net.ac (revision 6818)
+++ ext/net/net.ac (working copy)
@@ -49,8 +49,9 @@
dnl
dnl Check if net/if.h and struct ifreq
dnl
-AC_CHECK_HEADERS(net/if.h,,,[#include <sys/socket.h>])
+AC_CHECK_HEADERS(net/if.h,,,[AC_INCLUDES_DEFAULT() #include <sys/socket.h>])
AC_CHECK_TYPES([struct ifreq],,,[
+AC_INCLUDES_DEFAULT()
#include <sys/socket.h>
#include <net/if.h>
])
#こうしたらみつかるようになった
#おー、そういう方法があるのか。それでいこう。
#この場合、その上のAC_CHECK_HEADERSでnet/if.hが見つかってればstruct ifreqのテストの時にnet/if.hもAC_INCLUDES_DEFAULT()に含まれますよね?
#いや、されないみたい。
#s/されない/含まれない/
#むーん。autoconf version 2.61だとAC_INCLUDES_DEFAULTは定義されてない?
#そちらのautoconfのバージョンはいくつですか。
#2.62 ですね
#もしかして 2.61 だと AC_CHECK_HEADERS の第四引数が空でなくても sys/types.h の include もつくのかな?
#いや、ついてないですね。
#じゃあ直に書いたほうが無難ですかね
#sun_len も見つけ損ねている
#それはどのヘッダかな
#足りないのは
#un.h に sys/types.h が必要ですね
#sin_lenのところは?
#sin_len は何もしなくてもみつけてますね
#一応つけてみよう。これでどうかな。
#===================================================================
--- ext/net/net.ac (revision 6815)
+++ ext/net/net.ac (working copy)
@@ -27,7 +27,9 @@
if test $enable_ipv6 = yes; then
AC_CACHE_CHECK([for IPv6], ac_cv_ipv6, [
AC_TRY_COMPILE([
+#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
+#endif
#include <sys/socket.h>], [
socket(AF_INET6, SOCK_STREAM, 0);
], ac_cv_ipv6=yes, ac_cv_ipv6=no)])
@@ -49,18 +51,38 @@
dnl
dnl Check if net/if.h and struct ifreq
dnl
-AC_CHECK_HEADERS(net/if.h,,,[#include <sys/socket.h>])
+AC_CHECK_HEADERS(net/if.h,,,[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <sys/socket.h>
+])
AC_CHECK_TYPES([struct ifreq],,,[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
#include <sys/socket.h>
+#ifdef HAVE_NET_IF_H
#include <net/if.h>
+#endif
])
dnl
dnl Checks if sockaddr_in and sockaddr_in6 has *_len field
dnl
-AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[#include <sys/un.h>])
+AC_CHECK_MEMBERS([struct sockaddr_un.sun_len],,,[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <sys/un.h>
+])
AC_CHECK_MEMBERS([struct sockaddr_in.sin_len,
- struct sockaddr_in6.sin6_len],,,[#include <netinet/in.h>])
+ struct sockaddr_in6.sin6_len],,,[
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#include <netinet/in.h>
+])
dnl
dnl Check for some extra libraries
#checking for gdbm-dbm.h... no
checking for struct sockaddr_storage... yes
checking for net/if.h... yes
checking for struct ifreq... yes
checking for struct sockaddr_un.sun_len... yes
checking for struct sockaddr_in.sin_len... yes
checking for struct sockaddr_in6.sin6_len... yes
#ここではこうなりました。
#okみたいですね。(び)さんのところではどうかな。
#checking for struct sockaddr_storage... yes
checking for net/if.h... yes
checking for struct ifreq... yes
checking for struct sockaddr_un.sun_len... yes
checking for struct sockaddr_in.sin_len... yes
checking for struct sockaddr_in6.sin6_len... yes
#OKだと思います
#configure時に--enable-ipv6はつけていませんが
#commitしました。
#でも、そろそろneneのNetBSDもバージョンを上げた方がよさげな気がして来た
#あと、関係ないですが、Gauche-dbd-mysqlのtrunkは問題なくビルドできてます
#まはろ〜。
#Gauche-dbd-pgのtrunkもビルドOK
#どちらもリリース版が古過ぎるから、そろそろリリースしないとマズいなぁ
#というか、リリースをためらっていた理由がなんかあった気がするんだけどすでに忘却の彼方だ
#ちょっと前にTyped Schemeの話が出たとき、型推論やってなかったんじゃなかったっけって書き込んだんだけど、確かめたらちゃんと型推論やってましたね。variable arityな手続きの型のハンドリングも結構きちんとやってるっぽい (型宣言で型変数をB ... みたいに書けて、実際に与えられた引数のそれぞれの型にBが束縛されるというふうにできたり。)