On 2010-08-12, at 5:54 PM, Ned Deily wrote:
> In article <[email protected]>,
> Sridhar Ratnakumar <[email protected]> wrote:
>
>> When Python 2.6 is built with --universal-archs=intel, the default Python
>> binary is symlinked to the 32-bit binary:
>>
>> lrwxr-xr-x 1 root admin 12 10 Aug 15:31 python -> python2.6-32
>>
>> Python 2.7, however, is 64-bit by default. Is there a particular reason why
>> this behaviour is different for 2.6 (and 3.1)?
>
> For 2.7 and (upcoming) 3.2, code was added to allow dynamic selection of
> arch of a universal Python build, like so:
>
> arch -i386 /usr/local/bin/python2.7
> arch -x86_64 /usr/local/bin/python2.7
>
> Without the use of arch, OS X defaults to an appropriate default, on
> 10.6 preferring x86_64 if available.
>
> On earlier versions like 2.6 and 3.1, the "arch" trick does not work
> because an execv(2) was used in the "wrapper" program
> (Mac/Tools/pythonw.c) to run the real interpreter and that causes the
> interpreter to run in the OS's preferred arch. The new releases
> modified pythonw.c to use posix_spawnv(2) to ensure the interpreter is
> started using the same CPU arch as the wrapper program is running in.
> (The Apple-supplied /usr/bin/python in 10.6 takes a somewhat different
> approach to the problem.)
>
> n the earlier versions (2.6/3.1 and earlier), the solution for universal
> variants with 32-/64-bit archs was to install separate 32-bit-only and
> 64-bit-only interpreter executable files and install separate wrapper
> programs for each (python2.6-32 and python2.6-64) with the default names
> (python2.6/python) always symlinked to the 32-bit version.
>
> It would be possible to backport the 2.7/3.2 solution to 2.6 but, as it
> affects both pythonw.c and various parts of the configure and make
> files, it's not likely to be done, certainly not for the imminent 2.6.6
> release.
Thanks for the explanation.
However, I see all three variants (32, 64, and 2-way) in the default 2.6.6c1
install (i.e., internal ActivePython build, though this is likely the case for
the python.org's 10.5 installer as well):
-rwxr-xr-x 1 root admin 12644 10 Aug 15:30
/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6-32
-rwxr-xr-x 1 root admin 12680 10 Aug 15:30
/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6-64
-rwxr-xr-x 1 root admin 24968 10 Aug 15:30
/Library/Frameworks/Python.framework/Versions/2.6/bin/python2.6-all
But bin/python2.6 itself links to python2.6-32. What about changing that to
python2.6-all - thus leaving the choice of arch to OS loader instead of the
Python's build system?
Effectively, this change would likely come down to this patch:
sridh...@whymac:~/code/o/py/release26-maint/Mac > dif
Index: Makefile.in
===================================================================
--- Makefile.in (revision 83986)
+++ Makefile.in (working copy)
@@ -83,10 +83,10 @@
ln -sf python$(VERSION)-all "$(DESTDIR)$(prefix)/bin/python-all"
ln -sf pythonw$(VERSION)-all "$(DESTDIR)$(prefix)/bin/pythonw-all"
- ln -sf pythonw$(VERSION)-32
"$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)"
- ln -sf python$(VERSION)-32
"$(DESTDIR)$(prefix)/bin/python$(VERSION)"
- ln -sf pythonw$(VERSION)-32 "$(DESTDIR)$(prefix)/bin/pythonw"
- ln -sf python$(VERSION)-32 "$(DESTDIR)$(prefix)/bin/python"
+ ln -sf pythonw$(VERSION)-all
"$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)"
+ ln -sf python$(VERSION)-all
"$(DESTDIR)$(prefix)/bin/python$(VERSION)"
+ ln -sf pythonw$(VERSION)-all "$(DESTDIR)$(prefix)/bin/pythonw"
+ ln -sf python$(VERSION)-all "$(DESTDIR)$(prefix)/bin/python"
#
# Install unix tools in /usr/local/bin. These are just aliases for the
Is this something that can become part of 2.6.6 final?
-srid
_______________________________________________
Pythonmac-SIG maillist - [email protected]
http://mail.python.org/mailman/listinfo/pythonmac-sig
unsubscribe: http://mail.python.org/mailman/options/Pythonmac-SIG