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