libchise on Mac OS X
守岡知彦 / MORIOKA Tomohiko
tomo @ kanji.zinbun.kyoto-u.ac.jp
2003年 3月 18日 (火) 17:28:32 JST
守岡です。
>>>>> <20030317042401.566CFBBFB @ euterpe.bun.kyoto-u.ac.jp> にて
>>>>> “宮崎さん”= Izumi MIYAZAKI <imiyazaki @ bun.kyoto-u.ac.jp> さま曰く:
宮崎さん> # C について全然分かっていないので、とりあえず守岡さんだけに
宮崎さん> # 投げます。
;; 同じく判ってないので、cc: chise-ja @ m17n.org しました。
宮崎さん> libchise の CVS 版が
宮崎さん> 2003-03-12 MORIOKA Tomohiko <tomo @ kanji.zinbun.kyoto-u.ac.jp>
宮崎さん> * chise.c (chise_dt_get_char): Use `chise_value_data' instead of
宮崎さん> `chise_value_to_c_string'; use `strnlen' and `chise_value_size'
宮崎さん> instead of `strlen'; fix problem about control characters.
宮崎さん> の修正が入った時点から Mac OS X 上でコンパイル出来なくなりま
宮崎さん> した。
宮崎さん> コンパイルエラーの出る strnlen について /usr/include や
宮崎さん> /sw/include を調べてみると、どうも Mac OS X には strnlen が
宮崎さん> ないように思いました。
なるほど。
宮崎さん> そこで MySQL のソースから strnlen を持ってきて一部修正した所
宮崎さん> 動いているように見えるのですが、これは正しいのでしょうか?
正しい気がします。
なお、glibc の man によれば、strnlen は GNU 拡張で、memchr は POSIX 出
典だそうですから、ここでは、strnlen を使わずに memchr を使った方が良い
のかも知れません。
;; 識者の意見求む。
宮崎さん> これで問題ないのであれば #ifndef HAVE_STRNLEN のような処理を
宮崎さん> CVS 版にも混ぜてもらえるとありがたいです。
という訳で、#ifndef HAVE_STRNLEN を入れるか strnlen を使わないかのどち
らかの方向で修正したいと思います。
宮崎さん> とりえあず Makefile なども含めて Mac OS X 用 diff をお送りし
宮崎さん> ますので、見てみて下さい。
ELF 環境のことしか考えてなくて(というか、なんにも考えてなくて)すみま
せん。(^_^;
やはり、こういうのは configure 使う方が良いんでしょうか?
宮崎さん> [2 libchise-macosx.diff <application/octet-stream (7bit)>]
宮崎さん> diff -uNr libchise/Makefile libchise.macosx/Makefile
宮崎さん> --- libchise/Makefile Mon Mar 17 13:04:41 2003
宮崎さん> +++ libchise.macosx/Makefile Mon Mar 17 12:58:34 2003
宮崎さん> @@ -1,6 +1,6 @@
宮崎さん> CC = gcc
宮崎さん> -CFLAGS = -g -O2 -c
宮崎さん> -LINKER = $(CC) -shared -o
宮崎さん> +CFLAGS = -g -O2 -Wall -no-cpp-precomp -I. -I/sw/include -c
宮崎さん> +LINKER = $(CC) -dynamiclib -L/sw/lib -o
宮崎さん> INCLUDE_INSTALLDIR = /usr/local/include
宮崎さん> LIB_INSTALLDIR = /usr/local/lib
宮崎さん> @@ -11,10 +11,10 @@
宮崎さん> RM = /bin/rm -f
宮崎さん> -all: libchise.so
宮崎さん> +all: libchise.dylib
宮崎さん> -libchise.so: chise.o
宮崎さん> - $(LINKER) libchise.so chise.o -ldb
宮崎さん> +libchise.dylib: chise.o
宮崎さん> + $(LINKER) libchise.dylib chise.o -ldb
宮崎さん> chise.o: chise.c chise.h
宮崎さん> $(CC) $(CFLAGS) chise.c
宮崎さん> @@ -25,17 +25,17 @@
宮崎さん> install.h:
宮崎さん> install -c chise.h $(INCLUDE_INSTALLDIR)
宮崎さん> -install.so: libchise.so
宮崎さん> - install -c libchise.so $(LIB_INSTALLDIR)/libchise.so.$(VERSION)
宮崎さん> - (cd $(LIB_INSTALLDIR); ln -sf libchise.so.$(VERSION) libchise.so)
宮崎さん> +install.so: libchise.dylib
宮崎さん> + install -c libchise.dylib $(LIB_INSTALLDIR)/libchise.dylib.$(VERSION)
宮崎さん> + (cd $(LIB_INSTALLDIR); ln -sf libchise.dylib.$(VERSION) libchise.dylib)
宮崎さん> install.db:
宮崎さん> -mkdir -p $(DB_INSTALLDIR)
宮崎さん> ln -sf `xemacs -q -batch -eval '(princ (file-name-as-directory exec-directory))'`char-db $(DB_INSTALLDIR)
宮崎さん> clean:
宮崎さん> - -$(RM) *.o *.so sample
宮崎さん> + -$(RM) *.o *.so *.dylib sample
宮崎さん> -sample: sample.c libchise.so
宮崎さん> - gcc -o sample sample.c -lchise
宮崎さん> +sample: sample.c libchise.dylib
宮崎さん> + gcc -dynamic -Wall -I/sw/include -I. -o sample sample.c -lchise
宮崎さん> diff -uNr libchise/chise.c libchise.macosx/chise.c
宮崎さん> --- libchise/chise.c Mon Mar 17 13:04:41 2003
宮崎さん> +++ libchise.macosx/chise.c Mon Mar 17 13:00:55 2003
宮崎さん> @@ -2,7 +2,6 @@
宮崎さん> #define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
宮崎さん> -
宮崎さん> int
宮崎さん> chise_open_data_source (CHISE_DS *ds, CHISE_DS_Type type, char *location)
宮崎さん> {
宮崎さん> @@ -268,3 +267,21 @@
宮崎さん> status = db->get (db, NULL, &keydatum, valdatum, 0);
宮崎さん> return status;
宮崎さん> }
宮崎さん> +
宮崎さん> +#ifndef HAVE_STRNLEN
宮崎さん> +
宮崎さん> +/* original in mysql, strings/strnlen.c.
宮崎さん> +uint strnlen(register const char *s, register uint maxlen)
宮崎さん> +{
宮崎さん> + const char *end= (const char *)memchr(s, '\0', maxlen);
宮崎さん> + return end ? (uint) (end - s) : maxlen;
宮崎さん> +}
宮崎さん> +*/
宮崎さん> +
宮崎さん> +int strnlen(register const char *s, register int maxlen)
宮崎さん> +{
宮崎さん> + const char *end= (const char *)memchr(s, '\0', maxlen);
宮崎さん> + return end ? (int) (end - s) : maxlen;
宮崎さん> +}
宮崎さん> +
宮崎さん> +#endif
宮崎さん> diff -uNr libchise/chise.h libchise.macosx/chise.h
宮崎さん> --- libchise/chise.h Mon Mar 17 13:04:41 2003
宮崎さん> +++ libchise.macosx/chise.h Mon Mar 17 01:29:26 2003
宮崎さん> @@ -1,6 +1,6 @@
宮崎さん> #ifndef _CHISE_H
宮崎さん> -#include <db.h>
宮崎さん> +#include <db3/db.h>
宮崎さん> #include <errno.h>
--
┯━…‥・懐かしい未来の記憶をふと思い出しかけた・‥…━━┯━━━┯━
││ ─ │ ─ / ─ ┼─ ┬ ─ ─┼ ┬┴─
┼┼─┼|〓━─┼ 守岡 知彦 (MORIOKA Tomohiko) <tomo @ m17n.org> ─ ─┬
┻┻━┻━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
More information about the CHISE-ja
mailing list