SILENT KILLERPanel

Current Path: > > lib64 > > python3.6


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //lib64//python3.6

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
asyncio Directory - -
collections Directory - -
concurrent Directory - -
config-3.6m-x86_64-linux-gnu Directory - -
ctypes Directory - -
curses Directory - -
dbm Directory - -
distutils Directory - -
email Directory - -
encodings Directory - -
ensurepip Directory - -
html Directory - -
http Directory - -
importlib Directory - -
json Directory - -
lib-dynload Directory - -
lib2to3 Directory - -
logging Directory - -
multiprocessing Directory - -
pydoc_data Directory - -
site-packages Directory - -
sqlite3 Directory - -
test Directory - -
unittest Directory - -
urllib Directory - -
venv Directory - -
wsgiref Directory - -
xml Directory - -
xmlrpc Directory - -
__future__.py File 4841 bytes December 23 2018 21:37:14.
__phello__.foo.py File 64 bytes December 23 2018 21:37:14.
_bootlocale.py File 1301 bytes December 23 2018 21:37:14.
_collections_abc.py File 26392 bytes December 23 2018 21:37:14.
_compat_pickle.py File 8749 bytes December 23 2018 21:37:14.
_compression.py File 5340 bytes December 23 2018 21:37:14.
_dummy_thread.py File 5118 bytes December 23 2018 21:37:14.
_markupbase.py File 14598 bytes December 23 2018 21:37:14.
_osx_support.py File 19138 bytes December 23 2018 21:37:14.
_pydecimal.py File 230228 bytes December 23 2018 21:37:14.
_pyio.py File 88097 bytes December 23 2018 21:37:14.
_sitebuiltins.py File 3115 bytes December 23 2018 21:37:14.
_strptime.py File 24747 bytes December 23 2018 21:37:14.
_sysconfigdata_dm_linux_x86_64-linux-gnu.py File 30191 bytes July 01 2025 22:10:37.
_sysconfigdata_m_linux_x86_64-linux-gnu.py File 30367 bytes July 01 2025 22:14:06.
_threading_local.py File 7214 bytes December 23 2018 21:37:14.
_weakrefset.py File 5705 bytes December 23 2018 21:37:14.
abc.py File 8727 bytes December 23 2018 21:37:14.
aifc.py File 32454 bytes December 23 2018 21:37:14.
antigravity.py File 477 bytes December 23 2018 21:37:14.
argparse.py File 90372 bytes December 23 2018 21:37:14.
ast.py File 12166 bytes December 23 2018 21:37:14.
asynchat.py File 11328 bytes December 23 2018 21:37:14.
asyncore.py File 20159 bytes December 23 2018 21:37:14.
base64.py File 20388 bytes December 23 2018 21:37:14.
bdb.py File 23556 bytes December 23 2018 21:37:14.
binhex.py File 13954 bytes December 23 2018 21:37:14.
bisect.py File 2595 bytes December 23 2018 21:37:14.
bz2.py File 12478 bytes December 23 2018 21:37:14.
cProfile.py File 5380 bytes December 23 2018 21:37:14.
calendar.py File 23213 bytes December 23 2018 21:37:14.
cgi.py File 37219 bytes July 01 2025 22:09:53.
cgitb.py File 12018 bytes December 23 2018 21:37:14.
chunk.py File 5425 bytes December 23 2018 21:37:14.
cmd.py File 14860 bytes December 23 2018 21:37:14.
code.py File 10614 bytes December 23 2018 21:37:14.
codecs.py File 36276 bytes December 23 2018 21:37:14.
codeop.py File 5994 bytes December 23 2018 21:37:14.
colorsys.py File 4064 bytes December 23 2018 21:37:14.
compileall.py File 12125 bytes December 23 2018 21:37:14.
configparser.py File 53592 bytes December 23 2018 21:37:14.
contextlib.py File 13162 bytes December 23 2018 21:37:14.
copy.py File 8815 bytes December 23 2018 21:37:14.
copyreg.py File 7007 bytes December 23 2018 21:37:14.
crypt.py File 1864 bytes December 23 2018 21:37:14.
csv.py File 16180 bytes December 23 2018 21:37:14.
datetime.py File 82034 bytes December 23 2018 21:37:14.
decimal.py File 320 bytes December 23 2018 21:37:14.
difflib.py File 84377 bytes December 23 2018 21:37:14.
dis.py File 18132 bytes December 23 2018 21:37:14.
doctest.py File 104391 bytes December 23 2018 21:37:14.
dummy_threading.py File 2815 bytes December 23 2018 21:37:14.
enum.py File 33606 bytes December 23 2018 21:37:14.
filecmp.py File 9830 bytes December 23 2018 21:37:14.
fileinput.py File 14471 bytes December 23 2018 21:37:14.
fnmatch.py File 3166 bytes December 23 2018 21:37:14.
formatter.py File 15143 bytes December 23 2018 21:37:14.
fractions.py File 23639 bytes December 23 2018 21:37:14.
ftplib.py File 35617 bytes July 01 2025 22:09:53.
functools.py File 31346 bytes December 23 2018 21:37:14.
genericpath.py File 5028 bytes July 01 2025 22:09:53.
getopt.py File 7489 bytes December 23 2018 21:37:14.
getpass.py File 5994 bytes December 23 2018 21:37:14.
gettext.py File 21530 bytes December 23 2018 21:37:14.
glob.py File 5638 bytes December 23 2018 21:37:14.
gzip.py File 20334 bytes December 23 2018 21:37:14.
hashlib.py File 8799 bytes July 01 2025 22:09:53.
heapq.py File 22929 bytes December 23 2018 21:37:14.
hmac.py File 6381 bytes July 01 2025 22:09:53.
imaplib.py File 53295 bytes December 23 2018 21:37:14.
imghdr.py File 3795 bytes December 23 2018 21:37:14.
imp.py File 10669 bytes December 23 2018 21:37:14.
inspect.py File 116958 bytes December 23 2018 21:37:14.
io.py File 3517 bytes December 23 2018 21:37:14.
ipaddress.py File 77818 bytes July 01 2025 22:09:53.
keyword.py File 2219 bytes December 23 2018 21:37:14.
linecache.py File 5312 bytes December 23 2018 21:37:14.
locale.py File 77300 bytes December 23 2018 21:37:14.
lzma.py File 12983 bytes December 23 2018 21:37:14.
macpath.py File 5971 bytes December 23 2018 21:37:14.
macurl2path.py File 2732 bytes December 23 2018 21:37:14.
mailbox.py File 78624 bytes December 23 2018 21:37:14.
mailcap.py File 9067 bytes July 01 2025 22:09:53.
mimetypes.py File 21042 bytes December 23 2018 21:37:14.
modulefinder.py File 23027 bytes December 23 2018 21:37:14.
netrc.py File 5684 bytes December 23 2018 21:37:14.
nntplib.py File 43078 bytes December 23 2018 21:37:14.
ntpath.py File 23094 bytes December 23 2018 21:37:14.
nturl2path.py File 2444 bytes December 23 2018 21:37:14.
numbers.py File 10243 bytes December 23 2018 21:37:14.
opcode.py File 5822 bytes December 23 2018 21:37:14.
operator.py File 10863 bytes December 23 2018 21:37:14.
optparse.py File 60371 bytes December 23 2018 21:37:14.
os.py File 37526 bytes December 23 2018 21:37:14.
pathlib.py File 46238 bytes July 01 2025 22:09:53.
pdb.py File 61320 bytes December 23 2018 21:37:14.
pickle.py File 55691 bytes December 23 2018 21:37:14.
pickletools.py File 91775 bytes December 23 2018 21:37:14.
pipes.py File 8916 bytes December 23 2018 21:37:14.
pkgutil.py File 21315 bytes December 23 2018 21:37:14.
platform.py File 47214 bytes July 01 2025 22:09:53.
plistlib.py File 32291 bytes July 01 2025 22:09:53.
poplib.py File 14964 bytes December 23 2018 21:37:14.
posixpath.py File 16324 bytes July 01 2025 22:09:53.
pprint.py File 20860 bytes December 23 2018 21:37:14.
profile.py File 22029 bytes December 23 2018 21:37:14.
pstats.py File 26564 bytes December 23 2018 21:37:14.
pty.py File 4763 bytes December 23 2018 21:37:14.
py_compile.py File 7181 bytes December 23 2018 21:37:14.
pyclbr.py File 13558 bytes December 23 2018 21:37:14.
pydoc.py File 103501 bytes July 01 2025 22:14:42.
queue.py File 8780 bytes December 23 2018 21:37:14.
quopri.py File 7262 bytes December 23 2018 21:37:14.
random.py File 27442 bytes December 23 2018 21:37:14.
re.py File 15552 bytes December 23 2018 21:37:14.
reprlib.py File 5336 bytes December 23 2018 21:37:14.
rlcompleter.py File 7097 bytes December 23 2018 21:37:14.
runpy.py File 11959 bytes December 23 2018 21:37:14.
sched.py File 6511 bytes December 23 2018 21:37:14.
secrets.py File 2038 bytes December 23 2018 21:37:14.
selectors.py File 19438 bytes December 23 2018 21:37:14.
shelve.py File 8515 bytes December 23 2018 21:37:14.
shlex.py File 12956 bytes December 23 2018 21:37:14.
shutil.py File 40829 bytes July 01 2025 22:09:53.
signal.py File 2123 bytes December 23 2018 21:37:14.
site.py File 21268 bytes July 01 2025 22:09:53.
smtpd.py File 34719 bytes December 23 2018 21:37:14.
smtplib.py File 44218 bytes December 23 2018 21:37:14.
sndhdr.py File 7088 bytes December 23 2018 21:37:14.
socket.py File 27443 bytes December 23 2018 21:37:14.
socketserver.py File 27010 bytes December 23 2018 21:37:14.
sre_compile.py File 19338 bytes December 23 2018 21:37:14.
sre_constants.py File 6821 bytes December 23 2018 21:37:14.
sre_parse.py File 36536 bytes December 23 2018 21:37:14.
ssl.py File 44509 bytes July 01 2025 22:09:53.
stat.py File 5038 bytes December 23 2018 21:37:14.
statistics.py File 20673 bytes December 23 2018 21:37:14.
string.py File 11795 bytes December 23 2018 21:37:14.
stringprep.py File 12917 bytes December 23 2018 21:37:14.
struct.py File 257 bytes December 23 2018 21:37:14.
subprocess.py File 62339 bytes December 23 2018 21:37:14.
sunau.py File 18095 bytes December 23 2018 21:37:14.
symbol.py File 2119 bytes December 23 2018 21:37:14.
symtable.py File 7277 bytes December 23 2018 21:37:14.
sysconfig.py File 24876 bytes July 01 2025 22:14:40.
tabnanny.py File 11411 bytes December 23 2018 21:37:14.
tarfile.py File 111510 bytes July 01 2025 22:09:53.
telnetlib.py File 23136 bytes December 23 2018 21:37:14.
tempfile.py File 28066 bytes July 01 2025 22:09:53.
textwrap.py File 19558 bytes December 23 2018 21:37:14.
this.py File 1003 bytes December 23 2018 21:37:14.
threading.py File 50136 bytes July 01 2025 22:09:53.
timeit.py File 13342 bytes December 23 2018 21:37:14.
token.py File 3075 bytes December 23 2018 21:37:14.
tokenize.py File 29496 bytes December 23 2018 21:37:14.
trace.py File 28733 bytes December 23 2018 21:37:14.
traceback.py File 23458 bytes December 23 2018 21:37:14.
tracemalloc.py File 16658 bytes December 23 2018 21:37:14.
tty.py File 879 bytes December 23 2018 21:37:14.
types.py File 8870 bytes December 23 2018 21:37:14.
typing.py File 80274 bytes December 23 2018 21:37:14.
uu.py File 6763 bytes December 23 2018 21:37:14.
uuid.py File 24020 bytes July 01 2025 22:09:53.
warnings.py File 18488 bytes December 23 2018 21:37:14.
wave.py File 17709 bytes December 23 2018 21:37:14.
weakref.py File 20466 bytes December 23 2018 21:37:14.
webbrowser.py File 21767 bytes December 23 2018 21:37:14.
xdrlib.py File 5913 bytes December 23 2018 21:37:14.
zipapp.py File 7157 bytes December 23 2018 21:37:14.
zipfile.py File 79924 bytes July 01 2025 22:09:53.

