setup: drop legacy osx compiler tuning to enable universal builds
This was triggering deprecation warnings about migrating to `packaging.version`
from `distutils` Version classes with `make local`. But rather than migrate
that code, let's just get rid of some ~10-12 year old workarounds. As a bonus,
the cext libraries that are built are now universal binaries containing x86_64
and arm64 images (at least when built on macOS 11.4 with Xcode 12.5 and the
universal version of Python 3.9.13).
Several things to note here:
- Apple dropped support for 10.15 in Nov 2022, and OS X Lion that is
referenced is 10.7 (unsupported since late 2014)
- `xcode4` was basically always True because of the `>=` check (10.8 used
Xcode 5, and I have Xcode 10.2 on 10.14)
- `xcode51` was always False for modern-ish Xcode, because of the exact
version string matching
- Python 3.8 only supports OS X 10.9+; the Python 3.9.1+ universal installer
is macOS 11+ only, and Python 3.10 drops the x86_64 installer to deliver
only the universal installer.
All of this is to say, the only thing lost by dropping this code on modern Xcode
is that `os.environ['ARCHFLAGS'] = ''` is no longer set. But we probably
shouldn't be setting that anymore, as shown by the universal libraries now being
generated. I was able to `make local` and `python3 run-tests.py --local` with
python 3.9.9, Xcode 10.2, and macOS 10.14.6, and didn't incur any more than the
usual few test errors, so this should still work on some older versions of
macOS.
#!/usr/bin/env python3
#
# mercurial - scalable distributed SCM
#
# Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
import os
import sys
libdir = '@LIBDIR@'
if libdir != '@' 'LIBDIR' '@':
if not os.path.isabs(libdir):
libdir = os.path.join(
os.path.dirname(os.path.realpath(__file__)), libdir
)
libdir = os.path.abspath(libdir)
sys.path.insert(0, libdir)
# Make `pip install --user ...` packages available to the official Windows
# build. Most py2 packaging installs directly into the system python
# environment, so no changes are necessary for other platforms. The Windows
# py2 package uses py2exe, which lacks a `site` module. Hardcode it according
# to the documentation.
if getattr(sys, 'frozen', None) == 'console_exe':
vi = sys.version_info
appdata = os.environ.get('APPDATA')
if appdata:
sys.path.append(
os.path.join(
appdata,
'Python',
'Python%d%d' % (vi[0], vi[1]),
'site-packages',
)
)
from hgdemandimport import tracing
with tracing.log('hg script'):
# enable importing on demand to reduce startup time
try:
import hgdemandimport
hgdemandimport.enable()
except ImportError:
sys.stderr.write(
"abort: couldn't find mercurial libraries in [%s]\n"
% ' '.join(sys.path)
)
sys.stderr.write("(check your install and PYTHONPATH)\n")
sys.exit(-1)
from mercurial import dispatch
dispatch.run()