{install} textsearch_ja 9.0.0 (with PostgreSQL 9.1.3) on QNAP TS-210

$ make
# make install
$ psql -f /opt/share/postgresql/contrib/textsearch_ja.sql test pgsql
make すると文字コードが原因らしきエラーが出る:
textsearch_ja.c:1: error: stray '\357' in program
textsearch_ja.c:1: error: stray '\273' in program
textsearch_ja.c:1: error: stray '\277' in program
ソースコードの文字コードは UTF-8。うちの GCC は EUC-JP のソースはコンパイルできているので,まあてきとうに文字コードを指定してみたけどダメ:
$ make CFLAGS='--input-charset=UTF-8 --exec-charset=EUC-JP'
cc1: error: conversion from UTF-8 to EUC-JP not supported by iconv
iconv -fUTF-8 -tEUC-JP は動くけどなあ。これじゃない iconv を使っているのかな(探しても見当たらないが)。LC_CTYPE=ja_JP.UTF-8 にして make してもダメ。しかたがないのでソースコードの文字コードを EUC-JP にした。

textsearch_ja.so の RPATH が /opt/lib:/share/MD0_DATA/.qpkg/Optware/lib などといったひどいことになっている。/share/MD0_DATA/.qpkg/Optware は /opt のリンク先。調べると PostgreSQL の pg_config がシンボリックリンクを実体に置き換えて表示している。アホか。リンク先じゃなくてリンク元の表記でアクセスしたいからわざわざそういうシンボリックリンクをつくっているんだろうが。

で,strings /opt/bin/pg_config すると /opt が出てくる。実行時にシンボリックリンクをリンク先に置き換えて表示しているようだ。pg_config のソースをいじるのはめんどくさそうなので,/opt/bin/pg_config の出力をいじる $HOME/bin/pg_config をつくる:
#!/bin/sh
/opt/bin/pg_config "$@" | sed 's|/share/MD0_DATA/.qpkg/Optware|/opt|g'
インストール後,doc/textsearch_ja.html に載っている機能紹介のサンプルをいろいろと入れてみたらすべて動いた。すげえ。

update : 2012/02/28 (Tue) 22:30:59