[Pythonmac-SIG] No arbitrary precison math on Mac-tel say it ain't so!
Alex Martelli
aleaxit at gmail.com
Sat Apr 22 18:50:31 CEST 2006
On Apr 22, 2006, at 1:59 AM, pythonmac-sig-request at python.org wrote:
> No arbitrary precison math on Mac-tel say it ain't so!
It ain't so.
> The analog of a single gene pool in nature has come to pass for
> arbitrary precison math (APM) for OS X (native not Python).
> GMP is 'it' for APM as far as I can tell unless I want to write my
> own.
I believe intel also has libraries (they offered them for beta at
some point, but I didn't follow through on that), but that's not the
key point.
> And GMP doesn't compile on Mac-tel and won't for some time:
>
> The current release is 4.2, released 2006-03-26. It fixes all bugs
> found in 4.1.4, as well as several portability problems. It also
> adds several new features. Note that we chose not to work around
> all new GCC bugs in this release. Never forget to do a make check
> after building the library to make likely it was not miscompiled!
>
> Issues with GMP 4.2:
>
> Miscompilation on several platforms using several different
> compilers. Remember to run make check!
> GMP does not build on MacInteltoch machines. Since Apple uses their
> own, creative assembly syntax, it is not trivial to fix this.
Nope. The current maintainer of GMP is apparently Apple-hostile AND
by his own admission no expert on autoconf/libtools and similar
blackmagic -- and apparently unable to admit it when he's dead wrong.
Apple's assembly syntax is totally irrelevant here. The reason make
check fails is Apple's creative *ld semantics*: an object file inside
a library file is NOT brought in if the only symbols it satisfies are
DATA ones.
Make check makes an executable with unresolved symbols because of
this strange "optimization" in Apple's ld (I dimly remember from the
past other linkers with this kind of strangeness), that's all.
Enrico Franchi posted to gmp-bugs, two weeks ago, a patch to gmp 4.2
which I had sent him -- it's a TINY patch (aparts from comments
explaining why it exists, it's just *THREE* bedraggled lines...!!!):
http://swox.com/list-archives/gmp-bugs/attachments/20060407/f364005b/
patch-0001.obj
GMP's maintainer rejected it as "THis is a too ugly patch for
inclusion in GMP." (!!!).
Anyway, download and apply that patch, and make check passes with
flying colors.
Then, I had the deadline for the 2nd ed of the Nutshell, then a
week's vacation at the Grand Canyon, and have been catching up on
things, so I haven't done any further followthrough - yet.
Once this idiocy is solved, there is another problem: I STILL can't
link gmpy.so beause I can't make libgmp.a to build properly for
linkage into a -bundle. Specifically (with gmpy.sf.net's current CVS
contents):
brain:~/alex/gmpy alex$ python setup.py build_ext -i
running build_ext
building 'gmpy' extension
creating build/temp.macosx-10.4-fat-2.4
creating build/temp.macosx-10.4-fat-2.4/src
gcc -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -
fno-strict-aliasing -Wno-long-double -no-cpp-precomp -mno-fused-madd -
fno-common -dynamic -DNDEBUG -g -O3 -I./src -I/usr/local/include -I/
Library/Frameworks/Python.framework/Versions/2.4/include/python2.4 -c
src/gmpy.c -o build/temp.macosx-10.4-fat-2.4/src/gmpy.o
gcc -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk -g
-bundle -undefined dynamic_lookup build/temp.macosx-10.4-fat-2.4/src/
gmpy.o -L/usr/local/lib -lgmp -o gmpy.so
/usr/bin/ld: for architecture i386
/usr/bin/ld: /usr/local/lib/libgmp.a(add_n.o) has local relocation
entries in non-writable section (__TEXT,__text)
/usr/bin/ld: for architecture ppc
/usr/bin/ld: warning /usr/local/lib/libgmp.a archive's cputype (7,
architecture i386) does not match cputype (18) for specified -arch
flag: ppc (can't load from it)
collect2: ld returned 1 exit status
lipo: can't open input file: /var/tmp//ccGbVJa4.out (No such file or
directory)
error: command 'gcc' failed with exit status 1
brain:~/alex/gmpy alex$
Don't worry about the failure on the ppc branch, that's just because
the .a is not universal and would presumably result in making a non-
universal .so -- could be fixed later. I've tried with a
nonuniversal 2.4.3 (from Activestate) and THAT halfbug goes away.
It's yet another TODO item, with lower priority than "the biggie" below.
The biggie is the like:
/usr/bin/ld: /usr/local/lib/libgmp.a(add_n.o) has local relocation
entries in non-writable section (__TEXT,__text)
I've tried ("manually", i.e. with CFLAGS=... on the ./configure of
GMP 4.2) various -f flags to try to make libgmp.a PIC (which I assume
is what's the error's complaining about?) -- -fPIC, -fno-common,
others; no luck so far. I've explored every mention on the web of
this errorcode about "local relocation entries in non-writable
section", but, no luck so far.
It may be trivial for people more deeply familiar with Apple's
toolchain (ld most of all) than I am, and I do have several at work I
can consult on that, but, as I said, I didn't yet have much time for
followup. Once I understand how to fix it with CFLAGS=..., then I
must understand how to embed the fix via autoconf/configure/libtools,
which is scary (MY knowledge of that part being very scarce).
Finally, there will be the political fight to make the maintainer
accept the resulting patches.
BTW, the biggie is fully reproducible on PPC Macs, too, so GMP 4.2
builds on those in a state which still doesn't let gmpy.so link (it
may feel less urgent just because GMP 4.1.* does build fine;-). I've
even tried using 4.1.* on mac-intel but it breaks in different ways
and it seems to me that there's no point fighting with that one, I
might well focus my limited time and energy on 4.2!-)
BTW**2, any advice from ANYbody with better grasp of Apple's ld, the
significance of -bundle vs -dylib, autoconf and friends, etc, etc,
will be most welcome!-)
Alex
More information about the Pythonmac-SIG
mailing list