Reading File: //lib64//python3.6/_osx_support.py

"""Shared OS X support functions."""

import os
import re
import sys

__all__ = [
    'compiler_fixup',
    'customize_config_vars',
    'customize_compiler',
    'get_platform_osx',
]

# configuration variables that may contain universal build flags,
# like "-arch" or "-isdkroot", that may need customization for
# the user environment
_UNIVERSAL_CONFIG_VARS = ('CFLAGS', 'LDFLAGS', 'CPPFLAGS', 'BASECFLAGS',
                            'BLDSHARED', 'LDSHARED', 'CC', 'CXX',
                            'PY_CFLAGS', 'PY_LDFLAGS', 'PY_CPPFLAGS',
                            'PY_CORE_CFLAGS', 'PY_CORE_LDFLAGS')

# configuration variables that may contain compiler calls
_COMPILER_CONFIG_VARS = ('BLDSHARED', 'LDSHARED', 'CC', 'CXX')

# prefix added to original configuration variable names
_INITPRE = '_OSX_SUPPORT_INITIAL_'


def _find_executable(executable, path=None):
    """Tries to find 'executable' in the directories listed in 'path'.

    A string listing directories separated by 'os.pathsep'; defaults to
    os.environ['PATH'].  Returns the complete filename or None if not found.
    """
    if path is None:
        path = os.environ['PATH']

    paths = path.split(os.pathsep)
    base, ext = os.path.splitext(executable)

    if (sys.platform == 'win32') and (ext != '.exe'):
        executable = executable + '.exe'

    if not os.path.isfile(executable):
        for p in paths:
            f = os.path.join(p, executable)
            if os.path.isfile(f):
                # the file exists, we have a shot at spawn working
                return f
        return None
    else:
        return executable


