super-smack

$ wget http://vegan.net/tony/supersmack/super-smack-1.3.tar.gz
$ tar xvzf super-smack-1.3.tar.gz 
$ cd super-smack-1.3/
$ ./configure --with-mysql --prefix=$HOME --with-smacks-dir=$HOME/share --with-datadir=$HOME/var --with-mysql-lib=/usr/lib64/mysql/ --with-mysql-include=/usr/include/mysql

で動くかと思いきや、何カ所か手を入れる必要があった。

strlenが無い(おそらくgccが新しすぎる)って怒られる場合は、src/dictionary.hに下記を追加

#include <string.h>

また、キャストできない(おそらく64bit環境なため)って怒られる場合は、src/query.ccを修正。

--- query.cc~   2005-04-30 22:51:29.000000000 +0900
+++ query.cc    2009-10-11 19:05:46.000000000 +0900
@@ -197,7 +197,7 @@
     {
       string s((*i).first);
       int str_len = (*i).first.length();
-      if((unsigned)p + str_len + 3 *sizeof(int)  < (unsigned)p_end )
+      if((unsigned long)p + str_len + 3 *sizeof(long)  < (unsigned long)p_end )
       {
         *p++ = (char) str_len;
        const char* q_type_name = s.c_str();
@@ -216,7 +216,7 @@
        die(0, "report buffer overflow -- too many query types");
     }
   
-  len = (unsigned)p - (unsigned)buf;
+  len = (unsigned long)p - (unsigned long)buf;
   *(buf) = num_recs;
 
   if(write(fd, buf, len) != len)

並外れて投げやりな修正だが、動いているようだ。しかし、上記のようにsizeof(void *)==sizeof(int)を仮定している場所が他にもあるようなら、あまりマトモには動かないかもしれない。

また、インストールにflexとbison(or byacc)が必要なのだが、無くてもconfigureで何も言ってくれないので注意。