diff options
Diffstat (limited to 'Mac/Tools/fixapplepython23.py')
| -rw-r--r-- | Mac/Tools/fixapplepython23.py | 131 | 
1 files changed, 0 insertions, 131 deletions
diff --git a/Mac/Tools/fixapplepython23.py b/Mac/Tools/fixapplepython23.py deleted file mode 100644 index 18b95b3..0000000 --- a/Mac/Tools/fixapplepython23.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/python -"""fixapplepython23 - Fix Apple-installed Python 2.3 (on Mac OS X 10.3) - -Python 2.3 (and 2.3.X for X<5) have the problem that building an extension -for a framework installation may accidentally pick up the framework -of a newer Python, in stead of the one that was used to build the extension. - -This script modifies the Makefile (in .../lib/python2.3/config) to use -the newer method of linking extensions with "-undefined dynamic_lookup" -which fixes this problem. - -The script will first check all prerequisites, and return a zero exit -status also when nothing needs to be fixed. -""" -import sys -import os -import platform - -MAKEFILE='/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/Makefile' -CHANGES=(( -    'LDSHARED=\t$(CC) $(LDFLAGS) -bundle -framework $(PYTHONFRAMEWORK)\n', -    'LDSHARED=\t$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup\n' -    ),( -    'BLDSHARED=\t$(CC) $(LDFLAGS) -bundle -framework $(PYTHONFRAMEWORK)\n', -    'BLDSHARED=\t$(CC) $(LDFLAGS) -bundle -undefined dynamic_lookup\n' -    ),( -    'CC=\t\tgcc\n', -    'CC=\t\t/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-gcc\n' -    ),( -    'CXX=\t\tc++\n', -    'CXX=\t\t/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-g++\n' -)) - -GCC_SCRIPT='/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-gcc' -GXX_SCRIPT='/System/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/config/PantherPythonFix/run-g++' -SCRIPT="""#!/bin/sh -export MACOSX_DEPLOYMENT_TARGET=10.3 -exec %s "${@}" -""" - -def findline(lines, start): -    """return line starting with given string or -1""" -    for i in range(len(lines)): -        if lines[i][:len(start)] == start: -            return i -    return -1 - -def fix(makefile, do_apply): -    """Fix the Makefile, if required.""" -    fixed = False -    lines = open(makefile).readlines() - -    for old, new in CHANGES: -        i = findline(lines, new) -        if i >= 0: -            # Already fixed -            continue -        i = findline(lines, old) -        if i < 0: -            print('fixapplepython23: Python installation not fixed (appears broken)') -            print('fixapplepython23: missing line:', old) -            return 2 -        lines[i] = new -        fixed = True - -    if fixed: -        if do_apply: -            print('fixapplepython23: Fix to Apple-installed Python 2.3 applied') -            os.rename(makefile, makefile + '~') -            open(makefile, 'w').writelines(lines) -            return 0 -        else: -            print('fixapplepython23: Fix to Apple-installed Python 2.3 should be applied') -            return 1 -    else: -        print('fixapplepython23: No fix needed, appears to have been applied before') -        return 0 - -def makescript(filename, compiler): -    """Create a wrapper script for a compiler""" -    dirname = os.path.split(filename)[0] -    if not os.access(dirname, os.X_OK): -        os.mkdir(dirname, 0o755) -    fp = open(filename, 'w') -    fp.write(SCRIPT % compiler) -    fp.close() -    os.chmod(filename, 0o755) -    print('fixapplepython23: Created', filename) - -def main(): -    # Check for -n option -    if len(sys.argv) > 1 and sys.argv[1] == '-n': -        do_apply = False -    else: -        do_apply = True -    # First check OS version -    if sys.byteorder == 'little': -        # All intel macs are fine -        print("fixapplypython23: no fix is needed on MacOSX on Intel") -        sys.exit(0) - -    osver =  platform.mac_ver() -    if osver != '10.3' and os.ver < '10.3.': -        print('fixapplepython23: no fix needed on MacOSX < 10.3') -        sys.exit(0) - -    if osver >= '10.4': -        print('fixapplepython23: no fix needed on MacOSX >= 10.4') -        sys.exit(0) - -    # Test that a framework Python is indeed installed -    if not os.path.exists(MAKEFILE): -        print('fixapplepython23: Python framework does not appear to be installed (?), nothing fixed') -        sys.exit(0) -    # Check that we can actually write the file -    if do_apply and not os.access(MAKEFILE, os.W_OK): -        print('fixapplepython23: No write permission, please run with "sudo"') -        sys.exit(2) -    # Create the shell scripts -    if do_apply: -        if not os.access(GCC_SCRIPT, os.X_OK): -            makescript(GCC_SCRIPT, "gcc") -        if not os.access(GXX_SCRIPT, os.X_OK): -            makescript(GXX_SCRIPT, "g++") -    #  Finally fix the makefile -    rv = fix(MAKEFILE, do_apply) -    #sys.exit(rv) -    sys.exit(0) - -if __name__ == '__main__': -    main()  | 
