蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

intel macでpostgres7 + php4

古いバージョンのpostgresとphpインストールできないということでヘルプを求められたので,研究室のintel Mac miniに入れてみた.readlineはなくても不便なだけで死にはしないし,インストールできたってことなのでパス.
まずはpostgresをインストール.普通に

./configure
make

すると,確かにエラーが発生する.エラーの状況はPostgreSQL: Postgresql7.4.11 compilation failing on Mac Intelsと同一.そこで,エラーメッセージの通り

./configure --disable-spinlocks

しても,やはりほぼ同じところでエラー.

./../../../src/include/storage/s_lock.h:551: 
error: conflicting types for 'slock_t'
../../../../src/include/pg_config_os.h:11: 
 error: previous declaration of 'slock_t' was here

メッセージによると'slock_t'の宣言がconflictしているというので,両ファイルを覗いてみる.そして,とりあえず,src/include/pg_config_os.h(実体はsrc/include/port/darwin.h)の11行目をコメントアウト

typedef unsigned char slock_t;

/* typedef unsigned char slock_t; */

もっとも僕はconflictしているうちのどちらをコメントアウトした方が良いのか,あるいはそんなことをしちゃダメなのかは分かりませんので悪しからず.とりあえずこれでmakeはできるようになりましたよ,ということ.なお,コンパイラは"gcc version 4.0.1"です.gcc_selectしてもこれしか出てきませんでした.
次にphp4のコンパイル.これは普通に

./configure '--with-pgsql' '--with-apxs' '--with-xml' '--enable-mbstring' '--enable-mbregex'
make
make install

で問題なくインストールできた.
最後にphpが使えるようにhttpd.confを書き換えて,apachectl startしたところ,localhostからならウェブページが表示できるようになった.phpinfo()を表示させるテストページもOK.
ところが,自分のPCからブラウザで見ようとしても,タイムアウトしてしまう.ファイアウォールのせいなので,システム共有設定の「共有」というところにあるファイアウォールの設定において,port 80を許可する.といっても学内のネットワークだからVLAN内からしか見えないけど.

10/14追記

postgresでspinlockを使わない(./configure --disable-spinlocks)というのはやはり避けたい.ということで,src/include/port/darwin.hに以下を追記した.

#if defined(__i386__)
#define HAS_TEST_AND_SET
#endif

HAS_TEST_AND_SETの意味についてはsrc/include/storage/s_lock.hに書いてあるが,果たしてintel Macの場合にこれでいいのかはやっぱり謎.ともかく,この後に

make distclean
./configure
make

を実行したところ,makeは完了した.しかし,これは危険だからやめた方がいいかもね.