def _read_output(commandstring):
    """Output from successful command execution or None"""
    # Similar to os.popen(commandstring, "r").read(),
    # but without actually using os.popen because that
    # function is not usable during python bootstrap.
    # tempfile is also not available then.
    import contextlib
    try:
        import tempfile
        fp = tempfile.NamedTemporaryFile()
    except ImportError:
        fp = open("/tmp/_osx_support.%s"%(
            os.getpid(),), "w+b")

    with contextlib.closing(fp) as fp:
        cmd = "%s 2>/dev/null >'%s'" % (commandstring, fp.name)
        return fp.read().decode('utf-8').strip() if not os.system(cmd) else None


def _find_build_tool(toolname):
    """Find a build tool on current path or using xcrun"""
    return (_find_executable(toolname)
                or _read_output("/usr/bin/xcrun -find %s" % (toolname,))
                or ''
            )

_SYSTEM_VERSION = None

def _get_system_version():
    """Return the OS X system version as a string"""
    # Reading this plist is a documented way to get the system
    # version (see the documentation for the Gestalt Manager)
    # We avoid using platform.mac_ver to avoid possible bootstrap issues during
    # the build of Python itself (distutils is used to build standard library
    # extensions).

    global _SYSTEM_VERSION

    if _SYSTEM_VERSION is None:
        _SYSTEM_VERSION = ''
        try:
            f = open('/System/Library/CoreServices/SystemVersion.plist')
        except OSError:
            # We're on a plain darwin box, fall back to the default
            # behaviour.
            pass
        else:
            try:
                m = re.search(r'<key>ProductUserVisibleVersion</key>\s*'
                              r'<string>(.*?)</string>', f.read())
            finally:
                f.close()
            if m is not None:
                _SYSTEM_VERSION = '.'.join(m.group(1).split('.')[:2])
            # else: fall back to the default behaviour

    return _SYSTEM_VERSION

