首先是环境:

[code=”bash”]
iusr-mbp:~ iusr$ uname -a
Darwin iusr-mbp 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386

iusr-mbp:~ iusr$ python -V
Python 2.7
[/code]

JCC是最新的pylucene-3.1.0-1里面的那份儿。

起因是想做个小东西,预计要用到Lucene。别看我不怎么用它,可我还真嫌java干起来太麻烦…虽然做这个也想为了方便工作时用,可也算业余时间折腾吧,实在懒得一本正经地Java。所以选择了PyLucene,自然,以前也没接触过。

按照http://lucene.apache.org/pylucene/jcc/documentation/install.html上的说明,看起来不难,可惜,果不其然,到了我这里就出问题了,诶。

出问题时的输出:

[code=”bash”]
iusr-mbp:jcc iusr$ python setup.py build
running build
running build_py
writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py
copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc
copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
running build_ext
building ‘jcc’ extension
gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch ppc -arch x86_64 -g -O2 -DNDEBUG -g -O3 -dynamiclib -D_jcc_lib -DJCC_VER=”2.8″ -I/System/Library/Frameworks/JavaVM.framework/Headers -I_jcc -Ijcc/sources -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c jcc/sources/jcc.cpp -o build/temp.macosx-10.5-fat3-2.7/jcc/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings
/usr/libexec/gcc/powerpc-apple-darwin10/4.0.1/as: assembler (/usr/bin/../libexec/gcc/darwin/ppc/as or /usr/bin/../local/libexec/gcc/darwin/ppc/as) for architecture ppc not installed
Installed assemblers are:
/usr/bin/../libexec/gcc/darwin/x86_64/as for architecture x86_64
/usr/bin/../libexec/gcc/darwin/i386/as for architecture i386
lipo: can’t open input file: /var/folders/Gy/Gyqx+dxCGlGc5LULCWn6Zk+++TI/-Tmp-//ccr6jC50.out (No such file or directory)
error: command ‘gcc-4.0’ failed with exit status 1
[/code]

也不知道是不是因为XCode刚更新过,给PPC的as明明是在 /usr/libexec/gcc/powerpc-apple-darwin10/4.0.1/as ,好吧,ln -s 一下到/usr/local/libexec/gcc/darwin/ppc/as 下面。结果还是不行…换了个错误:

[code=”bash”]
iusr-mbp:jcc iusr$ python setup.py build
running build
running build_py
writing /private/tmp/pylucene-3.1.0-1/jcc/jcc/config.py
copying jcc/config.py -> build/lib.macosx-10.5-fat3-2.7/jcc
copying jcc/classes/org/apache/jcc/PythonVM.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
copying jcc/classes/org/apache/jcc/PythonException.class -> build/lib.macosx-10.5-fat3-2.7/jcc/classes/org/apache/jcc
running build_ext
building ‘jcc’ extension
gcc-4.0 -fno-strict-aliasing -fno-common -dynamic -arch i386 -arch ppc -arch x86_64 -g -O2 -DNDEBUG -g -O3 -dynamiclib -D_jcc_lib -DJCC_VER=”2.8″ -I/System/Library/Frameworks/JavaVM.framework/Headers -I_jcc -Ijcc/sources -I/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c jcc/sources/jcc.cpp -o build/temp.macosx-10.5-fat3-2.7/jcc/sources/jcc.o -DPYTHON -fno-strict-aliasing -Wno-write-strings
/usr/bin/../local/libexec/gcc/darwin/ppc/as: can’t fork a new process to execute: /usr/bin/../local/libexec/gcc/darwin/ppc/as (Resource temporarily unavailable)
lipo: can’t open input file: /var/folders/Gy/Gyqx+dxCGlGc5LULCWn6Zk+++TI/-Tmp-//ccNXEZps.out (No such file or directory)
error: command ‘gcc-4.0’ failed with exit status 1
[/code]

郁闷了。折腾来折腾去都不行,直接cp过去给PPC的as也是不行,而且,真想不通为啥去为PPC编译,反正只是本地自己用。然后只好用python -v setup.py build 看了下输出,查到了编译前要调到distutils.unixcompiler.py,于是看了看源代码,看到有个_darwin_compiler_fixup方法很是可疑——敢情,这方法是会考虑ARCHFLAGS这个环境变量的——是啊!当初折腾编译、make时要折腾的若干叉叉叉FLAGS环境变量之一啊!看来后来一直都是被各种自动化工具养得白痴了,看来生命还是在于折腾。

于是乎,

[code=”bash”]
iusr-mbp:jcc iusr$ export ARCHFLAGS=”-arch x86_64 -arch i386″
[/code]

x86_64和i386怎么都够我用了~然后再python setup.py build以及python setup.py install,成功。这一来就不用考虑诸如Xapian这样的东西了,长的跟“下片儿”似的。

P.S.,distutils.unixcompiler._darwin_compiler_fixup前面的一段注释挺好玩,as usual。