[Anthy-dev 1811] uim-0.4.6alpha on Solaris8

Back to archive index

Konosuke Watanabe nosuk****@csc*****
2005年 2月 13日 (日) 07:29:43 JST


こんにちは,渡辺です.

uim-0.4.6正式リリースが近いようなので,Solarisでもビルドでき
るかどうか,r623で試してみました.残念ながらそのままではビル
ドできなかったのですが,あれこれいじった結果,なんとか動くよ
うになったので報告します.


まず,uim-helper.c で使われてる sig_tですが,これはSolarisに
はないみたいです.

単なるsignalハンドラだと信じて,とりあえずここは,

void (*old_sigpipe) (int);

と置き換えて切りぬけてみました.



それから,uim-ximの中で使われているstrsepなんですが,自前の
場合,util.hの中で「extern "C"」しないとuim-ximがリンクに失
敗します・・・.

が,これだけだとまだだめで,自前strsepの関数名を「uim_strsep」
のように「uim」で始まる名前にしないとuim-xim からリンクでき
ませんでした.

strsepやx_strsepみたいな「uim」で始まらない名前だと,libtool
がmake時にごにょごにょやって,libuim.soで関数が外から見えな
くなってしまうみたいです.
(nmで見ると,strsep関数は「GLOB」でなく「LOCL」になっている)

#初めての経験したんですが,これって常識なんでしょうか・・・?


これだけ直すと,ビルドは通るようになります.この状態で,普通
にgtk-demoとかで動き,uim-pref-gtkも動作しました.


ただ,これだとまだuim-ximが動きません.即SIGSEGVで落ちちゃい
ます.

とりあえず locale.cppのget_valid_localesで,localesのNULLチェッ
クをつけたところ先に進むようになりました.


が,まだだめで,今度はasprintf周辺で落ちてしまいます.

色々実験して調べてみた所,どうも以前メールした 自前 asprintf 
関数 に問題があることがわかりました.うー,申し訳ありません.


以下のようにしてやるとよさそうです.


+++ util.cpp    2005-02-13 04:11:12.000000000 +0900
@@ -85,9 +85,10 @@
 int vasprintf(char **ret, const char *fmt, va_list ap)
 {
     int len;
+    char c;

-    len = vsnprintf(NULL, 0, fmt, ap);
-    if (len <= 0)
+    len = vsnprintf(&c, 1, fmt, ap);
+    if (len < 0)
        return len;

     (*ret) = (char *)malloc(len + 1);


上記修正を入れたら,ようやくuim-ximがSolaris8でも上がるよう
になりました.

動かすためにいじった箇所の差分をメールに添付します.

 

---
Konosuke WATANABE <nosuk****@csc*****>
-------------- next part --------------
diff -NaruB uim-snapshot-r623/uim/strsep.c uim-snapshot-r623-2/uim-snapshot-r623/uim/strsep.c
--- uim-snapshot-r623/uim/strsep.c	2005-01-16 20:02:01.000000000 +0900
+++ uim-snapshot-r623-2/uim-snapshot-r623/uim/strsep.c	2005-02-13 06:38:57.000000000 +0900
@@ -45,7 +45,7 @@
  * If *stringp is NULL, strsep returns NULL.
  */
 char *
-strsep(char **stringp, const char *delim)
+uim_strsep(char **stringp, const char *delim)
 {
 	char *s;
 	const char *spanp;
diff -NaruB uim-snapshot-r623/uim/uim-helper.c uim-snapshot-r623-2/uim-snapshot-r623/uim/uim-helper.c
--- uim-snapshot-r623/uim/uim-helper.c	2005-02-08 20:02:04.000000000 +0900
+++ uim-snapshot-r623-2/uim-snapshot-r623/uim/uim-helper.c	2005-02-13 04:42:08.000000000 +0900
@@ -83,7 +83,7 @@
 {
   int res;
   int len, out_len;
-  sig_t old_sigpipe;
+  void (*old_sigpipe) (int);
   char *buf, *bufp;
 
   if (fd < 0)
diff -NaruB uim-snapshot-r623/uim/uim-ipc.c uim-snapshot-r623-2/uim-snapshot-r623/uim/uim-ipc.c
--- uim-snapshot-r623/uim/uim-ipc.c	2005-01-22 01:02:05.000000000 +0900
+++ uim-snapshot-r623-2/uim-snapshot-r623/uim/uim-ipc.c	2005-02-13 06:40:11.000000000 +0900
@@ -47,7 +47,8 @@
 #include "uim-helper.h"
 
 #ifndef HAVE_STRSEP
-char *strsep(char **stringp, const char *delim);
+char *uim_strsep(char **stringp, const char *delim);
+#define strsep(stringp, delim) uim_strsep(stringp, delim)
 #endif
 
 /* This function is come from the GNU C Library manual */
diff -NaruB uim-snapshot-r623/xim/locale.cpp uim-snapshot-r623-2/uim-snapshot-r623/xim/locale.cpp
--- uim-snapshot-r623/xim/locale.cpp	2005-02-13 07:07:58.000000000 +0900
+++ uim-snapshot-r623-2/uim-snapshot-r623/xim/locale.cpp	2005-02-13 04:43:11.000000000 +0900
@@ -283,6 +283,9 @@
     char *tmp, *tmpp;
     int len = 0;
 
+     if( locales == NULL )
+            return NULL;
+
     tmp = tmpp = strdup(locales);
     char *orig_locale = strdup(setlocale(LC_CTYPE, NULL));
 
diff -NaruB uim-snapshot-r623/xim/util.cpp uim-snapshot-r623-2/uim-snapshot-r623/xim/util.cpp
--- uim-snapshot-r623/xim/util.cpp	2005-01-16 20:02:01.000000000 +0900
+++ uim-snapshot-r623-2/uim-snapshot-r623/xim/util.cpp	2005-02-13 04:43:34.000000000 +0900
@@ -85,9 +85,10 @@
 int vasprintf(char **ret, const char *fmt, va_list ap)
 {
     int len;
+    char c;
 
-    len = vsnprintf(NULL, 0, fmt, ap);
-    if (len <= 0)
+    len = vsnprintf(&c, 1, fmt, ap);
+    if (len < 0)
 	return len;
 
     (*ret) = (char *)malloc(len + 1);
diff -NaruB uim-snapshot-r623/xim/util.h uim-snapshot-r623-2/uim-snapshot-r623/xim/util.h
--- uim-snapshot-r623/xim/util.h	2005-02-09 01:02:03.000000000 +0900
+++ uim-snapshot-r623-2/uim-snapshot-r623/xim/util.h	2005-02-13 06:44:12.000000000 +0900
@@ -56,6 +56,13 @@
 #endif
 
 #ifndef HAVE_STRSEP
-char *strsep(char **stringp, const char *delim);
+#ifdef __cplusplus
+extern "C" {
+#endif
+char *uim_strsep(char **stringp, const char *delim);
+#define strsep(stringp, delim) uim_strsep(stringp, delim)
+#ifdef __cplusplus
+}
+#endif
 #endif
 #endif


Anthy-dev メーリングリストの案内
Back to archive index