def _remove_original_values(_config_vars):
    """Remove original unmodified values for testing"""
    # This is needed for higher-level cross-platform tests of get_platform.
    for k in list(_config_vars):
        if k.startswith(_INITPRE):
            del _config_vars[k]

def _save_modified_value(_config_vars, cv, newvalue):
    """Save modified and original unmodified value of configuration var"""

    oldvalue = _config_vars.get(cv, '')
    if (oldvalue != newvalue) and (_INITPRE + cv not in _config_vars):
        _config_vars[_INITPRE + cv] = oldvalue
    _config_vars[cv] = newvalue

def _supports_universal_builds():
    """Returns True if universal builds are supported on this system"""
    # As an approximation, we assume that if we are running on 10.4 or above,
    # then we are running with an Xcode environment that supports universal
    # builds, in particular -isysroot and -arch arguments to the compiler. This
    # is in support of allowing 10.4 universal builds to run on 10.3.x systems.

    osx_version = _get_system_version()
    if osx_version:
        try:
            osx_version = tuple(int(i) for i in osx_version.split('.'))
        except ValueError:
            osx_version = ''
    return bool(osx_version >= (10, 4)) if osx_version else False


def _find_appropriate_compiler(_config_vars):
    """Find appropriate C compiler for extension module builds"""

    # Issue #13590:
    #    The OSX location for the compiler varies between OSX
    #    (or rather Xcode) releases.  With older releases (up-to 10.5)
    #    the compiler is in /usr/bin, with newer releases the compiler
    #    can only be found inside Xcode.app if the "Command Line Tools"
    #    are not installed.
    #
    #    Furthermore, the compiler that can be used varies between
    #    Xcode releases. Up to Xcode 4 it was possible to use 'gcc-4.2'
    #    as the compiler, after that 'clang' should be used because
    #    gcc-4.2 is either not present, or a copy of 'llvm-gcc' that
    #    miscompiles Python.

    # skip checks if the compiler was overridden with a CC env variable
    if 'CC' in os.environ:
        return _config_vars

    # The CC config var might contain additional arguments.
    # Ignore them while searching.
    cc = oldcc = _config_vars['CC'].split()[0]
    if not _find_executable(cc):
        # Compiler is not found on the shell search PATH.
        # Now search for clang, first on PATH (if the Command LIne
        # Tools have been installed in / or if the user has provided
        # another location via CC).  If not found, try using xcrun
        # to find an uninstalled clang (within a selected Xcode).

        # NOTE: Cannot use subprocess here because of bootstrap
        # issues when building Python itself (and os.popen is
        # implemented on top of subprocess and is therefore not
        # usable as well)

        cc = _find_build_tool('clang')

    elif os.path.basename(cc).startswith('gcc'):
        # Compiler is GCC, check if it is LLVM-GCC
        data = _read_output("'%s' --version"
                             % (cc.replace("'", "'\"'\"'"),))
        if data and 'llvm-gcc' in data:
            # Found LLVM-GCC, fall back to clang
            cc = _find_build_tool('clang')

    if not cc:
        raise SystemError(
               "Cannot locate working compiler")

    if cc != oldcc:
        # Found a replacement compiler.
        # Modify config vars using new compiler, if not already explicitly
        # overridden by an env variable, preserving additional arguments.
        for cv in _COMPILER_CONFIG_VARS:
            if cv in _config_vars and cv not in os.environ:
                cv_split = _config_vars[cv].split()
                cv_split[0] = cc if cv != 'CXX' else cc + '++'
                _save_modified_value(_config_vars, cv, ' '.join(cv_split))

    return _config_vars


