Subscribed unsubscribe Subscribe Subscribe

sci

最果て風呂

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.hpyconfig.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 は速いわ。