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は完了した.しかし,これは危険だからやめた方がいいかもね.