def _remove_universal_flags(_config_vars):
    """Remove all universal build arguments from config vars"""

    for cv in _UNIVERSAL_CONFIG_VARS:
        # Do not alter a config var explicitly overridden by env var
        if cv in _config_vars and cv not in os.environ:
            flags = _config_vars[cv]
            flags = re.sub(r'-arch\s+\w+\s', ' ', flags, flags=re.ASCII)
            flags = re.sub('-isysroot [^ \t]*', ' ', flags)
            _save_modified_value(_config_vars, cv, flags)

    return _config_vars


def _remove_unsupported_archs(_config_vars):
    """Remove any unsupported archs from config vars"""
    # Different Xcode releases support different sets for '-arch'
    # flags. In particular, Xcode 4.x no longer supports the
    # PPC architectures.
    #
    # This code automatically removes '-arch ppc' and '-arch ppc64'
    # when these are not supported. That makes it possible to
    # build extensions on OSX 10.7 and later with the prebuilt
    # 32-bit installer on the python.org website.

    # skip checks if the compiler was overridden with a CC env variable
    if 'CC' in os.environ:
        return _config_vars

    if re.search(r'-arch\s+ppc', _config_vars['CFLAGS']) is not None:
        # NOTE: Cannot use subprocess here because of bootstrap
        # issues when building Python itself
        status = os.system(
            """echo 'int main{};' | """
            """'%s' -c -arch ppc -x c -o /dev/null /dev/null 2>/dev/null"""
            %(_config_vars['CC'].replace("'", "'\"'\"'"),))
        if status:
            # The compile failed for some reason.  Because of differences
            # across Xcode and compiler versions, there is no reliable way
            # to be sure why it failed.  Assume here it was due to lack of
            # PPC support and remove the related '-arch' flags from each
            # config variables not explicitly overridden by an environment
            # variable.  If the error was for some other reason, we hope the
            # failure will show up again when trying to compile an extension
            # module.
            for cv in _UNIVERSAL_CONFIG_VARS:
                if cv in _config_vars and cv not in os.environ:
                    flags = _config_vars[cv]
                    flags = re.sub(r'-arch\s+ppc\w*\s', ' ', flags)
                    _save_modified_value(_config_vars, cv, flags)

    return _config_vars


