Python330b1 を野良ビルドする
懲りずに挑戦してみる。3.2 の時にあてたパッチをしてから
./configure CFLAGS=-Wno-long-double --with-threads --enable-shared
で make
。
Modules/posixmodule.c: In function `posix_chown':
Modules/posixmodule.c:3000: error: `lchown' undeclared (first use in this function)
Modules/posixmodule.c:3000: error: (Each undeclared identifier is reported only once
Modules/posixmodule.c:3000: error: for each function it appears in.)
というエラーが出てしまった。該当箇所を見てみると、
/*
* This is for Mac OS X 10.3, which doesn't have lchown.
* (But we still have an lchown symbol because of weak-linking.)
* It doesn't have fchownat either. So there's no possibility
* of a graceful failover.
*/
というコメントが書いてあった。Panther 用に用意してあるんだね。確かに unistd.h
を見ても lchown や fchownat が存在していなかった。回避策は無いって何ね?というか #pragma weak
ディレクティブって何ね?
if ((!follow_symlinks) && (lchown == NULL)) {
の後ろの部分は自明(存在しない)のだから削除っちゃっても良いのかな。「無い = NULL」ということでもないだろうけど、それでいこう。
あと socketmodule.c
でもエラーが出てるけど struct ctl_info info;
のサイズが分からんのやて。構造体、どこで定義されてるんかな。find . -name *h | xargs grep ctl_info
で探しても見付からなかった。
どうやら、システムの kern_control.h
に書いてあるようだ。ぐぬぬ、またしても ctl_info
が存在してないや。新しいのが developer.apple.com に載ってるけど、CTLIOCGINFO とかも書いてあった。軒並エラーになってるやつだ。つまり、既存のヘッダファイルに書かれて無いものを使っていると。
setup.py に下記のように書けば静かになるけど、どうしてこんなにモジュールを作れなくなったんだろう?alpha 版の時よりは進むようになって、最終的にバイナリを作ることが出来たけどね。
disabled_module_list = ['_curses', '_curses_panel',
'_gestalt', '_socket', '_ssl']
kern_control.h
は pyconfig.h
で読み込まれているから、
/* Define to 1 if you have the <sys/kern_control.h> header file. */
#define HAVE_SYS_KERN_CONTROL_H 1
をコメントアウトするかな。う〜む、無意味だった何も変わらない。
socketmodule.h
を下記のように変更して、ダウンロードした kern_control.h
を見させるようにしてみた(既存のライブラリには機能が無いので実際に使う際にエラーになっちゃうけど)。
#ifdef HAVE_SYS_KERN_CONTROL_H
/* #include <sys/kern_control.h> */
#include "kern_control.h"
#endif
一歩進んだけど、次は iovec うんぬんのエラーに。
これは sys/uio.h
を見る。ちゃんと定義されてるしおかしなところは無さそう。で、socketmodule.c
の上の方に
#if defined(__OpenBSD__)
# include <sys/uio.h>
#endif
と書かれていた。ビルドするのは自分だけの環境なので読み込ませるために if endif を外す。これで socket と ssl が生成された。curses はどうしてかな?バージョンが古いのかも。
エラーの内容は下記。
WARNING: renaming "_curses" since importing it failed: dlcompat: dyld: ./python.exe Undefined symbols:
build/lib.macosx-10.3-ppc-3.3/_curses.so undefined reference to _mvwadd_wch expected to be defined in a dynamic image
build/lib.macosx-10.3-ppc-3.3/_curses.so undefined reference to _mvwaddnwstr expecte
検索すると Issue3786 が見付かった。だけど関係無さそう。パッチもあったので試した...変化なし。その他に LD_RUN_PATH と LD_LIBRARY_PATH をセットしてみそ?というのがあった。configure をやり直して...意味無かった。
そういえば curses.h
は入っていたのだけど、あとから ncurses を野良で入れたんだったな。libcurses は無くて libncurses ならあるんだよ。こちらを見てくれるようにすればいいかも。
とりあえず b1 の段階ではここまでにしておこう。ソースディレクトリの中で python.exe のままテストをしてみる。題材は自作の仮名使い変換スクリプトね。この程度なら問題なく処理することができた。やっぱ Python は速いわ。