def _override_all_archs(_config_vars):
    """Allow override of all archs with ARCHFLAGS env var"""
    # NOTE: This name was introduced by Apple in OSX 10.5 and
    # is used by several scripting languages distributed with
    # that OS release.
    if 'ARCHFLAGS' in os.environ:
        arch = os.environ['ARCHFLAGS']
        for cv in _UNIVERSAL_CONFIG_VARS:
            if cv in _config_vars and '-arch' in _config_vars[cv]:
                flags = _config_vars[cv]
                flags = re.sub(r'-arch\s+\w+\s', ' ', flags)
                flags = flags + ' ' + arch
                _save_modified_value(_config_vars, cv, flags)

    return _config_vars


def _check_for_unavailable_sdk(_config_vars):
    """Remove references to any SDKs not available"""
    # If we're on OSX 10.5 or later and the user tries to
    # compile an extension using an SDK that is not present
    # on the current machine it is better to not use an SDK
    # than to fail.  This is particularly important with
    # the standalone Command Line Tools alternative to a
    # full-blown Xcode install since the CLT packages do not
    # provide SDKs.  If the SDK is not present, it is assumed
    # that the header files and dev libs have been installed
    # to /usr and /System/Library by either a standalone CLT
    # package or the CLT component within Xcode.
    cflags = _config_vars.get('CFLAGS', '')
    m = re.search(r'-isysroot\s+(\S+)', cflags)
    if m is not None:
        sdk = m.group(1)
        if not os.path.exists(sdk):
            for cv in _UNIVERSAL_CONFIG_VARS:
                # Do not alter a config var explicitly overridden by env var
                if cv in _config_vars and cv not in os.environ:
                    flags = _config_vars[cv]
                    flags = re.sub(r'-isysroot\s+\S+(?:\s|$)', ' ', flags)
                    _save_modified_value(_config_vars, cv, flags)

    return _config_vars


def compiler_fixup(compiler_so, cc_args):
    """
    This function will strip '-isysroot PATH' and '-arch ARCH' from the
    compile flags if the user has specified one them in extra_compile_flags.

    This is needed because '-arch ARCH' adds another architecture to the
    build, without a way to remove an architecture. Furthermore GCC will
    barf if multiple '-isysroot' arguments are present.
    """
    stripArch = stripSysroot = False

    compiler_so = list(compiler_so)

    if not _supports_universal_builds():
        # OSX before 10.4.0, these don't support -arch and -isysroot at
        # all.
        stripArch = stripSysroot = True
    else:
        stripArch = '-arch' in cc_args
        stripSysroot = '-isysroot' in cc_args

    if stripArch or 'ARCHFLAGS' in os.environ:
        while True:
            try:
                index = compiler_so.index('-arch')
                # Strip this argument and the next one:
                del compiler_so[index:index+2]
            except ValueError:
                break

    if 'ARCHFLAGS' in os.environ and not stripArch:
        # User specified different -arch flags in the environ,
        # see also distutils.sysconfig
        compiler_so = compiler_so + os.environ['ARCHFLAGS'].split()

    if stripSysroot:
        while True:
            try:
                index = compiler_so.index('-isysroot')
                # Strip this argument and the next one:
                del compiler_so[index:index+2]
            except ValueError:
                break

    # Check if the SDK that is used during compilation actually exists,
    # the universal build requires the usage of a universal SDK and not all
    # users have that installed by default.
    sysroot = None
    if '-isysroot' in cc_args:
        idx = cc_args.index('-isysroot')
        sysroot = cc_args[idx+1]
    elif '-isysroot' in compiler_so:
        idx = compiler_so.index('-isysroot')
        sysroot = compiler_so[idx+1]

    if sysroot and not os.path.isdir(sysroot):
        from distutils import log
        log.warn("Compiling with an SDK that doesn't seem to exist: %s",
                sysroot)
        log.warn("Please check your Xcode installation")

    return compiler_so


def customize_config_vars(_config_vars):
    """Customize Python build configuration variables.

    Called internally from sysconfig with a mutable mapping
    containing name/value pairs parsed from the configured
    makefile used to build this interpreter.  Returns
    the mapping updated as needed to reflect the environment
    in which the interpreter is running; in the case of
    a Python from a binary installer, the installed
    environment may be very different from the build
    environment, i.e. different OS levels, different
    built tools, different available CPU architectures.

    This customization is performed whenever
    distutils.sysconfig.get_config_vars() is first
    called.  It may be used in environments where no
    compilers are present, i.e. when installing pure
    Python dists.  Customization of compiler paths
    and detection of unavailable archs is deferred
    until the first extension module build is
    requested (in distutils.sysconfig.customize_compiler).

    Currently called from distutils.sysconfig
    """

    if not _supports_universal_builds():
        # On Mac OS X before 10.4, check if -arch and -isysroot
        # are in CFLAGS or LDFLAGS and remove them if they are.
        # This is needed when building extensions on a 10.3 system
        # using a universal build of python.
        _remove_universal_flags(_config_vars)

    # Allow user to override all archs with ARCHFLAGS env var
    _override_all_archs(_config_vars)

    # Remove references to sdks that are not found
    _check_for_unavailable_sdk(_config_vars)

    return _config_vars


def customize_compiler(_config_vars):
    """Customize compiler path and configuration variables.

    This customization is performed when the first
    extension module build is requested
    in distutils.sysconfig.customize_compiler).
    """

    # Find a compiler to use for extension module builds
    _find_appropriate_compiler(_config_vars)

    # Remove ppc arch flags if not supported here
    _remove_unsupported_archs(_config_vars)

    # Allow user to override all archs with ARCHFLAGS env var
    _override_all_archs(_config_vars)

    return _config_vars


def get_platform_osx(_config_vars, osname, release, machine):
    """Filter values for get_platform()"""
    # called from get_platform() in sysconfig and distutils.util
    #
    # For our purposes, we'll assume that the system version from
    # distutils' perspective is what MACOSX_DEPLOYMENT_TARGET is set
    # to. This makes the compatibility story a bit more sane because the
    # machine is going to compile and link as if it were
    # MACOSX_DEPLOYMENT_TARGET.

    macver = _config_vars.get('MACOSX_DEPLOYMENT_TARGET', '')
    macrelease = _get_system_version() or macver
    macver = macver or macrelease

    if macver:
        release = macver
        osname = "macosx"

        # Use the original CFLAGS value, if available, so that we
        # return the same machine type for the platform string.
        # Otherwise, distutils may consider this a cross-compiling
        # case and disallow installs.
        cflags = _config_vars.get(_INITPRE+'CFLAGS',
                                    _config_vars.get('CFLAGS', ''))
        if macrelease:
            try:
                macrelease = tuple(int(i) for i in macrelease.split('.')[0:2])
            except ValueError:
                macrelease = (10, 0)
        else:
            # assume no universal support
            macrelease = (10, 0)

        if (macrelease >= (10, 4)) and '-arch' in cflags.strip():
            # The universal build will build fat binaries, but not on
            # systems before 10.4

            machine = 'fat'

            archs = re.findall(r'-arch\s+(\S+)', cflags)
            archs = tuple(sorted(set(archs)))

            if len(archs) == 1:
                machine = archs[0]
            elif archs == ('i386', 'ppc'):
                machine = 'fat'
            elif archs == ('i386', 'x86_64'):
                machine = 'intel'
            elif archs == ('i386', 'ppc', 'x86_64'):
                machine = 'fat3'
            elif archs == ('ppc64', 'x86_64'):
                machine = 'fat64'
            elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'):
                machine = 'universal'
            else:
                raise ValueError(
                   "Don't know machine value for archs=%r" % (archs,))

        elif machine == 'i386':
            # On OSX the machine type returned by uname is always the
            # 32-bit variant, even if the executable architecture is
            # the 64-bit variant
            if sys.maxsize >= 2**32:
                machine = 'x86_64'

        elif machine in ('PowerPC', 'Power_Macintosh'):
            # Pick a sane name for the PPC architecture.
            # See 'i386' case
            if sys.maxsize >= 2**32:
                machine = 'ppc64'
            else:
                machine = 'ppc'

    return (osname, release, machine)

SILENT KILLER Tool